Em novembro de 2019, descobrimos uma nova campanha do Grupo Winnti que tem como alvo duas universidades em Hong Kong. Desta vez, os atacantes usam uma nova variante do ShadowPad, o principal backdoor do grupo, que foi implantada usando um novo launcher e incorporando vários módulos. Além disso, o malware Winnti também foi encontrado nessas universidades algumas semanas antes do ShadowPad.

O Grupo Winnti, ativo desde pelo menos 2012, é responsável por ataques a indústrias como a de videogames e a de software, através da propagação de softwares trojanizados (como CCleaner, ASUS LiveUpdate e diversos jogos) com o objetivo de atingir mais vítimas. O Grupo também é conhecido por ter atacado vários alvos nos setores de saúde e educação.

Pesquisadores da ESET publicaram recentemente um white paper com informações atualizadas sobre o arsenal de ferramentas usadas pelo Grupo Winnti, seguido pela publicação de um artigo que destaca um ataque à cadeia de suprimentos voltado para a indústria de videogames na Ásia. Além disso, publicamos um artigo sobre um novo backdoor chamado skip-2.0 que é direcionado aos Servidores SQL da Microsoft.

Este artigo está enfocado nos detalhes técnicos desta nova variante conhecida como ShadowPad.


Sobre o uso do nome "Grupo Winnti":
Optamos por manter o nome “Grupo Winnti”, já que foi usado pela Kaspersky para identificá-lo em 2013. Como o Winnti também é uma família de malware, sempre escrevemos “Grupo Winnti” quando nos referimos aos cibercriminosos por trás dos ataques. Desde 2013, o Winnti demonstrou ser apenas uma das muitas famílias de malware usadas pelo Grupo Winnti.

ShadowPad foi encontrado em várias universidades de Hong Kong

Em novembro de 2019, o mecanismo de aprendizagem automática da ESET, Augur, detectou uma amostra maliciosa e única presente em vários computadores pertencentes a duas universidades em Hong Kong, na qual o malware Winnti já havia sido encontrado no final de outubro. A amostra suspeita detectada pelo Augur é na verdade um novo launcher do ShadowPad de 32 bits. As amostras do backdoor ShadowPad e do malware Winnti encontradas nessas universidades contêm identificadores da campanha e URLs de C&C que contêm os nomes das universidades, demonstrando que se trata de um ataque direcionado.

Além das duas universidades atacadas, graças ao formato da URL de C&C usada pelos atacantes, temos motivos para pensar que pelo menos outras três universidades em Hong Kong podem estar comprometidas com essas mesmas variantes do backdoor ShadowPad e do malware Winnti.

Esta campanha do Grupo Winnti contra as universidades de Hong Kong estava ocorrendo no contexto dos protestos cívicos de Hong Kong que começaram em junho de 2019 e que foram desencadeados por um projeto de lei de extradição. Embora o projeto de lei tenha sido retirado em setembro de 2019, os protestos continuaram - as pessoas exigiam mais democracia e investigação da polícia de Hong Kong. Esses protestos reuniram centenas de milhares de pessoas nas ruas, com grande apoio de estudantes das universidades de Hong Kong, o que levou a várias ocupações do campus da universidade por manifestantes.

Antes de apresentar os detalhes técnicos dessa campanha, vale mencionar que entramos em contato com as universidades atacadas e fornecemos as informações e assistência necessárias para remediar o ataque.

Launcher atualizado

Diferentemente das variantes anteriores do ShadowPad documentadas em nosso white paper sobre o arsenal de ferramentas do Grupo Winnti, este launcher não é ofuscado pelo VMProtect. Além disso, o payload criptografado não é incorporado na sobreposição (overlay) ou localizadao em um fluxo de dados alternativo COM1: NULL.dat. E a criptografia RC5 usual com uma chave derivada do ID do volume da unidade do sistema da máquina vítima (como se pode ver no backdoor do PortReuse, skip-2.0 e em algumas variantes do ShadowPad) também não está presente. Neste caso, o launcher é muito mais simples.

DLL de carregamento lateral

O launcher é uma DLL de 32 bits chamada hpqhvsei.dll, que é o nome de uma DLL legítima carregada pelo hpqhvind.exe. Este executável é da HP e geralmente é instalado com seu software de impressão e digitalização chamado “HP Digital Imaging”. Neste caso, os atacantes colocaram o hpqhvind.exe legítimo, juntamente com o hpqhvsei.dll malicioso, em C:\Windows\Temp.

Embora não tenhamos o componente que droppeou e executou esse launcher, a presença desses arquivos nos leva a pensar que a execução inicial desse launcher é feita através do carregamento lateral de DLL. 

Quando a DLL maliciosa é carregada no início do hpqhvind.exe, sua função DLLMain é chamada e verifica o processo pai para a seguinte sequência de bytes no deslocamento 0x10BA:

85 C0 ; test eax, eax
0F 84 ; jz

Caso o processo pai seja hpqhvind.exe e a DLL maliciosa continue corrigindo o processo pai na memória, a ameaça substitui as instruções originais em 0x10BA por um salto incondicional (jmp - 0xE9) no endereço da função hpqhvsei.dll que descriptografa e executa o payload criptografado incorporado no launcher.

A função descompilada responsável por parchear o processo pai pode ser vista na Figura 1. No caso do hpqhvsei.dll ser carregado por um processo diferente do hpqhvind.exe, o código malicioso não será descriptografado ou executado.

Figura 1. Função descompilada responsável pelo patch do processo pai.

A diferença entre o hpqhvind.exe original e o parcheado pode ser vista na Figura 2.

Figura 2. Diferença entre o hpqhvind.exe original (à esquerda) e o patcheado (à direita).

A parte do código parcheada está no início da função principal do hpqhvind.exe. Como podemos ver na Figura 2, o código parcheado é encontrado logo após o carregamento do hpqhvsei.dll. Isso significa que a função responsável por descriptografar e executar o payload é executada diretamente após o carregamento da DLL maliciosa.

Descriptografia do payload

O payload criptografado é encontrado na seção .pdata do hpqhvsei.dll e o algoritmo de descriptografia é um loop XOR em que a chave XOR é atualizada a cada iteração, como se pode ver na Figura 3.

Figura 3. Pseudocódigo do loop de descriptografia do payload.

O payload descriptografado é o shellcode responsável pela inicialização do ShadowPad (ofuscado usando saltos condicionais falsos para dificultar a desmontagem).

Persistência

Depois de descriptografado, o shellcode do ShadowPad é executado. Primeiro, ele obterá persistência no sistema ao gravar o processo pai corrigido na memória do disco em um caminho especificado no conjunto de strings de configuração. No caso que examinamos, o caminho era C:\ProgramData\DRM\CLR\CLR.exe. Em seguida, ele cria um serviço chamado clr_optimization_v4.0.30229_32, responsável pela execução do CLR.exe. Para evitar suspeitas, o nome desse serviço, bem como o nome do executável, foram escolhidos para se parecer com o nome de um Serviço de otimização do Microsoft.NET.

O processo completo de apresentação está resumido na Figura 4. A numeração em cada seta corresponde à sequência cronológica dos eventos.

Figura 4. Processo de apresentação do ShadowPad.

Módulos

O ShadowPad é um backdoor multimodular no qual os módulos são referenciados no módulo Root com uma lista circular da qual é possível extrair o endereço do módulo, uma marca de tempo UNIX (provavelmente incorporada automaticamente durante o processo de compilação do módulo) e um identificador do módulo. Do próprio módulo, também podemos extrair o nome que o desenvolvedor deu ao módulo. Esta versão incorpora os 17 módulos listados na tabela a seguir:

Tabela 1. Módulos usados ​​com esta versão do ShadowPad.

ID Name Timestamp Description
100 Root Thu 24 Oct 2019 12:08:27 PM UTC Initial shellcode
101 Plugins Thu 24 Oct 2019 12:07:02 PM UTC Provides API for the other modules; loads modules  
102 Config Thu 24 Oct 2019 12:07:09 PM UTC Handles encrypted configuration string pool
103 Install Thu 24 Oct 2019 12:07:46 PM UTC Achieves persistence
104 Online Thu 24 Oct 2019 12:07:17 PM UTC Overall communications with the C&C server
106 ImpUser Thu 24 Oct 2019 12:07:24 PM UTC User impersonation via token duplication
200 TCP Thu 24 Oct 2019 12:01:01 PM UTC TCP communications
202 HTTPS Thu 24 Oct 2019 12:01:15 PM UTC HTTPS communications
207 Pipe Thu 24 Oct 2019 12:01:35 PM UTC Handles named pipes
300 Disk Thu 24 Oct 2019 12:02:29 PM UTC File system operations
301 Process Thu 24 Oct 2019 12:02:36 PM UTC Process handling
302 Servcie Thu 24 Oct 2019 12:02:45 PM UTC Service handling
303 Register Thu 24 Oct 2019 12:02:52 PM UTC Registry operations
304 Shell Thu 24 Oct 2019 12:03:00 PM UTC Command line operations
306 Keylogger Thu 24 Oct 2019 12:03:16 PM UTC Keylogging to file system
307 Screen Thu 24 Oct 2019 12:03:25 PM UTC Screenshot capture
317 RecentFiles Thu 24 Oct 2019 12:04:44 PM UTC Lists recently accessed files

Esses módulos, com exceção dos RecentFiles, já foram mencionados pela Kaspersky e Avast. Observe o erro de digitação em "Servcie".

Como sempre, todos as marcas de tempo do módulo são distribuídas em um curto espaço de tempo, o que poderia sugerir o uso de um framework para compilar esses módulos. Isso também sugere que esses módulos foram criados algumas horas antes do próprio launcher, cuja marca de tempo de compilação é Thu Oct 24 14:10:32 2019 (quinta-feira, 24 de outubro 14:10:32 2019). Como essa marca de tempo de compilação corresponde a duas semanas antes desta campanha, é provável que os atacantes não a tenham manipulado.

Observe também que o número de módulos incorporados nessa variante é muito maior (17) do que o número de módulos incorporados nas variantes documentadas anteriormente em nosso white paper (8 a 10 módulos).

Por padrão, cada pressionamento de tecla é registrado usando o módulo Keylogger (306, anteriormente documentado pela Avast) e é salvo no disco no arquivo %APPDATA%\PAGM\OEY\XWWEYG\WAOUE.

O arquivo de log é criptografado usando o mesmo algoritmo para criptografar cadeias estáticas do módulo. O uso deste módulo por padrão indica que os atacantes estão interessados ​​em roubar informações das máquinas das vítimas. Pelo contrário, as variantes que descrevemos em nosso white paper nem sequer tinham esse módulo incorporado.

Configuração

Como nas variantes anteriores do ShadowPad, o módulo de configuração (102) contém um pool de cadeias criptografadas que pode ser acessado a partir de qualquer outro módulo. O pool de strings nunca é armazenado completamente descriptografado na memória - o campo de interesse é descriptografado quando necessário e liberado imediatamente (fica rapidamente indisponível). O tamanho da configuração é de 2180 bytes e as cadeias criptografadas ficam na posição 0x84. O algoritmo usado para descriptografar as strings é o mesmo usado para descriptografar as strings estáticas do módulo. O conteúdo descriptografado do pool de strings é o seguinte:

0x84: 2019/11/7 16:28:36
0x99: CAMPAIGN_ID_REDACTED
0xa1: %ALLUSERSPROFILE%\DRM\CLR\CLR.exe
0xc5: clr_optimization_v4.0.30229_32
oxe6: clr_optimization_v4.0.30229_32
0x107: clr_optimization_v4.0.30229_32
0x128: SOFTWARE\Microsoft\Windows\CurrentVersion\Run
0x158: CLR
0x15e: %ProgramFiles%\Windows Media Player\wmplayer.exe
0x197: %windir%\system32\svchost.exe
0x1b7: TCP://b[redacted].dnslookup.services:443
0x1db: UDP://b[redacted].dnslookup.services:443
0x202: SOCKS4
0x21e: SOCKS5

O ID da campanha é encontrado no ponto 0x99 e é o nome da universidade segmentada. Ter uma ID de campanha relacionada ao destino segmentado é bastante comum no caso do ShadowPad e do Winnti.

Curiosamente, a marca de tempo presente nesta configuração no ponto 0x84 é posterior as marcas de tempo dos módulos e a marca de tempo de compilação do loader. Isso sugere que essa configuração é adicionada manualmente à amostra após sua compilação. Embora seja provavelmente uma coincidência, a data na configuração corresponde à data da primeira detecção desta amostra na universidade correspondente.

Comunicação de rede

Uma vez instalado no sistema, o ShadowPad inicia um processo wmplayer.exe do Microsoft Windows Media Player e é injetado nesse processo. O caminho para wmplayer.exe é fornecido pelo módulo de configuração.

Depois que o ShadowPad é injetado no wmplayer.exe, o módulo online entrará em contato com o servidor C&C usando a URL especificada na configuração. Em seguida, começará a ouvir as conexões na porta 13567 depois de atualizar as regras do firewall correspondente:

Chave de registro:
HKLM\SYSTEM\ControlSet001\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\{816381AB-1400-45E5-B560-B8E11C5988CF}

Valor:
v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=6|Profile=Public|LPort=13567|Name=Network Discovery (TCP)|

A comunicação é tratada pelo módulo TCP (200), que foi documentado anteriormente pela Kaspersky.

O malware Winnti também estava lá

Além do ShadowPad, o malware Winnti foi encontrado em algumas máquinas dessas duas universidades no final de outubro (ou seja, duas semanas antes do ShadowPad) no arquivo C:\Windows\System32\oci.dll e é detectado pelos produtos da ESET como Win64/Winnti.CA.

O malware Winnti geralmente contém uma configuração que especifica um ID de campanha e uma URL do C&C. Em todas as máquinas, o ID da campanha corresponde ao nome da universidade alvo e as URLs do C&C são:

  • w[redacted].livehost.live:443
  • w[redacted].dnslookup.services:443

O campo "redacteed" corresponde ao nome da universidade alvo.

Formato da URL do C&C

Pode-se observar que a URL do C&C usada pelo Winnti e pelo backdoor ShadowPad está em conformidade com o esquema [backdoor_type] [target_name] .domain.tld: 443 em que [backdoor_type] é uma única letra que é "w" no caso do malware Winnti ou "b" no caso do ShadowPad.

Nesse formato, conseguimos encontrar várias URLs do C&C, incluindo outros três nomes de universidades de Hong Kong. Os identificadores de campanha encontrados nas amostras que analisamos coincidem com a parte do subdomínio do servidor C&C, o que garante que essas amostras foram realmente direcionadas para essas universidades.

Conclusão

O Grupo Winnti ainda está usando ativamente o ShadowPad, um de seus principais backdoors. Desta vez, contra as universidades de Hong Kong. Nesta campanha, o launcher VMProtected usado com o ShadowPad, bem como com o backdoor PortReuse e o skip-2.0, foi substituído por um mais simples. O fato dessas amostras, além de terem sido encontradas nessas universidades, conterem IDs de campanha que correspondem aos nomes das universidades e usarem URLs do C&C que contêm os nomes das universidades, são excelentes indícios de que estamos enfrentando uma campanha altamente direcionada.

Continuaremos monitorando novas atividades do Grupo Winnti e publicaremos informações relevantes no WeLiveSecurity. Em caso de dúvidas, entre em contato conosco através do seguinte e-mail ameaintel@eset.com.

Indicadores de Comprometimento (IoCs)

Nomes de detecção da ESET

Win32/Shadowpad.C trojan
Win64/Winnti.CA trojan

Nomes de arquivos

%ALLUSERSPROFILE%\DRM\CLR\hpqhvsei.dll
%ALLUSERSPROFILE%\DRM\CLR\CLR.exe
C:\windows\temp\hpqhvsei.dll
C:\windows\temp\hpqhvind.exe
%ALLUSERSPROFILE%\DRM\CLR\hpqhvsei.dll
%SYSTEM32%\oci.dll
%APPDATA%\PAGM\OEY\XWWEYG\WAOUE

Nome do serviço

clr_optimization_v4.0.30229_32

Servidores C&C

b[org_name].dnslookup[.]services:443
w[org_name].livehost[.]live:443
w[org_name].dnslookup[.]services:443

Launcher ShadowPad

Amostra semelhante para evitar a divulgação de universidades alvo.
693f0bd265e7a68b5b98f411ecf1cd3fed3c84af

Técnicas de MITRE ATT&CK

Tactic ID    Name Description
Persistence T1050 New Service ShadowPad persists as a service called clr_optimization_v4.0.30229_32.
Defense Evasion T1073 DLL Side-Loading ShadowPad’s launcher is loaded by a legitimate executable via DLL side-loading.
T1055 Process Injection ShadowPad is injected into a wmplayer.exe process.
T1140 Deobfuscate/Decode Files or Information ShadowPad launcher uses XOR to decrypt the payload. ShadowPad uses a custom algorithm to decrypt strings and configuration.
T1027 Obfuscated Files or Information ShadowPad shellcode is XOR-encoded and uses fake conditional jumps to hinder disassembly. ShadowPad’s strings and configuration are encrypted. It also uses API hashing.
T1143 Hidden Window ShadowPad is injected into a wmplayer.exe process started in a hidden window.
Discovery T1010 Application Window Discovery ShadowPad’s keylogging module lists application windows.
T1083 File and Directory Discovery ShadowPad’s RecentFiles module lists files recently accessed.
Command and Control T1071 Standard Application Layer Protocol ShadowPad can use HTTP and HTTPS for C&C communications.
T1043 Commonly Used Port ShadowPad uses TCP:443 and UDP:443.
T1065 Uncommonly Used Port ShadowPad listens on port 13567.
T1095 Standard Non-Application Layer Protocol ShadowPad can use UDP and TCP for C&C communications.
T1024 Custom Cryptographic Protocol ShadowPad uses its own cryptographic protocol for C&C communications.
Collection T1056 Input Capture ShadowPad has a keylogging module.
T1113 Screen Capture ShadowPad has a screenshot module.
Exfiltration T1022 Data Encrypted Keystrokes recorded by the keylogging module are stored encrypted on disk.