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.
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.csv03-open-ports.csv04-nmap-limited.txt, se o Nmap foi usado05-portscanner-report.html- Resposta curta: quais portas voce manteria abertas e por que?
Perguntas de revisao
- Por que uma porta aberta nao significa necessariamente uma vulnerabilidade?
- Qual a diferenca entre confirmar conectividade e executar reconhecimento?
- Quais portas do controlador de dominio seriam criticas se expostas para a internet?
- Por que devemos evitar opcoes agressivas em ambientes compartilhados?
- Que informacoes o relatorio deve trazer para apoiar uma decisao de seguranca?