Представляем Kasper — гаджет-сканер спекулятивного исполнения для ядра Linux. Kasper использует политики анализа вредоносных данных для моделирования злоумышленника, способного использовать произвольные уязвимости программного или аппаратного обеспечения на временном пути для управления данными (например, посредством массажа памяти или LVI), доступа к секретам (например, через выход за пределы или использование после использования). свободный доступ) и утечка этих секретов (например, через скрытые каналы на основе кэша, MDS или конкуренции портов). Несмотря на то, что ядро сильно защищено от атак с временным выполнением, Каспер обнаруживает сотни гаджетов, которые еще не защищены. Вы можете найти полную версию статьи здесь.
Установите зависимости, включая 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
Создайте initramfs и образ диска для использования с syzkaller:
task initramfs:create
task syzkaller:create-image
Настройте и соберите LLVM с поддержкой Kasper:
task llvm:config llvm:build
Собираем syzkaller с поддержкой Kasper:
ВНИМАНИЕ : используемая нами версия syzkaller работает только с golang 1.15 (мы используем golang 1.15.15)!
task syzkaller:build
Настройте и соберите ядро Linux с поддержкой Kasper:
task kernel:config build kernel:bzImage
Проверьте правильность работы инструментированного ядра:
task qemu:test
Фаззируемое ядро:
task syzkaller:run-nobench
Чтобы объединить гаджеты и провести оценку, воспользуйтесь kasper-results.