
ランダムなeBPFプログラムを生成し、カーネルベリファイア/ランタイムの動作を検証するeBPFファザーツールチェーンです。カバレッジガイド型ファジングをサポートし、発見されたCVEを追跡します。
Buzzer は、eBPF ファジング戦略 を記述できるファザーツールチェーンです。
ファジング戦略とは、ランダムな eBPF プログラムを生成し、それらが予期しない動作をしないことを検証する方法です。
ファザーを実行するには、次の手順に従ってください。
bazel をインストールします。
clang をインストールします。
正しい CC および CXX 環境変数を設定します。
export CC=clang
export CXX=clang++
実行します。
bazel build :buzzer
buzzer を root として実行するか:
sudo ./bazel-bin/buzzer_/buzzer
または CAP_BPF を使用:
sudo setcap CAP_BPF=eip bazel-bin/buzzer_/buzzer
./bazel-bin/buzzer_/buzzer
Buzzer を使って素晴らしいバグを見つけましたか? プルリクエストでお知らせください! このフレームワークで発見されたすべての問題をこのセクションで集めたいと考えています。
CVE-2023-2163: eBPF 検証器のブランチ刈り込みロジックのエラーにより、安全でないパスが探索されない可能性があります。安全でない刈り込まれたパスは実際には実行時に辿られるパスであり、その結果、検証器が特定のレジスタの値について考えていることと実際の値との間に不一致が生じます。この不一致を悪用して、混乱したレジスタをメモリ操作のベースレジスタとして使用し、カーネル内の任意のメモリを読み書きできます。
CVE-2024-41003: 検証器のレジスタ上限追跡のバグにより、攻撃者は検証器を欺いて、実行時には 1 の値を取り得るレジスタが 0 の値を保持していると思い込ませることができます。これはその後、任意のカーネルメモリの読み書きを達成するために利用でき、ローカル権限昇格やコンテナエスケープにつながる可能性があります。