Investigadores de ESET han descubierto un nuevo grupo de ciberespionaje que ha estado dirigiendo sus ataques a hoteles, gobiernos y empresas privadas de todo el mundo. Hemos llamado a este grupo FamousSparrow y creemos que ha estado activo desde al menos 2019.

Durante nuestra investigación, al revisar los datos de nuestra telemetría nos dimos cuenta de que FamousSparrow aprovechó las vulnerabilidades de Microsoft Exchange, conocidas como ProxyLogon, que describimos de forma detallada en marzo de 2021. Como recordatorio, esta vulnerabilidad de ejecución remota de código ha sido utilizada por más de 10 grupos APT para tomar control de servidores de correo de Exchange en todo el mundo. De acuerdo con la telemetría de ESET, FamousSparrow comenzó a explotar las vulnerabilidades el 3 de marzo de 2021, el día después de la publicación del parche, por lo tanto, se trata de otro grupo de APT que tenía acceso al código de la vulnerabilidad ProxyLogon en marzo de 2021.

En esta publicación discutiremos la atribución a FamousSparrow y la victimología del grupo. A esto le seguirá un análisis técnico detallado del principal backdoor del grupo, al cual hemos denominado SparrowDoor.

Aclaración sobre la atribución

Creemos que el grupo FamousSparrow es actualmente el único usuario del backdoor SparrowDoor (que abordaremos con más detalle más abajo en esta misma publicación). El grupo también utiliza dos versiones personalizadas de Mimikatz (consulte la sección Indicadores de Compromiso en este mismo artículo) que podrían ser utilizadas para vincular incidentes a este grupo.

Si bien consideramos que FamousSparrow es un grupo que opera de manera independiente, encontramos conexiones con otros grupos APT conocidos. En un caso, los atacantes desplegaron una variante de Motnug, que es un loader utilizado por SparklingGoblin. En otro caso, encontramos en una máquina comprometida por FamousSparrow un Metasploit en ejecución utilizando cdn.kkxx888666[.]com como su servidor C&C. Este dominio está relacionado con un grupo conocido como DRBControl.

Victimología

El grupo ha estado activo desde al menos agosto de 2019 y ha estado dirigiendo sus ataques principalmente a hoteles en varios países. Además, hemos observado algunas víctimas de otros sectores, como organismos gubernamentales, organizaciones internacionales, empresas de ingeniería y bufetes de abogados. Los países en los que observamos víctimas son los siguientes:

  • Brasil
  • Burkina Faso
  • Sudáfrica
  • Canadá
  • Israel
  • Francia
  • Guatemala
  • Lituania
  • Arabia Saudita
  • Taiwán
  • Tailandia
  • Reino Unido

Figure 1. Geographic distribution of FamousSparrow targets

Imagen 1. Distribución geográfica de las víctimas de FamousSparrow

Vector de compromiso

En algunos casos, pudimos observar que el vector de compromiso inicial utilizado por FamousSparrow fueron aplicaciones web vulnerables expuestas a Internet. Creemos que FamousSparrow aprovechó vulnerabilidades conocidas de ejecución remota de código en: Microsoft Exchange (incluido ProxyLogon en marzo de 2021), Microsoft SharePoint y Oracle Opera (un software empresarial para la gestión hotelera). Todas estas vulnerabilidades se utilizaron para entregar en los sistemas comprometidos varias muestras maliciosas.

Una vez que el servidor es comprometido, los atacantes hacen uso de distintas herramientas personalizadas:

  • Una variante de Mimikatz
  • Una pequeña utilidad que entrega ProcDump en el disco y lo usa para volcar el proceso lsass, probablemente para recopilar información sensible en la memoria, como credenciales.
  • Nbtscan, un escáner de NetBIOS
  • Un loader para el backdoor SparrowDoor

A través de nuestra telemetría pudimos recuperar solo el componente del loader (SHA-1: E2B0851E2E281CC7BCA3D6D9B2FA0C4B7AC5A02B). También encontramos un loader muy similar en VirusTotal (SHA-1: BB2F5B573AC7A761015DAAD0B7FF03B294DC60F) que nos permitió encontrar los componentes faltantes, incluido SparrowDoor.

El backdoor SparrowDoor

Loader

SparrowDoor es cargado inicialmente a través de una DLL mediante una técnica llamada DLL search order hijacking, que permiten manipular las solicitudes de búsqueda para la carga de DLL. Para ello se vale de tres elementos: un ejecutable legítimo de K7 Computing Indexer.exe) utilizado como host para el secuestro de DLL, una DLL maliciosa (K7UI.dll) y un shellcode cifrado (MpSvc.dll) . Todos estos elementos son alojados en %PROGRAMDATA%\Software\. Puede asumirse que el argumento utilizado en la línea de comando junto a la ejecución inicial de SparrowDoor, para configurar la persistencia, no es más que -i, -k-d (las funcionalidades de estos tres argumentos se explican a continuación). Una vez configurada la persistencia, SparrowDoor se ejecuta con el argumento de línea de comando -i. Consulte la Imagen 2 para obtener una breve descripción del proceso de carga inicial. Si desea ver con más detalle el proceso de carga, ¡continúe leyendo!

Figure 2. SparrowDoor staging

Imagen 2. SparrowDoor en acción

El ejecutable legítimo,Indexer.exe, requiere la biblioteca K7UI.dll para funcionar. Por lo tanto, el sistema operativo busca el archivo DLL en directorios prescritos en la orden de carga. Dado que el directorio donde se almacena el archivo Indexer.exe tiene la máxima prioridad en el orden de carga, está expuesto al DLL search order hijacking. Y así es exactamente como el malware es cargado. Indexer.exe carga el K7UI.dll malicioso, acto seguido parchea el código en Indexer.exe  (desde call WinMain a jmp K7UI.0x100010D0 ) y luego vuelve a Indexer.exe. Como resultado de esto, Indexer.exe termina ejecutando una subrutina en K7UI.dll (ubicada en la sección K7UI.dll ) en lugar de llamar a WinMain. Nos referiremos a esta subrutina como launcher (lanzador). La funcionalidad de launcher es cargar MpSvc.dll (el shellcode cifrado) en la memoria desde el directorio que también almacena Indexer.exe, descifrar el contenido y luego ejecutar el shellcode.

El shellcode (MpSvc.dll) se cifra utilizando una clave XOR de cuatro bytes creada a partir de los primeros cuatro bytes del archivo.

El shellcode MpSvc.dll carga varias bibliotecas responsables de construir una estructura de PE y ubica las direcciones de las funciones que serán utilizadas. Después de eso, asigna memoria RWX y copia varias ubicaciones en el shellcode (para construir la estructura PE). También resuelve las importaciones de varias funciones de diferentes bibliotecas. Finalmente, ejecuta el PE del backdoor recientemente construido desde el punto de entrada. Curiosamente, esta imagen reconstruida del ejecutable no tiene encabezados de PE, como se muestra en la Imagen 2, por lo que el loader ejecuta un backdoor saltando al punto de entrada a un valor de desplazamiento hardcodeado dentro de la memoria asignada.

Figure 3. The PE header is missing in the newly built backdoor from the MpSvc.dll shellcode

Imagen 3. Falta el encabezado de PE en el backdoor recientemente creado desde el shellcode MpSvc.dll

Backdoor

Los argumentos pasados ​​al backdoor son heredados de los argumentos pasados ​​a Indexer.exe, o a cualquier otro binario que obtenga el shellcode/backdoor inyectado. Las tareas realizadas por el backdoor después de que se especifica un argumento se muestran en la Tabla 1.

Tabla 1. Acciones realizadas según los argumentos de línea de comando proporcionados a SparrowDoor

Argument Action
No argument or not matching the following Persistence is set through the registry Run key and a service, which is created and started using the configuration data (described in the next section) hardcoded in the binary. Finally, the backdoor is restarted with the -i switch.
-i The backdoor is restarted with the -k switch.
-k The backdoor interpreter (described later) is called with a kill switch.
-d The backdoor interpreter is called without a kill switch.

Nota:

  1. El kill switch le da al backdoor el privilegio de desinstalar o reiniciar SparrowDoor.
  2. El interpreter del backdoor es llamado independientemente del argumento utilizado porque siempre terminará con un argumento -k o -d.

Datos de configuración

La configuración se encuentra en el binario y es descifrada utilizando la clave XOR multibyte ^&32yUgf. La configuración tiene el siguiente formato:

struct config
{
     char domain[64];
     char user [64];
     char pass[64];
     char ip[64];
     char port[2];
     char serviceName[64];
     char serviceDisplayName[128];
     char serviceDescription[128];
};

Los valores descifrados se muestran en la Tabla 2.

Tabla 2. Los pares key-value de la configuración junto con una descripción de su propósito

Key Value Purpose
domain credits.offices-analytics[.]com C&C server domain
user user Proxy settings used to connect to C&C server
pass pass #rowspan#
ip 127.1.1.1 #rowspan#
port 8080 #rowspan#
serviceName WSearchIndex Information used for creating a service to set up persistence. Also, note that the serviceName is used as the value name under the Run key in the registry
serviceDisplayName Windows Search Index #rowspan#
serviceDescription Provides content indexing, property caching, and search results for files, e-mail, and other content. #rowspan#

Las conexiones pueden ser a través de un proxy o no, y se conectan al servidor de C&C a través del puerto 443 (HTTPS). Por lo tanto, la comunicación debe ser cifrada mediante TLS. Durante el primer intento de contacto con el servidor de C&C, SparrowDoor comprueba si se puede establecer una conexión sin utilizar un proxy y, si no puede, los datos son enviados a través de un proxy. Todos los datos salientes se cifran con la clave XOR hH7@83#mi y todos los datos entrantes se descifran con la clave XOR h*^4hFa. Los datos tienen una estructura que comienza con un ID de comando, seguida por la longitud de los datos cifrados subsiguientes, seguida por los datos cifrados.

La Imagen 4 muestra un ejemplo de cómo se envían los datos al servidor C&C (en este caso, se envía información del sistema), mientras que la Imagen 5 muestra la forma de texto sin formato de los datos del mismo payload.

Figure 4. A Wireshark dump showing the data POSTed by the backdoor

Imagen 4. Un volcado de Wireshark que muestra los datos publicados por el backdoor

Figure 5. The decrypted data containing system information

Imagen 5. Datos descifrados que contienen información del sistema

En este caso, la dirección IP local de las víctimas se puede convertir a decimal, dando 192.168.42.1.

El ID de sesión es el ID de sesión para los servicios de escritorio remoto asociado con el proceso de backdoor, y se encuentra mediante la llamada a la API de Windows ProcessIdToSessionId.

El systemInfoHash se calcula mediante el algoritmo de hash sdbm , utilizando el nombre de usuario, el nombre de la computadora, las direcciones de host y el ID de sesión.

Función intérprete del backdoor

La escalada de privilegios se realiza a través de esta función ajustando el token de acceso del proceso SparrowDoor para habilitar SeDebugPrivilege. Después de eso, la función shutdown (Ws2_32.dll) es parcheada para evitar la desactivación de envíos y recepciones en un socket y la función closesocket (Ws2_32.dll) es parcheada para habilitar que la opción DONT_LINGER primero cierre el socket sin esperar a que los datos pendientes sean enviados o recibidos. Finalmente, la información del sistema es enviada al servidor de C&C (como se observa en las Imágenes 4 y 5 previas) para recibir nuevamente los datos como devolución.

Según el campo ID de comando en los datos recibidos del de servidor C&C, el badkdoor puede realizar diferentes acciones maliciosas que a continuación se detallan en la Tabla 3.

Tabla 3. Acciones realizadas por SparrowDoor cuando se reciben los correspondientes ID de comando

Command ID Action
0x1C615632 The current process is closed.
0x1DE15F35 A child svchost.exe process is spawned with processToken information of the process (Process ID) specified by the C&C server, with argument -d and then the shellcode is injected into the process.
0x1A6B561A A directory is created using the name provided by the C&C server.
0x18695638 A file is renamed. Both the file to be renamed and the new name are provided by the C&C server.
0x196A5629 A file is deleted, as specified in the incoming data.
0x17685647 If length of the data is 1, and the data matches $, then the length of systemInfoHash along with an array of drive types are sent.

If length of the data is greater than 2 and the first 2 bytes of data match $\, then information about the files in a specified directory is sent. The information included is the following: file attributes, file size and file write time.

0x15665665 A new thread is created to exfiltrate the content of a specified file.
0x16675656 If the kill switch is activated, the current persistence settings (registry and service) are removed and the Indexer.exe file is executed (to restart the dropper). If not, the backdoor loop is restarted.
0x14655674 A new thread is created to write the data to a specified file.
0x12635692 If the kill switch is activated, the persistence settings are removed, and all the files used by SparrowDoor (Indexer.exe, K7UI.dll and MpSvc.dll) are removed. If not, the backdoor loop is restarted.
0x13645683 If the data matches "switch ”, then the backdoor is restarted with the -d switch.

If not, it spawns a cmd.exe shell, and sets up named pipes for input and output (used by the C&C server) to establish an interactive reverse shell.

If the data matches Exit\r\n, then the spawned shell is terminated.

Other Restarts the backdoor loop.

Conclusión

FamousSparrow es otro grupo de APT que a principios de marzo de 2021 tuvo acceso a la vulnerabilidad de ejecución remota de código conocida como ProxyLogon. El grupo tiene un historial aprovechando vulnerabilidades conocidas en aplicaciones de servidor como SharePoint y Oracle Opera. Este es otro recordatorio de lo fundamental que es parchear rápidamente aquellas aplicaciones a las que se puede acceder desde Internet, y que si no es posible hacerlo rápidamente, intentar no exponerlas a Internet.

Las víctimas, que incluyen a gobiernos de todo el mundo, sugieren que la intención de FamousSparrow es el espionaje. Hemos destacado algunos vínculos SparklingGoblin y DRBControl, pero no consideramos que estos grupos sean lo mismo.

En nuestro repositorio de GitHub puede encontrarse una lista completa de los Indicadores de Compromiso (IoC) y algunas muestras.

Por cualquier consulta o para enviar nuevas muestras relacionadas con el tema, escríbanos a threatintel@eset.com.

Indicadores de Compromiso

ACTUALIZACIÓN: (13 de octubre de 2021): La dirección IP 45.192.178[.]206 fue eliminada de los Indicadores de Compromiso. Fue un error de nuestra parte.

SHA-1 Filename ESET detection name Description
B9601E60F87545441BF8579B2F62668C56507F4A p64.exe
debug.log
Win64/Riskware.Mimikatz.H Mimikatz
4DF896624695EA2780552E9EA3C40661DC84EFC8 p64.exe
debug.log
Win64/Riskware.Mimikatz.H Mimikatz
76C430B55F180A85F4E1A1E40E4A2EA37DB97599 dump.exe Win64/Kryptik.BSQ Lsass dumper
873F98CAF234C3A8A9DB18343DAD7B42117E85D4 nbtscan.exe Win32/NetTool.Nbtscan.A Nbtscan
FDC44057E87D7C350E6DF84BB72541236A770BA2 1.cab Win32/FamousSparrow.A Dropper
C36ECD2E0F38294E1290F4B9B36F602167E33614 Indexer.exe - Legitimate K7 Computing binary
BB2F5B573AC7A761015DAAD0B7FF03B294DC60F6 K7UI.dll Win32/FamousSparrow.A Loader
23E228D5603B4802398B2E7419187AEF71FF9DD5 MpSvc.dll Encrypted shellcode
2560B7E28B322BB7A56D0B1DA1B2652E1EFE76EA - - Decrypted shellcode
E2B0851E2E281CC7BCA3D6D9B2FA0C4B7AC5A02B K7UI.dll Win32/FamousSparrow.B Loader

Domain IP address Comment
credits.offices-analytics[.]com - SparrowDoor C&C server
- 27.102.113[.]240 Delivery domain

Técnicas de MITRE ATT&CK

Esta tabla fue creada utilizando la versión 9 del framework de MITRE ATT&CK.

Tactic ID Name Description
Resource Development T1588.005 Obtain Capabilities: Exploits FamousSparrow used RCE vulnerabilities against Microsoft Exchange, SharePoint and Oracle Opera.
T1583.001 Acquire Infrastructure: Domains FamousSparrow purchased a domain at Hosting Concepts.
T1583.004 Acquire Infrastructure: Server FamousSparrow rented servers at Shanghai Ruisu Network Technology and DAOU TECHNOLOGY.
Initial Access T1190 Exploit Public-Facing Application FamousSparrow used RCE vulnerabilities against Microsoft Exchange, SharePoint and Oracle Opera.
Execution T1059.003 Command and Scripting Interpreter: Windows Command Shell FamousSparrow used cmd.exe to run commands to download and install SparrowDoor.
T1203 Exploitation for Client Execution FamousSparrow used RCE vulnerabilities in Microsoft Exchange, SharePoint and Oracle Opera to install SparrowDoor.
Persistence T1547.001 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder SparrowDoor achieves persistence through the HKCU Run registry value WSearchIndex = \Indexer.exe -i registry entry.
T1543.003 Create or Modify System Process: Windows Service FamousSparrow installs SparrowDoor as a service named WSearchIndex.
T1574.001 Hijack Execution Flow: DLL Search Order Hijacking FamousSparrow loads the malicious K7UI.dll through DLL search order hijacking.
Defense Evasion T1055.001 Process Injection: Dynamic-link Library Injection MpSvc.dll (shellcode) is injected into processes by SparrowDoor.
T1134.002 Access Token Manipulation: Create Process with Token SparrowDoor creates processes with tokens of processes specified by the C&C server, using the CreateProcessAsUserA API.
T1134 Access Token Manipulation SparrowDoor tries to adjust its token privileges to receive SeDebugPrivilege.
T1027 Obfuscated Files or Information The shellcode, MpSvc.dll, is encrypted using XOR, along with the config embedded within SparrowDoor.
Credentials Access T1003 OS Credential Dumping FamousSparrow makes use of a custom Mimikatz version.
Discovery T1082 System Information Discovery SparrowDoor collects the username, computername, RDP session ID, and drive types in the system and sends this data to the C&C server.
T1083 File and Directory Discovery SparrowDoor can probe files in a specified directory obtaining their names, attributes, sizes and last modified times, and sends this data to the C&C server.
Collection T1005 Data from Local System SparrowDoor has the ability to read file contents and exfiltrate them to the C&C server.
Command and Control T1071.001 Application Layer Protocol: Web Protocols SparrowDoor communicates with the C&C server using the HTTPS protocol.
T1573.001 Encrypted Channel: Symmetric Cryptography SparrowDoor encrypts/decrypts communications with its C&C server using different multi-byte XOR keys.
Exfiltration T1041 Exfiltration Over C2 Channel SparrowDoor exfiltrates data over its C&C channel.