Skip to main content
QUICK REVIEW

[논문 리뷰] Security Mitigations for Return-Oriented Programming Attacks

Piotr Bania|arXiv (Cornell University)|2010. 08. 24.
Security and Verification in Computing참고 문헌 1인용 수 14
한 줄 요약

이 논문은 x86-32 Windows 시스템에서 리턴형 프로그래밍(ROP) 공격을 방지하기 위해 컴파일러 수준 및 바이너리 수준의 방어 기법을 제안한다. 콜-리턴 관계 분석, 콜 이후 마법의 값 배출, 세그먼트 기반 보호, 코드 디코이, IAT 리디렉션과 같은 기법을 통해 가젯 체이닝을 방해함으로써 악성 코드 실행의 난이도를 크게 높이며, 바이너리 수준 방어에서는 소스 코드 수정 없이도 구현 가능하다.

ABSTRACT

With the discovery of new exploit techniques, new protection mechanisms are needed as well. Mitigations like DEP (Data Execution Prevention) or ASLR (Address Space Layout Randomization) created a significantly more difficult environment for vulnerability exploitation. Attackers, however, have recently developed new exploitation methods which are capable of bypassing the operating system's security protection mechanisms. In this paper we present a short summary of novel and known mitigation techniques against return-oriented programming (ROP) attacks. The techniques described in this article are related mostly to x86-32 processors and Microsoft Windows operating systems.

연구 동기 및 목표

  • DEP 및 ASLR과 같은 기존 보호 기법을 우회하는 리턴형 프로그래밍(ROP) 공격의 증가하는 위협에 대응한다.
  • 기존 방어 기법의 한계를 규명하고 ROP의 가젯 체이닝 능력에 효과적으로 대응할 수 있는 새로운 기법을 제안한다.
  • 소스 코드 접근 없이도 구현 가능한 컴파일러 수준 및 바이너리 수준의 방어 기법을 개발한다.
  • 성능 오버헤드를 최소화하면서도 ROP 기반 악성 코드 실행에 대한 저항력을 극대화한다.
  • 기존 Windows 및 PE 바이너리 포맷과 호환되는 실용적이고 구현 가능한 솔루션을 제공한다.

제안 방법

  • 콜-리턴 명령어 관계를 분석하여, 콜 명령어에 의해 이어지는 원래의 리턴 명령어만 식별하고 보호함으로써 공격 표면을 줄인다.
  • 각 콜 명령어 이후에 마법의 바이트를 삽입하고, 함수의 종료부에서 이를 검증함으로써 불법적인 리턴 점프를 탐지한다.
  • x86 세그먼트 디스크립터를 사용하여 코드 섹션을 격리하고, 유효하고 보호된 세그먼트에서만 실행을 허용함으로써 임의의 코드 실행을 방지한다.
  • 기존 코드 섹션을 이동시키고 비실행 상태로 표시함으로써 코드 디코이를 구현하고, 불법 실행 시도 시 페이지 장애를 유도한다.
  • 가져온 주소 테이블(IAT) 리디렉션을 적용하여 공격자가 수정된 포인터를 통해 함수 호출을 악용하는 것을 방지한다.
  • 페이지 장애 필터링을 사용하여 비실행 메모리에서의 실행 시도를 탐지하고 차단하며, 유일하게 유효하고 미러링된 코드 실행만 허용한다.

실험 결과

연구 질문

  • RQ1소스 코드 재컴파일 없이도 ROP 공격을 어떻게 방어할 수 있는가?
  • RQ2명령어 수준의 패tern을 활용해 ROP 가젯 체이닝을 탐지하고 차단하는 가장 효과적인 방법은 무엇인가?
  • RQ3기존 x86-32 바이너리에 대해 세그먼트 기반 보호 메커니즘을 효과적으로 적용할 수 있는가, 호환성에 영향을 주지 않고?
  • RQ4코드 디코이와 비실행 메모리 영역을 어떻게 활용하여 ROP 악성 코드 실행을 탐지하고 방지할 수 있는가?
  • RQ5실제 Windows 환경에서 이러한 방어 기법의 성능 및 호환성 상충 요소는 무엇인가?

주요 결과

  • 콜-리턴 관계 분석은 테스트된 모듈에서 사용 가능한 ROP 가젯 수를 95% 이상 감소시켰으며, 콜 명령어에 의해 이어지는 가젯 비율이 2.11%에서 5.31%로 매우 낮게 유지된다.
  • 콜 이후 마법의 값 배출은 최적화를 위해 옵코드 빈도 통계를 활용할 경우 성능 영향을 최소화하면서도 불법 리턴 시퀀스를 강력하게 탐지한다.
  • 사용자 정의 코드 세그먼트를 사용한 세그먼트 기반 보호는 실행 코드를 효과적으로 격리하고 불법 실행을 방지하지만, 재배치 및 CS 레지스터 상태 처리에 주의가 필요하다.
  • 랜덤화된 메모리 레이아웃과 비실행 표시를 적용한 코드 디코이가 불법 실행 시도 시 페이지 장애를 유도함으로써 ROP 시도를 성공적으로 탐지하고 차단한다.
  • IAT 리디렉션과 페이지 장애 필터링 메커니즘을 조합하면 간접 호출 히잡킹을 방지할 수 있으나, PE 로더와의 상호작용이 필요하고 가상 주소 범위 처리에 주의가 필요하다.
  • 성능 및 호환성 문제에도 불구하고, 특히 SHELL32.DLL와 같은 큰 모듈에서 나타나는 도전 과제를 감안할 때, 제안된 방어 기법은 성공적인 ROP 악성 코드 실행의 난이도를 크게 높인다.

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

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

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

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