Cuando implementamos una restricción acerca de qué comunicaciones están permitidas y cuáles no, generalmente consideramos sólo las comunicaciones “estándar”, eso quiere decir: enviar mails por smtp, chat por irc, etc. La mayoría de los firewalls y otros dispositivos de seguridad están preparados para analizar y filtrar este tipo de protocolos, en base a los puertos y los mensajes que cada uno utiliza.
Pero, como buenos expertos en seguridad, debemos pensar: ¿Qué sucede si se utilizan otros medios?. Es decir, si se envía y recibe información utilizando canales de comunicación no convencionales. Se volvería muy difícil detectar estas actividades. A ésta práctica se la conoce como “Covert Channels” (o “Canales Encubiertos”).
Pensemos en el siguiente escenario:
Estamos conectados a internet y necesitamos enviar información importante. El problema es que, dicha conexión permite solamente visitar una lista de sitios web que no nos sirven de nada. En primer lugar, debemos analizar qué podemos hacer además de visitar esas páginas aburridas. Existen muchos protocolos necesarios para el buen funcionamiento de internet, los cuales suelen ser permitidos, porque no representan ningún riesgo (aparentemente).
Para esta prueba de concepto hemos seleccionado el protocolo ICMP, debido a que es el más utilizado por los administradores y las herramientas destinadas a comprobar conectividad, tiempos de respuesta y otros aspectos de la red. Además, los paquetes ICMP tienen la particularidad de contar en su estructura con un campo opcional, reservado para datos.
Este campo suele llenarse con datos aleatorios, para aumentar el tamaño de los paquetes y verificar los tiempos de respuesta con distintas cargas de información. Es decir, tenemos un campo que permite llevar datos y que, como se espera que sean datos aleatorios sin importancia, no suelen ser comprobados por los dispositivos de seguridad… 😉
La siguiente pregunta a responder es: “¿Cómo podemos utilizar este campo para enviar información?”. La forma más entretenida y educativa para hacer esto es crear nuestra propia herramienta que nos permita enviar paquetes ICMP personalizados. Para programarla, vamos a utilizar Scapy, una librería del lenguaje de programación Python, muy fácil de utilizar, que nos permite construir paquetes de red.
En la próxima entrega de este artículo, analizaremos la forma más simple de escribir esta herramienta, con código fuente incluído.
Para más información:
ICMP: http://es.wikipedia.org/wiki/Internet_Control_Message_Protocol
Python: http://www.python.org
Scapy: http://www.secdev.org/projects/scapy/
¡Nos vemos en la próxima!
Fabian Portantier
www.portantier.com