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

Figure 1. Geographic distribution of FamousSparrow targets

Imagem 1. Distribuição geográfica das vítimas do FamousSparrow.

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!

Figure 2. SparrowDoor staging

Imagem 2. O SparrowDoor em ação.

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.

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

Imagem 3. Falta o cabeçalho PE no backdoor recém-criado do shellcode MpSvc.dll.

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:

  1. O kill switch dá ao backdoor o privilégio de desinstalar ou reiniciar o SparrowDoor.
  2. 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.

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

Imagem 4. Um despejo do Wireshark mostrando os dados publicados pelo backdoor.

Figure 5. The decrypted data containing system information

Imagem 5. Dados descriptografados que contém informações do sistema.

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 = \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.