DGA o no DGA, esa es la cuestión

David García    31 agosto, 2022
Malware

El malware. El malware no cambia nunca, pero evoluciona. Solo tenemos que meternos en la piel de un creador de malware y los problemas a nivel técnico que tiene generar un buen ejemplar con una infraestructura que perdure y resistente a los cambios.

En primer lugar, supongamos que sí que tenemos un buen ejemplar para cifrar archivos y pedir un rescate o exfiltrar información interesante que podemos vender a un tercero. ¿Infectamos sin más y dejamos que nuestra criatura se las apañe sola en un mundo que le es hostil? En el amanecer de la economía del malware no había otra forma. Se liberaba el ejemplar y este ya traía de casa la lista de tareas a llevar a cabo cuando la infección se producía. Si el creador se equivocaba o algún laboratorio pillaba pronto al espécimen ahí se quedaba el intento.

No había forma de decirle al programa que se actualizase, que parase o que dejase de infectar. Por lo tanto, del mismo modo que los programas honestos que, se actualizan, parchean o recuperan su configuración, el malware no iba a ser menos y se fue montando una arquitectura distribuida para rentabilizar las infecciones.

Vale. Hacemos que el malware se actualice, ejecute órdenes y nos deje beneficios. Para ello, disponemos de una miríada de medios a nuestro alcance. Basta con abrir un canal de comunicación y usarlo. Mensajería instantánea, IRC e incluso redes sociales comunes a través de mensajes escondidos o cifrados e incluso incrustados en fotos.

El problema

Y aquí viene el problema. Cuando quieres unir dos partes: malware <-> centro de mando y control, son dos granos de arena en un desierto virtualmente infinito. Necesitas que el malware “sepa” donde encontrar su centro de mando y control. También como C&C. Por cierto, como muchos otros acrónimos tomados de ese campo, el C2, C&C o centro de mando y control viene del argot militar. Concretamente, un C&C puede encontrarse en los buques de guerra. Es una sala donde se concentra todo lo relacionado con la adquisición de información, toma de decisiones y ejecución de órdenes relacionadas con la defensa.

Esto se hace, naturalmente, a través de dominios, que son una de las piedras maestras que sostienen Internet. Evidentemente, también puedes hacerlo con direcciones IP directamente, pero conlleva tantos inconvenientes implícitos que es un descarte inmediato.

Parece que hemos solucionado nuestro problema. Nuestro malware portará unos cuantos dominios donde podrá rescatar su configuración y otros activos necesarios para su funcionamiento. Nada de eso. Lo primero que hará un laboratorio es analizar el malware tan pronto como llegue a sus placas de Petri y los dominios saldrán a la luz. Serán rápidamente bloqueados o “sinkholeados”. Un sinkholing es la toma de control de un dominio por parte de la autoridad o un laboratorio para impedir su uso como infraestructura del cibercrimen y redirigir la resolución de dicho dominio a una dirección inocua. Es como interceptar las comunicaciones a una banda de atracadores que está en plena faena.

Si el malware no puede retomar el contacto con su C2 se las verá solo y sin ayuda para transitar por la vida y acabará en ese lugar en el que tienen sus pesadillas todos los virus de este mundo cuando duermen durante la suspensión del sistema operativo: la carpeta de cuarentena del antivirus.

Así, los atacantes intentan que los dominios no se encuentren de forma tan explícita en nuestro malware. En lugar de ello, intentan que se generen de forma más o menos aleatoria. Todos los días, por ejemplo, se van a generar 20-25 dominios y el malware observará cuál de ellos ha sido activado. Si da con alguno, ahí está el ansiado C2 y podrá seguir en contacto con el agente infiltrado.

DGA, un algoritmo que genera dominios

A esto, y hemos hablado alguna que otra vez en este blog, lo denominamos DGA o Generador de Dominios Aleatorios. La idea es exactamente la que hemos contado. Un algoritmo que genera dominios. Si ese algoritmo se ejecuta a una hora determinada escupe unos cuantos dominios y ahí tenemos una ventana para registrarlos y contactar con el malware.

Aquí tenemos una vista parcial de una función encargada de generar dominios. Como casi siempre, en todos los algoritmos de este tipo, tenemos el parámetro fijo “date” (la fecha actual), que servirá como punto fijo o eje sobre el que pivotará el algoritmo para que tanto el malware como los creadores de este puedan generar los mismos dominios. Dado que es un parámetro dinámico pero conocido por ambos, el resultado de la ejecución será idéntico para ambas partes.

En la imagen abajo tenemos una lista parcial de dominios DGA generados. Como podemos ver, parecen sacados de una trituradora de documentos. Fijémonos en que no poseen ningún tipo de similitud con un dominio “normal”; y si la tienen, esta apariencia es debida más al azar que al propósito.

El peligro para los atacantes es que los laboratorios antivirus den con la clave y se adelanten publicando listas de dominios que van a ser generados en los próximos días. Así, por muchos dominios que se generen, estos ya están siendo bloqueados o tomados bajo control del enemigo. No es tan fácil hacer el mal.

Pero ahora cambiemos de punto de vista y vamos a meternos en un analista de un laboratorio antivirus. Tienes miles de ejemplares activos, otros tantos miles de algoritmos de generación de dominios y cada día estás produciendo una lista de millones de dominios pseudoaleatorios para que estos sean bloqueados de manera anticipatoria.

Falsos positivos vs. falsos negativos

Es una operación mastodóntica. Millones de dominios que posiblemente no sean dados de alta jamás, nunca. Imaginemos un cartel de los más criminales más buscados, pero en vez de diez fotos tenemos un millón de ellas. Pues en vez de eso, como son dominios sintéticos y se generan de manera similar unos u otros, podemos aplicar aprendizaje y detectarlos de manera genérica. Cierto, habrá un porcentaje de falsos positivos y falsos negativos. Pero pensémoslo: de, por ejemplo, un millón de dominios DGA solo un porcentaje ínfimo se activará realmente. Si cruzamos ese mínimo con el mínimo de falsos negativos (decir que un domino no es DGA) estaríamos acertando bastante.

Es más, el único peligro sería precisamente el caso contrario: dar por malicioso a un dominio real y conocido. Un falso positivo. Así que ajustamos el dial de detección para favorecer los falsos negativos (dar por bueno un DGA) y aun así estaríamos deteniendo gran parte de los DGA.

El mal nunca descansa

Ahora en vez de tener una lista de millones de dominios que tal vez no se activen nunca, tenemos un algoritmo capaz para detener este tipo de dominios en caso de que sean observados. Pero el mal nunca descansa y el reto es complicarle la vida a la inteligencia artificial. Esta última intenta detectar dominios DGA a través de redes neuronales (LSTM, CNN…) y teniendo en cuenta no solo la estructura gramatical, sino parámetros como la respuesta WHOIS, historial del dominio, histórico de resoluciones, etc.

Los atacantes intentan entonces construir dominios que parezcan lo más reales posibles para confundir la decisión de etiquetar un dominio como DGA o no DGA, a la vez que siguen generando suficientes dominios como para hacer que la vuelta a una lista de dominios a bloquear siga siendo ineficiente.

Anticipando esta carrera, existen diversas investigaciones respecto al uso de técnicas adversariales para confundir o contrarrestar la clasificación de los algoritmos de detección DGA, por ejemplo: MaskDGA, DeepDGA y otros. Podemos ver una aplicación práctica de varias técnicas en este repositorio.

Como vemos, es una interesante lucha en ciernes de la que podemos aprender mucho. Como tantas otras carreras o pulsos que aún se mantienen entre la industria del malware y la defensa frente a estos. Queda partido.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.