Apresentamos o Kasper, um scanner de gadgets de execução especulativa para o kernel Linux. Kasper usa políticas de análise de taint para modelar um invasor capaz de explorar vulnerabilidades arbitrárias de software/hardware em um caminho transitório para controlar dados (por exemplo, por meio de massagem de memória ou LVI), acessar segredos (por exemplo, por meio de out-of-bounds ou use-after- acessos gratuitos) e vazar esses segredos (por exemplo, através de canais secretos baseados em cache, baseados em MDS ou baseados em contenção de portas). Embora o kernel esteja fortemente protegido contra ataques de execução transitórios, Kasper encontra centenas de gadgets que ainda não foram mitigados. Você pode encontrar o artigo completo aqui.
Instale dependências, incluindo go-task como executor de tarefas:
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
Inicialize/atualize os submódulos git (isso levará algum tempo na primeira vez que for executado):
task update
Crie um initramfs e uma imagem de disco para ser usada com o syzkaller:
task initramfs:create
task syzkaller:create-image
Configure e construa LLVM com suporte Kasper:
task llvm:config llvm:build
Crie o syzkaller com suporte do Kasper:
AVISO : a versão do syzkaller que usamos só funciona com golang 1.15 (estamos usando golang 1.15.15)!
task syzkaller:build
Configure e construa um kernel Linux instrumentado por Kasper:
task kernel:config build kernel:bzImage
Teste se o kernel instrumentado funciona corretamente:
task qemu:test
Fuzz o kernel instrumentado:
task syzkaller:run-nobench
Para agregar gadgets e executar a avaliação, verifique os resultados do Kasper.