Ofrecer servicios de forma segura

Introducción

Existen diversas amenazas cuando una empresa, organización o individuo decide poner a disposición de un grupo de usuarios información o servicios a través de una red de comunicaciones. Evidentemente, el ofrecer un servicio al mundo exterior significa abrir una puerta a una red que podría ser totalmente impermeable al exterior. Esto es así porque un servicio puede tener vulnerabilidades que permitan que un atacante pueda malversarlo para realizar funciones distintas a las que se le suponían en principio.

Las medidas de protección de una entidad que desee ofrecer estos servicios son, además de las indicadas previamente (sistemas de protección perimetral), aquellas dirigidas hacia asegurar que las aplicaciones finales (ofrecidas a los clientes) funcionan correctamente y carecen de fallos en su configuración, o vulnerabilidades, que puedan hacer que sean malversadas.

Aplicaciones para realizar auditorías de seguridad de sistemas.

Las herramientas de auditoría permiten detectar, de forma rutinaria, problemas de seguridad para los que pudieran existir ataques conocidos. Este tipo de programas no sustituyen al sentido común ni a la experiencia de un buen administrador, sino que suponen una ayuda para realizar algunas tareas rutinarias que pueden llevarle mucho tiempo.

Estos programas pueden operar a muchos niveles, desde la comprobación de la pertenencia de archivos a usuarios y grupos del sistema hasta pruebas sobre aplicaciones instaladas para verificar si éstas tienen agujeros conocidos. Una forma sencilla de demostrar que una aplicación es vulnerable sería, por ejemplo, comprobar la versión de ésta , y ver si se trata de una versión que tuviera un problema especialmente grave.

Dentro de las herramientas de auditorías podemos dividirlas en dos tipos: auditorías internas también conocidas como de caja blanca, o auditorías externas, también conocidas como de caja negra. Las de caja blanca se realizan con conocimiento interno del sistema, habitualmente haciendo el análisis desde dentro del mismos sistema, mientras que las de caja negra se realizan sin conocimiento previo del sistema ni investigación de su contenido. Poniendo una analogía, si uno tuviera una caja de cartón, la auditoría de caja negra serían moverlo para ver cómo suena e intentar adivinar que hay dentro y la auditoría de caja blanca sería levantar la tapa y mirar dentro.

Auditorías de caja negra

La herramienta libre para auditorías externas más desarrollada es Nessus. Esta herramienta cuenta con más de seiscientas pruebas de seguridad y está siendo desarrollada de forma activa, por lo que el número de pruebas de vulnerabilidades aumenta a medida que salen nuevas vulnerabilidades en sistemas. Esta herramienta cuenta con un servidor (que ha de ejecutarse en un sistema GNU/Linux) y con un cliente gráfico desde la que se configuran y lanzan las pruebas, el cliente está disponible para Linux (con interfaz GTK), Java y Win32.

Existe un buen número de herramientas propietarias para auditorías externas como son: CyberCop Scanner, Retina de eEye e Internet Scanner de SAFESuite. Esta última es interesante por tratarse de una herramienta que empezó siendo de libre distribución pero que cambió posteriormente a una licencia propietaria.

La funcionalidad ofrecida por Nessus y sus equivalentes propietarias puede diferir en algunos puntos, generalmente relacionados con la generación de informes (muy elaborado en ISS y menos elaborado en Nessus), pero sin embargo todas son equiparables en cuanto a capacidad de testeo de vulnerabilidades. De hecho, en pruebas realizadas sobre ambas, Nessus queda en los primeros puestos, en lo referente a vulnerabilidades (reales, no falsos positivos) detectadas en sistema y perfectamente comparable (e incluso mejorando) a sus análogos propietarios, no en vano ha sido elegida en algunas comparativas realizadas por profesionales de la seguridad como la mejor herramienta para realizar auditorías.

Además, algunos de los problemas históricos de estas herramientas, que hacen que la compañía que las realice pierda credibilidad, es la falta de aparición de nuevas versiones a la hora de aparecer nuevas vulnerabilidades. Esto ha tenido lugar, por ejemplo, con ISS, y es fruto de los problemas que pueden afrontar las compañías para destinar recursos a investigación a desarrollo. Es por ello una gran ventaja la posibilidad de que las compañías que dependan de estas herramientas para detectar fallos recientes en sistemas de gran envergadura puedan subcontratar el mantenimiento o actualización de dichas herramientas a terceras compañías en caso de que el fabricante original no esté a la altura de sus necesidades.

Auditorías de caja blanca

En el caso de herramientas de auditoría de caja blanca se pueden encontrar pocas en el campo del software libre, una de las más conocidas sería Tiger, un desarrollo basado en la herramienta COPS de Dan Farmer. Esta herramienta fue desarrollada en 1993 por la Universidad de Texas y, aunque no está siendo mantenida de forma activa actualmente, los chequeos que realiza siguen siendo útiles para sistemas UNIX. En el campo de aplicaciones propietarias se podría hablar de System Scanner de SAFESuite, cuyo objetivo es el mismo, la realización de baterías de pruebas sobre sistemas (que se podrían realizar de forma manual) con una generación integrada de informes. Contrastando ambas herramientas, la funcionalidad que ofrecen es muy similar y, si bien se podría esperar que la herramienta propietaria (y supuestamente actualizada) realizara chequeos en sistemas UNIX actualizados a los avisos de vulnerabilidades enviados por fabricantes, la experiencia demuestra que no es así. Al final, ambas herramientas integran una batería de pruebas que intentan determinar configuraciones incorrectas y permisos defectuosos en sistemas UNIX, evidentemente, este tipo de problemas no han variado mucho en el tiempo y no cambian tampoco para sistemas nuevos como GNU/Linux. La gran ventaja, a la postre, de Tiger frente a System Scanner es que, tratándose de software libre, con el paso del tiempo el testigo puede ser recogido por otra persona que mantenga al día (y añada) nuevos chequeos a la batería de pruebas.

Aplicaciones de detección de intrusos

Una tarea también necesaria a la hora de exponer servicios a Internet es la posibilidad de poder reconocer cuando un sistema se ha comprometido o se están realizando intentos para lograr dicho compromiso. Estos intentos pueden ser escaneos de puertos sobre un sistema o un rango de ellos, intentos de ataques de fuerza bruta de contraseñas, subversión de aplicaciones interactivas, etc.

Para llevar a cabo esta tarea se puede hacer uso de sistemas de detección de intrusión o "Intrusion Detection Systems" (IDS). Estos sistemas se pueden dividir básicamente en dos categorías: basados en host o basados en red. Los basados en host realizan un análisis del sistema "por dentro" para determinar si un intruso ha accedido o a intentado acceder, tareas habituales de estas herramientas son el análisis de los registros del sistema, análisis de los ficheros para detectar modificaciones de los mismos (comprobando la integridad del sistema) o análisis de los procesos ejecutándose en el sistema. Los detectores de intrusos basados en red analizan el envío y recepción de paquetes a sistemas finales en busca de patrones que puedan considerarse ataques remotos contra sistemas internos. Estos últimos no necesitan saber qué servicios se están ofreciendo en los sistemas finales, siendo capaz de detectar ataques contra servicios que no se están ofreciendo.

Detección de intrusos a nivel de red

En el campo de la detección de intrusión a nivel de red la gran estrella en el mundo de software libre es Snort, un sistema ligero que actúa como sniffer de red y puede cotejar el tráfico que pasa por la red con reglas predefinidas con ataques "tipo" e incluso con ataques genéricos (sobrecargas de buffer, escaneos de puertos, etc..). Las funcionalidades de detección que ofrece son exactamente las mismas que las ofrecidas por sus contrincantes propietarios, como por ejemplo RealSecure. De hecho, Snort ha sido utilizado en la realización de sistemas de detección de intrusos "appliances" (es decir, sistemas con configuración mínima que se enchufan a la red y proporcionan de forma inmediata una funcionalidad determinada) y en comparativas con productos similares de otros fabricantes (por ejemplo Nokia) lucha codo con codo por el primer puesto siendo, con mucho, el más rápido de ellos. Sin embargo la característica que se ofrece en otros IDS y no está tan avanzada en Snort es la capacidad de integrar diversas sondas en una única consola y la existencia de consolas gráficas intuitivas que puedan ofrecer, en tiempo real, los avisos a operadores. Estas carencias parecen empezar a mitigarse con la aparición de RazorBack y demarc que son dos interfaces a Snort, el primero es un interfaz desarrollado para GNOME (uno de los dos escritorios libres disponibles para GNU/Linux) y el siguiente un interfaz que hace uso de una base de datos MySQL y Apache para presentar una consola del sistema de detección de intrusos vía WWW.

Otras herramientas de este grupo son:

MOM

Es muy potente y compleja y permite vigilar redes enteras. Por ello no es muy adecuado si sólo se desea vigilar un único sistema. Se basa en un proceso principal que recibe información de procesos clientes distribuidos en distintas máquinas. La última versión en el momento de escribir este documento es MOMv3 y puede obtenerse en http://www.biostat.wisc.edu/~annis/mom3/.

"The Hammer Project"

Es un conjunto de herramientas Java que pueden distribuirse entre varios sistemas y con ello permite identificar ataques que afecten simultáneamente a varios de ellos. De otra forma sería muy difícil relacionar ataques a distintas máquinas entre sí, dado que los logs de cada una son independientes. Estas herramientas se distribuyen bajo licencia GPL y en el momento de escribir este documento puede obtenerse la versión 3.4 en fuentes o binarios en http://www.csds.uidaho.edu/~hummer/.

Deception Toolkit: dtk

Se trata de una herramienta que instala en el sistema servicios falsos que simulan a los reales, al tiempo que modifica las características de servicios legítimos en el sistema para engañar a posibles atacantes. Puede obtenerse esta aplicación y más información sobre ella en su web: http://all.net/dtk.

tcplogd

Detecta rastreos realizados de forma 'silenciosa', es decir aquellas que usan alguna técnica especial como conexiones medio abiertas para que sean más difíciles de detectar. Algunas herramientas que realizan este tipo de rastreos son NMAP, QueSo y Saint. Puede obtenerse esta herramienta en http://kalug.lug.net/tcplogd/

Shadow

Al igual que tcplogd, Shadow detecta rastreos silenciosos. Es fácil de instalar y suele dar buenos resultados. Está formado por dos partes (al menos) un sensor situado fuera del cortafuegos y un analizador de logs que se debe instalar en una máquina interna de la red. Puede obtenerse más información en http://www.nswc.navy.mil/ISSEC/CID/.

HostSentry (proyecto Abacus)

Esta herramienta busca comportamientos extraños al entrar en el sistema, como hacerlo fuera de las horas de trabajo, desde lugares no habituales, etc. HostSentry se distribuye bajo licencia GPL y puede obtenerse en http://www.psionic.com/abacus/ junto con otras herramientas relacionadas englobadas dentro del proyecto Abacus.

Detección de intrusos basados en host

Dentro de las herramientas de detección de intrusos basadas en host podemos hablar, en primer lugar, de comprobadores de integridad. Se trata de programas que comprueba las modificaciones realizadas en ficheros y directorios en un sistema en producción. En una primera pasada se utiliza para generar información sobre éstos en una base de datos, y posteriormente podrá comprobar y avisar de cualquier diferencia (incluso borrados y añadidos). Ejecutado de manera regular permite encontrar cambios en ficheros críticos que podrían haber tenido lugar por la entrada de un "intruso". Habitualmente se marca en la base de datos tanto los permisos y usuarios de los ficheros como un código de redundancia cíclica (CRC) que permite detectar modificaciones de éstos. El prototipo de estos comprobadores de integridad es Tripwire realizado por Gene Kim y Gene Spafford que se trata de software "casi-libre", ya que limita la posibilidad de cobrar por modificaciones realizadas al mismo. Sin embargo en el mundo del software libre existen varios sustitutos para Tripwire: integrit, aide, L5, y samhain. Integrit, por ejemplo, es un sistema actualizado de chequeos de integridad que incluye el uso de algoritmos nuevos de generación de hashes como SHA-1 de 160 bits, y salida en XML. Samhain tiene características que le permiten ejecutarse de forma indetectable en los sistemas (usando estenografía), puede utilizarse con registro en servidores remotos y también incorpora algoritmos novedosos para realizar los hashes como TIGER y Rijndael para el cifrado de la base de datos.

Otra herramienta más sencilla pero útil para detectar intrusiones es chkwtmp que analiza el resultado de wtmp e informa de entradas borradas.

Por último puede mencionarse chkrootkit. Esta pequeña herramienta es capaz de detectar un gran número de "rootkit" realizando comprobaciones en busca de binarios del sistema que hayan podido ser modificados. Se distribuye con las fuentes bajo una licencia libre poco restrictiva. Puede obtenerse este software y más información sobre chkrootkit en http://www.chkrootkit.org/.

Herramientas integradas

Al margen de las herramientas que comprueban la integridad del propio sistema, en lo que a herramientas de detección de intrusos basadas en host propiamente dichas, el software libre no ofrece, todavía, herramientas integradas comparables a las herramientas CyberCop Monitor, RealSecure o System Scanner de ISS. Estas herramientas propietarias suelen ofrecer un número elevado de características (comprobaciones de integridad, análisis de logs, etc.) para las que no existe un competidor directo que sea software libre. Sin embargo, sí se puede hablar de múltiples herramientas para detección de intrusos basadas en hosts que cumplen ciertas (pequeñas) funciones. Algunas de las más interesantes son :

Existe, incluso, programas que se comunican con el núcleo del sistema operativo para servir como sistema de detección de intrusos. Algunos son fruto de investigaciones realizadas como parte del trabajo de las universidades, como imsafe (que analiza el comportamiento de procesos y contrasta éstos con perfiles de ataques) o Eye on Exec (que permite también seguir la evolución de ejecución de los procesos). Más ambicioso, sin embargo, es el proyecto Linux Intrusion Detection System que es una modificación al núcleo de Linux que incorpora capacidades de bloqueo de ficheros, reglas de cortafuegos, etc..

Aplicaciones finales: servidor web, correo, DNS, etc.

Evidentemente, cuando se ofrece un servicio al exterior, este servicio está soportado, además de por toda la infraestructura de comunicaciones y de un sistema operativo final, por una aplicación en sí. Son las aplicaciones las encargadas de resolver las peticiones, pudiendo ofrecer distintos grados de interactividad. En éste área, si cabe, se pueden observar más fácilmente las ventajas que el software libre ha ofrecido frente al software propietario.

Podemos tomar como ejemplo prototipo el servicio de WWW en los servidores en Internet. De un lado, en el campo del software libre, el servidor más desarrollado (aunque no es el único libre) es Apache. De otro, en el campo de software propietario, los servidores más extendidos son el servidor iPlanet de Netscape y el Internet Information Server de Microsoft. Los hechos del último año hablan por sí sólos a la hora de comparar la seguridad de estos servidores, se han detectado importantes vulnerabilidades en los servidores de Microsoft (tanto en su versión para Windows NT 4.0 como para Windows 2000) que culminaron con la aparición de dos gusanos distintos, siendo el más malicioso "Code Red". Estas vulnerabilidades, detectadas por compañías ajenas a Microsoft mediante ensayos en laboratorio, implicaban ejecución directa de código en el sistema operativo (vulnerabilidad UNICODE e ISAPI), el origen de éstas era, por un lado, una inadecuada programación de entrada unido a la relación directa entre servidor y sistema operativo, por otro una inadecuada programación que sufría de una sobrecarga de buffer. En el servidor iPlanet el propio fabricante también ha detectado vulnerabilidades de sobrecarga de buffer. Sin embargo, las vulnerabilidades detectadas durante el mismo tiempo en Apache han sido resultado de la auditoría de código y han sido "supuestas" por cuanto los desarrolladores sospechaban que podrían, a la larga, suponer un problema de seguridad.

Si se comparan la evolución de estos servidores se tiene tres posiciones distintas:

Claramente, esta tercera opción encontrará los problemas posiblemente antes de que aparezcan (aunque esto es un factor que dependerá de la calidad de desarrollo), mientras que en la primera posibilidad los problemas están encerrados en una "caja de gusanos" que puede abrirse en cualquier momento. De nuevo, la seguridad depende de un grupo de personas que activamente monitorizan el desarrollo, pero ¿de donde salen? En el software propietario serán los recursos que el fabricante dedique (o no) a esta tarea, en el software libre dependerá de los recursos puestos en marcha por los propios usuarios del código, pudiendo variar en el tiempo más fácilmente que en el anterior caso.

Dejando al margen los problemas de seguridad específicos de servidores de WWW se pueden considerar otros servicios que puedan ser interesante ofrecer. No se entrará al detalle en cada uno de ellos, sin embargo.

Existen implementaciones basadas en software libre también de todos los servicios de Internet: RADIUS, LDAP, Correo, News, DNS, FTP, etc. En algunos casos existen servicios menos desarrollados y que ofrecen menos funcionalidades frente a sus equivalentes propietarios, como es el caso de los servidores de Radius o LDAP. En otros, como es el servicio de correo y DNS, las implementaciones de referencia son totalmente libres y son, sin lugar a duda, las más extendidas, probadas y analizadas y, en consecuencia, las más seguras.

Defensa ante ataques de denegación de servicio

Un ataque de denegación de servicio (DoS) es, en pocas palabras, cualquier ataque que impida a un servidor ofrecer cualquiera de sus servicios de forma habitual. Por ejemplo si se trata de un servidor de páginas web un ataque DoS provocaría que los visitantes no pudieran acceder a dichas páginas.

Este tipo de ataques se han hecho tristemente famosos por los casos ocurridos recientemente y que han recibido una gran atención por parte de la prensa. En particular tuvo una gran relevancia un ataque realizado a los principales portales americanos incluyendo Yahoo, la CNN, etc.

A grandes rasgos, un ataque DoS se consigue enviando una cantidad inmensa de peticiones al servidor que se desea atacar. De esta forma el servidor se desborda y no es capaz de atender las peticiones legítimas. Para conseguir realizar un número muy grande de peticiones los atacantes se las arreglan para que un número muy grande de ordenadores participen en el ataque. Además se suelen emplear peticiones especiales que provocan que el servidor se quede en un estado de espera o inestable con lo que se multiplica el poder dañino de cada petición.

No existen soluciones software perfectas ante este tipo de ataques. Las mejores medidas que pueden tomarse son disponer de medios para reaccionar rápidamente ante un ataque (probablemente con ayuda de operadores de la red) y emplear software que no disponga de fallos de seguridad que faciliten este tipo de ataques. En este último sentido gana enteros el software que dispone de código abierto y por tanto puede ser auditado (muchos ojos ven más de dos), si además el software es libre la posibilidad de modificación por muchas partes ha demostrado en la práctica que se reduce el tiempo que un fallo de este tipo tardará en ser arreglado.