sábado, mayo 28, 2016

SNMPChat: Chatear en un canal encubierto sobre SNMP

En esta entrada quiero presentar una herramienta de mensajería instantánea llamada SNMPchat, la cual utiliza el protocolo SNMP (Simple NetWork Monitoring Protocolo) para intercambiar mensajes de texto entre dos personas. Recordemos que SNMP es un protocolo de monitorización  que se utiliza como parte de la estrategia en la administración de sistemas de todo tipo de elementos, que puede ir desde los routers de una organización, pasando por los servidores, firewalls, para llegar a administrar también los terminales móviles y una gran cantidad de dispositivo en entornos corporativos.

Figura 1: SNMPChat. Chatear en un canal encubierto sobre SNMP

Sobre el uso del protocolo SNMP en el mundo de la autidoría ya se publicaron por aquí muchos artículos que explican cómo sacarle partido al protocolo SNMP para obtener información de la red, los servidores, los dispositivos móviles e incluso los procesos que están corriendo y con qué parámetros fueron lanzados. Los tenéis aquí:
- Auditando Hosts Windows y *NIX* con SNMP (Parte I)
- Auditando Hosts Windows y *NIX* con SNMP (Parte II)
- Descubrir la red de una organización con consultas SNMP
- Shodan y agentes SNMP: Administrando el mundo
- Servidores Novell Netware con agentes SNMPv1 en Shodan
Pero aunque el uso de un protocolo de comunicación fue pensado para monitorear dispositivos y no para intercambiar mensajes de texto, el que esté tan extendido SNMP por los diferentes sistemas y dispositivos convierte a este protocolo en un medio perfecto para crear un canal encubierto (covert channel), ya que esta comunicación podría pasar desapercibida, y oculta en cualquier red. Al igual que cuando se usan técnicas de esteganografía en TCP o las de exfiltración de datos en ICMP, no sería raro ver tramas SNMP en una red, por lo que si no hay mecanismos de seguridad extra no se generaría ninguna alerta por el tráfico SNMP.

Chatear sobre SNMP con SNMPChat

SNMPchat está escrita en Python y fue diseñado sobre una arquitectura cliente-cliente poco convencional en redes de datos que dificulta aún más su detección. Es cliente-cliente ya que no utiliza sockets, es decir, no tiene servicios escuchando en la capa de transporte. Muchos se preguntaran en este momento, ¿bueno, entonces cómo funciona? … bien tanto para el envió como recepción de mensajes utiliza la librería Scapy de Python, la recepción y decodificación de los mensajes la hace a través de sniff, una función de scapy que permite que la tarjeta de red trabaje en modo promiscuo para escuchar el tráfico que esta recibe y gracias a la versatilidad de la función se puede filtrar solamente el tráfico que nos interesa, es decir el trafico SNMP.

Esta arquitectura no utiliza servidores intermedios como hacen los servicios de mensajería instantánea o IRC y se aprovecha de los paquetes SNMP para ocultar la información enviada. Pero se requiere que, si se quiere usar a través de Internet, en los dos extremos se configure en el firewall o router un NAT y una regla para permitir que el tráfico del puerto SNMP vaya hacia cada cliente. Para ello utiliza los mensajes tipo Get-Request de SNMP los cuales son utilizados normalmente para solicitar a través de los OID (Object ID) algún recurso de la MIB (Managment Information Base) en el dispositivo a monitorear. En este caso utilizaremos los OID para ocultar los mensajes de texto.

Figura 2: Mensaje en texto plano camuflado como OID

Los OID se utilizan para definir las ontologías en una comunicación entre dos servicios SNMP, de tal manera que conociendo el OID del objeto que se envía, cada extremo de la comunicación conoce automáticamente la estructura de los atributos. Para ello, tienen un formato del estilo: 1.3.6.1.2.1.1.1, que sirve para identificar de qué objetos extiende su estructura. Como en este caso no vamos a comunicar dos servidores SNMP, lo que hace SNMP  es convertir cada letra del mensaje de texto en su valor ASCII decimal correspondiente y acomodarlos en el OID, conservando el formato del valor y enviando el paquete.

Como ya se explicó, en el otro extremo el receptor realizara el sniffing del tráfico y decodificaraá el mensaje que llego en la OID. Esta es una prueba de concepto que muestra cómo meter datos en los paquetes SNMP sin llamar mucho la atención, los datos van en texto claro y su valor ASCII, así que para garantizar mayor confidencialidad los mensajes deberían ir cifrados extremo a extremo. Aquí tenéis un vídeo que muestra cómo sería la experiencia del sistema.


Figura 3: Configuración y uso de SNMPChat

Al ser un canal encubierto, el riego es generar un tráfico grande entre dos servidores y llamar la atención de los sistemas de monitorización por la cantidad de paquetes enviados, así que, para evitar cifrados de gran peso - que cada uno decide qué quiere utilizar - tal vez sería interesante volver a poner en práctica los sistemas de cifrado clásicos, menos robustos frente a ataques de criptoanálisis, pero menos ruidos en cuanto al número de paquetes que sería necesario enviar.

Configuración y uso de SNMPChat

SNMPchat utiliza la comunidad SNMP para autenticar los mensajes, por lo tanto, esta debe ser configurada igual en los dos extremos, de igual forma que el puerto UDP. La herramienta funciona en Kali Linux perfectamente y no es necesario instalar ninguna dependencia o librería adicional. En las siguiente imagen siguiente se ve la ayudar de la herramienta.

Figura 4: Ayuda de SNMPChat

Es obligatorio para que funcione especificar la dirección IP local (-l) y la dirección IP destino (-d), mientras que la comunidad SNMP (-c) como el puerto (-p) vienen con valores por defecto, Sin embargo se pueden especificar unos diferentes, y si quieres cifrar los mensajes con AES - incorporado por defecto en la herramienta - lo puedes hacer con la opción (-e) para pasarle la key que debe usarse para el cifrado. Luego de especificar los argumentos, la herramienta solicitara ingresar tu nombre para la comunicación y a chatear sobre SNMP se dijo:

Figura 5: Ingreso de nombre para comenzar la conversación

Si quieres abandonar basta con que teclees "q" y de esta forma el otro extremo quedara notificado de que cerraste la sesión. En la siguiente imagen se ve el interfaz de comunicación usando SNMPChat.

Figura 6: Conversación con SNMPChat

El script lo pueden descargar de mi repositorio en Github,y espero que les sirva para poder avanzar en las técnicas de canales encubiertos, esteganografía, estegonanálisis o, simplemente, para chatear un rato.

Saludos desde Colombia.

Autor: Juan Esteban Valencia Pantoja

1 comentario: