
[Arm64] KSMA attack과 init_pg_dir 도입 분석
arm64 아키텍처에서는 다른 아키텍처와 다르게 부팅때 사용되는 페이지 테이블이 다른데요. init_mm의 구조체가 아래와 같이 구성되어 있어, 초기 페이지 테이블이 swapper_pg_dir인지 init_pg_dir였는지 혼동하기 쉬운 것 같아요. init_mm 구조체는 모든 아키텍처에서 사용되는 녀석인데요, 보시다시피 pgd의 초기 값을 swapper_pg_dir으로 세팅해요. 그런데, 밑에 INIT_MM_CONTEXT 매크로가 있는데요. 이 녀석이 arm64 아키텍처일 경우 pgd를 init_pg_dir로 교체해줘요. 정말 독특하지요? 매크로의 구성은 아래와 같아요~ 그러면 자연스럽게 "왜 arm64 아키텍처만 init_pg_dir이라는 초기 페이지 테이블을 사용하지?" 라는 질문이 떠오르는데요, 결론부터 얘기하면 Arm64의 KSMA(Kernel Space Mirroring Attack) 공격을 어렵게 하기 위해 도입된 것이에요. 자, 그러