Linux カーネル用の投機的実行ガジェット スキャナーである Kasper を紹介します。 Kasper は、テイント分析ポリシーを使用して、一時的なパス上の任意のソフトウェア/ハードウェアの脆弱性を悪用してデータを制御し (メモリ マッサージや LVI などを介して)、機密にアクセスできる (境界外または使用後などを介して) 攻撃者をモデル化します。自由なアクセス)、およびこれらの秘密を漏洩します(たとえば、キャッシュベース、MDS ベース、またはポート競合ベースの秘密チャネルを通じて)。カーネルは一時的な実行攻撃に対して大幅に強化されていますが、Kasper はまだ軽減されていない数百のガジェットを発見しました。論文全文はここでご覧いただけます。
タスクランナーとしての go-task を含む依存関係をインストールします。
sudo apt install build-essential clang-11 lld-11 libelf-dev qemu-system-x86 bison flex golang libssl-dev cmake debootstrap python3-pexpect socat ninja-build ccache
sudo sh -c "$(curl -ssL https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin
git サブモジュールを初期化/更新します (初めて実行するときはしばらく時間がかかります)。
task update
syzkaller で使用する initramfs とディスク イメージを作成します。
task initramfs:create
task syzkaller:create-image
Kasper サポートを使用して LLVM を構成および構築します。
task llvm:config llvm:build
Kasper サポートを使用して syzkaller をビルドします。
警告: 私たちが使用している syzkaller のバージョンは、golang 1.15 でのみ動作します (golang 1.15.15 を使用しています)。
task syzkaller:build
Kasper を搭載した Linux カーネルを構成して構築します。
task kernel:config build kernel:bzImage
インストルメント化されたカーネルが正しく実行されることをテストします。
task qemu:test
インストルメントされたカーネルをファジングします。
task syzkaller:run-nobench
ガジェットを集約して評価を実行するには、kasper-results をチェックしてください。