Compile-time Structure Member Layout Randomization against Fixed-Offset Attacks
전통적인 커널 익스플로잇은 타깃 시스템의 구조체 멤버 배치가 C 언어 소스코드 선언 순서와 정확히 일치한다는 점을 악용합니다.
공격자는 공개된 커널 헤더나 vmlinux 바이너리에서 오프셋을 사전에 계산하여 한 번에 권한을 탈취합니다.
컴파일 시점(Build-time)에 256비트 암호학적 난수 시드(randstruct.seed)를 생성하여 __randomize_layout 구조체 멤버를 뒤섞습니다.
__randomize_layout이 명시된 구조체(struct cred 등) 및 함수 포인터로만 구성된 구조체(struct file_operations 등).uid가 아닌 토큰이나 패딩이므로 권한 상승이 완전히 실패함.과거 PaX/Grsecurity의 GCC 플러그인에서 시작하여 현대 Clang 컴파일러로 표준화되었습니다.
-frandomize-layout-seed-file 옵션으로 네이티브 레이아웃 셔플링 지원. 크로스 컴파일(ARM64, x86_64)에 이상적임.scripts/gcc-plugins/randomize_layout_plugin.c를 통해 지원되나 플러그인 헤더 패키지 필요.