Lab 11.1: Análise de Memória dos Processos
Objetivos de Aprendizagem
Ao final deste laboratório, você será capaz de:
- Utilizar as ferramentas Sysinternals para analisar a memória
- Compreender o Working Set e os diferentes tipos de memória
- Identificar anomalias de memória de um processo
- Detectar processos suspeitos pelo seu comportamento de memória
Duração Estimada
45 minutos
Pré-requisitos
- VM Windows 10/11
- Ferramentas Sysinternals (Process Explorer, VMMap, RAMMap)
- Direitos de administrador
Contexto Profissional
A análise de memória é utilizada para:
- Diagnosticar vazamentos de memória
- Identificar malwares fileless
- Analisar o desempenho de aplicações
- Forense e investigação de incidentes
Parte 1: Visão Geral com o Gerenciador de Tarefas
Etapa 1.1: Abrir o Gerenciador de Tarefas
Ctrl+Shift+Esc
Vá na aba Desempenho > Memória
Etapa 1.2: Compreender as métricas
| Métrica | Descrição |
|---|---|
| Em uso | RAM atualmente utilizada |
| Disponível | RAM livre + em standby |
| Confirmada | Memória "prometida" (pode ser > RAM) |
| Em cache | Dados em cache para acesso rápido |
| Paginada | No arquivo de paginação em disco |
| Não-paginada | Sempre na RAM (drivers) |
Etapa 1.3: Visão por processo
Aba Detalhes > Clique direito nas colunas > Selecionar colunas
Adicione:
- Working set (memória)
- Memória (conjunto de trabalho privado)
- Memória (tamanho de confirmação)
Pergunta 1: Qual processo utiliza mais memória no seu sistema?
Parte 2: Process Explorer Avançado
Etapa 2.1: Baixar e iniciar
# Baixar Sysinternals Suite se ainda não tiver feito
# https://docs.microsoft.com/en-us/sysinternals/downloads/
# Iniciar Process Explorer como admin
.\procexp64.exe
Etapa 2.2: Configurar as colunas de memória
- View > Select Columns...
- Aba Process Memory, adicione:
- Working Set
- Private Bytes
- Virtual Size
- Peak Working Set
- Page Faults
Etapa 2.3: Analisar um processo
- Selecione um processo (ex:
explorer.exe) - Clique direito > Properties
- Aba Performance
Observe:
- Working Set: Memória em RAM atualmente
- Private Bytes: Memória exclusiva do processo
- Virtual Size: Espaço total de endereçamento
Pergunta 2: Qual a diferença entre Working Set e Private Bytes?
Etapa 2.4: Ver as DLLs carregadas
- View > Show Lower Pane
- View > Lower Pane View > DLLs
- Selecione um processo
Pergunta 3: Quantas DLLs estão carregadas em explorer.exe?
Parte 3: VMMap para Análise Detalhada
Etapa 3.1: Iniciar o VMMap
vmmap64.exe
Selecione um processo para analisar (ex: notepad.exe - inicie-o antes).
Etapa 3.2: Compreender a visualização
O VMMap exibe o espaço de endereçamento completo:
| Tipo | Cor | Descrição |
|---|---|---|
| Image | Amarelo | Arquivos executáveis/DLLs |
| Mapped File | Laranja | Arquivos mapeados em memória |
| Shareable | Verde | Memória compartilhável |
| Heap | Vermelho | Heap do processo |
| Stack | Violeta | Pilhas das threads |
| Private Data | Azul | Dados privados |
| Free | Branco | Não alocado |
Etapa 3.3: Identificar as regiões
- Clique em uma região no gráfico
- Veja os detalhes na parte inferior
- Anote o endereço, tamanho, proteção
Proteção de memória:
R: LeituraW: EscritaX: ExecuçãoG: Guard page
Etapa 3.4: Procurar anomalias
Sinais de alerta:
- RWX: Região legível, gravável E executável (suspeito!)
- Heap muito grande: Possível vazamento de memória
- Private Data inexplicado: Possível injeção
# Script para detectar regiões RWX suspeitas
# (Necessita ferramentas específicas como WinDbg)
Pergunta 4: Existem regiões RWX no notepad.exe? Se sim, quais?
Parte 4: RAMMap para Visão Global
Etapa 4.1: Iniciar o RAMMap
rammap64.exe
Inicie como administrador.
Etapa 4.2: Visão geral
Aba Use Counts:
| Tipo | Descrição |
|---|---|
| Process Private | Memória exclusiva dos processos |
| Mapped File | Arquivos mapeados |
| Shareable | Memória compartilhável |
| Page Table | Tabelas de paginação |
| Nonpaged Pool | Pool do kernel não paginável |
| Driver Locked | Travada por drivers |
| Standby | Em cache, liberada se necessário |
| Modified | Modificada, ainda não escrita em disco |
Etapa 4.3: Aba File Summary
Mostra quais arquivos estão mapeados em memória.
Pergunta 5: Quais arquivos consomem mais RAM em cache?
Etapa 4.4: Esvaziar o cache
Menu Empty > Empty Standby List
Atenção: Use com cautela em produção!
Parte 5: Detecção de Anomalias
Etapa 5.1: Script de detecção
# Script de análise de memória básico
Write-Host "=== ANÁLISE DE MEMÓRIA DO SISTEMA ===" -ForegroundColor Cyan
# Top 10 processos por Working Set
Write-Host "`n[Top 10 Working Set]" -ForegroundColor Yellow
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 |
Format-Table Name, Id, @{N='WorkingSet(MB)';E={[math]::Round($_.WorkingSet64/1MB,2)}}
# Top 10 por Private Bytes
Write-Host "[Top 10 Private Bytes]" -ForegroundColor Yellow
Get-Process | Sort-Object PrivateMemorySize64 -Descending | Select-Object -First 10 |
Format-Table Name, Id, @{N='PrivateBytes(MB)';E={[math]::Round($_.PrivateMemorySize64/1MB,2)}}
# Processos com razão suspeita (Virtual >> Working Set)
Write-Host "[Razão suspeita Virtual/Working]" -ForegroundColor Yellow
Get-Process | Where-Object {
$_.WorkingSet64 -gt 10MB -and
$_.VirtualMemorySize64 -gt ($_.WorkingSet64 * 100)
} | Format-Table Name, Id,
@{N='Working(MB)';E={[math]::Round($_.WorkingSet64/1MB,2)}},
@{N='Virtual(MB)';E={[math]::Round($_.VirtualMemorySize64/1MB,2)}}
# Info geral do sistema
Write-Host "[Info Sistema]" -ForegroundColor Yellow
$os = Get-CimInstance Win32_OperatingSystem
Write-Host " RAM Total: $([math]::Round($os.TotalVisibleMemorySize/1MB,2)) GB"
Write-Host " RAM Livre: $([math]::Round($os.FreePhysicalMemory/1MB,2)) GB"
Write-Host " Commit Total: $([math]::Round($os.TotalVirtualMemorySize/1MB,2)) GB"
Etapa 5.2: Indicadores de malware
Sinais suspeitos na memória:
- Processo com nome padrão mas localização incomum
- Regiões RWX (heap/stack executável)
- Injeção em processos legítimos
- Processo "oco" (hollow process)
# Verificar os caminhos dos processos
Get-Process | Where-Object { $_.Path } | ForEach-Object {
$expectedPaths = @("C:\Windows", "C:\Program Files", "C:\Program Files (x86)")
$isExpected = $expectedPaths | ForEach-Object { $proc.Path -like "$_*" } | Where-Object { $_ }
if (-not $isExpected -and $_.Name -in @("svchost", "csrss", "services", "lsass")) {
Write-Host "[SUSPEITO] $($_.Name) - Path: $($_.Path)" -ForegroundColor Red
}
}
Pergunta 6: Você encontrou processos suspeitos?
Parte 6: Exercício Prático
Etapa 6.1: Criar um vazamento de memória (simulação)
# Script que simula um vazamento de memória
# EXECUTAR EM UMA VM DE TESTE
$leak = @()
Write-Host "Simulando vazamento de memória..." -ForegroundColor Yellow
Write-Host "Pressione Ctrl+C para parar"
while ($true) {
$leak += [byte[]]::new(10MB) # Aloca 10MB
$totalMB = $leak.Count * 10
Write-Host "Memória alocada: $totalMB MB" -ForegroundColor Gray
Start-Sleep -Seconds 1
if ($totalMB -ge 500) {
Write-Host "Limite atingido, parando." -ForegroundColor Red
break
}
}
# Liberar
$leak = $null
[System.GC]::Collect()
Write-Host "Memória liberada." -ForegroundColor Green
Etapa 6.2: Observar com Process Explorer
- Execute o script de vazamento
- Observe o processo
powershell.exeno Process Explorer - Note a evolução do Working Set e Private Bytes
Entregáveis
-
Capturas de tela:
- Gerenciador de Tarefas aba Memória
- Process Explorer com colunas de memória
- VMMap de um processo
- RAMMap visão geral
-
Respostas às 6 perguntas
-
Relatório de análise (1-2 páginas):
- Processos mais consumidores
- Anomalias detectadas
- Recomendações
Critérios de Avaliação
| Critério | Pontos |
|---|---|
| Uso do Gerenciador de Tarefas | 15% |
| Process Explorer | 25% |
| VMMap | 25% |
| RAMMap | 15% |
| Script de detecção | 20% |
Comandos de Referência
# Memória dos processos
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10
# Info do sistema
Get-CimInstance Win32_OperatingSystem | Select-Object *Memory*
# Page file
Get-WmiObject Win32_PageFileUsage
Solução de Problemas
Process Explorer não inicia
- Execute como administrador
- Verifique se não está bloqueado pelo antivírus
VMMap mostra pouca informação
- Selecione o processo na lista
- Certifique-se de que o processo ainda existe
Lab desenvolvido no âmbito do curso Sistemas Operacionais - MÓDULO 11