Estamos investigando una campaña de ransomware que abusa de ejecutables y DLL legítimos de Sophos modificando su contenido original, sobrescribiendo el código e insertando la carga útil descifrada como recurso, es decir, suplantando archivos legítimos para intentar colarse en los sistemas. Una comprobación preliminar indica que todos los archivos de Sophos afectados formaban parte de la versión 2022.4.3 de nuestro producto Windows Endpoint.
Este tipo de comportamiento malicioso no es (por desgracia) nada nuevo para la industria de la infoseguridad, de hecho, afecta a cualquier desarrollador de software. A lo largo de los años, hemos visto a otros infosecuestradores hacerse pasar por instaladores; hemos visto colecciones de utilidades falsas, incluidos antimalware de otras marcas etiquetados como protecciones legítimas de Sophos; hemos visto a delincuentes atacar código cerrado y código abierto con el mismo fervor. Más adelante hablaremos de lo que los atacantes piensan ganar con esto y de cómo pueden responder los defensores.
En general, es solo parte del territorio tecnológico, de hecho, en el curso de la investigación de esta campaña, también encontramos abusos similares de archivos publicados por otros defensores, incluidos AVG, BitDefender, Emsisoft y Microsoft, así como el uso de una firma digital posiblemente comprometida (y definitivamente caducada) de otra empresa, así como un “instalador” falso que afirma ser software de otra empresa, junto con docenas de descargadores maliciosos, instaladores MSI y otros indicadores de (intento de) compromiso. Nuestra investigación continúa y se reflejará en el archivo Indicadores de Compromiso de nuestro Github; las empresas afectadas tendrán noticias nuestras en privado.
Las eventuales cargas útiles que hemos visto en nuestra investigación varían: Cobalt Strike, Brute Ratel, Qakbot, Latrodectus y otros. Existen pruebas del uso por parte de más de un grupo criminal, pero una investigación más profunda sobre la atribución, o sobre la firma comprometida o el instalador falso mencionados anteriormente, está fuera del alcance de este post.
Dicho esto, siempre es interesante cuando aparece algo así. En este artículo repasamos uno de estos descubrimientos y lo que encontramos cuando indagamos en él.
Descubrimientos iniciales
El suceso que llamó nuestra atención por primera vez sobre esta campaña provino de una nueva mitigación de Sophos, C2 Interceptor, que detectó y marcó un intento de conexión C2 Brute Ratel desde el sistema de un cliente a principios de febrero:
Lo más sorprendente era la información sobre la versión del archivo malicioso HealthApi.dll, que, como se muestra en la Figura 1, afirma que es el componente legítimo de Sophos con ese nombre. Empezamos a buscar muestras con las mismas características, y encontramos un puñado que parecen haber sido creadas por el mismo actor de la amenaza, incluida una versión (que utiliza la firma digital posiblemente comprometida mencionada anteriormente) que data de enero. Como se ha señalado anteriormente, vimos una variedad de cargas útiles en uso; para este artículo, nos centraremos principalmente en lo que vimos cuando desempaquetamos las muestras desplegando Cobalt Strike o Brute Ratel.
El instalador falso parece ser el medio por el que los archivos corruptos llegaron a los sistemas, al menos en algunos casos. En cuanto al acceso inicial, identificamos, en algunos casos, cargadores JavaScript que parecen haber sido enviados a las víctimas por correo electrónico.
Características generales
En los casos que revisamos para este post, el código del punto de entrada fue sobrescrito por el código del cargador malicioso y la carga útil cifrada se almacenó como un recurso dentro de la sección de recursos. Esto significa que la estructura original del archivo PE tuvo que modificarse para acomodar el recurso malicioso adicional, como se muestra en la Figura 2.
La actualización de la estructura del archivo PE es solo parcial: por ejemplo, la tabla de exportación no es fija. En esta situación, las muestras de DLL se exportan con código incomprensible (roto), ya que el código del cargador malicioso sobrescribió el código:
Por otro lado, los campos de cabecera necesarios para cargar correctamente el ejecutable (por ejemplo, el tamaño de la imagen) eran funcionales. En particular, el tamaño de la sección de recursos en la tabla de secciones está modificado, para ocultar que todos los recursos del archivo original limpio fueron reemplazados por el archivo de recursos que contiene la carga útil cifrada.
La Figura 4 muestra una comparación del SophosFS.exe original con la versión troyanizada:
DllRegisterServer
En la muestra 25e24385719aede7f4e0359b389a9597cc26df20e1b3a6367bbc04d5d4982fe6, el archivo es una DLL y lo que se sobrescribe es el código de la función de exportación DllRegisterServer. Podemos ver que se está acumulando una clave a la pila. Un análisis más detallado revela que esta clave se utiliza como clave XOR para descifrar el recurso PE ofuscado del atacante.
Una vez descifrado, encontramos shellcode que acabaría descifrando otra capa para inyectarla en memoria y luego ejecutarla. Esta muestra revela finalmente un ejecutable sin su cabecera DOS: en este caso, Brute Ratel.
Mientras tanto, para las muestras de Cobalt Strike, la carga útil es el shellcode http de 64 bits habitual:
O, alternativamente, el ejecutable de la baliza Cobalt Strike:
En algunos casos relacionados con Cobalt Strike, vimos que el cargador TitanLdr, que es un shellcode multifunción bastante complejo, hacía el trabajo de cargar la carga útil de Cobalt Strike. En otros casos, un shellcode más sencillo se encargó del proceso de carga de Cobalt Strike. También hemos observado, como ya se ha mencionado, cargadores JavaScript, que pueden haber entrado en los sistemas de los clientes a través del correo electrónico, que cargaban un instalador MSI, que a su vez cargaba los EXE / DLL falsos.
Conclusiones posteriores
Nuestra investigación continúa y, en el momento de la publicación, nuestro archivo IoC (enlazado más abajo) contiene más de 400 entradas. También han salido a la luz otros hallazgos más curiosos. Por ejemplo, en al menos un caso encontramos un binario abusivo firmado por un certificado (revocado). La carga útil era Qakbot. Una comprobación en VirusTotal indica que es el único archivo firmado por esa firma en particular, lo que puede significar que el adversario lo registró para sí mismo.
Entonces… ¿por qué?
Una persona razonable podría preguntarse qué pretende conseguir el atacante haciendo estas cosas. Al fin y al cabo, las “modificaciones” rompen bastante las firmas digitales de esos archivos, hasta el punto de que la mayoría de las herramientas no pueden identificar los archivos como firmados. No engañan a los procesos que dependen de esas firmas y si las protecciones de Sophos se están ejecutando en las máquinas objetivo, este tipo de enmascaramiento es muy visible para nosotros, por lo que lo cerramos (y compartimos nuestros hallazgos con otros defensores).
Entonces… ¿por qué? Básicamente, este tipo de cosas pretende confundir a cualquiera que eche un vistazo superficial a los archivos. Los malos no quieren llamar la atención, así que los nombres “de broma” o “133t” son una mala elección; los archivos de aspecto respetable, en particular los de una empresa de infoseguridad conocida, tienen más posibilidades de confundir o simplemente de no llamar la atención de los analistas, especialmente cuando parte del código restante en los archivos alterados es legítimo: cadenas, referencias a fuentes y similares.
¿Significa todo esto que hay una vulnerabilidad en el software? No, lo que es a la vez un alivio (no hay fallo = bueno) y no un alivio (no hay forma de evitarlo = malo). Como veremos en la siguiente sección, los archivos afectados en este caso procedían de una versión específica de un paquete específico, no porque ese paquete tuviera un error, sino simplemente porque el atacante pudo conseguir una copia del paquete.
Muestras
Hasta ahora, esta investigación ha descubierto muestras que afectaban a varios ejecutables o DLL de Sophos; esto ocurrió más de una vez con dos archivos, aunque para ningún archivo detectamos más de una versión afectada. Una comprobación preliminar indica que todos los archivos afectados formaban parte de la versión 2022.4.3 de nuestro producto Windows Endpoint. La versión que actualmente está completando su despliegue es la 2023.2.
Proporcionamos en esta sección una muestra de los archivos encontrados a medida que avanzaba esta investigación, qué función legítima cumplen en los productos de Sophos y qué intentaba hacer el atacante en cada caso. La lista está ordenada por archivo de Sophos afectado.
SophosCleanup.exe
Versión 3.10.3.1 de Sophos Clean; el producto es SophosClean, versión 3.10.3
Hash malicioso: 214540f4440cceffe55424a2c8de1cc43a42e5dcfb52b151ea0a18c339007e37
Visto por primera vez 2024-03-04 01:50:38 UTC
El malware se conecta a 185.219.221[.]136:443
SophosFSTelemetry.exe
Versión 1.10.7.68 de Sophos File Scanner; el producto es Sophos File Scanner, versión 1.10.7
Hash malicioso: 021921800888bc174c40c2407c0ea010f20e6d32c596ed3286ebfe7bd641dd79
Visto por primera vez 2024-03-13 19:15:25 UTC
El malware se conecta a topclubfond[.]com
SophosFX.exe
Versión 1.10.7.73 del servicio Sophos File Scanner; el producto es Sophos File Scanner, versión 1.10.7
Hash malicioso: 18303e4b327cb47d131b0a3f3859e4e90d8fa0c40cf961bad7a34b550160e919
Visto por primera vez 2024-02-28 17:27:14 UTC
Cobalt Strike, config: «C2Server»: «http://devs.ambitenergycorporation[.]com:443/samlss/media.jpg»
SophosIntelixPackager.exe
Versión 6.0.0.533 del empaquetador de Sophos para envíos Intelix; el producto es SophosIntelixPackager, versión 6.0.0
Hash malicioso: 617709e9e728b5e556ef7f98c55e99440d93186855b4a09d59bc4526a6fd82ae
Visto por primera vez 2024-02-15 18:20:45 UTC
Alojado en hxxp://185.117[.]91.230/download/guard64.exe ; Configuración de Cobalt Strike «C2Server»: «realsepnews.com,/lessen.jpgv» «HttpPostUri»: «/enterprise»
SophosNtpUninstall.exe
Versión 1.17.1118 de SophosNtpUninstall.exe; el producto es Sophos Network Threat Protection, versión 1.17
Hash malicioso: 28738aac83c5534b5c3228ece92abc3b12c154fdad751a2e73c24633a4d6db71
Visto por primera vez 2024-02-02 14:48:37 UTC
Cobalt Strike; dirección C2 hxxps://buygreenstudio[.]com/build/constants/
Vimos varios archivos atacados por dos intentos de subversión distintos. Aquí tienes dos, para que veas cómo es:
HealthApi.dll
Versión 2.9.137 de Sophos Health API; el producto es Sophos Health, versión 2.9
Hash malicioso: 25e24385719aede7f4e0359b389a9597cc26df20e1b3a6367bbc04d5d4982fe6
Visto por primera vez 2024-02-23 16:14:10
Alojado en la URL hxxps://du178mamil[.]com/rtl.dll; servidor C2: azuycomp[.]com
Hash malicioso: ae35666999bd6292bdb0e24aad521c183bac15543d6b4ca27e0c8a3bcc80079c
Visto por primera vez 2024-02-23 17:44:27
Se conecta a hxxps://businessannually[.]com/persistent.html?lose=true
SophosUninstall.exe
Versión 1.15.221.0 de Sophos Endpoint Agent; el producto es Sophos Endpoint Uninstaller, versión 1.15
Hash malicioso: 6a67cabf6058aa8a2d488a6233d420658eb803cba9da04f14b76e2b028ab30bf
Visto por primera vez 2024-02-20 20:22:38 UTC
Configuración de Cobalt Strike: «C2Servidor»: «usaglobalnews[.]com/Select/play/NX4C69QVQ4I» , «HttpPostUri»: «/diseño/dumpenv/Z2UC9FG2»,
Hash malicioso: 86ebfe9d8b3c928fcf80642e88ea3b195b2ba23c6a5c17fdb68de13baac75cd1
Visto por primera vez 2024-02-23 18:05:45 UTC
Configuración de Cobalt Strike; C2Server es businessannually[.]com/persistent.html ; HttpPostUri – /execute
Detecciones y protecciones
Varias protecciones de Sophos detectan o bloquean estos archivos maliciosamente alterados. Entre ellas están ATK/ScLoad-N, ATK-ScLoad-L, ATK/SCLoad-M, ATK/SCLoad-O, Troj/Cobalt-JA, Troj/Mdrop-JXD y la protección dinámica contra shellcode, así como la mitigación C2 Interceptor mencionada al principio de este artículo.
Respuestas del sector
Una campaña como ésta es ruidosa y otros defensores también están a la caza. Observamos con satisfacción que Palo Alto Networks, que también está viendo el mismo tipo de actividad, también ha publicado información relacionada con esta campaña, incluida una visualización del flujo de ataque de la campaña. Además, algunos observadores informan de una nueva cepa de malware llamada provisionalmente Oyster/CleanUpLoader, que está apareciendo junto con la campaña; los clientes de Sophos ya están protegidos, pero seguimos esta evolución con interés.
Como se ha indicado anteriormente, nos hemos puesto en contacto con las empresas mencionadas en este artículo y con otras que también se han visto afectadas. Como parte de ese proceso, Bitdefender (una de las empresas con binarios afectados) ha revisado los datos relativos a sus archivos y nos ha pedido que transmitamos lo siguiente:
Bitdefender ha sido informada de la modificación del binario utilizado en estos ataques. Bitdefender ha reconocido que, dado que los binarios se utilizaron de forma independiente, fuera de la funcionalidad normal del software, no se requiere ninguna acción adicional. Los productos Bitdefender instalados en un sistema no son vulnerables a este método de corrupción binaria.
IOC
En nuestro GitHub proporcionamos un conjunto de indicadores de compromiso asociados a esta campaña. Como se trata de una investigación en curso, este archivo puede aumentar con el tiempo.
Agradecimientos
Colin Cowie y Jordon Olness, del equipo MDR Threat Intel, han contribuido a esta investigación.