Esempi Pratici: Scenari di Scansione Completi e Decomposizione dei Comandi

Baseline di Rete Aziendale: Discovery Completo Tramite Reporting

Scenario: Rete aziendale interna 10.0.0.0/8, 12.000 host stimati, che richiede un inventario completo delle risorse per la sincronizzazione con CMDB e l'ingestione nella piattaforma di vulnerability management.

Comando Selezionato:

sudo nmap -Pn -sS -sV -sC -O --version-intensity 5 \
  -p- --max-retries 2 --max-rtt-timeout 300ms --initial-rtt-timeout 150ms \
  --min-hostgroup 256 --max-hostgroup 1024 --min-parallelism 50 \
  --defeat-rst-ratelimit \
  --script "banner,(http* or ssl*) and not brute and not dos" \
  --script-args "http.max-cache-size=1000000,http.useragent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'" \
  -oA enterprise-baseline-$(date +%Y%m%d) \
  --stats-every 60s \
  10.0.0.0/8

Decomposizione dei Flag:

| Flag | Razionale | Alternativa Rifiutata | |------|-----------|----------------------| | -Pn | Salta il discovery degli host; ICMP bloccato dai firewall host | -sn mancherebbe host attivi; -PE fallisce sul firewall predefinito di Windows | | -sS | SYN stealth; nessun handshake TCP completo minimizza il logging | -sT richiesto per non-root ma crea connessioni completate visibili nei log applicativi | | -sV / --version-intensity 5 | Fingerprinting dei servizi a intensità moderata; scala 0-9, 5 bilancia accuratezza vs. tempo | Intensità 9 aggiunge ~400% di tempo per guadagni marginali su servizi oscuri | | -sC | Script predefiniti sicuri; rileva configurazioni errate ovvie | Omettendo si perdono problemi certificati SSL, stato SMB signing | | -O | Fingerprinting OS per arricchimento CMDB | -A include traceroute che attiva IDS in segmenti sensibili | | -p- | Tutte le 65.535 porte; la compliance non ammette scorciatoie "top ports" | --top-ports 1000 manca servizi non standard, comuni in azienda | | --max-retries 2 | Riduce il tempo su porte filtrate dal default di 10 | Più basso (1) causa falsi negativi su link congestionati | | --min-hostgroup 256 | Elaborazione parallela degli host; scala con la larghezza di banda disponibile | Default 4-1024 auto; il floor manuale previene sottoutilizzo su reti veloci | | --defeat-rst-ratelimit | Critico per target Linux che limitano le risposte RST | Senza questo, il tempo di scansione aumenta 10x su ambienti Linux-dominanti |

Caratteristiche dell'Output Atteso:

Nmap scan report for 10.0.15.87
Host is up (0.0032s latency).
Not shown: 65531 filtered ports
PORT      STATE SERVICE       VERSION
22/tcp    open  ssh           OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99 (RSA)
|_  256 11:22:33:44:55:66:77:88:99:00:aa:bb:cc:dd:ee:ff (ECDSA)
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=DESKTOP-ABC123
|_ssl-date: 2024-01-15T09:23:17+00:00; -2s from scanner time.
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
49668/tcp open  msrpc         Microsoft Windows RPC
MAC Address: 00:50:56:AA:BB:CC (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|phone
Running: Microsoft Windows 10|2019
OS CPE: cpe:/o:microsoft:windows_10 cpe:/o:microsoft:windows_server_2019
OS details: Microsoft Windows 10 1903 - 2004 or Windows Server 2019
Network Distance: 1 hop

OS and Service detection performed.
Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 65536 IP addresses (2847 hosts up) scanned in 8472.34 seconds

Stima Tempo: ~2,5 ore per 2.847 host responsivi; 8,5 ore totali wall-clock incluso lo spazio non responsivo.

Limitazioni: Il rilevamento OS è inaffidabile senza almeno una porta aperta e una chiusa—verificare con -sU su target selezionati o integrare con analisi passiva p0f. L'ambiguità delle porte filtrate richiede follow-up con -sV --version-all su asset critici.

Valutazione Infrastruttura Cloud: NAT, Security Group e Target da API

Scenario: Ambiente AWS multi-VPC con 200+ istanze EC2, auto-scaling group e funzioni Lambda con VPC endpoint. Necessità di validare l'efficacia dei security group e identificare interfacce di gestione esposte.

Generazione Dinamica dei Target:

#!/bin/bash
# Genera lista target attivi dalle API AWS, filtrando per stato running e allegato interfaccia di rete

aws ec2 describe-instances \
  --filters "Name=instance-state-name,Values=running" \
  --query 'Reservations[*].Instances[*].{ID:InstanceId,IP:PrivateIpAddress,PubIP:PublicIpAddress,VPC:VpcId,SG:SecurityGroups[*].GroupId}' \
  --output json > /tmp/aws-inventory.json

# Estrae target scoped: IP pubblici per assessment esterno, privati per pivot interno
jq -r '.[][] | select(.PubIP != null) | .PubIP' /tmp/aws-inventory.json > /tmp/targets-public.txt
jq -r '.[][] | select(.PubIP == null) | .IP' /tmp/aws-inventory.json > /tmp/targets-private.txt

Comando Selezionato (Prospettiva Esterna):

sudo nmap -Pn -sS -sV --version-light \
  -p 22,80,443,3389,5432,3306,6379,27017,9200,8080,8443,9443,5000 \
  --source-port 53 \
  --data-length 24 \
  -iL /tmp/targets-public.txt \
  --max-rate 500 \
  --max-retries 1 \
  --script "http-title,ssl-cert,ssh-hostkey,mongodb-info,redis-info" \
  -oX /tmp/aws-external-$(date +%Y%m%d).xml \
  --script-args "http.max-redirects=2,http.pipeline=1" \
  2>&1 | tee /tmp/nmap-aws-log.txt

Complicazioni Specifiche del Cloud:

| Sfida | Mitigazione nel Comando | Verifica Richiesta | |-----------|----------------------|----------------------| | Rate Limiting AWS | --max-rate 500 limita a 500 pacchetti/secondo; regolare per analisi VPC flow log | Monitorare ThrottledRequests in CloudTrail; burst a 1000 solo con ticket di aumento limite API EC2 | | Allocazione Porte NAT Gateway | --source-port 53 mimica risposte DNS, riducendo esaurimento tabella NAT | Verificare che la metrica CloudWatch ErrorPortAllocation rimanga zero | | Lacune Logging Security Group | --data-length 24 evita firme pacchetto vuoto che attivano rumore REJECT VPC Flow Log senza dati actionable | Correlare con VPC Flow Logs: aws logs filter-log-events --log-group-name /aws/vpc/flowlogs | | Logging Azure NSG | Per ambienti ibridi, preporre --randomize-hosts per distribuire tra subnet, riducendo burst pricing log NSG | Query tabella Azure Monitor NetworkSecurityGroupEvent per trend flussi denied | | Correlazione GCP VPC Flow Log | Usare --max-hostgroup 64 per prevenire che l'aggregazione flow log offuschi pattern per-target | Esportare in BigQuery: SELECT src_ip, dest_port, COUNT(*) FROM flow_logs WHERE reporter='SRC' GROUP BY 1,2 |

Caratteristiche dell'Output Atteso:

Nmap scan report for ec2-52-XX-XX-XX.compute-1.amazonaws.com (52.XX.XX.XX)
Host is up (0.018s latency).

PORT     STATE    SERVICE    VERSION
22/tcp   filtered ssh
80/tcp   open     http       nginx 1.18.0 (Ubuntu)
| http-title: Site doesn't have a title (text/html).
443/tcp  open     ssl/http   nginx 1.18.0
| ssl-cert: Subject: commonName=*.example.com
| Subject Alternative Name: DNS:*.example.com, DNS:example.com
| Not valid before: 2023-08-15T00:00:00
|_Not valid after:  2024-09-14T23:59:59
3389/tcp filtered ms-wbt-server
5432/tcp open     postgresql PostgreSQL 12.8
|_ssl-date: TLS randomness does not represent time

Verifica Critica: Porta 22 filtrata con 5432 aperta indica inconsistenza security group—aws ec2 describe-security-groups --group-ids sg-XXXX per validare regole previste vs. drift implementativo.

Engagegment Red Team: Evasione Graduale con Timing, Esca e Offuscamento Protocollo

AVVISO CONFINE LEGALE: Tutti i comandi richiedono autorizzazione esplicita, documentata con scope definito, confini temporali e regole di engagement. L'uso non autorizzato viola il Computer Fraud and Abuse Act (US), Computer Misuse Act (UK) e giurisdizioni equivalenti. Questa sezione presuppone lettera di engagement valida e firmata con procedure di contatto incident response.

Approccio Graduale:

Fase 1: Ricognizione Passiva (Nessun Nmap)

# Solo lista target driven da OSINT; zero contatto diretto
theHarvester -d targetcorp.com -b all -f /tmp/th-recon-passive

Fase 2: Discovery Lento con Esca

sudo nmap -sS -Pn -p 22,80,443,445,3389 \
  -T2 \
  --scan-delay 5s --max-retries 1 \
  -D RND:10,ME \
  --source-port 443 \
  --data-string "GET / HTTP/1.0\r\n\r\n" \
  --spoof-mac Cisco \
  --badsum \
  -f \
  --mtu 24 \
  -oN /tmp/stage2-discovery.txt \
  203.0.113.0/24

| Tecnica di Evasione | Flag | Meccanismo di Evasione Rilevamento | |-------------------|------|----------------------------| | Offuscamento timing | -T2, --scan-delay 5s | Sotto la maggior parte degli IDS basati su soglia; 5s supera il default scan.rules di Snort 60s/30porte | | Traffico esca | -D RND:10,ME | 10 IP esca casuali distribuiscono il logging; ME colloca la scansione reale tra le esche | | Abuso trust source port | --source-port 443 | Sfrutta regole firewall che permettono traffico di ritorno da sessioni HTTPS stabilite | | Mimicry protocollo | --data-string | Il payload TCP iniziale assomiglia a una richiesta HTTP, non a una probe SYN-only | | Invalidazione checksum | --badsum | Bypassa filtri stateless semplici che verificano checksum; stack validi scartano, alcuni IPS passano | | Frammentazione | -f, --mtu 24 | Frammenti di 8 byte evadono pattern-matching su IDS signature-based; richiesta riassemblaggio | | Spoofing MAC | --spoof-mac Cisco | Offuscamento ARP a livello segmento locale; inutile in routed ma confonde monitoraggio layer-2 |

Fase 3: Offuscamento Protocollo-Specifico per Discovery C2

sudo nmap -sS -Pn -p 4444,5555,6666,7777,8888,9999,31337 \
  -T1 \
  --scan-delay 15s \
  --randomize-hosts \
  -D RND:5,ME \
  --source-port 53 \
  --ip-options "L 10.0.0.1" \
  -oN /tmp/stage3-c2-probe.txt \
  --script "ssl-cert,banner" \
  203.0.113.0/24

Albero Decisionale: Perché Non Alternative

  • Rifiutato -sF (FIN), -sN (NULL), -sX (Xmas): Firewall stateful moderni ed endpoint protection li gestiscono correttamente; efficaci solo contro ACL stateless legacy
  • Rifiutato -sI (idle scan): Richiede sequenza IPID prevedibile, sempre più rara; alto tasso di fallimento, lungo tempo di esecuzione
  • Selezionato -sS con timing su -sA (ACK): ACK scan utile per mappare regole firewall ma non fornisce informazioni servizio; approccio combinato aggiunge superficie di rilevamento

Limitazioni Esplicite: Le esche richiedono IP routabili reali o generano ARP storms; -D RND usa indirizzi casuali che possono essere blackholati. Pacchetti --badsum scartati da qualsiasi stack RFC-compliant—utile solo contro specifiche configurazioni IPS. Verificare efficacia esca con tcpdump 'host [decoy-ip]' sul posizionamento sensori.

Forensics Incident Response: Identificazione Rapida Infrastruttura Minaccia

Scenario: Allerta SOC per beaconing sospetto Cobalt Strike. Necessità di mappatura rapida infrastruttura C2 da indicatori.

Sequenza di Comandi:

# Fase 1: Ispezione approfondita single-host (2 minuti)
sudo nmap -Pn -sS -sV --version-intensity 9 -A \
  -p 1-65535 \
  --script "malware*,backdoor*,vulners" \
  --script-args "vulners.cvsslimit=7.0" \
  -oX /tmp/ir-deep-192.168.1.100.xml \
  192.168.1.100

# Fase 2: Ricerca pattern movimento laterale (5 minuti per /24)
sudo nmap -Pn -sS -p 445,135,139,5985,5986,47001 \
  --script "smb-enum-shares,smb-enum-sessions,smb-security-mode" \
  --script-args "smbuser=DOMAIN\\analyst,smbpass=[REDACTED]" \
  -oG /tmp/ir-lateral.gnmap \
  192.168.1.0/24

Signature Pattern Discovery C2:

| Pattern | Metodo di Rilevamento Nmap | Comando di Verifica | |---------|----------------------|----------------------| | Certificato default Cobalt Strike | Script ssl-cert pattern CN=, O=, OU= | openssl s_client -connect [IP]:443 </dev/null 2>/dev/null \| openssl x509 -text -noout | | Payload RC4 Metasploit | Analisi entropia cookie http-header | Python zscoring su valori Set-Cookie su multiple probe | | Empire/Invoke-Obfuscation | User-Agent insolito in risposta http-title | Manuale curl -A [agent] -v [target] | | Precursore DNS tunneling | --script dns-* su host scoperti con porta 53 aperta | dig @[IP] version.bind chaos txt per versione BIND |

Output Atteso (Cert Default Cobalt Strike):

443/tcp open  ssl/https
| ssl-cert: Subject: commonName=192.168.1.100/organizationName=./stateOrProvinceName=./countryName=--
| Issuer: commonName=192.168.1.100/organizationName=./stateOrProvinceName=./countryName=--
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-01-01T00:00:00
|_Not valid after:  2025-01-01T00:00:00
|_ssl-date: TLS randomness does not represent time

Nota Critica IR: Certificato default Cobalt Strike auto-firmato con codice paese -- e organizzazione ./. Non definitivo (configurabile), ma indicatore ad alta confidenza che richiede isolamento immediato host per playbook.

Pipeline DevSecOps: Scansione Vulnerabilità Automatizzata

Integrazione GitLab CI:

# .gitlab-ci.yml
stages:
  - security-scan

variables:
  NMAP_TARGET: "${CI_ENVIRONMENT_URL:-staging.internal}"
  NMAP_SEVERITY_THRESHOLD: "7.0"
  NMAP_FAIL_ON_CVSS: "true"

nmap-vulnerability-scan:
  stage: security-scan
  image: instrumentisto/nmap:latest
  script:
    - |
      nmap -Pn -sV --version-all \
        -p $(cat config/ports.txt | tr '\n' ',') \
        --script "vulners,smb-vuln-ms17-010,ssl-enum-ciphers,http-sql-injection" \
        --script-args "vulners.cvsslimit=${NMAP_SEVERITY_THRESHOLD}" \
        -oX /tmp/nmap-results.xml \
        --stats-every 30s \
        ${NMAP_TARGET}
    - |
      # Conversione in SARIF per ingestione dashboard sicurezza GitLab
      python3 /usr/local/bin/nmap-to-sarif.py \
        /tmp/nmap-results.xml \
        /tmp/nmap-results.sarif
    - |
      # Criterio pass/fail: zero CVSS >= soglia
      CRITICAL_COUNT=$(grep -o 'cvssScore="[7-9]\.[0-9]"' /tmp/nmap-results.xml | wc -l)
      if [ "${NMAP_FAIL_ON_CVSS}" = "true" ] && [ "${CRITICAL_COUNT}" -gt 0 ]; then
        echo "FAIL: ${CRITICAL_COUNT} vulnerabilità a o sopra CVSS ${NMAP_SEVERITY_THRESHOLD}"
        exit 1
      fi
  artifacts:
    reports:
      sast: /tmp/nmap-results.sarif
    paths:
      - /tmp/nmap-results.xml
      - /tmp/nmap-results.sarif
    expire_in: 30 days
    when: always
  allow_failure: false
  only:
    - merge_requests
    - schedules

Equivalente GitHub Actions:

# .github/workflows/nmap-scan.yml
name: Nmap Security Scan
on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]
  schedule:
    - cron: '0 2 * * 1'  # Lunedi settimanale 2AM

jobs:
  nmap:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Run Nmap vulnerability scan
        uses: hackerschoice/nmap-action@v1
        with:
          target: ${{ vars.SCAN_TARGET || 'localhost' }}
          args: '-Pn -sV --script vulners --script-args vulners.cvsslimit=7.0 -oX nmap-results.xml'
          
      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: nmap-results
          path: nmap-results.xml
          
      - name: Parse and enforce threshold
        run: |
          CRITICAL=$(grep -o 'cvssScore="[7-9]\.[0-9]"' nmap-results.xml | wc -l)
          echo "critical_count=${CRITICAL}" >> $GITHUB_ENV
          if [ "${CRITICAL}" -gt 0 ]; then
            echo "::error::${CRITICAL} critical vulnerabilities detected"
            exit 1
          fi

Validazione Compliance: Mapping PCI DSS e CIS Benchmark

| Requisito | Tecnica di Verifica Nmap | Snippet Comando | |-------------|---------------------------|---------------| | PCI DSS 2.2.2: Abilitare solo servizi necessari | Scansione porte complete con identificazione servizi; confronto con registro servizi autorizzati | nmap -Pn -sS -sV -p- --open -oG - \| awk '/Host:/{ip=$2}/Ports:/{print ip, $0}' \| diff - authorized-services.txt | | PCI DSS 4.1: Usare crittografia forte | ssl-enum-ciphers per rilevamento TLS 1.0/1.1; validazione certificato | --script ssl-enum-ciphers --script-args min-tls-version=1.2 | | PCI DSS 4.2.1: Crittografia forte per trasmissione | Equivalente ssh-audit via ssh2-enum-algos | --script ssh2-enum-algos poi grep per 3des, rc4, diffie-hellman-group1-sha1 | | CIS 3.1: Assicurare invio redirect pacchetto disabilitato | Non direttamente scansionabile; usare script ip-forwarding come indicatore proxy | --script ip-forwarding combinato con rilevamento anomalia traceroute | | CIS 3.6: Configurare iptables/Windows Firewall | Conferma negativa --script firewall-bypass; assenza di risposta != sicurezza | nmap -Pn -sA -p 445 --reason per rilevare presenza ACK-filtering |

Comando di Validazione PCI DSS 4.1:

sudo nmap -Pn -sS -p 443,8443,9443 \
  --script "ssl-enum-ciphers,ssl-cert,ssl-heartbleed" \
  --script-args "ssl-enum-ciphers.showall" \
  -oX /tmp/pci-ssl-validation.xml \
  target.payment-gateway.example.com

Criteri Pass/Fail nell'Output:

443/tcp open  https
| 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
|     compressors: 
|       NULL
|     cipher preference: server
|   TLSv1.3: 
|     ciphers: 
|       TLS_AKE_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
|     cipher preference: client
|_  least strength: A

Condizione FAIL: Qualsiasi voto sotto B, o presenza di TLSv1.0, TLSv1.1, SSLv3, o nomi cipher contenenti _RC4_, _3DES_, _DES_, EXPORT, NULL.