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
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 o -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!
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.
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:
- El kill switch le da al backdoor el privilegio de desinstalar o reiniciar SparrowDoor.
- 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.
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 = |
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. |