ECSS - Modulo 14

Port scanner controlado

O aluno vai instalar ou usar ferramentas leves para identificar portas abertas apenas no proprio ambiente isolado, interpretar os resultados e gerar um relatorio simples.

Cenario

A equipe de seguranca precisa validar quais servicos estao expostos dentro do laboratorio antes de aplicar controles. A atividade simula uma varredura autorizada, pequena e documentada.

Troque X pelo numero do student. Exemplo: student01 usa 10.50.1.10, 10.50.1.11 e 10.50.1.12.

Resumo

Duracao
45 a 60 min
Origem
Windows 11
Alvos
WS, W11 e Ubuntu
Credenciais
As do lab atual
Custo extra
Nenhum

Limite obrigatorio

Este lab e somente para a rede do proprio aluno: 10.50.X.0/24. Nao execute varredura contra internet, IP publico, rede de outro student, portal Guacamole ou infraestrutura da Megatraining. Nao use flood, brute force, DoS ou opcoes agressivas.

Objetivos

  • Preparar variaveis de alvo para o proprio student.
  • Testar portas especificas com PowerShell sem instalar nada.
  • Instalar Nmap somente se necessario e usar uma varredura limitada.
  • Interpretar portas abertas como servico, risco e possivel acao corretiva.
  • Gerar evidencias em CSV e HTML.

1. Preparar o ambiente no Windows 11

No Windows 11 do aluno, abra PowerShell como usuario normal ou administrador e ajuste o numero do student.

$StudentNumber = 1
$Prefix = "10.50.$StudentNumber"
$Evidence = "C:\ECSS-M14-PortScanner"

$Targets = @(
    [pscustomobject]@{ Name = "Windows Server"; IP = "$Prefix.10" },
    [pscustomobject]@{ Name = "Windows 11"; IP = "$Prefix.11" },
    [pscustomobject]@{ Name = "Ubuntu Server"; IP = "$Prefix.12" }
)

$Ports = 22,53,80,88,135,139,389,443,445,464,636,3389,5985,5986,8080,8443,9443

New-Item -ItemType Directory -Path $Evidence -Force | Out-Null
$Targets | Format-Table -AutoSize

Para student02, use $StudentNumber = 2. Para student06, use $StudentNumber = 6.

2. Confirmar conectividade sem depender de ping

Alguns hosts bloqueiam ICMP. Por isso, valide ping e tambem portas TCP comuns.

$Health = foreach ($Target in $Targets) {
    $TcpHits = foreach ($Port in 22,80,443,445,3389,9443) {
        Test-NetConnection $Target.IP -Port $Port -InformationLevel Quiet
    }

    [pscustomobject]@{
        Name = $Target.Name
        IP = $Target.IP
        Ping = Test-Connection $Target.IP -Count 1 -Quiet
        AnyTcpOpen = ($TcpHits -contains $true)
    }
}

$Health | Format-Table -AutoSize
$Health | Export-Csv "$Evidence\01-host-health.csv" -NoTypeInformation -Encoding utf8

Se Ping for falso mas AnyTcpOpen for verdadeiro, o host esta acessivel.

3. Fazer port scan simples com PowerShell

Este teste e lento de proposito, porque evita agressividade e facilita a leitura.

$ScanResults = foreach ($Target in $Targets) {
    foreach ($Port in $Ports) {
        $Open = Test-NetConnection $Target.IP -Port $Port -InformationLevel Quiet
        [pscustomobject]@{
            Student = ("student{0:D2}" -f $StudentNumber)
            TargetName = $Target.Name
            TargetIP = $Target.IP
            Port = $Port
            Open = $Open
            CheckedAt = Get-Date
        }
    }
}

$OpenPorts = $ScanResults | Where-Object Open | Sort-Object TargetIP,Port
$OpenPorts | Format-Table -AutoSize
$ScanResults | Export-Csv "$Evidence\02-portscan-full.csv" -NoTypeInformation -Encoding utf8
$OpenPorts | Export-Csv "$Evidence\03-open-ports.csv" -NoTypeInformation -Encoding utf8

Salve o resultado. Ele sera usado para justificar quais servicos precisam continuar expostos.

4. Instalar Nmap somente se nao existir

Se a VM foi recriada, talvez o Nmap nao esteja instalado. Primeiro verifique.

nmap --version

Se nao existir, instale pelo site oficial ou pelo WinGet, se disponivel:

winget install -e --id Insecure.Nmap

Se a instalacao pedir permissao administrativa, use a credencial definida para o lab. Se nao puder instalar, continue apenas com o PowerShell.

5. Executar Nmap em modo limitado

Execute apenas contra os tres IPs do seu student e apenas na lista de portas do exercicio.

$NmapTargets = "$Prefix.10 $Prefix.11 $Prefix.12"
nmap -sV -Pn -p 22,53,80,88,135,139,389,443,445,464,636,3389,5985,5986,8080,8443,9443 $NmapTargets -oN "$Evidence\04-nmap-limited.txt"

Nao use -A, -T5, --script vuln ou range amplo neste lab.

6. Interpretar portas comuns

Porta Servico comum Onde pode aparecer Risco se exposto indevidamente
22 SSH Ubuntu Server Acesso remoto Linux
53 DNS Windows Server/DC Enumeracao e dependencia de dominio
88, 389, 464, 636 Kerberos/LDAP Windows Server/DC Exposicao de servicos de dominio
445 SMB Windows Server e Windows 11 Compartilhamentos, movimento lateral
3389 RDP Windows Server e Windows 11 Acesso remoto interativo
9443 Wazuh/Portainer Ubuntu Server Interface administrativa web

7. Gerar relatorio HTML

Crie um relatorio simples com portas abertas e recomendacoes.

$Recommendations = $OpenPorts | ForEach-Object {
    $Risk = switch ($_.Port) {
        22 { "Permitir apenas administradores e origem interna" }
        53 { "Necessario para AD/DNS; restringir ao lab" }
        88 { "Kerberos; manter apenas no controlador de dominio" }
        389 { "LDAP; evitar exposicao fora do lab" }
        445 { "Validar compartilhamentos e firewall" }
        3389 { "RDP deve ser restrito ao Guacamole/administracao" }
        9443 { "Interface web deve exigir senha forte" }
        default { "Verificar necessidade do servico" }
    }

    [pscustomobject]@{
        Target = $_.TargetName
        IP = $_.TargetIP
        Port = $_.Port
        Recommendation = $Risk
    }
}

$Recommendations |
    ConvertTo-Html -Title "ECSS Modulo 14 - Port Scanner" -PreContent "

Port Scanner - student$StudentNumber

" | Out-File "$Evidence\05-portscanner-report.html" -Encoding utf8 Invoke-Item "$Evidence\05-portscanner-report.html"

8. Evidencias para entregar

  • 01-host-health.csv
  • 03-open-ports.csv
  • 04-nmap-limited.txt, se o Nmap foi usado
  • 05-portscanner-report.html
  • Resposta curta: quais portas voce manteria abertas e por que?

Perguntas de revisao

  1. Por que uma porta aberta nao significa necessariamente uma vulnerabilidade?
  2. Qual a diferenca entre confirmar conectividade e executar reconhecimento?
  3. Quais portas do controlador de dominio seriam criticas se expostas para a internet?
  4. Por que devemos evitar opcoes agressivas em ambientes compartilhados?
  5. Que informacoes o relatorio deve trazer para apoiar uma decisao de seguranca?