ECSS - Modulo 12

Baseline de trafego normal

O aluno vai identificar o comportamento normal da rede do seu proprio student antes de investigar eventos suspeitos. O lab usa Windows 11, Windows Server e Ubuntu Server, sem criar recursos extras.

Cenario

A equipe de seguranca recebeu a tarefa de documentar o trafego esperado em uma pequena rede corporativa. Antes de detectar anomalias, e necessario saber quais conexoes sao normais, quais portas sao usadas e quais sistemas falam entre si.

Cada aluno executa o lab apenas no proprio ambiente. Troque X pelo numero do seu student. Exemplo: student01 usa 10.50.1.10, 10.50.1.11 e 10.50.1.12.

Resumo

Duracao
35 a 50 min
VM principal
Windows 11
Alvos
WS e Ubuntu
Ferramentas
PowerShell, netstat, pktmon
Custo extra
Nenhum

Objetivos do lab

  • Identificar os IPs principais do ambiente do aluno.
  • Validar conectividade esperada entre Windows 11, Windows Server e Ubuntu.
  • Registrar portas, protocolos, origem e destino do trafego normal.
  • Gerar evidencias com comandos nativos do Windows.
  • Criar uma tabela de baseline para comparar com eventos suspeitos.

Antes de comecar

Use somente os IPs do seu proprio student. Nao execute varreduras em IPs publicos, redes de outros alunos ou sistemas fora do laboratorio.

Maquina IP esperado Funcao
Windows Server 10.50.X.10 Servidor e dominio do student
Windows 11 10.50.X.11 Estacao do aluno
Ubuntu Server 10.50.X.12 Servidor Linux, Docker, Wazuh ou servicos web

1. Criar pasta de evidencias

No Windows 11, abra PowerShell e crie uma pasta para guardar os resultados.

$Student = "student01"
$Evidence = "C:\ECSS-M12-Baseline"
New-Item -ItemType Directory -Path $Evidence -Force | Out-Null
"Baseline de trafego - $Student" | Out-File "$Evidence\00-resumo.txt" -Encoding utf8

Altere student01 para o seu ambiente, se necessario.

2. Confirmar identidade e IP da estacao

Registre o nome da maquina, usuario e configuracao IP do Windows 11.

hostname | Out-File "$Evidence\01-hostname.txt" -Encoding utf8
whoami | Out-File "$Evidence\02-whoami.txt" -Encoding utf8
ipconfig /all | Out-File "$Evidence\03-ipconfig.txt" -Encoding utf8
Get-NetIPConfiguration | Format-List | Out-File "$Evidence\04-netipconfiguration.txt" -Encoding utf8

Anote: IP da estacao, gateway, DNS e dominio ou grupo de trabalho.

3. Definir os alvos do baseline

Defina os IPs do seu student para os testes.

$StudentNumber = 1
$WsIp = "10.50.$StudentNumber.10"
$W11Ip = "10.50.$StudentNumber.11"
$UbuntuIp = "10.50.$StudentNumber.12"

"Windows Server: $WsIp" | Out-File "$Evidence\05-alvos.txt" -Encoding utf8
"Windows 11: $W11Ip" | Add-Content "$Evidence\05-alvos.txt" -Encoding utf8
"Ubuntu Server: $UbuntuIp" | Add-Content "$Evidence\05-alvos.txt" -Encoding utf8
Get-Content "$Evidence\05-alvos.txt"

Para student02 use $StudentNumber = 2. Para student08 use $StudentNumber = 8.

4. Validar conectividade normal

Teste conexoes esperadas. Nem todos os servicos precisam estar abertos, mas o resultado deve ser registrado.

$Tests = @(
    @{ Name = "RDP Windows Server"; Host = $WsIp; Port = 3389 },
    @{ Name = "SSH Ubuntu"; Host = $UbuntuIp; Port = 22 },
    @{ Name = "HTTPS Ubuntu"; Host = $UbuntuIp; Port = 443 },
    @{ Name = "Portainer Ubuntu"; Host = $UbuntuIp; Port = 9443 },
    @{ Name = "DNS publico"; Host = "1.1.1.1"; Port = 53 },
    @{ Name = "HTTPS Internet"; Host = "www.microsoft.com"; Port = 443 }
)

$Results = foreach ($Test in $Tests) {
    $Ok = Test-NetConnection $Test.Host -Port $Test.Port -InformationLevel Quiet
    [pscustomobject]@{
        Name = $Test.Name
        Host = $Test.Host
        Port = $Test.Port
        Result = $Ok
    }
}

$Results | Format-Table -AutoSize
$Results | Export-Csv "$Evidence\06-connectivity.csv" -NoTypeInformation -Encoding utf8

Resultado esperado: voce tera uma lista clara de quais conexoes fazem parte do comportamento normal.

5. Gerar trafego normal controlado

Execute atividades comuns para criar eventos normais.

Resolve-DnsName microsoft.com | Out-File "$Evidence\07-dns-microsoft.txt" -Encoding utf8
Resolve-DnsName google.com | Out-File "$Evidence\08-dns-google.txt" -Encoding utf8
curl.exe -I https://www.microsoft.com | Out-File "$Evidence\09-http-header-microsoft.txt" -Encoding utf8
Test-NetConnection $WsIp -Port 3389 | Out-File "$Evidence\10-rdp-ws.txt" -Encoding utf8
Test-NetConnection $UbuntuIp -Port 22 | Out-File "$Evidence\11-ssh-ubuntu.txt" -Encoding utf8
Test-NetConnection $UbuntuIp -Port 9443 | Out-File "$Evidence\12-portainer-ubuntu.txt" -Encoding utf8

Se uma porta retornar TcpTestSucceeded: False, registre como parte da baseline. Isso nao e erro automaticamente.

6. Coletar conexoes ativas

Liste conexoes TCP e cache DNS apos gerar o trafego.

Get-NetTCPConnection |
    Sort-Object State,RemoteAddress,RemotePort |
    Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess |
    Out-File "$Evidence\13-nettcpconnection.txt" -Encoding utf8

netstat -ano | Out-File "$Evidence\14-netstat.txt" -Encoding utf8
Get-DnsClientCache | Out-File "$Evidence\15-dns-cache.txt" -Encoding utf8

Anote: quais portas remotas aparecem com mais frequencia.

7. Captura leve com pktmon

Se estiver em PowerShell como administrador, use o pktmon para capturar uma amostra curta.

pktmon filter remove
pktmon filter add -i $WsIp
pktmon filter add -i $UbuntuIp
pktmon start --capture --pkt-size 0 --file-name "$Evidence\baseline.etl"

Test-NetConnection $WsIp -Port 3389 | Out-Null
Test-NetConnection $UbuntuIp -Port 22 | Out-Null
curl.exe -I https://www.microsoft.com | Out-Null

pktmon stop
pktmon format "$Evidence\baseline.etl" -o "$Evidence\baseline.txt"
Get-Content "$Evidence\baseline.txt" -TotalCount 80

Se o comando pktmon nao estiver disponivel, pule esta etapa e use as evidencias dos passos anteriores.

8. Montar tabela de baseline

Preencha uma tabela com as comunicacoes observadas. Use a tabela abaixo como modelo.

Origem Destino Porta Protocolo Esperado? Justificativa
Windows 11 Windows Server 3389 TCP/RDP Sim Acesso remoto ao servidor do lab
Windows 11 Ubuntu Server 22 TCP/SSH Sim Administracao remota Linux
Windows 11 Internet 443 TCP/HTTPS Sim Navegacao e atualizacoes
$Baseline = @(
    [pscustomobject]@{ Origem="Windows 11"; Destino="Windows Server"; Porta=3389; Protocolo="TCP/RDP"; Esperado="Sim"; Justificativa="Acesso remoto ao servidor" },
    [pscustomobject]@{ Origem="Windows 11"; Destino="Ubuntu Server"; Porta=22; Protocolo="TCP/SSH"; Esperado="Sim"; Justificativa="Administracao Linux" },
    [pscustomobject]@{ Origem="Windows 11"; Destino="Internet"; Porta=443; Protocolo="TCP/HTTPS"; Esperado="Sim"; Justificativa="Navegacao" }
)
$Baseline | Export-Csv "$Evidence\16-baseline.csv" -NoTypeInformation -Encoding utf8

9. Evidencias para entregar

  • Arquivo 06-connectivity.csv.
  • Arquivo 13-nettcpconnection.txt ou 14-netstat.txt.
  • Tabela 16-baseline.csv preenchida com pelo menos cinco comunicacoes.
  • Resposta curta: por que uma baseline ajuda a detectar incidentes?

Perguntas de revisao

  1. Qual a diferenca entre trafego esperado e trafego permitido?
  2. Por que uma conexao para porta aberta nao significa necessariamente ataque?
  3. Que evidencias voce usaria para diferenciar navegacao normal de exfiltracao?
  4. Quais portas do seu student devem aparecer na baseline?