[논문 리뷰] Execution Integrity with In-Place Encryption
Scylla는 실행 지침 무작위화(ISR)를 향상시켜 코드 재사용 공격을 방어하기 위해 기본 블록 단위 암호화와 코드 다각화를 적용하는 혁신적인 인-place 암호화 기법을 제안한다. 이는 제어 흐름 그래프 분석 없이도 실행 무결성을 확보하며, JIT-ROP 및 CROP과 같은 고도의 공격에도 저항한다. x86_64 시스템에서 실행 오버헤드가 약 20% 수준으로 실용적이며, 실전 환경에 적합하다.
Instruction set randomization (ISR) was initially proposed with the main goal of countering code-injection attacks. However, ISR seems to have lost its appeal since code-injection attacks became less attractive because protection mechanisms such as data execution prevention (DEP) as well as code-reuse attacks became more prevalent. In this paper, we show that ISR can be extended to also protect against code-reuse attacks while at the same time offering security guarantees similar to those of software diversity, control-flow integrity, and information hiding. We present Scylla, a scheme that deploys a new technique for in-place code encryption to hide the code layout of a randomized binary, and restricts the control flow to a benign execution path. This allows us to i) implicitly restrict control-flow targets to basic block entries without requiring the extraction of a control-flow graph, ii) achieve execution integrity within legitimate basic blocks, and iii) hide the underlying code layout under malicious read access to the program. Our analysis demonstrates that Scylla is capable of preventing state-of-the-art attacks such as just-in-time return-oriented programming (JIT-ROP) and crash-resistant oriented programming (CROP). We extensively evaluate our prototype implementation of Scylla and show feasible performance overhead. We also provide details on how this overhead can be significantly reduced with dedicated hardware support.
연구 동기 및 목표
- DEP와 ASLR과 같은 기존 방어 기법을 우회하는 코드 재사용 공격(CRAs), 예를 들어 ROP 및 CROP 등의 증가하는 위협에 대응한다.
- 소프트웨어 다각화, 제어 흐름 무결성, 정보 은폐 등의 기존 방어 기법의 한계를 극복하기 위해 그 강점을 하나의 통합된 프레임워크로 융합한다.
- 프로그램 코드에 대한 악성 읽기 접근이 포함된 전체 메모리 유출 상황에서도, 레이아웃이나 제어 흐름을暴露하지 않고도 안전한 실행을 보장한다.
- 정적 또는 동적 제어 흐름 그래프 구축에 의존하지 않고도 합법적인 기본 블록 내에서 실행 무결성을 확보한다.
- 실세계 시스템에서의 실현 가능성과 성능 효율성을 입증하며, 공유 라이브러리 및 멀티태스킹 환경을 지원한다.
제안 방법
- 실행 코드의 레이아웃을 이진 수준에서 무작위화하고 숨기기 위해 기본 블록 단위 암호화를 적용하여, 오직 정확히 복호화된 지시어만 실행되도록 보장한다.
- 제어 흐름을 기본 블록의 안전한 진입 지점으로 제한하는 하이브리드 실행 모델을 도입하여, CFG 분석 없이도 암묵적으로 제어 흐름 무결성을 확보한다.
- 세밀한 수준의 코드 다각화를 통해 기본 블록의 순서와 구조를 변경하여, 공격자가 코드 레이아웃을 신뢰할 수 있게 예측하거나 재구성하는 것을 불가능하게 한다.
- 실행 래퍼를 구현하여 런타임 시 지시어의 복호화 및 검증을 처리하여, 오직 허가된 제어 전이만 발생하도록 보장한다.
- 성능 오버헤드를 최소화하기 위해 하드웨어 지원 복호화를 활용하며, x86_64 시스템에서 공유 라이브러리 지원을 포함한 프로토타입 평가를 수행한다.
- 실행 금지 읽기(XnR) 및 코드 포인터 격리와 같은 정보 은폐 기법을 결합하여 민감한 제어 구조의 泄露를 방지한다.
실험 결과
연구 질문
- RQ1실행 지시어 무작위화(ISR)를 현대의 코드 재사용 공격, 예를 들어 JIT-ROP 및 CROP에 강력한 보호 기능으로 확장할 수 있는가?
- RQ2전체 메모리 읽기 접근 상황에서 기본 블록 단위 암호화와 코드 다각화가 결합될 경우, 코드 레이아웃 유출를 얼마나 효과적으로 방지할 수 있는가?
- RQ3정적 또는 동적 제어 흐름 그래프 구축에 의존하지 않고도 기본 블록 내에서 실행 무결성을 달성할 수 있는가?
- RQ4Scylla의 성능 오버헤드는 기존 방어 기법과 비교해 어떻게 되며, 하드웨어 지원이 이 오버헤드를 상당히 감소시킬 수 있는가?
- RQ5이전 공격에서 사용된 크래시 내성 메모리 오라클 및 타이밍 사이드 채널 유출과 같은 고도의 우회 기법에 대해 Scylla는 견딜 수 있는가?
주요 결과
- Scylla는 기본 블록 단위 암호화와 코드 다각화를 결합하여 최신 코드 재사용 공격, 즉 JIT-ROP, CROP, CFB를 성공적으로 저항한다.
- 프로토타입 구현에서 SPEC CPU2006 벤치마크 세트에서 평균 20%의 성능 오버헤드만을 보이며 실현 가능성을 입증한다.
- 하드웨어 지원 복호화를 통해 성능 비용을 상당히 감소시킬 수 있으며, 주요 오버헤드는 복호화 로직이 아닌 코드 다각화로 이동한다.
- 전체 메모리 유출 상황에서도 완전한 코드 레이아웃 숨김을 제공하여, 공격자가 코드 위치를 알고 있더라도 원래의 제어 흐름을 재구성하는 것이 불가능하게 한다.
- 이전 침해에서 사용된 타이밍 사이드 채널 공격 및 메모리 오라클에 대해 저항력이 있으며, CPI나 XnR 메커니즘을 공격하는 데 사용된 기법들에도 유연하게 대응한다.
- 공유 라이브러리 및 멀티태스킹 시스템을 포함한 복잡한 런타임 환경에서도 보안성과 성능을 손상시키지 않고 지원한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.