>Qué hacer cuando se detecta una intrusión en la máquina? Muchos
administradores se hacen esta pregunta cuando se dan cuenta de que su seguridad
ha sido quebrada. Por supuesto, en esta situación se pueden hacer muchas
cosas, desde ignorar el hecho y dejar que el pirata haga lo que quiera en
nuestro sistema (obviamente, esto no es recomendable) hasta intentar localizar
al intruso mediante denuncia y orden judicial para tracear la llamada; esto
tampoco es habitual, ya que es muy difícil demostrar ante un juez que un
atacante ha violado nuestra seguridad, por lo que sólo vamos a perder tiempo
y dinero. Lo habitual en entornos universitarios es intentar detectar si el
atacante pertenece a la comunidad universitaria (en cuyo caso se le puede
sancionar), restaurar la integridad del equipo de forma que un ataque similar
no vuelva a tener éxito, y poner de nuevo la máquina a trabajar (recordemos
que la disponibilidad suele ser lo más importante en organizaciones de I+D).
Pero, hagamos lo que hagamos, hay que cumplir una norma básica: no
ponernos nerviosos; si no logramos mantener la calma podemos ser incluso más
perjudiciales para el sistema que el propio intruso o podemos poner a éste
nervioso, lo que puede convertir un simple fisgoneo en una pérdida
irrecuperable de datos.
Desde el punto de vista de Unix, es posible que nos interese localizar el
fallo de seguridad aprovechado por el pirata para cerrarlo y que el problema
no vuelva a ocurrir; sin entrar en temas complejos como el jailing o la
simulación, una de las formas que tenemos para realizar esta tarea es
monitorizar las actividades del intruso, incluso arriesgando la integridad del
sistema (podemos hacer una copia de seguridad por lo que pueda pasar). Para
realizar esto, hemos de ser conscientes de que si alguien ha conseguido
privilegios de administrador en la máquina, puede haber modificado desde los
programas del sistema hasta las librerías dinámicas, pasando incluso por
el subsistema de accounting de procesos. Por tanto, hemos de desconfiar
de los resultados que cualquier orden nos proporcione, ya que el intruso puede
haberlos modificado para ocultar sus actividades. Si queremos auditar las
actividades del atacante hemos de utilizar programas `nuevos', a ser posible
compilados estáticamente (sin dependencia de librerías dinámicas):
podemos utilizar versiones de código fuente disponible para adecuarlas a
nuestro sistema, compilarlas estáticamente en un sistema similar al atacadoA.5,
y utilizarlas en la máquina donde está el intruso.
El proceso de modificar librerías dinámicas habitualmente excede los
conocimientos del atacante medio de entornos I+D; como además conseguir
programas estáticos para nuestro equipo suele
ser complejo y lento en la mayoría de situaciones, y un objetivo básico
es devolver el sistema a su funcionamiento normal cuanto antes, lo habitual no
es utilizar programas compilados de forma estática sino confiar en que el
intruso no haya modificado librerías dinámicas y utilizar versiones
`limpias' de programas dinámicos; por ejemplo, podemos utilizar los programas
originales del sistema operativo que se encuentran en el CD-ROM de instalación
del mismo.
Si en lugar de intentar monitorizar las actividades del intruso en el sistema
lo único que queremos es echarlo de nuestra máquina (esto tiene su parte
positiva, pero también su parte negativa), hemos de tener siempre presente
que desconocemos lo que ha hecho; la forma más efectiva de tirarlo de nuestro
equipo es desconectando el cable de red (mucho mejor que utilizar ifconfig
para detener la tarjeta o shutdown para parar el sistema, ya que el
atacante puede haber contaminado estos programas para que realicen una actividad
diferente a la que en teoría están destinados). Pero no nos podemos
limitar únicamente a desconectar el cable de red: el atacante puede tener
procesos activos en el sistema, bombas lógicas, o simplemente tareas
destructivas planificadas con at o cron; hemos de chequear todo
el sistema en busca de este tipo de amenazas. Un lugar interesante donde
el intruso nos puede causar un problema grave es en los ficheros de
inicialización de la máquina, situados generalmente en /etc/rc?.d/
o /etc/rc.d/.
Una vez detectado y solucionado el problema de seguridad hemos de restaurar
un estado fiable de la máquina, esto es, un estado similar al que tenía
antes de ser atacada. Aunque en muchos lugares se indica restaurar una copia de
seguridad anterior al ataque, esto presenta graves problemas: realmente no
sabemos con certeza cuando se produjo el ataque al sistema, sino que en todo
caso sabemos cuándo se detectó el mismo, por lo que corremos el peligro de
utilizar una copia de seguridad que ya esté contaminada por el atacante. Es
mucho más seguro reinstalar el sistema completo y actualizarlo para solucionar
los fallos que posibilitaron la entrada del intruso, por ejemplo aplicando
patches sobre la versión que hemos instalado.
Restaurar y actualizar el sistema operativo y sus programas puede ser una
tarea pesada, pero no implica ninguna complicación: con toda probabilidad
tenemos a nuestra disposición los CD-ROMs con el software que hemos
de instalar; los problemas reales
surgen con los archivos de los usuarios: evidentemente, no podemos decirles que
para evitar posibles conflictos de seguridad se les han borrado sus archivos,
sino que lo habitual va a ser mantener el estado de sus ficheros justo como
estaban durante el ataque o, en caso de que este haya eliminado o corrompido
información, tal y como estaban exactamente antes del ataque. Por tanto,
especialmente si mantenemos el estado de los ficheros de usuario, hay que
estar atentos a posibles problemas que estos puedan introducir en el sistema,
comentados en el apartado A.3.
© 2002 Antonio Villalón Huerta