Presentamos Kasper, un escáner de dispositivos de ejecución especulativa para el kernel de Linux. Kasper utiliza políticas de análisis de corrupción para modelar un atacante capaz de explotar vulnerabilidades arbitrarias de software/hardware en una ruta transitoria para controlar datos (por ejemplo, mediante masaje de memoria o LVI), acceder a secretos (por ejemplo, a través de métodos fuera de límites o de uso posterior). accesos gratuitos) y filtrar estos secretos (por ejemplo, a través de canales encubiertos basados en caché, MDS o contención de puertos). Aunque el kernel está fuertemente reforzado contra ataques de ejecución transitoria, Kasper encuentra cientos de dispositivos que aún no están mitigados. Puede encontrar el documento completo aquí.
Instale dependencias, incluido go-task como ejecutor de tareas:
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
Inicialice/actualice los submódulos de git (esto llevará un tiempo la primera vez que se ejecute):
task update
Cree un initramfs y una imagen de disco para usar con syzkaller:
task initramfs:create
task syzkaller:create-image
Configure y cree LLVM con soporte de Kasper:
task llvm:config llvm:build
Construya syzkaller con soporte de Kasper:
ADVERTENCIA : ¡la versión de syzkaller que usamos solo funciona con golang 1.15 (estamos usando golang 1.15.15)!
task syzkaller:build
Configure y cree un kernel de Linux instrumentado con Kasper:
task kernel:config build kernel:bzImage
Pruebe que el kernel instrumentado se ejecute correctamente:
task qemu:test
Fuzz el núcleo instrumentado:
task syzkaller:run-nobench
Para agregar gadgets y ejecutar la evaluación, consulte kasper-results.