
CVE-2021-33624에 대한 개념 증명
컴파일 방법:
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
실행 방법:
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
여기서 1과 2는 두 개의 서로 다른 하드웨어 코어에서 실행되는 CPU 스레드이고, ffffffffa4925620은 누출하려는 대상 메모리이며, 0x10은 누출할 바이트 수입니다. 이 익스플로잇은 수정되었지만 sudo로 코드를 실행하면 결과를 여전히 관찰할 수 있습니다. 대응 조치는 sudo가 아닌 경우에만 적용되기 때문입니다.
누출을 위한 예시 주소는 sudo cat /proc/kallsyms | grep core_pattern에서 얻을 수 있으며, 예상 결과는 cat /proc/sys/kernel/core_pattern으로 확인할 수 있습니다.
DIV 명령어(0으로 나누기 예외를 피하기 위해 내부적으로 분기를 포함하도록 패치됨)를 사용하여 분기 예측기를 잘못 훈련시키는 방법은 Piotr가 그의 연구 중에 발견했습니다. 참조: https://www.openwall.com/lists/oss-security/2021/06/21/1
특별히 Jann Horn에게 감사드립니다. 그는 초기 연구(https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)에서 이 익스플로잇 코드의 기초를 개발했습니다.