
Инструментарий фаззера eBPF для генерации случайных eBPF-программ и проверки поведения верификатора/среды выполнения ядра. Поддерживает фаззинг на основе покрытия кода и отслеживает обнаруженные CVE.
Buzzer — это инструментарий для фаззинга, который позволяет писать стратегии фаззинга eBPF.
Стратегия фаззинга — это способ генерации случайных eBPF-программ и последующей проверки того, что они не демонстрируют неожиданного поведения.
Чтобы запустить фаззер, выполните следующие шаги
Установите bazel.
Установите clang.
Настройте правильные переменные окружения CC и CXX
export CC=clang
export CXX=clang++
Запустите
bazel build :buzzer
Запустите buzzer либо от root:
sudo ./bazel-bin/buzzer_/buzzer
ИЛИ с CAP_BPF:
sudo setcap CAP_BPF=eip bazel-bin/buzzer_/buzzer
./bazel-bin/buzzer_/buzzer
Нашли крутую ошибку с помощью Buzzer? Сообщите нам через pull request! Мы хотели бы собрать все проблемы, обнаруженные с помощью этого фреймворка, в этом разделе.
CVE-2023-2163: Ошибка в логике обрезки ветвей верификатора eBPF может привести к тому, что небезопасные пути не будут исследованы. Небезопасные отброшенные пути — это фактические пути, выполняемые во время выполнения, что вызывает расхождение между значениями определённых регистров по мнению верификатора и их реальными значениями. Этим расхождением можно злоупотребить для чтения/записи произвольной памяти в ядре, используя перепутанные регистры в качестве базовых регистров для операций с памятью.
CVE-2024-41003: Ошибка в отслеживании пределов регистров верификатора позволяет атакующему обмануть верификатор, заставив его думать, что регистр содержит значение 0, тогда как во время выполнения этот регистр может принимать значение 1. Это можно затем использовать для произвольного чтения/записи памяти ядра, что может привести к локальному повышению привилегий или побегу из контейнера.