
Fuzzer para el protocolo IIoT Sparkplug B
Una herramienta integral de evaluación de seguridad para probar implementaciones del protocolo MQTT Sparkplug B. El fuzzer prueba sistemáticamente todos los campos del protocolo en los 9 tipos de mensaje, descubre dispositivos activos en la red y genera registros detallados para su análisis.
Esta herramienta envía mensajes MQTT malformados, de inyección y que violan el protocolo a un broker objetivo. Ejecútela únicamente contra sistemas que posea o para los que tenga autorización escrita explícita para realizar pruebas. Los brokers Sparkplug B suelen ubicarse en entornos OT/ICS donde los payloads inesperados pueden interrumpir procesos físicos: asuma que todo objetivo está cerca de producción salvo que se demuestre lo contrario.
Si descubre una vulnerabilidad en una implementación de Sparkplug B usando esta herramienta, siga una divulgación coordinada con el proveedor afectado. Para informar un problema de seguridad en la propia herramienta, consulte SECURITY.md.
La especificación Sparkplug B define un espacio de nombres de temas y un formato de payload construido sobre MQTT y Google Protocol Buffers para entornos de IIoT (Internet Industrial de las Cosas). Este fuzzer evalúa la seguridad y robustez de las implementaciones de Sparkplug B mediante:
En sistemas Debian/Ubuntu/Kali modernos (sistemas PEP-668), --setup no puede ejecutar pip install en el Python del sistema; use un entorno virtual o pipx primero. La ruta recomendada:```bash
python3 -m venv .venv
source .venv/bin/activate
python3 sparkplug-fuzzer.py --setup
O ejecútalo mediante `pipx run` si prefieres no gestionar el venv tú mismo. En sistemas antiguos sin la política PEP-668, `python3 sparkplug-fuzzer.py --setup` funciona directamente.
`--setup` hará lo siguiente:
1. Instalar las dependencias pip (`paho-mqtt`, `protobuf`)
2. Clonar una versión fija (tag) del repositorio [Eclipse Tahu](https://github.com/eclipse/tahu) (consulta `TAHU_REF` en el script)
3. Copiar los módulos auxiliares `sparkplug_b.py` y `array_packer.py`
4. Compilar `sparkplug_b.proto` en bindings de Python (usa `protoc` si está disponible; si no, recurre a `grpcio-tools`)
5. Limpiar el clon de Tahu
Después de la configuración, tu directorio debería contener:```
sparkplug-fuzzer.py # The fuzzer
sparkplug_b.py # Sparkplug B helper module (from Tahu)
array_packer.py # Array packing helper (from Tahu)
sparkplug_b_pb2.py # Generated protobuf bindings
requirements.txt # Python dependencies
python3 sparkplug-fuzzer.py --setup # first-time setup python3 sparkplug-fuzzer.py -H localhost -p 1883 -v # run fuzzer
Esto:
1. Se conectará al broker en `localhost:1883`
2. Escuchará durante 10 segundos para descubrir dispositivos Sparkplug existentes
3. Establecerá el fuzzer como un nodo/dispositivo Sparkplug
4. Ejecutará las 12 categorías de fuzzing (~635+ casos de prueba)
5. Apuntará a cualquier dispositivo descubierto con mensajes falsificados
6. Escribirá los resultados en `sparkplug_fuzz.jsonl`
## Uso