🎲 시나리오 1: 프리리스트 무작위화 (CONFIG_SLAB_FREELIST_RANDOM)
전통적인 슬랩 할당자는 새 페이지 할당 시 [0] -> [1] -> [2] -> [3] 순서로 선형 프리리스트를 구성하여 객체 할당 순서가 100% 예측 가능했습니다. CONFIG_SLAB_FREELIST_RANDOM=y 적용 시, Fisher-Yates 셔플 알고리즘으로 프리리스트 순서를 무작위화하여 힙 그루밍(Heap Grooming) 및 인접 객체 오버플로우 공격을 확률적으로 무력화합니다. 아래 동적 펄스는 무작위화된 할당 순서(Order: [0] -> [1] -> [2] -> ...)를 따라 비순차적으로 점핑합니다.
[System Ready] SLUB Freelist Randomization driver loaded. Notice the non-sequential dynamic traversal jumping across slots.
🔐 시나리오 2: 프리리스트 포인터 난독화 (CONFIG_SLAB_FREELIST_HARDENED)
해제된 객체의 프리 포인터(Free Pointer)는 힙 버퍼 오버플로우의 주요 표적입니다. 공격자는 포인터를 덮어써 원하는 주소에 임의 할당(Arbitrary Write)을 노립니다. CONFIG_SLAB_FREELIST_HARDENED=y는 포인터를 ptr ^ s->random ^ swab(ptr_addr) 공식으로 암호화하여 저장하며, 1비트라도 변조되면 할당 시 즉시 커널 크래시(Slab Corruption Trap)를 유발하여 실행 흐름 탈취를 차단합니다.
[System Ready] Free pointer encryption test ready. Click Step 1 to inspect.
⚠️ 시나리오 3: 베이스라인 미적용 취약 환경 (Slab Hardening Disabled)
CONFIG_SLAB_FREELIST_RANDOM 및 CONFIG_SLAB_FREELIST_HARDENED가 비활성화된 기본 커널의 취약점입니다:
1. 선형 순차 할당: 힙 할당이 100% 인접 주소로 연속 배치되어 공격자가 취약 버퍼 바로 뒤에 희생자 객체를 확정 배치 가능.
2. 평문 프리리스트 포인터: 해제된 객체에 커널 가상 주소가 평문 그대로 노출되며, 버퍼 오버플로우로 원하는 타깃 주소를 덮어쓰면 다음 할당 시 해당 위치를 획득(Arbitrary Write) 가능.