miércoles, 2 de agosto de 2017

Domain Fronting

El mundillo de la ciber-seguridad es bastante propenso a modas y actualmente los productos/servicios en boca de todos son los basados en Threat Intelligence.

Threat Intelligence se define como el conocimiento necesario para identificar y prevenir posibles amenazas de seguridad. Conocimiento que nos facilita la toma de las decisiones mas apropiadas en cada situación. Este conocimiento normalmente se obtiene agregando diferentes fuentes de información sobre incidentes de seguridad y mediante análisis experto de la actividad de los llamados "Threat Agents".

Al final este conocimiento se traduce en indicadores que podemos usar para detectar si nuestra red esta siendo atacada. Simplificando, lo que nos ofrecen la mayoría de proveedores o productos de Threat Intelligence, se puede resumir en:
- Listas de reputación de binarios
- Listas de reputación de dominios y/o direcciones IP

Seguimos teniendo un enfoque básico basado en "lista-negra"; detectamos lo que en el pasado ha sido dañino. Pero añadimos una capa de "lista-blanca"; cuando detectamos algo que no tenemos claramente identificado como dañino, pero que conocemos poco (poca reputación), podemos presuponer que también es malicioso.

Ambas herramientas nos ayudan a controlar si en nuestra red hay alguna actividad sospechosa, pero son fácilmente evitables por parte de atacantes avanzados.

Para evitar la detección basada en reputación de binarios tenemos múltiples técnicas. Algunas utilizadas a menudo por los creadores de malware. Por ejemplo las que comentaba en mi charla de la ultima Rootedcon, sobre como aprovechar las debilidades de la tecnología Authenticode de Microsoft.

Para evitar la detección basada en reputación de dominios o direcciones IP, la técnica que esta empezando a ponerse de moda entre los actores avanzados es la de Domain Fronting.

El Domain Fronting es una técnica que consiste en utilizar dominios legítimos y con buena reputación, como "tapadera" para camuflar las comunicaciones del malware o de las herramientas de control remoto con sus paneles de control (C&C).

Esta técnica se aprovecha de una característica de la tecnología CDN actual. Esta característica es común a la mayoría de proveedores de redes de distribución de contenidos: Akamai, Google, Chinanet, Cloudflare, Cloudfront, Azure, etc.

Estas redes tienen distribuidos sus nodos por todo el mundo. Y para que los distintos usuarios "conecten" a los sitios que están protegidos por la CDN, establecen una serie de nodos o frontales de entrada. Estos nodos son compartidos por todos los dominios hospedados en la CDN, de forma que si contratamos un dominio por ejemplo en Akamai. Los puntos de entrada a nuestro servicio, serán los mismos que los de otros clientes de Akamai, como pueden ser; Microsoft, Vmware, Adobe, etc.


Esto significa que si monitorizamos nuestra red para detectar a que sitios conectan los usuarios, no vamos a poder distinguir a priori si el trafico que va hacia Akamai, es para conectar a servicios de alta reputación (p.e. Microsoft) o es el que va dirigido a un panel de control que también utilice la infraestructura de Akamai.

Es mas, el malware puede camuflar también los nombres de dominio utilizados a nivel DNS, utilizando dominios con alta reputación a nivel de resolución, pero luego solamente dentro de la propia comunicación HTTP, utilizar el nombre real del servidor malicioso oculto tras la CDN.

Esta técnica es la utilizada por ejemplo en las ultimas versiones de Signal para evitar la censura de algunos países, camuflando sus nodos de entrada detrás de dominios de proveedores intermedios.

Vamos a ver un ejemplo de como crear una infraestructura de este tipo. Para ello vamos a utilizar la CDN de Cloudflare que nos permite registrar dominios de forma gratuita en su versión básica.

Primero vamos a crear una nueva cuenta y asociar nuestro dominio malicioso ella.


Dentro de este dominio, vamos configurar nuestro "endpoint" de control. Por ejemplo: /cloudflare.php

$ curl http://www.malicioso.com/cloudflare.php
CDN test file.

Ahora vamos a buscar un dominio con alta reputación, que este hospedado también en la CDN de Cloudflare. Por ejemplo "4chan.org". Y vamos a realizar una petición a este dominio, pero con una cabecera adicional.


$ curl http://www.4chan.org/cloudflare.php -H "Host: www.malicioso.com"
CDN test file.


De esta forma, tanto en servidores DNS, como en servidores Proxy, quedara solo registrada una conexión a "www.4chan.org" (que resuelve a una IP de la CDN de Cloudflare). Todo totalmente inofensivo. Y solo si analizamos el trafico a nivel de cabeceras HTTP podremos identificar el dominio malicioso. Si además usamos trafico SSL, la identificación del dominio malicioso se hará mucho mas difícil.

Si tenemos un pequeño malware en Powershell, también podemos hacer fácilmente que utilice "4chan.org" como Domain Fronting. Por ejemplo:


PS C:\> Invoke-WebRequest http://www.4chan.org/cloudflare.php -Headers @{"host"="www.malicioso.com"}
StatusCode        : 200
StatusDescription : OK
Content           : CDN test file.


De esta forma, el trafico hacia el panel de C&C quedara camuflado.

Esto no significa que tengamos que tirar a la basura nuestros sistemas basados en reputación IP o DNS, pero debemos tener en cuenta que estos sistemas no son infalibles y pueden ser fácilmente evitados. 




No hay comentarios:

Publicar un comentario