Pular para o conteúdo principal

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étricaDescrição
Em usoRAM atualmente utilizada
DisponívelRAM livre + em standby
ConfirmadaMemória "prometida" (pode ser > RAM)
Em cacheDados em cache para acesso rápido
PaginadaNo arquivo de paginação em disco
Não-paginadaSempre 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​

  1. View > Select Columns...
  2. Aba Process Memory, adicione:
    • Working Set
    • Private Bytes
    • Virtual Size
    • Peak Working Set
    • Page Faults

Etapa 2.3: Analisar um processo​

  1. Selecione um processo (ex: explorer.exe)
  2. Clique direito > Properties
  3. 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​

  1. View > Show Lower Pane
  2. View > Lower Pane View > DLLs
  3. 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:

TipoCorDescrição
ImageAmareloArquivos executáveis/DLLs
Mapped FileLaranjaArquivos mapeados em memória
ShareableVerdeMemória compartilhável
HeapVermelhoHeap do processo
StackVioletaPilhas das threads
Private DataAzulDados privados
FreeBrancoNão alocado

Etapa 3.3: Identificar as regiões​

  1. Clique em uma região no gráfico
  2. Veja os detalhes na parte inferior
  3. Anote o endereço, tamanho, proteção

Proteção de memória:

  • R: Leitura
  • W: Escrita
  • X: Execução
  • G: 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:

TipoDescrição
Process PrivateMemória exclusiva dos processos
Mapped FileArquivos mapeados
ShareableMemória compartilhável
Page TableTabelas de paginação
Nonpaged PoolPool do kernel não paginável
Driver LockedTravada por drivers
StandbyEm cache, liberada se necessário
ModifiedModificada, 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​

  1. Execute o script de vazamento
  2. Observe o processo powershell.exe no Process Explorer
  3. Note a evolução do Working Set e Private Bytes

Entregáveis​

  1. Capturas de tela:

    • Gerenciador de Tarefas aba Memória
    • Process Explorer com colunas de memória
    • VMMap de um processo
    • RAMMap visão geral
  2. Respostas às 6 perguntas

  3. Relatório de análise (1-2 páginas):

    • Processos mais consumidores
    • Anomalias detectadas
    • Recomendações

Critérios de Avaliação​

CritérioPontos
Uso do Gerenciador de Tarefas15%
Process Explorer25%
VMMap25%
RAMMap15%
Script de detecção20%

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