尾崎純平
eBPF は Linux が提供する機能の 1 つで,専用の BPF コードを用いてカーネル内で動作するネットワーク 機能をユーザの手で追加することができる.しかし,カーネルの動作に直接干渉するという特徴から,カー ネルの不具合の発生を防ぐため外部からのデータ参照には制限が存在する.そのため,eBPF の安全性検証 には内部データを必要としない方法として文法的誤りやコード規則違反の有無を判別する静的解析が主流 となっている.しかし,静的解析では対象としていない項目の追跡やユーザの入力ミスのような文法的誤 りを伴わない不具合の検証は行うことができず十分な検証環境は整えられていない.本研究は BPF コード の動作に関して用途に応じた柔軟な追跡を行うために,ユーザ空間内で BPF コードの動作を行う仮装マシ ンにデバッグ機能の搭載を行う.デバッグは次の 4 つの機能を持つ.1 ブレークポイント:指定した行でプ ログラムの一時停止を行う,2 ステップ実行:各行毎に動作の一時停止を行う,3 データ参照:仮想マシン 内に記録されるデータの出力を行う,4 フラグ機能:指定した命令内容が実行される際に動作の一時停止を 行うフラグ機能.フラグ機能は本研究にて独自で実装した機能であり,停止条件を到達行数だけでなく命令 内容により管理することで目的に応じた検証内容の変更が可能である.更に,データ送受信の中での BPF コードの動作の観測を行う方法として,2 つのホストを用いた双方向通信の中で仮装マシンの呼び出しを行 うフレームワークを構築する.各ホストではデバッグを行う BPF コードの登録と相手ホストへのパケット 送信を行うことができ,パケット受信時にはデバッグ機能を搭載した仮想マシンを動作させることにより 検証を行う.また,カーネル内部の機能であった tail call 機能の再現をユーザ空間内で行っており,新たに 連動する複数のプログラムに対する検証が可能である.