Skip to main content
QUICK REVIEW

[논문 리뷰] PAC it up: Towards Pointer Integrity using ARM Pointer Authentication

Hans Liljestrand, Thomas Nyman|arXiv (Cornell University)|2018. 11. 22.
Security and Verification in Computing참고 문헌 36인용 수 34
한 줄 요약

이 논문은 ARM 포인터 인증(PA)을 활용하여 코드 포인터와 데이터 포인터의 포인터 무결성을 보장하는 컴파일러 인스트루먼테이션 프레임워크인 PARTS를 제안한다. 이는 제어 흐름 공격과 데이터 중심 공격에 대해 상당한 보안 향상을 이룬다. 포인터 서명과 런타임 타입 안전성의 조합을 통해 PARTS는 낮은 성능 오버헤드로 강력한 보안 보장을 달성한다. 코드 포인터 및 리턴 포인터 서명의 경우 0.5% 미만, nbench-byte에서 데이터 포인터 서명의 경우 19.5% 이며, 기존의 완전 정밀한 정적 CFI보다도 뛰어난 성능을 보인다.

ABSTRACT

Run-time attacks against programs written in memory-unsafe programming languages (e.g., C and C++) remain a prominent threat against computer systems. The prevalence of techniques like return-oriented programming (ROP) in attacking real-world systems has prompted major processor manufacturers to design hardware-based countermeasures against specific classes of run-time attacks. An example is the recently added support for pointer authentication (PA) in the ARMv8-A processor architecture, commonly used in devices like smartphones. PA is a low-cost technique to authenticate pointers so as to resist memory vulnerabilities. It has been shown to enable practical protection against memory vulnerabilities that corrupt return addresses or function pointers. However, so far, PA has received very little attention as a general purpose protection mechanism to harden software against various classes of memory attacks. In this paper, we use PA to build novel defenses against various classes of run-time attacks, including the first PA-based mechanism for data pointer integrity. We present PARTS, an instrumentation framework that integrates our PA-based defenses into the LLVM compiler and the GNU/Linux operating system and show, via systematic evaluation, that PARTS provides better protection than current solutions at a reasonable performance overhead

연구 동기 및 목표

  • 메모리 비안전 언어인 C와 C++에서 증가하는 런타임 공격 위협을 해결하기 위해.
  • ARMv8-A 포인터 인증(PA)이 리턴 주소 보호를 넘어서 일반 목적의 방어 수단으로서의 잠재력을 탐색하기 위해.
  • 모든 포인터 유형, 특히 데이터 포인터를 포함한 포인터의 무결성을 강제하는 실용적이고 효율적이며 안전한 프레임워크를 설계하고 구현하기 위해.
  • 실세계 워크로드에서 PA 기반 방어의 보안과 성능의 상호 교환 관계를 평가하기 위해.
  • PA 기반 보호 기능을 메인스트림 컴파일러와 운영 체제에 통합할 수 있도록 하기 위해.

제안 방법

  • 암호학적 MAC(PAC)를 사용하여 모든 코드 포인터와 데이터 포인터를 인증하는 포인터 서명 기반 설계를 통해 변조를 방지한다.
  • 타입에 맞는 포인터만 사용될 수 있도록 보장함으로써 포인터 교체 공격를 제한하기 위해 런타임 타입 안전성을 도입한다.
  • LLVM와 GNU/Linux에 통합된 컴파일러 인스트루먼테이션 프레임워크인 PARTS를 구축하여 컴파일 시기에 자동으로 PA 기반 보호를 적용한다.
  • 가짜 포인터 사용을 탐지하고 방지하기 위해 리턴 주소, 함수 포인터, 데이터 포인터에 모두 PAC를 인스트루먼트한다.
  • 임의의 데이터 블록에 대한 인증된 캐니언과 무결성 검사를 지원하기 위해 pacga 명령어를 사용한다.
  • 권한 상승을 방지하기 위해 PA 키 설정을 고수준 예외 수준(EL2/EL3)에서 트랩하는 키 관리 전략을 설계한다.

실험 결과

연구 질문

  • RQ1ARM 포인터 인증은 리턴 주소 보호를 넘어서 모든 포인터 유형을 보호하기 위해 효과적으로 확장될 수 있는가?
  • RQ2성능과 실용성을 유지하면서 PA를 사용하여 포인터 재사용 공격를 어떻게 완화할 수 있는가?
  • RQ3PA를 사용하여 데이터 포인터를 보호할 경우 성능 오버헤드는 얼마이며, 실세계 배포에 있어 수용 가능한가?
  • RQ4런타임 타입 안전성과 PA의 조합이 기존의 CFI나 샤페로 스택 솔루션보다 더 강력한 보장을 제공할 수 있는가?
  • RQ5PA 기반 보호 기능은 공유 라이브러리와 레거시 코드를 포함한 기존 소프트웨어 스택에 어떻게 통합될 수 있는가?

주요 결과

  • PARTS는 코드 포인터 및 리턴 주소 서명에 대해 평균 0.5% 미만의 성능 오버헤드를 달성하여 높은 효율성을 입증한다.
  • nbench-byte 벤치마크에서 데이터 포인터 서명은 평균 19.5%의 오버헤드를 유발하지만, 보안에 민감한 응용 프로그램에 있어 수용 가능한 수준이다.
  • PARTS는 외부 프로세스에서 위조된 포인터 값이 발생하는 것을 방지함으로써 완전 정밀한 정적 CFI보다 더 강력한 보안 보장을 제공한다.
  • 포인터 서명과 런타임 타입 안전성의 조합은 제어 흐름 공격과 데이터 중심 프로그래밍(DOP) 공격 양쪽 모두에 효과적으로 대비한다.
  • PARTS는 포인터 재사용 공격에 강건하며, 성공적인 악용을 위해서는 스택 포인터 값이 일치하고 동일한 프로세스 내에서 동일한 함수에서 유래된 포인터여야 한다.
  • PAC 래퍼와 주석을 통해 레거시 코드와의 통합을 지원하여 비인스트루먼트된 코드와의 안전한 상호 운용을 가능하게 한다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.