> [!warning] Aviso Importante > Este playbook é para uso por threat hunters com experiência em DFIR. Mecanismos de persistência legítimos são extremamente comuns — baselines de ambiente são obrigatórias antes de qualquer escalada. Falsos positivos são frequentes em ambientes com automação, software de monitoramento e sistemas de backup. --- ## Visão Geral Persistência é a capacidade de um atacante manter acesso ao ambiente mesmo após reinicializações, troca de credenciais ou encerramento de sessões. É a segunda fase crítica após o comprometimento inicial — sem persistência, um atacante perde o acesso a cada interrupção do sistema. **Por que caçar persistência:** - Indica que o atacante planejou uma operação de longo prazo, não apenas acesso oportunista - A presença de persistência implica que o comprometimento inicial já ocorreu - o escopo é maior do que parece - Persistência não detectada pode sobreviver a "remediações" incompletas - o atacante retorna após o incidente ser fechado - Em ambientes LATAM, trojans bancários frequentemente sobrevivem por meses via persistência em registro **A janela de oportunidade do atacante:** ```mermaid graph TB A["🎯 Comprometimento Inicial<br/>Phishing, exploração, credencial"] --> B["🔍 Reconhecimento Interno<br/>whoami, ipconfig, net user"] B --> C["💾 Estabelece Persistência<br/>Registro, serviço, tarefa agendada"] C --> D["🔐 Escalada de Privilégios<br/>Token, UAC bypass, exploit local"] D --> E["🌐 Movimentação Lateral<br/>PtH, WMI, PSExec"] E --> F["🎯 Objetivo Final<br/>Exfiltração, ransomware, espionagem"] C -.->|"Jánela de detecção<br/>antes da lateral"| G["🛡️ Hunting de Persistência<br/>Interromper antes de escalar"] style G fill:#1a472a,color:#fff style C fill:#7b1c1c,color:#fff ``` **Categorias de persistência:** | Categoria | Sub-técnicas Principais | Impacto | |-----------|------------------------|---------| | Boot/Logon Autostart | Registry Run Keys, Startup Folder, Logon Scripts | Alto - executa a cada logon | | Scheduled Tasks / Jobs | schtasks, cron, at | Alto - executa periodicamente sem interação | | Serviços Windows | sc.exe, ServiceInstall via binário modificado | Crítico - executa como SYSTEM | | Event-Triggered | WMI subscriptions, COM hijacking, File associations | Alto - furtivo, difícil de detectar | | Account-Based | Contas novas, manipulação de grupos, backdoor SSO | Crítico - sobrevive a reimagens | | Pre-OS / Firmware | Bootkit, UEFI implant | Crítico - sobrevive a formatação | --- ## Mapa de Persistência ```mermaid mindmap root((Persistência)) Boot & Logon Registry Run Keys HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run RunOnce e RunOnceEx Startup Folder C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup AppData\\Roaming\\...\\Startup Logon Scripts UserInitMprLogonScript Group Policy Scripts Scheduled Tasks schtasks.exe Task Scheduler COM API Tarefas em \\Microsoft\\Windows\\ocultas at.exe legado Serviços Windows sc.exe creaté Modificação de binário de serviço existente DLL de serviço substituída ImagePath para executável externo Event-Triggered WMI Event Subscriptions EventFilter EventConsumer FilterToConsumerBinding COM Object Hijacking HKCU InprocServer32 override File Association Hijacking HKCU Classes override AppInit_DLLs Account-Based Conta local nova Conta AD nova Adição a grupos privilegiados Service Principal Names OAuth App persistência Pre-OS Bootkit MBR UEFI implant Firmware malware ``` --- ## Hipóteses de Hunting | # | Hipótese | Técnica MITRE | Prioridade | |---|----------|---------------|------------| | H1 | Um atacante adicionou entradas de Registry Run Keys para executar payload a cada logon | [[t1547-001-registry-run-keys\|T1547.001]] | Alta | | H2 | Um atacante criou tarefas agendadas com nomes genéricos ou caminhos suspeitos | [[t1053-005-scheduled-task\|T1053.005]] | Alta | | H3 | Um atacante instalou um serviço Windows com binário em caminho não-padrão | [[t1543-003-windows-service\|T1543.003]] | Alta | | H4 | Um atacante criou WMI Event Subscriptions para executar código de forma furtiva | [[t1546-003-windows-management-instrumentation-event-subscription\|T1546.003]] | Média | | H5 | Um atacante criou uma conta local ou adicionou conta existente a grupos privilegiados | [[t1136-create-account\|T1136]] / [[t1098-account-manipulation\|T1098]] | Alta | | H6 | Um atacante realizou COM Object Hijacking via HKCU para carregar DLL maliciosa | [[t1546-015-component-object-model-hijacking\|T1546.015]] | Média | --- ## Persistência Windows ### Registry Run Keys **Localização crítica — HKLM (requer privilégio de admin):** ``` HKLM\Software\Microsoft\Windows\CurrentVersion\Run HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run HKLM\System\CurrentControlSet\Services\{ServiceName}\ImagePath ``` **Localização crítica — HKCU (qualquer usuário, sem privilégio admin):** ``` HKCU\Software\Microsoft\Windows\CurrentVersion\Run HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders ``` **Baseline legítimo vs. malicioso:** | Padrão | Legítimo | Suspeito | |--------|----------|---------| | Caminho do executável | `C:\Program Files\...` ou `C:\Windows\...` | `%TEMP%\`, `%APPDATA%\`, `C:\Users\...` | | Nome da entrada | Nome de software conhecido | String aleatória, nome genérico (`svchost32`, `WindowsUpdaté`) | | Valor | Executável com assinatura válida | Script PowerShell ofuscado, execução de `cmd /c` | | Timestamp | Coincide com instalação de software | Horário fora do expediente, madrugada | **Detecção — Sysmon EventID 13 (Registry Value Set):** Focar em writes nos Run Keys durante horários incomuns ou por processos não-instaladores. --- ### Scheduled Tasks (Tarefas Agendadas) **Onde residem:** ``` C:\Windows\System32\Tasks\ C:\Windows\SysWOW64\Tasks\ HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks ``` **Comandos de criação comuns por atacantes:** ```powershell # Via schtasks.exe schtasks /creaté /tn "WindowsDefenderUpdaté" /tr "C:\Temp\payload.exe" /sc onlogon /ru SYSTEM # Via PowerShell COM $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-enc BASE64PAYLOAD" Register-ScheduledTask -TaskName "SyncTask" -Action $action -RunLevel Highest ``` **Indicadores de tarefa maliciosa:** - Trigger: `OnLogon`, `AtStartup`, `RepetitionInterval` muito curto (< 5 minutos) - Caminho da ação: `%TEMP%`, `%APPDATA%`, `C:\ProgramData` fora de subpastas de software conhecidos - Usuário de execução: `SYSTEM` criado por usuário não-admin - Nome em subpasta obscura: `\Microsoft\Windows\Maintenance\` com nome genérico --- ### Windows Services **Criação de serviço malicioso:** ```cmd sc creaté MalSvc binPath= "C:\Temp\backdoor.exe" start= auto sc description MalSvc "Windows Compatibility Service" ``` **Indicadores:** - `ImagePath` aponta para pasta temporária, `%APPDATA%`, ou caminho de usuário - Serviço criado fora de horário de mudanças (change window) - Serviço sem `Description` ou com descrição genérica copiada de serviço legítimo - Modificação do `ImagePath` de um serviço existente (técnica de hijacking) **Serviços legítimos frequentemente abusados:** - `svchost.exe` com DLL substituta - `WinRM` habilitado em workstations onde não deveria existir - `RemoteRegistry` habilitado remotamente por atacante --- ### WMI Event Subscriptions WMI subscriptions são extremamente furtivas — não aparecem em Run Keys, não criam arquivos de task, e sobrevivem a reinicializações. São favoritas de APTs como [[g0016-apt29]] e [[g0096-apt41]]. **Estrutura de uma subscription:** 1. **EventFilter** - define o evento gatilho (ex: `SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'`) 2. **EventConsumer** - define a ação (CommandLineEventConsumer executa código) 3. **FilterToConsumerBinding** - conecta Filter ao Consumer **Query de enumeração (PowerShell):** ```powershell # Listar todos os WMI Event Consumers (devem ser mínimos em workstations) Get-WMIObject -Namespace root\subscription -Class __EventFilter Get-WMIObject -Namespace root\subscription -Class __EventConsumer Get-WMIObject -Namespace root\subscription -Class __FilterToConsumerBinding ``` --- ### Startup Folder **Caminhos:** ``` C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\ # Todos os usuários C:\Users\{user}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\ # Por usuário ``` Simples mas eficaz — qualquer arquivo executável (.exe, .bat, .vbs, .lnk) nessas pastas executa no logon. Muito usada por malware de baixa sofisticação e trojans bancários brasileiros. --- ### DLL Search Order Hijacking **Como funciona:** Windows procura DLLs em ordem: pasta do executável → `System32` → `Windows` → variáveis PATH. Se uma DLL legítima é procurada em pasta do executável e não existe lá, um atacante pode plantar uma DLL maliciosa nessa pasta. **Alvos comuns:** - Aplicativos em `C:\Program Files\` que carregam DLLs sem caminho absoluto - Aplicativos legítimos executados de `C:\Temp\` ou `Downloads\` - `OneDrive.exe`, `Teams.exe` - conhecidos por vulnerabilidades de DLL hijacking **Detecção:** Sysmon EventID 7 (Image Loaded) com DLL carregada de caminho não-padrão para o executável pai. --- ### COM Object Hijacking **Mecanismo:** COM resolve objetos primeiro em `HKCU\Software\Classes\CLSID\` (sem privilégio) antes de `HKLM\Software\Classes\CLSID\`. Atacante registra CLSID em HKCU apontando para DLL maliciosa. **Indicadores:** - Entradas `InprocServer32` em `HKCU\Software\Classes\CLSID\` com caminhos para pastas de usuário - DLL carregada por processo legítimo (`explorer.exe`, `taskhost.exe`) de caminho inesperado - Timestamp de criação da chave de registro fora do horário de expediente --- ## Persistência Linux/macOS ### Cron Jobs ```bash # Arquivos de cron do sistema /etc/crontab /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/ # Cron por usuário (requer acesso de usuário específico) /var/spool/cron/crontabs/{usuario} # Enumerar todos os crontabs instalados for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null; done ``` **Indicadores maliciosos:** - Cron executando script de `/tmp/`, `/dev/shm/`, ou diretório home com nome ofuscado - Frequência muito alta (a cada minuto) para script de sistema - Entrada adicionada recentemente coincidindo com outras atividades suspeitas --- ### Systemd Units ```bash # Localização de units de serviço /etc/systemd/system/ # Units persistentes do sistema /usr/lib/systemd/system/ # Units de pacotes instalados ~/.config/systemd/user/ # Units por usuário # Detectar units habilitadas recentemente systemctl list-units --type=service --state=enabled find /etc/systemd/system/ -newer /etc/passwd -name "*.service" ``` **Indicadores:** Unit com `ExecStart` apontando para script em `/tmp/` ou `/home/`, `Restart=always` sem justificativa, unit sem documentação no campo `Description`. --- ### Shell Profile Hijacking (.bashrc / .profile) ```bash # Arquivos de perfil alvo ~/.bashrc ~/.bash_profile ~/.profile ~/.zshrc /etc/profile /etc/profile.d/*.sh /etc/bash.bashrc ``` **Indicadores:** Linha adicionada no final de arquivo legítimo executando curl/wget ou carregando script de caminho incomum, variável PATH modificada para incluir diretório controlado pelo atacante. --- ### macOS Launch Agents / Daemons ```bash # Launch Agents (por usuário - sem privilégio root) ~/Library/LaunchAgents/ # Launch Daemons (sistema - requer root) /Library/LaunchDaemons/ /System/Library/LaunchDaemons/ # Apple — não tocar # Enumerar todos os Launch Agents do usuário launchctl list | grep -v com.apple ``` **Indicadores maliciosos:** - `ProgramArguments` apontando para script em `~/Library/Application Support/` com nome de GUID - `RunAtLoad: true` + `KeepAlive: true` para programa desconhecido - Arquivo plist com timestamp recente não associado a instalação de software --- ## Persistência Cloud/Identity ### Federated Identity Providers (IdP) Atacantes com acesso de admin podem adicionar um IdP externo controlado por eles, permitindo autenticação persistente mesmo após reset de senha de contas locais. **Vetores:** - Adição de domínio federado no Azure AD / Entra ID - Modificação de configurações SAML trust - Adição de certificado de assinatura de token controlado pelo atacante **Query KQL — Entra ID — Federation Changes:** ```kql AuditLogs | where OperationName in ("Set domain authentication", "Add unverified domain", "Set federation settings on domain", "Updaté domain") | extend InitiatedByUser = tostring(InitiatedBy.user.userPrincipalName) | project TimeGenerated, OperationName, InitiatedByUser, TargetResources | order by TimeGenerated desc ``` --- ### OAuth Application Backdoors Atacantes adicionam aplicativos OAuth com permissões elevadas (Mail.Read, Files.ReadWrite.All) para manter acesso independentemente das credenciais do usuário. **Indicadores:** - Aplicativo OAuth com permissões de `Application` (não delegadas) criado recentemente - Consentimento de admin concedido a app desconhecido - App com `redirect_uri` apontando para domínio externo não corporativo **Query KQL — Entra ID — OAuth App Consent:** ```kql AuditLogs | where OperationName in ("Consent to application", "Add app role assignment to service principal", "Add delegated permission grant") | extend AppDisplayName = tostring(TargetResources[0].displayName) | extend ConsentedBy = tostring(InitiatedBy.user.userPrincipalName) | where ConsentedBy !endswith "@microsoft.com" | project TimeGenerated, OperationName, AppDisplayName, ConsentedBy | order by TimeGenerated desc ``` --- ### Service Principals com Credenciais Persistentes Atacantes adicionam credenciais (secrets ou certificados) a Service Principals existentes com permissões elevadas, criando backdoor independente de usuários. **Query KQL — Entra ID — Credential Added to SP:** ```kql AuditLogs | where OperationName in ("Add service principal credentials", "Updaté application – Certificates and secrets management") | extend SPName = tostring(TargetResources[0].displayName) | extend ModifiedBy = tostring(InitiatedBy.user.userPrincipalName) | project TimeGenerated, OperationName, SPName, ModifiedBy, TargetResources | order by TimeGenerated desc ``` --- ## Queries de Hunting ### H1 - Registry Run Keys Suspeitos #### Query KQL - Sentinel ```kql DeviceRegistryEvents | where RegistryKey has_any ( @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run" ) | where ActionType in ("RegistryValueSet", "RegistryKeyCreated") | where RegistryValueData has_any ("%TEMP%", "%APPDATA%", "\\AppData\\", "\\Temp\\", "powershell", "cmd /c", "wscript", "cscript", "mshta", "regsvr32", "rundll32") | where InitiatingProcessFileName !in~ ("msiexec.exe", "setup.exe", "install.exe", "chrome_installer.exe", "Teams.exe") | project Timestamp, DeviceName, AccountName, RegistryKey, RegistryValueName, RegistryValueData, InitiatingProcessFileName, InitiatingProcessCommandLine | order by Timestamp desc ``` #### Query SPL - Splunk (Sysmon EventID 13) ```spl index=sysmon EventCode=13 TargetObject IN ("*\\CurrentVersion\\Run*", "*\\CurrentVersion\\RunOnce*") | where NOT match(Details, "(?i)(C:\\\\Program Files|C:\\\\Windows|C:\\\\ProgramData\\\\Microsoft)") | where match(Details, "(?i)(temp|appdata|users\\\\|powershell|cmd\\.exe|wscript|mshta)") | stats count by Computer, User, TargetObject, Details, Image | sort -count ``` --- ### H2 - Scheduled Tasks Maliciosas #### Query KQL - Sentinel ```kql DeviceEvents | where ActionType == "ScheduledTaskCreated" | extend TaskXml = tostring(AdditionalFields.TaskContent) | extend TaskName = tostring(AdditionalFields.TaskName) | where TaskXml has_any ("powershell", "cmd.exe", "%TEMP%", "%APPDATA%", "\\AppData\\", "wscript", "mshta", "regsvr32", "certutil", "bitsadmin") | where InitiatingProcessFileName !in~ ("msiexec.exe", "setup.exe", "svchost.exe", "taskhostw.exe", "WaaSMedicAgent.exe") | project Timestamp, DeviceName, AccountName, TaskName, TaskXml, InitiatingProcessFileName, InitiatingProcessCommandLine | order by Timestamp desc ``` #### Query SPL - Splunk ```spl index=windows (EventCode=4698 OR EventCode=4702) | rex field=_raw "Task Name:\s+(?<TaskName>[^\n]+)" | rex field=_raw "Task Content:\s+(?<TaskContent>.+)" | where match(TaskContent, "(?i)(powershell.*-enc|cmd.*\/c|%temp%|%appdata%|wscript|mshta|certutil)") | where NOT match(SubjectUserName, "(?i)(SYSTEM|LOCAL SERVICE|NETWORK SERVICE|\$)") | table _time, Computer, SubjectUserName, TaskName, TaskContent | sort -_time ``` --- ### H3 - Serviços Windows em Caminhos Suspeitos #### Query KQL - Sentinel ```kql DeviceRegistryEvents | where RegistryKey has @"SYSTEM\CurrentControlSet\Services" | where RegistryValueName == "ImagePath" | where RegistryValueData has_any ("%TEMP%", "%APPDATA%", "\\Users\\", "\\AppData\\", "\\Temp\\", "\\ProgramData\\") | where RegistryValueData !has_any ("C:\\ProgramData\\Microsoft\\", "C:\\ProgramData\\chocolatey\\", "C:\\ProgramData\\NVIDIA") | project Timestamp, DeviceName, AccountName, RegistryKey, RegistryValueData, InitiatingProcessFileName, InitiatingProcessCommandLine | order by Timestamp desc ``` #### Query SPL - Splunk ```spl index=windows EventCode=7045 | where NOT match(ImagePath, "(?i)(C:\\\\Windows|C:\\\\Program Files|C:\\\\ProgramData\\\\Microsoft)") | where match(ImagePath, "(?i)(temp|users\\\\|appdata|\.bat|\.ps1|powershell|cmd\.exe)") | table _time, Computer, ServiceName, ImagePath, AccountName | sort -_time ``` --- ### H4 - WMI Event Subscriptions #### Query KQL - Sentinel ```kql DeviceEvents | where ActionType == "WmiBindEventFilterToConsumer" | project Timestamp, DeviceName, AccountName, InitiatingProcessFileName, InitiatingProcessCommandLine, AdditionalFields | order by Timestamp desc ``` ```kql // Detectar criação de WMI CommandLineEventConsumer DeviceRegistryEvents | where RegistryKey has @"root\subscription" | where RegistryKey has_any ("CommandLineEventConsumer", "ActiveScriptEventConsumer") | project Timestamp, DeviceName, AccountName, RegistryKey, RegistryValueData | order by Timestamp desc ``` #### Query SPL - Splunk (Sysmon EventID 19, 20, 21) ```spl index=sysmon (EventCode=19 OR EventCode=20 OR EventCode=21) | table _time, Computer, User, EventCode, Name, Type, Destination, Query, Consumer, Filter | sort -_time ``` --- ### H5 - Criação de Conta / Manipulação de Grupo #### Query KQL - Sentinel ```kql SecurityEvent | where EventID in (4720, 4722, 4723, 4724, 4725, 4726, 4728, 4732, 4756) | where EventID in (4720, 4728, 4732) // Foco: criação de conta e adição a grupos privilegiados | extend TargetAccount = tostring(TargetUserName) | extend GroupName = tostring(TargetDomainName) | where SubjectUserName !endswith "quot; | project TimeGenerated, EventID, Computer, SubjectUserName, TargetAccount, GroupName | order by TimeGenerated desc ``` #### Query SPL - Splunk ```spl index=windows (EventCode=4720 OR EventCode=4728 OR EventCode=4732) | table _time, Computer, SubjectUserName, TargetUserName, GroupName | where NOT match(SubjectUserName, "(?i)(\$|SYSTEM)") | sort -_time ``` --- ### H6 - COM Object Hijacking via HKCU #### Query KQL - Sentinel ```kql DeviceRegistryEvents | where RegistryKey startswith @"HKEY_USERS\" | where RegistryKey has @"\Software\Classes\CLSID\" | where RegistryKey has "InprocServer32" | where RegistryValueData has_any (".dll", ".ocx") | where RegistryValueData !has_any ("C:\\Windows\\", "C:\\Program Files\\") | project Timestamp, DeviceName, AccountName, RegistryKey, RegistryValueData, InitiatingProcessFileName, InitiatingProcessCommandLine | order by Timestamp desc ``` --- ## Ferramentas de Hunting ### Autoruns (Sysinternals) A ferramenta mais completa para enumeração de mecanismos de persistência no Windows. ```powershell # Modo silencioso - exportar para CSV autorunsc.exe -a * -c -h -s '*' -user '*' > autoruns-output.csv # Comparar dois snapshots para detectar mudanças autorunsc.exe -a * -c > baseline.csv # (após suspeita) autorunsc.exe -a * -c > current.csv # Comparar manualmente ou via diff ``` **Coberturas do Autoruns:** - Registry Run Keys (todos os hives) - Startup Folders - Scheduled Tasks - Services - Drivers - Browser extensions - COM hijacks - WMI subscriptions - LSA providers - Network providers --- ### RECmd (Registry Explorer Command Line) Análise forense de hives de registro — útil em análise offline de imagem de disco. ```powershell # Processar hive NTUSER.DAT para extrair Run Keys RECmd.exe -f C:\Evidence\NTUSER.DAT --csv C:\Output --csvf runkeys.csv --bn BatchExamples\Kroll_Batch.reb # Analisar hive do sistema RECmd.exe -f C:\Evidence\SYSTEM --csv C:\Output --csvf services.csv ``` --- ### OSQuery Queries SQL sobre estado do sistema operacional — excelente para hunting em escala via Kolide Fleet ou osctrl. ```sql -- Autoruns (Run Keys) SELECT name, path, source, status FROM startup_items; -- Tarefas agendadas SELECT name, path, enabled, action, triggers FROM scheduled_tasks WHERE action NOT LIKE '%Windows%' AND action NOT LIKE '%Microsoft%'; -- Serviços com caminhos suspeitos SELECT name, service_type, status, start_type, path FROM services WHERE path NOT LIKE '%Windows%' AND path NOT LIKE '%Program Files%' AND status = 'RUNNING'; -- WMI Subscriptions SELECT name, query, consumer_name, consumer_type, consumer_command FROM wmi_event_filters JOIN wmi_filter_consumer_binding USING (name); ``` --- ### Velociraptor Artifacts ```yaml # Coletar artefatos de persistência em escala # Via Velociraptor VQL SELECT * FROM Artifact.Windows.Persistence.PermanentWMIEvents() SELECT * FROM Artifact.Windows.System.Services() WHERE PathName NOT LIKE '%Windows%' AND PathName NOT LIKE '%Program Files%' SELECT * FROM Artifact.Windows.Persistence.Startups() SELECT * FROM Artifact.Windows.System.TaskScheduler() WHERE Actions LIKE '%powershell%' OR Actions LIKE '%cmd.exe%' ``` **Artifacts mais relevantes:** - `Windows.Persistence.PermanentWMIEvents` - WMI subscriptions - `Windows.System.Services` - Serviços instalados - `Windows.Persistence.Startups` - Startup items (Run Keys + pastas) - `Windows.System.TaskScheduler` - Tarefas agendadas com detalhes XML --- ## Contexto LATAM/Brasil ### Trojans Bancários Brasileiros - Padrões de Persistência O Brasil concentra algumas das famílias de trojans bancários mais persistentes do mundo. O ecossistema Delphi-based (Grandoreiro, [[mekotio]], [[s0528-javali]], [[casbaneiro]], [[amavaldo]]) usa padrões específicos que diferem dos APTs tradicionais. **Grandoreiro — DLL Hijacking + Run Key:** ``` Vetor comum: 1. Usuário executa instalador falso de software (Zoom, DocuSign, etc.) 2. Legítimo binário assinado copiado para %APPDATA%\{GUID}\ 3. DLL maliciosa plantada na mesma pasta (DLL hijacking do binário legítimo) 4. Entrada Run Key criada: HKCU\...\Run\{nome-genérico} = %APPDATA%\{GUID}\{binary-legítimo}.exe 5. Resultado: binário legítimo assinado executa DLL maliciosa a cada logon Exemplos de nomes usados: - "WindowsDefender" → %APPDATA%\WinDefend\MicrosoftEdgeUpdaté.exe - "OneDriveSync" → %APPDATA%\OneDriveSync\OneDriveStandaloneUpdater.exe ``` **Mekotio — Registry Run Key via AutoIt:** ``` HKCU\Software\Microsoft\Windows\CurrentVersion\Run\ "Synaptics Pointing Device Driver" = "C:\Users\{user}\AppData\Roaming\Synaptics\SynTP\SynTPEnh.exe" [O executável SynTPEnh.exe é legítimo mas carrega DLL Mekotio via DLL hijacking] ``` **Indicadores específicos de trojans bancários BR:** - Run Key para binário em `%APPDATA%` com nome imitando driver ou utilitário de sistema - Binário com assinatura digital válida mas DLL co-localizada sem assinatura - Processo pai: `mshta.exe`, `wscript.exe`, `AutoIt3.exe` - Comúnicação C2 para domínios `.com.br` em provedores de hospedagem brasileiros (Locaweb, KingHost, HostGator BR) - Arquivos instalados em `%APPDATA%\Roaming\` com nomes de pastas tipo GUID (ex: `{A1B2C3D4-...}`) --- ### Ambientes Governamentais com Windows Legado Órgãos governamentais brasileiros (federal, estadual, municipal) frequentemente operam com: - Windows 7 ainda em uso em algumas estações (sem suporte desde 2020) - Windows Server 2008 R2 em infraestrutura crítica - Políticas de grupo (GPO) inconsistentes entre domínios - Software legado que exige privilégios administrativos locais **Implicações para hunting:** - Baselines de Run Keys são mais "barulhentas" - mais software legítimo instalado por usuário - Tarefas agendadas criadas por scripts de GPO podem simular comportamento malicioso - WMI subscriptions legítimas de ferramentas de gestão antigas (SCCM 2007-era) podem gerar falsos positivos - Priorizar detecção de `at.exe` - ainda em uso em ambientes legados mas não mais mantido pela Microsoft **Query SPL — Detecção de `at.exe` (legado, frequentemente malicioso em ambientes modernos):** ```spl index=windows EventCode=4688 CommandLine="*at.exe*" | where NOT match(Computer, "(?i)(server|srv|srv-)") | table _time, Computer, User, CommandLine | sort -_time ``` --- ## Gantt de Hunting Semanal ```mermaid gantt title Ciclo de Threat Hunting — Persistência dateFormat YYYY-MM-DD section Segunda Coletar baseline de Run Keys :2026-03-23, 1d Executar H1 Registry Run Keys :2026-03-23, 1d section Terça Hunting Scheduled Tasks suspeitas :2026-03-24, 1d Enumerar serviços com ImagePath incomum :2026-03-24, 1d section Quarta Varredura WMI Event Subscriptions :2026-03-25, 1d Verificar Startup Folders em endpoints :2026-03-25, 1d section Quinta Hunting criação de contas / grupo admin :2026-03-26, 1d Revisar COM Object hijacks via HKCU :2026-03-26, 1d section Sexta Documentar hipóteses válidadas :2026-03-27, 1d Atualizar detection rules no SIEM :2026-03-27, 1d ``` --- ## Checklist de Hunting ### Preparação - [ ] Confirmar que Sysmon está ativo com eventos 13 (Registry), 7 (Image Load), 19/20/21 (WMI) - [ ] Estabelecer baseline de Run Keys - exportar Autoruns de golden image e endpoints representativos - [ ] Mapear software de gestão legítimo que usa WMI (SCCM, Tanium, CrowdStrike) - [ ] Identificar tarefas agendadas de sistemas de monitoramento (excluir da análise) - [ ] Confirmar retenção de logs de Security Events (EventID 7045, 4698, 4720) mínimo 90 dias ### Execução - [ ] Executar H1 - Registry Run Keys suspeitos (KQL + SPL) - [ ] Executar H2 - Scheduled Tasks com ações suspeitas - [ ] Executar H3 - Serviços Windows em caminhos não-padrão - [ ] Executar H4 - WMI Event Subscriptions (Sysmon 19/20/21) - [ ] Executar H5 - Criação de contas e adição a grupos privilegiados - [ ] Executar H6 - COM Object Hijacking via HKCU - [ ] Coletar Autoruns de endpoints com alertas para análise forense complementar ### Documentação - [ ] Registrar cada hipótese com resultado (TP/FP/Inconclusivo) - [ ] Para cada TP: iniciar processo de IR, isolar endpoint, preservar evidências - [ ] Documentar falsos positivos com justificativa para refinar queries - [ ] Atualizar exclusões de baseline no SIEM com novos softwares legítimos identificados - [ ] Criar detection rule permanente para padrões de TP confirmados --- ## Referências - [[t1547-boot-or-logon-autostart-execution|T1547 - Boot or Logon Autostart Execution]] - técnica MITRE ATT&CK - [[t1547-001-registry-run-keys|T1547.001 - Registry Run Keys]] - sub-técnica MITRE ATT&CK - [[t1053-scheduled-task-job|T1053 - Scheduled Task/Job]] - técnica MITRE ATT&CK - [[t1053-005-scheduled-task|T1053.005 - Scheduled Task (Windows)]] - sub-técnica MITRE ATT&CK - [[t1543-003-windows-service|T1543.003 - Windows Service]] - sub-técnica MITRE ATT&CK - [[t1546-event-triggered-execution|T1546 - Event Triggered Execution]] - técnica MITRE ATT&CK - [[t1098-account-manipulation|T1098 - Account Manipulation]] - técnica MITRE ATT&CK - [[t1136-create-account|T1136 - Create Account]] - técnica MITRE ATT&CK - [[t1505-003-web-shell|T1505.003 - Web Shell]] - técnica MITRE ATT&CK - [[s0531-grandoreiro]] - trojan bancário brasileiro com DLL hijacking persistente - [[mekotio]] - família de trojan bancário brasileiro com Run Key via AutoIt - [[g0016-apt29]] - grupo APT conhecido pelo uso de WMI subscriptions e COM hijacking - [[g0096-apt41]] - grupo dual-espionagem/crime com uso extensivo de serviços Windows como backdoor - [[hunting-lateral-movement]] - playbook relacionado (fase seguinte à persistência) - [[m1018-user-account-management|M1018 - User Account Management]] - mitigação MITRE ATT&CK - [[m1022-restrict-file-and-directory-permissions|M1022 - Restrict File Permissions]] - mitigação MITRE ATT&CK - [Microsoft - Sysinternals Autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns) - [JPCERT - Detecting Malware with WMI](https://www.jpcert.or.jp/english/pub/sr/20170612ac-ir_research_en.pdf) - [Velociraptor Persistence Artifacts](https://docs.velociraptor.app/artifact_references/pages/windows.persistence/) --- *Última revisão: 2026-03-26 | Próxima revisão recomendada: 2026-09-26*