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.
A diferença entre o hpqhvind.exe original e o parcheado pode ser vista na Figura 2.
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.
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.
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. |