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):
- programs que nunca uses
- programas que no quieres que un usuario que no sea root los use
- 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