domingo, 10 de febrero de 2008

Seguridad de Red

La seguridad de la red está llegando a ser cada vez más importante en la medida en que la gente pasa cada vez más tiempo conectada. Comprometer la seguridad de la red es, con frecuencia, mucho más fácil que comprometer la seguridad física o la local y es mucho más común.
Hay un conjunto de buenas herramientas para ayudar con la seguridad de la red y muchísimas de ellas vienen en las distribuciones de Linux.
Husmeadores de Paquetes
Una de las maneras más comunes por la que los intrusos logran acceder a más sistemas en tu red es empleando un husmeador de paquetes sobre un host ya comprometido. Este "husmeador" sólo escucha sobre el puerto Ethernet cosas como passwd y login y su que van en la corriente de paquetes y entonces registra el tráfico después de esto. De esta forma, los atacantes logran contraseñas para sistemas que aún no han intentado abordar. Las contraseñas de texto-claro son muy vulnerables a este ataque.
Ejemplo: El host A ha sido comprometido. El atacante instala un husmeador. El husmeador recoge las conexiones de administrador en el Host B desde el Host C. Logra la contraseña personal del administrador cuando conecta a B. Entonces, el administrador hace un su para arreglar el problema. Ahora ellos tienen la contraseña de root para el Host B. Más tarde el administrador deja a alguien hacer telnet desde su cuenta al Host Z en otro sitio. Ahora el atacante tiene una contraseña/conexión en el Host Z.
En este momento el atacante siquiera necesita comprometer un sistema para hacer esto: podría también meter un portátil o un pc en un edificio y pinchar en tu red.
Usar ssh u otros métodos de contraseña encriptada frustra este ataque. Cosas como APOP para cuentas POP también previenen este ataque. (Los logins POP normales son muy vulnerables a esto, como todo lo que envíe contraseñas en texto-claro por la red.)
Servicios de Sistema y Grapadores de tcp
Antes de poner tu sistema Linux en CUALQUIER red lo primero que tienes que mirar es qué servicios necesitas ofrecer. Los servicios que no necesites ofrecer deben ser desactivados para que tengas una cosa menos de la que preocuparte y los atacantes tengan un lugar menos en el que buscar un agujero.
Hay un montón de formas de desactivar servicios bajo Linux. Puedes mirar en tu fichero /etc/inetd.conf y ver qué servicios se están ofreciendo en tu inetd. Desactiva cualquiera que no necesites descomentándolos (# al principio de la línea), y luego envia tu proceso inetd a SIGHUP.
También puedes quitar (o descomentar) servicios en tu fichero /etc/services. Esto implicará que los clientes locales también serán incapaces de encontrar el servicio (p.e., si quitas ftp y tratas de hacer ftp a un sitio remoto desde esa máquina, fallará y te dará un mensaje de "servicio desconocido"). Normalmente no merece la pena quitar servicios, dado que no proporciona seguridad adicional. Si una persona local quiere usar ftp, incluso aunque tú lo hayas descomentado, haría que su propio cliente use el puerto común FTP y aún funcionaría mejor.
Algunos de los servicios que querrías dejar habilitados son:
ftp
telnet (o ssh)
mail, tal como pop-3 o imap
identd
Si sabes que no vas a usar algún paquete en particular, puedes borrarlo por completo. En la distribución Red Hat, rpm -e nombrepaquete borra el paquete entero. En la Debian dpkg --remove hace lo mismo.
Además, realmente deberías desactivar las utilidades rsh/rlogin/rcp, incluyendo login (usado por rlogin), shell (usado por rcp) y exec (usado por rsh) para que no se inicien en /etc/inetd.conf. Estos protocolos son extremadamente inseguros y han sido la causa de exploits en el pasado.
Debes comprobar tu /etc/rc.d/rcN.d, (donde N es el nivel de ejecución de tus sistemas) y ver si alguno de los servidores arrancados en ese directorio no se necesita. Los ficheros en /etc/rc.d/rcN.d son realmente enlaces simbólicos al directorio /etc/rc.d/init.d. Renombrar los ficheros en el directorio init.d tiene el efecto de inhabilitar todos los enlaces simbólicos en /etc/rc.d/rcN.d. Si sólo quieres deshabilitar un servicio para un nivel de ejecución particular, renombra el fichero apropiado sustituyendo la S mayúscula por una s minúscula, como esto: root# cd /etc/rc6.d root# mv S45dhcpd s45dhcpd
Si tienes ficheros estilo BSD rc, tienes que probar /etc/rc* para los programas que no necesites.
La mayoría de las distribuciones de Linux vienen con grapadores de tcp "grapando" todos tus servicios TCP. Un grapador de tcp (tcpd) se pide desde inetd en lugar del servidor real. Entonces tcpd chequea el host que está requiriendo el servicio y, o bien ejecuta el servidor real, o niega el acceso desde este host. tcpd te permite restringir el acceso a tus servicios TCP. Debes hacer un /etc/hosts.allow y añadir sólo aquellos hosts que necesiten tener acceso a los servicios de tu equipo.
Si eres un usuario telefónico doméstico, te sugerimos que niegues TODOS. tcpd también registra los intentos fallidos de acceder a servicios, así que esto te puede dar la alerta si te están atacando. Si añades nuevos servicios, debes asegurarte de configurarlos para usar grapadores de tcp si están basados en TCP. Por ejemplo, un usuario telefónico normal puede impedir a los extraños la conexión a su máquina, sin perder la capacidad de recuperar correo y hacer conexiones de red a Internet. Para hacer esto, debes añadir lo siguiente a tu /etc/hosts.allow:
ALL: 127.
Y por supuesto /etc/hosts.deny contendría:
ALL: ALL
que impedirá conexiones externas a tu máquina, pero permitiéndote desde el interior conectar a los servidores en Internet.
Ten en cuenta que los grapadores de tcp sólo protegen servicios ejecutados desde inetd y unos pocos otros selectos. Muy bien podría haber otros servicios ejecutándose en tu máquina. Puedes usar netstat -ta para encontrar una lista de todos los servicios que está ofreciendo tu máquina.
Verifica tu Información DNS
Mantener al día la información DNS sobre todos los hosts en tu red puede ayudar a incrementar la seguridad. Si un host no autorizado llega a conectarse a tu red, puedes reconocerlo por su carencia de una entrada DNS. Muchos servicios pueden estar configurados para no aceptar conexiones de hosts que no tienen entradas DNS válidas.
identd
identd es un pequeño programa que normalmente se ejecuta fuera de tu servidor inetd. Mantiene un registro de qué usuario está ejecutando qué servicio TCP, y luego informa de esto a quien se lo pregunta.
Mucha gente no entiende la utilidad de identd y por eso lo desactiva o bloquea todas las peticiones de sitios. identd no está para ayudar a sitios remotos. No hay modo de saber si el dato que obtienes del identd remoto es correcto o no. No hay autentificación en las peticiones de identd.
¿Por qué habrías de ejecutarlo entonces? Porque te ayuda, y es otro punto de datos para el seguimiento. Si tu identd no está comprometido, entonces sabes que está diciendo el nombre de usuario o uid de sitios remotos que usan los servicios TCP. Si el administrador de un sitio remoto te responde y te dice que el usuario tal-y-tal estaba tratando de hacer hack en su sitio, puedes fácilmente emprender una acción en contra de este usuario. Si no estás ejecutando identd, tendrás que mirar en montones y montones de registros de log, calcular quién estaba conectado en ese momento y, en general, gastar mucho más tiempo en rastrear al usuario.
El identd que viene con la mayoría de las distribuciones es más configurable de lo que mucha gente piensa. Puedes deshabilitarlo para usuarios específicos (ellos pueden hacer un fichero .noident), puedes registrar todas las solicitudes de identd (lo recomendamos), además puedes poner identd para que devuelva un uid en vez de un nombre de usuario o incluso NO-USER.
SATAN, ISS y Otros Exploradores de Red
Hay un conjunto de paquetes de software diferentes que hacen de puerto y dan servicio basados en la exploración de equipos o redes. SATAN, ISS, SAINT y Nessus son algunos de los más conocidos. Este software se conecta al equipo destino (o a todos los equipos destino en una red) en todos los puertos que puede, e intenta determinar qué servicio está ejecutándose ahí. Basado en esta información, puede decir si el equipo es vulnerable a un exploit específico en este servidor.
SATAN (Security Administrator's Tool for Analyzing Networks) (Herramienta de Administrador de Seguridad para Analizar Redes) es un explorador de puerto con una interfaz de web. Puede ser configurado para hacer comprobaciones ligeras, medias o fuertes en un equipo o una red de equipos. Es una buena idea instalar SATAN y explorar tu equipo o red y arreglar los problemas que encuentres. Asegúrate de que la copia de SATAN la obtienes de metalab o de un FTP o sitio web con buena reputación. Hubo una copia troyana de SATAN que fue distribuída en la red. http://www.trouble.org/~zen/satan/satan.html. Ten en cuenta que SATAN no ha sido actualizado desde hace bastante tiempo y algunas de las otras herramientas de más abajo podrían funcionar mejor.
ISS (Internet Security Scanner) (Explorador de Seguridad de Internet) es otro explorador basado en el puerto. Es más rápido que Satan y por eso podría ser mejor para redes grandes. Sin embargo, SATAN tiende a proporcionar más información.
Abacus es un conjunto de herramientas para proveer seguridad y detección de intrusión basadas en el host. Mira su página inicial en la web para más información. http://www.psionic.com/abacus
SAINT es una versión actualizada de SATAN. Está basada en el web y tiene tests mucho más actualizados que SATAN. Puedes averiguar más sobre esto en: http://www.wwdsi.com/saint
Nessus es un explorador de seguridad gratuito. Tiene un interfaz gráfico GTK para facilitar el uso. También está diseñado con una configuración de enchufado muy agradable para hacer tests de exploración de nuevos puertos. Para más información, echa un vistazo a: http://www.nessus.org/
Detectar Exploraciones de Puerto
Hay algunas herramientas diseñadas para alertarte sobre sondeos mediante SATAN e ISS y otro software de exploración. Sin embargo, con el uso frecuente de los grapadores de tcp, y asegurándote de mirar en tus ficheros de log con regularidad, deberías ser capaz de notar tales sondeos. Incluso en la configuración más baja, SATAN aún deja huellas en los logs de un sistema Red Hat.
Hay también exploradores de puerto "clandestinos". Un paquete con el bit TCP ACK activado (como se hace con las conexiones establecidas) probablemente entrará a través de un cortafuegos de filtrado de paquetes. El paquete RST devuelto desde un puerto que _no haya establecido una sesión_ puede considerarse como prueba de que hay vida en ese puerto. Yo creo que los grapadores de TCP no detectarán esto.
sendmail, qmail y MTA
Uno de los servicios más importantes que puedes proporcionar es un servidor de correo. Desafortunadamente, también es uno de los más vulnerables a los ataques, simplemente debido a la cantidad de tareas que debe realizar y los privilegios que normalmente necesita.
Si estás usando sendmail es muy importante mantener las versiones actualizadas. sendmail tiene una historia muy larga de exploits de seguridad. Asegúrate de que siempre estás ejecutando la versión más reciente en http://www.sendmail.org/.
Recuerda que sendmail no tiene que estar ejecutándose para que puedas enviar correo. Si eres un usuario doméstico, puedes desactivar completamente sendmail y simplemente usar tu cliente de correo para enviar correo. Puedes también optar por remover el indicador "-bd" del fichero de inicio de sendmail, desactivando así las entradas de peticiones de correo. En otras palabras, puedes ejecutar sendmail desde el script de inicio usando lo siguiente: # /usr/lib/sendmail -q15m
Esto hará que sendmail limpie cada quince minutos la cola del correo con todos los mensajes que no pudieron entregarse con éxito al primer intento.
Muchos administradores optan por no usar sendmail y en su lugar eligen uno de los otros agentes de transporte de correo. Deberías considerar cambiarte a qmail. qmail fue diseñado desde los cimientos pensando en la seguridad. Es rápido, estable y seguro. Qmail puede encontrarse en http://www.qmail.org/
En competición directa con qmail está "postfix", escrito por Wietse Venema, el autor de tcp_wrappers y otras herramientas de seguridad. Anteriormente llamado vmailer, y patrocinado por IBM, éste es también un agente de transporte de correo escrito desde la base con la seguridad en mente. Puedes encontrar más información sobre vmailer en http://gulic.org/www.vmailer.org
Ataques de Negación de Servicio
Un ataque de "Negación de Servicio" ("Denial of Service") (DoS) es aquel en el que el atacante trata de mantener demasiado ocupado algún recurso para que no pueda responder a las peticiones legítimas o para denegar a los usuarios legítimos el acceso a tu equipo.
Los ataques DoS se han incrementado en los últimos años. Algunos de los más populares y recientes se listan debajo. Ten en cuenta que aparecen otros nuevos constantemente, de tal modo que estos sólo son unos pocos ejemplos. Lee las listas de seguridad de Linux y la lista y archivos de bugtraq para tener información más actual.
Inundación de SYN - La inundación de SYN es un ataque de denegación de servicio de red. Saca provecho de una "escapatoria" en el modo en que se crearon las conexiones TCP. Los núcleos más nuevos de Linux (2.0.30 en adelante) tienen diversas opciones configurables para impedir que los ataques de inundación de SYN denieguen a la gente el acceso a tu máquina o servicios. Ver Seguridad del núcleo para las opciones más adecuadas de protección de núcleo.
Fallo "F00F" de Pentium - Se descubrió recientemente que una serie de códigos de ensamble enviados a un procesador Pentium Intel genuíno reiniciaba el equipo. Esto afecta a todas las máquinas con procesador Pentium (no a los clones, ni a los Pentium Pro o PII), sin importar qué sistema operativo esté ejecutando. Los núcleos de Linux 2.0.32 y superiores contienen un trabajo acerca de este fallo, impidiendo que cierre tu máquina. El núcleo 2.0.33 tiene una versión mejorada del núcleo fix y se recomienda sobre el 2.0.32. Si estás funcionando sobre un Pentium, debes ponerte al día ¡ya!
Inundación de Ping - La inundación de Ping es un ataque simple de denegación de servicio por la fuerza bruta. El atacante envía una "riada" de paquetes ICMP a tu máquina. Si hace esto desde un host con mayor ancho de banda que el tuyo, tu equipo será incapaz de enviar nada a la red. Una variante de este ataque, llamado "smurfing", envía paquetes ICMP a un host con el retorno de IP de tu equipo, posibilitando que te inunden de forma menos detectable. Puedes encontrar más información sobre el ataque de "smurf" en http://www.quadrunner.com/~chuegen/smurf.txt
Si estás bajo un ataque de inundación de ping, usa una herramienta como tcpdump para determinar de dónde vienen los paquetes (o parece que vienen) y contacta luego con tu proveedor con esta información. Las inundaciones de ping pueden detenerse más fácilmente a nivel de enrutador o usando un cortafuegos.
Ping de la Muerte - El ataque Ping de la Muerte envía paquetes ICMP ECHO REQUEST que son demasiado grandes para encajar en las estructuras de datos del núcleo diseñadas para almacenarlos. Dado que enviar un sólo paquete "ping" grande (65,510 bytes) para muchos sistemas será causa de que se cuelguen o incluso se rompan, este problema fue rápidamente bautizado como el "Ping de la Muerte". Hace tiempo que ha sido arreglado y ya no es algo de lo que preocuparse.
Lágrima / Nuevo Lágrima - Uno de los más recientes exploits consiste en un fallo presente en el código de fragmentación IP en plataformas Linux y Windows. Se arregla en la versión 2.0.33 del núcleo y no requiere seleccionar alguna de las opciones de tiempo de compilación de núcleo para utilizar el arreglo. Linux aparentemente no es vulnerable al exploit "nueva lágrima".
Puedes econtrar un código para la mayoría de los exploits y una descripción más detallada de cómo funcionan en http://www.rootshell.com/ usando su motor de búsqueda.
Seguridad de NFS (Network File System).
NFS es un protocolo de compartición de ficheros muy ampliamente usado. Permite a los servidores ejecutar nfsd y mountd para "exportar" sistemas de ficheros completos a otras máquinas usando el soporte de sistema de ficheros NFS construído para sus núcleos (o usando algún otro soporte de cliente si no son máquinas Linux). mountd mantiene registro de los sistemas de ficheros montados en /etc/mtab y puede mostrarlos con showmount.
Muchos sitios usan NFS para servir directorios home a los usuarios, así que no importa a qué máquina del cluster se conecten, tendrán todos sus ficheros home.
Hay una pequeña cantidad de seguridad posible al exportar sistemas de archivos. Puedes hacer que tu nfsd haga un mapa del usuario de root remoto (uid=0) para el usuario nobody, denegándoles totalmente el acceso a los ficheros exportados. Sin embargo, dado que los usuarios individuales tienen acceso a sus propios ficheros (o al menos el mismo uid), el usuario root remoto puede registrar o hacer su a su cuenta y tener total acceso a sus ficheros. Esto es sólo un pequeño obstáculo para un atacante que tenga acceso a montar tus sistemas de archivo remoto.
Si tienes que usar NFS, asegúrate de que exportas sólo a aquellos equipos a los que realmente necesitas hacerlo. Nunca exportes tu directorio de root completo; exporta sólo los directorios que necesites exportar.
Ver el NFS COMO para más información sobre NFS, disponible en http://metalab.unc.edu/mdw/HOWTO/NFS-HOWTO.html
NIS (Network Information Service) (anteriormente YP).
El servicio de información de red (antes YP) es un medio de distribuir información a un grupo de equipos. El administrador de NIS mntiene las tablas de información y las convierte en archivos de mapas NIS. Después, estos mapas se sirven a la red, permitiendo a los equipos clientes del NIS obtener información sobre conexión, contraseña, directorio home y shell (toda la información en un fichero /etc/passwd estándar). Esto permite a los usuarios cambiar su contraseña una vez y que tenga efecto sobre todas los equipos en el dominio NIS.
NIS no es seguro en absoluto. Nunca se pretendió que lo fuese. Se pensó para que fuese manejable y útil. Cualquiera puede averiguar el nombre de tu dominio NIS (cualquiera en la red), puede obtener una copia de tu fichero passwd y usar "crack" y "John the Ripper" contra las contraseñas de tus usuarios. También, es posible engañar a NIS y hacer todo tipo de trucos sucios. Si tienes que usar NIS, asegúrate de que eres consciente de los peligros.
Hay un sustituto mucho más seguro para NIS, llamado NIS+. Mira en el NIS COMO para más información: http://metalab.unc.edu/mdw/HOWTO/NIS-HOWTO.html
Cortafuegos
Los cortafuegos son un medio de controlar a qué información se le permite entrar y salir de tu red local. Normalmente, el host cortafuegos está conectado a Internet y a tu LAN local, y el único acceso desde tu LAN a Internet es a través del cortafuegos. De este modo, el cortafuegos puede controlar lo que pasa en una u otra dirección entre Internet y tu LAN.
Hay muchos tipos de cortafuegos y de métodos de configurarlos. Los equipos Linux son muy buenos cortafuegos. El código del cortafuego puede construirse en los núcleos 2.0 y superiores. Las herramientas de modo usuario ipfwadm para núcleos 2.0, o ipchains para núcleos 2.2, te permiten cambiar, al vuelo, los tipos de tráfico de red que permites. También puedes registrar tipos particulares de tráfico de red.
Los cortafuegos son una técnica muy útil e importante para asegurar tu red. Sin embargo, no pienses que porque tienes un cortafuegos, no necesitas asegurar los equipos que están detrás de él. Esto es un error fatal. Mira el excelente Cortafuegos COMO en tu fichero metalab más reciente para más información sobre cortafuegos y Linux. http://metalab.unc.edu/mdw/HOWTO/Firewall-HOWTO.html
Más información también puede encontrarse en el Mini-cómo del Enmascaramiento de IP: http://metalab.unc.edu/mdw/HOWTO/mini/IP-Masquerade.html
Más información en ipfwadm. La herramienta que te permite cambiar las configuraciones de tu cortafuegos, puede encontrarse en su página home: http://www.xos.nl/linux/ipfwadm/
Si no tienes experiencia con cortafuegos, y piensas instalar uno no sólo por una mera política de seguridad, es de obligatoria lectura el libro 'Firewalls' de O'Reilly y Associados u otro documento online sobre cortafuegos. Mira en http://www.ora.com/ para más información. El National Institute of Standards and Technology ha recopilado un documento excelente sobre cortafuegos. Aunque data de 1995, es aún bastante bueno. Puedes encontrarlo en http://csrc.nist.gov/nistpubs/800-10/main.html. También de interés son:
El Proyecto Freefire -- una lista de las herramientas de cortafuegos disponibles gratuitamente, que está en http://sites.inka.de/sites/lina/freefire-l/index_en.html
Diseño de Cortafuegos SunWorld -- escrito por los autores del libro de O'Reilly, proporciona una introducción tosca a los diferentes tipos de cortafuegos. Está disponible en http://www.sunworld.com/swol-01-1996/swol-01-firewall.html
8.11 Cadenas IP - Cortafuegos Linux para el Núcleo 2.2.x
Las Cadenas Cortafuegos IP de Linux es una actualización del código de cortafuegos de Linux 2.0 para el núcleo 2.2. Tiene una gran cantidad de características más que las implementaciones previas, incluyendo:
Manipulaciones más flexibles de paquetes.
Conteo más complejo.
Posibilidad de hacer cambios simples de política atómicamente.
Los fragmentos pueden ser explícitamente bloqueados, denegados, etc.
Registra paquetes sospechosos.
Puede manejar otros protocolos distintos a ICMP/TCP/UDP.
Si actualmente estás usando ipfwadm en el núcleo 2.0, hay scripts disponibles para convertir el formato del comando ipfwadm al formato que usa ipchains.
No dejes de leer el Cadenas IP COMO para más información. Está disponible en http://www.rustcorp.com/linux/ipchains/HOWTO.html
VPNs - Redes Privadas Virtuales
Las VPNs son una forma de establecer una red "virtual" por encima de una red ya existente. Esta red virtual a menudo está encriptada y el tráfico pasa sólo hacia y desde algunas entidades conocidas que se han unido a la red. Las VPNs se usan con frecuencia para conectar a alguien que trabaja en casa con la internet pública a la red interna de una compañía usando una red encriptada virtual.
Si estás ejecutando un cortafuegos de enmascaramiento de Linux y necesitas pasar paquetes de MS PPTP (producto punto a punto VPN de Microsoft), hay un parche del núcleo de linux para hacer esto. Ver: ip-masq-vpn.
Hay diversas soluciones VPN de Linux disponibles:
vpnd. Ver el http://www.crosswinds.net/nuremberg/~anstein/unix/vpnd.html.
Free S/Wan, disponible en http://www.xs4all.nl/~freeswan/
ssh puede usarse para construir una VPN. Ver el Mini-cómo de VPN para más información.
vps (servidor privado virtual) en http://www.strongcrypto.com/.
Ver también la sección sobre IPSEC para enlaces y más información.
Preparación de la Seguridad (antes de estar en-línea)
Vale, has probado tu sistema, has determinado que es tan seguro como factible y estás preparado para ponerlo online. Hay unas pocas cosas que deberías hacer ahora para prepararte para una intrusión, de forma que rápidamente puedas desactivar al intruso, obtener copias de seguridad y funcionar.
Hacer una Copia de Seguridad Completa de tu Equipo
La discusión de los métodos de respaldo y almacenaje está más allá del alcance de este documento, pero aquí van unas pocas palabras relativas a copias de respaldo y seguridad:
Si tienes menos de 650 Mb de datos para almacenar sobre una partición, una copia en CD-R de tus datos es un buen modo de proceder (es difícil de estropear después y si se almacena adecuadamente puede durar mucho tiempo). Las cintas y otros medios re-escribibles deben protegerse contra escritura en cuanto la copia de seguridad esté completa y después ser verificadas para impedir falsificación. Asegúrate de que almacenas tus copias de seguridad en un área segura desconectada de la línea. Una buena copia de seguridad te asegura un punto bien conocido desde el cual restaurar tu sistema.
9.2 Elegir un Buen Calendario de Copias de Seguridad
Un ciclo de seis cintas es fácil de mantener. Esto incluye cuatro cintas para la semana, una cinta para los viernes y una cinta para viernes impares. Realiza una copia de seguridad incremental cada día y una copia de seguridad completa en la cinta propia de los viernes. Si haces cambios particularmente importantes o añades datos importantes al sistema, sería adecuado una copia de seguridad completa.
Copia de Seguridad de tu RPM o Debian File Database
En el caso de una intrusión, puedes usar tu base de datos RPM como usarías tripwire, pero sólo si puedes asegurar también que no ha sido modificada. Debes copiar la base de datos RPM a un floppy, y mantener esta copia fuera de conexión en todo momento. La distribución Debian probablemente tiene algo similar.
Los ficheros /var/lib/rpm/fileindex.rpm y /var/lib/rpm/packages.rpm probablemente no quepan en un sólo floppy. Pero si se comprimen, cada uno por separado debería caber en un floppy.
Ahora, cuando tu sistema está comprometido, puedes usar el comando: root# rpm -Va
para verificar cada fichero del sistema. Ver la página rpm del manual, donde hay unas cuantas opciones que pueden incluirse para hacerlo menos verboso. No olvides que también debes estar seguro de que tu binario RPM no ha sido comprometido.
Esto significa que cada vez que se añade un nuevo RPM al sistema, la base de datos RPM necesitará ser rearchivada. Tendrás que decidir las ventajas frente a los inconvenientes.
LLevar Registro de los Datos de Contabilidad del Sistema
Es muy importante que la información que viene de syslog no haya sido comprometida. Un buen comienzo es hacer legibles y escribibles los ficheros en /var/log sólo para un número limitado de usuarios.
Asegúrate de echar un vistazo a lo que se obtiene escrito ahí, especialmente bajo la facilidad auth. Múltiples fallos de conexión, por ejemplo, pueden indicar un intento de asalto.
Dónde buscar tu fichero de log dependerá de tu distribución. En un sistema Linux que se conforma al "Linux Filesystem Standard", tal como Red Hat, habrá de buscarse en /var/log y comprobar messages, mail.log y otros.
Puedes averiguar hacia dónde está conectando tu distribución mirando en tu fichero /etc/syslog.conf. Éste es el fichero que le dice a syslogd (el demonio de conexión de sistema) dónde registrar los diversos mensajes.
Puedes también desear configurar tu script o demonio de rotación de registro para mantener los registros durante más tiempo, hasta que tengas tiempo de examinarlos. Echa un vistazo al paquete logrotate en las distribuciones recientes de Red Hat. Otras distribuciones probablemente tengan un procedimiento similar.
Si tus ficheros de log han sido estropeados, mira a ver si puedes determinar cuándo empezó el estropicio y que tipo de cosas parecen estar estropeadas. ¿Hay grandes períodos de tiempo de los que no puedes responder? Una buena idea es comprobar las cintas de seguridad (si tienes alguna) por si tienes ficheros de log no estropeados.
Los ficheros de log normalmente son modificados por el intruso para tapar sus huellas, pero aún así deben ser comprobados en busca de acontecimientos extraños. Puedes tener noticia de los intentos del intruso para lograr entrar, o de explotar un programa para obtener la cuenta del root. Podrías ver también registros de entradas antes de que el intruso tenga tiempo de modificarlas.
Debes asegurarte de separar la facilidad auth de otros datos de log, incluyendo los intentos de cambio de usuarios usando su, los intentos de conexión y otra información de contabilidad del usuario .
Si es posible, configura syslog para enviar una copia de los datos más importantes a un sistema seguro. Esto impedirá que un intruso encubra sus huellas borrando sus intentos de login/su/ftp/etc. Ver la página syslog.conf del manual y las referidas a la opción @.
Hay diversos programas syslogd más avanzados por ahí. Echa un vistazo a http://www.core-sdi.com/ssyslog/ para Secure Syslog. Secure Syslog te permite encriptar tus entradas syslog y asgurarte de que nadie las ha estropeado.
Otro syslogd con más características es syslog-ng. Te permite mucha más flexibilidad en tu logging y también puede tener tus flujos de syslog remoto para impedir las falsificaciones.
Finalmente, los ficheros de log son mucho menos útiles cuando nadie los lee. Tómate algún tiempo de vez en cuando para mirar tus ficheros de log y hazte una idea de qué pinta tienen en un día normal. Saber esto puede ayudar a notar las cosas inusuales.
Solicita todas las Nuevas Actualizaciones de Sistema.
La mayoría de los usuarios instalan Linux desde un CD-ROM. Debido a la naturaleza rápidamente cambiante de las mejoras de seguridad, siempre se están distribuyendo nuevos programas (mejorados). Antes de conectar tu máquina a la red, sería una buena idea revisar el sitio FTP de tu distribución y obtener todos los paquetes actualizados desde que recibiste el CD-ROM de tu distribución. Muchas veces estos paquetes contienen importantes mejoras de seguridad, por lo que es bueno tenerlos instalados.
Qué Hacer Durante y Después de una Ruptura
¿Has seguido algunos de los consejos dados aquí (o en otro sitio) y has detectado una ruptura? Lo primero que hay que hacer es mantener la calma. Las acciones precipitadas pueden causar más daño que el que haría el atacante.
Compromiso de Seguridad en marcha.
Descubrir un compromiso de seguridad que está en marcha puede ser una aventura tensa. La forma en la que reacciones puede tener grandes consecuencias.
Si el compromiso que estás viendo es físico, lo más probable es que hayas descubierto que alguien ha entrado en tu casa, oficina o laboratorio. Debes dar parte a las autoridades locales. En un laboratorio, podrías haber sorprendido a alguien intentando abrir una carcasa o reiniciar una máquina. Dependiendo de tu autoridad y procedimientos, podrías pedirle que parara o contactar con la gente de seguridad de tu local.
Si has detectado a un usuario local intentando comprometer tu seguridad, la primera cosa a hacer es confirmar que de hecho son quienes tú crees que son. Comprueba el sitio desde el cual se están conectando. ¿Es el sitio desde dónde normalmente se conectan? ¿No? Entonces usa un medio no-electrónico de darles un toque. Por ejemplo, llámalos por teléfono o dáte una vuelta por su oficina/casa y habla con ellos. Si confirman que están conectados, puedes pedirles que te expliquen qué estaban haciendo o pedirles que dejen de hacerlo. Si no están conectados, y no tienen ni idea de lo qué les estás diciendo, lo más probable es que este incidente requiera posterior investigación. Revisa tales incidentes y recoge un montón de información antes de hacer acusaciones.
Si has detectado un compromiso en la red, lo primero que hay que hacer (si eres capaz) es desconectar tu red. Si ellos están conectados vía modem, desenchufa el cable del modem; si están conectados vía ethernet, desenchufa el cable de Ethernet. Esto les impedirá hacer más daño y probablemente lo vean como un problema de la red y no como una detección.
Si eres incapaz de desconectar la red (si tienes un sitio ocupado o no tienes control físico de tus máquinas), el siguiente mejor paso es usar algo como tcp_wrappers o ipfwadm pare denegar el acceso desde el sitio del intruso.
Si no puedes denegar el acceso a toda la gente procedente del mismo sitio que el intruso, tendrás que cerrar la cuenta del usuario. Ten en cuenta que cerrar una cuenta no es cosa fácil. Tienes que tener en cuenta los ficheros .rhosts, el acceso de FTP y un montón de posibles puertas traseras.
Después de que hayas hecho algo de lo anterior (desconectado la red, denegado el acceso desde el sitio y/o desactivar su cuenta), necesitas cargarte todos sus procesos de usuario y desactivarlos.
Debes controlar bien tu sitio en los siguientes minutos, dado que el atacante intentará volver a entrar. Quizás usando una cuenta diferente y/o desde una dirección de red diferente.
El Compromiso de Seguridad ya ha ocurrido
Vale, o has detectado un compromiso que ya ha ocurrido o lo has detectado y (esperemos) has echado al atacante ofensivo fuera de tu sistema. ¿Ahora qué?
Cerrar el Agujero
Si eres capaz de determinar qué medios usó el atacante para entrar en tu sistema, debes intentar cerrar ese agujero. Por ejemplo, quizás tú ves varias entradas de FTP justo antes de que el usuario se conecte. Desactiva el servicio FTP y pruébalo y mira si hay una versión actualizada o si alguien de las listas sabe de una mejora.
Comprueba todos tus ficheros de log, haz una visita a tus listas y páginas de seguridad y mira si hay nuevos exploits comunes que puedas arreglar. Puedes encontrar las mejoras de seguridad de Caldera en http://www.caldera.com/tech-ref/security/. Red Hat no tiene todavía separadas sus mejoras de seguridad de sus mejoras de fallos, pero las erratas dla distribución están disponibles en http://www.redhat.com/errata
Ahora Debian tiene una lista de correo y una página web de seguridad. Ver: http://www.debian.com/security/ para más información.
Es muy probable que si un vendedor ha repartido una actualización de seguridad, la mayoría de los otros vendedores de Linux la tenga también.
Ahora hay un nuevo proyecto de auditar la seguridad de Linux. De forma metódica van pasando por todas las utilidades de espacio de usuario buscando posibles exploits y desbordamientos de seguridad. Dicen en su anuncio:
"Estamos intentando hacer una auditoría sistemática de las fuentes de Linux con vistas a que sea tan seguro como OpenBSD. Ya hemos descubierto (y mejorado) algunos problemas, pero más ayuda será bienvenida. La lista no está moderada y es también un recurso útil para discusiones generales de seguridad. La dirección de la lista es: security-audit@ferret.lmh.ox.ac.uk Para suscribirte, envía un correo-e a: security-audit-subscribe@ferret.lmh.ox.ac.uk"
Si no echas fuera al atacante, probablemente volverá. No sólo volverá a tu equipo, sino que volverá a cualquiera en tu red. Si estuviera ejecutando un husmeador de paquetes, hay muchas probabilidades de que tenga acceso a otras máquinas locales.
Evaluar el Daño
Lo primero es evaluar el daño. ¿Qué ha estado comprometido? Si estás ejecutando un Chequeo de Integridad como Tripwire, puedes usarlo para realizar una comprobación de integridad y te será de ayuda lo que te diga. Si no, tendrás que rebuscar en todos tus datos importantes.
Dado que los sistemas Linux están siendo cada vez más fáciles de instalar, podrías considerar salvar tus ficheros de configuración y luego limpiar tu(s) disco(s) y reinstalar, restaurando entonces tus ficheros de usuario y tus ficheros de configuración desde las copias de seguridad. Esto asegurará que tienes un sistema nuevo y limpio. Si tienes que hacer las copias de seguridad a partir del sistema comprometido, tienes que ser especialmente cuidadoso con todos los binarios que restaures, dado que pueden ser caballos troyanos puestos ahí por el intruso.
La re-instalación debe considerarse obligatoria cuando el intruso ha obtenido acceso de root. Además, querrás mantener cualquier evidencia que haya, por lo que puede tener sentido tener un disco libre en sitio seguro.
Luego tienes que preocuparte de cuánto tiempo hace que sucedió el compromiso y si las copias de seguridad mantienen algún trabajo dañado. Más sobre copias de seguridad en seguida.
¡Copias, Copias y Copias!
Tener regularmente copias de seguridad es una bendición en asuntos de seguridad. Si tu sistema está comprometido, puedes restaurar los datos que necesites a partir de las copias de seguridad. Por supuesto, algún dato es valioso también para el atacante y no lo destruirá, sino que lo robará y tendrá sus propias copias; pero al menos tú aún tienes los datos.
Debes comprobar las diversas copias de seguridad realizadas anteriormente antes de restaurar un fichero que ha sido estropeado. ¡¡¡El intruso podría haber comprometido tus ficheros hace mucho tiempo y puedes haber hecho con éxito muchas copias de seguridad de un fichero comprometido!!!
Desde luego, también las copias de respaldo conciernen a un montón de seguridad. Asegúrate de que las almacenas en un lugar seguro. Controla quién tiene acceso a ellas. (Si un atacante puede obtener tus copias de seguridad, puede tener acceso a todos tus datos sin que tú te enteres.)
Rastrear al Intruso.
Vale, has echado al intruso y recubierto tu sistema, pero aún no está todo hecho. Aunque es improbable que la mayoría de los intrusos sean atrapados, debes dar parte del ataque.
Debes informar del ataque al contacto de administración del sitio desde donde el atacante atacó tu sistema. Puedes mirar este contacto con whois o en la base de datos de Internic. Deberías enviarles un correo electrónico con todas las entradas de log aplicables y fechas y horas. Si descubriste cualquier otra cosa distintiva sobre el intruso, también deberías mencionar esto. Después de enviar el correo electrónico, podrías continuar (si así te parece) con una llamada telefónica. Si ese administrador a su vez descubre a tu atacante, podría hablar con el administrador del sitio desde donde viene y así sucesivamente.
Los buenos crackers a menudo usan muchos sistemas intermedios, algunos (o muchos) de los cuales incluso pueden no saber que han sido comprometidos. Tratar de rastrear a un cracker hasta su sistema home puede ser difícil. Ser amable con los administradores con los que hablas, puede ayudarte mucho para lograr ayuda por parte de ellos.
Debes también notificar a todas las organizaciones de seguridad a las que pertenezcas ( CERT o similares), así como al vendedor de tu sistema Linux.
Fuentes de Seguridad
Hay un MONTON de sitios buenos ahí fuera sobre la seguridad de Unix en general y la seguridad de Linux en particular. Es muy importante suscribirse a una (o más) de las listas de correo sobre seguridad y mantenerse al día en mejoras de seguridad. La mayoría de estas listas son de muy bajo volumen y muy informativas.
Sitios de FTP
CERT es el Equipo de Respuesta para Emergencias de Computadores (Computer Emergency Response Team). A veces envían alertas sobre ataques y mejoras actuales. Ver ftp://ftp.cert.org/ para más información.
Replay ( http://www.replay.com/) tiene archivos de muchos programas de seguridad. Dado que están fuera de los USA, no tienen que obedecer las restricciones sobre criptografía de los USA.
Matt Blaze es el autor de los CFS y un gran defensor de la seguridad. El archivo de Matt está disponible en ftp://ftp.research.att.com/pub/mab
tue.nl es un gran sitio FTP de seguridad en Holanda. ftp://ftp.win.tue.nl/pub/security/