# T1055.015 - ListPlanting
> [!info] Técnica Pai
> Esta é uma sub-técnica de [[t1055-process-injection|T1055 - Process Injection]], que agrupa todos os métodos de injeção de código em processos legítimos para evasão de defesas.
## Descrição
**ListPlanting** é uma sub-técnica de [[t1055-process-injection|injeção de processo]] que abusa de controles de interface gráfica do Windows - específicamente a classe de jánela `SysListView32` (controles de lista) - para injetar e executar shellcode arbitrário no espaço de endereçamento de um processo legítimo. A técnica é classificada como um ataque de "shatter attack" via message-passing, contornando APIs altamente monitoradas como `WriteProcessMemory`.
O mecanismo central consiste em três fases:
1. **Localização do alvo**: o adversário identifica um processo que possui uma jánela do tipo `SysListView32` (lista de itens) - presente em exploradores de arquivos, gerenciadores de tarefas, browsers, e dezenas de aplicações nativas do Windows.
2. **Escrita de payload**: em vez de usar `WriteProcessMemory` (que gera telemetria em EDRs), o adversário copia o payload 2 bytes por vez usando mensagens de jánela `LVM_SETITEMPOSITION` e `LVM_GETITEMPOSITION` via `PostMessage()` / `SendMessage()`.
3. **Execução via callback de ordenação**: o payload é disparado enviando a mensagem `LVM_SORTITEMS` ao controle `SysListView32`, que chama o ponteiro de função fornecido como callback `ListView_SortItems` - executando o shellcode sob o contexto do processo legítimo.
O resultado é que o código malicioso roda mascarado como um processo Windows legítimo (ex: `explorer.exe`, `taskhostw.exe`), tornando a detecção consideravelmente mais difícil para ferramentas baseadas em análise de processos.
> [!warning] Por que é relevante
> ListPlanting evita a chamada `WriteProcessMemory` - um dos principais indicadores monitorados por EDRs modernos. A injeção via mensagens de jánela (`SendMessage`/`PostMessage`) não aciona os mesmos alertas, tornando a técnica especialmente eficaz contra soluções de segurança que dependem de hooking de API.
---
## Como Funciona
A sequência completa de execução do ListPlanting envolve as seguintes chamadas de API do Windows:
### 1. Descoberta do processo e jánela alvo
```
FindWindow("SysListView32", NULL)
EnumWindows(callback, 0)
GetWindowThreadProcessId(hwnd, &dwPID)
OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)
```
O adversário busca por qualquer jánela com a classe `SysListView32` - presente em práticamente qualquer jánela Explorer, painel de controle ou aplicação com lista de itens.
### 2. Alocação de memória no processo alvo
```
VirtualAllocEx(hProcess, NULL, shellcodeSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
```
Uma região executável é alocada no espaço de memória do processo-alvo.
### 3. Escrita do payload via mensagens (evasão de WriteProcessMemory)
Em variações mais sofisticadas, o payload é escrito usando `LVM_SETITEMPOSITION` (que carrega 2 bytes de coordenadas x/y) e depois lido de volta com `LVM_GETITEMPOSITION`. Isso evita completamente a chamada `WriteProcessMemory`:
```
SendMessage(hwndListView, LVM_SETITEMPOSITION, index, MAKELPARAM(x, y))
SendMessage(hwndListView, LVM_GETITEMPOSITION, index, (LPARAM)&point)
```
### 4. Disparo via callback de ordenação
O shellcode é executado ao enviar `LVM_SORTITEMS`, passando o endereço da memória alocada como ponteiro de função de callback:
```
SendMessage(hwndListView, LVM_SORTITEMS, (WPARAM)lpData, (LPARAM)shellcodeAddr)
```
O sistema operacional chama `shellcodeAddr(item1, item2, lpData)` - executando o payload diretamente no contexto do processo legítimo.
### Variações conhecidas
| Variante | Método de escrita | Método de execução |
|----------|-----------------|-------------------|
| Clássico | `WriteProcessMemory` | `LVM_SORTITEMS` callback |
| Stealth (sem WPM) | `LVM_SETITEMPOSITION` × N | `LVM_SORTITEMS` callback |
| Com elevação | Combina com Token Impersonation | `LVM_SORTITEMS` callback |
---
## Attack Flow
```mermaid
graph TB
A([Adversário com acesso inicial]) --> B[Enumerar jánelas abertas<br/>EnumWindows / FindWindow]
B --> C{Existe SysListView32\nacessível?}
C -- Não --> D[Aguardar / Tentar outro processo]
C -- Sim --> E[Obter PID do processo alvo<br/>GetWindowThreadProcessId]
E --> F[Abrir handle do processo<br/>OpenProcess PROCESS_ALL_ACCESS]
F --> G[Alocar memória RWX<br/>VirtualAllocEx]
G --> H{Usar WriteProcessMemory?}
H -- Sim padrão --> I[Escrever shellcode direto<br/>WriteProcessMemory]
H -- Não stealth --> J[Escrever 2 bytes por vez<br/>LVM_SETITEMPOSITION loop]
I --> K[Enviar LVM_SORTITEMS<br/>com ptr do shellcode como callback]
J --> K
K --> L([Shellcode executa no<br/>contexto do processo legítimo])
L --> M[Payload ativo - ex: C2 beacon<br/>RAT, lateral movement]
M --> N[EDR vê apenas processo legítimo<br/>Ex: explorer.exe com conexão de rede]
style A fill:#c0392b,color:#fff
style L fill:#e74c3c,color:#fff
style M fill:#e74c3c,color:#fff
style N fill:#e67e22,color:#fff
style D fill:#7f8c8d,color:#fff
```
---
## Exemplos de Uso
### InvisiMole - Espionagem direcionada
O [[s0260-invisimole|InvisiMole]], backdoor sofisticado associado ao grupo [[g0047-gamaredon|Gamaredon]] e outros atores de espionagem de origem russa, documentadamente usa ListPlanting para injetar seus módulos RC2FM e RC2CL em processos legítimos do Windows. A técnica foi identificada em campanhas contra alvos governamentais e militares no Leste Europeu (Ucrânia, República Checa).
**Fluxo documentado:**
- InvisiMole injeta via `SysListView32` em processos como `explorer.exe`
- O payload estabelece canal C2 criptografado (RC4/AES)
- Módulos RC2FM: reconhecimento local; RC2CL: exfiltração e controle remoto
### Técnicas combinadas com ListPlanting
| Ator/Malware | Combinação | Objetivo |
|---|---|---|
| [[s0260-invisimole\|InvisiMole]] | ListPlanting + [[t1055-process-injection\|T1055]] | Persistência e evasão de EDR |
| Pesquisa (PoC público) | ListPlanting + [[t1134-access-token-manipulation\|T1134]] | Elevação de privilégio |
| Não atribuído | ListPlanting + [[t1027-obfuscated-files-or-information\|T1027]] | Evasão de análise estática |
> [!note] Nota de atribuição
> Além do InvisiMole, a técnica foi documentada em pesquisas de segurança por empresas como ESET e em repositórios de PoC públicos. A ausência de outros atores atribuídos não indica baixa prevalência - pode refletir dificuldade de detecção.
---
## Detecção
### Indicadores comportamentais
A detecção eficaz de ListPlanting requer monitorar a combinação de comportamentos, pois nenhum indicador isolado é suficiente:
| Indicador | Relevância | Ferramenta |
|-----------|-----------|-----------|
| `SendMessage` / `PostMessage` para `SysListView32` externo | Alta | EDR, ETW |
| `VirtualAllocEx` com `PAGE_EXECUTE_READWRITE` em processo externo | Alta | EDR, Sysmon |
| `OpenProcess` com `PROCESS_ALL_ACCESS` para processo não relacionado | Média | Sysmon Event 10 |
| Processo legítimo fazendo conexões de rede inesperadas | Média | EDR, netflow |
| Acesso a `SysListView32` via `FindWindowEx` em processo externo | Alta | ETW |
### Regra Sigma
```yaml
title: ListPlanting - Suspicious SysListView32 Message Injection
id: f3a7b2c1-8d4e-4f9a-b6c5-1e2d3f4a5b6c
status: experimental
description: Detecta possível ListPlanting via envio de LVM_SORTITEMS para jánela SysListView32 de processo externo
references:
- https://attack.mitre.org/techniques/T1055/015/
- https://www.eset.com/int/about/newsroom/press-releases/research/eset-research-uncovers-new-invisimole-components/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1055.015
logsource:
category: process_access
product: windows
detection:
selection:
TargetObject|contains: 'SysListView32'
CallTrace|contains:
- 'SendMessage'
- 'PostMessage'
filter_legitimate:
SourceImage|contains:
- 'explorer.exe'
- 'taskmgr.exe'
condition: selection and not filter_legitimate
falsepositives:
- Automação legítima de UI (ex: AutoHotKey, ferramentas de teste)
- Leitores de tela e ferramentas de acessibilidade
level: high
```
### Detecção via Sysmon
Eventos relevantes do Sysmon para correlação:
```yaml
# Sysmon Event ID 10 - ProcessAccess
# Monitorar acesso com GrantedAccess 0x1F0FFF (PROCESS_ALL_ACCESS) a processos com jánela SysListView32
# Sysmon Event ID 8 - CreateRemoteThread
# Monitorar threads remotas em processos que possuem SysListView32
# ETW Microsoft-Windows-Win32k
# Monitorar mensagens LVM_SORTITEMS (0x1030) enviadas entre processos distintos
```
---
## Mitigação
| ID | Mitigação | Implementação Prática | Eficácia |
|----|-----------|----------------------|---------|
| [[m1040-behavior-prevention-on-endpoint\|M1040]] | Behavior Prevention on Endpoint | Configurar EDR para bloquear alocação RWX em processos externos; habilitar Attack Surface Reduction (ASR) rules no Windows Defender | Alta |
| Endurecimento de processos | Proteção de processo | Habilitar Protected Process Light (PPL) para processos críticos; usar Windows Defender Credential Guard | Média |
| Monitoramento de API | ETW / API hooking | Instrumentar `VirtualAllocEx`, `OpenProcess`, `SendMessage` cross-process via ETW ou userland hooks no EDR | Alta |
| Princípio do menor privilégio | Redução de superfície | Restringir quais processos podem usar `PROCESS_ALL_ACCESS`; aplicar políticas AppLocker/WDAC | Média |
> [!tip] Recomendação de defesa
> A defesa mais eficaz combina **Behavior Prevention** (M1040) com regras de ETW monitorando chamadas `SendMessage`/`PostMessage` cross-process para classes `SysListView32`. Ferramentas como **Sysmon** (Event ID 10 - ProcessAccess) e **Microsoft Defender for Endpoint** com **Attack Surface Reduction** ativado reduzem significativamente a superfície de exploração.
---
## Contexto Brasil/LATAM
Embora o ListPlanting não sejá uma técnica com incidência documentada específica no Brasil ou LATAM até o momento desta nota, seu contexto é relevante por alguns motivos:
### Relevância regional
**1. Grupos de espionagem com interesse em LATAM**
Grupos como [[g0047-gamaredon|Gamaredon]], associados ao uso de InvisiMole (principal usuário documentado de ListPlanting), historicamente miram diplomacia e organizações governamentais. Missões diplomáticas brasileiras e latino-americanas no exterior são alvos potenciais de campanhas de espionagem que usam este arsenal.
**2. Operações de cibercrime sofisticado**
O ecossistema de [[g0032-lazarus-group|grupos de cibercrime financeiro]] ativos no Brasil começa a adotar técnicas de evasão avançadas. Conforme as equipes de segurança brasileiras melhoram a detecção de injeções clássicas (`VirtualAllocEx` + `WriteProcessMemory`), é esperado que grupos adotem variantes menos detectáveis como ListPlanting.
**3. Capacitação de red teams nacionais**
A técnica está documentada em repositórios públicos e é usada em exercícios de red team por empresas brasileiras de segurança ofensiva. SOC analysts precisam estar familiarizados com a telemetria associada.
### Setores em risco (contextual)
| Setor | Risco | Motivo |
|-------|-------|--------|
| [[_sectors#governo\|Governo]] | Alto | Alvo de espionagem, InvisiMole ativo em contextos diplomáticos |
| [[_sectors#financeiro\|Financeiro]] | Médio-Alto | Adoção crescente de técnicas avançadas por cibercriminosos |
| [[_sectors#tecnologia\|Tecnologia]] | Médio | Red teams, pentests, e potencial supply chain |
---
## Referências
- [MITRE ATT&CK - T1055.015](https://attack.mitre.org/techniques/T1055/015/) - Definição oficial da técnica
- [ESET Research - InvisiMole](https://www.welivesecurity.com/2020/06/18/digging-up-invisimole-hidden-arsenal/) - Análise detalhada do malware que usa ListPlanting
- [ired.team - ListPlanting](https://www.ired.team/offensive-security/code-injection-process-injection/listplanting) - Análise técnica com PoC
- [Windows Dev Docs - ListView_SortItems](https://learn.microsoft.com/en-us/windows/win32/controls/lvm-sortitems) - Documentação oficial da API abusada
**Notas relacionadas:**
- [[t1055-process-injection|T1055 - Process Injection]] - técnica pai
- [[m1040-behavior-prevention-on-endpoint|M1040 - Behavior Prevention on Endpoint]] - mitigação principal
- [[s0260-invisimole|InvisiMole]] - único malware com uso documentado confirmado
- [[t1027-obfuscated-files-or-information|T1027 - Obfuscated Files or Information]] - frequentemente combinada
- [[t1134-access-token-manipulation|T1134 - Access Token Manipulation]] - variante com elevação de privilégio
---
*Fonte: [MITRE ATT&CK - T1055.015](https://attack.mitre.org/techniques/T1055/015)*