# T1547.004 - Winlogon Helper DLL
## Técnica Pai
Esta é uma sub-técnica de [[t1547-boot-logon-autostart-execution|T1547 - Execução na Inicialização]].
## Descrição
Adversários podem abusar de funcionalidades do processo `Winlogon.exe` para executar DLLs ou executáveis maliciosos toda vez que um usuário realiza logon no sistema Windows. O `Winlogon.exe` é um componente essencial do sistema operacional responsável pelo processo de logon/logoff, pelo bloqueio de tela e pela sequência de aténção segura (SAS) ativada por `Ctrl+Alt+Delete`.
As chaves de registro abaixo são utilizadas para gerenciar programas auxiliares integrados ao Winlogon e são historicamente exploradas para persistência furtiva:
- `HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\`
- `HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon\`
- `HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\`
Dentro dessas chaves, os subvalores mais frequentemente abusados são:
| Subvalor | Função legítima | Abuso |
|----------|----------------|-------|
| `Notify` | DLLs de notificação de eventos de logon | Carregar DLL maliciosa na sessão |
| `Userinit` | `userinit.exe` - inicialização do ambiente do usuário | Anexar caminho de executável malicioso |
| `Shell` | `explorer.exe` - shell padrão do Windows | Substituir por shell trojanizado |
Modificações maliciosas nessas chaves fazem com que o Winlogon carregue código adversário em cada evento de logon, garantindo persistência e execução elevada no contexto do processo de autenticação do sistema.
### Relevância para Brasil e LATAM
O grupo [[g0010-turla|Turla]] - associado ao serviço de inteligência russo (FSB) - utilizou sua família de malware [[s0168-gazer|Gazer]] com esta técnica em operações de espionagem contra embaixadas e órgãos governamentais na Europa Oriental e América Latina. No contexto regional, a técnica é especialmente relevante porque muitos endpoints Windows em organizações do [[_sectors|governo]] brasileiro ainda operam com configurações de registro permissivas e sem monitoramento adequado de integridade de chaves críticas. O [[g0102-conti-group|Wizard Spider]] também empregou o [[s0534-bazar|BazarLoader]] com modificações em `Userinit` em campanhas de ransomware que afetaram empresas de manufatura no Brasil.
## Attack Flow
```mermaid
graph TB
A["🎯 Acesso Inicial<br/>Phishing / Exploit de aplicação exposta"] --> B["⚙️ Execução de Payload<br/>Dropper deposita DLL maliciosa em disco"]
B --> C["📝 Modificação de Registro<br/>Winlogon\\Userinit ou Shell ou Notify<br/>apontados para DLL / EXE malicioso"]
C --> D{"Gatilho de Persistência"}
D -->|Próximo logon do usuário| E["🔄 Winlogon.exe carrega DLL<br/>na inicialização da sessão"]
D -->|Reinicialização do sistema| E
E --> F["💻 Execução com privilégio<br/>do contexto de logon"]
F --> G["📡 C2 / Payload secundário<br/>RAT, backdoor, ransomware"]
G --> H["🔒 Persistência estabelecida<br/>Sobrevive a reinicializações e rotações de senha"]
```
## Como Funciona
**Passo 1 - Depósito da DLL maliciosa no sistema de arquivos**
O adversário primeiro precisa gravar a DLL ou executável malicioso em algum diretório do sistema - frequentemente mascarado como biblioteca legítima do Windows (`winmm.dll`, `winspool.drv`) ou colocado em `%SystemRoot%\System32\` se o processo de entrega for executado com privilégios administrativos. O malware [[s0168-gazer|Gazer]] do [[g0010-turla|Turla]], por exemplo, armazena seus componentes em subdiretórios de `%APPDATA%` com nomes que imitam aplicações Microsoft legítimas.
**Passo 2 - Modificação das chaves de registro do Winlogon**
Com privilégios de escrita no registro (geralmente requerendo elevação ou operando em contexto admin), o adversário modifica o valor-alvo. A modificação mais crítica e comum é em `Userinit`, que por padrão contém apenas `C:\Windows\system32\userinit.exe,`. A vírgula no final é intencional e permite que o Windows carregue entradas adicionais; adversários aproveitam isso para concatenar o caminho malicioso:
```powershell
# Leitura do valor atual para confirmar alvo
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name Userinit
# Modificação para adicionar payload (requer privilégio admin)
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" `
-Name "Userinit" `
-Value "C:\Windows\system32\userinit.exe,C:\ProgramData\malware.exe,"
# Alternativa via subchave Notify (mais furtiva - aponta para DLL)
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\malicious"
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\malicious" `
-Name "DllName" -Value "C:\Windows\System32\evil.dll"
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\malicious" `
-Name "Logon" -Value "WnLogonEvent"
```
**Passo 3 - Ativação na sessão de logon**
Na próxima vez que qualquer usuário (incluindo contas de serviço ou o próprio adversário em sessão RDP) realizar logon, o `Winlogon.exe` executa o payload como parte do seu fluxo normal de inicialização de sessão. Como o Winlogon opera em contexto de sistema ou do usuário logado, o payload herdará os privilégios correspondentes. Malwares como [[s1202-lockbit-30|LockBit 3.0]] e [[s0379-revenge-rat|Revenge RAT]] usam essa abordagem para garantir reexecução após reinicializações forçadas em tentativas de resposta a incidentes.
## Detecção
```yaml
title: Modificacao Suspeita nas Chaves de Registro do Winlogon
id: b9f3c1a7-4d22-4e8b-ae44-7f1c2b3d9e05
status: production
description: >
Detecta modificações não autorizadas nas chaves de registro
controladas pelo Winlogon - padrão consistente com T1547.004.
Monitorar Userinit, Shell e subchaves Notify é crítico para
detectar persistência furtiva em endpoints Windows.
references:
- https://attack.mitre.org/techniques/T1547/004/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.persistence
- attack.t1547.004
logsource:
category: registry_set
product: windows
detection:
selection_userinit:
TargetObject|contains: '\Microsoft\Windows NT\CurrentVersion\Winlogon'
TargetObject|endswith:
- '\Userinit'
- '\Shell'
Details|contains:
- '.exe,'
- '.dll,'
filter_legit_userinit:
Details|re: '^C:\\Windows\\system32\\userinit\.exe,