Os pesquisadores da ESET descobriram um novo grupo de espionagem cibernética que tem como alvo hotéis, governos e empresas privadas em todo o mundo. Batizamos esse grupo de FamousSparrow e acreditamos que ele esteja ativo desde pelo menos 2019.
Durante nossa pesquisa, ao revisar os dados de telemetria, descobrimos que o FamousSparrow explorava vulnerabilidades do Microsoft Exchange, conhecidas como ProxyLogon, que descrevemos de forma detalhada em post publicado em março deste ano. É importante destacar que essa vulnerabilidade de execução remota de código também foi usada por mais de 10 grupos APT para assumir o controle dos servidores de e-mail do Exchange em todo o mundo. De acordo com a telemetria da ESET, o FamousSparrow começou a explorar as vulnerabilidades no último dia 3 de março, um dia após o patch ser lançado, portanto, é outro grupo APT que teve acesso ao código da vulnerabilidade ProxyLogon em março de 2021.
Neste post, abordamos a vinculação do FamousSparrow e a vitimologia do grupo. Em seguida, apresentamos uma análise técnica detalhada do principal backdoor do grupo, que chamamos de SparrowDoor.
Explicação sobre a vinculação do grupo
Acreditamos que o grupo FamousSparrow seja atualmente o único usuário do backdoor SparrowDoor (que abordaremos com mais detalhes neste post). O grupo também usa duas versões personalizadas do Mimikatz (veja a seção Indicadores de Comprometimento desta publicação) que podem ser utilizadas para vincular incidentes a esse grupo.
Embora consideremos que o FamousSparrow seja um grupo que funciona de forma independente, encontramos conexões com outros grupos APT bem conhecidos. Em um dos casos analisados, os atacantes implantaram uma variante do Motnug, um loader usado pelo SparklingGoblin. Em outro caso, encontramos um Metasploit que rodava em uma máquina comprometida pelo FamousSparrow usando cdn.kkxx888666[.]com como servidor C&C. Este domínio está relacionado a um grupo conhecido como DRBControl.
Vitimologia
O grupo está ativo desde pelo menos agosto de 2019 e tem direcionado seus ataques principalmente a hotéis em vários países. Além disso, observamos algumas vítimas de outros setores, como órgãos governamentais, organizações internacionais, empresas de engenharia e escritórios de advocacia. Observamos vítimas do FamousSparrow nos seguintes países:
- Brasil
- Burkina faso
- África do Sul
- Canadá
- Israel
- França
- Guatemala
- Lituânia
- Arábia Saudita
- Taiwan
- Tailândia
- Reino Unido
Vetor de comprometimento
Em alguns casos, foi possível observar que o vetor de comprometimento inicial usado pelo FamousSparrow foram aplicativos da web vulneráveis e expostos à internet. Acreditamos que o FamousSparrow explorou vulnerabilidades conhecidas de execução remota de código no Microsoft Exchange (incluindo o ProxyLogon em março de 2021), Microsoft SharePoint e Oracle Opera (um software corporativo para gerenciamento de hotéis). Todas essas vulnerabilidades foram utilizadas para propagar várias amostras maliciosas entre os sistemas comprometidos.
Depois que o servidor é comprometido, os atacantes usam diferentes ferramentas personalizadas:
- Uma variante do Mimikatz
- Um pequeno utilitário que entrega o ProcDump ao disco e o utiliza para despejar o processo lsass, provavelmente para coletar informações confidenciais na memória, como credenciais de login.
- Nbtscan, um scanner da NetBIOS
- Um loader para o backdoor SparrowDoor
Por meio de nossa telemetria, conseguimos recuperar apenas o componente do loader (SHA-1: E2B0851E2E281CC7BCA3D6D9B2FA0C4B7AC5A02B). Também encontramos um loader muito semelhante no VirusTotal (SHA-1: BB2F5B573AC7A761015DAAD0B7FF03B294DC60F) que nos permitiu encontrar os componentes ausentes, incluindo o SparrowDoor.
O backdoor SparrowDoor
Loader
O SparrowDoor é inicialmente carregado por meio de uma DLL através de uma técnica chamada DLL search order hijacking, que permite manipular solicitações de pesquisa para o carregamento da DLL. Para isso, a ameaça usa três elementos: um executável K7 Computing Indexer.exe legítimo) usado como host para o sequestro da DLL, uma DLL maliciosa (K7UI.dll) e um shellcode criptografado (MpSvc.dll). Todos esses elementos são alojados no %PROGRAMDATA%\Software\. É possível supor que o argumento usado na linha de comando junto com a execução inicial do SparrowDoor, para configurar a persistência, nada mais é do que -i, -k ou -d (as funcionalidades desses três argumentos são explicadas a seguir). Depois que a persistência é configurada, o SparrowDoor é executado com o argumento de linha de comando -i. Veja a Imagem 2 e confira uma breve descrição do processo de carregamento inicial. Caso queira entender o processo de carregamento de forma mais detalhada, continue lendo!
O executável legítimo, Indexer.exe, precisa da biblioteca K7UI.dll para funcionar. Portanto, o sistema operacional procura o arquivo DLL nos diretórios prescritos na ordem de carregamento. Como o diretório onde o arquivo Indexer.exe está armazenado tem a prioridade mais alta na ordem de carregamento, ele é exposto à DLL search order hijacking. E é exatamente assim que o malware é carregado. O Indexer.exe carrega o K7UI.dll malicioso, aplica patch ao código no Indexer.exe (de call WinMain para jmp K7UI.0x100010D0) e retorna para o Indexer.exe. Como resultado disso, o Indexer.exe acaba executando uma sub-rotina em K7UI.dll (localizada na seção K7UI.dll) em vez de chamar o WinMain. Nos referimos a essa sub-rotina como launcher. A função do launcher é carregar o MpSvc.dll (o shellcode criptografado) na memória a partir do diretório que também armazena o Indexer.exe, descriptografa o conteúdo e, em seguida, executa o shellcode.
O shellcode (MpSvc.dll) é criptografado usando uma chave XOR de quatro bytes criada a partir dos primeiros quatro bytes do arquivo.
O shellcode MpSvc.dll carrega várias bibliotecas responsáveis por construir uma estrutura PE e localiza os endereços das funções que serão usadas. Depois disso, ele aloca memória RWX e copia vários locais no shellcode (para construir a estrutura PE). Ele também resolve a importação de várias funções de diferentes bibliotecas. Para finalizar, ele executa o PE do backdoor recém-construído a partir do ponto de entrada. Curiosamente, essa imagem reconstruída do executável não tem cabeçalhos PE, como mostrado na Imagem 2, então o loader executa um backdoor saltando para o ponto de entrada para um valor de deslocamento hardcodeado dentro da memória alocada.
Backdoor
Os argumentos ao backdoor são herdados dos argumentos passados para o Indexer.exe ou qualquer outro binário que obtenha o shellcode/backdoor injetado. As tarefas realizadas pelo backdoor após a especificação de um argumento podem ser vistas na Tabela 1.
Tabela 1. Ações realizadas segundo os argumentos de linha de comando fornecidos para o 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:
- O kill switch dá ao backdoor o privilégio de desinstalar ou reiniciar o SparrowDoor.
- O interpretador do backdoor é chamado independentemente do argumento usado porque sempre terminará com um argumento -k ou -d.
Dados de configuração
A configuração se encontra no binário e é descriptografada usando a chave XOR multibyte ^&32yUgf. A configuração tem o seguinte 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];
};
Os valores descriptografados são apresentados na Tabela 2.
Tabela 2. Os pares key-value de configuração junto com uma descrição de sua finalidade.
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# |
As conexões podem ocorrer por meio de um proxy ou não, e se conectar ao servidor C&C pela porta 443 (HTTPS). Portanto, a comunicação deve ser criptografada usando TLS. Durante a primeira tentativa de contato com o servidor C&C, o SparrowDoor verifica se é possível estabelecer uma conexão sem usar um proxy e, se caso não seja possível, os dados são enviados por meio de um proxy. Todos os dados de saída são criptografados com a chave XOR hH7@83#mi e todos os dados de entrada são descriptografados com a chave XOR h*^4hFa. Os dados têm uma estrutura que começa com uma ID de comando, seguida pelo comprimento dos dados criptografados subsequentes, seguida pelos dados criptografados.
A imagem 4 apresenta um exemplo de como os dados são enviados ao servidor C&C (neste caso, as informações do sistema são enviadas), enquanto a imagem 5 apresenta a forma de texto simples dos dados do mesmo payload.
Nesse caso, o endereço IP local das vítimas pode ser convertido em decimal, fornecendo 192.168.42.1.
O ID de login é o ID de sessão para os serviços de área de trabalho remota associados ao processo do backdoor e é encontrado chamando o Windows API ProcessIdToSessionId.
O systemInfoHash é calculado por meio do algoritmo de hashing sdbm, usando o nome de usuário, nome do computador, endereços de host e ID de login.
Função intérprete do backdoor
O escalonamento de privilégios é feito por meio dessa função, ajustando o token de acesso do processo SparrowDoor para habilitar o SeDebugPrivilege. Depois disso, a função shutdown (Ws2_32.dll) é corrigida para evitar a desabilitação de envio e recebimento em um socket e a função closesocket (Ws2_32.dll) é corrigida para habilitar a opção DONT_LINGER para primeiro fechar o socket sem esperar que os dados pendentes sejam enviados ou recebidos. Por fim, as informações do sistema são enviadas para o servidor C&C (como pode ser visto nas Imagens 4 e 5) para receber os dados novamente como retorno.
De acordo com o campo ID de comando nos dados recebidos do servidor C&C, o badkdoor pode realizar diferentes ações maliciosas que podem ser conferidas de forma detalhada na Tabela 3.
Tabela 3. Ações realizadas pelo SparrowDoor quando os IDs de comando correspondentes são recebidos.
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. |
Conclusão
O FamousSparrow é outro grupo APT que, no início de março de 2021, teve acesso à vulnerabilidade de execução remota de código conhecida como ProxyLogon. O grupo tem um histórico de exploração de vulnerabilidades conhecidas em aplicativos de servidor, como o SharePoint e o Oracle Opera. Este é outro lembrete de como é essencial corrigir rapidamente os aplicativos que podem ser acessados pela Internet e que, caso não seja possível fazer isso rapidamente, tente não os expor à Internet.
As vítimas, que incluem governos de todo o mundo, sugerem que a intenção do FamousSparrow é a espionagem. Destacamos alguns vínculos com o SparklingGoblin e o DRBControl, mas não consideramos esses grupos tenham a mesma atuação.
Uma lista completa de Indicadores de Compromisso (IoC) e alguns exemplos podem ser encontrados em nosso repositório GitHub.
Em caso de dúvidas ou para enviar novas amostras relacionadas ao assunto, envie um e-mail para threatintel@eset.com.
Indicadores de Comprometimento
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 do MITRE ATT&CK
Esta tabela foi criada por meio da versão 9 do framework do MITER 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. |