
무작위 eBPF 프로그램을 생성하고 커널 검증기/런타임 동작을 검증하기 위한 eBPF 퍼저 툴체인입니다. 커버리지 기반 퍼징을 지원하며 발견된 CVE를 추적합니다.
Buzzer는 eBPF _퍼징 전략(fuzzing strategies)_을 작성할 수 있게 해주는 퍼저 툴체인입니다.
퍼징 전략은 무작위 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_를 사용하여 멋진 버그를 발견하셨나요? 풀 리퀘스트를 통해 알려주세요! 이 프레임워크로 발견된 모든 이슈를 이 섹션 아래에 모으고자 합니다.
CVE-2023-2163: eBPF 검증기의 분기 가지치기(branch pruning) 로직 오류로 인해 안전하지 않은 경로가 탐색되지 않을 수 있습니다. 안전하지 않은 가지치기된 경로는 실제 런타임에 취해지는 경로이므로, 검증기가 특정 레지스터의 값이라고 생각하는 것과 실제 값 사이에 불일치가 발생합니다. 이 불일치는 혼동된 레지스터를 메모리 연산의 베이스 레지스터로 사용하여 커널에서 임의 메모리를 읽거나 쓰는 데 악용될 수 있습니다.
CVE-2024-41003: 검증기의 레지스터 한도 추적(register limit tracking) 버그로 인해 공격자가 검증기를 속여 특정 레지스터가 값 0을 보유한다고 믿게 만들 수 있으며, 런타임에는 이 레지스터가 값 1을 가질 수 있습니다. 이는 이후 임의 커널 메모리 읽기/쓰기를 달성하는 데 활용될 수 있으며, 로컬 권한 상승 또는 컨테이너 탈출로 이어질 수 있습니다.