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 |