Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
sel4-ics-gateway-demo — Demostración de seguridad defensiva: puerta de enlace del micronúcleo seL4 protegiendo ICS vulnerables de CVE-2019-14462 | Kitploit
Herramientas/GitHubGitHub/spanwich/sel4-ics-gateway-demo
Herramientas DefensivasSeguridad de ContenedoresAnálisis de VulnerabilidadesExplotaciónSeguridad SCADA/ICSSeguridad de RedesDetección de IntrusionesAprendizaje y Educación
GitHubspanwich/sel4-ics-gateway-demo

sel4-ics-gateway-demo

Demostración de seguridad defensiva: puerta de enlace del micronúcleo seL4 protegiendo ICS vulnerables de CVE-2019-14462

Ver Repositorio
hace 6 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Demostración de Gateway ICS seL4

Un proyecto de investigación de seguridad defensiva que compara las arquitecturas de ruptura de protocolo vs reenvío de paquetes para proteger sistemas de control industrial de ciberataques.

Documentación:

  • Arquitectura de red - Diagramas de red y flujo de tráfico
  • Arquitectura de contenedores - Relaciones entre contenedores Docker
  • Explicaciones de CVE - Detalles de vulnerabilidad y mecanismos de ataque

Motivación de la investigación

Los sistemas ICS/SCADA modernos enfrentan ataques sofisticados como FrostyGoop, que atacó sistemas de calefacción urbana ucranianos a través de Modbus TCP en enero de 2024, dejando a más de 600 hogares sin calefacción durante temperaturas bajo cero. Las soluciones de seguridad tradicionales (firewalls, IDS) utilizan arquitecturas de reenvío de paquetes que inspeccionan el tráfico en línea pero mantienen una única conexión TCP de extremo a extremo.

Este proyecto demuestra una alternativa: un gateway de ruptura de protocolo que utiliza el microkernel seL4 formalmente verificado. Al terminar las conexiones TCP y validar la semántica del protocolo antes de establecer nuevas conexiones a los dispositivos protegidos, esta arquitectura proporciona garantías de seguridad más sólidas.

Hallazgos clave

Arquitectura

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────────────┐
│ Docker Network: ics-untrusted (192.168.96.0/24)                             │
│                                                                             │
│   ┌───────────────────────┐       ┌───────────────────────┐                │
│   │ seL4 Gateway          │       │ Snort IDS             │                │
│   │ Port 502              │       │ Port 503              │                │
│   │                       │       │                       │                │
│   │ • Protocol-break      │       │ • Packet-forwarding   │                │
│   │ • TCP termination     │       │ • Inline inspection   │                │
│   │ • Length validation   │       │ • Rule-based detection│                │
│   └───────────┬───────────┘       └───────────┬───────────┘                │
│               │                               │                             │
├───────────────┼───────────────────────────────┼─────────────────────────────┤
│ Docker Network: ics-protected (192.168.95.0/24)                             │
│               │                               │                             │
│               └───────────────┬───────────────┘                             │
│                               ▼                                             │
│               ┌───────────────────────────────┐                             │
│               │ PLC (District Heating)        │                             │
│               │ Vulnerable libmodbus 3.1.2    │                             │
│               │ Port 5020 (direct access)     │                             │
│               └───────────────────────────────┘                             │
└─────────────────────────────────────────────────────────────────────────────┘

Inicio rápido

Requisitos previos

  • Docker y Docker Compose v2
  • Imagen del kernel del gateway seL4 (proporcionada por el usuario)
  • ~4GB de RAM para QEMU

1. Agregar imagen seL4

root@kitploit:~
# Place your seL4 kernel image at:
gateway/sel4-image/capdl-loader-image-arm-qemu-arm-virt

2. Construir y ejecutar

root@kitploit:~
# Build all containers
sudo docker compose build

# Start individual containers
sudo docker compose up plc        # PLC only
sudo docker compose up gateway    # seL4 gateway + PLC
sudo docker compose up snort      # Snort IDS + PLC

# Start all
sudo docker compose up

3. Probar conexiones

root@kitploit:~
# Through seL4 gateway (protected - protocol-break)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 502 | xxd

# Through Snort IDS (protected - packet-forwarding)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 503 | xxd

# Direct to PLC (unprotected - vulnerable)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 5020 | xxd

Asignaciones de puertos

Nota: El PLC por defecto ahora se ejecuta en modo CVE-2022-0367 con ASAN. Use --profile cve14462 para pruebas de CVE-2019-14462.

Demostraciones de vulnerabilidades

CVE-2019-14462: Desbordamiento de búfer de heap en libmodbus

El PLC usa libmodbus 3.1.2 intencionalmente vulnerable. El ataque explota campos de longitud MBAP confiados:

root@kitploit:~
# Start PLC in CVE-2019-14462 mode
sudo docker compose --profile cve14462 up plc-14462

# Build attack tools
cd cve_tools && make

# Attack unprotected PLC (crashes)
./cve_14462_attack 127.0.0.1 5022

# Attack through seL4 (BLOCKED)
./cve_14462_attack 127.0.0.1 502

# Attack through Snort (DETECTED by Quickdraw rules)
./cve_14462_attack 127.0.0.1 503

CVE-2022-0367: Subdesbordamiento de búfer de heap en libmodbus

Un error de verificación de límites en modbus_mapping_new_start_address() permite un subdesbordamiento de heap a través del código de función 0x17 (Escribir y Leer Registros):

root@kitploit:~
# Default PLC runs in CVE-2022-0367 mode with ASAN
sudo docker compose up plc

# Build attack tools
cd cve_tools && make

# Attack PLC - ASAN will detect heap-buffer-overflow
./cve_0367_attack 127.0.0.1 5020

# Attack with custom parameters
./cve_0367_attack 127.0.0.1 5020 88 0x4141  # Corrupt tab_registers pointer
./cve_0367_attack 127.0.0.1 5020 72 0xFFFF  # Corrupt nb_registers

# Attack through seL4 (BLOCKED - address validation)
./cve_0367_attack 127.0.0.1 502

# Attack through Snort (DETECTED by custom rules)
./cve_0367_attack 127.0.0.1 503

Detalles técnicos:

  • El servidor usa start_registers=100, las direcciones válidas son 100-109
  • El ataque envía write_address < 100, causando un índice de array negativo
  • El subdesbordamiento de heap puede corromper campos de la estructura mb_mapping, incluidos punteros

CVE-2022-20685: DoS del preprocesador Modbus de Snort

Snort 2.9.18 tiene un desbordamiento de enteros en su preprocesador Modbus que provoca un bucle infinito, bloqueando completamente todo el tráfico a través del IDS:

root@kitploit:~
# 1. Verify Snort is working (should return Modbus response)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc -w 2 localhost 503 | xxd

# 2. Attack the Snort IDS
./cve_20685_attack 127.0.0.1 503

# 3. Verify Snort is frozen (should timeout with NO response)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc -w 5 localhost 503 | xxd

# 4. Check Snort CPU (should be 100%)
sudo docker exec ics-snort top -b -n 1 | grep snort

# 5. seL4 is IMMUNE (no Modbus preprocessor to exploit)
./cve_20685_attack 127.0.0.1 502  # No effect on seL4

# 6. Restart Snort after demo
sudo docker compose restart snort

Por qué esto es devastador: Snort usa el modo en línea NFQUEUE, lo que significa que los paquetes se retienen en la cola del kernel hasta que Snort devuelve un veredicto. Cuando Snort se cuelga, no se devuelven veredictos y TODO el tráfico se detiene — no solo ceguera del IDS, sino denegación completa del servicio.

CVE-2024-1086: Escalada de privilegios del kernel de Linux

Un use-after-free en el netfilter nf_tables de Linux (kernels v5.14-v6.6) permite el escape de contenedor:

root@kitploit:~
# Check if host is vulnerable
uname -r  # Vulnerable: v5.14 - v6.6 (before patches)

# The exploit is available at:
ls cve_tools/cve-2024-1086/

Por qué esto importa: Los contenedores Docker comparten el kernel del host. Si un atacante compromete Snort (por ejemplo, a través de CVE-2022-20685), podría usar CVE-2024-1086 para escapar del contenedor y obtener acceso root en el host. seL4 es inmune porque ejecuta un microkernel mínimo, no Linux.

Scripts de demostración

root@kitploit:~
# Full demo with 4 quadrants (PLC, seL4, Snort, User terminal)
./scripts/demo.sh

# Snort-only demo with 3 panes (PLC, Snort, User terminal)
./scripts/demo-snort.sh

Experimento de comparación completo

root@kitploit:~
# Run automated comparison
./scripts/run_comparison.sh

Perfiles de reglas de Snort

Múltiples configuraciones de Snort están disponibles para evaluar la eficiencia de detección:

root@kitploit:~
# Run Snort with specific profile
sudo docker compose --profile snort-talos up

# Compare detection efficiency
sudo docker compose --profile snort-quickdraw up -d
./cve_tools/cve_0367_attack 127.0.0.1 503  # Test detection
sudo docker compose --profile snort-quickdraw down

sudo docker compose --profile snort-combined up -d
./cve_tools/cve_0367_attack 127.0.0.1 503  # Test detection
sudo docker compose --profile snort-combined down

Comparación de cobertura de reglas

Ruptura de protocolo vs Reenvío de paquetes

Reenvío de paquetes (IDS/IPS tradicional)

root@kitploit:~
Client ────TCP────► Snort ────TCP────► PLC
          (same connection flows through)
  • Única conexión TCP de extremo a extremo
  • El atacante puede manipular el estado TCP
  • El IDS puede ser atacado (CVE-2022-20685)
  • Requiere firmas para cada variante de ataque

Ruptura de protocolo (Gateway seL4)

root@kitploit:~
Client ────TCP1────► seL4 ────TCP2────► PLC
              (terminates, validates, new connection)
  • Dos conexiones TCP independientes
  • El cliente no puede influir en el estado TCP del PLC
  • Validación antes de que cualquier dato llegue al PLC
  • Captura clases enteras de entrada malformada

Componentes

Herramientas CVE

Simulación del PLC

El PLC simula un controlador de calefacción urbana con soporte multi-maestro (arquitectura hilo-por-cliente, típica de PLCs modernos).

Modos del PLC

ModoServicioPuertoDescripción
CVE-2022-0367plc (default)
root@kitploit:~
# Default mode (CVE-2022-0367 with ASAN)
sudo docker compose up plc

# CVE-2019-14462 mode
sudo docker compose --profile cve14462 up plc-14462

Registros Modbus

En modo CVE-2022-0367, los registros están en las direcciones 100-109 (use dirección 40101 en herramientas SCADA):

Aviso de seguridad

Este proyecto contiene código intencionalmente vulnerable para fines de investigación de seguridad defensiva. La vulnerable libmodbus 3.1.2 y Snort 2.9.18 se incluyen para demostrar conceptos de seguridad.

No implemente componentes sin protección en entornos de producción.

Referencias

Vulnerabilidades

  • CVE-2019-14462 - desbordamiento de búfer de heap en libmodbus (longitud MBAP)
  • CVE-2022-0367 - subdesbordamiento de búfer de heap en libmodbus (start_address)
  • CVE-2022-20685 - DoS del preprocesador Modbus de Snort
  • CVE-2024-1086 - escalada de privilegios del kernel Linux (nf_tables)

Investigación de seguridad

  • Claroty Team82 - análisis de CVE-2022-20685 de Snort
  • libmodbus Issue #614 - divulgación de CVE-2022-0367
  • CVE-2024-1086 PoC - exploit de kernel con 99.4% de tasa de éxito

Recursos ICS/SCADA

  • seL4 Microkernel - microkernel formalmente verificado
  • Digital Bond Quickdraw - reglas Snort ICS/SCADA estándar de la industria
  • Dragos FrostyGoop Report - análisis de malware ICS (ataque a Ucrania enero 2024)
  • The Record - FrostyGoop - 600 hogares ucranianos sin calefacción

Licencia

Solo para fines autorizados de investigación de seguridad defensiva y educativos.

Descargar herramienta
AspectoRuptura de protocolo (seL4)Reenvío de paquetes (Snort)
CVE-2019-14462BLOQUEADO (validación de longitud)DETECTADO (reglas Quickdraw)
CVE-2022-0367BLOQUEADO (validación de dirección)DETECTADO (reglas personalizadas)
CVE-2022-20685INMUNE (sin preprocesador)VULNERABLE (DoS del IDS)
CVE-2024-1086INMUNE (sin kernel Linux)VULNERABLE (comparte kernel del host)
Variantes desconocidasBLOQUEADO (validación estructural)NO DETECTADO (sin firma)
Ataques al estado TCPBLOQUEADO (conexión terminada)Posible
Superficie de ataque~1,000 LdC (microkernel)~500,000 LdC (Linux + Snort)
PuertoRutaArquitecturaProtección
502Cliente → seL4 → PLCRuptura de protocoloValida estructura Modbus
503Cliente → Snort → PLCReenvío de paquetesIDS basado en reglas
5020Cliente → PLC (ASAN)DirectoModo CVE-2022-0367
5022Cliente → PLCDirectoModo CVE-2019-14462 (perfil: cve14462)
PerfilComandoReglasDescripción
defaultdocker compose up snort12Quickdraw (estándar de la industria)
quickdraw--profile snort-quickdraw12Solo Digital Bond Quickdraw
talos--profile snort-talos40Estilo Talos con palabras clave modbus_func
modbus--profile snort-modbus13Solo reglas de detección de CVE personalizadas
combined--profile snort-combined65Todas las reglas combinadas
CVEQuickdrawTalosCustom Modbus
CVE-2019-14462 (longitud MBAP)✅✅✅
CVE-2022-0367 (subdesbordamiento de heap)❌✅✅
CVE-2022-20685 (DoS de Snort)❌✅✅
Operaciones de escritura❌✅✅
Reconocimiento✅✅✅
Códigos de función DoS✅✅❌
DirectorioDescripción
gateway/Contenedor del gateway seL4 (QEMU + kernel seL4)
snort/IDS Snort 2.9.18 con múltiples perfiles de reglas (vulnerable a CVE-2022-20685)
plc/Simulación de calefacción urbana (libmodbus 3.1.2 vulnerable, modo CVE-2022-0367)
cve_tools/Herramientas de ataque para demostraciones de CVE
scripts/Scripts de utilidad y experimentos
docs/Documentación con diagramas Mermaid (Red, Contenedores, CVEs)
HerramientaObjetivoDescripción
cve_14462_attacklibmodbusDesbordamiento de búfer de heap mediante discrepancia de longitud MBAP
cve_0367_attacklibmodbusSubdesbordamiento de heap mediante dirección de escritura no válida (FC 0x17)
cve_20685_attackSnortBucle infinito del preprocesador Modbus (DoS)
cve-2024-1086/kernel LinuxEscalada de privilegios mediante nf_tables (escape de contenedor)
5020
Compilación ASAN, registros en dirección 100-109
CVE-2019-14462plc-144625022Compilación normal, registros en dirección 0-9
DirecciónRegistroDescripciónL/E
100HR[0]Temperatura interior (°C ÷10)L
101HR[1]Comando de válvula (0-100%)L/E
102HR[2]Punto de ajuste de temperatura (°C ÷10)L/E
103HR[3]Modo (0=Manual, 1=Auto)L/E
104HR[4]Temperatura exterior (°C ÷10)L
105-109HR[5-9]Estado, posición, temperatura de suministro, tiempo de ejecución, potenciaL