Nous présentons Kasper, un scanner de gadgets d'exécution spéculative pour le noyau Linux. Kasper utilise des politiques d'analyse des souillures pour modéliser un attaquant capable d'exploiter des vulnérabilités logicielles/matérielles arbitraires sur un chemin transitoire pour contrôler les données (par exemple, via un massage de mémoire ou LVI), accéder aux secrets (par exemple, via une utilisation hors limites ou une utilisation après-vente). accès gratuits) et divulguer ces secrets (par exemple, via des canaux secrets basés sur le cache, le MDS ou les conflits de ports). Même si le noyau est fortement renforcé contre les attaques d'exécution transitoire, Kasper trouve des centaines de gadgets qui ne sont pas encore atténués. Vous pouvez trouver l’article complet ici.
Installez les dépendances, y compris go-task en tant qu'exécuteur de tâches :
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
Initialisez/mettez à jour les sous-modules git (cela prendra un certain temps lors de la première exécution) :
task update
Créez un initramfs et une image disque à utiliser avec syzkaller :
task initramfs:create
task syzkaller:create-image
Configurez et créez LLVM avec le support de Kasper :
task llvm:config llvm:build
Créez syzkaller avec le support de Kasper :
ATTENTION : la version de syzkaller que nous utilisons ne fonctionne qu'avec golang 1.15 (nous utilisons golang 1.15.15) !
task syzkaller:build
Configurez et créez un noyau Linux instrumenté par Kasper :
task kernel:config build kernel:bzImage
Testez que le noyau instrumenté fonctionne correctement :
task qemu:test
Fuzz le noyau instrumenté :
task syzkaller:run-nobench
Pour regrouper les gadgets et exécuter l'évaluation, veuillez consulter Kasper-results.