Los sistemas de detección de intrusos basados en red (network-based
IDS) son aquellos capaces de detectar ataques contra diferentes sistemas de
una misma red (en concreto, de un mismo dominio de colisión), aunque
generalmente se ejecuten en uno solo de los hosts de esa red. Para lograr
su objetivo, al menos uno de los interfaces de red de esta máquina sensor
trabaja en modo promiscuo, capturando y analizando todas las tramas que pasan
por él en busca de patrones indicativos de un ataque.
>Cuáles pueden ser estos `patrones identificativos de un ataque' a los que
estamos haciendo referencia? Casi cualquiera de los diferentes campos de
una trama de red TCP/IP (podemos consultar [Ste94],
[Com95] o [Tan96] para conocer en profundidad el significado y
la utilidad de cada uno de ellos) puede tener un valor que, con mayor o menor
probabilidad, represente un ataque real; los casos más habituales incluyen:
- Campos de fragmentación.
Una cabecera IP contiene dieciseis bits reservados a información
sobre el nivel de fragmentación del datagrama; de ellos, uno no se utiliza y
trece indican el desplazamiento del fragmento que transportan. Los otros dos
bits indican o bien que el paquete no ha de ser fragmentado por un router intermedio (DF, Don´t Fragment) o bien que el paquete ha
sido fragmentado y no es el último que se va a recibir (MF, More
Fragments). Valores incorrectos de parámetros de fragmentación de los
datagramas se han venido utilizando típicamente para causar importantes
negaciones de servicio a los sistemas y, desde hace también un tiempo incluso
para obtener la versión del operativo que se ejecuta en un determinado host ([Fyo98]); por ejemplo, >qué le sucedería al
subsistema de red implantado en el núcleo de una máquina Unix si nunca
recibe una trama con el bit MF reseteado, indicando que es el
último de un paquete? >se quedaría permanentemente esperándola? >y
si recibe uno que en teoría no está fragmentado pero se le indica que no
es el último que va a recibir? >cómo respondería el núcleo del
operativo en este caso? Como vemos, si en nuestras máquinas observamos
ciertas combinaciones de bits relacionados con la fragmentación
realmente tenemos motivos para - cuanto menos - sospechar que alguien trata
de atacarnos.
- Dirección origen y destino.
Las direcciones de la máquina que envía un paquete y la de la que lo va
a recibir también son campos interesantes de cara a detectar intrusiones en
nuestros sistemas o en nuestra red. No tenemos más que pensar el tráfico
proveniente de nuestra DMZ (y que no se trate de la típica respuesta ante
una petición como las que se generan al visitar páginas web, por
poner un ejemplo) que tenga como destino nuestra red protegida: es muy posible
que esos paquetes constituyan un intento de violación de nuestra
política de seguridad. Otros ejemplos clásicos son las peticiones
originadas desde Internet y que tienen como destino máquinas de nuestra
organización que no están ofreciendo servicios directos al exterior, como
un servidor de bases de datos cuyo acceso está restringido a sistemas de
nuestra red.
- Puerto origen y destino.
Los puertos origen y destino (especialmente este último) son un excelente
indicativo de actividades sospechosas en nuestra red. Aparte de los intentos de
acceso no autorizado a servicios de nuestros sistemas, pueden detectar
actividades que también supondrán a priori violaciones de nuestras
políticas de seguridad, como la existencia de troyanos, ciertos tipos de
barridos de puertos, o la presencia de servidores no autorizados dentro de
nuestra red.
- Flags TCP.
Uno de los campos de una cabecera TCP contiene seis bits (URG, ACK, PSH, RST, SYN y FIN), cada uno de
ellos con una finalidad diferente (por ejemplo, el bit SYN es
utilizado para establecer una nueva conexión, mientras que FIN hace
justo lo contrario: liberarla). Evidentemente el valor de cada uno de estos
bits será 0 o 1, lo cual de forma aislada no suele decir mucho (ni
bueno ni malo) de su emisor; no obstante, ciertas combinaciones de valores
suelen ser bastante sospechosas: por ejemplo, una trama con los dos bits
de los que hemos hablado - SYN y FIN - activados
simultáneamente sería indicativa de una conexión que trata de abrirse
y cerrarse al mismo tiempo. Para hacernos una idea de la importancia de estos
bits de control, no conviene olvidar que uno de los problemas de
seguridad más conocidos de los últimos años sobre plataformas Windows -
de los muchos que han tenido estos entornos - estaba fundamentado básicamente
en el manejo de paquetes OOB (Out Of Band): tramas con el bit
URG activado.
- Campo de datos.
Seguramente, el campo de datos de un paquete que circula por la red es
donde más probabilidades tenemos de localizar un ataque contra nuestros
sistemas; esto es debido a que con toda probabilidad nuestro cortafuegos
corporativo detendrá tramas cuya cabecera sea `sospechosa' (por ejemplo,
aquellas cuyo origen no esté autorizado a alcanzar su destino o con campos
incorrectos), pero rara vez un firewall se parará a analizar el
contenido de los datos transportados en la trama. Por ejemplo, una petición
como `GET ../../../etc/passwd HTTP/1.0' contra el puerto 80 del servidor
web de nuestra empresa no se detendrá en el cortafuegos, pero muy
probablemente se trata de un intento de intrusión contra nuestros sistemas.
Acabamos de ver sólo algunos ejemplos de campos de una trama TCP/IP que,
al presentar determinados valores, pueden ser indicativos de un ataque; sin
embargo, no todo es tan sencillo como comprobar ciertos parámetros de cada
paquete que circula por uno de nuestros segmentos. También es posible y
necesario que un detector de intrusos basado en red sea capaz de notificar
otros ataques que no se pueden apreciar en una única trama; uno de estos
ataques es la presencia de peticiones que, aunque por sí mismas no sean
sospechosas, por su repetición en un intervalo de tiempo más o menos
pequeño puedan ser indicativas de un ataque (por ejemplo, barridos de puertos
horizontales o verticales). Otros ataques difíciles de detectar analizando
tramas de forma independiente son las negaciones de servicio distribuidas
(DDoS, Distributed Denial of Service), justamente por el gran número de
orígenes que el ataque tiene por definición.
Según lo expuesto hasta ahora en este punto, puede parecer que los sistemas
de detección de intrusos basados en red funcionan únicamente mediante la
detección de patrones; realmente, esto no es así: en principio, un
detector de intrusos basado en red puede estar basado en la detección de
anomalías, igual que lo puede estar uno basado en máquinas. No obstante,
esta aproximación es minoritaria; aunque una intrusión generará
probablemente comportamientos anormales (por ejemplo, un tráfico excesivo
entre el sistema atacante y el atacado) susceptibles de ser detectados y
eliminados, con demasiada frecuencia estos sistemas no detectarán la
intrusión hasta que la misma se encuentre en un estado avanzado. Este problema
hace que la mayor parte de IDSes basados en red que existen actualmente
funcionen siguiendo modelos de detección de usos indebidos.
Para finalizar este punto dedicado a los sistemas de detección de intrusos
basados en red es necesario hablar de las honeynets ([Spi01b]) -
literalmente, `redes de miel' -. Se trata de un concepto muy parecido al de
los honeypots, de los que ya hemos hablado, pero extendido ahora a redes
completas: redes diseñadas para ser comprometidas, formadas por sistemas
reales de todo tipo que, una vez penetrados, permiten capturar y analizar las
acciones que está realizando el atacante para así poder aprender más
sobre aspectos como sus técnicas o sus objetivos. Realmente, aunque la idea
general sea común, existen dos grandes diferencias de diseño entre un
tarro de miel y una honeynet: por un lado, esta última evidentemente es
una red completa que alberga diferentes entornos de trabajo, no se trata de una
única máquina; por otro, los sistemas dentro de esta red son sistemas
reales, en el sentido de que no simulan ninguna vulnerabilidad, sino que
ejecutan aplicaciones típicas (bases de datos, sistemas de
desarrollo...) similares a las que podemos encontrar en cualquier entorno de
trabajo `normal'. El objetivo de una honeynet no es la decepción, sino
principalmente conocer los movimientos de un pirata en entornos semireales, de
forma que aspectos como sus vulnerabilidades o sus configuraciones incorrectas
se puedan extrapolar a muchos de los sistemas que cualquier empresa posee
en la actualidad; de esta forma podemos prevenir nuevos ataques exitosos contra
entornos reales.
En el funcionamiento de una `red de miel' existen dos aspectos fundamentales
y especialmente críticos, que son los que introducen la gran cantidad
trabajo de administración extra que una honeynet implica para
cualquier organización. Por un lado, tenemos el control del flujo de los
datos: es vital para nuestra seguridad garantizar que una vez que un
sistema dentro
de la honeynet ha sido penetrado, este no se utilice como plataforma de
salto para atacar otras máquinas, ni de nuestra organización ni de cualquier
otra; la `red de miel' ha de permanecer perfectamente controlada, y por supuesto
aislada del resto de los segmentos de nuestra organización. En segundo lugar,
otro aspecto básico es la captura de datos, la monitorización de las
actividades que un atacante lleva a cabo en la honeynet. Recordemos que
nuestro objetivo principal era conocer los movimientos de la comunidad pirata
para poder extrapolarlos a sistemas reales, por lo que también es muy
importante para el correcto funcionamiento de una honeynet una correcta
recogida de datos generados por el atacante: ha de ser capturada toda la
información posible de cada acción, de una forma poco agresiva (esto es,
sin tener que realizar grandes cambios en cada uno de los sistemas) y por
supuesto sin que el atacante se entere. Además (muy importante), estos datos
recogidos nunca se
han de mantener dentro del perímetro de la honeynet, ya que si fuera
así cualquier pirata podría destruirlos con una probabilidad demasiado
elevada.
El concepto de honeynet es relativamente nuevo dentro del mundo de la
seguridad y, en concreto, de los sistemas de detección de intrusos; a pesar de
ello, se trata de una idea muy interesante que presumiblemente va a extenderse
de una forma más o menos rápida (no todo lo rápida que nos gustaría,
ya que implantar y explotar una honeynet no es algo ni trivial, ni mucho
menos rápido); cada día más, las herramientas de seguridad no se
conforman con detectar problemas conocidos, sino que tratan de anticiparse a
nuevas vulnerabilidades que aún no se han publicado pero que pueden estar -
y de hecho están - presentes en multitud de sistemas. Conocer cuanto antes
cualquier avance de la comunidad underground es algo vital si queremos
lograr este objetivo.
Como antes hemos comentado, los sistemas de detección de intrusos basados en
red, de los que hemos hablado a lo largo de este punto, son con diferencia los
más utilizados actualmente en sistemas en explotación; no obstante, como
casi cualquier herramienta relacionada con la seguridad, estos sistemas no son
ninguna panacea, y su implantación ha de verse complementada con una correcta
configuración de elementos como nuestro cortafuegos corporativo o, por
supuesto, los sistemas de detección basados en host. Veremos más
adelante, en este mismo capítulo, que ambos tipos de IDSes son igualmente
necesarios en nuestro entorno de trabajo.
© 2002 Antonio Villalón Huerta