eBPF Escapes: 監視ツールが究極のルートキットに 🕵️

2026年の現代、Linuxカーネルはもはや静的なゲートキーパーではなく、動的でプログラム可能な遊び場となっています。この変革の中心にあるのがeBPF(拡張 Berkeley Packet Filter)です。かつてはネットワークパケットのフィルタリングに使われていた控えめなツールでしたが、今やクラウドネイティブの可観測性、ネットワーク、セキュリティの”スーパーパワー”へと進化しています。世界最先端のサービスメッシュ、高性能ファイアウォール、深層システムモニターを支えています。
しかし、古いセキュリティの格言にあるように:大きな力には大きな脆弱性も伴います。Cilium、Tetragon、Pixieなどの正当なツールはeBPFを使ってクラスターを保護していますが、新たな”eBPF Escapes”の世代が登場しています。2025年から2026年初頭にかけて、研究者たちはeBPFを利用したルートキットの増加を観測しています。これらはカーネル自身の”安全確認”済みバイトコードを悪用し、ファイルの隠蔽、認証情報の窃取、トラフィックのリダイレクトをほぼ完全に不可視化します。
この記事では、eBPFルートキットの仕組み、eBPF検証器の脆弱性、そして最も信頼されている監視ツールが侵入を見逃す原因について解説します。
1. コントロールのアーキテクチャ:なぜeBPFが最適な武器なのか
eBPFがルートキットになる仕組みを理解するには、その構築理由を理解する必要があります。従来、カーネルの挙動を変更するにはKernel Module(LKM)を書かなければなりませんでした。これは危険で、一つのバグでシステム全体がクラッシュ(”Kernel Panic”)する可能性がありました。
eBPFはこれを変え、カーネル内にサンドボックス化された仮想マシンを導入しました。これにより、開発者は:
- コードを制限されたCライクな言語で書くことができる
- 安全性を”eBPF Verifier”で検証し、無限ループや不正なメモリアクセスを防止
- JITコンパイルでネイティブなマシン命令に変換し、ほぼオーバーヘッドなしで実行
- フック(syscall、トレースポイント、ネットワークイベント)にアタッチできる
攻撃者の視点
攻撃者にとって、eBPFは従来のルートキットよりも優れています。理由は:
再起動不要の永続性:eBPFプログラムは動的にロード・アンロード可能
検出からの安全性:従来のEDR(Endpoint Detection and Response)ツールは疑わしいファイルやプロセスを検出しますが、eBPFプログラムはカーネルのメモリ空間に常駐し、ディスク上に痕跡を残さないことが多い
正当化の偽装:FalcoやDatadogなど多くのセキュリティツールがeBPFを利用しているため、悪意のあるeBPFプログラムは正当なカーネルプローブのノイズに紛れて見つかりにくい
2. フックの悪用:eBPFルートキットが現実を操作する方法
eBPFルートキットはシステムを破壊するのではなく、その認識を歪めます。重要なカーネル関数にフックを仕掛けることで、OSがユーザに報告する内容を変更します。
A. ファイルとプロセスの隠蔽(getdents64フック)
最も一般的な隠蔽手法はsys_getdents64 syscallにフックを仕掛けることです。これはディレクトリ内のファイル一覧を取得する関数です。
攻撃の流れ:lsやpsを実行すると、カーネルはgetdents64を呼び出します。悪意のあるeBPFプログラム(fexitやkretprobeフック経由でアタッチ)が、リストがユーザ空間に渡る前に介入します。
結果:eBPFプログラムはリストをスキャンし、マルウェアに関連するファイル名やプロセスID(PID)を検出してバッファから削除します。これにより、ユーザには”クリーン”なディレクトリが見えますが、マルウェアは平然と動作し続けます。
B. ネットワークリダイレクト(XDPとTCフック)
eBPFはXDP(eXpress Data Path)レベルで動作します。これはネットワークスタックの最下層で、パケットがLinuxファイアウォール(iptables/nftables)に到達する前に介入します。
攻撃の流れ:LinkPro(2025年末に発見された)などのルートキットはXDPを使い、「Magic Packets」を監視します。これは特定のウィンドウサイズやシーケンス番号を持つTCPパケットで、マルウェアの”Wake-on-LAN”信号として機能します。
結果:C2(コマンド&コントロール)トラフィックを傍受し、パケットを破棄してtcpdumpやWiresharkに表示させません。また、トラフィックを隠されたプロキシにリダイレクトし、データを外部に漏洩させることも可能です。
C. 認証情報の窃取(UprobesとPAM)
攻撃者はuprobes(ユーザーレベルのプローブ)を使い、libpam.so(Linuxのプラグ可能認証モジュール)内の関数にフックを仕掛けることができます。
攻撃の流れ:Pamspyのようなツールはpam_get_authtok関数にフックします。
結果:sudoやssh、ローカルログイン時に入力されたパスワードをキャプチャし、クリアテキストのままeBPFマップ(カーネル内のデータ構造)に保存します。攻撃者は後でこれを取得可能です。
3. “バウンス”を破る:eBPF検証器のバイパス
開発者とカーネルの間に立つ唯一の壁は、eBPF Verifierです。これはメモリ安全性を静的解析で保証する”バウンサー”です。しかし、検証器は複雑なソフトウェアであり、すべてのソフトと同様にバグを抱えています。
find_equal_scalars脆弱性
2024年のNCCグループによる大規模なセキュリティ監査で、検証器が”スカラー”値(整数)を追跡する方法に論理的な欠陥があることが判明しました。
エクスプロイト:攻撃者は複雑なビット演算(AND、OR、XOR)を使い、レジスタに安全な値(例:0から64)を含むと検証器に誤認させることができますが、実際には大きな値(例:メモリアドレス)を保持しています。
脱出の仕組み:検証器が騙されると、JITコンパイラはコードを生成し、eBPFプログラムが任意のカーネルメモリを読み書きできるようになります。これは”聖杯”とも呼ばれ、サンドボックス化されたプログラムを完全なカーネルエクスプロイトに変えることが可能です。
論理的欠陥と機能の乱用
すべてのeBPFエスケープが”脆弱性”を必要とするわけではありません。多くはカーネルのヘルパー関数を悪用します。例えば、bpf_probe_write_userはデバッガがメモリを書き換えるために使う正当な関数です。これを利用し、攻撃者は/etc/passwdバッファに”root”ユーザを挿入し、実際のファイルに触れることなく認証情報を改ざんできます。
4. 可視性のギャップ:なぜ従来のセキュリティは盲目なのか
なぜ高価なEDRツールがこれらのルートキットを見つけられないのか?答えは”可視性のギャップ”にあります。
| 機能 | 従来のマルウェア | eBPFルートキット |
|---|---|---|
| ディスクの痕跡 | /usr/binや/tmpのバイナリ | カーネルメモリ内のみ |
| syscallログ | auditdやsyslogに記録 | ロギング関数自体にフック |
| ネットワークトラフィック | iptablesやtcpdumpに見える | XDP/ドライバレベルで傍受 |
| 検出 | ファイルの署名やハッシュ | “サインレス”のバイトコード実行 |
2026年、ほとんどのEDRはユーザースペースに焦点を当て続けています。プロセスツリーやファイル変更を監視しますが、eBPFルートキットは”マシンの幽霊”です。新しいプロセスを作成せず、既存のプロセスの挙動を変えるだけです。
カーネルに”‘backdoor’という名前のプロセスはありますか?”と尋ねると、カーネル(ルートキットの制御下にある)は単に”いいえ”と答えます。
5. ケーススタディ:2025年のLinkProアウトブレイク
これまでで最も高度なeBPFエスケープの例はLinkProです。2025年10月に発見されたこのルートキットは、AWSホスティングのKubernetesクラスターを標的としました。
初期アクセス:攻撃者はJenkinsサーバの脆弱性(CVE-2024-23897)を突いて最初の侵入を果たしました。
展開:標準的なシェルの代わりに、eBPFモジュールを含む悪意のあるDockerイメージを展開しました。
カーネルフック:LinkProは2つのモジュールをロードしました。一つはsys_bpf(他のeBPFプログラムをロードするためのsyscall)にフックし、ルートキットがbpftoolなどのツールから自身の存在を隠すことを可能にしました。
ステルスC2:ルートキットは”Magic TCP SYN”パケット(特定のウィンドウサイズ54321を持つ)を受信すると待機状態になり、逆シェルを開きます。これにより標準的なポートスキャンでは検出できません。
LinkProは、eBPFが単なるローカル永続化のツールにとどまらず、クラウドネイティブの横移動のツールにもなることを示しました。
6. 2026年にカーネルを守る方法
検証器を回避し、フックを隠すことができるなら、防御側に希望はあるのでしょうか?はい、あります。ただし、「レガシーセキュリティ」から「カーネル認識型セキュリティ」へのシフトが必要です。
1. カーネル設定の強化
最初の防御策は、誰がeBPFプログラムをロードできるかを制限することです。
非特権ユーザのBPF無効化:kernel.unprivileged_bpf_disabled = 1を設定します。これにより、非rootユーザはBPFコードをロードできなくなります。
能力の制限:Linux Capabilitiesを使い、特定のサービス(監視エージェントなど)だけにCAP_BPFやCAP_PERFMONを付与します。
2. ランタイムの整合性監視(TetragonとTracee)
皮肉なことに、eBPFルートキットと戦う最良の方法は、より良いeBPFを使うことです。CiliumのTetragonなどのツールは、eBPFを使ってカーネルの状態を監視します。
署名の強制:2026年、多くの組織は署名済みのeBPFプログラムを採用しています。カーネルは、信頼できる認証局(例:セキュリティチーム)によって暗号的に署名されたBPFバイトコードのみをロードするよう設定されています。
BTFの整合性:BPF Type Format(BTF)データの監視により、ルートキットがカーネル構造を改ざんし、マップを隠すことを検出できます。
3. フォレンジック調査
セキュリティチームは定期的に”カーネルスナップショット”を実行すべきです。
bpftool:bpftool prog showを使い、すべてのロード済みプログラムをリストアップします。名前やPIDのないプログラムがあれば、直ちに調査します。
メモリフォレンジック:高セキュリティ環境では、ハイパーバイザーレベルのメモリ解析(Volatility 3などのツールを使用)で、sys_bpfにフックされたeBPFプログラムを特定できます。
4. “Magic Packets”に注意
最新のファイアウォールは、「異常なヘッダ値」を検出するよう設定すべきです。eBPFルートキットは非標準のTCPフラグやウィンドウサイズを使って起動します。2026年の行動AIは、これらの”低頻度・高意図”のパケットを検出するように調整されています。
7. 結論:現代カーネルの二面性
2026年に向けて、Linuxカーネルを巡る戦いは激化する一方です。eBPFは、パフォーマンスと可観測性のためのブレークスルー技術であると同時に、洗練された攻撃者の究極のツールキットにもなり得ます。
組織にとっての教訓は明白です:確認できないものは信用できない。eBPFを監視とセキュリティに使うなら、そのeBPFサブシステム自体も守る必要があります。あなたのコンテナに”X-ray vision”を与えるツールが、もし侵害されれば、逆にあなたのコアに潜む捕食者を見えなくする目隠しになり得るのです。
あなたのカーネルはプログラム可能ですか?はい。でも、そのプログラミングを誰が行っているのか?が重要です。
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.