Consulta técnica sobre FortiEDR
El equipo de FortiGuard Responder ha observado intentos de emplear una técnica de ejecución de proxy que utiliza Microsoft MSBuild para implementar balizas Cobalt Strike en los entornos de los clientes. Esta técnica también fue observada y reportada por Renato Marinho de Morphus Labs . La infraestructura C2 asociada con esta actividad también se vinculó a la explotación de log4j a principios de mes, aunque este TTP en sí no se vinculó con log4j. Este artículo demostrará cómo FortiEDR protege contra el uso de esta técnica de ejecución de proxy y analizará una muestra observada en la naturaleza que está fácilmente disponible para validar las protecciones que ofrece FortiEDR.
Descripción
En el momento de la detección, varias muestras que emplearon esta técnica de ejecución de proxy continúan teniendo una tasa de detección muy baja en Virus Total con solo 6/57 proveedores detectándolo como malicioso y solo uno identificando correctamente el implante Cobalt Strike. Muestras similares, que se analizarán más adelante en el artículo, tienen más de 6 meses y todavía tienen una tasa de detección de proveedores inferior a 3/57.
Figura 1: La muestra tiene una tasa de detección muy baja a través de proveedores de AV.
El ejemplo anterior (y el analizado en este artículo) es un archivo de proyecto, que es un esquema XML diseñado para controlar la creación de un ejecutable. La funcionalidad dentro del proceso de MSBuild denominada «Tareas» permite la ejecución de código arbitrario junto con el proceso de compilación para brindar flexibilidad a los usuarios finales, lo que probablemente admita la integración de MSBuild en procesos de compilación automatizados. Esta funcionalidad se ha utilizado en el caso de la muestra analizada, para la ejecución por proxy de una baliza Cobalt Strike.
La muestra observada por el equipo de FortiGuard Responder se entregó a través de una conexión RDP y luego se ejecutó directamente a través del acceso de la GUI al «Símbolo del sistema del desarrollador». Aunque abierta, esta técnica sería a primera vista indistinguible de la actividad estándar, especialmente en entornos donde las herramientas de desarrollo de software son estándar.
Analizando la muestra.
Un archivo de proyecto tiene varios componentes clave de nota en esta muestra; Nombre de destino, Nombre de tarea y la Tarea en sí. El nombre del objetivo define el objetivo de la compilación; en el caso de todas las muestras analizadas por el equipo de FortiGuard Responder, tenía un valor de ‘Depuración’. TaskName es el nombre de una tarea en particular y es una referencia en la definición de Target, en el caso de todas las muestras analizadas por el equipo de FortiGuard Responder, tenía un valor de ‘ClassExample’. Estas dos secciones se pueden observar en la Figura 2 a continuación.
Figura 2: Variables Target Name y TaskName comunes entre muestras.
El componente final es la sección Tarea. La sección de tareas define la tarea que se ejecutará junto con el proceso de compilación. En el caso de las muestras analizadas por el equipo de FortiGuard Responder, la Tarea fue la sección más grande del archivo del proyecto. Las tareas observadas se escribieron en C# y contienen código para decodificar, cargar reflexivamente y luego ejecutar una carga útil de baliza Cobalt Strike. La carga útil de Cobalt Strike se almacena en una variable llamada ‘buff’ y se somete a XOR en bytes con una clave de 5-8 bytes almacenada en una variable llamada ‘key_code’. Los fragmentos de código de estas variables del archivo proj se pueden observar en la Figura 3 a continuación.
Figura 3: matrices de bytes ‘buff’ y ‘key_code’ que almacenan la baliza Cobalt Strike codificada y la clave de decodificación respectivamente. Tenga en cuenta que la variable ‘buff’ ocupa la mayor parte del contenido del archivo y se ha truncado en la figura.
A medida que se ‘construye’ el archivo proj, se ejecuta la tarea ‘ClassExample’. Esta tarea decodifica la variable ‘buff’ en un flujo de memoria que luego se carga de manera reflexiva en el proceso de hospedaje de MSBuild y luego se ejecuta. La sección de código responsable de esta decodificación, carga reflexiva y ejecución se muestra a continuación en la Figura 4.
Figura 4: este fragmento de código muestra cómo cada byte de la matriz ‘buff’ se aplica XOR contra un byte en la matriz ‘key_code’ en un bucle, luego se carga en la memoria y se ejecuta.
En la ejecución, la baliza Cobalt Strike se comunicará con su servidor C2 según su configuración integrada. La configuración de la baliza se puede extraer del ejecutable de la baliza decodificada utilizando el fantástico analizador de configuración Cobalt Strike ( https://github.com/Sentinel-One/CobaltStrikeParser ). La configuración extraída de la muestra analizada anteriormente es una configuración simple, como se muestra a continuación en la Figura 5, con una sola IP como C2Server y un uso mínimo de funciones adicionales de Cobalt Strike. Un análisis completo de una configuración de Cobalt Strike está fuera del alcance de este artículo y ya hay excelentes recursos en la comunidad de seguridad cibernética sobre el tema, pero el siguiente artículo proporciona un punto de partida para aquellos que desean profundizar en la extracción y comprensión de los IOC de este artefacto (https://www.mandiant.com/resources/defining-cobalt-strike-components ).
Figura 5: Archivo de configuración extraído de la baliza Cobalt Strike incrustada. Tenga en cuenta el servidor IP único C2.
Detección y mitigación con FortiEDR
FortiEDR detecta y bloquea de manera efectiva la ejecución del proxy de MSBuild de cargas maliciosas como la baliza Cobalt Strike analizada arriba de fábrica (OOTB) mediante detecciones de comportamiento que forman parte de su conjunto de reglas predeterminado. FortiEDR no incluye en la lista blanca todos los comportamientos asociados con el proceso, por lo que detecta fácilmente comportamientos anómalos, como conexiones de red y carga reflexiva, a pesar de que se conoce el ejecutable de MSBuild, el ejecutable firmado de Microsoft. En el ataque emulado a continuación, la muestra analizada anteriormente se ejecutó a través del símbolo del sistema del desarrollador, mientras que FortiEDR se configuró en ‘Solo registro’. En este modo, FortiEDR solo registra eventos, normalmente se bloquearía permitiendo que la muestra se ejecute por completo, lo que nos brinda la oportunidad de observar la gama completa de comportamientos detectados por FortiEDR.
La ejecución de esta muestra generó dos eventos a partir de tres reglas, cada uno desencadenado por un comportamiento sospechoso/malicioso que se habría detenido, frustrando este ataque si las acciones de FortiEDR se hubieran configurado para bloquear. Estos eventos se pueden ver a continuación en la Figura 6 a continuación.
Figura 6: Eventos detectados por FortiEDR relacionados con la ejecución del proxy MSBuild del archivo de proyecto malicioso analizado anteriormente que contiene una baliza Cobalt Strike.
El primer evento anterior fue activado por la regla ‘Intento de conexión desde una aplicación sospechosa’ en la Política de prevención de exfiltración. Esta regla marca las conexiones de red asociadas con aplicaciones que normalmente no crean conexiones de red o que se sabe que han sido explotadas por adversarios. Se pueden hacer excepciones para permitir el uso legítimo cuando sea necesario. En el caso de estos eventos, el evento se clasificó como «sospechoso» ya que las fuentes de inteligencia de amenazas de FortiGuard Labs marcaron la dirección IP (23.227.178[.]115) como sospechosa. La integración de FortiEDR con los recursos de inteligencia de amenazas de FortiGuard Labs es parte de la configuración predeterminada.
El segundo evento marcó dos reglas de comportamiento, ambas de la Política de prevención de exfiltración; ‘Código dinámico: código malicioso generado en tiempo de ejecución detectado’ y ‘Ejecutable no asignado: archivo ejecutable sin un archivo correspondiente en el disco’. La primera de estas reglas (Código dinámico) se marcó en la baliza Cobalt Strike decodificada que se generó en la memoria en el tiempo de ejecución al fallar la verificación del archivo. Esto se puede ver en la ‘Vista de pilas’ de FortiEDR dentro de la pestaña Análisis forense, como se muestra a continuación en la Figura 7.
Figura 7: Vista de pilas de FortiEDR que muestra la excepción de la regla de código dinámico relacionada con la decodificación de la baliza Cobalt Strike
La segunda regla (ejecutable no asignado) se marcó en la baliza de Cobalt Strike y se cargó de manera reflexiva en el proceso de MSBuild. La memoria asignada a este ejecutable no asignado se puede observar a través de la «Vista de pilas» de la pestaña Análisis forense, como se muestra en la Figura 8 a continuación. FortiEDR se puede usar para volcar el ejecutable de la memoria para un análisis más detallado si es necesario. Esta es una forma alternativa de obtener la baliza Cobalt Strike decodificada en lugar de decodificar el archivo proj directamente.
Figura 8: Vista de pilas de FortiEDR que muestra la excepción de la regla Ejecutable no asignado relacionada con la carga reflexiva de la baliza Cobalt Strike
Caza de amenazas con VT
Tomando indicadores comunes de la muestra analizada, el equipo de FortiGuard Responder identificó varias muestras similares en VirusTotal. Las muestras se remontan a julio de 2021 y parecen venir en dos variantes definidas por los contenidos decodificados de la variable ‘buff’; la variante uno que contiene una versión de BEACON (Cobalt Strike) que coincide con la analizada en este artículo y la variante dos que contiene un stager Metasploit Meterpreter que llama al adversario C2 para descargar una baliza Cobalt Strike. Se puede observar el cruce de infraestructura (dominios e IP) y TTP (agente de usuario, URL, perfil) entre las dos variantes, incluso durante el mismo período de tiempo, lo que indica que es probable que la actividad sea del mismo actor. Además, todas las cargas útiles de Cobalt Strike exportadas comparten la misma marca de agua del producto (426352781).
Conclusión
Este artículo ha demostrado cómo FortiEDR protege contra la ejecución de proxy basada en MSBuild de balizas Cobalt Strike maliciosas y cargadores Meterpreter utilizando reglas, políticas y configuraciones predeterminadas. La búsqueda de amenazas genérica basada en telemetría es difícil para este TTP sin una comprensión de la prevalencia del uso de MSBuild dentro de un entorno, por lo que no se han proporcionado consultas de búsqueda de amenazas como parte de este artículo.
Los IOC para las cargas útiles de BEACON se extrajeron de los archivos de configuración mediante el proceso descrito anteriormente. Los IOC para los etapas de Meterpreter se extrajeron del shellcode descargado después de la decodificación de las variables ‘buff’ incrustadas. La mayoría de los IOC se conocen, pero se han recopilado y puesto a disposición al final de este artículo para que estén completos.
Figura 9: Visitas de host observadas para la página web «hxxp://64.44.139[.]51:8080/safebrowsing/nuzhx/BPxxUS7rqSgy34UkChZ3LrTW1WV91WFfhglLRiDK» durante los últimos tres meses. Tomado de Fortinet Central Threat System (CTS)
También se debe tener en cuenta que, a pesar de que algunos de los IOC se observaron por primera vez en octubre de 2021, las fuentes de inteligencia de amenazas de FortiGuard Labs indican que las víctimas de todo el mundo todavía contactan regularmente al C2. Parte de esta actividad es tan reciente como el 28 de diciembre de 2021 con un aumento significativo en la actividad que comienza a mediados de diciembre desde puntos finales en India, EE. UU. y Europa, como se observa en la Figura 9 anterior.
MITRE ATT&CK
TA0002 – Ejecución
Identificación de la técnica | Descripción de la técnica | Actividad observada |
T1106 | API nativa | Los proyectos de MSBuild observados y analizados en este artículo utilizan llamadas directas a la API para cargar y ejecutar de manera reflexiva cargas maliciosas de Cobalt Strike y Meterpreter. |
TA0005 – Evasión defensiva
Identificación de la técnica | Descripción de la técnica | Actividad observada |
T1127.001 | Ejecución de proxy de Trusted Developer Utilities: MSBuild | Este artículo se basa en el análisis de la explotación de la característica de «tareas» de MSBuild para realizar la ejecución de proxy. Los archivos de proyecto identificados no dan como resultado una aplicación construida y solo existen para explotar esta funcionalidad |
Identificación de la técnica | Descripción de la técnica | Actividad observada |
T1620 | Carga de código reflectante | Los cargadores Cobalt Strike y Meterpreter codificados se descodifican y cargan en el proceso de MSBuild directamente desde la memoria mediante la funcionalidad .NET (System.Reflection). |
TA0011 – Comando y Control
Identificación de la técnica | Descripción de la técnica | Actividad observada |
T1071.001 | Protocolo de capa de aplicación: protocolos web | Las cargas útiles de Cobalt Strike y Meterpreter utilizaron predominantemente HTTP y HTTPS para comunicarse con C2 |
Identificación de la técnica | Descripción de la técnica | Actividad observada |
T1071.004 | Protocolo de capa de aplicación: DNS | Una de las configuraciones de la baliza Cobalt Strike identificó el uso del tipo de baliza HTTP DNS que genera tráfico DNS. |
COI
Indicador Descripción | Indicador | Tipo de indicador | Táctica asociada | notas |
Archivo de proyecto malicioso | 641a82576ce3b0e41d70607ec7178ecf43405385 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene la carga útil de Meterpreter codificada |
Archivo de proyecto malicioso | 08919748beaf4b1ee29cb3a74cd58a4bbdec5bd1 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene la carga útil de Meterpreter codificada |
Archivo de proyecto malicioso | 6a1788a84da831d700229702c9ce2d901b505dd1 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene la carga útil de Meterpreter codificada |
Archivo de proyecto malicioso | ae68d5f64ba92f8c1740ed32663edbda97dd9472 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Archivo de proyecto malicioso | c184668996d03b83c15da389cce3f3bde20a09aa | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Archivo de proyecto malicioso | 4e862cc6d6f6f623e91e2774b1a8ebdbc89668c3 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Archivo de proyecto malicioso | 572d9e9e2b0893cd5f0bf8952fa55aabc1acb546 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Archivo de proyecto malicioso | 2e0b32bb9bb62a4e4449828db216611f4a95b262 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Archivo de proyecto malicioso | 6900c8336b20c1e0a0453d2bc243d4937c6b7b09 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada. Tenga en cuenta que esta muestra contenía una configuración que usa DNS HTTP híbrido |
Archivo de proyecto malicioso | 8495925dc51357b58f9a9cc3eb37c7bd33e8d7bd | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Archivo de proyecto malicioso | 25533cc5796a2013296aae200ce7e35027f6775e | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Archivo de proyecto malicioso | 8d5908a1ae3d7fd5b534700f37694a782fa8d20f | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Archivo de proyecto malicioso | 1606bb73020c41dfb1256ca4dc57368e89543f21 | SHA1 | Ejecución | Archivo de proyecto de MSBuild que contiene una baliza Cobalt Strike codificada |
Cadena de agente de usuario | Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ESES) | Cadena de agente de usuario | Comando y control | Extraído de la carga útil de Meterpreter en 641a82576ce3b0e41d70607ec7178ecf43405385 |
PI C2 | 23.227.178[.]115 | Dirección IP | Comando y control | Extraído de la carga útil de Meterpreter en 641a82576ce3b0e41d70607ec7178ecf43405385 |
Cadena de agente de usuario | Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; ; NCLIENT50_AAPCDA5841E333) | Cadena de agente de usuario | Comando y control | Extraído de la carga útil de Meterpreter en 08919748beaf4b1ee29cb3a74cd58a4bbdec5bd1 |
PI C2 | 176.121.14[.]47 | Dirección IP | Comando y control | Extraído de la carga útil de Meterpreter en 08919748beaf4b1ee29cb3a74cd58a4bbdec5bd1 |
Cadena de agente de usuario | Windows-Update-Agent/10.0.10011.16384 Client-Protocol/1.40 | Cadena de agente de usuario | Comando y control | Extracted from Meterpreter payload in 6a1788a84da831d700229702c9ce2d901b505dd1 and Cobalt Strike config in c184668996d03b83c15da389cce3f3bde20a09aa, 4e862cc6d6f6f623e91e2774b1a8ebdbc89668c3, 2e0b32bb9bb62a4e4449828db216611f4a95b262, 2ff25d6014acced3941831759357321ec6d37fef |
PI C2 | 88.119.161[.]120 | Dirección IP | Comando y control | Extraído de la carga útil de Meterpreter en 6a1788a84da831d700229702c9ce2d901b505dd1 |
Cadena de agente de usuario | Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; MAAU; NP08) | Cadena de agente de usuario | Comando y control | Extraído de la configuración de Cobalt Strike en 8495925dc51357b58f9a9cc3eb37c7bd33e8d7bd |
Cadena de agente de usuario | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) | Cadena de agente de usuario | Comando y control | Extraído de la configuración de Cobalt Strike en 1606bb73020c41dfb1256ca4dc57368e89543f21. El agente de usuario corresponde a Internet Explorer en Windows XP de manera anómala. |
URL C2 | 64.44.139[.]51/navegación segura/nuzhx/BPxxUS7rqSgy34UkChZ3LrTW1WV91WFfhglLRiDK | URL | Comando y control | Extraído de la configuración de Cobalt Strike en ae68d5f64ba92f8c1740ed32663edbda97dd9472 y 25533cc5796a2013296aae200ce7e35027f6775e |
URL C2 | mediaprotectxs[.]org/safebrowsing/nuzhx/BPxxUS7rqSgy34UkChZ3LrTW1WV91WFfhglLRiDK | URL | Comando y control | Extraído de la configuración de Cobalt Strike en ae68d5f64ba92f8c1740ed32663edbda97dd9472 y 25533cc5796a2013296aae200ce7e35027f6775e |
URL C2 | 64.44.139[.]51/navegación segura/qHiUGdv/HnMBjBNdYHDBZBhoscowAdNMzizR8zC | URL | Comando y control | Extraído de la configuración de Cobalt Strike en ae68d5f64ba92f8c1740ed32663edbda97dd9472 y 25533cc5796a2013296aae200ce7e35027f6775e |
URL C2 | mediaprotectxs[.]org/safebrowsing/qHiUGdv/HnMBjBNdYHDBZBhoscowAdNMzizR8zC | URL | Comando y control | Extraído de la configuración de Cobalt Strike en ae68d5f64ba92f8c1740ed32663edbda97dd9472 y 25533cc5796a2013296aae200ce7e35027f6775e |
URL C2 | akametric[.]co/c/msdownload/update/others/2020/10/29136388_ | URL | Comando y control | Extracted from Cobalt Strike config in c184668996d03b83c15da389cce3f3bde20a09aa, 4e862cc6d6f6f623e91e2774b1a8ebdbc89668c3, 2e0b32bb9bb62a4e4449828db216611f4a95b262, 2ff25d6014acced3941831759357321ec6d37fef |
URL C2 | 88.119.175[.]251/c/msdescargar/actualizar/otros/2020/10/29136388_ | URL | Comando y control | Extracted from Cobalt Strike config in c184668996d03b83c15da389cce3f3bde20a09aa, 4e862cc6d6f6f623e91e2774b1a8ebdbc89668c3, 2e0b32bb9bb62a4e4449828db216611f4a95b262, 2ff25d6014acced3941831759357321ec6d37fef |
URL C2 | akametric[.]co/c/msdownload/update/others/2020/10/28986731_ | URL | Comando y control | Extracted from Cobalt Strike config in c184668996d03b83c15da389cce3f3bde20a09aa, 4e862cc6d6f6f623e91e2774b1a8ebdbc89668c3, 2e0b32bb9bb62a4e4449828db216611f4a95b262, 2ff25d6014acced3941831759357321ec6d37fef |
URL C2 | 88.119.175[.]251/c/msdescargar/actualizar/otros/2020/10/28986731_ | URL | Comando y control | Extracted from Cobalt Strike config in c184668996d03b83c15da389cce3f3bde20a09aa, 4e862cc6d6f6f623e91e2774b1a8ebdbc89668c3, 2e0b32bb9bb62a4e4449828db216611f4a95b262, 2ff25d6014acced3941831759357321ec6d37fef |
URL C2 | mftanalytics[.]nube/mensajes/u5gmePQBEiwBnYZAtso1amisD | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 572d9e9e2b0893cd5f0bf8952fa55aabc1acb546 y 8d5908a1ae3d7fd5b534700f37694a782fa8d20f |
URL C2 | 91.234.254[.]184/mensajes/u5gmePQBEiwBnYZAtso1amisD | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 572d9e9e2b0893cd5f0bf8952fa55aabc1acb546 y 8d5908a1ae3d7fd5b534700f37694a782fa8d20f |
URL C2 | mftanalytics[.]nube/mensajes/kw1ExXHpLDVRhhi8NSRr7Z0-o-c6 | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 572d9e9e2b0893cd5f0bf8952fa55aabc1acb546 y 8d5908a1ae3d7fd5b534700f37694a782fa8d20f |
URL C2 | 91.234.254[.]184/mensajes/kw1ExXHpLDVRhhi8NSRr7Z0-o-c6 | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 572d9e9e2b0893cd5f0bf8952fa55aabc1acb546 y 8d5908a1ae3d7fd5b534700f37694a782fa8d20f |
URL C2 | alpha.sync.akamaistats[.]com/c/msdownload/update/others/2020/10/29136388_ | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 6900c8336b20c1e0a0453d2bc243d4937c6b7b09 |
URL C2 | beta.sync.akamaistats.com/c/msdownload/update/others/2020/10/29136388_ | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 6900c8336b20c1e0a0453d2bc243d4937c6b7b09 |
URL C2 | omega.sync.akamaistats[.]com,/c/msdownload/update/others/2020/10/29136388_ | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 6900c8336b20c1e0a0453d2bc243d4937c6b7b09 |
URL C2 | 23.227.178[.]115/dpíxel | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 8495925dc51357b58f9a9cc3eb37c7bd33e8d7bd |
URL C2 | 23.227.178[.]115/enviar.php | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 8495925dc51357b58f9a9cc3eb37c7bd33e8d7bd y 1606bb73020c41dfb1256ca4dc57368e89543f21 |
URL C2 | 23.227.178[.]115/__utm.gif | URL | Comando y control | Extraído de la configuración de Cobalt Strike en 1606bb73020c41dfb1256ca4dc57368e89543f21 |
¡Déjanos cualquier duda sobre FortiEDR aquí abajo!
¿Te ha resultado útil??
0 / 0
Hola, somos Mila Jiménez y César Sánchez. Dos apasionados de la ciberseguridad con muchos años de experiencia. Hemos trabajado en muchas empresas del mundo TI y ahora nos apetece compartir nuestro conocimiento con cualquiera que lo necesite.
¡Si te gusta nuestro contenido puedes invitarnos a un café AQUÍ!