
Un escáner SCADA/ICS asíncrono y de alto rendimiento
Escáner SCADA/ICS asíncrono y de alto rendimiento para identificar y analizar las huellas de sistemas de control industrial en redes. Detecta vulnerabilidades, identifica fabricantes/productos y genera informes de riesgo exhaustivos.
ADVERTENCIA: Solo para evaluaciones de seguridad autorizadas. El escaneo no autorizado puede violar leyes y regulaciones.
# Clonar el repositorio
git clone https://github.com/geeknik/scada-scanner.git
cd scada-scanner
# Instalar dependencias
pip install -r requirements.txt
# Escaneo de un objetivo único
python scada_scanner.py -t 192.168.1.100 -o results.json
# Escaneo de rango CIDR
python scada_scanner.py -c 192.168.1.0/24 -o results.json
# Múltiples rangos CIDR desde archivo
python scada_scanner.py -f networks.txt -o results.json
# Exportar CSV en lugar de JSON
python scada_scanner.py -t 192.168.1.100 --format csv -o results.csv
# Respetar una lista de exclusión
python scada_scanner.py -c 10.0.0.0/24 --exclude exclude.txt
# Resaltar combinaciones inesperadas de protocolo/puerto (registradas y en hallazgos)
python scada_scanner.py -t 203.0.113.10 -o results.json
# Habilitar enriquecimiento de vulnerabilidades en vivo mediante ProjectDiscovery vulnx (requiere vulnx y clave API de PDCP)
vulnx auth
python scada_scanner.py -t 192.168.1.100 --vulnx --vulnx-limit 3
Argumentos requeridos (uno de):
-t, --target Dirección IP del objetivo único
-c, --cidr Rango CIDR a escanear (p. ej., 192.168.1.0/24)
-f, --cidr-file Archivo que contiene rangos CIDR (uno por línea)
Argumentos opcionales:
-o, --output Archivo de salida (predeterminado: scan_results.json)
-r, --rate Máximo de solicitudes por segundo (predeterminado: 10.0)
--timeout Tiempo de espera de conexión en segundos (predeterminado: 5)
--max-concurrent Máximo de conexiones concurrentes (predeterminado: 50)
--safe-mode Habilitar modo seguro (solo escaneos no intrusivos)
--exclude Archivo que contiene IPs a excluir del escaneo
-v, --verbosity Nivel de verbosidad: 0=silencioso, 1=normal, 2=depuración
--format Formato de salida: json o csv (predeterminado: 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 herramienta está pensada únicamente para evaluaciones de seguridad autorizadas. El escaneo no autorizado puede violar:
El escáner incluye una pequeña base de datos de vulnerabilidades integrada para los protocolos principales (consulte VULNERABILITY_DATABASE). Para obtener información más actualizada, puede habilitar la integración opcional de ProjectDiscovery vulnx:
vulnx y configure su clave API de PDCP (vulnx auth).--vulnx (opcionalmente ajuste --vulnx-limit y --vulnx-timeout).source: "vulnx".Si vulnx no está disponible o es inaccesible, el escáner recurre silenciosamente a la base de datos local.
Las entradas de la base de datos local se actualizan periódicamente a partir de búsquedas de vulnx para los protocolos principales (capturadas en esta instantánea del repositorio) y se etiquetan con source: "local_db".
Ejecute la suite de pruebas unitarias:
pytest
El escáner está diseñado para ser modular, lo que facilita la adición de soporte para nuevos protocolos:
SCADA_PORTSPROTOCOL_SIGNATURESVULNERABILITY_DATABASE¡Las contribuciones son bienvenidas! Siga estos pasos:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Este proyecto está licenciado bajo la Licencia MIT; consulte el archivo LICENSE para obtener más detalles.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA. LOS AUTORES RECHAZAN TODA RESPONSABILIDAD POR CUALQUIER DAÑO O PÉRDIDA DERIVADOS DEL USO DE ESTE SOFTWARE.