MosaicRegressor: acechando en las sombras de UEFI

Contenidos

 Part II. Technical details (PDF)

La Interfaz de firmware extensible unificada (UEFI, por sus siglas en inglés) se ha convertido en una destacada tecnología incrustada en los chips destinados a los modernos sistemas de computación. Como sustituta del antiguo BIOS, sirve para facilitar la secuencia de arranque de las computadoras y cargar el sistema operativo, y cuenta con un entorno lleno de funcionalidades. Pero a la vez, se ha convertido en el blanco de actores de amenazas para lanzar ataques excepcionalmente persistentes.

Uno de estos ataques, donde encontramos una imagen de firmware de la UEFI infectada con un implante malicioso, es el objeto de esta investigación. Este implante sirve para instalar otros programas maliciosos en las computadoras atacadas, con el que hasta ahora no nos hemos topado. Hasta donde sabemos, este es el segundo caso conocido en que se ha detectado un firmware malicioso de la UEFI usado por un actor de amenazas.

En este artículo trataremos los siguientes hallazgos relevantes:

  • Descubrimos imágenes maliciosas del firmware de la UEFI, cuyos originales inocuos fueron modificados para incorporar varios módulos maliciosos.
  • Estos módulos descargan malware en las computadoras atacadas. Este malware es parte de una estructura maliciosa más grande, a la que llamamos MosaicRegressor;
  • Los componentes de dicha estructura fueron descubiertos en una serie de ataques selectivos dirigidos contra diplomáticos y miembros de una ONG de África, Asia y Europa, cuyas actividades estaban relacionadas con Corea del Norte;
  • Ciertos artefactos de código en algunos de los componentes de la estructura, así como superposiciones en la infraestructura del C2 usado durante la campaña, sugieren la participación de un actor de habla china en estos ataques, quizás con conexiones con grupos que usan la puerta trasera Winnti;

Este ataque fue detectado con la ayuda de Firmware Scanner, que es parte integral de los productos de Kaspersky desde principios de 2019. Esta tecnología fue desarrollada para detectar amenazas ocultas en el BIOS de la ROM, incluyendo imágenes del firmware de la UEFI.

Estado actual del arte

Antes de adentrarnos en nuestros hallazgos, recordemos qué es la UEFI y cómo fue abusada para lanzar ataques. En resumen, la UEFI es una especificación que constituye la estructura y operación del firmware de plataforma de bajo nivel, para permitir que el sistema operativo interactúe con ella en varias etapas de su actividad.

Esta interacción se da en particular durante la fase de arranque, donde el firmware de la UEFI facilita que cargue el sistema operativo. Pero también puede ocurrir cuando el sistema operativo ya está en pleno funcionamiento, por ejemplo, para actualizar el firmware a través de una interfaz bien definida del software.

Es así que el firmware de la UEFI se convierte en el mecanismo perfecto para guardar malware persistente. Un atacante sofisticado puede modificar el firmware y usarlo para instalar códigos maliciosos que se ejecutarán una vez que el sistema operativo se termine de cargar. Además, dado que viene dentro de la memoria flash de la Interfaz periférica serial (SPI) que está soldada a la tarjeta madre, el malware implantado es resistente a la reinstalación del sistema operativo y al remplazo del disco duro.

En los últimos años, este tipo de ataques ha ocurrido varias veces. Un ejemplo claro es el implante LowJax descubierto en 2018 por nuestros amigos de ESET, en el cual se usaron módulos parchados de la UEFI del software anti-robo LoJack (o Computrace) para instalar un agente de modo de usuario malicioso en varias computadoras atacadas por Sofacy Fancy Bear. Los peligros de Computrace fueron descritos ya en 2014 por nuestros colegas de Global Research and Analysis Team (GReAT).

Otro ejemplo es el código fuente de un bootkit para la UEFI, llamado VectroEDK, descubierto en las fugas de Hacking Team en 2015. Este código consistía de un conjunto de módulos de la UEFI que podían incorporarse en el firmware de la plataforma para que instale una puerta trasera en el sistema, que se ejecuta cuando el sistema operativo termina de cargarse, o para que se reinstale si se lo elimina. A pesar de que el código de VectorEDK se hizo público y hoy puede encontrarse en Github, antes de nuestro último hallazgo, no habíamos encontrado evidencia real de su existencia en Internet.

Nuestro descubrimiento

Durante una investigación, encontramos varias imágenes de firmware de la UEFI sospechosas. Un análisis detenido reveló que contenían cuatro componentes que tenían una inusual proximidad en sus valores GUID asignados: eran dos controladores DXE y dos aplicaciones de la UEFI. Posteriores análisis permitieron determinar que se basaban en el código fuente filtrado del bootkit de VectorEDK de Hacking Team, con pequeños ajustes.

Componentes maliciosos encontrados en el firmware infectado de la UEFI

El objetivo de los módulos agregados es invocar una cadena de eventos que desenbocan en la escritura de un ejecutable malicioso llamado ‘IntelUpdate.exe’ en la carpeta Inicio de la víctima. Entonces, cuando Windows se inicia, también se invoca el malware escrito. Aparte de eso, los módulos se aseguran de que, si se elimina del disco, el archivo del malware se vuelva a escribir. Puesto que esta lógica se ejecuta desde el flash de la Interfaz periférica serial (SPI), no hay otra forma de evitar este proceso que no sea la eliminación del firmware malicioso.

A continuación, mostramos un perfil de los componentes que descubrimos:

  • SmmInterfaceBase: es un controlador DXE basado en el componente ‘rkloader’ de Hacking Team, cuya función es instalar otros componentes del bootkit para su posterior ejecución. Esto se realiza registrando una devolución de llamada que se invoca después de un evento del tipo EFI_EVENT_GROUP_READY_TO_BOOT. Este evento ocurre en un punto cuando el control se transfiere al cargador de arranque del sistema operativo, permitiendo así que la devolución de la llamada se efectúe antes del mismo. A su vez, la devolución de llamada carga e invoca el componente ‘SmmAccessSub’.
  • Ntfs: es un controlador escrito por Hacking Team que sirve para detectar y analizar el sistema de archivos NTFS y permitir la conducción de las operaciones de archivo y el directorio en el disco.
  • SmmReset: es una aplicación de la UEFI que sirve para marcar como infectada la imagen del firmware. Esto se hace fijando el valor de una variable llamada ‘fTA’ a un GUID de codificación fija. La aplicación está basada en un componente del código original de VectorEDK llamado ‘ReSetfTA’.

 Ajuste de la variable fTA con un GUID predefinido para marcar la ejecución del bootkit.

  • SmmAccessSub: es el principal componente del bootkit que sirve como un descargador persistente para malware de modo usuario. Se ejecuta por la devolución de llamada registrada durante la ejecución de ‘SmmInterfaceBase’ y escribe un binario incrustado en él como un archivo llamado ‘IntelUpdate.exe’ en el directorio de inicio en el disco. Esto permite que el binario se ejecute cuando Windows está en pleno funcionamiento.
    Este es el único componente patentado entre todos los que hemos analizado, ha sido escrito desde cero y hace muy poco uso del código de una aplicación de VectorEDK llamada ‘fsbg’. Realiza las siguientes acciones para descargar el archivo correspondiente al disco:

    • Punteros bootstrap para las estructuras globales System Table, BootServices y RuntimeServices.
    • Tratan de obtener un identificador de la imágen cargada invocando el método HandleProtocol con el argumento EFI_LOADED_IMAGE_PROTOCOL_GUID.
    • Si obtienen el identificador a la imagen actual, entonces el módulo busca la carpeta raíz en la que Windows está instalado enumerando todas las carpetas y comprobando que el directorio ‘\Windows\System32’ se encuentre en ellas. Una vez encontrada, crea un objeto global EFI_FILE_PROTOCOL que corresponde a la carpeta, y que será referenciado para abrir cualquier otro directorio o archivo en esta carpeta.
    • Si la carpeta raíz es detectada en la etapa anterior, entonces el módulo busca un archivo marcador llamado ‘setupinf.log’ en el directorio de Windows y procede solo si este archivo no existe. Si este archivo no existe, entonces crea uno.
    • Si la creación de ‘setupinf.log’ se realiza, el módulo verifica entonces si el directorio ‘Usuarios’ existe en la misma carpeta.
    • Si el directorio ‘Usuarios’ existe, entonces escribe el archivo ‘IntelUpdate.exe’ (incrustado en el binario de las aplicaciones de la UEFI) en el directorio ‘ProgramData\Microsoft\Windows\Start Menu\Programs\Startup’ de la carpeta raíz.

Código de ‘SmmAccessSub’ utilizado para escribir el binario incrustado ‘IntelUpdate.exe’ en el directorio Inicio de Windows.

Por desgracia, no logramos determinar el vector exacto de infección que les permitía a los atacantes sobrescribir el firmware original de la UEFI. Nuestros registros de detección muestran que el mismo firmware era malicioso, pero ningún evento sospechoso le antecedía. Debido a esto, solo podemos especular sobre cómo sucedió la infección.

Una opción es a través del acceso físico a la computadora de la víctima. Esto podría deberse parcialmente al material filtrado de Hacking Team, según el cual la instalación del firmware infectado con VectorEDK requiere arrancar la computadora atacada desde una llave USB. Este USB debe contener una utilidad de actualización especial que pueda generarse con un constructor designado provisto por la empresa. En el firmware que analizamos encontramos una utilidad de actualización Q-flash que también podría haber servido para tal propósito.

Además, las filtraciones revelan que la capacidad de infección de la UEFI (a la que Hacking Team se refiere como ‘instalación persistente’) fue probada en portátiles ASUSX550C. Estas portátiles usan un firmware AMI para la UEFI, que es similar al que analizamos. Por esta razón, podemos suponer que el método de Hacking Team para parchar el firmware también serviría en nuestro caso.

Extracto de un manual de Hacking Team para la instalación del firmware infectado de la UEFI, también conocido como ‘instalación persistente’.

Por supuesto, no podemos excluir la posibilidad de que un firmware malicioso se haya enviado por push de forma remota, posiblemente a través de algún mecanismo de actualización infectado. Este escenario, por lo general requiere explotar vulnerabilidades en el proceso de autenticación de la actualización del BIOS. Si bien este podría ser el caso, no contamos con ninguna evidencia al respecto.

La figura completa: Penetrar la estructura de MosaicRegressor

Si bien se usó el bootkit original de Hacking Team’s para escribir una de las puertas traseras de la empresa al disco, conocida como ‘Soldier’, ‘Scout’ o ‘Elite’, el implante en la UEFI que investigamos instaló un nuevo programa malicioso que hasta ahora no hemos visto. Decidimos buscar muestras similares que compartieran con el binario descargado cadenas y características de instalación. Como resultado, las muestras que encontramos, sugerían que el malware descargado era solo una variante derivada de una estructura más amplia a la que llamamos MosaicRegressor.

MosaicRegressor es una estructura modular y de múltiples etapas diseñada para espiar y recopilar datos. Consiste de descargadores y, ocasionalmente, de múltiples cargadores intermediarios, cuyo objetivo es recibir y ejecutar la carga útil en las computadoras atacadas. El que esta estructura esté compuesta de múltiples módulos, permite que los atacantes oculten la estructura mayor e impidan su análisis, además de instalar componentes para atacar a sus víctimas solo a pedido. De hecho, durante nuestra investigación logramos obtener solo algunos componentes de la carga útil.

Los componentes del descargador de MosaicRegressor tienen una lógica empresarial común, en la que los implantes se contactan con un C2, desde donde descargan otras DLLs, para luego cargar e invocar funciones de exportación específicas desde ellas. La ejecución de los módulos descargados genera productos que pueden ser devueltos al servidor de administración.

Dicho esto, los diferentes descargadores que observamos, usaban distintos mecanismos de comunicación para contactarse con los servidores de administración:

  • Biblioteca CURL (HTTP/HTTPS)
  • Interfaz de transferencia BITS
  • WinHTTP API
  • POP3S/SMTPS/IMAPS, cargas útiles transferidas mediante mensajes de correo

La última variante en la lista es distinta porque usa casillas de correo para alojar a la carga útil requerida. La carga útil que es ejecutada por este implante también puede generar un producto por invocación, el cual posteriormente puede ser reenviado a una dirección de correo de ‘retroalimentación’, donde posiblemente será recopilado por los atacantes.

Las casillas de correo usadas para este objetivo pertenecen al dominio ‘mail.ru’, y se accede a ellas con credenciales codificados en el binario del malware. Para recoger el archivo requerido desde la bandeja de entrada atacada, MailReg inserta un bucle infinito para conectarse con el servidor “pop.mail.ru” cada 20 minutos y utiliza el primer par de credenciales que permitan una conexión exitosa. En la siguiente tablas se especifican los correos utilizados para el inicio de sesión (sin sus contraseñas) y el correspondiente correo de retroalimentación:

Correo para inicio de sesión Correo de retroalimentación
thtgoolnc@mail.ru thgetmmun@mail.ru
thbububugyhb85@mail.ru thyhujubnmtt67@mail.ru

Los descargadores también pueden dividirse en dos tipos distintos: el “sencillo” que recoge la carga útil, y el “extendido” que también recoge información del sistema:


La estructura del archivo de registro escrito por BitsRegEx, las cadenas marcadas en rojo son los campos originales que aparecen en ese archivo

Logramos obtener una sola variante de la siguiente etapa, la cual se instala en los valores del registro de autorun y actúa como otro cargador de los componentes que son recogidos por el descargador inicial. Estos componentes también son solo cargadores intermediarios para las DLLs en la siguiente etapa. Por último, no hay una lógica empresarial concreta en los componentes persistentes, ya que ésta es provista por el servidor de administración en forma de archivos DLL, la mayoría de los cuales son temporales.

Hemos analizado una de estas bibliotecas, “load.rem“, que es un ladrón básico de documentos, y que recoge archivos del directorio “Documentos Recientes” y los comprime con una contraseña, posiblemente como un paso preliminar antes de extraer el resultado al servidor de administración mediante otro componente.

La siguiente imagen describe el flujo completo y la conexión entre los componentes que conocemos. Los elementos en color son los componentes que obtuvimos, y los en gris son los que no obtuvimos:


Flujo desde BitsRegEx para la ejecución de los descargadores intermediarios y la carga útil final.

¿Quiénes son los blancos?

De acuerdo con nuestra telemetría, hubo varias docenas de víctimas que, entre 2017 y 2019, recibieron los componentes desde la estructura de MosaicRegressor. Entre ellas figuran entidades diplomáticas y ONGs en África, Asia y Europa. Solo dos de ellas estaban infectadas con el bootkit de la UEFI en 2019, antes de la instalación del componente BitsReg.

Considerando la afiliación de las víctimas descubiertas, logramos determinar que todas tenían alguna relación con Corea del Norte, ya sea con actividades sin fines de lucro relacionadas con ese país, o que estuvieran presentes en él. Este tema común puede reforzarse con uno de los vectores de infección usados para distribuir el malware a algunas de las víctimas; dicho vector era archivos SFX camuflados de documentos de discusión sobre varios temas relacionados con Corea del Norte. Estos archivos venían combinados con un documento real y con variantes de MosaicRegressor, y ambos se ejecutaban cuando el archivo comprimido se abría. A continuación se muestran ejemplos de documentos usados como señuelo.

Ejemplos de los documentos señuelo empaquetados con archivos SFX maliciosos y enviados a las víctimas de MosaicRegressor camuflados como discusiones de temas relacionados con Corea del Norte.

¿Quiénes están detrás del ataque?

Al analizar las variantes de MosaicRegressor, notamos varios artefactos interesantes que nos proporcionaron pistas sobre la identidad de los actores detrás de esta estructura. Hasta donde podemos afirmar, los ataques fueron realizados por un actor de habla china, que posiblemente usó anteriormente la puerta trasera Winnti. La siguiente evidencia que hallamos sostiene esta teoría:

  • Identificamos muchas cadenas usadas en el registro de información del sistema, generadas por la variante BitsRegEx que contiene la secuencia de caracteres ‘0xA3, 0xBE’. Se trata de una secuencia inválida para una cadena UTF8 y la codificación LATIN1 traduce estos caracteres a un signo de libra seguido de un “indicador ordinal masculino” (“£º”). Un intento de iterar con todas las tablas de símbolos iconv disponibles para convertir la secuencia a UTF-8 genera posibles candidatos que ofrecen una interpretación que tiene sentido. Dado el contexto de la cadena antes del símbolo y los símbolos en la línea de alimentación a continuación, la mejor opción es el símbolo Unicode “FULL-WIDTH COLON” traducido de las páginas de códigos chinos o coreanos (CP936 y CP949).

Figura: El registro del sistema de información de BitsRegEx utilizando la secuencia de caracteres 0xA3, 0xBA, posiblemente utilizada para representar un símbolo “full-width colon”, según las páginas de códigos CP936 y CP949.

  • Otro artefacto que encontramos era un recurso de archivo alojado en muestras de CurlReg que contenía un conjunto de identificadores de lenguaje a 2052 (“zh-CN”).

Artefacto en chino en la sección del recurso de una muestra de CurlReg

  • Detectamos un objeto OLE2 tomado de un documento armado con la vulnerabilidad CVE-2018-0802, producido por el constructor de documentos conocido como ‘Royal Road’ / ‘8.t’ y que descargaba una variante de CurlReg. Hasta donde sabemos, este constructor es muy usado por actores de amenazas de habla china.

Extracto del objeto OLE2 encontrado en un documento armado con ‘Royal Road’ que distribuía la variante CurlReg

  • Dirección de C2 (103.82.52[.]18) encontrada en una de las variantes de MosaicRegressor (MD5:3B58E122D9E17121416B146DAAB4DB9D) y usada por ‘Winnti umbrella y grupos vinculados’, según un informepúblico. Puesto que este es el único vínculo entre nuestros hallazgos y cualquiera de los grupos que usan la puerta trasera Winnti, creemos, sin mucho convencimiento, que es el responsable de los ataques.

Conclusión

Los ataques descritos en este artículo demuestran hasta dónde puede llegar un actor de amenazas para lograr un altísimo nivel de persistencia en una computadora infectada. Es muy inusual ver firmware de la UEFI infectado, sobre todo debido a su baja visibilidad en los ataques contra firmware, a las avanzadas medidas necesarias para su instalación en el chip del flash SPI de la computadora atacada, y al elevado riesgo de exponer conjuntos de herramientas o activos sensibles en el intento.

Tomando esto en cuenta, vemos que la UEFI sigue siendo un punto de interés para los actores APT, y que al que los proveedores de seguridad no le prestan la atención que merece. La combinación de nuestra tecnología y la comprensión de las campañas actuales y pasadas que se valen del firmware infectado, nos ayudan a monitorear e informar sobre futuros ataques contra estos blancos.

Los clientes del servicio de informes sobre APTs pueden encontrar los detalles completos de este informe, así como las futuras actualizaciones sobre el actor de amenaza subyacente, en nuestro Threat Intelligence Portal.

IoCs

Módulos de la UEFI

F5B320F7E87CC6F9D02E28350BB87DE6 (SmmInterfaceBase)
B53880397D331C6FE3493A9EF81CD76E (SmmAccessSub)
91A473D3711C28C3C563284DFAFE926B (SmmReset)
DD8D3718197A10097CD72A94ED223238 (Ntfs)

Descargadores RAR SFX
0EFB785C75C3030C438698C77F6E960E
12B5FED367DB92475B071B6D622E44CD
3B3BC0A2772641D2FC2E7CBC6DDA33EC
3B58E122D9E17121416B146DAAB4DB9D
70DEF87D180616406E010051ED773749
7908B9935479081A6E0F681CCEF2FDD9
AE66ED2276336668E793B167B6950040
B23E1FE87AE049F46180091D643C0201
CFB072D1B50425FF162F02846ED263F9

Documentos señuelo
0D386EBBA1CCF1758A19FB0B25451AFE
233B300A58D5236C355AFD373DABC48B
449BE89F939F5F909734C0E74A0B9751
67CF741E627986E97293A8F38DE492A7
6E949601EBDD5D50707C0AF7D3F3C7A5
92F6C00DA977110200B5A3359F5E1462
A69205984849744C39CFB421D8E97B1F
D197648A3FB0D8FF6318DB922552E49E

BitsReg
B53880397D331C6FE3493A9EF81CD76E
AFC09DEB7B205EADAE4268F954444984 (64-bit)

BitsRegEx

DC14EE862DDA3BCC0D2445FDCB3EE5AE
88750B4A3C5E80FD82CF0DD534903FC0
C63D3C25ABD49EE131004E6401AF856C
D273CD2B96E78DEF437D9C1E37155E00
72C514C0B96E3A31F6F1A85D8F28403C

CurlReg

9E182D30B070BB14A8922CFF4837B94D
61B4E0B1F14D93D7B176981964388291
3D2835C35BA789BD86620F98CBFBF08B

CurlRegEx

328AD6468F6EDB80B3ABF97AC39A0721
7B213A6CE7AB30A62E84D81D455B4DEA

MailReg
E2F4914E38BB632E975CFF14C39D8DCD

Descargadores basados en WinHTTP
08ECD8068617C86D7E3A3E810B106DCE
1732357D3A0081A87D56EE1AE8B4D205
74DB88B890054259D2F16FF22C79144D
7C3C4C4E7273C10DBBAB628F6B2336D8

Carga útil de BitsReg (FileA.z)

89527F932188BD73572E2974F4344D46

Descargadores de la segunda etapa

36B51D2C0D8F48A7DC834F4B9E477238 (mapisp.dll)
1C5377A54CBAA1B86279F63EE226B1DF (cryptui.sep)
9F13636D5861066835ED5A79819AAC28 (cryptui.sep)

Carga útil de la tercera etapa

FA0A874926453E452E3B6CED045D2206 (load.rem)

Rutas de archivos

%APPDATA%\Microsoft\Credentials\MSI36C2.dat
%APPDATA%\Microsoft\Internet Explorer\%Computername%.dat
%APPDATA%\Microsoft\Internet Explorer\FileA.dll
%APPDATA%\Microsoft\Internet Explorer\FileB.dll
%APPDATA%\Microsoft\Internet Explorer\FileC.dll
%APPDATA%\Microsoft\Internet Explorer\FileD.dll
%APPDATA%\Microsoft\Internet Explorer\FileOutA.dat
%APPDATA%\Microsoft\Network\DFileA.dll
%APPDATA%\Microsoft\Network\DFileC.dll
%APPDATA%\Microsoft\Network\DFileD.dll
%APPDATA%\Microsoft\Network\subst.sep
%APPDATA%\Microsoft\WebA.dll
%APPDATA%\Microsoft\WebB.dll
%APPDATA%\Microsoft\WebC.dll
%APPDATA%\Microsoft\Windows\LnkClass.dat
%APPDATA%\Microsoft\Windows\SendTo\cryptui.sep
%APPDATA%\Microsoft\Windows\SendTo\load.dll %APPDATA%\Microsoft\Windows\load.rem
%APPDATA%\Microsoft\Windows\mapisp.dll
%APPDATA%\Microsoft\exitUI.rs
%APPDATA%\Microsoft\sppsvc.tbl
%APPDATA%\Microsoft\subst.tbl
%APPDATA%\newplgs.dll
%APPDATA%\rfvtgb.dll
%APPDATA%\sdfcvb.dll
%APPDATA%\msreg.dll
%APPDATA\Microsoft\dfsadu.dll
%COMMON_APPDATA%\Microsoft\Windows\user.rem
%TEMP%\BeFileA.dll
%TEMP%\BeFileC.dll
%TEMP%\RepairA.dll
%TEMP%\RepairB.dll
%TEMP%\RepairC.dll
%TEMP%\RepairD.dll
%TEMP%\wrtreg_32.dll
%TEMP%\wrtreg_64.dll
%appdata%\dwhost.exe
%appdata%\msreg.exe
%appdata%\return.exe
%appdata%\winword.exe

Dominios e IPs

103.195.150.106
103.229.1.26
103.243.24.171
103.243.26.211
103.30.40.116
103.30.40.39
103.39.109.239
103.39.109.252
103.39.110.193
103.56.115.69
103.82.52.18
117.18.4.6
144.48.241.167
144.48.241.32
150.129.81.21
43.252.228.179
43.252.228.252
43.252.228.75
43.252.228.84
43.252.230.180
menjitghyukl.myfirewall.org

Otros servidores de administración sospechosos
43.252.230.173
185.216.117.91
103.215.82.161
103.96.72.148
122.10.82.30

Mutexes

FindFirstFile Message Bi
set instance state
foregrounduu state
single UI
Office Module
process attach Module

Publicaciones relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *