
PacketWhisper: Exfiltra datos sigilosamente y evita la atribución mediante consultas DNS y esteganografía basada en texto. Evita los problemas asociados con los métodos típicos de exfiltración DNS. Transfiere datos entre sistemas sin que los dispositivos comunicantes se conecten directamente entre sí ni a un punto final común. No es necesario controlar un servidor de nombres DNS.
PacketWhisper: transfiera datos sigilosamente y evite la atribución mediante consultas DNS y esteganografía basada en texto, sin necesidad de servidores de nombres o dominios controlados por el atacante; evade dispositivos DLP/MLS; burle los controles de listas blancas de datos y servidores de nombres DNS. Convierta cualquier tipo de archivo (ej. ejecutables, Office, Zip, imágenes) en una lista de nombres de dominio completamente calificados (FQDN), use consultas DNS para transferir datos. Simple pero extremadamente efectivo.
(Actualización 27/05/2020: Sí, migraré todos mis proyectos de Github a Python3 durante el verano de 2020.)
Joe Gervais (TryCatchHCF)
La exfiltración DNS tradicional se basa en uno de los siguientes métodos: tunelización DNS; ocultación de datos en campos de consulta DNS; o cargas útiles codificadas/cifradas que se dividen y se usan como subdominios en la consulta DNS. Todos estos métodos requieren que el atacante controle un dominio y/o un servidor de nombres DNS asociado para recibir los datos, lo que conduce a la atribución. Estos enfoques también son vulnerables a las listas negras (comunes) y listas blancas (cada vez más comunes) de servidores DNS. Otro problema es que los analistas DFIR están familiarizados con estos métodos, y los sistemas SIEM a menudo los detectan y alertan al verlos.
PacketWhisper supera estas limitaciones.
¿Qué pasaría si los datos pudieran transferirse utilizando los propios servidores DNS en lista blanca del objetivo, sin que los sistemas de comunicación se conectaran directamente entre sí o a un punto final común? ¿Incluso si el límite de la red empleara listas blancas de datos para bloquear la exfiltración?
Para lograrlo, PacketWhisper combina consultas DNS con esteganografía basada en texto. Aprovechando el Conjunto de Herramientas Cloakify, transforma la carga útil en una lista de cadenas FQDN. Luego, PacketWhisper usa la lista de FQDN para crear consultas DNS secuenciales, transfiriendo la carga útil a través de (o dentro de) los límites de la red, con los datos ocultos a simple vista, y sin que los dos sistemas se conecten directamente entre sí ni a un punto final común. Los cifrados utilizados por PacketWhisper proporcionan múltiples niveles de engaño para evitar generar alertas, así como para desviar los intentos de análisis.
Para recibir los datos, capture el tráfico de red que contiene las consultas DNS, utilizando el método que le sea más conveniente. (Vea "Captura del archivo PCAP" más abajo para ejemplos de puntos de captura). Luego cargue el archivo PCAP capturado en PacketWhisper (ejecutándose en cualquier sistema conveniente), que extrae la carga útil del archivo y la Descloakifica a su forma original.
DNS es un protocolo atractivo de usar porque, aunque es un medio relativamente lento para transferir datos, casi siempre está permitido a través de los límites de la red, incluso en las redes más sensibles.
Nota importante: Estamos usando consultas DNS para transferir los datos, no búsquedas DNS exitosas. PacketWhisper nunca necesita resolver exitosamente ninguna de sus consultas DNS. De hecho, PacketWhisper ni siquiera mira las respuestas DNS. Esto amplía nuestros casos de uso y subraya el hecho de que nunca necesitamos controlar un dominio por el que estamos consultando, ni necesitamos controlar un servidor de nombres DNS que maneje las solicitudes DNS.
Así que usando PacketWhisper, transformamos una carga útil que se ve así:
En una lista de FQDN como esta:
Que PacketWhisper convierte en consultas DNS que aparecen en el tráfico de red así:
Que usted captura como un archivo PCAP en cualquier lugar a lo largo de la ruta de resolución DNS, y luego carga ese PCAP en su copia local de PacketWhisper para recuperar la carga útil:
Vea las diapositivas de DEF CON 26 (incluidas en el proyecto) de mi presentación en Packet Hacking Village. Las diapositivas presentan antecedentes sobre exfiltración DNS, esteganografía basada en texto / Conjunto de Herramientas Cloakify, y cómo PacketWhisper los combina en un método para transferir datos. Creé específicamente las diapositivas para que sean útiles por sí mismas, por lo que los antecedentes y la información deberían estar completos. Sin embargo, también puede ver el video de mi presentación en DC26 Packet Hacking Village que proporciona contexto adicional.
He incluido un archivo PCAP de muestra en el proyecto (astutamente llamado "sample.pcap") que contiene cargas útiles separadas para cada uno de los cifrados. Podrían haber sido cualquier tipo de archivo, por supuesto, pero en este caso simplemente transmití archivos de texto al PCAP. ¡Cárguelo en PacketWhisper y pruébelo!
Como prueba rápida en su propio entorno, ejecute PacketWhisper desde una VM, luego envíe un archivo mientras realiza una captura de paquetes en la interfaz de red de la VM a través del sistema anfitrión. Luego puede cargar el archivo PCAP en cualquier instancia de PacketWhisper que sea conveniente para decodificar el archivo. Solo recuerde que no es una transferencia rápida. Los archivos más pequeños y la paciencia son sus aliados.
Pregunta: "¿Por qué no usó Scapy o el conjunto de herramientas dnspython?"
Respuesta: Odio las dependencias de proyectos en mis herramientas operativas. Mantengo mis proyectos lo más atómicos y autocontenidos posible para máxima confiabilidad, especialmente en el lado del cliente donde puedo no controlar el entorno y/o tener privilegios mínimos. Por la forma en que está estructurado PacketWhisper, puedo hacerlo funcionar en un host con shell limitado simplemente comprimiendo el proyecto y extrayéndolo en el host de destino.
Pregunta: "¿Por qué PacketWhisper no es un fork del proyecto Cloakify Toolset?"
Respuesta: Misma respuesta que arriba. Solo necesitamos un subconjunto muy específico de las capacidades de Cloakify, y agregar todo lo demás a PacketWhisper solo conduciría a un directorio desordenado y herramientas/cifrados que no pueden ser utilizados por PacketWhisper. Dado que poseo ambos proyectos, prometo sincronizar cualquier cambio entre ellos.
$ python packetWhisper.py
Los cifrados basados en FQDN consisten en 3 categorías:
FQDN de Subdominio Aleatorio Único
MODO DE CIFRADO RECOMENDADO PARA LA MAYORÍA DE CASOS DE USO
Estos son FQDN con elementos aleatorios integrados en los subdominios. Esto ayuda a prevenir el almacenamiento en caché DNS, al mismo tiempo que permite transferir datos más allá de los dispositivos de red con NAT que puedan estar en la ruta de consulta DNS. Dado que la dirección IP del sistema emisor no está disponible más allá del dispositivo NAT, los subdominios generados por el cifrado contienen elementos de etiqueta únicos para ayudarnos a identificar las cargas útiles de PacketWhisper en la captura de paquetes.
Estos cifrados imitan los formatos de varios servicios que dependen de subdominios complejos como medio para identificar una sesión, usuario, contenido en caché, etc. Este enfoque ayuda a que las consultas DNS de PacketWhisper se mezclen con el resto del tráfico de la red.