
VED (Vault Exploit Defense)-eBPFは、eBPF(拡張Berkeley Packet Filter)を活用して、Linuxシステム向けのランタイムカーネルセキュリティモニタリングとエクスプロイト検出を実装します。
eBPFは、カーネルソース自体を変更せずにカーネル内でコード実行を可能にするカーネル内仮想マシンです。eBPFプログラムは、トレースポイント、kprobes、その他のカーネルイベントにアタッチして、実行を効率的に分析し、データを収集できます。
VED-eBPFは、eBPFを使用してセキュリティに敏感なカーネル動作をトレースし、エクスプロイトやルートキットを示す可能性のある異常を検出します。主に2つの検出機能を提供します:
wCFI(制御フロー整合性)は、カーネルコールスタックをトレースして、制御フローハイジャック攻撃を検出します。有効な呼び出しサイトのビットマップを生成し、各戻りアドレスが既知の呼び出しサイトと一致することを検証することで動作します。
PSD(特権昇格検出)は、カーネル内の資格情報構造の変更をトレースして、不正な特権昇格を検出します。
VED-eBPFは、eBPFプログラムをカーネル関数にアタッチして実行フローをトレースし、セキュリティイベントを抽出します。eBPFプログラムは、これらのイベントをperfバッファを介してユーザー空間に送信し、分析を行います。
wCFIは、コマンドラインで指定された関数にアタッチすることでコールスタックをトレースします。各呼び出しで、スタックをダンプし、スタックIDを割り当て、objdumpと/proc/kallsymsから生成された有効な呼び出しサイトの事前計算されたビットマップに対して戻りアドレスを検証します。
無効な戻りアドレスが検出され、スタックが破損していることを示す場合、次の内容を含むwcfi_stack_eventを生成します:
このセキュリティイベントは、perfバッファを介してユーザー空間に送信されます。
wCFI eBPFプログラムは、スタックポインタとカーネルテキスト領域の変更も追跡し、検証を最新の状態に保ちます。
PSDは、commit_credsやprepare_kernel_credなどの関数にアタッチして、資格情報構造の変更をトレースします。各呼び出しで、次のような情報を抽出します:
呼び出し前後の資格情報を比較して、不正な変更を検出します。不正な権限昇格が検出された場合、資格情報フィールドを含むpsd_eventを生成し、perfバッファを介して送信します。
VED-eBPFには以下が必要です:
VED-eBPFは現在、eBPFベースのカーネルエクスプロイトおよびルートキット検出の可能性を示す概念実証です。進行中の作業には以下が含まれます:
VED-eBPFは、カーネル変更なしで効率的で低オーバーヘッドなカーネルセキュリティモニタリングを構築するためのeBPFの可能性を示しています。eBPFトレーシングとperfバッファを活用することで、重要なセキュリティイベントをリアルタイムで抽出し、分析して、クラウドネイティブ環境における新たなカーネル脅威を特定することができます。