⚡ KFENCE (Kernel Electric Fence) Architecture Simulator Linux Kernel 6.12 Hardening Lab

배속:
테스트 벡터:
SAMPLING: 10ms 주기 샘플링 게이트 동작 중 (가드 페이지 배치)
❌ Baseline (일반 SLUB 단독 동작)
NO GUARD PAGES (SILENT CORRUPTION)
SLUB Page (4096B Contiguous Memory) Dense object packing without hardware page fault barriers Chunk A (Target) size = 32B Adjacent Chunk B Silent corruption victim Chunk C (Metadata) Next freelist ptr OOB Memory Overrun: *(buf + 32) = 0x42 하드웨어 가드 부재: 인접 객체 메모리를 침묵 오염/유출 (탐지 불가!) 🚨 결함 실행 결과 (Silent Defect) ❌ OOB Access: 인접 메모리 데이터 변조 성공 (MMU Fault 미발생) ❌ UAF Access: 해제된 메모리를 재사용하여 잔류 키 유출 dmesg: [0 reports] | total bugs: 0 (결함 은폐됨) ⚠️ 잠재적 RCE 취약점 또는 커널 충돌로 진행될 위험성 내포
⚡ Hardened (CONFIG_KFENCE=y)
ELECTRIC GUARD PAGES ACTIVE
__kfence_pool (Electric Fence Guarded Allocation) Hardware MMU Non-present pages sandwiching the guarded object ⚡ Guard Page PROT_NONE Non-present Object Page (4096B) Guarded Obj (32B) Right-aligned Canary [0xaa...] Redzone bytes ⚡ Guard Page PROT_NONE Non-present ⚡ kfence_handle_page_fault() Intercepted! BUG: KFENCE: out-of-bounds read at 0x... (1B right of kfence-#42) Call Stack & Allocation/Free History Dumped -> stats counters++ 🛡️ 실시간 방어 및 결함 리포트 분석 ✅ OOB/UAF 발생 즉시 MMU가 하드웨어 페이지 폴트 트랩 생성 ✅ /sys/kernel/debug/kfence/stats에 'total bugs' 즉각 누적 반영 dmesg: BUG: KFENCE: [detected] | overhead: < 1% CPU in production ⚡ 시스템 패닉 없이 버그 위치를 정밀 추적하여 실서비스 보안성 보장
⚡ 1. 하드웨어 MMU 가드 페이지
KFENCE는 풀 내부의 각 객체 앞뒤에 `PROT_NONE`(Non-present) 가드 페이지를 샌드위치 구조로 배치함. 경계 1바이트 침범 시 즉각 페이지 폴트 발생.
kfence_protect_page(guard_addr, true);
⏱️ 2. 저비용 샘플링 게이트 메커니즘
KASAN처럼 모든 할당을 검사하지 않고, 주기(기본 100ms)마다 1개의 할당만 KFENCE 풀로 라우팅함. CPU 성능 영향이 1% 미만으로 프로덕션에 최적화됨.
kfence_sample_interval = 10 ms (lab)
🪦 3. 해제 페이지 UAF 원천 차단
객체가 `kfree()`되면 해당 객체 페이지 전체를 보호 상태(`kfence_protect`)로 전환함. 댕글링 포인터를 통한 사후 접근 시 감전되듯 즉각 폴트 발생.
BUG: KFENCE: use-after-free in ...