
Uno scanner SCADA/ICS asincrono ad alte prestazioni
Uno scanner SCADA/ICS asincrono e ad alte prestazioni per identificare e rilevare le impronte digitali di sistemi di controllo industriale attraverso le reti. Rileva vulnerabilità, identifica fornitori/prodotti e genera report di rischio completi.
ATTENZIONE: Solo per valutazioni di sicurezza autorizzate. La scansione non autorizzata può violare leggi e regolamenti.
# Clona il repository
git clone https://github.com/geeknik/scada-scanner.git
cd scada-scanner
# Installa le dipendenze
pip install -r requirements.txt
# Scansione di un singolo obiettivo
python scada_scanner.py -t 192.168.1.100 -o results.json
# Scansione di un intervallo CIDR
python scada_scanner.py -c 192.168.1.0/24 -o results.json
# Più intervalli CIDR da file
python scada_scanner.py -f networks.txt -o results.json
# Esporta in CSV invece che JSON
python scada_scanner.py -t 192.168.1.100 --format csv -o results.csv
# Rispetta una lista di esclusione
python scada_scanner.py -c 10.0.0.0/24 --exclude exclude.txt
# Evidenzia combinazioni protocollo/porta inattese (registrate e nei risultati)
python scada_scanner.py -t 203.0.113.10 -o results.json
# Abilita l'arricchimento live delle vulnerabilità tramite ProjectDiscovery vulnx (richiede vulnx + chiave API PDCP)
vulnx auth
python scada_scanner.py -t 192.168.1.100 --vulnx --vulnx-limit 3
Argomenti obbligatori (uno tra):
-t, --target Indirizzo IP del singolo obiettivo
-c, --cidr Intervallo CIDR da scansionare (es. 192.168.1.0/24)
-f, --cidr-file File contenente intervalli CIDR (uno per riga)
Argomenti opzionali:
-o, --output File di output (default: scan_results.json)
-r, --rate Richieste massime al secondo (default: 10.0)
--timeout Timeout di connessione in secondi (default: 5)
--max-concurrent Numero massimo di connessioni concorrenti (default: 50)
--safe-mode Abilita la modalità sicura (solo scansioni non intrusive)
--exclude File contenente IP da escludere dalla scansione
-v, --verbosity Livello di verbosità: 0=silenzioso, 1=normale, 2=debug
--format Formato di output: json o csv (default: json)
--safe-mode{
"scan_summary": {
"timestamp": "2025-02-27T14:02:33.456789",
"total_hosts_scanned": 256,
"hosts_with_scada": 12,
"total_vulnerabilities": 37,
"high_risk_hosts": 5
},
"hosts": [
{
"ip": "192.168.1.100",
"ports": [
{
"port": 502,
"protocol": "MODBUS",
"fingerprint": {
"vendor": "Schneider",
"product": "M340",
"version": "2.6.0",
"risk_score": 0.75,
"evidence": [
"response:00010000000101",
"port_hint:502"
],
"findings": [
"Detected MODBUS protocol (confidence: 0.55)",
"Identified vendor: SCHNEIDER, product: M340",
"Overall risk assessment: High (score: 0.75)"
],
"unexpected_port": false
}
}
],
"vulnerabilities": [
{
"cve_id": "CVE-2025-55221",
"description": "Socomec DIRIS Digiware M-70 DoS via crafted Modbus TCP/RTU over TCP packets",
"severity": "high",
"source": "local_db"
}
]
}
]
}
Questo strumento è destinato esclusivamente a valutazioni di sicurezza autorizzate. La scansione non autorizzata può violare:
Lo scanner include un piccolo database di vulnerabilità integrato per i protocolli principali (vedi VULNERABILITY_DATABASE). Per informazioni più aggiornate puoi abilitare l'integrazione opzionale con ProjectDiscovery vulnx:
vulnx e configura la tua chiave API PDCP (vulnx auth).--vulnx (opzionalmente regola --vulnx-limit e --vulnx-timeout).source: "vulnx".Se vulnx non è disponibile o non è raggiungibile, lo scanner torna silenziosamente al database locale.
Le voci del database locale vengono aggiornate periodicamente dalle ricerche di vulnx per i protocolli principali (catturate in questo snapshot del repository) e sono contrassegnate con source: "local_db".
Esegui la suite di test unitari:
pytest
Lo scanner è progettato per essere modulare, rendendo facile aggiungere il supporto per nuovi protocolli:
SCADA_PORTSPROTOCOL_SIGNATURESVULNERABILITY_DATABASEI contributi sono benvenuti! Segui questi passaggi:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Questo progetto è concesso in licenza secondo la MIT License - consulta il file LICENSE per i dettagli.
IL SOFTWARE È FORNITO "COSÌ COM'È", SENZA GARANZIE DI ALCUN TIPO, ESPRESSE O IMPLICITE. GLI AUTORI DECLINANO OGNI RESPONSABILITÀ PER QUALSIASI DANNO O PERDITA DERIVANTE DALL'USO DI QUESTO SOFTWARE.