Una pregunta importante que nos habíamos realizado con respecto a nuestro
esquema de deteccción de intrusos (en concreto cuando hablábamos de SNORT) era qué hacer con la información obtenida del mismo; como
siempre, tenemos varias posibilidades. Por un lado, podemos procesarla
manualmente de forma periódica (por ejemplo cada mañana) y en función de
los datos que nuestros sensores hayan recogido tomar una determinada acción:
bloquear las direcciones atacantes en el firewall corporativo, enviar un
correo de queja a los responsables de dichas direcciones (por desgracia esto no
suele resultar muy útil), realizar informes para nuestros superiores, o
simplemente no hacer nada. Dependerá casi por completo de la política de
seguridad que sigamos o que tengamos que seguir.
Mucho más interesante que cualquiera de estas respuestas manuales es que el
propio
sensor sea capaz de generar respuestas automáticas ante lo que él considere
un intento de ataque. Si elegimos esta opción, lo más habitual suele ser
un bloqueo total de la dirección atacante en nuestro cortafuegos, unida a una
notificación de cualquier tipo (SMS, e-mail...) a los responsables
de seguridad; es siempre recomendable efectuar esta notificación (si no en
tiempo real, si al menos registrando las medidas tomadas contra una determinada
dirección en un log) por motivos evidentes: si bloqueamos completamente
el acceso de alguien hacia nuestros sistemas, debemos pararnos a pensar que
es posible que se trate de un usuario autorizado que en ningún momento
atacaba nuestras máquinas, a pesar de que el sensor que hemos instalado opine
lo contrario. No importa lo seguros que estemos de lo que hacemos ni de las
veces que hayamos revisado nuestra base de datos de patrones: nunca podemos
garantizar por completo que lo que nuestro IDS detecta como un ataque realmente
lo sea.
Un correcto esquema de respuesta automática (asumimos que vamos a bloquear
la dirección que presuntamente nos ataca) debería contemplar al menos
los siguientes puntos:
- >Qué probabilidad hay de que el ataque detectado sea realmente un falso
positivo?
No todos los ataques que un sensor detecta tienen la misma probabilidad de
serlo realmente: por ejemplo, alguien que busca en nuestros servidores web un CGI denominado phf (un programa que se encuentra en
versiones antiguas - muy antiguas - de Apache, y que presenta graves
problemas de seguridad) casi con toda probabilidad trata de atacar nuestros
sistemas; en cambio, una alarma generada porque el sensor detecta un paquete
ICMP de formato sospechoso no tiene por qué representar (y seguramente no lo
hará) un verdadero ataque. Es necesario, o cuanto menos recomendable, asignar
un peso específico a cada alarma generada en el sensor, y actuar sólo
en el caso de que detectemos un ataque claro: o bien un evento que denote muy
claramente un intento de intrusión, o bien varios menos sospechosos, pero
cuya cantidad nos indique que no se trata de falsos positivos.
- >Debemos contemplar direcciones `protegidas'?
Otro punto a tener en cuenta antes de lanzar una respuesta automática contra
un potencial atacante es su origen; si se trata de una dirección externa,
seguramente la respuesta será adecuada, pero si se trata de una interna a
nuestra red (o equivalentemente, de direcciones de empresas colaboradoras,
aunque sean externas) la cosa no está tan clara. Debemos plantearnos que
quizás estamos bloqueando el acceso a alguien a quien, por los motivos que
sea, no deberíamos habérselo bloqueado. Aunque se trate de cuestiones
mas políticas que técnicas, es muy probable que en nuestro IDS debamos
tener claro un conjunto de direcciones contra las que no se va actuar; si desde
ellas se detecta actividad sospechosa, podemos preparar un mecanismo que alerte
a los responsables de seguridad y, bajo la supervisión de un humano, tomar
las acciones que consideremos oportunas.
- >Hay un límite al número de respuestas por unidad de tiempo?
Seguramente la respuesta inmediata a esta pregunta sería `no'; a fin de
cuentas, si me atacan diez direcciones diferentes en menos de un minuto, >qué
hay de malo en actuar contra todas, bloqueándolas? En principio esta
sería la forma correcta de actuar, pero debemos pararnos a pensar en lo que
es normal y lo que no lo es en nuestro entorno de trabajo. >Es realmente
habitual que suframos ataques masivos y simultáneos desde diferentes
direcciones de Internet? Dependiendo de nuestro entorno, se puede considerar
una casualidad que dos o tres máquinas diferentes decidan atacarnos al mismo
tiempo; pero sin duda más de este número resulta cuanto menos sospechoso. Un
pirata puede simular ataques desde diferentes hosts de una forma más o
menos sencilla y si nos limitamos a bloquear direcciones (o redes completas),
es fácil que nosotros mismos causemos una importante negación de servicio
contra potenciales usuarios legítimos (por ejemplo, simples visitantes de
nuestras páginas web o usuarios de correo), lo cual puede representar
un ataque a nuestra seguridad más importante que el que causaría ese
mismo pirata si simplemente le permitiéramos escanear nuestras máquinas. Si
nuestro sensor lanza demasiadas respuestas automáticas en un periodo de tiempo
pequeño, el propio sistema debe encargarse de avisar a una persona que se
ocupe de verificar que todo es normal.
Teniendo en cuenta los puntos anteriores (y seguramente otros), debemos
diseñar un esquema de respuestas automáticas adecuado. Un pseudoalgoritmo
del funcionamiento de nuestro esquema podría ser el siguiente:
ESTADO: {Detecci'on ataque}
SI umbral de respuestas superado: FIN
SI NO
Comprobaci'on IP atacante
SI es IP protegida: FIN
SI NO
Ponderaci'on hist'orica de gravedad
SI umbral de gravedad superado: ACTUAR
SI NO
REGISTRAR
FSI
FSI
FSI
Como vemos, al detectar un ataque desde determinada dirección, el modelo
comprueba que no se ha superado el número de respuestas máximo por unidad
de tiempo (por ejemplo, que no se ha bloqueado ya un número determinado de
direcciones en las últimas 24 horas); si este umbral ha sido sobrepasado no
actuaremos de ninguna forma automática, principalmente para no causar
importantes negaciones de servicio, pero si no lo ha sido,
se verifica que la dirección IP contra la que previsiblemente se actuará no
corresponde a una de nuestras 'protegidas', por ejemplo a una máquina de la
red corporativa: si es así se finaliza. Este `finalizar' no implica ni
mucho menos que el ataque no haya sido detectado y se haya guardado un log
del mismo, simplemente que para evitar problemas mayores no actuamos en tiempo
real contra la máquina: si corresponde al grupo de `protegidas' es porque
tenemos cierta confianza - o cierto control - sobre la misma, por lo que un
operador puede preocuparse más tarde de investigar la alerta. Si se trata de
una dirección no controlada ponderamos la gravedad del ataque: un ataque con
poca posibilidad de ser un falso positivo tendrá un peso elevado,
mientras que uno que pueda ser una falsa alarma tendrá un peso bajo; aún
así, diferentes ataques de poco peso pueden llegar a sobrepasar
nuestro
límite si se repiten en un intervalo de tiempo pequeño. Es importante
recalcar el `diferentes', ya que si la alarma que se genera es todo el rato la
misma debemos plantearnos algo: >es posible que un proceso que se ejecuta
periódicamente y que no se trata de un ataque esté todo el rato levantando
una falsa misma alarma? La respuesta es sí, y evidentemente no
debemos bloquearlo sin más; seguramente es más recomendable revisar nuestra
base de datos de patrones de ataques para ver por qué se puede estar
generando contínuamente dicha alarma.
Por último, si nuestro umbral no se ha superado debemos registrar el ataque,
su peso y la hora en que se produjo para poder hacer ponderaciones históricas
ante más alarmas generadas desde la misma dirección, y si se ha superado
el esquema debe efectuar la respuesta automática: bloquear al atacante en
el cortafuegos, enviar un correo electrónico al responsable de seguridad, etc.
Debemos pensar que para llegar a este último punto, tenemos que estar bastante
seguros de que realmente hemos detectado a un pirata: no podemos permitirnos
el efectuar respuestas automáticas ante cualquier patrón que nos parezca
sospechoso sin saber realmente - o con una probabilidad alta - que se trata
de algo hostil a nuestros sistemas.
Antes de finalizar este punto, es necesario que volver a
insistir una vez más en algo que ya hemos comentado: es muy recomendable
que ante cada respuesta se genere un aviso que pueda ser validado por un
administrador de sistemas o por responsables de seguridad, mejor si es en
tiempo real; por muy seguros que estemos del correcto funcionamiento de nuestro
detector de intrusos, nadie nos garantiza que no nos podamos encontrar ante
comportamientos inesperados o indebidos, y con toda certeza es más fácil
para una persona que para una máquina darse cuenta de un error y subsanarlo.
© 2002 Antonio Villalón Huerta