En la sección 2.3.1 ya comentamos algunos aspectos relacionados
con la interceptación de datos en tránsito o en proceso por parte de
usuarios no autorizados; allí hablamos de los ataques y defensas desde un
punto de vista casi exclusivamente físico, por lo que vamos a entrar
ahora en algunos puntos más relacionados con la interceptación lógica. Y
sin duda, la interceptación lógica de datos más conocida y extendida es
el sniffing: en esa misma sección ya introdujimos este término y
hablamos de dispositivos hardware como los sniffers de alta
impedancia; sin embargo, en entornos de trabajo de seguridad media es mucho
más común que el sniffing se produzca utilizando programas (sniffers) y no elementos hardware.
En las redes de difusión, cuando una máquina envía una trama a otra
indica en un campo reservado la dirección del host destino18.3; todas las máquinas del
dominio de colisión ven esa trama, pero sólo su receptora legítima la
captura y elimina de la red. Este es el funcionamiento normal de TCP/IP;
sin embargo, es necesario insistir en un aspecto: todas las máquinas ven la trama, y si no leen todos sus campos es porque no `quieren'. Existe un
modo de funcionamiento de las interfaces de red denominado modo promiscuo, en el cual la tarjeta lee todas las tramas que circulan por la red,
tanto dirigidas a ella como a otras máquinas; el leerlas no implica el
eliminarlas de la red, por lo que el host destino legítimo la
recibirá y eliminará sin notar nada extraño.
Para hacer funcionar un interfaz de red en modo promiscuo es necesario tener
un control total del sistema o, dicho de otra forma, ser root en la
máquina; esto ayuda un poco en la defensa, pero ni de lejos soluciona el
problema que estamos planteado: no podemos permitir que cualquiera que sea
superusuario de un sistema pueda capturar todo el tráfico que pasa por el
mismo (incluyendo claves, correo electrónico, y cientos de datos privados).
Por si esto fuera poco, en los sistemas donde todos los usuarios tienen un
control total de la máquina (por ejemplo, en toda la familia Windows 9x) ni
siquiera hace falta ese privilegio: cualquiera que se siente en un PC puede
ejecutar un sniffer y capturar todo el tráfico de la red.
Programas para `esnifar' tráfico hay para todos los gustos y colores: desde
dsniff y su familia, capaces hasta de capturar los correos electrónicos
directamente en formato SMTP o cargar de forma automática en un
navegador las mismas páginas que visita
la víctima del ataque, hasta el arcaico snoop de Solaris, que vuelca
paquetes en un formato por defecto casi ilegible, pasando por los clásicos
tcpdump o sniffit (que en algunas de sus versiones incluía el
Touch of Dead, capaz de cortar conexiones establecidas entre dos
máquinas sin más que pulsar F5). Para evitar que programas de este
tipo capturen nuestra información existen diferentes aproximaciones más o
menos efectivas, como sustituir los HUBs de nuestra red por switches que
aislan dominios de colisión (<ojo, esto dificulta el ataque pero no lo
imposibilita!) o implantar redes privadas virtuales. Pero sin ninguna duda la
más barata y sencilla es el uso de protocolos cifrados siempre que nos sea
posible (que lo suele ser casi siempre); repetimos una vez más lo que hemos
dicho ya en muchas ocasiones: sustituir telnet y rlogin por SSH y FTP por scp o sftp es muy sencillo, y nos proporciona
un incremento de seguridad abismal en nuestro entorno. Implantar SSL o
túneles seguros quizás es algo más costoso - en tiempo solamente -,
pero también en la mayoría de ocasiones es algo que vale la pena hacer:
en todo momento hemos de tener presente que el sniffing es un peligro
real, que no necesita de grandes medios y, lo que es peor, indetectable en
la mayor parte de casos; a pesar de que existen métodos para tratar de
detectar sistemas con un interfaz en modo promiscuo, no suelen ser todo lo
efectivos que uno podría esperar, ya que detectar una máquina en este
estado no es ni de lejos inmediato.
Como hemos dicho, el sniffing es el ataque de interceptación más
conocido y utilizado, pero no es el único que se puede poner en práctica
contra un sistema determinado, Unix o no. En algunas versiones de Linux
existe un programa denominado ttysnoop (por snooping - fisgoneo -
se conoce a los ataques genéricos de interceptación de datos) capaz de
registrar en tiempo real todo lo que un usuario teclea en una terminal, tanto
física como virtual. Aunque el resultado es en muchos aspectos similar al
sniffing, técnicamente poco tiene que ver con este: en ningún momento
se capturan datos que circulan por la red, la tarjeta no trabaja en modo
promiscuo (es mas, ni siquiera es necesario un interfaz de red), etc;
simplemente, la información que un usuario introduce en una terminal es
clonada en otra, permitiendo tanto la entrada como la salida de datos a través
de ambas. Aunque Linux sea el sistema Unix nativo de ttysnoop existen
versiones también para otros entornos, y por supuesto esta no es la única
herramienta para `fisgonear' en las terminales de usuarios (otro ejemplo
podría ser TTY Watcher, disponible para SunOS y Solaris).
Otro ataque de interceptación, menos utilizado que los anteriores pero
igual de peligroso, es el keylogging, el registro de las teclas pulsadas
por un usuario en una sesión. Aunque es más habitual el uso de keyloggers en entornos Windows, en Unix también disponemos de ellos:
podríamos incluso considerar a ttysnoop como un keylogger
avanzado, que no se limita únicamente a registrar lo tecleado sino que
permite interacción en tiempo real; otro ejemplo de un programa que capture
esta información puede ser una mula de troya clásica, de las que ya hemos
hablado. Incluso en cualquier Unix viene de serie un keylogger: el
programa script, que guarda en un archivo lo que el usuario que lo invoca
lee o escribe en la pantalla; bastaría una llamada a este programa en el
inicio de sesión de cada usuario para conseguir un registro - muy arcaico y
fácilmente falseable - de lo que cada usuario teclea en su terminal, algo
parecido a lo siguiente:
luisa:~# grep script /etc/profile
exec /usr/bin/script -a /tmp/comandos-$USER
luisa:~#
Podemos ver que al invocar a script especificamos el archivo donde
deseamos que se replique la información; si en lugar de un fichero plano
indicamos una terminal, tenemos un clonador de sesiones perfecto, aunque no
interactivo.
Para finalizar este punto podemos reflexionar brevemente sobre la peligrosidad
de los ataques de interceptación; muchos de ellos necesitan privilegios de
superusuario en al menos una máquina, pero por lo demás son realmente
sencillos. Sencillos y peligrosos: aunque se trate de ataques pasivos, y aunque
alguien pueda pensar que si el pirata ya es root no se puede atacar más
al sistema, permiten capturar datos relativos no sólo al sistema comprometido,
sino a otras máquinas que quizás aún no han sido atacadas y que
posiblemente representan el objetivo real del pirata. Evitar estos ataques pasa
en primera instancia por no permitir que un pirata consiga privilegios en un
sistema - mejor si no consigue nada, pero esto no siempre es posible -, y en
segunda por lo que ya sabemos: cifrar cuanto más tráfico mejor.
© 2002 Antonio Villalón Huerta