스트립된 바이너리용 실행전용 메모리 구현 PXoM 접근법

스트립된 바이너리용 실행전용 메모리 구현 PXoM 접근법
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

PXoM은 Intel MPK를 활용해 페이지 단위가 아닌 블록 단위로 읽기 권한을 제어함으로써, 디버그 심볼이나 데이터 재배치 없이도 스트립된 x86‑64 바이너리를 실행전용 메모리(Execute‑only Memory, XoM)로 보호한다. 정밀한 역어셈블과 커널 레벨 모니터링을 결합해 코드‑데이터 혼합을 안전하게 처리하고, 마이크로·매크로 벤치마크에서 0.22 %~0.82 % 수준의 미미한 오버헤드만을 보인다.

상세 분석

본 논문은 JIT‑ROP 공격이 메모리 누출을 통해 코드 페이지를 자유롭게 읽고, 그 안에서 가젯을 수집해 실시간으로 악성 페이로드를 구성한다는 점에 주목한다. 기존 XoM 구현은 페이지 전체에 Execute‑only 권한을 부여하거나, 코드와 데이터를 완전히 분리하도록 컴파일·링크 단계에서 변형을 가해야 하는 한계가 있었다. 특히, 상용 및 레거시 바이너리에서는 코드 섹션에 정적 데이터(점프 테이블, 상수, 인라인 어셈블리 등)가 혼재해 있어 페이지 단위 XoM 적용 시 정상적인 데이터 접근까지 차단되는 ‘false positive’ 문제가 빈번히 발생한다.

PXoM은 이러한 문제를 해결하기 위해 두 가지 핵심 기술을 제시한다. 첫째, Intel Memory Protection Keys(MPK)를 이용해 동일 페이지 내에서도 서로 다른 4KB 블록에 서로 다른 권한을 할당한다. MPK는 키 레지스터를 통해 현재 스레드가 접근 가능한 권한 집합을 빠르게 전환할 수 있어, 페이지 보호에 비해 오버헤드가 현저히 낮다. 둘째, ‘단방향 역어셈블(Unidirectional Disassembly)’ 알고리즘을 도입해 실행 코드와 데이터 바이트를 정확히 구분한다. 이 알고리즘은 코드 흐름을 한 방향으로만 추적하면서, 흐름이 끊기는 지점을 데이터 영역으로 판단하고, 이후의 바이트를 데이터 블록으로 마킹한다. 기존의 양방향 혹은 전역 역어셈블 방식이 겪는 오탐·누락 문제를 크게 감소시킨다.

커널 레벨 로더는 수정된 ELF 파서를 통해 PXoM‑protected 바이너리를 로드하고, 각 코드 페이지에 MPK 키를 할당한다. 실행 중에는 페이지 폴트 핸들러가 아닌 MPK 권한 검사기를 통해 읽기 요청을 실시간으로 감시한다. 데이터‑인‑코드(read‑in‑code) 접근이 감지되면 해당 블록에 별도 키를 부여해 읽기를 허용하고, 순수 코드 블록에 대해서는 읽기 권한을 차단한다. 또한, 빈번히 접근되는 데이터 블록에 대해 캐시‑유사 최적화 정책을 적용해 키 전환 비용을 최소화한다.

보안 평가에서는 가젯 수집률을 측정해, PXoM 적용 후 남은 가젯이 실제 공격에 활용될 만큼 충분히 복잡한 체인을 형성하지 못함을 확인했다. 성능 평가에서는 lmbench, SPEC CPU2006/2017, 웹 서버와 데이터베이스 워크로드 등 10여 개 실험을 수행했으며, 평균 0.5 % 수준의 런타임 오버헤드와 메모리 사용량 증가가 거의 없음을 보고한다.

PXoM의 주요 공헌은 (1) 하드웨어 지원 MPK를 활용한 미세 입자 수준 권한 제어 메커니즘, (2) 데이터 재배치 없이도 코드‑데이터 혼합을 안전하게 처리하는 역어셈블 기법, (3) 레거시 및 상용 바이너리에도 적용 가능한 실용적인 XoM 솔루션을 제공한다는 점이다. 오픈소스로 공개된 구현과 데이터셋은 재현성을 높이며, 향후 XoM 기반 방어 메커니즘 연구에 중요한 기반이 될 것으로 기대된다.


댓글 및 학술 토론

Loading comments...

의견 남기기