46
Manual de Seguridad de Gentoo Kim Nielsen Autor John P. Davis Editor Eric R. Stockbridge Editor Carl Anderson Editor Jorge Paulo Editor Sven Vermeulen Editor Benny Chuang Editor Sune Jeppesen Editor Tiemo Kieft Editor Zack Gilburd Editor Dan Margolis Editor José Alberto Suárez López Editor Es John Christian Stoddart Editor Es José Luis Rivero Editor Es Postel Traductor Carles Ferrer Peris Traductor Actualizado 13 de junio, 2008 Contenido: Seguridad del sistema Fortalezca distintos elementos del sistema para hacerlo más seguro. Consideraciones previas a la instalación ¿Por qué la seguridad es una parte importante para cualquier administrador de servidores? 1. Ajustando la seguridad Ajustando la seguridad durante y después de la instalación 2. Gestión de registro Gentoo Linux le permite elegir entre 3 bitácoras distintas. 3. Montaje de particiones /etc/fstab proporciona algunas opciones de seguridad. 4. Limitaciones de usuario/grupo Control sobre el uso de los recursos. 5. Permisos de ficheros Asegurando los ficheros. 6. PAM (Pluggable Authentication Modules) Módulos de Autentificación Enlazables. 7. TCP Wrappers Envoltorios TCP. Control de acceso a los servicios. 8. Seguridad del Kernel Asegure el núcleo. 9. Asegurando los servicios Compruebe que los servicios son seguros. 10. Chroot o servidores virtuales Aisle los servidores. 11. Cortafuegos Filtre los paquetes. 12. Detección de intrusos Detecte intrusos. 13. Manteniendo el sistema actualizado 14. Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-... 1 de 46 19/11/09 21:50

Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

  • Upload
    others

  • View
    25

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Manual de Seguridad de GentooKim Nielsen AutorJohn P. Davis EditorEric R. Stockbridge EditorCarl Anderson EditorJorge Paulo EditorSven Vermeulen EditorBenny Chuang EditorSune Jeppesen EditorTiemo Kieft EditorZack Gilburd EditorDan Margolis EditorJosé Alberto Suárez López Editor EsJohn Christian Stoddart Editor EsJosé Luis Rivero Editor EsPostel TraductorCarles Ferrer Peris Traductor

Actualizado 13 de junio, 2008

Contenido:

Seguridad del sistemaFortalezca distintos elementos del sistema para hacerlo más seguro.

Consideraciones previas a la instalación¿Por qué la seguridad es una parte importante para cualquier administrador deservidores?

1.

Ajustando la seguridadAjustando la seguridad durante y después de la instalación

2.

Gestión de registroGentoo Linux le permite elegir entre 3 bitácoras distintas.

3.

Montaje de particiones/etc/fstab proporciona algunas opciones de seguridad.

4.

Limitaciones de usuario/grupoControl sobre el uso de los recursos.

5.

Permisos de ficherosAsegurando los ficheros.

6.

PAM (Pluggable Authentication Modules)Módulos de Autentificación Enlazables.

7.

TCP WrappersEnvoltorios TCP. Control de acceso a los servicios.

8.

Seguridad del KernelAsegure el núcleo.

9.

Asegurando los serviciosCompruebe que los servicios son seguros.

10.

Chroot o servidores virtualesAisle los servidores.

11.

CortafuegosFiltre los paquetes.

12.

Detección de intrusosDetecte intrusos.

13.

Manteniendo el sistema actualizado14.

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

1 de 46 19/11/09 21:50

Page 2: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Asegúrese de disponer de las últimas actualizaciones de seguridad.

A. Seguridad del sistema

1. Consideraciones previas a la instalación

1.a. Seguridad física

No importa cuantas medidas de seguridad implemente: todas pueden ser fácilmente traspasadaspor un atacante que tenga acceso físico a su equipo. A pesar de ello, puede tomar algunas medidasque proporcionan un nivel de seguridad contra atacantes con acceso físico a su equipo. Ubicar elhardware en un armario cerrado para servidores previene contra alguien que sencillamente apagueel equipo y se lo lleve. Cerrar con llave la caja del ordenador también es una buena idea paraasegurarse que el atacante no se vaya con el disco duro bajo el brazo. Para prevenir que unatacante arranque desde otro disco, burlando fácilmente sus permisos y restricciones de acceso,configure en la BIOS el disco duro como primer dispositivo de arranque y ponga una contraseña deacceso a la BIOS. También es importante establecer una contraseña de aranque para LILO o GRUB,y así prevenir que usuarios maliciosos arranquen en modo monousuario y consigan acceso total alsistema. Esto está más detallado en el Capítulo 3, en Contraseña para GRUB y Contraseña paraLILO.

1.b. Planificación de Demonios/Servicios

Empiece por documentar qué servicios deberá ejecutar este equipo. Esto le ayudará a definir mejorla estructura de particiones de su sistema, y le permitirá planificar mejor sus medidas de seguridad.Desde luego esto es innecesario si el equipo tiene un único y sencillo propósito, como un puesto detrabajo o un cortafuegos (firewall) dedicado. En todos estos casos no debería ejecutar ningúnservicio salvo, quizás, sshd.

Esta lista puede servirle de ayuda al administrador del sistema. Manteniendo una lista puesta al díade versiones encontrará mucho más sencillo mantenerlo todo actualizado si alguien descubre unavulnerabilidad remota en alguno de sus servicios.

1.c. Esquema de particiones

Reglas para crear particiones:

Cualquier árbol de directorios en el que un usuario tenga permiso de escritura (por ejemplo/home, /tmp) debería estar en una partición separada y usar cuotas de disco. Esto reduce elriesgo de que un usuario llene por completo el sistema de ficheros. Portage usa /var/tmppara compilar ficheros por lo que esta partición debería ser lo suficientemente grande.

Cualquier árbol de directorios donde quiera instalar software que no forme parte de ladistribución debería estar en una partición separada. Conforme a la Jerarquía estándar deficheros estos directorios serían /opt o /usr/local. Si ambos están en particiones separadasno haría falta borrarlos si tiene que reinstalar el sistema.

Para mayor seguridad, los datos estáticos pueden ponerse en una partición separada ymontada en modo de sólo lectura ("read-only"). El paranoico de verdad puede intentaralmacenar los datos estáticos en un medio de sólo lectura, como un CD-ROM.

1.d. El usuario root

El usuario root es el usuario más importante del sistema y no debería usarse para nada más que loestrictamente necesario. Si un atacante consigue acceso de root, reinstalar es la única forma devolver a confiar en su sistema.

Reglas de oro respecto a 'root'

Cree siempre un usuario para la gestión diaria y si este usuario necesita tener acceso de root,

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

2 de 46 19/11/09 21:50

Page 3: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

añádalo al grupo 'wheel'. Esto posibilita que un usuario normal pueda cambiar su ID a rootusando el comando su.

Nunca ejecute X u otro software de aplicación como root, root debe usarse sólo cuando seaabsolutamente necesario; si existe una vulnerabilidad en una aplicación ejecutándose comousuario, el atacante consigue el nivel de acceso del usuario. Pero si esta aplicación se ejecutacomo root, el atacate consigue acceso de root.

Use siempre rutas absolutas cuando se conecte como root (o use siempre su -, quereemplaza las variables de entorno del usuario con las de root, estando seguro que el PATH deroot sólo contiene directorios protegidos como /bin y /sbin). Es posible engañar a root paraque ejecute una aplicación distinta de aquella que pretendía ejecutar. Si el PATH de root estáprotegido o root sólo usa rutas absolutas, podemos estar seguros de que esto no sucede.

Si un usuario sólo necesita ejecutar algunos comandos, en lugar de todo lo que root puedehacer normalmente, considere usar sudo en su lugar. Pero, al final, ¡tenga cuidado a quién leda este acceso!

Nunca se deje abierta una terminal donde esté identificado como root.

Gentoo tiene algunas protecciones por defecto para los usuarios normales que intentan hacer su aroot. La configuración por defecto de PAM establece que un usuario debe pertenecer al grupo"wheel" para poder ser capaz de usar su.

1.e. Políticas de seguridad

Hay ciertas razones para diseñar un política de seguridad para su(s) sistema(s) y red.

Una buena política de seguridad le permite perfilar la seguridad como un "sistema", antes quesimplemente como un revoltijo de distintas características. Por ejemplo, sin una política unadministrador puede decidir desconectar el telnet, porque transmite las contraseñas sin cifrar,pero puede dejar el acceso FTP, que tiene el mismo problema. Una buena política deseguridad le permite identificar qué medidas de seguridad merecen la pena, y cuáles no.

Para diagnosticar problemas, realizar auditorías o localizar intrusos, puede ser necesariointerceptar el tráfico de la red, inspeccionar el acceso de los usuarios y su historial deejecución de comandos, y mirar en sus directorios locales. Sin especificar esto por escrito ysin advertirlo a los usuarios, tales acciones pueden ser actualmente ilegales, y ponerle a usteden un compromiso legal.

Uno de los escenarios más comunes en la seguridad del sistema son las cuentas de usuariosecuestradas. Sin explicar a los usuarios por qué es importante la seguridad, y cómo practicaruna buena seguridad (tal como no escribir las contraseñas en un "post-it" pegado en lamesa), es improbable que tenga alguna esperanza de tener cuentas de usuario seguras.

Una red bien documentada y un guión del sistema le ayudará, además de a los expertosforenses de las fuerzas de seguridad, si se necesitan, a seguir una intrusión y a identificar lospuntos débiles después del problema. La "publicación" de un aviso de uso, donde se expliqueque su sistema es privado y que los accesos no autorizados no están permitidos, podrátambién ayudarle a asegurarse la posibilidad para procesar correctamente a un intruso, unavez ha sido cogido.

La necesidad de una buena política de seguridad debería estar ahora más que clara.

La "política" o "directiva" por sí misma es un documento, o un conjunto de documentos, queperfilan las características de la red y los sistemas (como los servicios que proporcionan), el usopermitido y prohibido, los "buenos hábitos" de seguridad, y así sucesivamente. Todos los usuariosdeben ser concienciados de su política de seguridad, además de mantenerlos al corriente de loscambios que se introduzcan. Es importante tomarse el tiempo necesario para ayudar a los usuariosa comprender la política y por qué las políticas deben ser firmadas, o qué sucedería si ellos actúanen contra de las mismas (lo que también debe recogerse en las políticas). Esto debería hacerse porlo menos una vez al año pues las políticas pueden cambiar (pero también como un simplerecordatorio para el usuario).

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

3 de 46 19/11/09 21:50

Page 4: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Nota: Se deben crear políticas fáciles de leer y que sean muy precisas en cada apartado.

Una política de seguridad debería contener, al menos, los siguientes apartados:

Uso aceptable

Protectores de pantalla

Manejo de contraseñas

Descarga e instalación de software

Información sobre si los usuarios son monitorizados

Uso de programas antivirus

Manejo de información sensible (en cualquier formato, sea papel o sea electrónico)

Limpieza del escritorio y protección de la información confidencial

Apagado del PC antes de marcharse

Uso de cifrado

Manejo de claves para empleados de confianza

Tratamiento de los documentos confidenciales durante los viajes

Manejo de los equipos informáticos durante los viajes

Uso de los portátiles en los viajes y las estancias en los hoteles

Usuarios distintos pueden requerir distintos niveles o tipos de acceso, y como tal, su política puedevariar para acomodarse a todos ellos.

Las políticas de seguridad pueden convertirse en algo enorme, y resultar ser información vital quepuede fácilmente olvidarse. Las políticas para el equipo de TI pueden contener informaciónconfidencial para el usuario normal, por esto se pueden separar en políticas más pequeñas, comopor ejemplo, Política de uso aceptable, Política de contraseñas, Política de correo electrónico yacceso remoto.

Puede encontrar ejemplos de políticas en The SANS Security Policy Project. Si tiene una redpequeña y las encuentra demasiado complejas para su realidad, puede mirar en Site SecurityHandbook.

2. Ajustando la seguridad

2.a. Parámetros USE

El archivo make.conf contiene los parámetros USE definidas por el usuario y /etc/make.profile/make.defaults los parámetros USE por defecto para Gentoo Linux. Para el propósito de esta guía,las opciones importantes son pam (Pluggable Authentication Modules), tcpd (TCP wrappers) y ssl(Secure Socket Layer). Esas tres aparecen en los parámetros USE por defecto.

2.b. Proteger GRUB con contraseña

Grub soporta dos formas diferentes para añadir una contraseña de acceso a su fichero deconfiguración. La primera usa texto en claro, mientras que la segunda utiliza cifrado md5+salt.

Listado de Código 2.1: /boot/grub/grub.conf

timeout 5password cámbiame

Esto añadirá la contraseña cámbiame. Si no se teclea ninguna durante el arranque, GRUB usarásimplemente la configuración de arranque por defecto.

Cuando añada una contraseña md5, necesita convertirla en un formato cifrado con el mismo

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

4 de 46 19/11/09 21:50

Page 5: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

formato que se usa en /etc/shadow. Para más información mire man crypt. La contraseña cifradacámbiame, por ejemplo, se vería así $1$tDa3G0$ex6pzfebFmkeZrGRU1YWe0.

Puede cifrar su contraseña directamente en el shell de grub:

Listado de Código 2.2: md5crypt en el shell de grub

#/sbin/grub

GRUB version 0.92 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename. ]

grub> md5crypt

Password: ********(Tecleado cámbiame en el prompt)Encrypted: $1$tDa3G0$ex6pzfebFmkeZrGRU1YWe0

grub> quit

Entonces, corte y pegue la contraseña en /boot/grub/grub.conf.

Listado de Código 2.3: /boot/grub/grub.conf

timeout 5password --md5 $1$tDa3G0$ex6pzfebFmkeZrGRU1YWe0

Los 5 segundos de espera resultan prácticos si se trata de un sistema remoto y debería poderreiniciarse sin interacción con el teclado. Puede encontrar más información a cerca de lascontraseñas de GRUB ejecutando info grub.

2.c. Protegiendo LILO con contraseña

LILO también soporta dos formas de uso de contraseñas: global y por imagen, ambas en textoplano.

La contraseña global se establece en el inicio del fichero de configuración, y se aplica a cadaimagen de arranque:

Listado de Código 3.1: /etc/lilo.conf

password=cámbiamerestricteddelay=3

La contraseña por imagen se establece de la siguiente forma:

Listado de Código 3.2: /etc/lilo.conf

image=/boot/bzImage read-only password=cámbiame restricted

Si la opción restricted no es introducida, LILO pedirá la contraseña cada vez.

Para poder almacenar la nueva información en lilo.conf debe ejecutar /sbin/lilo.

2.d. Restricción de uso de la consola

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

5 de 46 19/11/09 21:50

Page 6: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

El fichero /etc/securetty le permite especificar desde qué dispositivos tty (terminales) tiene rootpermitido el inicio de sesión.

Le sugerimos que comente todas las líneas excepto vc/1 si está usando devfs y todas las líneasexcepto tty1 si está usando udev. Esto le asegurará que root sólo puede hacer un login y sólo enun terminal.

Nota: Los usuarios del grupo "wheel" podrán continuar haciendo su - para convertirse en root en otras TTYs.

Listado de Código 4.1: /etc/securetty

(Para devfs)vc/1(Para udev)tty1

3. Gestión de registro

3.a. Introducción

Puede conseguir un mayor nivel de detalle en sus registros de sistema para que indiquen un ataqueen curso o ya realizado. Los atacantes normalmente escudriñan o investigan las redes antes deactuar.

Es también de vital importancia que sus ficheros de registro de sistema sean fácilmente legibles ymanejables. Gentoo Linux le permite elegir durante la instalación entre tres tipos diferentes degestores de registro.

3.b. Gestión de registro: Syslogd

Syslogd es el gestor de registro más común para Linux y Unix en general. Incorpora algunasutilidades de rotación de logs, pero usar /usr/sbin/logrotate en una tarea programada (logrotatese configura en /etc/logrotate.conf) puede que sea más potente, puesto que logrotate tienemás prestaciones. Cuan a menudo se debe ejecutar la rotación de los registros dependerá de lacarga del sistema.

A continuación se encuentra el syslog.conf estándar con algunas características añadidas. Hemos"descomentado" las líneas cron y tty y añadido un gestor de registro remoto. Para mejorar laseguridad usted puede almacenar los registros en dos lugares.

Listado de Código 2.1: /etc/syslog.conf

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

6 de 46 19/11/09 21:50

Page 7: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

# /etc/syslog.conf Configuration file for syslogd.## For more information see syslog.conf(5)# manpage.# This is from Debian, we are using it for now# Daniel Robbins, 5/15/99

## Primero algunos ficheros de registro estándar. Registre por servicio.#

auth,authpriv.* /var/log/auth.log*.*;auth,authpriv.none -/var/log/syslogcron.* /var/log/cron.logdaemon.* -/var/log/daemon.logkern.* -/var/log/kern.loglpr.* -/var/log/lpr.logmail.* /var/log/mail.loguser.* -/var/log/user.loguucp.* -/var/log/uucp.loglocal6.debug /var/log/imapd.log

## Registro para el sistema de correo. Divídalo porque# es fácil escribir scripts para manejar estos ficheros. #mail.info -/var/log/mail.infomail.warn -/var/log/mail.warnmail.err /var/log/mail.err

# Registro para el servicio de news INN#news.crit /var/log/news/news.critnews.err /var/log/news/news.errnews.notice -/var/log/news/news.notice

## Algunos fichero de registro para todo lo demás#*.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug*.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages

## Las emergencias y alertas son enviadas a todos los# que han iniciado una sesión.#*.emerg **.=alert *

## Me gusta que los mensajes se muestren en la consola, pero sólo en una# consola virtual que normalmente dejo disponible.#daemon,mail.*;\ news.=crit;news.=err;news.=notice;\ *.=debug;*.=info;\ *.=notice;*.=warn /dev/tty8

# Configurando un servidor para gestionar el registro remotamente*.* @logserver

# La 'named pipe' /dev/xconsole es para la utilidad 'xconsole'. Para usarla,# debe llamar 'xconsole' con la opción '-file':# # $ xconsole -file /dev/xconsole [...]## NOTA: ajuste la siguiente lista, o podría volverse loco si tiene # un sitio medianamente ocupado...##daemon.*,mail.*;\# news.crit;news.err;news.notice;\

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

7 de 46 19/11/09 21:50

Page 8: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Los atacantes intentarán borrar sus huellas editando o borrando los ficheros de registro. Ustedpuede dificultarles la tarea enviando los registros a más de un servidor remoto en máquinasdistintas. Encuentre más información sobre syslogd ejecutando man syslog.

3.c. Gestión de registro: Metalog

El Metalog de Frank Dennis no puede enviar los registros a un servidor remoto, pero tiene comoventajas su rendimiento y flexibilidad. Puede registrar por nombre de programa, urgencia, servicio(como syslogd) e incorpora concordancia con expresiones regulares con las que puede ejecutarguiones ("scripts") externos cuando son encontradas determinadas pautas. Es muy bueno realizandoacciones cuando se necesitan.

La configuración estándar es normalmente suficiente. Si necesita notificar por correo electrónicocuando ocurre un fallo de contraseña puede utilizar uno de los siguientes guiones.

Para postfix:

Listado de Código 3.1: /usr/local/sbin/mail_pwd_failures.sh para postfix

#! /bin/shecho "$3" | mail -s "Warning (program : $2)" root

Para netqmail:

Listado de Código 3.2: /usr/local/sbin/mail_pwd_failures.sh para netqmail

#!/bin/shecho "To: rootSubject:Failure (Warning: $2) $3" | /var/qmail/bin/qmail-inject -f root

Recuerde hacer ejecutable el script con /bin/chmod +x /usr/local/sbin/mail_pwd_failures.sh.

Entonces "descomente" la línea de comando debajo de "Password failures" en /etc/metalog/metalog.conf tal que:

Listado de Código 3.3: /etc/metalog/metalog.conf

command = "/usr/local/sbin/mail_pwd_failures.sh"

3.d. Gestión de registro: Syslog-ng

Syslog-ng proporciona algunas de las mismas características que syslog y metalog con una pequeñadiferencia. Puede filtrar mensajes basándose en nivel y contenido (como metalog), proporcionagestión de registro remoto como syslog, mantiene registros de syslogd (incluso descriptores deSolaris), los envía a una TTY, ejecuta programas y puede actuar como un servidor de registro.Básicamente tiene lo mejor de los otros dos gestores de registro combinado con una configuraciónavanzada.

Seguidamente un fichero de configuración típico ligeramente modificado:

Listado de Código 4.1: /etc/syslog-ng/syslog-ng.conf

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

8 de 46 19/11/09 21:50

Page 9: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

options { chain_hostnames(off); sync(0); };

#origen donde leer el registrosource src { unix-stream("/dev/log"); internal(); };source kernsrc { file("/proc/kmsg"); };

#define los destinosdestination authlog { file("/var/log/auth.log"); };destination syslog { file("/var/log/syslog"); };destination cron { file("/var/log/cron.log"); };destination daemon { file("/var/log/daemon.log"); };destination kern { file("/var/log/kern.log"); };destination lpr { file("/var/log/lpr.log"); };destination user { file("/var/log/user.log"); };destination mail { file("/var/log/mail.log"); };

destination mailinfo { file("/var/log/mail.info"); };destination mailwarn { file("/var/log/mail.warn"); };destination mailerr { file("/var/log/mail.err"); };

destination newscrit { file("/var/log/news/news.crit"); };destination newserr { file("/var/log/news/news.err"); };destination newsnotice { file("/var/log/news/news.notice"); };

destination debug { file("/var/log/debug"); };destination messages { file("/var/log/messages"); };destination console { usertty("root"); };destination console_all { file("/dev/tty12"); };destination xconsole { pipe("/dev/xconsole"); };

#crea los filtrosfilter f_authpriv { facility(auth, authpriv); };filter f_syslog { not facility(authpriv, mail); };filter f_cron { facility(cron); };filter f_daemon { facility(daemon); };filter f_kern { facility(kern); };filter f_lpr { facility(lpr); };filter f_mail { facility(mail); };filter f_user { facility(user); };filter f_debug { not facility(auth, authpriv, news, mail); };filter f_messages { level(info..warn)

and not facility(auth, authpriv, mail, news); };filter f_emergency { level(emerg); };

filter f_info { level(info); };filter f_notice { level(notice); };filter f_warn { level(warn); };filter f_crit { level(crit); };filter f_err { level(err); };filter f_failed { match("failed"); };filter f_denied { match("denied"); };

#enlaza filtros con destinoslog { source(src); filter(f_authpriv); destination(authlog); };log { source(src); filter(f_syslog); destination(syslog); };log { source(src); filter(f_cron); destination(cron); };log { source(src); filter(f_daemon); destination(daemon); };log { source(kernsrc); filter(f_kern); destination(kern); };log { source(src); filter(f_lpr); destination(lpr); };log { source(src); filter(f_mail); destination(mail); };log { source(src); filter(f_user); destination(user); };log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };

log { source(src); filter(f_debug); destination(debug); };log { source(src); filter(f_messages); destination(messages); };log { source(src); filter(f_emergency); destination(console); };

#log por defectolog { source(src); destination(console_all); };

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

9 de 46 19/11/09 21:50

Page 10: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

syslog-ng es muy sencillo de configurar, pero también es muy fácil olvidar algo en el archivo deconfiguración, ya que es extenso. El autor promete algunas características extra como cifrado,autentificación, compresión y control MAC (Mandatory Access Control). Con esas opciones seconvertirá en el gestor de registro de red perfecto, ya que el atacante no podrá espiar en elregistro.

Y syslog-ng tiene otras ventajas: ¡no necesita ejecutarse como root!

3.e. Análisis de registros con Logcheck

Desde luego, mantener los registros sólo es la mitad del trabajo. Un programa como Logcheckpuede hacer mucho más fácil el análisis regular de los registros. Logcheck es un guión ("script"),acompañado de un binario llamado logtail, que se ejecuta desde el servicio de cron y compruebalos registros mediante una serie de reglas para detectar actividad sospechosa. Entonces, envía losresultados al buzón de correo de root.

Logcheck y logtail forman parte del paquete app-admin/logsentry.

Logcheck usa cuatro ficheros para separar las líneas del registro importantes de las que no lo son.Estos ficheros son logcheck.hacking, que contiene los mensajes conocidos de ataques dealteración (hacking), logcheck.violations, que contiene los patrones indicadores de compromisosde seguridad, logcheck.violations.ignore, con las palabras claves que probablementeemparejaría el fichero de compromisos de seguridad, pero que permiten que los registros normalessean ignorados, y logcheck.ignore, que casa todas aquellas entradas que deban ser ignoradas.

Aviso: No deje logcheck.violations.ignore vacío, Logcheck usa grep para analizar sintácticamente losregistros, y algunas versiones del mismo asumen que un fichero vacío significa un comodín: Todos loscompromisos de seguridad serían ignorados.

4. Montaje de particiones

4.a. Montaje de particiones

Al montar una partición ext2, ext3 o reiserfs tiene usted algunas opciones que puede aplicar enel fichero /etc/fstab. Las opciones son:

nosuid - Ignorará el bit SUID y actúa como si se tratase de un archivo ordinario

noexec - Deshabilitará la ejecución de ficheros en esta partición

nodev - Ignora dispositivos

Desafortunadamente, esas opciones pueden ser fácilmente burladas ejecutando una trayectoriaindirecta. Sin embargo, estableciendo /tmp como noexec parará la mayoría de los intentos deexplotación (exploits) diseñados para ser ejecutados directamente desde /tmp.

Listado de Código 1.1: /etc/fstab

/dev/sda1 /boot ext2 noauto,noatime 1 1/dev/sda2 none swap sw 0 0/dev/sda3 / reiserfs notail,noatime 0 0/dev/sda4 /tmp reiserfs notail,noatime,nodev,nosuid,noexec 0 0/dev/sda5 /var reiserfs notail,noatime,nodev 0 0/dev/sda6 /home reiserfs notail,noatime,nodev,nosuid 0 0/dev/sda7 /usr reiserfs notail,noatime,nodev,ro 0 0/dev/cdroms /cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0proc /proc proc defaults 0 0

Aviso: Estableciendo /tmp en modo noexec puede hacer que ciertos scripts no ejecuten correctamente.

Nota: Referente a las cuotas de disco mire la sección Cuotas.

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

10 de 46 19/11/09 21:50

Page 11: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Nota: Yo no configuro /var en modo noexec o nosuid, incluso si nunca se ejecutan ficheros desde este puntode montaje. La razón de esto es que netqmail se instala en /var/qmail y debe tener permitido ejecutar yacceder a un fichero SUID. Yo establezco /usr en modo de sólo lectura ya que nunca escribo nada en élexcepto cuando quiero actualizar Gentoo. Entonces vuelvo a montar el sistema de ficheros en modo de lectura-escritura, actualizo y lo vuelvo a montar nuevamente.

Nota: Incluso si usted no utiliza netqmail, Gentoo continua necesitando tener activado el bit de ejecución en/var/tmp ya que los ebuilds se construyen ahí. Pero se puede establecer una trayectoria alternativa si insiste entener /var montado en modo noexec.

5. Limitaciones de usuario/grupo

5.a. /etc/security/limits.conf

El control de uso de recursos puede ser muy efectivo para prevenir denegaciones de servicio localeso limitar el máximo de entradas permitidas a un grupo o usuario. Sin embargo, una configuracióndemasiado estricta puede dificultar el comportamiento del sistema y causar fallos en los programaspor lo que deberá asegurarse de comprobar primero cada configuración.

Listado de Código 1.1: /etc/security/limits.conf

* soft core 0* hard core 0* hard nproc 15* hard rss 10000* - maxlogins 2@dev hard core 100000@dev soft nproc 20@dev hard nproc 35@dev - maxlogins 10

Si quiere establecer nproc o maxlogins a 0, quizás sea mejor borrar el usuario. En el ejemploanterior se configura el grupo dev para procesos, fichero core y maxlogins. El resto se configuracon el valor predeterminado.

Nota: /etc/security/limits.conf forma parte del paquete PAM y será sólo aplicable a paquetes que utilicenPAM.

5.b. /etc/limits

/etc/limits es muy similar al fichero de limitaciones /etc/security/limits.conf. Las únicasdiferencias son el formato y que sólo trabaja con usuarios o comodines (no grupos). Echemos unvistazo a una configuración de ejemplo:

Listado de Código 2.1: /etc/limits

* L2 C0 U15 R10000kn L10 C100000 U35

Aquí establecemos la configuración por defecto y una configuración específica para el usuario kn.Limits forma parte del paquete sys-apps/shadow. No es necesario configurar ningún límite en estearchivo si usted ha habilitado pam en make.conf.

5.c. Cuotas

Aviso: Asegúrese que los sistemas de ficheros con los que trabaja soportan cuotas. Para utilizarlas conReiserFS debe parchear su kernel con los parches disponibles en Namesys. Las herramientas de usuario están

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

11 de 46 19/11/09 21:50

Page 12: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

disponibles en El proyecto Linux Cuota de Disco. Hasta que las cuotas no estén operativas con ReiserFS,debería encontrar otras alternativas mientras trate de utilizarlas. ¡Está avisado!

Establecer cuotas en un sistema de ficheros restringe el uso de disco en un esquema por usuario opor grupo. Las cuotas se habilitan en el kernel y se añaden a un punto de montaje en /etc/fstab.La opción del kernel se habilita en la configuración del kernel en File systems->Quota support.Aplique la siguiente configuración, recompile el kernel y reinicie usando el nuevo kernel.

Empiece instalando cuotas con emerge quota. Entonces modifique el /etc/fstab y añada usrquotay grpquota a las particiones en las que quiera restringir el uso de disco, como en el ejemplosiguiente.

Listado de Código 3.1: /etc/fstab

/dev/sda1 /boot ext2 noauto,noatime 1 1/dev/sda2 none swap sw 0 0/dev/sda3 / reiserfs notail,noatime 0 0/dev/sda4 /tmp ext3 noatime,nodev,nosuid,noexec,usrquota,grpquota 0 0/dev/sda5 /var ext3 noatime,nodev,usrquota,grpquota 0 0/dev/sda6 /home ext3 noatime,nodev,nosuid,usrquota,grpquota 0 0/dev/sda7 /usr reiserfs notail,noatime,nodev,ro 0 0/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0proc /proc proc defaults 0 0

En cada partición en la que haya establecido las cuotas, cree los ficheros de cuota (aquota.user yaquota.group) y guárdelos en la raíz de la partición.

Listado de Código 3.2: Crear los ficheros de cuota

# touch /tmp/aquota.user# touch /tmp/aquota.group# chmod 600 /tmp/aquota.user# chmod 600 /tmp/aquota.group

Este paso debe hacerse en cada partición en la que se hayan activado las cuotas. Después de añadiry configurar los ficheros de cuota, necesitamos añadir el guión quota al nivel de ejecución boot.

Importante: XFS hace todas las comprobaciones de cuota internamente, y no es necesario que se añada elguión quota al nivel de ejecución boot. Puede haber otros sistemas de ficheros no listados en este documentocon un comportamiento similar, así que es recomendable que lea las páginas de man de su sistema de ficherospara ver cómo maneja las comprobaciones de cutoa.

Listado de Código 3.3: Añadir cuotas al nivel de ejecución boot

# rc-update add quota boot

Ahora configuraremos el sistema para comprobar las cuotas una vez a la semana añadiendo lasiguiente línea a /etc/crontab:

Listado de Código 3.4: Añadir la comprobación de cuotas en crontab

0 3 * * 0 /usr/sbin/quotacheck -avug.

Después de reiniciar la máquina, es el momento para establecer las cuotas de usuarios y grupos.edquota -u kn ejecutará el editor definido en $EDITOR (por defecto es nano) y le permitirá editarla cuotas para el usuario kn. edquota -g hará lo mismo para los grupos.

Listado de Código 3.5: Configurar las cuotas para el usuario kn

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

12 de 46 19/11/09 21:50

Page 13: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Quotas for user kn:/dev/sda4: blocks in use: 2594, limits (soft = 5000, hard = 6500) inodes in use: 356, limits (soft = 1000, hard = 1500)

Para más detalles lea man edquota o el Quota mini howto.

5.d. /etc/login.defs

Si las políticas de seguridad indican que los usuarios deben cambiar su contraseña cada dossemanas, cambie el valor PASS_MAX_DAYS a 14 y PASS_WARN_AGE a 7. Es recomendable que use lacaducidad de contraseñas puesto que los ataques por fuerza bruta permiten encontrar cualquiercontraseña, es sólo cuestión de tiempo. También le alentamos a que establezca LOG_OK_LOGINS así.

5.e. /etc/login.access

El fichero login.access también pertenece al paquete sys-apps/shadow, que proporciona una tablade control de acceso. La tabla se usa para controlar quien puede y quien no puede accederbasándose en el nombre de usuario, nombre de grupo o nombre de host. Por defecto, todos losusuarios del sistema tienen permitido hacer login por lo que el fichero consiste sólo en comentariosy ejemplos. Si usted está asegurando su servidor o estación de trabajo, le recomendamos queconfigure este fichero para que nadie más que usted (el administrador) tenga acceso a la consola.

Nota: Esta configuración no se aplica al usuario root.

Listado de Código 5.1: /etc/login.access

-:ALL EXCEPT wheel sync:console-:wheel:ALL EXCEPT LOCAL .gentoo.org

Importante: Tenga cuidado cuando configure estas opciones, puesto que ciertos errores podrán impedirleacceder a la máquina si usted no tiene acceso de root.

Nota: Estas configuraciones no se aplican a SSH, puesto que SSH no ejecuta por defecto /bin/login. Pero sepuede habilitar usando UseLogin yes en /etc/ssh/sshd_config.

Esto permitirá a los miembros del grupo wheel el acceso local o desde el dominio gentoo.org. Puedeque sea paranoico, pero mejor prevenir que curar.

6. Permisos de ficheros

6.a. Lectura para todos

Los usuarios normales no deberían tener acceso a los archivos de configuración o contraseñas. Unatacante puede robar contraseñas de bases de datos o sitios web y usarlos para alterar --o inclusopeor, borrar-- datos. Por esto es importante que los permisos de ficheros sean correctos. Si ustedestá seguro que un archivo sólo es usado por root, asígnele los permisos 0600 y asigne el usuariocorrecto al fichero con chown.

6.b. Escritura para todos/grupos

Listado de Código 2.1: Buscando ficheros y directorios con escritura para todos

# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; 2>/dev/null >writable.txt# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \; 2>/dev/null >>writable.txt

Esto creará un fichero enorme con los permisos de todos los archivos que tienen tanto permiso de

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

13 de 46 19/11/09 21:50

Page 14: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

escritura para el grupo a para todos. Verifique los permisos y elimine los permisos de escritura paratodos ejecutando /bin/chmod o-w en cada fichero.

6.c. Ficheros SUID/SGID

Los ficheros con el bit SUID o SGID habilitado se ejecutan con los privilegios del usuario o grupopropietario y no del usuario que ejecuta el archivo. Normalmente esos bits se usan en archivos quenecesitan ejecutarse como root para hacer su labor. Esos archivos pueden provocar un compromisode root (si contienen agujeros de seguridad). Los ficheros con el bit SUID o SGID activado resultanpeligrosos y deberían ser evitados a toda costa. Si usted no usa estos ficheros utilice en ellos chmod0 o desinstale (unmerge) el paquete de donde provienen (verifique a qué paquete pertenecenusando equery; si todavía no lo tiene instalado simplemente escriba emerge gentoolkit). Encualquier caso, basta desactivar el bit SUID con chmod -s.

Listado de Código 3.1: Buscando ficheros setuid

# find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -lg {} \; 2>/dev/null >suidfiles.txt

Esto creará un archivo conteniendo la lista de los ficheros SUID/SGID.

Listado de Código 3.2: Listado de los binarios setuid

/bin/su/bin/ping/bin/mount/bin/umount/var/qmail/bin/qmail-queue/usr/bin/chfn/usr/bin/chsh/usr/bin/crontab/usr/bin/chage/usr/bin/expiry/usr/bin/sperl5.6.1/usr/bin/newgrp/usr/bin/passwd/usr/bin/gpasswd/usr/bin/procmail/usr/bin/suidperl/usr/lib/misc/pt_chown/usr/sbin/unix_chkpwd/usr/sbin/traceroute/usr/sbin/pwdb_chkpwd

Por defecto, Gentoo Linux no tiene muchos ficheros SUID (aunque depende de lo que hayainstalado), pero usted debería obtener una lista similar a la anterior. Muchos de los comandos nodeben ser utilizados por los usuarios normales, sólo por root. Desactive el bit SUID en ping, mount,umount, chfn, chsh, newgrp, suidperl, pt_chown y traceroute usando chmod -s en cada fichero.No desactive el bit en su, qmail-queue o unix_chkpwd. Desactivar setuid de estos ficheros leimpedirá hacer 'su' y recibir correo. Desactivando el bit (donde es seguro hacerlo) usted elimina laposibilidad de que un usuario normal (o un atacante) consiga acceso de root a través de estosarchivos.

Los únicos ficheros SUID que tengo en mi sistema són su, passwd, gpasswd, qmail-queue,unix_chkpwd y pwdb_chkpwd. Pero si usted está ejecutando X, necesita tener alguno más, puestoque X necesita el privilegiado acceso proporcionado por SUID.

6.d. Binarios SUID/SGID y enlaces rígidos

Sólo se considera borrado un fichero cuando no tiene más enlaces apuntándole. Esto podría sonar unpoco raro, pero tenga en cuenta que un nombre de fichero como /usr/bin/perl es actualmente unenlace a el inodo donde los datos están almacenados. Cualquier número de enlaces puede apuntar

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

14 de 46 19/11/09 21:50

Page 15: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

al fichero, y sólo hasta el último de ellos no desaparezca, el fichero continua existiendo.

Si sus usuarios tienen acceso a una partición que no está montada con nosuid o noexec (porejemplo, si /tmp, /home o /var/tmp no están en particiones separadas) debe tener cuidadoasegurándose que sus usuarios no creen enlaces rígidos (hardlinks, en inglés) a binarios SUID oSGID, porque después que Portage los haya actualizado, los usuarios continuarían teniendo acceso alas versiones antiguas.

Aviso: Si ha recibido una advertencia de Portage acerca de que quedan enlaces rígidos, y sus usuarios puedenescribir en una partición que permita la ejecución de ficheros SUID/SGID, deberá leer esta seccióncuidadosamente. Uno de sus usuarios podría intentar burlar una actualización manteniendo una versiónantigua de un programa. Si sus usuarios no crean sus propios ficheros SUID, o sólo pueden ejecutarprogramas mediante el cargador dinámico (particiones montadas como noexec), no tiene por qué preocuparse.

Nota: Los usuarios no necesitan acceso de lectura a un fichero para enlazarlo, sólo necesitan permiso delectura al directorio que lo contiene.

Para comprobar cuantos enlaces a ficheros tiene, puede usar el comando stat.

Listado de Código 4.1: Comando stat

$ stat /bin/su File: `/bin/su' Size: 29350 Blocks: 64 IO Block: 131072 regular fileDevice: 900h/2304d Inode: 2057419 Links: 1Access: (4711/-rws--x--x) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2005-02-07 01:59:35.000000000 +0000Modify: 2004-11-04 01:46:17.000000000 +0000Change: 2004-11-04 01:46:17.000000000 +0000

Para encontrar los ficheros SUID y SGID con múltiples enlaces, puede usar find.

Listado de Código 4.2: Buscar binarios suid/sgid multi-enlazados

$ find / -type f \( -perm -004000 -o -perm -002000 \) -links +1 -ls

7. PAM (Pluggable Authentication Modules)

7.a. PAM (Pluggable Authentication Modules)

PAM, o Módulos de Autentificación Enlazables, es un conjunto de librerías compartidas queproporcionan una forma alternativa para la autentificación de usuarios en los programas. Elparámetro USE pam está activado por defecto. Los parámetros de PAM en Gentoo Linux sonbastante razonables, pero siempre se puede mejorar. Primero instale cracklib.

Listado de Código 1.1: Instalación de cracklib

# emerge cracklib

Listado de Código 1.2: /etc/pam.d/passwd

auth required pam_unix.so shadow nullokaccount required pam_unix.sopassword required pam_cracklib.so difok=3 retry=3 minlen=8 dcredit=-2 ocredit=-2password required pam_unix.so md5 use_authtoksession required pam_unix.so

Lo que añadirá cracklib y obligará a los usuarios a que utilicen una contraseña con un mínimo de 8caracteres y que contenga como mínimo 2 números, 2 caracteres de otro tipo y que hayan al menos3 caracteres distintos respecto a la última contraseña. Lo que fuerza al usuario a elegir una buena

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

15 de 46 19/11/09 21:50

Page 16: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

contraseña (política de contraseñas). Revise la documentación de PAM para más opciones.

Listado de Código 1.3: /etc/pam.d/sshd

auth required pam_unix.so nullokauth required pam_shells.soauth required pam_nologin.soauth required pam_env.soaccount required pam_unix.sopassword required pam_cracklib.so difok=3 retry=3 minlen=8 dcredit=-2 ocredit=-2 use_authtokpassword required pam_unix.so shadow md5session required pam_unix.sosession required pam_limits.so

Cada servicio no configurado con un fichero PAM en /etc/pam.d utilizará las reglas de /etc/pam.d/other. Los parámetros por defecto se establecen a deny, como debería ser. Pero me gusta tenermuchos logs y esto es por lo que he añadido pam_warn.so. La última configuración es pam_limitsque está controlada por /etc/security/limits.conf. Mire la sección /etc/security/limits.conf paramás detalles acerca de estas opciones.

Listado de Código 1.4: /etc/pam.d/other

auth required pam_deny.soauth required pam_warn.soaccount required pam_deny.soaccount required pam_warn.sopassword required pam_deny.so password required pam_warn.so session required pam_deny.so session required pam_warn.so

8. TCP Wrappers

8.a. TCP Wrappers

Esta es una forma de controlar el acceso a los servicios normalmente ejecutados por inetd (del queGentoo no dispone) pero que también puede ser usado por xinetd y otros servicios.

Nota: El servicio debería ejecutar tcpd en su argumento de servidor (en xinetd). Vea el capítulo de xinetd paramás información.

Listado de Código 1.1: /etc/hosts.deny

ALL:PARANOID

Listado de Código 1.2: /etc/hosts.allow

ALL: LOCAL @wheeltime: LOCAL, .gentoo.org

Como puede ver el formato es muy similar al de /etc/login.access. Tcpd soporta un servicioespecífico; no se solapa con /etc/login.access. Estas configuraciones sólo se aplican a losservicios que utilizan tcp wrappers.

También es posible ejecutar comandos cuando se accede a un servicio (puede ser usado cuando seactiva el reenvío de llamadas entrantes de usuarios) pero no se recomienda, puesto que se tiende acrear más problemas de los que está tratando de resolver. Un ejemplo podría ser cuando configuraun guión ("script") para enviar un mensaje cada vez que alguien entre en un regla de denegación(deny rule), entonces un atacante puede lanzar un ataque de denegación de servicio (DoS) quebusque activar dicha regla de denegación. Esto creará un montón de I/O y mensajes. Por tanto ¡no

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

16 de 46 19/11/09 21:50

Page 17: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

lo haga! Lea man 5 hosts_access para más información.

9. Seguridad del Kernel

9.a. Eliminando funcionalidad

La regla básica cuando se configura el kernel es eliminar todo lo que no se necesite. Esto no crearásólo un kernel pequeño sino también eliminará las vulnerabilidades que puedan encontrarse endrivers y otras características.

Considere también desactivar el soporte para módulos cargables. Aunque incluso es posible añadir"root kits" sin esta característica activada, se hace más difícil para los atacantes normales instalar"root kits" sin poder hacerlo a través de módulos del kernel.

9.b. El sistema de ficheros proc

Muchos de los parámetros del kernel pueden cambiarse a través del sistema de ficheros /proc ousando sysctl.

Para cambiar dinámicamente parámetros y variables del núcleo al vuelo necesita tener definidoCONFIG_SYSCTL en el kernel. Lo que está activado por defecto en un kernel 2.4 estándar.

Listado de Código 2.1: Desactivar IP forwarding

# /bin/echo "0" > /proc/sys/net/ipv4/ip_forward

Asegúrese que IP forwarding está desactivado. Sólo lo queremos en un equipo que tenga más deuna conexión de red ("multi-homed host"). Le advertimos que active o desactive este parámetroantes que cualquier otro, puesto que también activa/desactiva otros parámetros.

Listado de Código 2.2: Descartar los paquetes de ping

# /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

Esto hará que el kernel simplemente ignore todos los mensajes de ping (también conocidos comomensajes ICMP tipo 0). La razón para hacer esto está en que el paquete IP que lleva el mensajeICMP puede contener información distinta de la que debería. Los administradores usan ping comouna herramienta de diagnóstico y frecuentemente se quejan si se deshabilita, pero no hay ningunarazón para que alguien desde fuera pueda mandar un ping. Sin embargo, a veces puede ser prácticoque desde dentro sí se puedan hacer pings, entonces lo que puede hacer es deshabilitar el ICMP tipo0 en el cortafuegos (permitiendo continuar utilizando esta herramienta a los administradoreslocales).

Listado de Código 2.3: Ignorar pings de broadcast

# /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Esto deshabilita la respuesta a "broadcasts" ICMP y prevendrá de ataques "Smurf". El ataque Smurfconsiste en enviar un ICMP tipo 0 (ping) a la dirección de broadcast de una red. Por regla general elatacante usará una dirección de origen falseada ("spoofed"). Todos los ordenadores de la redresponderán al mensaje de ping y de ese modo inundarán al host cuya dirección se ha falsificado.

Listado de Código 2.4: Deshabilitar paquetes enrutados desde el origen

# /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

No acepte paquetes enrutados desde el origen. Los atacantes pueden usar enrutamiento desde elorigen para generar tráfico que pretende ser originado dentro de su red, pero que es actualmenteenrutando hacia el origen por el camino por el que ha venido, de esta forma los atacantes pueden

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

17 de 46 19/11/09 21:50

Page 18: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

comprometer su red. El enrutamiento desde el origen es raramente utilizado para fines legítimos,por ello es seguro desactivarlo.

Listado de Código 2.5: Deshabilitar la aceptación de redirección

# /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

No acepte paquetes de redirección ICMP. La redirección ICMP puede ser usada para alterar sustablas de enrutamiento, posiblemente con una una mala finalidad.

Listado de Código 2.6: Protección contra mensajes de error falsos

# /bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

Habilite la protección contra respuestas de mensajes de error falsos.

Listado de Código 2.7: Activar el filtrado inverso de paths

# for i in /proc/sys/net/ipv4/conf/*; do /bin/echo "1" > $i/rp_filterdone

Active el filtrado inverso para trayectorias. Esto ayuda a estar seguros que los paquetes usan unadirección de origen legítima rechazando automáticamente los paquetes entrantes si la entradacorrespondiente a la dirección origen en la tabla de enrutamiento no coincide con la interfaz de redpor la que llegan. Lo cual tiene ventajas de seguridad porque previene el falseamiento de IP ("IPspoofing"). Necesitamos activarlo en cada net/ipv4/conf/*, puesto que en caso contrario lavalidación del origen no es totalmente funcional.

Aviso: No obstante, activar el filtrado inverso de paths puede ser un problema si usted utiliza el enrutamientoasimétrico (los paquetes que usted envía a un host toman un camino diferente que los paquetes que le envía austed ese host) o si opera en un host que no enruta y que tiene varias direcciones IP en distintas interfaces.

Listado de Código 2.8: Registre todos los paquetes falsificados (spoofed), enrutados en el origen ypaquetes de redirección

# /bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

Registre todos los paquetes falsificados (spoofed), enrutados en el origen y paquetes de redirección.

Todos estos ajustes se perderán cuando la máquina se reinicie. Le sugiero que los añada a/etc/sysctl.conf el cual es automáticamente inicializado por el guión de inicio /etc/init.d/bootmisc.

La sintaxis para /etc/sysctl.conf es bastante simple. Elimine el /proc/sys/ de los pathsanteriormente mencionados y sustituya / por .:

Listado de Código 2.9: Trasladar sysctl.conf

(Uso manual de echo):/bin/echo "0" > /proc/sys/net/ipv4/ip_forward

(Automático en sysctl.conf:)net.ipv4.ip_forward = 0

9.c. Grsecurity

El parche de Grsecurity es un estándar en las fuentes del núcleo sys-kernel/hardened-sourcespero está deshabilitado por defecto. Configure su núcleo como lo hace normalmente y luegoconfigure las opciones de Grsecurity. Una explicación en profundidad de las opciones disponibles en

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

18 de 46 19/11/09 21:50

Page 19: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Grsecurity (versión 1.9) está disponible en la página del proyecto Gentoo Hardened.

Las recientes hardened-sources proporcionan la versión 2.* de Grsecurity. Para más informaciónde este parche de Grsecurity mejorado, por favor consulte la documentación disponible enGrsecurity home page.

9.d. Kerneli

Kerneli es un parche que añade cifrado al kernel existente. Parcheando el kernel conseguiremosnuevas opciones como cifradores criptográficos, algoritmos digest y bucles de filtros criptográficos.

Aviso: Actualmente el parche kerneli no es una versión estable en el último kernel, por tanto tenga cuidadocuando lo use.

9.e. Otros parches para el kernel

El proyecto OpenWall

Sistema de detección de intrusos en Linux

Conjunto de reglas de control de acceso

Mejoras de seguridad en el kernel de la NSA (agencia de seguridad estadounidense)

Wolk

Y probablemente haya bastantes más.

10. Asegurando los servicios

10.a. Apache

Apache viene con un más que decente fichero de configuración pero todavía necesitamos mejoraralgunas cosas, como enlazar Apache a una dirección y prevenir fugas de información. A continuaciónse describen las opciones que debería aplicar en el fichero de configuración:

Si usted no deshabilita ssl en su /etc/make.conf antes de instalar Apache, debería tenerhabilitado el acceso al servidor mediante ssl. Dentro de /etc/apache2/vhosts.d podemosencontrar archivos con ejemplos de configuración. Estos son ejemplos funcionales y es mejorverificarlos o deshabilitarlos.

Es importante definir en el archivo de configuració que se escuche a una dirección IP en particular(en vez de todas las direcciones IP de su sistema). Por ejemplo, en el archivo00_default_vhost.conf:

Listado de Código 1.1: /etc/apache2/vhosts.d/00_default_vhost.conf

# Make it listen on your ipListen 127.0.0.1

También recomendamos que deshabilite el despliegue de información sobre la instalación Apache alresto del mundo. Por defecto, la configuración agregará la versión del servidor y nombre delanfitrión virtual a las páginas generadas por el servidor. Para desactivar esta característica, cambiela variable ServerSignature a Off:

Listado de Código 1.2: /etc/apache2/modules.d/00_default_settings.conf

ServerSignature Off

Apache está compilado con --enable-shared=max y --enable-module=all. Esto activará pordefecto todos los módulos, así que puede "comentar" todos los módulos en la sección LoadModule

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

19 de 46 19/11/09 21:50

Page 20: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

(LoadModule y AddModule) que no use en el archivo principal de configuración /etc/apache2/httpd.conf. Reinicie el servicio ejecutando /etc/init.d/apache restart.

Puede encontrar más información en http://www.apache.org.

10.b. Bind

Puede encontrar información en Internet Software Consortium. El Manual de referencia deladministrador en BIND 9 lo puede encontrar también en doc/arm.

Los nuevos "ebuilds" de BIND soportan el chrooting fuera del entorno. Después de instalar(emerge) bind siga estos sencillos pasos:

Listado de Código 2.1: Chrooting BIND

# emerge --config bind(Antes de ejecutar el comando anterior debe tratar de cambiar)(el directorio de chroot en /etc/conf.d/named.)(En caso contrario será usado /chroot/dns.)

10.c. Djbdns

Djbdns es una implementación de DNS en cuya seguridad su autor está dispuesto a apostar dinero.Trabaja de forma muy diferente a Bind 9 pero vale la pena probarlo. Puede obtener másinformación en http://www.djbdns.org.

10.d. FTP

Generalmente, usar FTP (File Transfer Protocol) es una mala idea. Porque no cifra los datos (porejemplo, las contraseñas circulan en texto claro), escucha en dos puertos (normalmente el 20 y el21), y los atacantes buscan frecuentemente accesos anónimos para intercambiar warez. Puesto queprotocolo FTP tiene varios problemas de seguridad, debería utilizar en su lugar sftp o HTTP . Si nolo hace, asegure tan bien como pueda sus servicios y prepárese.

10.e. Mysql

Si sólo necesita que las aplicaciones locales accedan a la base de datos mysql "descomente" lasiguiente línea en /etc/mysql/my.cnf.

Listado de Código 5.1: Deshabilitar el acceso de red

skip-networking

Luego, deshabilitemos el uso del comando LOAD DATA LOCAL INFILE.Lo que nos prevendrá contrala lectura no autorizada de ficheros locales. Esto toma relevancia cuando se encuentran nuevasvulnerabilidades de Inyección SQL en PHP.

Listado de Código 5.2: Deshabilitar LOAD DATA LOCAL INFILE en la sección [mysqld]

set-variable=local-infile=0

A continuación, vamos a borrar la base de datos de ejemplo (test) y todas las cuentas excepto lacuenta local de root.

Listado de Código 5.3: Borrar la base de datos de ejemplo y todos los usuarios innecesarios

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

20 de 46 19/11/09 21:50

Page 21: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

mysql> drop database test;mysql> use mysql;mysql> delete from db;mysql> delete from user where not (host="localhost" and user="root");mysql> flush privileges;

Aviso: Tenga cuidado con lo anterior si usted previamente ya ha configurado cuentas de usuario.

Nota: Si ha cambiado las contraseñas desde la línea de introducción de comandos de MySQL deberá borrarsiempre ~/.mysql_history y /var/log/mysql/mysql.log puesto que almacenan los comandos SQL ejecutadoscon las contraseñas en texto claro.

10.f. Proftpd

Proftpd ha tenido bastantes problemas de seguridad, pero parece que se han resuelto muchos deellos. Aún así, es buena idea aplicar algunas mejoras:

Listado de Código 6.1: /etc/proftpd/proftpd.conf

ServerName "My ftp daemon"# No muestre la identidad del servidorServerIdent on "Go away"

# Hace más fácil crear usuarios virtualesRequireValidShell off

# Use unos ficheros de contraseñas y grupos alternativos (passwd usa cifrado)AuthUserFile "/etc/proftpd/passwd"AuthGroupFile "/etc/proftpd/group"

# PermisosUmask 077

# Timeouts y limitacionesMaxInstances 30MaxClients 10 "Only 10 connections allowed"MaxClientsPerHost 1 "You have already logged on once"MaxClientsPerUser 1 "You have already logged on once"TimeoutStalled 10TimeoutNoTransfer 20TimeoutLogin 20

# Chroot todo el mundoDefaultRoot ~

# No lo ejecute como rootUser nobodyGroup nogroup

# Registre cada transacciónTransferLog /var/log/transferlog

# Problemas con globbingDenyFilter \*.*/

Puede encontrar más documentación en http://www.proftpd.org.

10.g. Pure-ftpd

Pure-ftpd es una variante del trollftpd original, modificado por Frank Dennis por razones deseguridad y funcionalidad.

Utilice usuarios virtuales (nunca cuentas del sistema) habilitando la opción AUTH. Configure esto con

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

21 de 46 19/11/09 21:50

Page 22: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

-lpuredb:/etc/pureftpd.pdb y cree sus usuarios mediante /usr/bin/pure-pw.

Listado de Código 7.1: /etc/conf.d/pure-ftpd

AUTH="-lpuredb:/etc/pureftpd.pdb"

## Misc. Others ##MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15"

Configure la opción MISC_OTHER para no permitir accesos anónimos (-E), hacer chroot para todos(-A), para que los usuarios no puedan leer o escribir en los archivos que empiezan por . (punto)(-X), el tiempo máximo 'idle' (-I), el límite de recursión (-L), y una razonable umask.

Aviso: ¡No use las opciones -w or -W! Si usted quiere tener un sitio de warez, ¡no lea más esta guía!

Puede encontrar más documentación en http://www.pureftpd.org.

10.h. Vsftpd

Vsftpd (siglas de "very secure ftp", ftp realmente seguro) es un pequeño demonio ftp que seejecuta con una razonable configuración por defecto. Es sencillo y no tiene algunas de lascaracterísticas de pureftp o proftp.

Listado de Código 8.1: /etc/vsftpd

anonymous_enable=NOlocal_enable=YES

#sólo escriturawrite_enable=NO

#permite el registro de transaccionesxferlog_std_format=YES

idle_session_timeout=20data_connection_timeout=20nopriv_user=nobody

chroot_list_enable=YESchroot_list_file=/etc/vsftpd/chrootlist

ls_recurse_enable=NO

Como puede ver, no hay forma en este servicio de tener permisos individuales, pero cuando seprepara con una configuración anónima es bastante bueno. Algunas veces es bueno tener un ftpanónimo (para compartir programas de código abierto) y entonces vsftpd hace muy buen papel.

10.i. Netqmail

Netqmail está frecuentemente considerado como un servidor de correo muy seguro. Está escritopensando en la seguridad (y en la paranoia). Por defecto no permite el reenvío y no ha tenido unsólo agujero de seguridad desde 1996. ¡Simplemente instálelo con emerge netqmail y configúrelo!

10.j. Samba

Samba es un protocolo para compartir ficheros con redes Microsoft y Novell y no debería usarse através de Internet. Aún así, continua necesitando ser asegurado.

Listado de Código 10.1: /etc/samba/smb.conf

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

22 de 46 19/11/09 21:50

Page 23: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

[global] #Enlace a una interface interfaces = eth0 10.0.0.1/32

#Indica el uso de contraseñas cifradas encrypt passwords = yes directory security mask = 0700

#Permite el tráfico desde 10.0.0.* hosts allow = 10.0.0.

#Habilita el modo de autentificación por usuario #(no use el modo compartido) security = user

#Deshabilita las cuentas con privilegios invalid users = root @wheel

#Tamaño máximo que smb muestra para un recurso compartido #(no es un límite) max disk size = 102400

#Política de contraseñas min password length = 8 null passwords = no

#Uso de PAM (si se ha añadido su soporte) obey pam restrictions = yes pam password change = yes

Asegúrese que los permisos están correctamente establecidos en cada recurso compartido yrecuerde leer la documentación.

Ahora reinicie el servidor y añada los usuarios que deban tener acceso a este servicio. Esto se hacemediante el comando /usr/bin/smbpasswd con el parámetro -a.

10.k. ssh

La única seguridad que OpenSSH necesita es habilitar la autentificación fuerte basada en cifrado declave pública. Demasiados sitios (como http://www.sourceforge.net, http://www.php.netyhttp://www.apache.org) han sufrido accesos no autorizados debidos a filtraciones de contraseñas oa malas contraseñas.

Listado de Código 11.1: /etc/ssh/sshd_config

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

23 de 46 19/11/09 21:50

Page 24: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

#Sólo habilitar la versión 2Protocol 2

#No permitir el acceso directo a rootPermitRootLogin no

#Habilitar la autentificación de clave públicaPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys

#Deshabilitar los ficheros .rhost y la autentificación normal con contraseñaHostbasedAuthentication noPasswordAuthentication noPermitEmptyPasswords no

#Sólo los usuarios en los grupos wheel o admin pueden obtener accesoAllowGroups wheel admin

#En dichos grupos sólo permite el acceso de los siguienes usuarios#El @<nombre_de_dominio> es opcional, pero reemplaza la#anterior directiva AllowHostsAllowUsers [email protected] [email protected]

#Añadir registro de actividadSyslogFacility AUTHLogLevel INFO

(Cambie esto con su dirección)ListenAddress 127.0.0.1

Verifique también que no tiene UsePAM yes en su fichero de configuración porque sobreescribe elmecanismo de autentificación de clave pública, o sino desactive PasswordAuthentication oChallengeResponseAuthentication. Más información acerca de estas opciones puede encontrarseen la página man de sshd_config.

Ahora todo lo que sus usuarios tienen que hacer es crear una clave (en el ordenador desde el que sevan a conectar) usando el comando siguiente:

Listado de Código 11.2: Crea un par de claves DSA

# /usr/bin/ssh-keygen -t dsa

Y teclear una contraseña-frase (passphrase).

Listado de Código 11.3: Salida de ssh-keygen

Generating public/private dsa key pair.Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Pulse enter]Created directory '/home/kn/.ssh'.Enter passphrase (empty for no passphrase): [Escriba la frase de paso]Enter same passphrase again: [Vuelva a escribir la frase de paso]Your identification has been saved in /home/kn/.ssh/id_dsa.Your public key has been saved in /home/kn/.ssh/id_dsa.pub.The key fingerprint is:07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen

Esto añadirá dos archivos a su directorio ~/.ssh/, llamados id_dsa y id_dsa.pub. El archivoid_dsa es su clave privada y debe ser accesible sólo por usted. El otro fichero id_dsa.pub debe serdistribuido en cada servidor al cual tenga acceso. Añada la clave en el directorio home del usuarioen ~/.ssh/authorized_keys y el usuario debería ser capaz de hacer login:

Listado de Código 11.4: Añadir el fichero id_dsa.pub al fichero authorized_keys

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

24 de 46 19/11/09 21:50

Page 25: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub$ ssh other-hostpassword:$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys

Ahora, sus usuarios deberían salvaguardar su clave privada convenientemente. Poniéndola en undispositivo que ellos lleven siempre encima o dejarla en su estación de trabajo (añada esto a laspolíticas de Contraseñas).

Para más información visite la página web de OpenSSH.

10.l. Uso de xinetd

xinetd es un sustituto de inetd (del cual no dispone Gentoo), el demonio de servicios de Internet.Soporta control de acceso basado en la dirección del host remoto y el tiempo de acceso. Tambiénproporciona extensas posibilidades de log, incluyendo una hora de arranque del servidor, direcciónde host remoto, nombre de usuario remoto, tiempo de ejecución del servidor, y accionessolicitadas.

Como en todos los demás servicios es importante tener una buena configuración por defecto. Perodesde el momento que xinetd se ejecuta como root y soporta protocolos que puede que usted noconozca como funcionan, le recomendamos que no lo utilice. Pero si a pesar de todo lo quiereutilizar, aquí le explicamos como puede añadirle algo de seguridad:

Listado de Código 12.1: Instale xinetd

# emerge xinetd tcp-wrappers

Y edite el fichero de configuración:

Listado de Código 12.2: /etc/xinetd.conf

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

25 de 46 19/11/09 21:50

Page 26: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

defaults{ only_from = localhost instances = 10 log_type = SYSLOG authpriv info log_on_success = HOST PID log_on_failure = HOST cps = 25 30}

# Esto configurará pserver (cvs) via xinetd con los siguientes parámetros:# un máximo de 10 instancias (10 conexiones simultáneas)# limita pserver a conexiones tcp solamente# utiliza el usuario cvs para ejecutar este servicio# enlaza una sola dirección IP en las interfaces de red# permite el acceso desde 10.0.0.*# limita el tiempo que los desarrolladores pueden usar cvs: desde 8am a 5pm# usa tcpd wrappers (control de acceso especificado en# /etc/hosts.allow y /etc/hosts.deny)# la carga máxima del sistema se establece a 1.0# el disable flag está a no por defecto, pero preferimos tenerlo# en caso de querer desactivarloservice cvspserver{ socket_type = stream protocol = tcp instances = 10 protocol = tcp wait = no user = cvs bind = 10.0.0.2 only_from = 10.0.0.0 access_times = 8:00-17:00 server = /usr/sbin/tcpd server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver max_load = 1.0 log_on_failure += RECORD disable = no}

Para más información consulte man 5 xinetd.conf.

10.m. X

Por defecto Xorg está configurado para actuar como un servidor X. Esto puede resultar peligrosopuesto que X usa conexiones TCP no cifradas y está a la escucha para clientes X.

Importante: Si usted no necesita este servicio, ¡deshabilítelo!

Pero si piensa usar su estación de trabajo como servidor X use el comando /usr/X11R6/bin/xhostcon precaución. Este comando permite a clientes desde otros hosts conectarse y usar su pantalla. Loque puede ser práctico si usted necesita una aplicación X de un equipo diferente y la única manerade utilizarla es a través de la red, pero lo que también puede permitir ser aprovechado por unatacante. La sintaxis es /usr/X11R6/bin/xhost +nombre_de_host

Aviso: ¡No use nunca la opción xhost +! Esto permitirá a cualquier cliente conectarse y tomar el control desus X. Si un atacante puede tener acceso a sus X, puede registrar lo que teclee y tomar el control de suescritorio. Recuerde especificar siempre un host si usted debe utilizarlo.

Un solución más segura es deshabilitar completamente esta característica arrancando X con startx-- -nolisten tcp o deshabilitándola permanentemente en la configuración.

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

26 de 46 19/11/09 21:50

Page 27: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Listado de Código 13.1: /usr/X11R6/bin/startx

defaultserverargs="-nolisten tcp"

Para asegurarse de que startx no será sobreescrito al 'emerger' una nueva versión de Xorg debeprotegerlo. Añada la siguiente línea a /etc/make.conf:

Listado de Código 13.2: /etc/make.conf

CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"

Si usted usa un gestor gráfico de login necesitará cambiar otros archivos.

Para gdm (Gnome Display Manager):

Listado de Código 13.3: /etc/X11/gdm/gdm.conf

[server-Standard]command=/usr/X11R6/bin/X -nolisten tcp

Para xdm (X Display Manager) y kdm (Kde Display Manager):

Listado de Código 13.4: /etc/X11/xdm/Xservers

:0 local /usr/bin/X11/X -nolisten tcp

11. Chroot o servidores virtuales

11.a. Chrooting

Hacer chroot (enjaular) a un servicio es la manera de limitar el entorno de un servicio (o usuario)para que acceda sólo a lo que debería y para que no escale acceso (o consiga información) que lepermita un acceso de root. Ejecutando el servicio como un usuario distinto de root (nobody,apache, named) un atacante sólo podrá acceder a los ficheros con permisos para dicho usuario. Loque significa que un atacante no conseguirá el acceso de root incluso si los servicios tuvieran algúndefecto de seguridad.

Algunos servicios como pure-ftpd y bind tienen características para hacer chroot, pero otros no. Siel servicio lo soporta, úselo, si no usted tiene que saber como crearse el suyo propio. Veamos comocrear un chroot. Para una comprensión elemental de como trabaja un chroot, vamos a probarlo conbash (la manera fácil de aprenderlo)

Cree el directorio /chroot con mkdir /chroot. Y averigüe con qué librerías dinámicas estácompilado bash (este paso no es necesario si está compilado con -static).

El siguiente comando creará una lista con las librerías usadas por bash.

Listado de Código 1.1: Obtener la lista de librerías usadas

# ldd /bin/bash libncurses.so.5 => /lib/libncurses.so.5 (0x4001b000) libdl.so.2 => /lib/libdl.so.2 (0x40060000) libc.so.6 => /lib/libc.so.6 (0x40063000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Ahora creemos el entorno para bash.

Listado de Código 1.2: Crear el entorno chroot para bash

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

27 de 46 19/11/09 21:50

Page 28: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

# mkdir /chroot/bash# mkdir /chroot/bash/bin# mkdir /chroot/bash/lib

Luego copie los ficheros usados por bash (/lib) al directorio lib del chroot y copie también elcomando bash al directorio bin del chroot. Esto creará exactamente el mismo entorno, pero conmenos funcionalidad. Después de copiarlo pruébelo:chroot /chroot/bash /bin/bash. Si obtieneun prompt indicado / ¡funciona! En caso contrario le informará adecuadamente de qué fichero falta.Algunas librerías compartidas dependen unas de otras.

Se dará cuenta que dentro del chroot sólo funciona echo. Esto ocurre porque no tenemos otroscomandos dentro del entorno chroot que no sean bash y echo que es una funcionalidad incorporada.

Esta es básicamente la manera en la que usted podría crear un servicio ejecutado con chroot. Laúnica diferencia es que los servicios a veces depende de servicios y ficheros de configuración en/etc. Simplemente cópielos (los dispositivos pueden copiarse con cp -a) en el entorno de chroot,edite el guión de inicio init para que use chroot antes de ejecutarlo. Puede resultar difícil encontrarqué dispositivos y ficheros de configuración necesita un servicio. Para esto es práctico el comandostrace. Inicie el servicio en bash con /usr/bin/strace y busque los open, read, stat y puede queconnect. Lo que le dará una pista de qué ficheros copiar. Pero en muchos casos basta copiar elfichero de contraseñas (passwd) (edite la copia y borre los usuarios que no tienen nada que ver conel servicio), /dev/zero, /dev/log y /dev/random.

11.b. User Mode Linux

Otra forma de crear un entorno más seguro es ejecutar una máquina virtual. Una máquina virtual,como su nombre implica, es un proceso que se ejecuta en el nivel más alto de su sistema operativoreal, proporcionando un entorno de hardware y sistema operativo que parece ser el propio de unaúnica máquina. Su beneficio de seguridad está en que si es comprometido el servidor ejecutado enla máquina virtual, sólo se ve afectado este servidor virtual no la instalación padre.

Para más información acerca de como instalar User Mode Linux consulte User Mode Linux Guide.

12. Cortafuegos

12.a. Cortafuegos

Mucha gente piensa a menudo que un cortafuegos (firewall) es la máxima expresión de laseguridad, pero están equivocados. En muchos casos un cortafuegos mal configurado da menosseguridad que no tener uno instalado. Un cortafuegos también es un componente de software ydebería tratarse de la misma manera que cualquier otro software, porque puede contener agujerosde seguridad.

¡Así que piénselo antes de implementar un cortafuegos! ¿Realmente lo necesita? Si cree que lonecesita, escriba una política sobre cómo debería funcionar, qué tipo de cortafuegos, y cómodebería operar. Pero primero lea esta guía.

Los cortafuegos se usan con dos propósitos:

Para mantener a los usuarios (gusanos/atacantes) fuera

Para mantener a los usuarios (empleados/niños) dentro

Básicamente hay tres tipos de cortafuegos:

Filtrado de paquetes

Circuit relay

Aplicación de puerta de enlace

Un cortafuegos debería ser una máquina dedicada que no ejecute otros servicios (sshd es el único)

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

28 de 46 19/11/09 21:50

Page 29: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

y asegurada tal como recomienda esta guía.

12.b. Filtrado de paquetes

Todo el tráfico de la red se transmite como paquetes. Grandes cantidades de tráfico se dividen enpaquetes pequeños para un mejor manejo y se juntan cuando llegan a su destino. La cabecera decada paquete contiene la información de cómo y dónde debe ser entregado. Y estas informacionesson exactamente las que un cortafuegos de filtrado de paquetes utiliza. El filtrado se basa en:

Permitir o denegar los paquetes basados en la dirección IP origen/destino

Permitir o denegar los paquetes basados en un puerto de origen/destino

Permitir o denegar los paquetes basados en un protocolo

Permitir o denegar los paquetes basados en parámetros específicos del protocolo

En otras palabras, este filtrado se fundamenta en la información de la cabecera del paquete y no ensu contenido.

Debilidades:

La dirección de un paquete puede ser potencialmente falsa (o como se suele decir spoofed)por el remitente

Los datos o peticiones contenidos en un paquete permitido pueden contener datos noesperados que el atacante puede usar para explotar fallos en servicios en el cortafuegos o através de él

Normalmente es un punto único de fallo

Ventajas:

Simple y fácil de implementar

Puede avisar de posibles ataques antes de que ocurran (por ejemplo detectando sondeos depuertos)

Son buenos para parar ataques SYN

Ejemplos de cortafuegos de filtrado de paquetes libres en Linux:

Iptables

Ipchains

SmoothWall

Nota: Se recomienda utilizar iptables. Ipchains es obsoleto.

12.c. Circuit relay

Un circuito de nivel de puerta de enlace es un cortafuegos que valida las conexiones antes depermitir el intercambio de datos. Esto significa que simplemente no permite o deniega paquetesbasándose en su cabecera si no que determina si la conexión entre los dos extremos es válida deacuerdo a las reglas configuradas antes de abrir una sesión y permitir que los datos seanintercambiados. El filtrado está basado en:

Dirección IP de origen/destino

Puerto de origen/destino

Periodo de tiempo

Protocolo

Usuario

Contraseña

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

29 de 46 19/11/09 21:50

Page 30: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Todo el tráfico es validado y monitorizado, y el tráfico no deseado se descarta.

Debilidades:

Opera en la Capa de Trasporte y puede requerir una modificación sustancial en el programaque normalmente provee de las funciones de transporte.

12.d. Aplicación de puerta de enlace

La pasarela de aplicación de puerta de enlace es un "proxy" para aplicaciones, que intercambiandatos con los sistemas remotos en nombre de sus clientes. Suele estar a salvo detrás de una DMZ("zona desmilitarizada": la porción de una red privada que es visible a través del cortafuegos) o deun cortafuegos que no permite conexiones desde el exterior. El filtrado está basado en:

Permitir o denegar basándose en direcciones IP del origen/destino

Basándose en el contenido del paquete

Limitar el acceso a ficheros basándose en su tipo o su extensión

Ventajas:

Puede hacer "cache" de archivos, incrementando el rendimiento de red

Detallado registro de todas las conexiones

Crece bien (algunos proxys de servidores pueden "compartir" los datos en cache)

No hay acceso directo desde el exterior

Pueden alterar el contenido del paquete al vuelo

Debilidades:

La configuración es compleja

Las aplicaciones de pasarela están consideradas la mejor solución segura puesto que no tienen queser ejecutadas como root y los hosts tras ellos no son accesibles desde Internet.

Ejemplo de una aplicación de pasarela libre:

Squid

12.e. Iptables

Para poner en funcionamiento iptables, tiene que estar habilitado en el kernel. Yo lo he añadidocomo módulo (el comando iptables lo cargará como se necesita) y he recompilado mi núcleo(pero puede compilarlo embebido, si quiere deshabilitar los Módulos Cargables del Núcleo como seindicaba anteriormente). Para más información al respecto de como configurar su kernel paraiptables vea a Iptables Tutorial Chapter 5: Preparations. Después de que haya compilado su nuevokernel (o mientras lo compila) tiene que añadir el comando iptables . Simplemente con emergeiptables ya debería funcionar.

Ahora compruebe que funciona ejecutando iptables -L. Si falla, algo está mal y deberá revisar suconfiguración una vez más.

Iptables es el nuevo y fuertemente mejorado filtro de paquetes en el kernel de Linux 2.4.x. Es elsucesor del anterior filtro de paquetes ipchains del kernel de linux 2.2.x. Una de las más grandesmejoras es que iptables es capaz de realizar filtrado de estado de paquetes. Con el filtrado deestado es posible mantener el registro de cada conexión TCP establecida.

Una conexión TCP consiste en una serie de paquetes que contienen información respecto la direcciónIP origen, la IP de destino, puerto de origen, puerto de destino, y un número de secuencia para quelos paquetes puedan juntarse sin perder datos. TCP es un protocolo orientado a la conexión encontraste a UDP que es "sin conexión".

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

30 de 46 19/11/09 21:50

Page 31: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Examinando la cabecera del paquete TCP, un filtro de estado de paquetes puede determinar si unpaquete TCP recibido es parte de una conexión ya establecida o no y decidir si aceptarlo orechazarlo.

Es posible engañar a un filtro de paquetes que no verifique el estado de los mismos para queacepte paquetes que deberían ser desechados si se manipula la cabecera del paquete TCP. Estopuede hacerse alterando el indicador SYN u otros indicadores en la cabecera TCP para fabricar unpaquete malicioso que parezca formar parte de una conexión establecida (puesto que el filtro depaquetes por si mismo no hace un seguimiento de la conexión). Con un filtro de estado de paqueteses posible descartar aquellos paquetes que no formen parte de una conexión ya establecida. Estodetendrá también la posibilidad de "escaneos pasivos", un tipo de exploración de puertos en la cualquien realiza la exploración envía paquetes con indicadores que están lejos de ser registrados por uncortafuegos ordinario.

Iptables proporciona otras prestaciones como NAT (Network Address Translation) y limitación detasas. La limitación de tasas es muy práctica para prevenir ciertos ataques DoS ("Denial ofService", denegación de servicio) como las inundaciones SYN ("SYN floods")

Una conexión TCP se establece con una "conversación en tres fases". Para iniciar la conexión TCP laparte de cliente envía un paquete al servidor con el flag SYN habilitado. Cuando el servidor recibe elpaquete con el SYN responde enviando un paquete SYN+ACK de vuelta al cliente. Entonces elSYN+ACK es recibido en el cliente que responde con un tercer paquete ACK reconociendo laconexión.

Un ataque de inundación SYN se realiza enviando paquetes SYN de forma que no se responda elcorrespondiente paquete SYN+ACK. El cliente puede crear un paquete con una dirección IP origenfalsa puesto que no necesita la respuesta. El sistema del servidor añadirá una entrada en la cola delas conexiones pendientes de establecer cuando se reciba el paquete SYN y esperará a recibir elpaquete final ACK antes de borrar esta entrada de la cola. La cola tiene un número limitado deposiciones (slots) y si todas estas posiciones están ocupadas no podrá abrir nuevas conexiones. Siel paquete ACK no se recibe antes de un tiempo determinado la entrada se borraráautomáticamente de la cola. Este tiempo de espera es variable, pero normalmente es de 30 a 60segundos o incluso más. La parte de cliente inicia el ataque enviando gran número de paquetes SYNcon diferentes IP origen y enviándolos a la IP objetivo todo lo rápido que pueda y de ese modollenará la cola de las conexiones pendientes de establecer y por tanto impedirá que otros clientesestablezcan una conexión legítima con el servidor.

Aquí es donde la limitación de tasas se vuelve útil. Es posible limitar la tasa de paquetes SYNaceptados usando -m limit --limit 1/s. Esto limitará el número de paquetes SYN aceptados auno por segundo y por tanto evitará el riesgo de inundaciones SYN en nuestros equipos.

Nota: Otra opción para prevenir inundaciones SYN es SYN cookies, que permite a su ordenador responder apaquetes SYN sin llenar el espacio de la cola de conexiones. Las galletas (cookies) SYN pueden ser habilitadasen la configuración del Núcleo de Linux, pero hoy en día todavía están consideradas como experimentales.

¡Ahora algunas prácticas!

Cuando iptables se activa en el kernel proporciona 5 lugares donde especificar las reglas. Estoslugares se llaman INPUT, OUTPUT, FORWARD, PREROUTING y POSTROUTING. Cada uno de ellos es a suvez una cadena que consiste en una serie de reglas. Cada regla especifica una cabecera de paquetecon la que compararse, después indica qué hacer con el paquete. Si la regla no coincide con elpaquete se consulta la siguiente regla en la cadena.

Usted puede añadir reglas directamente en estas 5 cadenas principales o crear nuevas cadenas yañadirlas como si fueran reglas a una cadena existente. Iptables admite las siguientes opciones.

Opción: Descripción:

-A Añadir

-D Borrar

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

31 de 46 19/11/09 21:50

Page 32: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

-I Insertar

-R Reemplazar

-L Listar

-F Borra todas las reglas de una o de todas las cadenas

-Z Pone a cero los contadores en una o en todas las cadenas

-C Verifica ese paquete en la cadena

-N Crea una nueva cadena definida por el usuario

-X Borra una cadena definida por el usuario

-P Cambia la forma de actuar de una cadena respecto un objetivo

-E Cambia el nombre de la cadena

-p Protocolo

-s Dirección o máscara de origen

-d Dirección o máscara de destino

-i Nombre de entrada (nombre ethernet)

-o Nombre de salida (nombre ethernet)

-j Salto (objetivo de la regla)

-m Coincidencia extendida (puede usar una extensión)

-n Salida numérica para las direcciones y puertos

-t Tabla a manipular

-v Modo de información detallada

-x Expande los números (muestra valores exactos)

-f Sólo hacer coincidir el segundo fragmento o posteriores

-V Versión de paquete

--line-numbers Muestra los números de línea al listar

Primero trataremos de bloquear todos los paquetes ICMP en nuestra máquina, sólo parafamiliarizarnos con iptables.

Listado de Código 5.1: Bloquear todos los paquetes ICMP

# iptables -A INPUT -p icmp -j DROP

Primero indicamos la cadena o regla donde debe ser añadida, después el protocolo de los paquetes,y finalmente el destino. El destino puede ser el nombre de una cadena definida por el usuario o unode los siguientes ACCEPT, DROP, REJECT, LOG, QUEUE, MASQUERADE. En este ejemplo usamos DROPque desechará el paquete sin responder al cliente.

Nota: El destino LOG es del tipo conocido como "non-terminating". Si un paquete concuerda con una regla conel destino LOG, en lugar de para la evaluación, el paquete continua siendo comparado con las otras reglas. Estole permite registrar el paquete mientras se se procesa con normalidad.

Ahora intente ping localhost. No recibirá ninguna respuesta puesto que iptables desechará todoslos paquetes ICMP entrantes. No podrá hacer ping a otras máquinas puesto que los paquetes ICMPde respuesta también son desechados. Ahora elimine la cadena para permitir el tráfico ICMP denuevo.

Listado de Código 5.2: Elimina todas las reglas

# iptables -F

Ahora veamos el filtrado de paquetes de estado en iptables. Si buscamos activar una inspección deestado en los paquetes entrantes en eth0, podríamos activarlo con el comando:

Listado de Código 5.3: Acepta paquetes originados en una conexión entrante o ya establecida

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

32 de 46 19/11/09 21:50

Page 33: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

# iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Esto aceptará cualquier paquete de una conexión ya establecida o con relación a la cadena INPUT.Usted también puede desechar cualquier paquete que no esté en la tabla de estado indicandoiptables -A INPUT -i eth0 -m state --state INVALID -j DROP justo antes del comandoanterior. Esto habilita el filtrado de estado de paquetes en ipetables cargando la extensión "estate".Si quiere permitir a otros conectarse a su máquina puede usar el indicador --state NEW. Iptablescontiene algunos módulos con propósitos diversos. Algunos de ellos son:

Módulo/Concordancia Descripción Opciones extendidas

mac Comprueba la extensión para lospaquetes que provienen de esa direcciónmac.

--mac-source

state Activa la inspección de estado --state (los estados son ESTABLISHED,RELATED,INVALID, NEW)

limit Limitación de tasas --limit, --limit-burst

owner Intenta comparar varias característicasdel creador de los paquetes

--uid-owner userid --gid-owner groupid--pid-owner processid --sid-owner sessionid

unclean Varios chequeos aleatorios en lospaquetes

Intentemos crear una cadena definida por el usuario y añadirla a una de las ya existentes:

Listado de Código 5.4: Creación de una cadena definida por el usuario

(Creamos una nueva cadena con una regla)# iptables -X micadena# iptables -N micadena# iptables -A micadena -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT(El comportamiento por defecto es permitir todo el tráfico saliente. El entrante es desechado.)# iptables -P OUTPUT ACCEPT# iptables -P INPUT DROP(Y la añadimos a la cadena INPUT)# iptables -A INPUT -j micadena

Aplicando la regla a la cadena input obtenemos la política: Se permite todos los paquetes salientesy se desechan todos los entrantes.

Puede encontrar más documentación en Documentación sobre netfilter/iptables.

Veamos ahora un ejemplo completo. En este caso el comportamiento de mi cortafuegos/puerta deenlace indica:

Sólo se permiten las conexiones hacia el cortafuegos a través de SSH (puerto 22)

La red local debe tener acceso a HTTP, HTTPS y SSH (DNS puede también permitirse)

El tráfico ICMP puede contener carga no deseada y no debe ser permitido. Por supuestodeberemos permitir cierto tráfico ICMP

Los sondeos de puertos deben ser detectados y registrados

Los ataques SYN deben ser prevenidos

El tráfico restante debe ser desechado y registrado

Listado de Código 5.5: /etc/init.d/firewall

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

33 de 46 19/11/09 21:50

Page 34: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

#!/sbin/runscriptIPTABLES=/sbin/iptablesIPTABLESSAVE=/sbin/iptables-saveIPTABLESRESTORE=/sbin/iptables-restoreFIREWALL=/etc/firewall.rulesDNS1=212.242.40.3DNS2=212.242.40.51#interiorIIP=10.0.0.2IINTERFACE=eth0LOCAL_NETWORK=10.0.0.0/24#exteriorOIP=217.157.156.144OINTERFACE=eth1

opts="${opts} showstatus panic save restore showoptions rules"

depend() { need net}

rules() { stop ebegin "Estableciendo las reglas internas"

einfo "Estableciendo la regla por defecto para drop" $IPTABLES -P FORWARD DROP $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP

# Regla por defecto einfo "Creando las cadenas de estado" $IPTABLES -N allowed-connection $IPTABLES -F allowed-connection $IPTABLES -A allowed-connection -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A allowed-connection -i $IINTERFACE -m limit -j LOG --log-prefix \ "Bad packet from ${IINTERFACE}:" $IPTABLES -A allowed-connection -j DROP

# Tráfico ICMP einfo "Creando la cadena icmp" $IPTABLES -N icmp_allowed $IPTABLES -F icmp_allowed $IPTABLES -A icmp_allowed -m state --state NEW -p icmp --icmp-type \ time-exceeded -j ACCEPT $IPTABLES -A icmp_allowed -m state --state NEW -p icmp --icmp-type \ destination-unreachable -j ACCEPT $IPTABLES -A icmp_allowed -p icmp -j LOG --log-prefix "Bad ICMP traffic:" $IPTABLES -A icmp_allowed -p icmp -j DROP

# Tráfico entrante einfo "Creando la cadena para el tráfico ssh entrante" $IPTABLES -N allow-ssh-traffic-in $IPTABLES -F allow-ssh-traffic-in #Protección "Flood" $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \ ALL RST --dport ssh -j ACCEPT $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \ ALL FIN --dport ssh -j ACCEPT $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \ ALL SYN --dport ssh -j ACCEPT $IPTABLES -A allow-ssh-traffic-in -m state --state RELATED,ESTABLISHED -p tcp --dport ssh -j ACCEPT

# Tráfico saliente einfo "Creando la cadena para el tráfico ssh saliente" $IPTABLES -N allow-ssh-traffic-out $IPTABLES -F allow-ssh-traffic-out $IPTABLES -A allow-ssh-traffic-out -p tcp --dport ssh -j ACCEPT

einfo "Creando la cadena para el tráfico DNS saliente" $IPTABLES -N allow-dns-traffic-out $IPTABLES -F allow-dns-traffic-out $IPTABLES -A allow-dns-traffic-out -p udp -d $DNS1 --dport domain \ -j ACCEPT $IPTABLES -A allow-dns-traffic-out -p udp -d $DNS2 --dport domain \ -j ACCEPT

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

34 de 46 19/11/09 21:50

Page 35: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Algunos consejos para cuando cree un cortafuegos:

Cree su política de cortafuegos antes de implementarlo1.

Hágalo simple2.

Conozca cómo trabajan los protocolos (lea lo más relevante de RFC (Request For Comments))3.

Tenga bien presente que un cortafuegos sólo es otro software ejecutándose como root4.

Compruebe su cortafuegos5.

Si piensa que iptables es difícil de comprender o le lleva mucho tiempo configurar un cortafuegosdecente, puede usar Shorewall. Básicamente utiliza iptables para generar las reglas del cortafuegos,pero se concentra en reglas y no en protocolos específicos.

12.f. Squid

Squid es un servidor proxy muy potente. Puede filtrar el tráfico atendiendo a: tiempo, expresionesregulares en la ruta/URI, dirección IP de origen y destino, dominio, navegador, nombre de usuarioautentificado, mime-type y número de puerto (protocolo). Probablemente olvido algunascaracterísticas, pero puede ser pesado cubrir aquí la lista entera de características.

En el ejemplo siguiente he añadido un filtrado de pancartas ("banners") en lugar de un filtro basadoen sitios porno. La razón de esto es que Gentoo.org no debe ser catalogado como un sitiopornográfico. Y yo no quiero malgastar mi tiempo intentando buscar algunos buenos sitios parausted.

En este caso, mi política de acceso es:

La navegación (HTTP/HTTPS) está permitida durante las horas de trabajo (lunes a viernes de8 a 17 y sábado de 8 a 13 horas), si alguien está más tarde debería trabajar, no navegar.

No está permitido descargar ficheros (.exe, .com, .arj, .zip, .asf, .avi, .mpg, .mpeg, etc.)

No nos gustan las pancartas (banners), por lo que son filtradas y reemplazadas por un giftransparente (¡aquí es donde puede ser creativo!)

Cualquier otra conexión hacia o desde Internet no está permitida

Esto se implementa en 4 pasos fáciles.

Listado de Código 6.1: /etc/squid/squid.conf

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

35 de 46 19/11/09 21:50

Page 36: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

# Enlaza con una IP y un puertohttp_port 10.0.2.1:3128

# Configuración standard hierarchy_stoplist cgi-bin ?acl QUERY urlpath_regex cgi-bin \?no_cache deny QUERY

# Añade listas de control de acceso básicoacl all src 0.0.0.0/0.0.0.0acl manager proto cache_objectacl localhost src 127.0.0.1/255.255.255.255

# Añade quien puede acceder a este servidor proxyacl localnet src 10.0.0.0/255.255.0.0

# Y los puertosacl SSL_ports port 443acl Safe_ports port 80acl Safe_ports port 443acl purge method PURGE

# Añade una lista de control de acceso basada en# expresiones regulares mediante urlsacl archives urlpath_regex "/etc/squid/files.acl"acl url_ads url_regex "/etc/squid/banner-ads.acl"

# Añade una lista de control de acceso basada en día y horaacl restricted_weekdays time MTWHF 8:00-17:00acl restricted_weekends time A 8:00-13:00

acl CONNECT method CONNECT

# Permite el acceso administrativo desde localhosthttp_access allow manager localhosthttp_access deny manager

# Solo permite purgar peticiones desde localhosthttp_access allow purge localhosthttp_access deny purge

# Deniega peticiones hacia puertos desconocidoshttp_access deny !Safe_ports

# Deniega CONNECT a otros puertos distintos de SSLhttp_access deny CONNECT !SSL_ports

# Mis propias reglas

# Añade una página para ser mostrada cuando# se elimina una pancartadeny_info NOTE_ADS_FILTERED url_ads

# Entonces lo rechazahttp_access deny url_ads

# Deniega todos los archivoshttp_access deny archives

# Restringe el acceso a las horas de trabajohttp_access allow localnet restricted_weekdayshttp_access allow localnet restricted_weekends

# Deniega el restohttp_access deny all

Después complete los ficheros que no quiere que sus usuarios descarguen. Yo he indicado zip, viv,

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

36 de 46 19/11/09 21:50

Page 37: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

exe, mp3, rar, ace, avi, mov, mpg, mpeg, au, ra, arj, tar, gz and z files.

Listado de Código 6.2: /etc/squid/files.acl

\.[Zz][Ii][pP]$\.[Vv][Ii][Vv].*\.[Ee][Xx][Ee]$\.[Mm][Pp]3$\.[Rr][Aa][Rr]$\.[Aa][Cc][Ee]$\.[Aa][Ss][Ff]$\.[Aa][Vv][Ii]$\.[Mm][Oo][Vv]$\.[Mm][Pp][Gg]$\.[Mm][Pp][Ee][Gg]$\.[Aa][Uu]$\.[Rr][Aa]$\.[Aa][Rr][Jj]$\.[Tt][Aa][Rr]$\.[Gg][Zz]$\.[Zz]$

Nota: Por favor, tenga en cuenta los [ ] con mayúsculas y minúsculas en cada carácter. Esto sirve para quealguien no se salte las reglas accediendo a un fichero llamado AvI en lugar de avi.

Ahora vamos a añadir las expresiones regulares para identificar a las pancartas. Probablementeusted será más creativo que yo:

Listado de Código 6.3: /etc/squid/banner-ads.acl

/adv/.*\.gif$/[Aa]ds/.*\.gif$/[Aa]d[Pp]ix//[Aa]d[Ss]erver/[Aa][Dd]/.*\.[GgJj][IiPp][FfGg]$/[Bb]annerads//adbanner.*\.[GgJj][IiPp][FfGg]$/images/ad//reklame//RealMedia/ads/.*^http://www\.submit-it.*^http://www\.eads.*^http://ads\.^http://ad\.^http://ads02\.^http://adaver.*\.^http://adforce\.adbot\.com/ads/.*\.gif.*_ad\..*cgi/Banners//SmartBanner//Ads/Media/Images/^http://static\.wired\.com/advertising/^http://*\.dejanews\.com/ads/^http://adfu\.blockstackers\.com/^http://ads2\.zdnet\.com/adverts^http://www2\.burstnet\.com/gifs/^http://www.\.valueclick\.com/cgi-bin/cycle^http://www\.altavista\.com/av/gifs/ie_horiz\.gif

Y como último paso, queremos que este fichero sea mostrado cuando una pancarta sea eliminada.Básicamente es un medio archivo html con una imagen gif transparente de 4x4 pixels.

Listado de Código 6.4: /etc/squid/errors/NOTE_ADS_FILTERED

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

37 de 46 19/11/09 21:50

Page 38: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

<HTML><HEAD><META HTTP-EQUIV="REFRESH" CONTENT="0; URL=http://localhost/images/4x4.gif"><TITLE>ERROR: La URL solicitada no puede ser recuperada</TITLE></HEAD><BODY><H1>Anuncio filtrado</H1>

Nota: No cierre los tags <HTML> <BODY>. Eso lo hará squid.

Como puede ver, Squid tiene muchas posibilidades y es muy efectivo tanto como filtro como proxy.Incluso se pueden usar proxies Squid encadenados para escalar en redes muy grandes. Laconfiguración que he indicado aquí es muy conveniente para una pequeña red de 1 a 20 usuarios.

Pero combinar el filtrado de paquetes (iptables) y una pasarela de aplicaciones (Squid) esprobablemente la mejor solución, incluso si Squid está ubicado en un lugar seguro y donde nadiepueda acceder desde el exterior. Continuamos teniendo que preocuparnos de los ataques desdedentro.

Ahora tiene que configurar los navegadores en los clientes para usar el servidor proxy. La puerta deenlace evitará que los usuarios tengan cualquier contacto con el exterior salvo que usen el proxy.

Nota: En Mozilla Firefox se consigue en Edición->Preferencias->Advanzadas->Red.

También se conseguir un proxy transparente usando iptables dirigiendo todo el tráfico saliente a unproxy Squid. Esto se hace añadiendo una regla de forwarding/prerouting en la pasarela:

Listado de Código 6.5: Activa el portforwarding hacia nuestro servidor proxy

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to proxyhost:3128# iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to proxyhost:3128

Nota: Si el proxy se está ejecutando en el host que hace el filtrado de paquetes --y aunque que no serecomienda, puede ser necesario si no tiene suficientes máquinas disponibles-- use un destino REDIRECT enlugar de DNAT (REDIRECT dirige los paquetes al localhost).

12.g. Lecciones aprendidas

Hemos aprendido esto:

Un cortafuegos puede representar un riesgo por si mismo. Un cortafuegos mal configurado espeor que no tenerlo

1.

Cómo configurar una pasarela básica y un proxy transparente2.

La clave para tener un buen cortafuegos es conocer el protocolo que queremos permitir3.

Que el tráfico IP puede contener datos no legítimos, por ejemplo los paquetes ICMP puedenllevar una carga oculta

4.

Cómo prevenir un ataque SYN5.

El filtrado de tráfico HTTP quitando imágenes no adecuadas, descargas de ficheros de virus6.

Combinar filtros de paquetes y pasarelas de aplicaciones proporcionan mayor control7.

Entonces si realmente necesita usted un cortafuegos, cree uno que satisfaga sus necesidades.

13. Detección de intrusos

13.a. AIDE (Advanced Intrusion Detection Environment, Entorno Avanzado

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

38 de 46 19/11/09 21:50

Page 39: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

de Detección de Intrusos)

AIDE es un sistema de detección de intrusos basado en host (HIDS, Host-Based Intrusion DetectionSystem), una alternativa libre a Tripwire (si usted ya conoce Tripwire no debería tener dificultadespara aprender a configurar AIDE). Los HIDS se usan para detectar cambios en los ficheros deconfiguración y binarios importantes, generalmente generando un resumen cifrado ("hash") único delos ficheros a ser verificados, y almacenándolos en un lugar seguro. Con un procedimiento regular(tal que una vez al día), los resúmenes "buenos" se comparan con los generados a partir de lacopia actual de cada fichero, para determinar si el fichero ha cambiado. Los HIDS son una granherramienta para detectar cambios no permitidos en un sistema, pero necesitan un poco de trabajopara implementarlos adecuadamente y hacer un buen uso de ellos.

El fichero de configuración está basado en expresiones regulares, macros y reglas para ficheros ydirectorios. Tenemos la macros siguientes:

Macro Descripción Sintaxis

ifdef Si está definido @@ifdef "name"

ifndef Si no está definido @@ifndef "name"

define Define una variable @@define "name""value"

undef Elimina la definición de una variable @@undef "name"

ifhost Si "hostname" @@ifhost "hostname"

ifnhost Si no "hostname" @@ifnhost "hostname"

endif Endif puede ser usado después de cualquiera de las macros anteriores excepto definey undef

@@endif

Esas macros se convierten en algo muy práctico si usted tiene más de un sistema Gentoo y quiereusar AIDE en todos ellos, pero no todas las máquinas ejecutan los mismos servicios o incluso tienenlos mismos usuarios.

A continuación tenemos conjuntos de marcas ("flags") para comprobar en ficheros y directorios. Sonuna combinación de permisos, propiedades de archivos y resúmenes criptográficos (es decir, sumasde control).

Flag Descripción

p permisos

i inode

n número de enlaces

u usuario

g grupo

s tamaño

b 'block count'

m mtime

a atime

c ctime

S verifica el tamaño creciente

md5 suma de control md5

sha1 suma de control sha1

rmd160 suma de control rmd160

tiger suma de control tiger

R p+i+n+u+g+s+m+c+md5

L p+i+n+u+g

E Grupo vacío

> Crecimiento del fichero de log p+u+g+i+n+S

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

39 de 46 19/11/09 21:50

Page 40: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Y si AIDE se compila con soporte para mhash también soporta otras características:

Flag Descripción

haval suma de control haval

gost suma de control gost

crc32 suma de control crc32

Ahora puede crear sus propias reglas basadas en los indicadores anteriores, combinándolas tal queasí:

Listado de Código 1.1: Creación de un conjunto de reglas para AIDE

All=R+a+sha1+rmd160Norm=s+n+b+md5+sha1+rmd160

Lo último que necesita para crear su propio fichero de configuración es ver cómo añadir una regla aun fichero o directorio. para introducir una regla, combine el nombre de fichero o directorio y laregla. AIDE añadirá todos los archivos recursivamente a no ser que usted especifique alguna reglaalternativa.

Flag Descripción

! No añadir este fichero o directorio.

= Añadir este directorio, pero sin recursividad.

Veamos, pues, un ejemplo completo:

Listado de Código 1.2: /etc/aide/aide.conf

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

40 de 46 19/11/09 21:50

Page 41: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

@@ifndef TOPDIR @@define TOPDIR /@@endif

@@ifndef AIDEDIR @@define AIDEDIR /etc/aide@@endif

@@ifhost smbserv@@define smbactive@@endif

# La ubicación de la base de datos a ser leídadatabase=file:@@{AIDEDIR}/aide.db

# La ubicación de la base de datos donde escribirdatabase_out=file:aide.db.new

verbose=20report_url=stdout

# Definición de reglasAll=R+a+sha1+rmd160Norm=s+n+b+md5+sha1+rmd160

@@{TOPDIR} Norm!@@{TOPDIR}etc/aide!@@{TOPDIR}dev!@@{TOPDIR}media!@@{TOPDIR}mnt!@@{TOPDIR}proc!@@{TOPDIR}root!@@{TOPDIR}sys!@@{TOPDIR}tmp!@@{TOPDIR}var/log!@@{TOPDIR}var/run!@@{TOPDIR}usr/portage@@ifdef smbactive!@@{TOPDIR}etc/smb/private/secrets.tdb@@endif=@@{TOPDIR}home Norm

En el ejemplo anterior especificamos con algunas macros donde comienza el directorio de nivelsuperior y donde está el directorio de AIDE. AIDE comprueba el fichero /etc/aide/aide.db cuandocomprueba la integridad de un fichero. Pero cuando actualiza o crea un nuevo fichero almacena lainformación en /etc/aide/aide.db.new. Esto se hace porque no se puede sobrescribirautomáticamente el antiguo fichero de base de datos. La opción report_URL no está todavíaimplementada, pero la intención del autor es que sea capaz de enviar correo electrónico o quizátambién ejecutar guiones ("scripts").

El ebuild AIDE incluye ahora un fichero de configuración funcional, un guión de ayuda ("helper") yun guión de programación de trabajos ("crontab"). El guión de ayuda realiza ciertas tareas pornosotros y proporciona una interfaz que resulta ser un pequeño guión más amigable. Para ver todaslas opciones disponibles, puede ejecutarse aide --help. Para empezar, todo lo que se necesitahacer es aide -i y el guión de programación de trabajos debería detectar la base de datos y enviarlos mensajes apropiados cada día. Es recomendable revisar el fichero /etc/aide/aide.conf yasegurarse que la configuración recoge escrupulosamente que todo está en su lugar en la máquina.

Nota: Dependiendo de su CPU, velocidad de acceso a disco y los indicadores configurados para los ficheros, elproceso puede llevar algún tiempo.

Nota: Recuerde establecer una alias para leer los mensajes de correo para root. En caso contrario nuncaconocerá lo que está informando AIDE.

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

41 de 46 19/11/09 21:50

Page 42: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

Note que almacenar localmente los ficheros de base de datos tiene algunos riesgos, puesto que losatacantes (si conocen que AIDE está instalado) intentarán sin duda alterar el fichero de base dedatos, actualizarlo o modificar /usr/bin/aide. Por esto, debería crear un CD o otro medio dondedejar una copia del fichero .db y los binarios de AIDE.

Puede encontrar más información en la página del proyecto AIDE.

13.b. Snort

Snort es un Sistema de Detección de Intrusiones de Red (Network Intrusion Detection System,NIDS). Para instalarlo y configurarlo use los ejemplos siguientes.

Listado de Código 2.1: /etc/conf.d/snort

PIDFILE=/var/run/snort_eth0.pidMODE="full"NETWORK="10.0.0.0/24"LOGDIR="/var/log/snort"CONF=/etc/snort/snort.confSNORT_OPTS="-D -s -u snort -dev -l $LOGDIR -h $NETWORK -c $CONF"

Listado de Código 2.2: /etc/snort/snort.conf

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

42 de 46 19/11/09 21:50

Page 43: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

(Step 1)var HOME_NET 10.0.0.0/24var EXTERNAL_NET anyvar SMTP $HOME_NETvar HTTP_SERVERS $HOME_NETvar SQL_SERVERS $HOME_NETvar DNS_SERVERS [10.0.0.2/32,212.242.40.51/32]var RULE_PATH ./

(Step 2)preprocessor frag2preprocessor stream4: detect_scans detect_state_problems detect_scans disable_evasion_alertspreprocessor stream4_reassemble: ports allpreprocessor http_decode: 80 8080 unicode iis_alt_unicode double_encode iis_flip_slash full_whitespacepreprocessor rpc_decode: 111 32771preprocessor bo: -nobrutepreprocessor telnet_decode

(Step 3)include classification.config

(Step 4)include $RULE_PATH/bad-traffic.rulesinclude $RULE_PATH/exploit.rulesinclude $RULE_PATH/scan.rulesinclude $RULE_PATH/finger.rulesinclude $RULE_PATH/ftp.rulesinclude $RULE_PATH/telnet.rulesinclude $RULE_PATH/smtp.rulesinclude $RULE_PATH/rpc.rulesinclude $RULE_PATH/rservices.rulesinclude $RULE_PATH/dos.rulesinclude $RULE_PATH/ddos.rulesinclude $RULE_PATH/dns.rulesinclude $RULE_PATH/tftp.rulesinclude $RULE_PATH/web-cgi.rulesinclude $RULE_PATH/web-coldfusion.rulesinclude $RULE_PATH/web-iis.rulesinclude $RULE_PATH/web-frontpage.rulesinclude $RULE_PATH/web-misc.rulesinclude $RULE_PATH/web-attacks.rulesinclude $RULE_PATH/sql.rulesinclude $RULE_PATH/x11.rulesinclude $RULE_PATH/icmp.rulesinclude $RULE_PATH/netbios.rulesinclude $RULE_PATH/misc.rulesinclude $RULE_PATH/attack-responses.rulesinclude $RULE_PATH/backdoor.rulesinclude $RULE_PATH/shellcode.rulesinclude $RULE_PATH/policy.rulesinclude $RULE_PATH/porn.rulesinclude $RULE_PATH/info.rulesinclude $RULE_PATH/icmp-info.rulesinclude $RULE_PATH/virus.rules# include $RULE_PATH/experimental.rulesinclude $RULE_PATH/local.rules

Listado de Código 2.3: /etc/snort/classification.config

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

43 de 46 19/11/09 21:50

Page 44: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

config classification: not-suspicious,Not Suspicious Traffic,3config classification: unknown,Unknown Traffic,3config classification: bad-unknown,Potentially Bad Traffic, 2config classification: attempted-recon,Attempted Information Leak,2config classification: successful-recon-limited,Information Leak,2config classification: successful-recon-largescale,Large Scale Information Leak,2config classification: attempted-dos,Attempted Denial of Service,2config classification: successful-dos,Denial of Service,2config classification: attempted-user,Attempted User Privilege Gain,1config classification: unsuccessful-user,Unsuccessful User Privilege Gain,1config classification: successful-user,Successful User Privilege Gain,1config classification: attempted-admin,Attempted Administrator Privilege Gain,1config classification: successful-admin,Successful Administrator Privilege Gain,1

# NEW CLASSIFICATIONSconfig classification: rpc-portmap-decode,Decode of an RPC Query,2config classification: shellcode-detect,Executable code was detected,1config classification: string-detect,A suspicious string was detected,3config classification: suspicious-filename-detect,A suspicious filename was detected,2config classification: suspicious-login,An attempted login using a suspicious username was detected,2config classification: system-call-detect,A system call was detected,2config classification: tcp-connection,A TCP connection was detected,4config classification: trojan-activity,A Network Trojan was detected, 1config classification: unusual-client-port-connection,A client was using an unusual port,2config classification: network-scan,Detection of a Network Scan,3config classification: denial-of-service,Detection of a Denial of Service Attack,2config classification: non-standard-protocol,Detection of a non-standard protocol or event,2config classification: protocol-command-decode,Generic Protocol Command Decode,3config classification: web-application-activity,access to a potentially vulnerable web application,2config classification: web-application-attack,Web Application Attack,1config classification: misc-activity,Misc activity,3config classification: misc-attack,Misc Attack,2config classification: icmp-event,Generic ICMP event,3config classification: kickass-porn,SCORE! Get the lotion!,1

Más información en el sitio web de Snort.

13.c. Detección de malware con chkrootkit

Tanto HIDS como AIDE son una gran forma de detectar cambios en su sistema, pero nuncaperjudica tener otra línea de defensas. chkrootkit es una utilidad que que examina los ficheros desistema comunes buscando rootkits --software diseñado para esconder las acciones de un intruso ypermitirle conservar el acceso-- y examina el sistema buscando trazas de registradores de teclados("keyloggers") y otro "malware". chkrootkit y alternativas como rkhunter son herramientasprácticas, tanto para el mantenimiento del sistema como seguimiento de un intruso tras un ataque,sin embargo no garantizan que su sistema sea seguro.

La mejor manera para emplear chkrootkit como detección de intrusos es ejecutarlo rutinariamentedesde cron. Para empezar, instale app-admin/chkrootkit. chkrootkit puede ejecutarse desde lalínea de comandos con el comando del mismo nombre, o desde cron con un línea tal que ésta:

Listado de Código 3.1: Schedule chkrootkit as a cronjob

0 3 * * * /usr/sbin/chkrootkit

14. Manteniendo el sistema actualizado

14.a. Manteniendo el sistema actualizado

Una vez que ha instalado satisfactoriamente su sistema y conseguido un buen nivel de seguridad nolo ha hecho todo. La seguridad es un proceso continuo; la gran mayoría de intrusiones se producencomo consecuencia de vulnerabilidades conocidas en sistemas no actualizados. Mantener el sistema

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

44 de 46 19/11/09 21:50

Page 45: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

actualizado es el único y más valioso paso que se puede dar para obtener la mejor seguridad.

Si tiene una versión reciente del portage instalada, primero debe sincronizar su árbol del portagemediante emerge --sync y entonces ejecutar el comando glsa-check --list para comprobar si susistema está actualizado en cuanto a la seguridad. glsa-check forma parte deapp-portage/gentoolkit.

Listado de Código 1.1: Ejemplo de salida de glsa-check -l

# glsa-check -lWARNING: This tool is completely new and not very tested, so it should not beused on production systems. It's mainly a test tool for the new GLSA releaseand distribution system, it's functionality will later be merged into emergeand equery.Please read http://www.gentoo.org/proj/en/portage/glsa-integration.xmlbefore using this tool AND before reporting a bug. [A] means this GLSA was already applied,[U] means the system is not affected and[N] indicates that the system might be affected. 200406-03 [N] sitecopy: Multiple vulnerabilities in included libneon ( net-misc/sitecopy )200406-04 [U] Mailman: Member password disclosure vulnerability ( net-mail/mailman ).......

Aviso: glsa-check es todavía experimental, por lo que si la seguridad es realmente su máxima prioridad seríajuicioso contrastar la lista con otras fuentes.

Todas las líneas con [A] y [U] pueden ser ignoradas casi sin peligro ya que el sistema no estáafectado por este GLSA.

Importante: Hay que tener en cuenta que el habitual emerge -vpuD world no recogerá todas lasactualizaciones de paquetes. Tendremos que utilizar glsa-check si queremos asegurarnos que todos los GLSAsson aplicados en el sistema.

Listado de Código 1.2: Verificar todos GLSAs

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

45 de 46 19/11/09 21:50

Page 46: Manual de Seguridad de Gentoo - index-of.co.ukindex-of.co.uk/Distros-GNU-LINUX/Gentoo/Manual de Seguridad de Gentoo.pdf · las opciones importantes son pam (Pluggable Authentication

(Verifica si el sistema está afectado por GLSAs)# glsa-check -t allWARNING: This tool is completely new and not very tested, so it should not beused on production systems. It's mainly a test tool for the new GLSA releaseand distribution system, it's functionality will later be merged into emergeand equery.Please read http://www.gentoo.org/proj/en/portage/glsa-integration.xmlbefore using this tool AND before reporting a bug.

This system is affected by the following GLSA:200504-06200510-08200506-14200501-35200508-12200507-16

(Averiguar que paquetes serían actualizados)# glsa-check -p $(glsa-check -t all) (salida parcial)Checking GLSA 200504-06The following updates will be performed for this GLSA: app-arch/sharutils-4.2.1-r11 (4.2.1-r10)

**********************************************************************

Checking GLSA 200510-08The following updates will be performed for this GLSA: media-libs/xine-lib-1.1.0-r5 (1.1.0-r4)

(Aplicación de los cambios requeridos)# glsa-check -f $(glsa-check -t all)

Si se ha actualizado un servicio en ejecución, no deberemos olvidar reiniciarlo.

Conservar el núcleo actualizado también es recomendable.

Si usted quiere recibir un mensaje cada vez que se libera un GLSA, subscríbase a la lista de correogentoo-announce. Las instrucciones para unirse así como otras buenas listas de correo las pudeencontrar en Gentoo Linux Mailing List Overview.

Otro buen recurso de seguridad es Bugtraq mailinglist.

El contenido de este documento está registrado bajo los términos de la licencia Creative Commons - Reconocimiento/ Compartir Igual

Documentación Gentoo Linux -- Manual de Segur... http://www.gentoo.org/doc/es/security/security-...

46 de 46 19/11/09 21:50