
DirtyFrag (CVE-2026-43284) のラボ検出演習 - xfrm-ESP ページキャッシュ破損による Linux カーネル特権昇格。エクスプロイト実行、検出のギャップ、Elastic Stack を使用した修正済み EQL ルールを網羅した完全な解説。
分類: 内部ラボ - CyberLAB
日付: 2026年5月24日
プラットフォーム: Elastic Stack v9.4.1
ステータス: 検出確認済み
DirtyFrag(CVE-2026-43284) を利用した制御されたエクスプロイト演習。これは初期アクセス後の攻撃者がLinuxカーネルの特権昇格脆弱性を悪用するシナリオを模擬したものです。想定される攻撃者シナリオ:フィッシングで入手した資格情報で得た低権限ユーザー(saskia、uid=1001)が社内Linuxホスト上でrootへの昇格を試みる。ラボでは、本番ネットワークから隔離された意図的に脆弱なUbuntuマシン(ubuntu-vuln、カーネル6.0.0-22-generic)を使用しました。
攻撃者はラボ環境内で完全なrootアクセス(uid=0)を達成しました。Elastic Security検出スタックは3件のHIGH重大度アラート(リスクスコア73)を生成し、エクスプロイトチェーンを正しく識別しました。ただし、手動チューニングが必要でした。デフォルト設定では、アラートを見逃すギャップが存在していました。
結論: 未パッチのLinuxホスト(カーネル <= 6.x)は脆弱です。攻撃者がすでに低権限の足掛かりを得ている場合、このエクスプロイトは静かに迅速に完全なrootを提供し、ファイル整合性ツールでは検出できないディスク上の痕跡を残しません。
| 項目 | 詳細 |
|---|---|
| 脆弱性 | DirtyFrag - CVE-2026-43284(xfrm-ESPパス)、CVE-2026-43500(RxRPCパス) |
| CVSSによる影響 | 完全なローカル特権昇格によるroot取得 |
| 影響を受けるカーネル | Linuxカーネル >= 2017年1月(9年間の寿命) |
| 影響を受けるディストリ | Ubuntu 24.04.4、RHEL 10.1、AlmaLinux 10、openSUSE、CentOS Stream 10、Fedora 44 |
| ファイル整合性バイパス | ディスク上のファイルは変更なし - AIDE、Tripwire、ハッシュ監視はすべてクリーンと報告 |
| 公開PoC | 入手可能(GitHub上のV4bel/dirtyfrag) |
| rootまでの時間 | 低権限足掛かりから10分未満 |
auditdルールでは証拠が生成されない。 socket、splice、unshareに対する明示的なシステムコールルールがなければ、エクスプロイトは静かに実行される。ログもアラートもなし。デフォルトのElastic Agentデプロイメントでは、これらのルールが自動的に追加されない。process.parent.pidを使用していた。実際には、DirtyFragは中間プロセスをフォークするため、その相関が壊れる。修正策として、auditd.sessionで相関を取ることがこの演習中に特定され、実装された。/etc/shadowを読み取り、SSH認証鍵にアクセスし、永続化マーカー(/root/pwned.txt)を書き込み、ncを介したネットワーク偵察を開始した。これらはすべて初期アクセスから30分以内に発生した。| 優先度 | アクション |
|---|---|
| 即時 | すべてのホストのLinuxカーネルを修正済みバージョンにパッチ適用。Ubuntu、RHEL、AlmaLinux、openSUSE、CentOS、Fedoraのベンダーセキュリティアドバイザリを適用。 |
| 短期 | Elastic Agentで監視されているすべてのLinuxホストに、socket、splice、unshareに対する明示的なauditdシステムコールルールを展開。 |
| 短期 | EQL検出ルールを更新し、名前空間操作シーケンスに対してprocess.parent.pidではなくauditd.sessionで相関を取るように変更。 |
| 継続的 | リスクスコア73以上の特権昇格アラートを優先度の高いトリアージとして扱う。現在のルールは昇格から数秒以内に発火する。 |
目的: ホームラボSOCにおけるDirtyFragエクスプロイトに対する検出カバレッジを検証し、検出ギャップを特定し、観測された攻撃者の行動に基づいた修正済み検出ルールを作成する。
脅威モデル: フィッシングで入手した低権限ユーザーアカウント(saskia、uid=1001)の資格情報を持つシミュレートされた初期アクセス後の攻撃者。目標:xfrm-ESP受信パスを介したDirtyFragによるrootへの特権昇格。ラボの実行はProxmoxコンソールを介して行われた。機能的にはSSHによるポストアクセスと同等。
2つの攻撃者能力層が考慮された:
今回の演習ではバニラ層をカバーした。
DirtyFragは、関連するLinuxカーネルバグファミリーの3番目であり、すべて同じ根本原因を悪用する:
| CVE | ニックネーム | 導入時期 | パス |
|---|---|---|---|
| CVE-2022-0847 | Dirty Pipe | - | pipe |
| CVE-2026-31431 | Copy Fail | - | splice |
| CVE-2026-43284 | DirtyFrag | 2017年1月(コミットcac2661c53f3) | xfrm-ESP |
| CVE-2026-43500 | DirtyFrag | 2023年6月(コミット2dc334f1a63a) | RxRPC |
根本原因: IPv4/IPv6データグラム追加パスでは、skb_splice_from_iter()がページキャッシュページをソケットバッファ(sk_buff)に配置した後、SKBFL_SHARED_FRAGを設定しなかった。ESP入力パスは、攻撃者が制御するページキャッシュページに対してインプレース暗号化を実行し、それらを通常のクローンされていない非線形skbとして扱った。
エクスプロイトプリミティブ: ページキャッシュへの4または8バイトの制御書き込み。決定的。競合条件は不要。
エクスプロイトチェーン:
/usr/bin/su)をページキャッシュに読み込むsplice()を介してパケットを構築し、ファイルのページがstruct sk_buffのfrag[0]に配置されるxfrm-ESP復号パスに配信execve()を含む)はすべて、破損したバイトを返す重要な回避特性: ディスク上のファイルは決して変更されない。ファイル整合性監視ツール(AIDE、Tripwire、ハッシュチェック)はすべて、ターゲットファイルをクリーンと報告する。
脆弱性が確認されたディストリ: Ubuntu 24.04.4、RHEL 10.1、AlmaLinux 10、openSUSE Tumbleweed、CentOS Stream 10、Fedora 44。
| コンポーネント | 詳細 |
|---|---|
| Fleet Server / ELKホスト | ubuntu-tm / elk-docker - 172.66.66.30(ラボ内部) |
| Elastic Stack | v9.4.1(Elasticsearch、Kibana、Logstash - Docker) |
| ターゲット(被害者)ホスト | ubuntu-vuln - 172.66.66.27 |
| 被害者カーネル | 6.0.0-22-generic(脆弱) |
| 被害者ユーザー | saskia - uid=1001、groups=1001(saskia)、27(sudo)、100(users) |
| Elastic Agent | v9.4.1(auditbeat付き) |
| ネットワークIDS | 専用センサー上のSuricata 8.0.5 |
| Kibana | http://172.66.66.30:5601(ラボ内部) |
演習時点でのアクティブなテレメトリ:
| データセット | シェア |
|---|---|
suricata.eve | 75.2% |
elastic_agent.fleet_server | 10.8% |
elastic_agent | 9.1% |
elastic_agent.filebeat | 1.9% |
elastic_agent.auditbeat | 1.4% |
auditd_manager.auditd | 0.5% |
system.auth | 0.2% |
system.syslog | 0.1% |
演習前にラボネットワークを隔離。ファイアウォールエイリアスCyber_escape_doorが無効であることを確認 - 他のVLANやインターネットへの横方向の到達を防止。

ubuntu-vuln上で脆弱なカーネルと低権限アカウントを確認:```
saskia@ubuntu-vuln:$ uname -r
6.0.0-22-generic
saskia@ubuntu-vuln:$ whoami
saskia
saskia@ubuntu-vuln:~$ id
uid=1001(saskia) gid=1001(saskia) groups=1001(saskia),27(sudo),100(users)

#### 4.3 スタックヘルスチェック
**Suricata: 実行中かつキャプチャ中 (systemctl status)**

**Kibana/Elasticsearch: グリーン/正常 (APIチェック)**

**変更前のVMスナップショット**



#### 4.4 ネットワークキャプチャ
tcpdumpがSuricataホスト(`emp6s19`、スナップショット長262144バイト)で開始され、`172.66.66.27`のトラフィックを完全パケットキャプチャしました。


---
### 5. フェーズ2 - エクスプロイトの実行
#### 5.1 ステージング
エクスプロイトのソースコード(`exp.c`)が、V4bel/dirtyfragのPoCから被害ホストにステージングされました。```bash
ubuntu-vuln@ubuntu-vuln:~/dirtyfrag$ ls
exp exp.c README.md
ubuntu-vuln@ubuntu-vuln:~/dirtyfrag$ cp exp.c /tmp/exp/
右側のターミナルは、ユーザー saskia から見えるステージングされたコピーを示しています。
