[ El password ] [ Limitando el acceso de roto ] [ inetd.conf ] [ Tcp_wrappers ] [ services ] [ Nuevos puertos/servicios ] [ El firewall ] [ Actualizate! ]
Os presento aquí una serie de "herramientas" software que podemos usar para hacer nuestro sistema mas seguro. Están ordenadas de mas básicas a mas complejas.
En concreto
/etc/passwd. Este es el archivo mas ansiado (junto con el de los passwords
para internet) por los hackers, así que lo mejor será protegerlo.
Asegúrate
que sus permisos son:
-rw-r--r--
1 roto roto 239 Oct 31 1997 passwd
Instala el paquete shadow-utils, este paquete protege los passwords encriptándolos en otro archivo al que sólo tiene acceso roto, por lo que hacerse con el /etc/passwd no sirve de nada. Ademas para los pies a la mayoría de crakeadores de passwords. Aunque parezca una tontería, usar shadow passwords es una de las protecciones mas eficaces contra logins indeseados.
Truco: Elige passwords difíciles de averiguar, que contengan letras, números y caracteres, y si puede ser que la palabra no tenga sentido en ningún idioma. Por ejemplo mAKew3t$ es un buen password.
Truco: Usa el programa John The Ripper para testear la seguridad de tus passwords, si es capaz de crakearlos en pocas horas es que tu password no es seguro.
2. Limitando el acceso de roto:
El usuario
roto es siempre un peligro potencial. El sistema considera que roto sabe
perfectamente lo que hace por lo que ni siquiera pedirá confirmación
si por error formateamos el disco, imaginaos el desastre ...
Reduciendo
las vías de acceso de roto al sistema minimizamos riesgos a la vez
que nos forzamos a nosotros mismos a dejar de trabajar con roto.
Edita el archivo /etc/securetty y deja solo las consolas en las que quieres que roto pueda entrar. Este archivo contiene una lista de terminales (tty) en las que puede entrar roto, una por linea. Eliminando las lineas que no deseemos evitamos el acceso de roto a ese terminal.
Conozco sistemas en los que roto no puede hacer ningún login y la única manera que tiene de entrar al sistema es mediante el comando "su" que ademas solo puede ser ejecutado por un grupo muy reducido de usuarios. Sin llegar a este extremo, algo recomendable es dejar por ejemplo las tres primeras consolas para el acceso de roto.
Lo mejor seria que nunca se hiciese login como roto, en lugar de esto podemos usar el comando su para tener privilegios de roto momentáneamente, cambiar lo que haga falta y teclear exit para volver a ser usuario normal sin peligro de estropear nada.
Truco: Nunca,
nunca, nunca, dejes acceso por telnet a roto, elimina todas las entradas
con ttyp?
Truco: Estas
restricciones no protegen contra el uso del comando su!
Edita el
archivo /etc/inetd.conf y pon un '#' delante de todos los servicios que
no ofrezcas.
Recuerda
que esto se refiere los servicios que quieres DAR no a los que quieres
ACCEDER, o sea que para entrar en un ftp no necesitas tener abierto el
puerto ftp.
Truco: Lo
que no sepas que hace ciérralo!
Truco: Puedes
cerrar absolutamente todo. (Para entrar en algunas redes de IRC es necesario
abrir el puerto auth)
Truco: Algunos
ataques automatizados, tipo nukes y otros, buscan siempre el mismo puerto,
por ejemplo el 139 (net-bios). Si te ves obligado a dar este tipo de servicios
no seria una mala idea cambiar el puerto por defecto, esto se consigue
modificando en el /etc/services la linea correspondiente al servicio, en
nuestro caso podríamos substituir:
netbios-ssn 139/tcp nbssn
por:
netbios-ssn 140/tcp nbssn
Con esto pasamos a dar el servicio de net-bios por el puerto 140 y el 139 se cierra. Cuidado! Es muy probable que tengas que modificar los programas que usan net-bios para que sigan funcionando.
Información detallada en tcp_wrappers.htm
Para esto
necesitas tener instalado el paquete tcp_wrappers, lo puedes encontrar
en Cualquier ftp de linux y seguramente en el CD de tu distribución
ya compilado y pre-configurado.
Este software
permite filtrar todas las peticiones de acceso a tu máquina y permitirlas
o no en función de unas reglas que tu mismo pones.
Es importante saber que el puerto permanece abierto, lo que se cierra son las conexiones no autorizadas, por lo que tcp_wrappers no nos protegerá contra ataques como nukes ni esconderá el puerto ante un escaneado.
Uso de tcp_wrappers:
para filtrar un puerto a través de tcp_wrappers debes definir ese
puerto en el /etc/inetd.conf con una linea parecida a esta:
ftp stream
tcp nowait roto /usr/sbin/tcpd ftpd
Las reglas
que permiten o no el acceso se definen en /etc/hosts.allow (para las conexiones
aceptadas) y /etc/hosts.deny (para las rechazadas).
La sintaxis
es muy simple: puerto: host: comando
Ejemplo:
ftpd:
ALL: spawn ( /bin/echo -e "\nIntruso %a %n en %d" ; wave -l10 -d1 -f2000
) &
Esta linea,
en el /etc/hosts.allow filtra los accesos al puerto ftp (ftpd) de todo
el mundo (ALL) y después de permitirle el acceso realiza los siguientes
comandos (spawn):
/bin/echo
-e "\nIntruso %a %n en %d": Saca por pantalla un mensaje indicando los
datos del intruso y el puerto atacado.
wave -l10
-d1 -f2000: Emite un sonido por si no estas atento al mensaje.
Otro ejemplo
(un sistema cerrado a lo bestia):
ALL:
ALL: twist ( /usr/local/bin/teardrop %a ) &
Explicación:
a los accesos a Cualquier puerto (ALL) por parte de Cualquier persona (ALL)
deniega el acceso (twist) y lanza un teardop al curiosillo de turno.
Muchísima mas información en man inetd.conf, man tcpd, man hosts.allow
El orden en que se definen las reglas es importante, ya que tcp_wrappers las va examinado una a una desde la primera a la ultima hasta encontrar una regla que se cumple, momento en el que ejecuta el comando indicado. Por eso es necesario que las reglas estén ordenadas de mas permisivas a mas restrictivas, por ejemplo si en hosts.allow ponemos en la primera linea ALL: ALL: todas las conexiones serán aceptadas independientemente de que en lineas posteriores filtremos ciertos o no, captáis? si no e-mail me :)
Truco: Define
en /etc/hosts.allow los puertos a los servicios que quieras ofrecer y pon
en /etc/hosts.deny ALL: ALL
Truco: Los
parámetros permiten hacer cosas al intruso usando spawn ( programa
%a ) ... deja volar tu imaginación.
Truco: La
linea ALL: PARANOID detecta los intentos de spoof y similares.
Este archivo, localizado en /etc/services es una base de datos que contiene información sobre los puertos.
Es importante remarcar que no indica si un puerto esta abierto o cerrado, es solo una guía para que los programas sepan localizar los servicios y como responder a las peticiones. Por lo tanto en principio no debemos tocar nada de este archivo. El archivo donde se abren o cierran puertos es inetd.conf.
De forma "extraoficial" podemos comentar lineas para cerrar los puertos que definen. Atención! Este no es un método correcto y solo lo recomiendo en el caso de que el puerto implicado no sea definido en el inetd.conf y no podamos usar un firewall para protegerlo.
Podemos ver mas información en man services.
Juntando todo lo aprendido hasta aquí sobre servicios y puertos ya estamos en disposición de crear nuestros propios puertos con sus respectivos servicios.
Como sencillo ejemplo voy a crear un nuevo servicio en el puerto 22 que será atendido por un demonio telnet. Para distinguirlo del telnet normal (puerto 23) le llamaremos telnet2. Tenemos que modificar los siguientes archivos:
/etc/services: aquí añadimos el servicio, definiendo el puerto que usa y su nombre:
telnet2 22/tcp telnet2 # Telnet 2/etc/inetd.conf: aquí definimos las opciones y el demonio que atiende al nuevo servicio:
telnet2 stream tcp nowait roto /usr/sbin/tcpd in.telnetd2Usar in.telnetd2 en lugar de in.telnetd es un truquillo para poder distinguir fácilmente los dos servicios y poderlos configurar por separado, no olvides hacer un link de in.telnetd a in.telnetd2 (si no sabes como se hacen links no deberías estar leyendo esto, te remito al Manual básico, para los impacientes el comando es: ln -s origen destino, man ln).
/etc/hosts.allow: por supuesto, el nuevo servicio puede ser filtrado por tcp_wrappers para delimitar su accesibilidad:
in.telnetd2: ALL: twist ( echo -e "Acceso de %a en %d" > /dev/tty11 ) &7. El firewall:
El firewall
es uno de los sistemas de protección mas potente junto al uso de
tcp_wrappers. Para usarlo necesitaremos soporte firewall en el kernel,
esto se consigue fácilmente activando la casilla de
[*] Network
firewalls
[*] IP firewalling
durante
la configuración del kernel. Básicamente es solo esto Aunque
dependiendo de cada uno pueden hacer falta activar otras opciones (soporte
ethernet ...)
Compaginar
un firewall con la herramienta ipchains añade otro nivel de seguridad
a nuestro sistema. Recordad que los puertos protegidos por firewall no
se ven con un escaneado de puertos ni son sensibles a nukes ni exploits
(algunos scanners como nmap son capaces de reconocer puertos protegidos
por firewall) puesto que toda la información que se les envía
es sencillamente eliminada.
Para usar ipchains pon estas lineas en tu /etc/rc.d/rc.local:
/sbin/ipchains
-F
/sbin/ipchains
-I input -p tcp -s 127.0.0.1
/sbin/ipchains
-A input -p tcp -d 0.0.0.0/0 515 -j DENY
Esto nos
permite acceso total a nuestra propia maquina y limita los accesos al puerto
515 (el de la impresora) cosa que no podíamos hacer con tcp_wrappers.
Gracias
a Javi Polo por esto.
A partir de aquí las posibilidades de configuración son casi infinitas: detectar spoof, seleccionar los protocolos de entrada, salida, definir rangos de IPs "amigas" ... sean cuales sean tus necesidades hay una forma de cubrirlas con ipchains. Lee el ipchains-howto y el man ipchains para mas información.
En el caso de usar antiguos kernels de la serie 2.0.x se utiliza la herramienta ipfwadm, si este es tu caso pon estas lineas en tu /etc/rc.d/rc.local:
/sbin/ipfwadm
-I -f
/sbin/ipfwadm
-I -a a -S 127.0.0.1
/sbin/ipfwadm
-I -a d -P tcp -D 0.0.0.0/0 515
Truco: Un firewall permite tener control sobre puertos no definidos en el inetd.conf y por lo tanto fuera del alcance de tcp_wrappers.
Mantener
un sistema actualizado previene contra el ataque de exploits provocados
por bugs en el software.
Actualiza
el kernel siempre que aparezca una nueva versión estable, por ejemplo
el kernel 2.0.34 no es sensible a ninguno de los nukes conocidos a la hora
de realizar este documento. Si tu kernel es anterior estudia seriamente
la posibilidad de actualizarlo.
Actualiza
los demonios de todos los servicios que ofrezca tu máquina para
evitar sorpresas. La web de RootShell
es un buen sitio donde mantenerse informado.
Truco: Por algún motivo el IMAP y el sendmail son especialmente sensibles a exploits. Si usas alguno de los dos asegúrate de tener siempre la ultima versión disponible.
Truco: Si
te ves obligado a recibir conexiones por telnet estudia la posibilidad
de substituir este servicio por el SSH (Sechure SHell) mucho mas seguro
y con muchas posibilidades que el telnet tradicional.
[ Linux
Hack Zone ]
[ Zona
de Seguridad ] [ Zona de guerra ] [ Zona
de Espionaje ] [ Logística ]