Le problème
NetSecure Corp est une PME fictive de 200 salariés avec un siège et deux agences. Son réseau était plat (10.0.0.0/16), avec des switches administrés en Telnet avec les mots de passe par défaut, sans DMZ, sans IDS et avec une clé Wi-Fi faible.
Le travail : prouver le risque à partir du trafic capturé, l’enchaîner en attaque réaliste, puis repenser et durcir le réseau.
Chaîne d’attaque reconstruite depuis la capture
- 01Clé Wi-Fi faible
- 02Scan SYN
- 03Identifiants Telnet
- 04ARP spoofing
- 05Vol de session
- 06Exfiltration
Constats et corrections
| CONSTAT | CORRECTION | NIVEAU |
|---|---|---|
| Identifiants admin Telnet en clair | SSH avec clés | CRITIQUE |
| ARP spoofing : une MAC pour 3 IP | DAI + DHCP snooping | CRITIQUE |
| Réseau plat, mouvement latéral total | 5 VLAN | CRITIQUE |
| Cookie de session en HTTP clair | TLS + DMZ | ÉLEVÉ |
| Scan de ports passé inaperçu | Règles Suricata | ÉLEVÉ |
| Aucun contrôle d’accès sur les ports | 802.1X + RADIUS | ÉLEVÉ |
Directement depuis le code
Extraits du vrai dépôt et des livrables, raccourcis pour la lecture.
table inet filter {
chain forward {
type filter hook forward priority 0;
policy drop;
ct state established,related accept
# admin VLAN: full access
ip saddr 10.10.10.0/24 accept
# employees: internal DNS and file server only
ip saddr 10.10.20.0/24 ip daddr 10.10.30.10 udp dport 53 accept
ip saddr 10.10.20.0/24 ip daddr 10.10.30.20 tcp dport 445 accept
# Internet to DMZ web server
ip daddr 10.10.40.10 tcp dport 443 accept
# guests: Internet only, no internal access
ip saddr 10.10.50.0/24 ip daddr 10.10.0.0/8 drop
ip saddr 10.10.50.0/24 accept
log prefix "FORWARD_DROP: " drop
}
}Filtrage inter-VLAN en refus par défaut : les admins accèdent à tout, les employés seulement au DNS et au serveur de fichiers, les invités seulement à Internet.
# telnet
alert tcp any any -> any 23 (msg:"NETSECURE TELNET CONNECTION DETECTED"; sid:1000001; rev:1;)
# port scan: 5 SYN in 10 seconds from the same source
alert tcp any any -> any any (flags:S; msg:"NETSECURE POSSIBLE PORT SCAN"; threshold:type both, track by_src, count 5, seconds 10; sid:1000002; rev:1;)
# session cookie in clear text (session hijacking)
alert tcp any any -> any any (content:"Cookie:"; msg:"NETSECURE SESSION COOKIE OBSERVED"; sid:1000006; rev:1;)Règles Suricata écrites pour les menaces trouvées dans la capture, dont un seuil pour détecter le scan SYN.
Résultats
Ce que je ferais autrement
La capture ne faisait que 76 paquets, et elle suffisait à prendre tout le réseau. Prochaine étape : valider DAI et port security sur de vraies images de switch dans un lab GNS3, pas seulement sur le papier.