KASAN 내부 탐험: 리눅스 커널의 메모리 오류 탐지기
Poison, redzones and shadows: inside KASAN
리눅스 커널은 대부분 C로 작성되어 있어 메모리 오류에 취약합니다. KASAN(Kernel Address Sanitizer)은 이러한 오류를 런타임에 잡아내는 도구로, 컴파일러가 삽입한 계측(instrumentation)과 섀도 메모리(shadow memory)를 활용합니다. 이 글은 KASAN의 내부 동작을 분석하여, 빌드 및 런타임에 미치는 영향과 우아한 구현 방식을 설명합니다. 섀도 메모리가 메모리 할당 상태를 어떻게 추적하는지, '포이즈닝(poisoning)' 개념과 함께 자세히 다룹니다. 또한 virtme-ng를 사용한 테스트 환경 구축과 KASAN 리포트 해석 방법도 소개합니다.
KASAN이 활성화되면 커널은 사용 가능한 전체 메모리를 사용하지 않고, 그중 일부를 나머지 커널 가상 주소 공간의 상태를 추적하는 데 예약하는데, 이 예약된 공간이 바로 섀도 메모리입니다.