Esempi pratici svolti: dalla scoperta della rete alla verifica delle vulnerabilità

Inventario Rete Enterprise: Ottimizzazione per la Scalabilità

La scansione di una /16 (65.536 indirizzi) senza bloccare segmenti di rete o il proprio host richiede un'ottimizzazione deliberata delle prestazioni. I template di timing predefiniti sono troppo conservativi per questa scala e troppo aggressivi per collegamenti WAN congestionati.

sudo nmap -sn -PE -PP -PM -n --min-parallelism 512 --max-rtt-timeout 300ms --initial-rtt-timeout 150ms --max-retries 2 --max-scan-delay 10ms -oA corp-discovery 192.0.2.0/16

Cosa fa: Scoperta host (-sn, nessuna scansione porte) con probe ICMP echo (-PE), timestamp (-PP) e richiesta netmask (-PM); disabilita la risoluzione DNS (-n) per eliminare i colli di bottiglia del resolver. Quando usarlo: Scansioni baseline di inventario, riconciliazione CMDB o validazione dello scope pre-patching. Rischi: I filtri ICMP eliminano silenziosamente i probe; il parallelismo sopra 1.024 può sopraffare i socket locali sull'host di scansione. Output atteso: Lista ricercabile di host attivi con metriche di latenza.

Variante lab (aggressiva): --min-rate 10000 per saturare uno switch lab locale e testare il proprio monitoraggio. Variante produzione (conservativa): Aggiungere --scan-delay 5ms e limitare a --max-rate 500 per evitare di attivare soglie IDS basate sulla frequenza.

Una scansione /16 tipicamente rivela l'8-15% di host attivi in allocazioni enterprise sparse. Una porta marcata filtered non è un risultato pulito — è una domanda senza risposta. Distinguere sempre tra filtered (probe inviato, nessuna risposta) e admin-prohibited (ricevuto ICMP type 3, code 13), che conferma una regola firewall che ti blocca esplicitamente.

Valutazione Server Web: Proxy, WAF e Inganno dei Servizi

I servizi web si espongono raramente direttamente. Rilevare gli intermediari impedisce di effettuare fingerprinting sul bersaglio sbagliato e di attaccare erroneamente un nodo edge CDN.

sudo nmap -sS -sV -p80,443,8080,8443 --script=http-title,http-server-header,http-waf-detect,http-security-headers -d --reason 198.51.100.25

Estratto di output sanificato:

PORT     STATE SERVICE  VERSION
80/tcp   open  http     nginx 1.24.0 (reverse proxy)
| http-server-header: cloudflare
|_http-title: 301 Moved Permanently
443/tcp  open  ssl/http nginx 1.24.0
| http-waf-detect: IDS/WAF detected: Cloudflare
| ssl-cert: Subject: commonName=origin.internal.example
|_Not valid before: 2024-01-15T00:00:00
8080/tcp open  http     Apache Tomcat/Coyote JSP engine 1.1
|_http-title: Apache Tomcat/9.0.82

Interpretazione: La porta 80 termina su Cloudflare (WAF confermato). Il ssl-cert sulla 443 espone il nome interno del server origin (origin.internal.example) — una configurazione errata comune quando i certificati vengono copiati dall'origin all'edge senza pulizia dei SAN. La porta 8080 espone direttamente un'interfaccia di gestione, bypassando completamente il WAF.

Servizio Scoperto Configurazione Errata Comune Comando di Verifica
Front-end Cloudflare Il certificato origin espone nomi interni openssl s_client -connect 198.51.100.25:443
Reverse proxy nginx Divulgazione versione nell'header Server: --script http-server-header
Gestione Tomcat /manager/html accessibile senza restrizione IP --script http-auth,http-brute (solo autorizzato)
Apache con mod_proxy Errata configurazione trust X-Forwarded-For Test manuale injection header

Guida alla remediation: Limitare la gestione Tomcat a loopback e richiedere mTLS; rimuovere i banner versione tramite server_tokens off; in nginx; distribuire certificati pubblici separati senza SAN interni.

Audit Esposizione Database: Porte Predefinite e Affidabilità dei Banner

Le porte predefinite non sono garanzie, ma sono forti priori per configurazioni errate. Verificare con rilevamento servizio, mai assumere.

sudo nmap -sS -sV -sC -p3306,5432,27017,6379,1433,1521 --version-intensity 7 192.168.50.0/24

Cosa fa: Scansione SYN con rilevamento versione (-sV) e script NSE predefiniti (-sC) contro porte database comuni; intensità 7 bilancia velocità e profondità probe. Quando usarlo: Validazione segmentazione, revisione sicurezza migrazione cloud o valutazione esposizione post-incidente. Rischi: I probe MongoDB e Redis possono attivare fallimenti di autenticazione che bloccano account se fail2ban o simili è attivo; i probe versione MySQL possono essere loggati come tentativi di connessione. Output atteso: Nomi servizio, versioni e configurazioni rilevate dagli script.

Avvertenza critica: Le versioni rilevate e i banner non sono affidabili al 100%. Gli honeypot imitano deliberatamente servizi vulnerabili; alcuni container riportano la versione del kernel host piuttosto che il proprio livello di patch. Correlare sempre con inventario patch autenticato quando disponibile.

Fingerprinting Dispositivi IoT e Embedded

I dispositivi embedded spesso eseguono servizi non convenzionali o implementazioni di protocolli antichi che le scansioni standard non rilevano.

sudo nmap -sV --version-all -p- --script=banner -T4 --max-retries 1 --host-timeout 15m 10.0.3.0/24

Flag chiave spiegati: -p- = tutte le 65.535 porte; --version-all = invia ogni probe nel database Nmap (lento ma approfondito); --max-retries 1 = accetta più falsi negativi per velocità su reti IoT inaffidabili.

Estratto di output sanificato:

PORT      STATE SERVICE VERSION
23/tcp    open  telnet  BusyBox telnetd (D-Link router)
| banner: \xFF\xFD\x03\xFF\xFB\x01\xFF\xFD\x1F\xFF\xFB\x01\r\nD-Link DSL-2740B
80/tcp    open  http    micro_httpd
| http-title: Router Login - DSL-2740B
|_http-server-header: micro_httpd
1900/tcp  open  upnp    Portable SDK for UPnP devices 1.6.6
| upnp-info:
|   Server: LINUX/2.4 UPnP/1.0 BRCM400/1.0
|   Location: http://10.0.3.15:49152/gatedesc.xml
|_  Last boot: 2023-08-14
2323/tcp  open  telnet  Boa embedded web server config console

Interpretazione: Telnet sulla 23 e una console di gestione telnet alternativa sulla 2323 — entrambe non crittografate. Il servizio UPnP (1900/tcp) espone XML di descrizione dispositivo che spesso contiene versioni firmware ed endpoint servizio. Last boot agosto 2023 senza patch successive suggerisce trascuratezza cronica.

Analisi Configurazione SSL/TLS con NSE

I siti corporate interni non possono raggiungere tool esterni come Qualys SSL Test. ssl-enum-ciphers di Nmap fornisce valutazione equivalente per scope di audit interno.

nmap --script ssl-cert,ssl-enum-ciphers,ssl-heartbleed -p443 198.51.100.100

Output sanificato con annotazione forza cipher:

PORT    STATE SERVICE
443/tcp open  https
| ssl-cert: Subject: commonName=legacy-app.internal
| Issuer: commonName=Corporate-ICA-2019
| Public Key type: rsa
| Public Key bits: 2048
| Not valid before: 2023-06-01T00:00:00
| Not valid after:  2025-06-01T23:59:59
|_ssl-date: TLS randomness does not represent time
| ssl-enum-ciphers:
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048)   - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048)      - C
|       TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048)      - C
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048)        - C
|     compressors:
|       NULL
|   TLSv1.1:
|     ciphers:
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048)         - C
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048)        - C
|   TLSv1.0:
|     ciphers:
|       TLS_RSA_WITH_RC4_128_SHA (rsa 1024)             - F
|     least strength: F
|_  Grade: F (due to TLSv1.0 with RC4 and 1024-bit RSA)
Voto Significato Trigger Tipici
A Forward secrecy forte, cipher AEAD, nessuna debolezza nota ECDHE + AES-GCM, TLS 1.2+
B Problemi minori (no FS per alcuni client, SHA-1 nella catena) Scambio chiave RSA statico, hash catena vecchio
C Algoritmi deboli o obsoleti permessi Modalità CBC senza EtM, 3DES, RSA statico
D Debolezze significative Crittografia export-grade, firme MD5
F Vulnerabilità critica o effettivamente rotto RC4, SSLv2/v3, RSA 512/1024-bit, nessuna crittografia

Cosa fa: Enumera tutti i ciphersuite per versione protocollo, valuta ciascuno e riporta il collegamento più debole. Quando usarlo: Baseline pre-migrazione, analisi gap compliance o validazione restrizioni cipher-suite distribuite via GPO/registry. Rischi: La metodologia di valutazione pesa lo scambio chiave e la forza del cipher stream; l'integrità messaggio (algoritmo MAC) non è considerata — un voto "C" con SHA-1 HMAC è ancora permesso senza downgrade. Output atteso: Liste cipher per versione con voti lettera e riepilogo aggregato least strength.

Interpretazione del campione: Il voto F è determinato interamente dal TLS 1.0 che supporta RC4 con RSA 1024-bit — banalmente violabile con risorse modeste. Tuttavia il TLS 1.2 offre cipher di voto A, il che significa che la remediation è solo configurazione (disabilitare TLS 1.0/1.1 e cipher deboli), non sostituzione certificato.

Conferma Remediation Vulnerabilità: Flusso di Lavoro Prima/Dopo

Il diffing dell'output di scansione è essenziale quando le finestre di change-control sono ristrette e le decisioni di rollback devono basarsi su evidenze.

# Baseline (pre-remediation)
nmap --script ssl-enum-ciphers -p443 -oX baseline-198.51.100.100.xml 198.51.100.100

# Post-remediation
nmap --script ssl-enum-ciphers -p443 -oX postfix-198.51.100.100.xml 198.51.100.100

# Diff strutturato
ndiff baseline-198.51.100.100.xml postfix-198.51.100.100.xml > ssl-cipher-diff.txt

Estratto di diff sanificato:

-  TLSv1.0:
-    ciphers:
-      TLS_RSA_WITH_RC4_128_SHA (rsa 1024) - F
-  least strength: F
-  Grade: F
+  TLSv1.2:
+    ciphers:
+      TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
+  least strength: A
+  Grade: A

Nota automazione: Integrare i codici di uscita di ndiff nei gate CI/CD — uscita non-zero su qualsiasi degrado dalla baseline. Per deployment rolling, baseline rispetto al target di produzione, non all'immagine golden; il configuration drift in produzione invalida spesso le assunzioni testate in lab.

Rate-Limiting ed Evasione IDS: Incontri Reali

Durante la scansione /16 sopra, diversi comportamenti hanno indicato contromisure difensive:

Sintomo Causa Probabile Diagnostica Risposta
Tutte le porte filtered dopo risultati iniziali open Regola firewall rate-limiting nping --tcp -p80 --rate 100 vs --rate 1000 Ridurre --max-rate a 200, estendere --scan-delay
Ritardi consistenti di 10 secondi su risposte SYN IPS shunning o tarpit tcptraceroute per identificare l'hop dove appare il ritardo Passare a -sS -T1 con decoy: -D RND:10,ME
ICMP admin-prohibited solo sulla porta 80 Negazione ACL esplicita, non drop generico Confrontare con comportamento porta nota aperta Documentare come controllo confermato, non fallimento scansione
SYN-ACK seguito da RST prima del completo handshake Proxy SYN o TCP intercept tcpdump mostra nessun payload dal target Ridurre complessità probe; intensità versione a 2

⚠️ Solo uso autorizzato e difensivo. Le scansioni con decoy (-D) e la frammentazione (-f) sono descritte qui per esercizi di validazione IDS e taratura dei propri threshold di rilevamento. Usare solo in ambienti lab o esercizi di validazione rilevamento esplicitamente autorizzati dove si possiede o si ha permesso scritto di testare tutta l'infrastruttura coinvolta.

Errori Comuni nelle Scansioni di Produzione

Errore Perché ti danneggia
Eseguire -A (aggressive) su scope /8 Il rilevamento OS e il traceroute moltiplicano il conteggio probe 10×; le scansioni falliscono per esaurimento memoria o ban di rete
Omettere -n su range grandi I timeout del resolver DNS bloccano l'intera scansione; i record PTR rivelano l'intento di ricognizione agli amministratori DNS
Fidarsi di Service Info: OS: Linux da -sV Nmap indovina l'OS dai banner servizio; le app containerizzate riportano il kernel host, non il loro runtime
Eseguire script NSE brute-force senza --script-args defaults Le liste username predefinite (es. oracle-brute) bloccano account dopo 3 tentativi; rivedere sempre gli argomenti brute.*
Ignorare filtered come "probabilmente niente" Le porte filtered spesso indicano i segmenti più sensibili — gli asset che vale la pena nascondere