Pular para o conteúdo principal

Lab 6.1: Análise de Rede no Windows

Objetivos de Aprendizagem​

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

  • Analisar as conexões de rede ativas
  • Identificar os processos que comunicam na rede
  • Detectar conexões suspeitas
  • Utilizar as ferramentas de rede do Windows

Duração Estimada​

45 minutos

Pré-requisitos​

  • VM Windows 10/11
  • Permissões de administrador
  • Conhecimentos básicos de rede

Contexto Profissional​

A análise de rede é essencial para:

  • Detecção de intrusões
  • Identificação de malwares
  • Auditoria de segurança
  • Troubleshooting

Parte 1: Comandos Básicos​

Etapa 1.1: netstat​

:: Conexões estabelecidas
netstat -an | findstr ESTABLISHED

:: Com PID dos processos
netstat -ano

:: Com nomes dos processos (necessita admin)
netstat -anob

:: Estatísticas por protocolo
netstat -s

Etapa 1.2: PowerShell moderno​

# Conexões TCP
Get-NetTCPConnection

# Apenas conexões estabelecidas
Get-NetTCPConnection -State Established

# Com detalhes do processo
Get-NetTCPConnection -State Established |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort,
@{N='Process';E={(Get-Process -Id $_.OwningProcess).Name}}, OwningProcess |
Format-Table -AutoSize

# Conexões UDP
Get-NetUDPEndpoint

Etapa 1.3: Portas em escuta​

# Portas TCP em escuta
Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort,
@{N='Process';E={(Get-Process -Id $_.OwningProcess).Name}} |
Sort-Object LocalPort

# Verificar uma porta específica
Get-NetTCPConnection -LocalPort 445

Pergunta 1: Quais portas estão em escuta no seu sistema?


Parte 2: Análise de Processos de Rede​

Etapa 2.1: Identificar os processos​

# Processos com conexões de rede
$connections = Get-NetTCPConnection -State Established
$processes = $connections | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
Process = $proc.Name
PID = $_.OwningProcess
LocalPort = $_.LocalPort
RemoteAddress = $_.RemoteAddress
RemotePort = $_.RemotePort
Path = $proc.Path
}
}
$processes | Format-Table -AutoSize

Etapa 2.2: Agrupar por processo​

# Número de conexões por processo
Get-NetTCPConnection -State Established |
Group-Object OwningProcess |
ForEach-Object {
$proc = Get-Process -Id $_.Name -ErrorAction SilentlyContinue
[PSCustomObject]@{
Process = $proc.Name
Connections = $_.Count
Path = $proc.Path
}
} | Sort-Object Connections -Descending

Etapa 2.3: Processos suspeitos​

# Processos não-sistema com conexões
$systemPaths = @("C:\Windows", "C:\Program Files", "C:\Program Files (x86)")

Get-NetTCPConnection -State Established | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
if ($proc.Path) {
$isSystem = $false
foreach ($path in $systemPaths) {
if ($proc.Path -like "$path*") { $isSystem = $true; break }
}
if (-not $isSystem) {
[PSCustomObject]@{
Process = $proc.Name
Remote = "$($_.RemoteAddress):$($_.RemotePort)"
Path = $proc.Path
}
}
}
} | Format-Table -AutoSize

Pergunta 2: Existem processos não-sistema com conexões de rede?


Parte 3: Detecção de Conexões Suspeitas​

Etapa 3.1: Portas suspeitas​

# Portas frequentemente usadas por malwares/C2
$suspectPorts = @(4444, 5555, 6666, 1337, 31337, 8080, 8443, 9999)

$suspectConnections = Get-NetTCPConnection | Where-Object {
$_.RemotePort -in $suspectPorts -or $_.LocalPort -in $suspectPorts
}

if ($suspectConnections) {
Write-Host "[ALERTA] Conexões em portas suspeitas:" -ForegroundColor Red
$suspectConnections | Select-Object LocalPort, RemoteAddress, RemotePort, State,
@{N='Process';E={(Get-Process -Id $_.OwningProcess).Name}} |
Format-Table -AutoSize
} else {
Write-Host "[OK] Nenhuma conexão em portas suspeitas" -ForegroundColor Green
}

Etapa 3.2: Conexões para países de risco​

# Nota: Necessita de uma base GeoIP para precisão
# Aqui detectamos IPs não-RFC1918 (públicos)

$publicConnections = Get-NetTCPConnection -State Established | Where-Object {
$ip = $_.RemoteAddress
$ip -notmatch "^(10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|127\.|::1|0\.0\.0\.0)"
}

Write-Host "Conexões para IPs públicos:" -ForegroundColor Yellow
$publicConnections | Select-Object RemoteAddress, RemotePort,
@{N='Process';E={(Get-Process -Id $_.OwningProcess).Name}} |
Format-Table -AutoSize

Etapa 3.3: Script de detecção completo​

# Script de detecção de conexões suspeitas
Write-Host "=== ANÁLISE DE REDE DE SEGURANÇA ===" -ForegroundColor Cyan

$alerts = @()

# 1. Portas suspeitas
$suspectPorts = @(4444, 5555, 6666, 1337, 31337, 8080, 8443, 9999, 1234)
Get-NetTCPConnection | Where-Object {
$_.RemotePort -in $suspectPorts -or $_.LocalPort -in $suspectPorts
} | ForEach-Object {
$alerts += [PSCustomObject]@{
Type = "Porta Suspeita"
Detail = "Porta $($_.RemotePort) ou $($_.LocalPort)"
Remote = $_.RemoteAddress
Process = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name
}
}

# 2. Processos incomuns com rede
$normalNetworkProcs = @("svchost", "System", "chrome", "firefox", "msedge",
"explorer", "OneDrive", "Teams", "Outlook", "Code")

Get-NetTCPConnection -State Established | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
if ($proc.Name -notin $normalNetworkProcs -and $proc.Name) {
$alerts += [PSCustomObject]@{
Type = "Processo Incomum"
Detail = $proc.Name
Remote = "$($_.RemoteAddress):$($_.RemotePort)"
Process = $proc.Name
}
}
}

# 3. PowerShell com conexões
Get-NetTCPConnection -State Established | Where-Object {
(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name -eq "powershell"
} | ForEach-Object {
$alerts += [PSCustomObject]@{
Type = "PowerShell na Rede"
Detail = "PowerShell possui conexões ativas"
Remote = "$($_.RemoteAddress):$($_.RemotePort)"
Process = "powershell"
}
}

# Relatório
Write-Host "`n=== RESULTADOS ===" -ForegroundColor Yellow
if ($alerts.Count -eq 0) {
Write-Host "[OK] Nenhuma anomalia detectada" -ForegroundColor Green
} else {
Write-Host "[!] $($alerts.Count) anomalia(s) detectada(s):" -ForegroundColor Red
$alerts | Format-Table -AutoSize
}

# Resumo
Write-Host "`n=== ESTATÍSTICAS ===" -ForegroundColor Cyan
$established = (Get-NetTCPConnection -State Established).Count
$listening = (Get-NetTCPConnection -State Listen).Count
Write-Host "Conexões estabelecidas: $established"
Write-Host "Portas em escuta: $listening"

Parte 4: Configuração do Firewall​

Etapa 4.1: Estado do firewall​

# Status dos perfis
Get-NetFirewallProfile | Select-Object Name, Enabled

# Regras ativas (entrada)
Get-NetFirewallRule -Direction Inbound -Enabled True |
Select-Object DisplayName, Action, Profile |
Format-Table -AutoSize

Etapa 4.2: Regras para uma porta​

# Regras para a porta 445 (SMB)
Get-NetFirewallPortFilter -Protocol TCP | Where-Object LocalPort -eq 445 |
Get-NetFirewallRule |
Select-Object DisplayName, Enabled, Action

Etapa 4.3: Criar uma regra de bloqueio​

# Bloquear conexões de saída em uma porta suspeita
New-NetFirewallRule -DisplayName "Block Suspicious Port 4444" `
-Direction Outbound `
-LocalPort 4444 `
-Protocol TCP `
-Action Block

# Verificar
Get-NetFirewallRule -DisplayName "Block Suspicious*"

# Remover (após o lab)
# Remove-NetFirewallRule -DisplayName "Block Suspicious Port 4444"

Parte 5: Exercício Prático​

Etapa 5.1: Auditoria de rede completa​

Crie um script audit_rede.ps1:

# Auditoria de rede completa
$report = @()

Write-Host "=== AUDITORIA DE REDE ===" -ForegroundColor Cyan
Write-Host "Data: $(Get-Date)"
Write-Host ""

# 1. Interfaces de rede
Write-Host "[1/4] Interfaces de rede..." -ForegroundColor Yellow
Get-NetAdapter | Where-Object Status -eq "Up" |
Select-Object Name, InterfaceDescription, LinkSpeed |
Format-Table -AutoSize

# 2. Configuração IP
Write-Host "[2/4] Configuração IP..." -ForegroundColor Yellow
Get-NetIPAddress -AddressFamily IPv4 |
Where-Object {$_.IPAddress -ne "127.0.0.1"} |
Select-Object InterfaceAlias, IPAddress, PrefixLength |
Format-Table -AutoSize

# 3. Portas em escuta
Write-Host "[3/4] Portas em escuta..." -ForegroundColor Yellow
Get-NetTCPConnection -State Listen |
Select-Object LocalPort, @{N='Process';E={(Get-Process -Id $_.OwningProcess).Name}} |
Sort-Object LocalPort -Unique |
Format-Table -AutoSize

# 4. Conexões estabelecidas
Write-Host "[4/4] Top 10 conexões..." -ForegroundColor Yellow
Get-NetTCPConnection -State Established |
Select-Object -First 10 LocalPort, RemoteAddress, RemotePort,
@{N='Process';E={(Get-Process -Id $_.OwningProcess).Name}} |
Format-Table -AutoSize

Write-Host "`n=== FIM DA AUDITORIA ===" -ForegroundColor Cyan

Entregáveis​

  1. Respostas às 2 perguntas

  2. Capturas de tela:

    • Lista de conexões estabelecidas
    • Portas em escuta
    • Script de detecção executado
  3. Script de auditoria personalizado

  4. Relatório (1 página):

    • Conexões identificadas
    • Anomalias detectadas
    • Recomendações

Critérios de Avaliação​

CritérioPontos
Comandos básicos20%
Análise de processos25%
Detecção de suspeitas30%
Script de auditoria25%

Comandos de Referência​

# Conexões
Get-NetTCPConnection
Get-NetUDPEndpoint
netstat -ano

# Filtragem
-State Established, Listen
-LocalPort 443
-RemotePort 80

# Firewall
Get-NetFirewallProfile
Get-NetFirewallRule
New-NetFirewallRule

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