Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
sel4-ics-gateway-demo — 防御的セキュリティデモ: 脆弱なICSをCVE-2019-14462から保護するseL4マイクロカーネルゲートウェイ | Kitploit
ツール/GitHubGitHub/spanwich/sel4-ics-gateway-demo
防御ツールコンテナセキュリティ脆弱性分析エクスプロイトSCADA/ICSセキュリティネットワークセキュリティ侵入検知学習と教育
GitHubspanwich/sel4-ics-gateway-demo

sel4-ics-gateway-demo

防御的セキュリティデモ: 脆弱なICSをCVE-2019-14462から保護するseL4マイクロカーネルゲートウェイ

リポジトリを見る
6ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

seL4 ICSゲートウェイデモ

産業用制御システムをサイバー攻撃から保護するためのプロトコルブレーク方式とパケットフォワーディング方式のアーキテクチャを比較する、防御的セキュリティ研究プロジェクトです。

ドキュメント:

  • ネットワークアーキテクチャ - ネットワーク図とトラフィックフロー
  • コンテナアーキテクチャ - Dockerコンテナの関係性
  • CVE解説 - 脆弱性の詳細と攻撃メカニズム

研究の動機

現代のICS/SCADAシステムは、FrostyGoopのような高度な攻撃に直面しています。FrostyGoopは2024年1月にModbus TCP経由でウクライナの地域暖房システムを標的とし、氷点下の気温の中、600世帯以上を暖房のない状態にしました。従来のセキュリティソリューション(ファイアウォール、IDS)は、トラフィックをインラインで検査しながらも、エンドツーエンドで単一のTCP接続を維持するパケットフォワーディングアーキテクチャを使用しています。

このプロジェクトは、形式検証済みのseL4マイクロカーネルを使用したプロトコルブレークゲートウェイという代替案を実証します。TCP接続を終端し、保護対象デバイスへの新しい接続を確立する前にプロトコルセマンティクスを検証することで、このアーキテクチャはより強力なセキュリティ保証を提供します。

主な発見

観点プロトコルブレーク (seL4)パケットフォワーディング (Snort)
CVE-2019-14462ブロック(長さ検証)検知(Quickdrawルール)
CVE-2022-0367ブロック(アドレス検証)検知(カスタムルール)
CVE-2022-20685免疫(プリプロセッサなし)脆弱(IDS DoS)
CVE-2024-1086免疫(Linuxカーネルなし)脆弱(ホストカーネルを共有)
未知の亜種ブロック(構造検証)見逃し(シグネチャなし)
TCP状態攻撃ブロック(接続終端)可能性あり
攻撃対象領域~1,000 LoC(マイクロカーネル)~500,000 LoC(Linux + Snort)

アーキテクチャ

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

クイックスタート

前提条件

  • DockerおよびDocker Compose v2
  • seL4ゲートウェイカーネルイメージ(ユーザー提供)
  • QEMU用に約4GBのRAM

1. seL4イメージを追加

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

2. ビルドと実行

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. 接続テスト

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

ポートマッピング

注記: デフォルトのPLCは現在、ASANを使用したCVE-2022-0367モードで動作します。CVE-2019-14462のテストには--profile cve14462を使用してください。

脆弱性デモンストレーション

CVE-2019-14462: libmodbusヒープバッファオーバーフロー

PLCは意図的に脆弱なlibmodbus 3.1.2を使用しています。この攻撃は信頼されているMBAP長さフィールドを悪用します:

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: libmodbusヒープバッファアンダーフロー

modbus_mapping_new_start_address()の境界チェックのバグにより、ファンクションコード0x17(書き込みおよび読み出しレジスタ)を介したヒープアンダーフローが可能になります:

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

技術的詳細:

  • サーバーはstart_registers=100を使用し、有効なアドレスは100〜109です
  • 攻撃はwrite_address < 100を送信し、負の配列インデックスを引き起こします
  • ヒープアンダーフローは、ポインタを含むmb_mapping構造体のフィールドを破壊する可能性があります

CVE-2022-20685: Snort ModbusプリプロセッサDoS

Snort 2.9.18には、Modbusプリプロセッサに整数オーバーフローがあり、無限ループを引き起こして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

これが致命的である理由: SnortはNFQUEUEインラインモードを使用しており、パケットはSnortが判定を返すまでカーネルキューに保持されます。Snortがハングすると判定が返されず、すべてのトラフィックが停止します。これは単なるIDSの盲目化ではなく、完全なサービス拒否(DoS)です。

CVE-2024-1086: Linuxカーネル権限昇格

Linux netfilter nf_tables(カーネルv5.14〜v6.6)のuse-after-freeにより、コンテナエスケープが可能になります:

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/

これが重要な理由: Dockerコンテナはホストカーネルを共有します。攻撃者が(例えばCVE-2022-20685を介して)Snortを侵害した場合、CVE-2024-1086を使用してコンテナからエスケープし、ホスト上でroot権限を取得する可能性があります。seL4はLinuxではなく最小限のマイクロカーネルで動作するため、免疫を持っています。

デモスクリプト

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

完全比較実験

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

Snortルールプロファイル

検出効率のベンチマーク用に、複数のSnort構成が用意されています:

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

ルール適用範囲の比較

プロトコルブレーク vs パケットフォワーディング

パケットフォワーディング(従来のIDS/IPS)

root@kitploit:~
Client ────TCP────► Snort ────TCP────► PLC
          (same connection flows through)
  • エンドツーエンドの単一TCP接続
  • 攻撃者がTCP状態を操作可能
  • IDSが攻撃される可能性(CVE-2022-20685)
  • 攻撃の亜種ごとにシグネチャが必要

プロトコルブレーク(seL4ゲートウェイ)

root@kitploit:~
Client ────TCP1────► seL4 ────TCP2────► PLC
              (terminates, validates, new connection)
  • 2つの独立したTCP接続
  • クライアントはPLCのTCP状態に影響を与えられない
  • データがPLCに到達する前に検証
  • 不正な入力のクラス全体を捕捉

コンポーネント

CVEツール

PLCシミュレーション

PLCは、マルチマスター対応の地域暖房コントローラをシミュレートします(現代のPLCに典型的なスレッド・パー・クライアントアーキテクチャ)。

PLCモード

モードサービスポート説明
CVE-2022-0367plc(デフォルト)5020ASANビルド、アドレス100〜109のレジスタ
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

Modbusレジスタ

CVE-2022-0367モードでは、レジスタはアドレス100〜109にあります(SCADAツールではアドレス40101を使用):

セキュリティに関する注意

このプロジェクトには、防御的セキュリティ研究のための意図的に脆弱なコードが含まれています。脆弱なlibmodbus 3.1.2およびSnort 2.9.18は、セキュリティの概念を実証するために含まれています。

本番環境に無防備なコンポーネントをデプロイしないでください。

参考文献

脆弱性

  • CVE-2019-14462 - libmodbusヒープバッファオーバーフロー(MBAP長さ)
  • CVE-2022-0367 - libmodbusヒープバッファアンダーフロー(start_address)
  • CVE-2022-20685 - Snort ModbusプリプロセッサDoS
  • CVE-2024-1086 - Linuxカーネルnf_tables権限昇格

セキュリティ研究

  • Claroty Team82 - Snort CVE-2022-20685の分析
  • libmodbus Issue #614 - CVE-2022-0367の開示
  • CVE-2024-1086 PoC - 成功率99.4%のカーネルエクスプロイト

ICS/SCADAリソース

  • seL4マイクロカーネル - 形式検証済みマイクロカーネル
  • Digital Bond Quickdraw - 業界標準のICS/SCADA Snortルール
  • Dragos FrostyGoopレポート - ICSマルウェア分析(2024年1月のウクライナ攻撃)
  • The Record - FrostyGoop - 暖房のないウクライナの600世帯

ライセンス

認可された防御的セキュリティ研究および教育目的にのみ使用できます。

ツールをダウンロード
ポート経路アーキテクチャ保護
502クライアント → seL4 → PLCプロトコルブレークModbus構造を検証
503クライアント → Snort → PLCパケットフォワーディングルールベースIDS
5020クライアント → PLC (ASAN)直接CVE-2022-0367モード
5022クライアント → PLC直接CVE-2019-14462モード (プロファイル: cve14462)
プロファイルコマンドルール数説明
defaultdocker compose up snort12Quickdraw(業界標準)
quickdraw--profile snort-quickdraw12Digital Bond Quickdrawのみ
talos--profile snort-talos40modbus_funcキーワードを使用したTalosスタイル
modbus--profile snort-modbus13カスタムCVE検出ルールのみ
combined--profile snort-combined65全ルールの組み合わせ
CVEQuickdrawTalosカスタムModbus
CVE-2019-14462 (MBAP長さ)✅✅✅
CVE-2022-0367 (ヒープアンダーフロー)❌✅✅
CVE-2022-20685 (Snort DoS)❌✅✅
書き込み操作❌✅✅
偵察✅✅✅
DoS機能コード✅✅❌
ディレクトリ説明
gateway/seL4ゲートウェイコンテナ(QEMU + seL4カーネル)
snort/複数のルールプロファイルを備えたSnort 2.9.18 IDS(CVE-2022-20685に対して脆弱)
plc/地域暖房シミュレーション(脆弱なlibmodbus 3.1.2、CVE-2022-0367モード)
cve_tools/CVEデモンストレーション用の攻撃ツール
scripts/ユーティリティおよび実験スクリプト
docs/Mermaid図を含むドキュメント(ネットワーク、コンテナ、CVE)
ツール対象説明
cve_14462_attacklibmodbusMBAP長さの不一致によるヒープバッファオーバーフロー
cve_0367_attacklibmodbus無効な書き込みアドレスによるヒープアンダーフロー(FC 0x17)
cve_20685_attackSnortModbusプリプロセッサの無限ループ(DoS)
cve-2024-1086/Linuxカーネルnf_tablesによる権限昇格(コンテナエスケープ)
CVE-2019-14462plc-144625022通常ビルド、アドレス0〜9のレジスタ
アドレスレジスタ説明R/W
100HR[0]室内温度(°C ÷10)R
101HR[1]バルブ指令(0〜100%)R/W
102HR[2]温度設定値(°C ÷10)R/W
103HR[3]モード(0=手動、1=自動)R/W
104HR[4]外気温度(°C ÷10)R
105-109HR[5-9]ステータス、位置、供給温度、稼働時間、電力R