Pular para o conteúdo principal

Lab 11.2: Detecção de Malwares por Análise de Memória

Objetivos de Aprendizagem​

Ao final deste laboratório, você será capaz de:

  • Identificar técnicas de malware em memória
  • Utilizar ferramentas de detecção de anomalias
  • Compreender a injeção de processos
  • Analisar um dump de memória básico
  • Reconhecer indicadores de comprometimento em memória

Duração Estimada​

55 minutos

Pré-requisitos​

  • Lab 11.1 completo
  • VM Windows 10/11 isolada
  • Process Explorer, Process Monitor
  • Direitos de administrador

Contexto Profissional​

A detecção de malwares em memória é crítica porque:

  • Malwares "fileless" não escrevem no disco
  • A análise de memória revela comportamentos ativos
  • É uma competência essencial em resposta a incidentes

AVISO​

Este laboratório utiliza técnicas apenas para fins educativos. Execute somente em VMs isoladas e de teste.


Parte 1: Técnicas de Malware em Memória​

Etapa 1.1: Visão Geral​

TécnicaDescriçãoDetecção
Process InjectionInjetar código em outro processoRegiões RWX anormais
DLL InjectionCarregar uma DLL maliciosaDLL não assinada/desconhecida
Process HollowingSubstituir o código de um processoImagem não corresponde ao disco
Reflective LoadingCarregar DLL sem passar pela APIDLL sem arquivo correspondente
Fileless MalwareCódigo apenas em memóriaScripts codificados, PowerShell suspeito

Etapa 1.2: Indicadores-chave​

Sinais de alerta:

  • Regiões de memória RWX (Read-Write-Execute)
  • Processos do sistema iniciados de local incorreto
  • DLLs não assinadas em processos sensíveis
  • Threads sem módulo associado
  • Conexões de rede anormais de processos legítimos

Parte 2: Detecção com Process Explorer​

Etapa 2.1: Configuração avançada​

  1. Inicie o Process Explorer como administrador
  2. Options > Verify Image Signatures
  3. View > Select Columns > Adicione "Verified Signer"

Etapa 2.2: Identificar processos não assinados​

Os processos em rosa/violeta possuem assinatura não verificada.

Processos que DEVEM ser assinados pela Microsoft:

  • svchost.exe
  • csrss.exe
  • lsass.exe
  • services.exe
  • winlogon.exe
  • explorer.exe

Pergunta 1: Todos os seus processos do sistema estão assinados pela Microsoft?

Etapa 2.3: Verificar os caminhos​

Processos legítimos e seus caminhos:
- svchost.exe -> C:\Windows\System32\
- csrss.exe -> C:\Windows\System32\
- lsass.exe -> C:\Windows\System32\
- services.exe -> C:\Windows\System32\
- explorer.exe -> C:\Windows\

Script de verificação:

# Verificar os caminhos dos processos críticos
$criticalProcesses = @{
"svchost" = "C:\Windows\System32\svchost.exe"
"csrss" = "C:\Windows\System32\csrss.exe"
"lsass" = "C:\Windows\System32\lsass.exe"
"services" = "C:\Windows\System32\services.exe"
"winlogon" = "C:\Windows\System32\winlogon.exe"
}

Write-Host "=== VERIFICAÇÃO PROCESSOS CRÍTICOS ===" -ForegroundColor Cyan

foreach ($proc in $criticalProcesses.Keys) {
$running = Get-Process -Name $proc -ErrorAction SilentlyContinue

foreach ($p in $running) {
$expectedPath = $criticalProcesses[$proc]
$actualPath = $p.Path

if ($actualPath -ne $expectedPath) {
Write-Host "[ALERTA] $proc" -ForegroundColor Red
Write-Host " Esperado: $expectedPath"
Write-Host " Encontrado: $actualPath"
} else {
Write-Host "[OK] $proc - $actualPath" -ForegroundColor Green
}
}
}

Pergunta 2: O script detecta alguma anomalia?


Parte 3: Detecção de DLL Injection​

Etapa 3.1: Listar as DLLs de um processo​

Process Explorer:

  1. Selecione um processo
  2. View > Show Lower Pane
  3. View > Lower Pane View > DLLs

PowerShell:

# Listar as DLLs de um processo
$proc = Get-Process notepad
$proc.Modules | Select-Object ModuleName, FileName, Size

# Procurar DLLs suspeitas (fora de System32 ou Program Files)
$proc.Modules | Where-Object {
$_.FileName -notlike "C:\Windows\*" -and
$_.FileName -notlike "C:\Program Files*"
} | Select-Object ModuleName, FileName

Etapa 3.2: DLLs suspeitas a procurar​

IndicadorDescrição
DLL em TempLocalização anormal
DLL em AppDataPotencialmente maliciosa
DLL não assinadaFalta de verificação
Nome aleatórioPossível malware
Tamanho muito pequenoStub/loader

Etapa 3.3: Script de detecção de DLL​

# Detecção de DLLs suspeitas
Write-Host "=== ANÁLISE DLLs SUSPEITAS ===" -ForegroundColor Cyan

$suspiciousPaths = @(
"*\Temp\*",
"*\AppData\Local\Temp\*",
"*\Downloads\*",
"*\Desktop\*"
)

Get-Process | Where-Object { $_.Modules } | ForEach-Object {
$procName = $_.Name
$_.Modules | ForEach-Object {
$dll = $_
foreach ($path in $suspiciousPaths) {
if ($dll.FileName -like $path) {
Write-Host "[SUSPEITO] $procName carregou: $($dll.FileName)" -ForegroundColor Red
}
}
}
}

Write-Host "`nAnálise finalizada." -ForegroundColor Green

Pergunta 3: Alguma DLL suspeita foi carregada?


Parte 4: Detecção de Process Hollowing​

Etapa 4.1: Conceito​

Process Hollowing:

  1. Criar um processo legítimo em modo suspenso
  2. Esvaziar ("hollow") sua memória
  3. Injetar código malicioso
  4. Retomar a execução

Resultado: O processo parece legítimo, mas executa código malicioso.

Etapa 4.2: Indicadores de detecção​

IndicadorDescrição
Imagem ≠ MemóriaO código em memória difere do arquivo
PEB modificadoProcess Environment Block alterado
Seções anormaisTamanho/permissões inesperadas

Etapa 4.3: Verificação básica​

# Comparar o tamanho da imagem em memória vs no disco
# Necessita ferramentas avançadas para detecção real

Get-Process | Where-Object { $_.Path } | ForEach-Object {
$proc = $_
try {
$fileSize = (Get-Item $proc.Path -ErrorAction Stop).Length
$memorySize = $proc.WorkingSet64

# Ratio muito alto pode indicar anomalia
$ratio = [math]::Round($memorySize / $fileSize, 2)

if ($ratio -gt 100) {
Write-Host "[INFO] $($proc.Name) - Ratio mem/file: $ratio" -ForegroundColor Yellow
}
} catch {}
}

Parte 5: Análise com Process Monitor​

Etapa 5.1: Capturar a atividade​

procmon64.exe /accepteula

Etapa 5.2: Filtros úteis para detecção​

Crie filtros para detectar comportamentos suspeitos:

  1. Filter > Filter...
  2. Adicione:
    • Operation is WriteFile then Include
    • Path contains \Temp\ then Include
    • Process Name is powershell.exe then Include

Etapa 5.3: Comportamentos a observar​

OperaçãoSuspeito se...
WriteFileEm Temp com extensão .exe/.dll
CreateFileCriação em pastas do sistema
RegSetValueModificação de Run keys
CreateRemoteThreadEm outro processo
VirtualAllocExAlocação em processo remoto

Parte 6: Criar um Dump de Memória​

Etapa 6.1: Dump de um processo (método simples)​

Task Manager:

  1. Aba Detalhes
  2. Clique com o botão direito no processo
  3. "Criar arquivo de despejo"

PowerShell:

# Usar procdump (Sysinternals)
# procdump64.exe -ma <PID> dump.dmp

# Ou via comsvcs.dll (atenção: detectado por antivírus)
# Método usado por atacantes para dumpar lsass

Etapa 6.2: Onde os dumps são armazenados?​

# Local padrão
$env:LOCALAPPDATA + "\Temp"

# Listar dumps existentes
Get-ChildItem "$env:LOCALAPPDATA\Temp" -Filter "*.dmp" -ErrorAction SilentlyContinue

Etapa 6.3: Analisar um dump (básico)​

Para análise aprofundada, ferramentas como Volatility são necessárias.

Com WinDbg (se instalado):

windbg -z dump.dmp
!analyze -v
!process 0 0

Parte 7: Script de Detecção Completo​

# Script de detecção de anomalias de memória
# ==========================================

param(
[switch]$Verbose
)

Write-Host @"
=====================================
DETECÇÃO DE ANOMALIAS DE MEMÓRIA
=====================================
"@ -ForegroundColor Cyan

$alerts = @()

# 1. Verificar os caminhos dos processos críticos
Write-Host "`n[1/5] Verificação de processos críticos..." -ForegroundColor Yellow

$criticalPaths = @{
"svchost" = "C:\Windows\System32\svchost.exe"
"lsass" = "C:\Windows\System32\lsass.exe"
"csrss" = "C:\Windows\System32\csrss.exe"
"services" = "C:\Windows\System32\services.exe"
}

foreach ($name in $criticalPaths.Keys) {
Get-Process -Name $name -ErrorAction SilentlyContinue | ForEach-Object {
if ($_.Path -and $_.Path -ne $criticalPaths[$name]) {
$alerts += "[CRÍTICO] $name em caminho incorreto: $($_.Path)"
}
}
}

# 2. Procurar DLLs em locais suspeitos
Write-Host "[2/5] Análise de DLLs..." -ForegroundColor Yellow

$suspectDlls = @()
Get-Process | Where-Object { $_.Modules } | ForEach-Object {
$_.Modules | Where-Object {
$_.FileName -like "*\Temp\*" -or
$_.FileName -like "*\Downloads\*"
} | ForEach-Object {
$alerts += "[SUSPEITO] DLL suspeita: $($_.FileName)"
}
}

# 3. Processos com conexões de rede incomuns
Write-Host "[3/5] Análise de conexões..." -ForegroundColor Yellow

$networkProcs = Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
Where-Object { $_.RemoteAddress -notmatch "^(127\.|::1|0\.0\.0\.0)" }

foreach ($conn in $networkProcs) {
$proc = Get-Process -Id $conn.OwningProcess -ErrorAction SilentlyContinue
if ($proc.Name -in @("notepad", "calc", "mspaint")) {
$alerts += "[SUSPEITO] $($proc.Name) possui conexão de rede: $($conn.RemoteAddress):$($conn.RemotePort)"
}
}

# 4. PowerShell com conexões
Write-Host "[4/5] Verificação PowerShell..." -ForegroundColor Yellow

$psConnections = Get-NetTCPConnection -OwningProcess (Get-Process -Name powershell -ErrorAction SilentlyContinue).Id -ErrorAction SilentlyContinue |
Where-Object { $_.State -eq "Established" }

if ($psConnections) {
$alerts += "[INFO] PowerShell possui conexões de rede ativas"
}

# 5. Processos com memória RWX (necessita ferramentas avançadas)
Write-Host "[5/5] Verificação finalizada." -ForegroundColor Yellow

# Relatório
Write-Host "`n========== RELATÓRIO ==========" -ForegroundColor Cyan

if ($alerts.Count -eq 0) {
Write-Host "[OK] Nenhuma anomalia maior detectada" -ForegroundColor Green
} else {
Write-Host "Alertas detectados: $($alerts.Count)" -ForegroundColor Red
foreach ($alert in $alerts) {
if ($alert -match "CRÍTICO") {
Write-Host " $alert" -ForegroundColor Red
} elseif ($alert -match "SUSPEITO") {
Write-Host " $alert" -ForegroundColor Yellow
} else {
Write-Host " $alert" -ForegroundColor Gray
}
}
}

Write-Host "`n=============================" -ForegroundColor Cyan

Pergunta 4: Execute o script. Quais alertas ele retorna?


Entregáveis​

  1. Capturas de tela:

    • Process Explorer com assinaturas verificadas
    • DLLs de um processo
    • Resultado do script de detecção
  2. Respostas às 4 perguntas

  3. Relatório (2 páginas):

    • Técnicas de malware em memória
    • Métodos de detecção utilizados
    • Resultados da análise da sua VM
    • Recomendações

Critérios de Avaliação​

CritérioPontos
Process Explorer25%
Detecção de DLLs25%
Script de detecção30%
Relatório e compreensão20%

Recursos​


Lab desenvolvido no âmbito do curso Sistemas Operacionais - MÓDULO 11