Kami menghadirkan Kasper, pemindai gadget eksekusi spekulatif untuk kernel Linux. Kasper menggunakan kebijakan analisis noda untuk memodelkan penyerang yang mampu mengeksploitasi kerentanan perangkat lunak/perangkat keras secara sewenang-wenang pada jalur sementara untuk mengontrol data (misalnya, melalui pemijatan memori atau LVI), mengakses rahasia (misalnya, melalui di luar batas atau penggunaan setelahnya). akses bebas), dan membocorkan rahasia ini (misalnya, melalui saluran rahasia berbasis cache, berbasis MDS, atau berbasis pertikaian port). Meskipun kernelnya sangat kuat terhadap serangan eksekusi sementara, Kasper menemukan ratusan gadget yang belum dimitigasi. Anda dapat menemukan makalah lengkapnya di sini.
Instal dependensi, termasuk go-task sebagai task-runner:
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
Inisialisasi/perbarui submodul git (ini akan memakan waktu cukup lama saat pertama kali dijalankan):
task update
Buat initramfs dan image disk untuk digunakan dengan syzkaller:
task initramfs:create
task syzkaller:create-image
Konfigurasikan dan bangun LLVM dengan dukungan Kasper:
task llvm:config llvm:build
Bangun syzkaller dengan dukungan Kasper:
PERINGATAN : versi syzkaller yang kami gunakan hanya bekerja dengan golang 1.15 (kami menggunakan golang 1.15.15)!
task syzkaller:build
Konfigurasikan dan bangun kernel Linux yang diinstrumentasi Kasper:
task kernel:config build kernel:bzImage
Uji apakah kernel yang diinstrumentasi berjalan dengan benar:
task qemu:test
Fuzz kernel yang diinstrumentasi:
task syzkaller:run-nobench
Untuk mengumpulkan gadget dan menjalankan evaluasi, silakan periksa hasil kasper.