Técnicas de Evasión C2: Comprender los perfiles maleables de C2

26 de abril de 2021
Joshua St. Hilaire
Director of Security Research
Técnicas de Evasión C2: Comprender los perfiles maleables de C2

Esta es la segunda entrega de nuestra serie sobre técnicas de evasión de mando y control (C2), en la que hablo de perfiles C2 maleables. Consulta mi primer blog donde examino un método conocido como aleatorización de firmas JA3.

Los perfiles maleables C2 han sido ampliamente adoptados y utilizados por Cobalt Strikeun marco popular utilizado por pen-testers y grupos de Amenazas Persistentes Avanzadas (APT). Vale la pena señalar que, si bien los perfiles maleables son familiares para los usuarios de Cobalt Strike , la adopción de su uso ha comenzado a extenderse también a otros frameworks C2. En el momento de escribir estas líneas, los perfiles maleables también se utilizan en Empire C2 a partir de la versión 3.4. Lo que hace que este desarrollo sea aún más interesante es que el equipo de Empire ha anunciado recientemente una asociación con Kali Linux, una popular distribución de pen-testing, que aumentará la prevalencia del uso de perfiles maleables.

Perfiles maleables para la evasión

Los perfiles maleables para C2 permiten al actor no sólo eludir la detección en el cable de herramientas de detección basadas en la red, sino también los productos de seguridad de punto final. El nivel de "maleabilidad" permite a los operadores de Cobalt Strike no sólo personalizar completamente la forma y el tiempo de las balizas C2, sino que además les da la capacidad de personalizar las funciones en el objetivo, como la inyección de procesos y los métodos de ofuscación en memoria. La seguridad operativa es siempre una preocupación cuando se ejecutan agentes en el entorno de un objetivo. Como tal, la monitorización de la seguridad de la red es siempre una consideración a tener en cuenta cuando se mantiene el sigilo con el comando y control. Supongamos que cuando los atacantes instalan agentes en máquinas comprometidas dentro de tu red, el tráfico generado por estos agentes al conectarse al servidor C2 utiliza los mismos o similares usuarios-agentes, URI's u otros artefactos que son fáciles de marcar. El riesgo de que se detecten estas actividades sería excepcionalmente alto si se conocieran de antemano debido a su uso repetido. Por tanto, es necesario transformar o modelar el tráfico de forma que pueda mezclarse con el tráfico "normal" esperado o simplemente utilizar nuevos valores en cada ejecución. Cualquiera de los dos enfoques sería útil para eludir la detección. Otra motivación para emplear perfiles maleables es el deseo de realizar pruebas contra amenazas conocidas. Si puedo configurar un agente y un servidor C2 para que tengan exactamente el mismo aspecto que un malware a través de la red o en un endpoint objetivo, puedo ver si mi pila de detección de red o la monitorización de seguridad del endpoint son capaces de detectar la actividad.

Aquí es donde entra en juego la maleabilidad. Merece la pena repasar algunas de las opciones que se ofrecen al operador para personalizar el C2. Además, en el resumen hablaremos de cómo éstas dificultan la detección, especialmente con estrategias de detección basadas en firmas. Separaré el resumen de funcionalidad entre red y endpoint. Las opciones presentadas no deben considerarse en modo alguno una lista exhaustiva.

Evasión mediante la personalización

Independientemente del protocolo de red, por ejemplo, Protocolo de Transferencia de Hipertexto (HTTP) o HTTPS, los agentes se comunicarán con los servidores de una manera específica. Si se utiliza HTTP, hay muchas partes de una conversación HTTP que pueden ser inspeccionadas por las defensas de la capa de red. Por ejemplo, las cadenas dentro de una cabecera HTTP que son lo suficientemente únicas pueden ser utilizadas por los defensores para detectar conexiones en el cable. Cosas como agentes de usuario únicos, cadenas de aceptación personalizadas y valores de ruta únicos pueden ser inspeccionados. La configuración también puede ser utilizada para modificar elementos de la cabecera desde el servidor.

Con perfiles maleables uno puede simplemente reflejar los valores de un programa legítimo como los de la cabecera HTTP para hacer que la conexión parezca idéntica a conexiones benignas como el agente de actualización de Microsoft Windows, por ejemplo. La siguiente captura de pantalla muestra una reconstrucción de Wireshark de una sesión HTTP utilizando un perfil maleableCobalt Strike Windows update.

Figura 1: Perfil maleable de Cobalt Strike Windows Update

Vale la pena señalar que las transformaciones de datos están disponibles para codificar los datos antes de la transmisión. Puede que no sea obvio, pero el Identificador Uniforme de Recursos (URI) que sigue a la solicitud HTTP GET en la captura de pantalla anterior está codificado en base 64 antes de la transmisión y luego decodificado en el extremo del servidor. La siguiente lista son las transformaciones de datos disponibles en Cobalt Strike.

Cuadro 1: Transformaciones de datos Cobalt Strike

Además, también se pueden combinar varias transformaciones. Por ejemplo, base64 y máscara pueden combinarse para aumentar la OPSEC.

Incluso en los casos en los que se utiliza HTTPS, todavía se pueden manipular valores como los certificados SSL (Secure Sockets Layer). El siguiente certificado SSL a continuación es utilizado por los perfiles de actualización de Windows antes mencionados:

Además del control preciso sobre la forma en que aparecen las conexiones a través del cable, los valores de temporización que controlan cuándo el cliente se conecta al servidor C2 también pueden manipularse mediante perfiles maleables. Valores como el jitter y el delay permiten a los atacantes cambiar el intervalo de tiempo entre las conexiones C2.

Punto final maleable

La maleabilidad no sólo se utiliza cuando el agente envía datos a través de la red, sino también cuando controla las características en memoria, cómo se inyecta en los procesos y las tareas posteriores a la explotación. Esto es útil para evadir la detección y respuesta de puntos finales (EDR) y la detección antivirus. Un ejemplo a continuación muestra algunas opciones relacionadas con cómo se comporta el agente en el endpoint de destino que pueden establecerse en perfiles maleables.

Figura 2: Ejemplo de opciones maleables relacionadas con el punto final en el perfil havex Cobalt Strike .

En el bloque stage se puede controlar cómo se carga el agente en memoria. Se pueden especificar cosas como el nombre, el tiempo de compilación, los permisos de memoria, la ofuscación, así como el tipo de cargador. A menudo, los analistas que buscan código malicioso cargado en un proceso comprueban primero los segmentos de memoria y buscan segmentos cargados con permiso RWX en segmentos de memoria sospechosos.

En las opciones de inyección de procesos puede dar forma al contenido inyectado. Puede rellenar los datos utilizando opciones de transformación y establecer el método de asignación, así como controlar los permisos. Por último, también puede controlar las tareas posteriores a la explotación eligiendo diferentes nombres de tuberías, utilizando la inyección inteligente y especificando las ubicaciones de generación. Esto es ideal para evadir y probar soluciones EDR. Para una visión más exhaustiva puedes visitar la guía online de Cobalt Strikes.

Retos para los defensores

Permitir tal granularidad con la que controlar las comunicaciones C2 y el comportamiento de la puesta en escena hace que defender y detectar con firmas sea una tarea desafiante. Otro punto a destacar es que mientras Cobalt Strike ha permitido la maleabilidad durante algún tiempo, otros marcos C2 populares como Empire C2 también están adoptando perfiles maleables. Esto, unido al hecho de que su uso está aumentando en intrusiones recientes de APT y ransomware, hace que la tarea de los defensores sea cada vez más compleja.

Las tecnologías de defensa de redes y endpoints tendrán que disponer de firmas que se actualicen rápidamente o utilizar otras formas de investigación para detectar el mando y control que no se basen en patrones repetidos en los datos o incluso en secuencias temporales que se correspondan con la actividad de balizamiento.

Preguntas frecuentes

¿Qué son los perfiles maleables C2 y cómo se utilizan en Cobalt Strike?

Los perfiles C2Command and Control) maleables de Cobalt Strike permiten a los operadores personalizar el comportamiento y la apariencia de su tráfico C2. Esta personalización ayuda a eludir la detección por parte de las herramientas de seguridad basadas en red y de punto final. Los operadores pueden modificar las cabeceras HTTP, los agentes de usuario, las URI e incluso la temporización de las balizas C2 para que el tráfico se mezcle con el tráfico de red normal o imite comunicaciones de software legítimas, como las del agente de Windows Update.

¿Por qué los perfiles C2 maleables son beneficiosos para los atacantes?

Los perfiles C2 maleables son beneficiosos para los agresores porque permiten eludir la detección por parte de las herramientas de seguridad. Al personalizar el tráfico para que parezca normal o imite el tráfico legítimo, los agresores pueden evitar que se activen las alertas de seguridad. Además, estos perfiles permiten probar las medidas de seguridad simulando comportamientos malware conocidos y evaluando la eficacia de los mecanismos de detección.

¿Cómo mejoran los perfiles maleables la seguridad operativa durante las pruebas de penetración o los ataques?

Los perfiles maleables mejoran la seguridad operativa al dificultar a los defensores la identificación y el bloqueo del tráfico C2 malicioso. Personalizando el tráfico para que parezca comunicaciones de software legítimas o variando los patrones de tráfico, los atacantes pueden mantener el sigilo y reducir el riesgo de detección. Esto es especialmente importante cuando se instalan y gestionan agentes en máquinas comprometidas dentro de una red objetivo.

¿Cómo afectan los perfiles maleables a la seguridad de los puntos finales?

En los endpoints, los perfiles maleables pueden controlar las características en memoria, los métodos de inyección de procesos y las tareas posteriores a la explotación. Estas funciones ayudan a eludir las herramientas de detección y respuesta de endpoints (EDR) y el software antivirus, ya que personalizan la forma en que el código malicioso se carga y se comporta en la memoria, lo que dificulta su detección mediante métodos convencionales.

¿Cómo complica el uso de perfiles maleables la detección de la actividad de balizamiento?

Los perfiles maleables complican la detección de la actividad de balizamiento al permitir a los atacantes aleatorizar los intervalos de tiempo (fluctuación y retardo) entre las comunicaciones C2. Esta aleatoriedad dificulta que las herramientas de defensa de la red identifiquen patrones regulares de balizamiento, que suelen utilizarse para detectar sistemas comprometidos que se comunican con un servidor C2.

¿Cómo se están extendiendo los perfiles C2 maleables a otros marcos?

Los perfiles C2 maleables, popularizados originalmente por Cobalt Strike, han empezado a ser adoptados por otros frameworks C2 como Empire C2, que incluyó esta característica a partir de la versión 3.4. Esta expansión se debe en parte a la asociación de Empire con Kali Linux, que ha aumentado la prevalencia y el uso de perfiles maleables tanto entre los especialistas en pruebas de penetración como entre los actores de amenazas.

¿Qué elementos específicos del tráfico C2 pueden personalizarse mediante perfiles maleables?

Gracias a los perfiles maleables, los operadores pueden personalizar varios elementos del tráfico C2, como las cabeceras HTTP (por ejemplo, usuarios-agentes, cadenas de aceptación), las URI, los certificados SSL y los valores de temporización (por ejemplo, fluctuación y retardo). Estas personalizaciones ayudan a que el tráfico malicioso se mezcle con el tráfico normal o parezca único en cada operación, lo que dificulta su detección.

¿Qué retos plantean los perfiles maleables a los defensores?

Los perfiles maleables plantean importantes retos a los defensores al complicar la detección del tráfico malicioso. Los métodos tradicionales de detección basados en firmas pierden eficacia porque el tráfico personalizado no coincide con los patrones maliciosos conocidos. Los defensores deben recurrir a técnicas de detección más sofisticadas y adaptables, como el análisis basado en el comportamiento y la detección de anomalías, para identificar actividades sospechosas.

¿Cómo afectan los perfiles maleables a la seguridad de los puntos finales?

En Cobalt Strike, los operadores pueden personalizar varios aspectos del comportamiento de los endpoints, incluidos los permisos de memoria del código cargado, el método de inyección de procesos, el relleno de datos, los métodos de asignación y las tareas posteriores a la explotación, como la inyección inteligente y la especificación de ubicaciones de spawn. Estas opciones dificultan que las herramientas de seguridad identifiquen la actividad maliciosa basándose en indicadores comunes.

¿Por qué es crucial que los Centros de Operaciones de Seguridad (SOC) cuenten con una sólida plataforma de detección y respuesta ante amenazas cuando se trata de perfiles maleables?

Dadas las avanzadas técnicas de evasión que permiten los perfiles maleables, es crucial que los SOC cuenten con una sólida plataforma de detección y respuesta a las amenazas. Dicha plataforma puede proporcionar análisis en tiempo real, detección basada en el comportamiento y detección avanzada de anomalías para identificar y responder a amenazas sofisticadas que evaden los métodos tradicionales basados en firmas. Esto mejora la postura general de seguridad y permite dar respuestas oportunas y eficaces a posibles intrusiones.