
CVE-2026-31431(「Copy Fail」)について、我々は3つのバイパス戦略を組み合わせることで、主流のセキュリティ製品における体系的な弱点を実証しました:io_uring非同期I/Oパス、プロセス分割(fork + SCM_RIGHTS)、およびソケット再利用です。実証テストを通じて、これらの手法が事実上すべてのシステムコールベースの検出ツールを回避できることを証明しました。
io_uringは共有メモリリングバッファを介してリクエストを送信し、従来のシステムコールエントリポイントをバイパスします。これは以下を意味します:
iou-wrk-XXXXX)は、audit_syscall_entry()をトリガーせずにカーネル内で操作を実行しますsocket(AF_ALG)のみをブロックするSeccompポリシーは、IORING_OP_SOCKETを介してバイパス可能です — seccompはシステムコールエントリでのみチェックし、io_uring操作はそのエントリを通過しませんfork + SCM_RIGHTS(Unixドメインソケットfd受け渡し)を使用することで、ソケット作成とsplice操作を異なるプロセスに配置できます:
same_field(audit.pid)相関が破壊されます — ソケットPID ≠ splice PIDとなり、CRITICALルールが発火しません元のPoCはイテレーションごとに新しいソケットを作成します(40回以上のsocket(AF_ALG)呼び出しを生成)。ソケット再利用はリスニングソケットを1つだけ作成し、ループはaccept()を呼び出しますが、これは新しいソケットイベントを生成しません。count >= Nに基づくルールは完全に無効化されます。
io_uringパス + splice + /etc/passwd + authencアルゴリズム + SCM_RIGHTS分割 + ソケット再利用
この組み合わせでは:システムコールベースのツールは完全に盲目になり、プロセスレベルの相関は破壊され、カウント閾値は失敗します。kprobe収束点検出のみがこの組み合わせを捕捉できます。
__sock_create(family=38)は、すべてのパス(システムコールおよびio_uring)にとってバイパス不可能な収束点です — AF_ALGはLinuxカーネルにおける唯一のユーザースペース暗号APIです。攻撃者が手法をどのように変えても、AF_ALGソケットを作成する必要があります。LSMレベルでこの関数をモニタリングすることで、100%の再現率が得られ、いかなるバリアントの影響も受けません。
Falcoのネイティブmodern_ebpfドライバはシステムコールパスのみを捕捉します。krsiプラグインが必要です — これはio_socket()および__sys_socket()カーネル関数の終了に対するfexitトレーシングを使用して、AF_ALGソケット作成のio_uringパスをカバーします。推奨されるフォールバックルール:
- rule: AF_ALG Socket Created
condition: >
(evt.type = socket and evt.args contains AF_ALG) or
(evt.type = krsi_socket and krsi.domain = 38)
output: >
AF_ALG socket created (source=%evt.type domain=%evt.arg.domain
krsi_domain=%krsi.domain proc=%proc.name pid=%proc.pid)
priority: WARNING
tags: [cve-2026-31431, crypto, container_escape]
推奨ルールの検出アプローチ:socketイベント(システムコールパス、evt.args contains AF_ALG文字列マッチングを使用してENUMFLAGS32型制限をバイパス)とkrsi_socketイベント(io_uringパス、krsi.domain = 38整数比較を使用)を同時にカバーします。カウント閾値なし(ソケット再利用で無効化)、PID相関依存なし(マルチプロセス分割で無効化)。
注記: コミュニティのThreatBearルールの3つの防御レイヤーはすべてバイパス可能です — ENUMFLAGS32型不一致(evt.arg[0]=38は常にfalse)、ソケット再利用がカウント閾値を無効化(count=1 < 40)、マルチプロセス分割がPID相関を破壊。詳細はルールバイパス分析を参照してください。
Wazuhはauditdのシステムコール監査イベントに完全に依存しています。io_uring操作はシステムコールエントリを通過しないため、auditdはゼロイベントを生成し、7つのWazuhルールすべてが失敗します。Elastic Security Agentにも同じことが当てはまります — システムコールエントリ依存の製品は、構造的にio_uringパスに対して盲目です。詳細はWazuh制限分析を参照してください。
bypass_demo/ディレクトリには、検出バイパス手法の概念的な説明が含まれています。実際のPoCコードは内部使用のみを目的としており、公開配布はされていません。
| ドキュメント | 内容 |
|---|---|
| VULNERABILITY.md | 根本原因 — 3つのカーネル変更の重ね合わせ、9ステップの攻撃チェーン、ページキャッシュ書き込み特性 |
| ドキュメント | 内容 |
|---|---|
| defense/HARDENING.md | 3層防御モデル:カーネル設定 → seccomp → ユーザー名前空間;Docker 29.4.2セキュリティ分析 |
| 製品 | 検出レイヤー | 従来のシステムコール | io_uringパス | マルチプロセス分割 | ソケット再利用 | 評価 |
|---|
| Tetragon (kprobe) | カーネル関数 | ✅ | ✅ | ✅ | ✅ | 唯一のフルチェーンカバレッジ |
| Falco + krsiプラグイン | fexit/fentry | ✅ | ✅ | ✅ | ✅ | io_uringにはkrsiが必要;エントリのみ |
| Falco (modern_ebpf) | システムコールtracepoint | ✅ | ❌ | ✅ | ✅ | io_uringは完全に見えない |
| auditd / Wazuh | システムコール監査 | ✅ | ❌ | ❌ PID破壊 | ⚠️ | io_uring盲目 + PID相関破壊 |
| Elastic Security Agent | システムコール | ✅ | ❌ | ⚠️ | ⚠️ | Wazuhと同様;システムコール依存 = 盲目 |
| EXPLOIT_VARIANTS.md |
| 6つの悪用バリアント次元 — I/Oパス × データ送信 × ターゲットファイル × AEADアルゴリズム × プロセス分割 × ソケット再利用 |
| DETECTION_THEORY.md | 検出理論 — 収束点と分岐点、4層検出アーキテクチャ、マルチシグナル時間相関 |
| ドキュメント | 内容 |
|---|
| detection/tetragon.md | 推奨 — Tetragon kprobe、従来 + io_uringをカバーする5つのプローブ、唯一のフルチェーン検出 |
| detection/falco.md | Falco 0.40.0 + krsi 0.1.0設定ガイド、krsi内部、トラブルシューティング |
| detection/wazuh.md | Wazuh + auditdの3つの主要な制限:io_uring盲目、PID相関の破壊、ページキャッシュの不可視性 |
| detection/rule_bypass.md | ThreatBearルールバイパスの原理、推奨ルールのアンチバイパス実証検証 |