Introducción

Últimamente se están volviendo habituales los esfuerzos a gran escala para sabotear los ordenadores de internet. Los servidores con Linux y FreeBSD se han convertido en blanco de estos ataques, utilizando desbordamientos de buffer en los fuentes de imapd y BIND. Cada día, vulnerabilidades de todas formas y tamaños se reparten entre los casi 20.000 subscriptores de la lista de correo BUGTRAQ (si solo te subscribes a una lista de correo sobre seguridad, debería ser esta).

Sería sensato asumir que al menos uno de esos 19.305 subscriptores vaya a escribir un bucle for() y un poco de lógica alrededor de un ‘exploit’ cut+paste con las esperanza de lograr acceso ilegítimo a tantos ordenadores como sea posible.

Tarde o temprano, el bucle construirá la dirección de tu ordenador. Cuando llegue ese momento deberías estar preparado.

A pesar de lo que algunos “expertos” puedan hacerte creer, instalar y mantener un ordenador seguro no es algo díficil. Algunas prácticas bien conocidas en administración de sistemas sirven como protección de las amenazas de la red global. Este artículo describe algunas de las precauciones que generalmente tomo cuando configuro un sistema Linux RedHat conectado a la red. Aunque este artículo provee pautas para proteger tu ordenador de los intentos malvados de otros, no intenta ser una referencia completa.

Los siguientes son algunos pasos que evitarán que tu instalación caiga víctima del próximo hueco público en tu software de red.

ADVERTENCIA: Si no estás absolutamente seguro de lo que haces, no lo hagas. Algunos de estos pasos asumen un moderado grado de experiencia por tu parte. Al final daré la bibliografía recomendada.

Pasos para la seguridad

 

1. Quita todos lo servicios de red que no necesites. Menos maneras de conectarse a tu ordenador significan menos oportunidades de que un intruso penetre en él. Comenta todo lo que no necesites en /etc/inetd.conf. ¿No necesitas hacer telnet a tu sistema? Inhabilitalo. Lo mismo para ftpd, rshd, rexecd, gopher, chargen, echo, pop3d y similares. No olvides hacer un ‘killall -HUP inetd’ después de editar el fichero inetd.conf. Tampoco descuides el directorio /etc/rc.d/init.d. Algunos servicios de red (BIND, demonios de impresoras) son programas que se inician desde estos scripts.

2. Instala SSH. SSH es un sustituto para la mayoría de esos viejos comandos ‘r’ de Berkely. Lo siguiente está estraído de la página en http://www.cs.hut.fi/ssh:

Ssh (Secure Shell) es un programa para conectarse a otro ordenador en una red, para ejecutar comandos en una máquina remota, y para mover archivos de una máquina a otra. Proporciona autentificación fuerte y comunicaciones seguras sobre canales inseguros.

También realiza muchas otras cosas que cualquier aspirante a hacker encontrará interesantes. Bájate el SSH desde http://ftp.rge.com/pub/ssh.

3. Usa vipw(1) para bloquear las cuentas sin acceso a login. Fíjate que en RedHat Linux, las cuentas con un nombre de shell nulo inician sesión con la shell /bin/sh, que probablemente no es lo que quieres. También asegurate que ninguna de tus cuentas tenga password nulo. El siguiente es un ejemplo de como sería la parte de sistema de un fichero passwd correcto y seguro:

daemon:*:2:2:daemon:/sbin:/bin/sync
adm:*:3:4:adm:/var/adm:/bin/sync
lp:*:4:7:lp:/var/spool/lpd:/bin/sync
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/bin:/sync
halt:*:7:0:halt:/sbin:/bin:/sync
mail:*:8:12:mail:/var/spool/mail:/bin/sync
news:*:9:13:news:/var/spool/news:/bin/sync
uucp:*:10:14:uucp:/var/spool/uucp:/bin/sync
operator:*:11:0:operator:/root:/bin/sync
games:*:12:100:games:/usr/games:/bin/sync
gopher:*:13:30:gopher:/usr/lib/gopher-data:/bin/sync
ftp:*:14:50:FTP User:/home/ftp:/bin/sync
nobody:*:99:99:Nobody:/:/bin/sync

4. Quita los bits ‘s’ de los programas cuyo propietario sea el root y que no precisen de tal privilegio. Esto se hace ejecutando el comando ‘chmod a-s’ con el nombre o nombres de los archivos involucrados como argumentos.

Tales programas son (pero la lista no está completa):

  1. programs que nunca uses
  2. programas que no quieres que un usuario que no sea root los use
  3. programas que uses ocasionalmente, y no te importe tener que hacer un su(1) a root para ejecutarlos

He colocado un asterisco (*) al lado de cada programa que personalmente inhabilitaría. Recuerda que tu sistema necesita algunos programas con suid root para trabajar perfectamente, así que ten cuidado.

Alternativamente, podrías crear un grupo especial llamado ‘suidexec’, poner los usuarios en los que confías en este grupo, chgrp(1) el programa o programas dudosos que precisen del suid bit al grupo suidexec, y quitarle los permisos de ejecución global.

# find / -user root -perm "-u+s"
Comando Comentario
*/bin/ping    
*/bin/mount sólo el root debería montar sistemas de ficheros
*/bin/umount idem
/bin/su ¡no toques este!
/bin/login  
/sbin/pwdb_chkpwd  
*/sbin/cardctl utilidad de control para tarjetas PCMCIA
*/usr/bin/rcp Usa ssh
*/usr/bin/rlogin idem
*/usr/bin/rsh
*/usr/bin/at usa cron, o inhabilitalo del todo
*/usr/bin/lpq instala LPRNG
*/usr/bin/lpr
*/usr/bin/lprm
*/usr/bin/mh/inc  
*/usr/bin/mh/msgchk  
/usr/bin/passwd ¡no tocar!
*/usr/bin/suidperl cada nueva versión de suidperl parece tener un desbordamiento del buffer
*/usr/bin/sperl5.003 úsalo solo si es necesario
/usr/bin/procmail  
*/usr/bin/chfn  
*/usr/bin/chsh  
*/usr/bin/newgrp  
*/usr/bin/crontab  
*/usr/X11R6/bin/dga muchos desbordamientos de buffer como en X11
*/usr/X11R6/bin/xterm
*/usr/X11R6/bin/XF86_SVGA
*/usr/sbin/usernetctl  
/usr/sbin/sendmail  
*/usr/sbin/traceroute puedes soportar escribir el password de root de vez en cuando

5. Actualiza el sendmail. Baja el código fuente de ftp://ftp.sendmail.org/pub/sendmail. Desempaquetalo y lee las instrucciones. Instala el smrsh (empaquetado con sendmail) si tienes un par de minutos extras, este programa soluciona muchas de las cosas que interesan a la mayoría de la gente sobre el sendmail, tales como enviar emails a programas arbitrarios. Edita sendmail.cf y pon la opción ‘PrivacyOptions’ en ‘goaway’:

PrivacyOptions=goaway

Si no tienes previsto recibir correo de internet, ¡NO EJECUTES SENDMAIL EN EL MODO DE RECEPCIÓN (sendmail -bd)!. En este caso, deshabilita /etc/rc.d/init.d/sendmail.init y haz un ‘killall -TERM sendmail’. Con esto aún serás capaz de enviar email, pero no de recibir.

6. Actualiza BIND si lo usas. La última versión de BIND la puedes encontrar en http://www.isc.org . Si no lo usas deshabilitalo del todo.

7. Recompila el kernel. Generalmente lo hago para reducir el tamaño del kernel por defecto. CONSEJO: Activa todas las opciones de firewall incluso si tu ordenador no es un firewall.

CONFIG_FIREWALL=y
CONFIG_NET_ALIAS=y
CONFIG_INET=y
# CONFIG_IP_FORWARD is not set
# CONFIG_IP_MULTICAST is not set
CONFIG_SYN_COOKIES=y
CONFIG_RST_COOKIES=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_FIREWALL_VERBOSE=y
# CONFIG_IP_MASQUERADE is not set
# CONFIG_IP_TRANSPARENT_PROXY is not set
CONFIG_IP_ALWAYS_DEFRAG=y
CONFIG_IP_ACCT=y
# CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set
CONFIG_IP_ALIAS=m

8. Aplica los parches: Cualquier problema conocido con el software de RedHat se puede encontrar en las páginas de Errata de RedHat. (ver http://www.redhat.com/support/docs/errata.html para saber qué parches puedes aplicar a tu versión). RedHat hace un excelente trabajo de mantenimiento para mantener estas páginas actualizadas. Estas páginas incluyen también enlaces a los archivos RPM que necesitarás, junto con instrucciones de instalación.

9. Configura tcp_wrappers: Los tcp_wrappers son un método para controlar qué ordenadores en la red tienen permiso para hablar con el tuyo. Este paquete, escrito por el gurú en seguridad Wieste Venema, se coloca en frente de los programas que se ejecutan desde el inetd (o aquellos enlazados con su biblioteca) consultando sus archivos de configuración para determinar si deben negar o permitir una trasancción en la red. Por ejemplo, para permitir telnet y ftp desde tu casa vía un ISP, no permitiendo nada más, coloca lo siguiente en /etc/hosts.allow:

in.ftpd : .dialup.tu-isp.com : allow
all : all : deny

SSH, sendmail y otros paquetes pueden construirse con soporte para tcp_wrappers. Lee la página tcpd(1) del manual para más información.
Fuente: http://www.linux-es.org/node/16