[논문 리뷰] JIT Spraying and Mitigations
이 논문은 Just-In-Time 컴파일러가 생성한 실행 가능한 메모리 영역에 악성 코드를 주입함으로써 DEP와 ASLR를 우회하는 JIT 스프레이 공격에 대한 새로운 고성능 방지 기법을 제시한다. 특히 ActionScript 환경에서 발생하는 공격에 대응한다. 저자는 32비트 즉시 연산자를 사용하는 지시어 시퀀스를 스캔하고, 짧은 점프 체인을 검증하는 방식으로 악성 코드를 탐지하는 검출 메커니즘을 제안하며, 이는 잘못된 경고 없이도 효과적인 탐지와 최소한의 성능 오버헤드를 달성한다. 이는 Windows 시스템에서 성능에 큰 영향을 주지 않는다.
With the discovery of new exploit techniques, novel 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 exploitation. Attackers, however, have recently researched new exploitation methods which are capable of bypassing the operating system's memory mitigations. One of the newest and most popular exploitation techniques to bypass both of the aforementioned security protections is JIT memory spraying, introduced by Dion Blazakis. In this article we will present a short overview of the JIT spraying technique and also novel mitigation methods against this innovative class of attacks. An anti-JIT spraying library was created as part of our shellcode execution prevention system.
연구 동기 및 목표
- 기존의 메모리 보호 기법인 DEP와 ASLR를 우회하는 JIT 스프레이 공격의 증가하는 위협에 대응하기 위해.
- 특히 ActionScript 환경에서 JIT 컴파일러가 생성한 실행 가능한 메모리 영역에 악성 셸코드 주입을 탐지하고 방지하기 위해.
- 응용 프로그램 성능 저하 없이 효율적으로 작동하는 방지 기법을 설계하기 위해.
- 복잡한 회피 기법에 대비해 강력한 보호 기능을 유지하면서도 잘못된 경고를 최소화하기 위해.
제안 방법
- 이 방법은 공격자가 제어하는 셸코드의 특징인 32비트 즉시 연산자를 소스로 사용하는 지시어 시퀀스를 스캔하여 JIT 스프레이 공격을 탐지한다.
- 첫 번째 'mov reg, IMM32' 지시어에서 디어셈블리 작업을 시작하고, 32비트 즉시 연산자를 사용하는 '나쁜' 지시어(이하 'bad' 지시어)의 수를 세며, 종료자(예: CALL, RET, JMP)를 만날 때까지 계속한다.
- 이러한 'bad' 지시어의 수가 사전 정의된 최대값을 초과하면 임계값 기반 경고가 발생하며, 이는 잠재적인 셸코드를 시사한다.
- 또한 짧은 점프 체인(JMP, JCC)을 검증하여 즉시 대상이 유효하고 연속적인 점프 지시어를 가리키는지 확인함으로써, 점프 연결을 통한 회피를 방지한다.
- 탐지는 JIT가 생성한 코드가 실행되기 이전에 실시간으로 이루어지며, 코드 생성 시점에서 보호 조치를 취한다.
- 이 방지 기법은 운영체제나 브라우저에 변경 없이 애플리케이션 런타임에 통합된 라이브러리 형태로 구현된다.
실험 결과
연구 질문
- RQ1어떻게 상당한 성능 오버헤드 없이 실시간으로 JIT 스프레이 공격을 탐지할 수 있는가?
- RQ2JIT 생성 코드의 어떤 특징을 이용하면 악성 셸코드와 양호한 코드를 신뢰성 있게 구분할 수 있는가?
- RQ332비트 즉시 연산자 사용 기반 탐지 기법이 점프 체인을 통한 회피를 효과적으로 방지할 수 있는가?
- RQ4JIT 컴파일된 ActionScript를 활발히 사용하는 환경에서 잘못된 경고를 어떻게 최소화할 수 있는가?
주요 결과
- Anti-JIT 스프레이 라이브러리는 Flash 10c에서 테스트하는 동안 알려진 모든 JIT 셸코드 샘플을 탐지했으며, 잘못된 경고 없이 성공적으로 기능했다.
- 탐지 기법은 낮은 성능 오버헤드를 기록했으며, 일반적인 Flash 기반 웹사이트를 브라우징하는 동안 응용 프로그램 성능에 눈에 띄는 영향을 주지 않았다.
- 공격자가 여러 개의 짧은 점프를 사용해 코드 조각을 연결함으로써 탐지 회피를 尝시도했을 경우에도 이 방법은 셸코드를 성공적으로 탐지했다.
- 32비트 즉시 연산자 사용 횟수를 임계값 기반으로 세는 방식이 실행 전에 악성 코드 블록을 효과적으로 식별하는 데 유용했다.
- 즉시 연산자 스캔과 점프 체인 검증의 조합은 방지 기법을 우회하는 것을 훨씬 더 어렵게 만들었다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.