취약점 정보
-
Adobe # :APSB13-07 (http://www.adobe.com/support/security/bulletins/apsb13-07.html)
-
CVE # : CVE-2013-0640
CVE-2013-0640 – 악성 PDF 파일 구조
취약점 원인
< 업데이트 예정 >
악의적인 스크립트 (AcroJS)
중요 코드 부부만 언급해보자.
- 스크립트 코드는 가독성이 매우 떨어지도록 난독화가 잘 되어 있다.이 난독화의 핵심 함수는 다음 sHOGG() 이며 이를 이용하면 비교적 가독성 있는 코드로 Beautify 할 수 있다.
- 스크립트 내부에는 Acrobat Reader 의 버전 정보에 맞는 값들을 저장하고, oTHERWISE() 함수 안에서는 버전에 맞는 쉘코드를 생성한다.
<그림> 버전 정보 비교
<그림> Beautify 처리 전과 후
<그림> Beautify 처리 전과 후
- 스크립트 안에는 악성코드인 “D.T”를 생성하기 위한 raw data 가 존재한다.이를 생성하는 함수는 다음 sPONESTI()함수이다.
- 실제 cONSOLARE() 함수 내부의 코드에는 메모리 상에 올라가는 쉘코드 덩어리(ROP)가 조합된다.
- 조합된 쉘코드는 그대로가 아닌 다시 한번 dRITTAMENTE()안에서 가공된 결과를 리턴해서 메모리에 뿌려진다.
- 다음은 취약점 발생과 관련된 코드들이다
<그림> Beautify 전과 후
ShellCode(ROP)
힙 메모리 상에 뿌려진 쉘코드는 다음과 같은 형태를 갖는다.
해당 취약점으로 인하여 코드의 흐름이 변경되는 지점은 다음 AcroForm.208A54DE 이다.
최종 점프 전에 EAX 레지스트리가 참조하는 값은 아래 AcroForm.209B7C07 이다.
따라서,이 때 POP ESP로 인하여 스택이 쉘코드가 위치한 힙영역으로 바뀌게 된다. 대부분의 ROP 가젯의 경우, 스택을 변경하기 위해 xchg eax, esp 와 같은 명령어(Instruction)을 사용한다.
이렇게 변경된 흐름은 힙(점프 후에는 스택)에 위치한 ROP 가젯을 순차적으로 진행한 후 쉘코드를 만나 원하는 코드를 수행하게 된다.
<그림>쉘코드 일부
악성코드
악성 PDF 파일은 2개의 실행파일을 생성하여 실행하게 된다.
첫 번째 파일인 “D.T” 파일은 다음과 같이 자바스크립트를 통해서 생성되고, 메모리 상에 인코딩(based64) 된 형태로 로드된다.
쉘코드가 실행되면서 해당 데이터를 디코딩한 후 실행한다.
<그림> 디코딩 전
<그림>디코딩 후
두 번째 악성코드인 L2P.T 파일은 D.T에 의해서 PDF 파일 안(오브젝트 7번)에 존재하는 시그니처 문자열 “!H2bYm.Sw@“를 찾고, 그 데이터를 디코딩해서 실행한다.
<그림> PDF 파일 안의 오브젝트 7
<그림>D.T 파일 내부코드
One Comment
Pingback: 암호화된 PDF 맛보기 – HackSum