188 Views
March 23, 26
スライド概要
情報科学若手の会・セキュリティ若手の会 春の陣2026 LT発表
https://wakate.connpass.com/event/382858/
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT Userspace eBPF の世界 筑波大学 情報科学類 中村天晴
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT 自己紹介 • 中村天晴 • id: appare45 • 筑波大学 情報科学類 3 年生 • バイナリ計装や eBPF に興味がある 2
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT eBPF とは Linux カーネルの挙動を簡単・安全に変更できる機能 • eBPF バイトコードをカーネル中の仮想マシン(インタープリタ)で実行する • eBPF プログラムロード時に検証器が無限ループや境界外アクセスがないことを チェックする ‣ 命令の最大数が定められている • カーネル中のフックポイントにフックして実行される • カーネル内で実行されるためユーザ空間で実行するよりコンテキストスイッチが少な い • eBPF プログラムの設定や変更が容易 3
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT 様々なフックポイント eBPF を起動するエントリーポイントで、手元の Linux で調べると 32 種類のプログラ ムタイプがある • Kprobe/Uprobe: カーネル中の任意の位置・ユーザプログラム中の任意の位置 • XDP/Traffic Control(TC): パケット処理 • Tracepoint: 事前に設定されているトレースポイント • LSM: LSM フックの 1 つとして eBPF を実行できる • Cgroup: Cgroup 単位でフックするかどうかを制御する それぞれのプログラムタイプでできることが違う 4
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT eBPF 実行までの流れ 図 1: ebpf.io/ja/what-is-ebpf の図をもとに作成 5
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT 何に使われているか ネットワーク処理 • 簡単に Linux のネットワーク処理を書き換えられる • Cilium という CNI(Container Network Interface)が eBPF 実装で有名 セキュリティ • プロセスが何をしているかを透過的に調べられる 監視(オブザーバビリティ) • オーバーヘッド少なく観測ができる • バイナリへの依存が少ない 6
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT ユーザアプリケーションを観測する eBPF • Uprobe/Uretprobe を使うとユーザアプリケーション中のパフォーマンスを計測する ことができる • Go 言語などの静的リンクされたプログラムの観測に使われることがある1 1https://www.docswell.com/s/appare45/ZPGNN1-ebpf-japan-meetup-5 7
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT eBPF の難しさ • eBPF バイトコードにコンパイルできる言語が限られる ‣ 現状でエコシステムが確立されているのは C と Rust • プログラムの制限が厳しい ‣ 特にプログラム長の制限で苦しむことが多い • 特権が必要 ‣ クラウド/コンテナ環境で活用することが難しい • ユーザ関数フックのオーバーヘッド ‣ uprobe/uretprobe 実行時はユーザ空間→カーネル空間のオーバーヘッドが生じる 8
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT eBPF のうれしさ • 元の Linux カーネルのソースコードを変更する必要がない • 一部だけの挙動を簡単に変更できる • その変更が安全であることを(ある程度)保証することができる 9
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT ユーザ空間で eBPF を動かす eBPF の利便性を Linux カーネル以外にも広げる • uBPF ‣ Userspace で eBPF を動かす VM の実装 • Oko ‣ Open vSwitch に eBPF を実装する • eBPF for Windows ‣ Microsoft が実装している eBPF を Windows で実行する実装 • eBPF for QEMU ‣ QEMU に eBPF を実装する 10
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT bpftime • ユーザ空間で Linux カーネルの eBPF と互換性を保った実装 ‣ システムコール呼び出し・ユーザプログラム中の関数へのフックだけが可能 • ユーザ関数へのフック時のオーバーヘッドが少ない 1. ユーザプログラムだけで実現する方法 2. 通常の eBPF と組み合わせて実現する方法がある 1 の手法の場合は実行に特権が要らない 11
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT ユーザプログラムへのフックを eBPF で実現する • eBPF プログラムとバイナリ計装の手法を組み合わせる • 関数呼び出しやシステムコールをバイナリ中から見つけ出して、jmp に書き換える 12
情報科学若手の会・セキュリティ若手の会 春の陣 2026 LT bpftime の問題点 • 対応しているトレースポイントが少ない ‣ アプリケーション中のバイナリ書き換えに依存している ‣ ネットワーク処理は変更できない • カーネル中の BPF Map オブジェクトを扱うにはやはり特権が必要 • 現状ではユーザ空間での eBPF とカーネル空間の eBPF を組み合わせるのが現実的 • eBPF を Linux カーネルの外でも使う取り組みについて知っていただければ幸いです 13