Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/spanwich/sel4-ics-gateway-demo
Strumenti DifensiviSicurezza dei ContenitoriAnalisi delle VulnerabilitàExploitSicurezza SCADA/ICSSicurezza di ReteRilevamento IntrusioniApprendimento e Formazione
GitHubspanwich/sel4-ics-gateway-demo

sel4-ics-gateway-demo

Demo di sicurezza difensiva: gateway microkernel seL4 che protegge gli ICS vulnerabili da CVE-2019-14462

Vedi Repository
167 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Demo del Gateway ICS seL4

Un progetto di ricerca difensiva sulla sicurezza che confronta le architetture protocol-break e packet-forwarding per la protezione dei sistemi di controllo industriale dagli attacchi informatici.

Documentazione:

  • Architettura di rete - Diagrammi di rete e flusso del traffico
  • Architettura dei container - Relazioni tra i container Docker
  • Spiegazioni delle CVE - Dettagli delle vulnerabilità e meccanismi d'attacco

Motivazione della ricerca

I moderni sistemi ICS/SCADA affrontano attacchi sofisticati come FrostyGoop, che ha preso di mira i sistemi di teleriscaldamento ucraini tramite Modbus TCP nel gennaio 2024, lasciando oltre 600 famiglie senza riscaldamento durante temperature sotto lo zero. Le soluzioni di sicurezza tradizionali (firewall, IDS) utilizzano architetture packet-forwarding che ispezionano il traffico in linea ma mantengono un'unica connessione TCP end-to-end.

Questo progetto dimostra un'alternativa: un gateway protocol-break basato sul microkernel formalmente verificato seL4 microkernel. Terminando le connessioni TCP e validando la semantica del protocollo prima di stabilire nuove connessioni verso i dispositivi protetti, questa architettura offre garanzie di sicurezza più forti.

Risultati chiave

AspettoProtocol-Break (seL4)Packet-Forwarding (Snort)
CVE-2019-14462BLOCCATO (validazione lunghezza)RILEVATO (regole Quickdraw)
CVE-2022-0367BLOCCATO (validazione indirizzo)RILEVATO (regole personalizzate)
CVE-2022-20685IMMUNE (nessun preprocessore)VULNERABILE (DoS IDS)
CVE-2024-1086IMMUNE (nessun kernel Linux)VULNERABILE (condivide il kernel dell'host)
Varianti sconosciuteBLOCCATE (validazione strutturale)NON RILEVATE (nessuna firma)
Attacchi allo stato TCPBLOCCATI (connessione terminata)Possibili
Superficie d'attacco~1.000 LoC (microkernel)~500.000 LoC (Linux + Snort)

Architettura

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)     │                             │
│               └───────────────────────────────┘                             │
└─────────────────────────────────────────────────────────────────────────────┘

Avvio rapido

Prerequisiti

  • Docker e Docker Compose v2
  • Immagine del kernel del gateway seL4 (fornita dall'utente)
  • ~4GB di RAM per QEMU

1. Aggiungere l'immagine seL4

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

2. Compilare ed eseguire

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. Testare le connessioni

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

Mappatura delle porte

PortaPercorsoArchitetturaProtezione
502Client → seL4 → PLCProtocol-breakValida la struttura Modbus
503Client → Snort → PLCPacket-forwardingIDS basato su regole
5020Client → PLC (ASAN)DirettoModalità CVE-2022-0367
5022Client → PLCDirettoModalità CVE-2019-14462 (profilo: cve14462)

Nota: Il PLC predefinito ora esegue la modalità CVE-2022-0367 con ASAN. Usa --profile cve14462 per i test di CVE-2019-14462.

Dimostrazioni delle vulnerabilità

CVE-2019-14462: Heap Buffer Overflow di libmodbus

Il PLC utilizza libmodbus 3.1.2 volutamente vulnerabile. L'attacco sfrutta i campi di lunghezza MBAP considerati affidabili:

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: Heap Buffer Underflow di libmodbus

Un bug nel controllo dei limiti in modbus_mapping_new_start_address() consente un heap underflow tramite il codice di funzione 0x17 (Write and Read Registers):

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

Dettagli tecnici:

  • Il server usa start_registers=100, gli indirizzi validi sono 100-109
  • L'attacco invia write_address < 100, causando un indice di array negativo
  • L'heap underflow può corrompere i campi della struct mb_mapping, inclusi i puntatori

CVE-2022-20685: DoS del preprocessore Modbus di Snort

Snort 2.9.18 ha un integer overflow nel suo preprocessore Modbus che causa un ciclo infinito, bloccando completamente tutto il traffico attraverso l'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

Perché è devastante: Snort usa la modalità inline NFQUEUE, il che significa che i pacchetti vengono mantenuti nella coda del kernel finché Snort non restituisce un verdetto. Quando Snort si blocca, non vengono restituiti verdetti e TUTTO il traffico si ferma - non solo cecità dell'IDS, ma denial of service completo.

CVE-2024-1086: Privilege Escalation del kernel Linux

Un use-after-free in Linux netfilter nf_tables (kernel v5.14-v6.6) consente la fuga dal container:

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/

Perché è importante: I container Docker condividono il kernel dell'host. Se un attaccante compromette Snort (ad es. tramite CVE-2022-20685), potrebbe usare CVE-2024-1086 per fuggire dal container e ottenere i privilegi di root sull'host. seL4 è immune perché esegue un microkernel minimale, non Linux.

Script demo

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

Esperimento di confronto completo

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

Profili di regole Snort

Sono disponibili più configurazioni di Snort per il benchmarking dell'efficienza di rilevamento:

ProfiloComandoRegoleDescrizione
defaultdocker compose up snort12Quickdraw (standard di settore)
quickdraw--profile snort-quickdraw12Solo Digital Bond Quickdraw
talos--profile snort-talos40Stile Talos con parole chiave modbus_func
modbus--profile snort-modbus13Solo regole personalizzate di rilevamento CVE
combined--profile snort-combined65Tutte le regole combinate
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

Confronto della copertura delle regole

CVEQuickdrawTalosModbus personalizzato
CVE-2019-14462 (lunghezza MBAP)✅✅✅
CVE-2022-0367 (heap underflow)❌✅✅
CVE-2022-20685 (DoS di Snort)❌✅✅
Operazioni di scrittura❌✅✅
Ricognizione✅✅✅
Codici di funzione DoS✅✅❌

Protocol-Break vs Packet-Forwarding

Packet-Forwarding (IDS/IPS tradizionale)

root@kitploit:~
Client ────TCP────► Snort ────TCP────► PLC
          (same connection flows through)
  • Un'unica connessione TCP end-to-end
  • L'attaccante può manipolare lo stato TCP
  • L'IDS può essere attaccato (CVE-2022-20685)
  • Richiede firme per ogni variante d'attacco

Protocol-Break (Gateway seL4)

root@kitploit:~
Client ────TCP1────► seL4 ────TCP2────► PLC
              (terminates, validates, new connection)
  • Due connessioni TCP indipendenti
  • Il client non può influenzare lo stato TCP del PLC
  • Validazione prima che qualsiasi dato raggiunga il PLC
  • Intercetta intere classi di input malformati

Componenti

DirectoryDescrizione
gateway/Container del gateway seL4 (QEMU + kernel seL4)
snort/IDS Snort 2.9.18 con più profili di regole (vulnerabile a CVE-2022-20685)
plc/Simulazione di teleriscaldamento (libmodbus 3.1.2 vulnerabile, modalità CVE-2022-0367)
cve_tools/Strumenti d'attacco per le dimostrazioni CVE
scripts/Script di utilità e sperimentazione
docs/Documentazione con diagrammi Mermaid (Rete, Container, CVE)

Strumenti CVE

StrumentoBersaglioDescrizione
cve_14462_attacklibmodbusHeap buffer overflow tramite disallineamento della lunghezza MBAP
cve_0367_attacklibmodbusHeap underflow tramite indirizzo di scrittura non valido (FC 0x17)
cve_20685_attackSnortCiclo infinito del preprocessore Modbus (DoS)
cve-2024-1086/Kernel LinuxPrivilege escalation tramite nf_tables (fuga dal container)

Simulazione PLC

Il PLC simula un controllore di teleriscaldamento con supporto multi-master (architettura thread-per-client, tipica dei PLC moderni).

Modalità del PLC

ModalitàServizioPortaDescrizione
CVE-2022-0367plc (predefinito)5020Build ASAN, registri all'indirizzo 100-109
CVE-2019-14462plc-144625022Build normale, registri all'indirizzo 0-9
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

Registri Modbus

Nella modalità CVE-2022-0367, i registri si trovano agli indirizzi 100-109 (usa l'indirizzo 40101 negli strumenti SCADA):

IndirizzoRegistroDescrizioneR/W
100HR[0]Temperatura interna (°C ÷10)R
101HR[1]Comando valvola (0-100%)R/W
102HR[2]Setpoint di temperatura (°C ÷10)R/W
103HR[3]Modalità (0=Manuale, 1=Auto)R/W
104HR[4]Temperatura esterna (°C ÷10)R
105-109HR[5-9]Stato, posizione, temperatura di mandata, tempo di funzionamento, potenzaR

Avviso di sicurezza

Questo progetto contiene codice volutamente vulnerabile per la ricerca difensiva sulla sicurezza. Le versioni vulnerabili di libmodbus 3.1.2 e Snort 2.9.18 sono incluse per dimostrare concetti di sicurezza.

Non distribuire componenti non protetti in ambienti di produzione.

Riferimenti

Vulnerabilità

  • CVE-2019-14462 - libmodbus heap buffer overflow (lunghezza MBAP)
  • CVE-2022-0367 - libmodbus heap buffer underflow (start_address)
  • CVE-2022-20685 - DoS del preprocessore Modbus di Snort
  • CVE-2024-1086 - Privilege escalation nf_tables del kernel Linux

Ricerca sulla sicurezza

  • Claroty Team82 - Analisi di Snort CVE-2022-20685
  • libmodbus Issue #614 - Divulgazione di CVE-2022-0367
  • CVE-2024-1086 PoC - Exploit del kernel con un tasso di successo del 99,4%

Risorse ICS/SCADA

  • seL4 Microkernel - Microkernel formalmente verificato
  • Digital Bond Quickdraw - Regole Snort ICS/SCADA standard di settore
  • Dragos FrostyGoop Report - Analisi del malware ICS (attacco in Ucraina del gennaio 2024)
  • The Record - FrostyGoop - 600 famiglie ucraine senza riscaldamento

Licenza

Solo per ricerca difensiva autorizzata sulla sicurezza e scopi educativi.

Scarica lo strumento