Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
sel4-ics-gateway-demo — Démonstration de sécurité défensive : passerelle seL4 microkernel protégeant les ICS vulnérables de CVE-2019-14462 | Kitploit
Outils/GitHubGitHub/spanwich/sel4-ics-gateway-demo
Outils DéfensifsSécurité des ConteneursAnalyse des VulnérabilitésExploitationSécurité SCADA/ICSSécurité RéseauDétection d'IntrusionApprentissage et Éducation
GitHubspanwich/sel4-ics-gateway-demo

sel4-ics-gateway-demo

Démonstration de sécurité défensive : passerelle seL4 microkernel protégeant les ICS vulnérables de CVE-2019-14462

Voir le dépôt
il y a 6 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Démo de passerelle ICS seL4

Un projet de recherche défensive en cybersécurité comparant les architectures protocol-break et packet-forwarding pour la protection des systèmes de contrôle industriels contre les cyberattaques.

Documentation :

  • Architecture réseau - Schémas réseau et flux de trafic
  • Architecture des conteneurs - Relations entre les conteneurs Docker
  • Explications des CVE - Détails des vulnérabilités et mécanismes d'attaque

Motivation de la recherche

Les systèmes ICS/SCADA modernes sont confrontés à des attaques sophistiquées comme FrostyGoop, qui a ciblé les systèmes de chauffage urbain ukrainiens via Modbus TCP en janvier 2024, privant plus de 600 foyers de chauffage par des températures négatives. Les solutions de sécurité traditionnelles (pare-feux, IDS) utilisent des architectures packet-forwarding qui inspectent le trafic en ligne mais maintiennent une seule connexion TCP de bout en bout.

Ce projet démontre une alternative : une passerelle protocol-break utilisant le micro-noyau formellement vérifié seL4. En terminant les connexions TCP et en validant la sémantique du protocole avant d'établir de nouvelles connexions vers les appareils protégés, cette architecture offre de meilleures garanties de sécurité.

Résultats clés

Architecture

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

Démarrage rapide

Prérequis

  • Docker et Docker Compose v2
  • Image du noyau seL4 de la passerelle (fournie par l'utilisateur)
  • ~4 Go de RAM pour QEMU

1. Ajouter l'image seL4

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

2. Construire et exécuter

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. Tester les connexions

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

Mappages de ports

Remarque : Le PLC par défaut fonctionne maintenant en mode CVE-2022-0367 avec ASAN. Utilisez --profile cve14462 pour les tests CVE-2019-14462.

Démonstrations de vulnérabilités

CVE-2019-14462 : Débordement de tas libmodbus

Le PLC utilise libmodbus 3.1.2 intentionnellement vulnérable. L'attaque exploite les champs de longueur MBAP fiables :

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 : Sous-débordement de tas libmodbus

Un bogue de vérification des limites dans modbus_mapping_new_start_address() permet un sous-débordement de tas via le code fonction 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

Détails techniques :

  • Le serveur utilise start_registers=100, les adresses valides sont 100-109
  • L'attaque envoie write_address < 100, provoquant un index de tableau négatif
  • Le sous-débordement de tas peut corrompre les champs de la structure mb_mapping, y compris les pointeurs

CVE-2022-20685 : Déni de service du préprocesseur Modbus Snort

Snort 2.9.18 présente un dépassement d'entier dans son préprocesseur Modbus qui provoque une boucle infinie, bloquant complètement tout le trafic à travers 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

Pourquoi c'est dévastateur : Snort utilise le mode inline NFQUEUE, ce qui signifie que les paquets sont retenus dans la file d'attente du noyau jusqu'à ce que Snort rende un verdict. Quand Snort se bloque, aucun verdict n'est rendu, et TOUT le trafic s'arrête — pas seulement une cécité de l'IDS, mais un déni de service complet.

CVE-2024-1086 : Escalade de privilèges du noyau Linux

Un use-after-free dans le netfilter Linux nf_tables (noyaux v5.14-v6.6) permet une évasion de conteneur :

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/

Pourquoi c'est important : Les conteneurs Docker partagent le noyau de l'hôte. Si un attaquant compromet Snort (par ex., via CVE-2022-20685), il pourrait utiliser CVE-2024-1086 pour s'échapper du conteneur et obtenir un accès root sur l'hôte. seL4 est immunisé car il exécute un micro-noyau minimal, pas Linux.

Scripts de démonstration

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

Expérience de comparaison complète

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

Profils de règles Snort

Plusieurs configurations Snort sont disponibles pour évaluer l'efficacité de détection :

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

Comparaison de couverture des règles

Protocol-Break vs Packet-Forwarding

Packet-Forwarding (IDS/IPS traditionnel)

root@kitploit:~
Client ────TCP────► Snort ────TCP────► PLC
          (same connection flows through)
  • Connexion TCP unique de bout en bout
  • L'attaquant peut manipuler l'état TCP
  • L'IDS peut être attaqué (CVE-2022-20685)
  • Nécessite des signatures pour chaque variante d'attaque

Protocol-Break (Passerelle seL4)

root@kitploit:~
Client ────TCP1────► seL4 ────TCP2────► PLC
              (terminates, validates, new connection)
  • Deux connexions TCP indépendantes
  • Le client ne peut pas influencer l'état TCP du PLC
  • Validation avant que toute donnée n'atteigne le PLC
  • Capture des classes entières d'entrées malformées

Composants

Outils CVE

Simulation PLC

Le PLC simule un contrôleur de chauffage urbain avec support multi-maître (architecture thread-par-client, typique des PLC modernes).

Modes PLC

ModeServicePortDescription
CVE-2022-0367plc (défaut)
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

Registres Modbus

En mode CVE-2022-0367, les registres sont aux adresses 100-109 (utilisez l'adresse 40101 dans les outils SCADA) :

Avis de sécurité

Ce projet contient du code intentionnellement vulnérable à des fins de recherche défensive en cybersécurité. La libmodbus 3.1.2 et Snort 2.9.18 vulnérables sont inclus pour démontrer des concepts de sécurité.

Ne déployez pas de composants non protégés dans des environnements de production.

Références

Vulnérabilités

  • CVE-2019-14462 - Débordement de tas libmodbus (longueur MBAP)
  • CVE-2022-0367 - Sous-débordement de tas libmodbus (start_address)
  • CVE-2022-20685 - DoS du préprocesseur Modbus Snort
  • CVE-2024-1086 - Escalade de privilèges nf_tables du noyau Linux

Recherche en sécurité

  • Claroty Team82 - Analyse Snort CVE-2022-20685
  • libmodbus Issue #614 - Divulgation CVE-2022-0367
  • CVE-2024-1086 PoC - Exploit noyau avec 99,4 % de taux de succès

Ressources ICS/SCADA

  • Micro-noyau seL4 - Micro-noyau formellement vérifié
  • Digital Bond Quickdraw - Règles Snort ICS/SCADA standard de l'industrie
  • Rapport Dragos FrostyGoop - Analyse de malware ICS (attaque Ukraine janv. 2024)
  • The Record - FrostyGoop - 600 foyers ukrainiens sans chauffage

Licence

Uniquement à des fins de recherche défensive en cybersécurité et d'éducation autorisées.

Télécharger l’outil
AspectProtocol-Break (seL4)Packet-Forwarding (Snort)
CVE-2019-14462BLOQUÉ (validation de longueur)DÉTECTÉ (règles Quickdraw)
CVE-2022-0367BLOQUÉ (validation d'adresse)DÉTECTÉ (règles personnalisées)
CVE-2022-20685IMMUNISÉ (pas de préprocesseur)VULNÉRABLE (DoS IDS)
CVE-2024-1086IMMUNISÉ (pas de noyau Linux)VULNÉRABLE (partage le noyau hôte)
Variantes inconnuesBLOQUÉ (validation structurelle)MANQUÉ (aucune signature)
Attaques d'état TCPBLOQUÉ (connexion interrompue)Possible
Surface d'attaque~1 000 LoC (micro-noyau)~500 000 LoC (Linux + Snort)
PortCheminArchitectureProtection
502Client → seL4 → PLCProtocol-breakValide la structure Modbus
503Client → Snort → PLCPacket-forwardingIDS basé sur des règles
5020Client → PLC (ASAN)DirectMode CVE-2022-0367
5022Client → PLCDirectMode CVE-2019-14462 (profil : cve14462)
ProfilCommandeRèglesDescription
defaultdocker compose up snort12Quickdraw (standard industriel)
quickdraw--profile snort-quickdraw12Digital Bond Quickdraw uniquement
talos--profile snort-talos40Style Talos avec mots-clés modbus_func
modbus--profile snort-modbus13Règles de détection CVE personnalisées uniquement
combined--profile snort-combined65Toutes les règles combinées
CVEQuickdrawTalosCustom Modbus
CVE-2019-14462 (longueur MBAP)✅✅✅
CVE-2022-0367 (sous-débordement de tas)❌✅✅
CVE-2022-20685 (DoS Snort)❌✅✅
Opérations d'écriture❌✅✅
Reconnaissance✅✅✅
Codes de fonction DoS✅✅❌
RépertoireDescription
gateway/Conteneur de la passerelle seL4 (QEMU + noyau seL4)
snort/IDS Snort 2.9.18 avec plusieurs profils de règles (vulnérable à CVE-2022-20685)
plc/Simulation de chauffage urbain (libmodbus 3.1.2 vulnérable, mode CVE-2022-0367)
cve_tools/Outils d'attaque pour les démonstrations CVE
scripts/Scripts utilitaires et d'expérimentation
docs/Documentation avec diagrammes Mermaid (Réseau, Conteneurs, CVE)
OutilCibleDescription
cve_14462_attacklibmodbusDébordement de tas via une incohérence de longueur MBAP
cve_0367_attacklibmodbusSous-débordement de tas via une adresse d'écriture invalide (FC 0x17)
cve_20685_attackSnortBoucle infinie dans le préprocesseur Modbus (DoS)
cve-2024-1086/Noyau LinuxEscalade de privilèges via nf_tables (évasion de conteneur)
5020
Construction ASAN, registres aux adresses 100-109
CVE-2019-14462plc-144625022Construction normale, registres aux adresses 0-9
AdresseRegistreDescriptionL/E
100HR[0]Température intérieure (°C ÷10)L
101HR[1]Commande de vanne (0-100 %)L/E
102HR[2]Consigne de température (°C ÷10)L/E
103HR[3]Mode (0=Manuel, 1=Auto)L/E
104HR[4]Température extérieure (°C ÷10)L
105-109HR[5-9]Statut, position, température d'alimentation, durée de fonctionnement, puissanceL