foo
Conociendo
las herramientas mas basicas de seguridad en un sistema linux.
El objetivo de este articulo es proveer de un conocimiento basico sobre
como poder establecer un estandar de seguridad basica en un sistema
linux.
Haciendo mencion a las herramientas mas basicas y definiendolas
levemente, todos los enlaces externos estan en idioma español,
exceptuando las paginas de los proyectos donde no se da este soporte,
las paginas relativas a documentacion, ejemplos, etc, estan en
español a no ser que se espeficique lo contrario.
Se asume que el lector posee una experiencia minima como usuario de un
sistema Linux.
Un poco de informacion.
-
Introduccion
-Nota
importante.
-Permisos y administracion basica.
-Sobre
el software.
-Servicios y/o
demonios del sistema.
-Virus en Linux,
backdoors y similares.
Herramientas utiles.
-Nmap.
-Nessus.
-Iptables.
-Politicas
recomendadas.
-Un script de
ejemplo.
-Portsentry.
-Snort.
-Bastille.
-Iptraf.
Apuntes finales.
-Consideraciones
basicas.
-Notas de la
version.
-
Licencia.
Un poco de informacion.
El objetivo de este articulo es proveer de un conocimiento basico sobre
como poder establecer un estandar de seguridad basica en un sistema
linux.
Haciendo mencion a las herramientas mas basicas y definiendolas
levemente, todos los enlaces externos estan en idioma español,
exceptuando las paginas de los proyectos donde no se da este soporte,
las paginas relativas a documentacion, ejemplos, etc, estan en
español a no ser que se espeficique lo contrario.
Se asume que el lector posee una experiencia minima como usuario de un
sistema Linux.
Lo unico que pretende este documento es dar a conocer las
herramientas basicas para poder administrar la seguridad en un sistema
linux enfocado a un desktop o pequeño servidor donde no deberia
tenerse informacion sensible y/o con valor economico, puesto que esto
es solo un pequeño tutorial para "protegerse" de los ataques mas
molestos y persistentes (
sencillos y accesibles por cualquiera) que tambien
son el 99'9% de los casos que sufre un usuario "de a pie".
Linux es un sistema operativo orientado a trabajar por y para redes,
partiendo de esto la configuracion "perfecta" es totalmente aleatoria
dependiendo de los requerimientos y/o conocimientos del administrador
del sistema.
Por defecto un sistema linux recien instalado desde un cd suele ser muy
"accesible" y espera que a que el administrador defina las politicas de
seguridad y/o privacidad del sistema (exceptuando algunas
distribuciones,
muy pocas) en general esto es la norma.
- PERMISOS
Y ADMINISTRACION BASICA
Como dijimos antes, se asume que el lector posee unos conocimientos
basicos sobre el uso de un sistema Linux, basicamente lo que vamos a
tratar en este capitulo son una serie de directrices basicas para
cualquier sistema.
-No usar el usuario root de manera normal, controlar desde y que tipo
de accesos tiene root, puede entrar root en modo grafico, puede acceder
por remoto, puede acceder a determinados servicios de la maquina, estas
cuestiones son imprescindibles.
-Determinar como estan establecidos los permisos, recursivos, en que
directorios, en que archivos, son modificables, quien es el
propietario, que uid tiene, cuales son los privilegios del grupo y del
usuario respecto a ciertas partes del sistema.
-Crear entornos seguros, usando chown o chmod, LSTP o LDAP, comprobar
como se montan las particiones (ro , noexec, etc....)
-Servicios de la maquina como crontab, demonios varios,
reiniciar, longitud de las contraseñas, expiracion de las
mismas,
-Bloquear las cuentas de acceso sin login
(daemon, nobody, ftp,,,,)
-Controlar los acceso a nivel fisico ( gestores de arranque, discos
extraibles, etc...)
-Revisar siempre que se pueda los log's del sistema, comprueba las
fechas de acceso, ejecuccion, modificacion, etc... a determinados
ficheros (etc/passwd etc/shadow, etc.... ), verifica que no existan
archivos sin dueño.
En definitiva, no es facil mantener un sistema seguro, por eso parto de
una maxima que veras que se repite constantemente a lo largo del
documento: todo cerrado, solo se usa-abre algo cuando hace falta.
Hay que destacar que las versiones del software que se incluyen
en los cd suelen tener numerosos bugs en cuestion de semanas a partir
de
su lanzamiento, esto es normal y es un proceso natural en el codigo
abierto, no por ello linux es mas vulnerable que otros sitemas
operativos (microsoft® usa esos argumentos distorsionados de manera
deliberada), muy al contrario gracias a estos fallos que se conocen de
manera "
natural" y no
en paginas que la mayor parte de la veces son perseguidas por las leyes
y que generalmente infringen todo tipo de normas, leyes y etica
aceptable.
Una de las ventajas de linux, es que cuando aparece un bug
generalmente en menos de 24horas tendras la solucion, en linux la
politica de parches no es muy extendida, unicamente se usa en casos muy
determinados, generalmente hay nuevas versiones del mismo software con
el problema corregido (ventajas del codigo abierto) y por supuesto para
adquirir de manera gratuita y anonima.
Por supuesto el software se puede comprobar (y se debe) las firmas de
este, haciendo esto nos evitaremos instalar software que no sea
legitimo, se pueden firmar los paquetes con una clave md5, es la manera
mas sencilla pero tambien la que mas posiblidades de engaño
posee, cualquiera puede generar una llave md5, no asi con pgp, tambien
existen una serie de firmas y llaves para cada paquete de software, en
modo general instalar las llaves de los desarrolladores de los que nos
fiemos sera una buena opcion, o por lo menos comprobar que el md5 es
correcto.
Dicho esto se ha de pensar que es de vital importancia estar
actualizado en todo el software del sistema, prestando especial
atencion
a los paquetes de software que sirven para proporcionar servicios
relacionados con redes.
Todo esto lo puede hacer Linux por ti, en la mayoria de distribuciones
existen herramientas para comprobar actualizaciones de software cada X
tiempo, y si no disponemos de estas herramientas, podemos automatizar
el proceso (uso de cron y apt-get, o cron y yum, o cron y urpmi,
etc.....)
Estos son los programas que permiten trafico en nuestra maquina,
servidor http,
servidor ftp, telnet, cups, etc...
Cada servicio abre un puerto/s que da salida-entrada de trafico de
nuestra maquina, por
tanto debemos revisar que no tengamos ejecutandonse un demonio de
telnet, puesto
que si asi fuera estariamos dando servicio de telnet a la red, igual
con ftp,
http, etc,,,.
Desactivar todos los servicios que no sean necesarios.
Leer bien la documentacion de los servicios que tengamos que tener
funcionando
(por ejemplo: tenemos un server de ftp, pero solo accesible a users
registrados,
leyendo la documentacion podremos restringir el acceso anonimo,
determinar el
puerto, activar quotas, comandos personalizados para usuarios, i.p,
hosts, y un
sin fin de opciones. Realmente debemos leer muy bien la documentacion de
cualquier servicio que tengamos corriendo, puesto que algunas veces
algunas
opciones que estan establecidas por defecto, permiten acciones no
deseadas.
Existen numerosas maneras de conocer que demonios estan funcionando en
nuestra
maquina, hay que fijarse en el nivel de ejecucion.
Una lista mas o menos clara, de los puertos que usan los servicios la
teneis en /etc/services, por ejemplo, buscamos el puerto que deberia
usar mysql:
$grep mysql /etc/services
mysql
3306/tcp
# MySQL
mysql
3306/udp
# MySQL
$
Viendo este archivo nos podemos hacer una idea de si algun servicio
corre donde no deberia (rootkits p.ejm).
Por supuesto ver que puertos estan funcionando es de vital importancia
(ver man del comando netstat), debemos determinar que solo viendo la
salida de netstat no es posible decir si nuestro sistema es vulnerable,
si estan abiertos pero solo para una red local, o si simplemente estan
abiertos pero bloqueados, etc....
Para ver los servicios de nuestra maquina, tanto si estan activados
como si no, usaremos: service y chkconfig, con service podemos ver el
estado de cada uno de los servicios de nuestra maquina:
$service xinetd status
xinetd (pid 1926) está corriendo...
Recomiendo la lectura del manual de service, es muy sencillo y es casi
la unica manera de saber que servicios corren actualmente en nuestra
maquina, por supuesto que la mayoria de distribuciones usan front-ends
graficos de service y chkconfig, pero trabajar directamente sobre el
comando lo veo mas "limpio".
Chkconfig nos sera util para determinar que servicios se ejecutan en
segun que nivel de ejecuccion.
$chkconfig --list mysql
mysql
0:desactivado 1:desactivado
2:desactivado 3:desactivado
4:desactivado 5:desactivado 6:desactivado
La salida del comando es definitiva y esta muy clara, para cada nivel
de ejecuccion nos permite asignar un politica por defecto (el servicio
se inicia o no) , las opciones del comando son muy simples,
añadir servicios o eliminarlos, y modificar el nivel de
ejecuccion de cada servicio.
El uso de chkconfig nos lleva a la misma situacion que con service,
pero repito; prefiero conocer el comando que usar herramientas graficas
para cosas tan sencillas.
- VIRUS EN LINUX,
BACKDOORS Y SIMILARES
Nos vamos a centrar en dos partes exclusivamente, tomaremos como
ejemplo la tematica sobre los virus, pero hay que recordar que es
extensible a todo el codigo malicioso, puesto que al fin y al cabo se
trata de eso: software.
Mucho se habla de este tema , las mas comun de las afirmaciones es que
en Linux no existen virus, FALSO, por supuesto que existen virus, otra
cosa es que afecten de igual manera, y sobre todo la propagacion de
estos.
Basicamente un virus es un programa que hace algo, que modifica los
archivos del sistema para crear situaciones comprometidas, irregulares
o de inestabilidad, con perdida de datos, modificacion de estos, etc....
La estructura de un sistema linux no permite facilmente la propagacion
de codigo de este tipo, pero no por ello es imposible.
Nos deberiamos basar en una "escalada de privilegios" para poder
infectar todo un sistema, la mayor diferencia con otros sistemas
operativos reside precisamente aqui, un usuario normal puede ejecutar
codigo malicioso pero hasta donde puede llegar ese codigo es cuestion
de una situacion de permisos y politicas de seguridad.
Realmente un virus es algo muy sencillo de hacer, otro aspecto seria la
ejecuccion de este por parte de los usuarios y por supuesto el tema de
la propagacion , aunque llegados a este punto un virus que se propaga
es mas bien un gusano, pero no vamos a discutir sobre esto aqui.
El kit de la cuestion reside una vez mas en los permisos de usuarios,
particiones, etc,,, los permisos del sistema, si ejecutamos como root
un virus, indudablemente nos afectara a todo el sistema, pero si
ejecutamos un virus como un usuario (que deberia tener ciertas
restricciones) la infeccion puede ser nula o facilmente subsanable o en
el peor de los casos no comprometer directamente a la configuracion del
sistema pero si dejar algun servicio inactivo (por ejemplo una
particion de determinado usuario inutilizada, y en ella estan mas
directorios de usuarios, etc...)
Se parte de una maxima, no se instala software de manera casual, es
decir: comprobamos que tipo de software es, verificamos las firmas y la
procedencia, hay que recordar que un virus lo ejecuta alguien, no se
ejecuta solo, es decir: no por recibir un archivo infectado se puede
ejecutar el solo, aparte debera tener permisos, etc....
De todas maneras los virus en linux no estan muy extendidos, tal vez
por que los usuarios de un sistema Linux suele prestar mas atencion a
lo que descarga y de quien lo descarga , a lo que ejecuta y como lo
ejecuta, en definitiva a un politica de seguridad aceptable.
Un codigo de ejemplo de un virus muy simple, extraido de este
articulo:
#!/bin/bash
for foo in *
do
tail -4 $0 >> $foo
done
El ejemplo es sencillo pero ilustra bien un virus tipico, buscamos
todos los ficheros, y añadimos (tail -4 $0 >> $foo ) las 4
ultimas lineas a todos los archivos,las lineas son el mismo codigo del
script ($0) , y asi el ciclo se repite (bucle
for) para cada archivo (in *), esto tiene facil solucion y
evidentemente hay que ejecutarlo, si no...
Otro ejemplo mas destructivo es a la vez mas simple si cabe:
#!/bin/bash
cd /etc
for foo in *
do
rm -rf $foo
done
Aqui directamente borramos todos los archivos del directorio /etc, como
se puede ver son ejemplos muy sencillos, se podrian camuflar,
combinarlos con exploits y un largo etc,,,
¿Pero quien ejecuta esto en su maquina y como root?
Otra cuestion es si camuflamos ese codigo del virus, imaginemos que
poseemos un archivo fuente mas o menos grande, aproximadamente unas
2000 lineas, y que en esas 2000 lineas hay declaradas unas, digamos 800
variables.
var1="r"
sigue el codigo........................
if [ "$var670" == "0" ]; then
var657="m"
fi
sigue el codigo..........................
sigue el codigo..........................
$var324 $var1 $var657
sigue el codigo..........................
sigue el codigo..........................
Algo aparentemente inocente ( que la variable var1 sea r, o que si la
variable var670 cumple una condicion se le asigne un valor m a la
variable657 ) puede ser destructivo (rm) y provocar que el programa que
pensabamos que hacia una funcion, realmente haga otra muy distinta.
En estos casos solo podemos hacer dos cosas: o bien no ejecutamos nada
que no sea de nuestra confianza absoluta (la opcion mas recomendable) o
optamos por revisar el codigo fuente, tarea muy dificil en muchos
casos, por no decir imposible en otros.
Como la comunidad de usuarios de Linux es una comunidad abierta, este
tipo de practicas no son la norma, de todas maneras existen ejemplos
escandalosos (login.c del compilador famoso...el backdoor que se
intento colar en cierta version del kernel, etc...) y seguro que hay
programadores que se dedican a estas practicas, en definitiva que en un
sistema Linux SI existen los virus y el codigo malicioso.
Puede ver mas informacion sobre virus en linux en
este
articulo en español, de recomendable lectura si esta
intersado en este tema.
Partiendo de esto, la ejecuccion de codigo que no conocemos o
desconfiamos de el, no es una buena idea.
Una backdoor o un rootkit, troyano etc,,, basicamente viene abrir un
puerto y dar un determinado servicio por el.
Como en cualquier sistema operativo este tipo de programas tambien
existen en linux, la cuestion es la misma de antes, ¿ejecutamos
ese codigo?.
Como cualquier programa, para poder acceder al control total del
sistema nos haria falta ser root o tener uid 0, esto se consigue de la
misma manera que la actuacion de un virus, con lo que las cosas cambian
bastante de un sistema linux a otros sistemas.
Lo mismo pasaria con las bombas logicas, los sniffers no deseados,
keylogs y demas software considerado perjudicial para nuestro sistema.
Linux es mas seguro de eso no hay duda, de por que no proliferan virus,
rootkits, y demas software en este sistema; la explicacion creo que se
basa en algo fundamental, el codigo es abierto, con lo que todo el
mundo puede revisarlo, si alguien encuentra un virus, un rootkit, etc,,
en algun software inmediatamente sera denunciado, con lo que toda la
comunidad estara alerta de ese software y su programador, su sitio web,
su correo y en definitiva del entorno que rodea a estas practicas.
Herramientas utiles.
Una buena e inmejorable herramienta para controlar los puertos de
nuestra maquina es
nmap,
este es un
escaneador de puertos, la ventaja que tiene es que puede ultilizar
muchos tipos distintos de escaneo y opciones diversas, con nmap nos
podemos hacer una idea de que servicios estan corriendo en nuestra
maquina y por tanto que puertos estan en uso, de nuevo hay que destacar
que nmap mostrara los resultados desde una red local si lo hacemos
sobre
nosotros mismos, y esto no quiere decir que los puertos en uso sean
accesibles desde cualquier red y/o direccion.
Por supuesto es necesario leer bien la documentacion que
acompaña a el programa para no hacernos ideas equivocadas de lo
que pasa en nuestro sistema, nmap posee una interfaz grafica en forma
de
front-end (nmapfe) disponible
aqui.
Por supuesto mirando el man de nmap podremos ver el uso y opciones,
pero para los mas vaguetes aqui teneis un buen
tutorial.
Nessus es un escaner de puertos, pero tiene una particularidad que lo
hace especial, es capaz de determinar fallos de seguridad, ademas de
escaneranos el sistema nos descubre bug's de seguridad, (magnifico no?)
bueno, muchos fallos o estan desfasados o bien son un poco "paranoicos"
pero es una herramienta muy util de eso no hay duda.
Otra ventaja son sus plugins, actualizados cada poco tiempo, esto nos
permite tener una buena base de datos de vulnerabilidades cada vez que
las busquemos, tambien es capaz de generar informes, hacer lo que
queramos con ellos, crear estadisticas en formato html, etc...
Por si fuera poco nessus nos propone la solucion al poblema de
seguridad y una pequeña explicacion del mismo y su solucion.
Ademas de tener un magnifico
interfaz
grafico, en su
pagina
hay un trabajadisimo tutorial con capturas de pantalla incluidas de
como
instalar nessus paso a paso, pantalla a pantalla.
Iptables nos permite filtrar los paquetes que circulan por nuestra
maquina.
Para un usuario normal (desktop de casa sin informacion relevante o de
alto valor economico) con una buena admistracion de iptables sera mas
que suficiente para establecer un sistema seguro.
Iptables es para mi la llave maestra de la seguridad de mi sistema,
gracias a iptables podremos administrarlo muy bien.
Basicamente iptables nos permite modificar el trafico de
nuestra maquina, tanto por puertos, como por direcciones, mascaras, y
flujo de datos.
El gran kit de iptables, es que reside como una aplicacion directa al
kernel (esto no esta bien dicho ya lo se, pero no es el objetivo
de tutorial) es decir que no corre como un servicio o determinado
programa (vamos que no funciona como fucionan los firewalls de
haserchof)
si no que cuando llega un paquete al kernel, este decide que
hacer con el dependiendo de las reglas que tengamos aplicadas.
-Reglas FILTER:
Las reglas INPUT y OUTPUT, se usan para filtrar los
paquetes que van dirigidos a nuestra
maquina
FORWARD se usa para filtrar paquetes que van a otras
redes o maquinas.
-Reglas NAT:
PREROUTING, POSTROUTING, estas son reglas que se aplican ANTES que las
filter, se usan para rederigir puertos, direcciones y/ o hacer cambios
en las direcciones (servidores virtuales en otras maquinas de la red,
p.ejm: una red con maquina1 que da salida a internet, en esa red sin
conexion directa si no a traves de la maquina 1 tenemos maquina2, esta
proporciona a toda la red interna un servidor de impresion, y ademas
tenemos maquina3 que posee un servidor de ftp publico, para estos casos
las reglas NAT son casi imprescindibles, en otros casos (desktop
casero)
no son de gran importancia.
-Reglas MANGLE:
Existen otras reglas que van por encima de las NAT, son reglas para
modificar los paquetes, pero su conocimiento no es el ambito de este
tutorial.
Como base de toda operacion debemos tener clara una cosa:
Establecer conexion: maquina que
envia---->paquete flan=SYN---------->maquina que recibe
Conexion aceptada: maquina que
envia<---paquete flan=SYN/ACK<---maquina que recibe
Conexion rechada: maquina que
envia<----paquete flan=SYN<---------maquina que recibe
El orden de las reglas es determinante, puesto que las reglas se
"apilan" unas encima de otras, es decir la ultima puede no ser efectiva
al tener otra por "detras" que anule a esta.
Mas vale meter reglas por encima; NAT incluso MANGLE, que hacer muchas
chapuzas, tener en cuenta que con iptables se puede hacer casi
cualquier
cosa,
Documentacion a tener en cuenta:
Muy util pagina de
iptables y mas (en ingles) :
netfilter
El filtrado de paquetes
aqui
Man de iptables
(imprescindible)
Control de trafico y en
enrutamiento avanzado
aqui
Buen hilo con ejemplos
y explicaciones
aqui.
El how-to de Rusty Russell
en español
aqui.
Ejemplo de firewall con
iptables bien explicado
aqui.
Opciones de iptables
(pagina de redhat )
aqui.
Todo sobre iptables (en
ingles pero completisimo)
aqui.
Scripts avanzados de
ejemplo (en ingles)
aqui.
Este es un script para /etc/rc.d/rc.local, es decir que aplicara
todo lo que le digamos cuando arrranque el sistema (con el kernel ya
cargado, no desde un gestor) voy a explicar muy por encima lo que hace,
la idea es que se pueda ver claramente una politica aceptable de como
aplicar las reglas de iptables.
###--- Flush de reglas, esto digamos que es imprescindible :) ----###
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
###----- Aqui vamos a definir la politica por defecto-------###
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
### ------Comienzo de las reglas---------###
###-------- A localhost le dejamos todo --------###
/sbin/iptables -A INPUT -i lo -j ACCEPT
###------Con esto evitamos responder a un ping-----###
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
###------Con esto evitamos un tipo de ataque por filtrado de
bytes---###
iptables -A INPUT -i ppp0 -f -m length --length 0:40 -j DROP
###------Activamos el servidor solo para localhost----#
iptables -A INPUT -p tcp -s ! 127.0.0.1 --dport 80 -j DROP
###-----Ahora cerramos todo tanto por tcp como udp, desde el 1 al
1024---###
iptables -A INPUT -p tcp --dport 1:1024
iptables -A INPUT -p udp
--dport 1:1024
Con esto terminado, es un script muy simple pero practico e ilustrativo
de que con muy pocas lineas se puede construir un firewall basado en
iptables, ademas se puede ver el principio de
flexibilidad que tiene iptables, esto seria el tipico firewall de
ejemplo de uso de las funciones mas basicas.
Por otro lado tenemos la opcion de cerrar todo menos lo necesario, este
es el axioma en los administradores.
###--- Flush de reglas, esto digamos que es imprescindible :) ----###
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
###----- Aqui vamos a definir la politica por defecto-------###
ptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -p FORWARD ACCEPT
#Aplicando reglas en INPUT
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP
iptables -A INPUT -p tcp -s 10.0.0.1 -j ACCEPT
iptables -A INPUT -p udp -s 10.0.0.1 -j ACCEPT
iptables -A INPUT -p all -s 0.0.0.0/0 -j ACCEPT
iptables -A INPUT -p all -m state --state NEW,INVALID -j DROP
#Aplicando reglas en OUTPUT
iptables -A OUTPUT -p all -s 10.0.0.1 -j ACCEPT
iptables -A OUTPUT -p all -s 0.0.0.0/0 -j ACCEPT
#Aplicando reglas en FORWARD
iptables -A FORWARD -p all -m state --state NEW,INVALID -j DROP
Decididamente este tampoco es el mejor ejemplo, pero en este caso solo
confiamos en un maquina local ( El router ), todo lo demas esta
cerrado, y ademas rechazamos las conexiones no solicitadas,
iptables permite hacer muchisimas cosas y cada uno las hace a su
manera, pero con estos dos ejemplos mas o menos hemos echo lo mismo
pero con politicas distintas.
En la seccion de documentacion podeis ver muchos mas ejemplos y su
explicacion, por supuesto se puede hacer lo que se nos pase por la
cabeza, mirar la documentacion que es una buena recopilacion.
Este es un software que nos prestara muchisima ayuda, hemos visto que
con iptables podemos crear autenticos muros entre redes, un ejemplo
practico (y casi fue real) seria un script que actuase cuando se
necesita (unicamente permitir la salida-entrada de datos durante un
tiempo determinado y por una serie de puertos determinados, solo se
permiten conexiones para revisar-mandar correo (cada 15 minutos se
revisa el correo y se manda el saliente) despues toda la red esta
aislada, y cuando se conecta solo permite entrada por el 110 pop3 y
salida por 25 smtp).
Pero claro nuestro querido linux nos permite ir mucho mas lejos, una
manera de controlar ataques, sobre todo DoS y busqueda de agujeros de
seguridad (
escaneo de puertos, correr exploits
remotos para buscar vulnerabilidades del sistema, etc,,,,) es logeando
el acceso y el trafico de nuestra maquina, hay una herramienta
PORTSENTRY,
que nos va ha hacer la vida mas facil.
Con portsentry podremos actuar de una manera determinada conforme a una
serie de reglas que nosotros definimos, de manera que podremos actuar
contra ciertos tipos molestos de trafico (escaneado de puertos,
busqueda
de exploits, DoS y demas sutilezas), las reglas van a definir que hacer
con esas direcciones y/o paquetes, podemos ignorarlos,
redericcionarlos,
o ejecutar comandos, etc,, por ejemplo aplicarles una regla de
iptables a determinados comportamientos definidos
(escaneo de puertos= DROP
all -- 99.99.99.99
0.0.0.0/0 )
O lo que nos de la gana.
Logicamente esto lo hara de manera automatica, con lo que nos
despreocupamos de una cosa mas y sobre todo, controlamos un detalle
importante del sistema.
La utilidad de portsentry esta fuera de toda duda, eso si, hay que
actuar con cuidado cuando estamos detras de un servicio al publico,
puesto que no es tan flexible como
iptables,
de
todas maneras con portsentry se pueden configurar comportamientos del
sistema realmente anti-intrusion automatica
Portsentry posee niveles de actuacion distintos, independientemente de
las reglas que le apliquemos, es decir nosotros definimos una serie de
cosas en portsentry.conf
Ejemplo util de configuracion de portsentry
###-----Esta linea viene por defecto, indica los puertos a
monitorear---###
TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111, . . . , 40425,49724,54320"
UDP_PORTS="1,7,9,66,67,68,69,111,137,138, . . . ,32774,31337,54321"
.
.
.
.
###------Modificamos el ignore, para decidir que hacer con el
atacante----###
# 0 = Dont block UDP/TCP scans
# 1 = Block scan atacks
# 2 = Run external command only
BLOCK_UDP= "2"
BLOCK_TCP="2"
###-----Aqui definimos lo que hacer con la direccion, se manda
un mail a root avisando---###
KILL_RUN_CMD="/bin/echo '$TARGET$ -> $PORT$' | /usr/bin/Mail
-s 'ATACK $TARGET$' root"
Pero podemos definir que tipo de escucha queremos que realice, o bien
el modo clasico o estandart, con sus variantes (normal o steath, este
ultimo abarca un rango mayor de puertos) en el cual se monitorea los
puertos definidos en portsentry.conf y se realizan las acciones
determinadas, o bien con el modo avanzado, en este modo todo
parece cerrado y de echo casi lo esta, pero lo que hace es pedirle al
kernel que le notifique si llega alguna petición a algún
puerto menor al especificado en las opciones ADVANCED_PORTS_TCP
y ADVANCED_PORTS_UDP. Util para quitarnos trabajo
de encima, aunque cuidado con este modo.
De todas maneras en este mini tutorial esta bien explicado el uso de
portsentry, tambien tienes un articulo en la linea de linuxfocus, muy sencillo
de
entender.
Ademas podemos guardar log's, usarlo con tcpwraper
y
hacer muchas cosillas con el, eso ya es cosa de la imaginacion.
Snort es un sistema de deteccion de intrusos, este es un programa
complejo que permite hacer realmente maravillas, podemos dar servicio
al
mundo si que este nos vea, es un herramienta muy potente y que pronto
espero poder conocer a fondo.
Su funcionamiento es por reglas, en la
pagina de snort hay ya muchas reglas, y ademas
conforme se descubren nuevas vulnerabilidades se añaden, por
supuesto podemos modificarlas a nuestro antojo, tambien posee reglas
"internas" que podemos aplicar y modificar a nuestro gusto, snort
monitoriza todo tipo de trafico, dentro y fuera de un firewall, dentro
de la maquina, de las redes internas y externas (atentos a esto), vamos
que podemos hacer lo que queramos, si bien
portsentry
nos servia como un monitor de accesos y ejecucion de comandos internos,
snort se presenta como una solucion mucho mas avanzada y potente, sobre
todo para redes internas, puesto que es capaz de actuar directamente
sobre demonios incluso de correr como demonio el mismo.
La problematica de este programa es la enorme posibilidad de uso , por
lo que lo dificil sera como hacerlo para usar en conjuncion con otros
programas y que podamos extraerle el rendimiento del que es capaz,
tambien existe una manera sencilla usar las reglas actualizadas que
disponen en su pagina, mas que suficiente para un usuario desktop.
De todas maneras usando el man podemos ver casi todo lo relativo al
programa pero
aqui
teneis una explicacion de como crear nuevas reglas, en la
lista de correo de snort en español puedes
consultar y leer mucha informacion, dudas, enlaces, reglas, bug's etc...
Bastille es una herramienta que nos sirve para casi todo lo anterior,
pero que yo prefiero usar solo para algunas cosas (solo determinar
politicas de inicio en sistemas recien instalados, como bien indican en
su pagina web), basicamente nos permite configurar nuestra maquina para
crear una politica aceptable.
Bastille
por si sola es una herramienta capaz de hacer muchas cosas por
nosotros,
esta escrito en perl, pero posee una interfaz grafica basada en
tcl/tk, concretamente
perl::tk.
Una de las ventajas de bastille, es que nos hace un firewall mas o
menos personalizado, y lo hace de una manera muy amena, nos pregunta
cada opcion, y nos muestra informacion sobre nuestras decisiones, esto
es muy util en muchas preguntas, (sobre todo para gente que nunca ha
tocado la seguridad en un sistema linux).
Se divide en modulos, cada modulo consta de una serie de preguntas,
aqui algunas que te hara bastille.
-ipchains (obsoleto)
-Obtener parches (nos busca parches de bind, sendmail etc,,,
experimental)
-Permisos de archivos, de grupos y usuarios.(cuentas, directorios,
etc...)
-Arranque, parametros de seguridad.(contraseñas, logins, etc...)
-Seguridad en inetd (muy util funcion).
-Herramientas del sistema (permite determinar que pueden usar lso
usuarios, como, etc,,,)
-Uso de syslog muy practico.
-Control de demonios, (desde habilitar servidores para uso local,
cuentas ftp, ssh, sendmail, etc...)
En cada seccion hay una buena explicacion y serie de preguntas sobre
los aspectos de seguridad relevantes de la seccion (agujeros y
debilidades conocidas).
En defenitiva bastille se presenta como el unico firewall completo que
he visto, hay muchos basados en
iptables que
nos
permiten hacer eso, configurar iptables en modo grafico, otros para mas
cosas de
netfilter, y algunos que lo intentan juntar todo, pero bastille
sobresale con mucha diferencia, puesto que es muy transparente y sobre
efectivo, si buscas un firewall completo en modo grafico esto es lo
mejor que podras encontrar, recuerda que con iptables filtramos pero
con
bastille tambien seremos capaces de desactivar
servicios, opciones de estos
ultimos, logs, y control sobre permisos y ejecuciones en el sistema.
Bien, ahora ya tenemos un sistema como nosotros queremos, bueno pues
con
iptraf podremos testear que todo esta correcto,
esta herramienta nos permite ver con mucha transparencia el flujo de
datos de nuestra maquina o red, digamos que es imprescindible para
poder
ver con claridad que es lo que esta pasando por nuestra maquina.
Monitorea todo el trafico de red y ademas como es tonica :-) nos
permite adaptarlo a nuestras necesidades, monitorear por un rango de
ip,
por una ip concreta, por interfaz, etc,,,
Nos muestra toda la informacion de los paquetes que circulan por la red
y ademas podemos usar scripts tan practicos como
este para crear archivos de log's
importantes.
Iptraf es el sniffer definitivo, hay un front-end por algun sitio, lo
tengo guardado , pero la direccion donde lo encontre no existe
actualmente y por raro que parezca no encontre mas, si alguien lo
necesita que me lo pida y lo dejare en algun servidor.
En la
pagina
de iptraf hay numerosa documentacion.
No se ha pretendido hacer un estudio sobre la seguridad en un sistema
linux, es un tema muy amplio y muy documentado y tratado en
profundidad, lo que se pretendia es que el lector tuviera una idea de
lo mas basico respecto a seguridad, y a su vez conociera las
herramientas mas basicas.
De esta manera se pretende dar una base por donde empezar a
documentarse y orientarse respecto a la seguridad.
Y recuerda ningun sistema es 100% seguro mientras este conectado o se
tenga acceso fisico a el.
La mejor ocpion es estar al tanto de actualizaciones o de anuncios de
bug's o fallos graves de seguridad, otra opcion es subscribirse a
alguna
lista de correo y estar al tanto de lo que pasa, pero sobre todo,
recuerda muchas veces el fallo no es de la configuracion del sistema o
de la herramienta que usemos, si no de la torpeza de los propios
usuarios, y contra eso no podemos luchar, si alguien manda archivos de
M$ office por e-mail mal asunto , eso es una problema casi seguro, pero
el problema es que la gran mayoria lo hace, si tienes suerte y usas
linux pero emulas con wine (triste realidad, en muchos lugares) cuidado
con kmail, que te ejecutara todo, en fin la lista es interminable y no
podemos reproducirla aqui, pero espero que por lo menos sepas por donde
empezar a trabajar en el aspecto de la seguridad.
Copyrigth Xento Figal © 2003 - 2004
xento@users.sourceforge.net
Este documento se puede distribuir bajo licencia
GNU/FDL
Version 0.6 del 0.1
Version en html , html.tar.gz , ps.tar.gz en
http://xinfo.sourceforge.net/documentos/mini-sec/
Actualizaciones e hilos
http://xinfo.sourceforge.net/
EOF
2003 - 2005 (c) Xento Figal. Todos los contenidos bajo sus respectivas licencias: FDL/GPL -
www.gnu.org
Pagina generada en 0.0125 segundos