
Um scanner SCADA/ICS assíncrono e de alta performance
Um scanner SCADA/ICS assíncrono e de alto desempenho para identificar e fazer fingerprinting de sistemas de controle industrial em redes. Detecta vulnerabilidades, identifica fornecedores/produtos e gera relatórios de risco abrangentes.
AVISO: Apenas para avaliações de segurança autorizadas. Escaneamentos não autorizados podem violar leis e regulamentos.
# Clone the repository
git clone https://github.com/geeknik/scada-scanner.git
cd scada-scanner
# Install dependencies
pip install -r requirements.txt
# Single target scan
python scada_scanner.py -t 192.168.1.100 -o results.json
# CIDR range scan
python scada_scanner.py -c 192.168.1.0/24 -o results.json
# Multiple CIDR ranges from file
python scada_scanner.py -f networks.txt -o results.json
# Export CSV instead of JSON
python scada_scanner.py -t 192.168.1.100 --format csv -o results.csv
# Respect an exclude list
python scada_scanner.py -c 10.0.0.0/24 --exclude exclude.txt
# Highlight unexpected protocol/port combos (logged and in findings)
python scada_scanner.py -t 203.0.113.10 -o results.json
# Enable live vuln enrichment via ProjectDiscovery vulnx (requires vulnx + PDCP API key)
vulnx auth
python scada_scanner.py -t 192.168.1.100 --vulnx --vulnx-limit 3
Required arguments (one of):
-t, --target Single target IP address
-c, --cidr CIDR range to scan (e.g., 192.168.1.0/24)
-f, --cidr-file File containing CIDR ranges (one per line)
Optional arguments:
-o, --output Output file (default: scan_results.json)
-r, --rate Max requests per second (default: 10.0)
--timeout Connection timeout in seconds (default: 5)
--max-concurrent Maximum concurrent connections (default: 50)
--safe-mode Enable safe mode (non-intrusive scans only)
--exclude File containing IPs to exclude from scan
-v, --verbosity Verbosity level: 0=quiet, 1=normal, 2=debug
--format Output format: json or 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"
}
]
}
]
}
Esta ferramenta é destinada apenas a avaliações de segurança autorizadas. Escaneamentos não autorizados podem violar:
O scanner acompanha um pequeno banco de dados de vulnerabilidades integrado para os protocolos principais (veja VULNERABILITY_DATABASE). Para informações mais atualizadas, você pode ativar a integração opcional com o ProjectDiscovery vulnx:
vulnx e configure sua chave de API PDCP (vulnx auth).--vulnx (opcionalmente ajuste --vulnx-limit e --vulnx-timeout).source: "vulnx".Se o vulnx estiver ausente ou inacessível, o scanner volta silenciosamente para o banco de dados local.
As entradas do banco de dados local são atualizadas periodicamente a partir de buscas do vulnx pelos protocolos principais (capturadas neste snapshot do repositório) e são marcadas com source: "local_db".
Execute a suíte de testes unitários:
pytest
O scanner foi projetado para ser modular, facilitando a adição de suporte a novos protocolos:
SCADA_PORTSPROTOCOL_SIGNATURESVULNERABILITY_DATABASEContribuições são bem-vindas! Por favor, siga estes passos:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Este projeto é licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.
O SOFTWARE É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA. OS AUTORES SE ISENTAM DE TODA RESPONSABILIDADE POR QUAISQUER DANOS OU PERDAS RESULTANTES DO USO DESTE SOFTWARE.