PDF를 이용한 Script 디코딩 (5)

반응형

취약점에 관련 된 악성코드들은 대부분 다운로드, 드롭형식을 가지고 있다. 이번 PDF파일은 PDF파일에 악성코드를 삽입시킨 후 힙 스프레이 코드에 의해 악성파일을 생성하는 형식의 PDF이다.

 

우선 PDF에서 스크립트를 추출해야 하는데 일반적인 inflater.exe, pdftk.exe 프로그램으로는 스트림 추출에 모두 실패하였다. 

 

그래서 이번에는 새로운 툴인 pdf-parset.py를 가지고 분석하는 방법에 대해서 설명하겠다. 

 

pdf-parset.py는 파이썬 2.5 이상이 설치되어 있어야 동작할 수 있으니, 미리 설치를 해두어야 한다.

 

- pdf-parsey.py를 사용하여 스트림을 추출하는 방법
1) PDF의 내부상태 확인(pdf-parser.py --stats 20.pdf)

 

2) javacript가 포함 된 데이터 및 필터 확인(pdf-parser.py --search javascript --raw 20.pdf)

 

3) 의심되는 오브젝트 확인(pdf-parser.py --object 47 20.pdf)

 

4) FlateDecode로 이루어진 필터 상세확인(pdf-parser.py --object 47 --raw --filter 20.pdf)

 

- 자바스크립트 분석
PDF에서 추출이 완료 된 자바스크립트 내용이다.

 

- 힙 스프레이 코드(Heap Spray Code)
추출 된 스크립트를 살펴보니 힙 메모리에 쉘코드를 주입하여 실행시키는 힙 스프레이 코드로 보여진다.
언어에 조금 익숙한 사람이라면, 다음 스크립트를 어느정도 이해할 수 있을 것이다.
꼭 언어를 모르더라도 어떤 Exploit이든지 힌트는 존재하기 마련이다.

 

이 코드에서의 힌트는 "%u1c1c%u0c1c” 과 “large_hahacode”의 이름을 갖는 쉘코드이다.
이런 취약점 분석을 하려면 대부분 쉘코드만 찾아서 따라가게 되면 어느정도 분석이 가능하다.

그럼 PDF에서 쉘코드를 찾는 방법을 알아보자.
1) 메모리에서 1c1c1c0c로 존재하는 주소를 찾으면 그 주위에 쉘코드가 존재한다.
2) 쉘코드를 어셈블리로 변환하여 시작되는 옵코드(Operation Code)를 메모리에서 찾으면 된다.

이렇게 쉘코드를 찾아가는 방법은 하나의 꼼수이며, 분석가의 경험이 가장 중요하다고 볼 수 있다.

- 쉘코드 분석
large_hahacode의 이름을 갖는 쉘코드를 어셈블리로 변환하면 다음과 같은 코드를 볼 수 있다.

 

위의 코드는 결국 0x02020202주소부터 “58905090”값을 찾을 때 까지 메모리주소를 계속 증가시키는 코드이다.

마지막 JMP EDX를 통해서 실제 악성파일을 생성시키는 코드로 넘어가게 된다.
분석 시 넘어가는 주소는 0x0299B762였다. 주소로 따라가 보면 실제 코드가 있는 것을 알 수 있다.

여기부터는 일반적인 디버깅을 하면 쉽게 해당 악성코드를 생성 할 수 있기 때문에 따로 기재하지 않는다.
참고로 PDF를 정적분석하는 방법에는 쉽게 2가지가 있다.
1. 악성 PDF를 실행하여 AcroRd32.exe 프로세스를 Suspend 시킨 후 OllyDbg로 Attach 시키는 방법
2. OllyDbg에서 FileOpen하여 AcroRd32.exe파일에 Arguments로 악성PDF를 실행시키는 방법

현재 내가 알고 있는 방법은 이 2가지 이다.
1번은 분석이 용이하긴 하나, 실제 스크립트가 동작 후에나 분석이 가능하기 때문에 부분적으로 넘어가야 하는 문제가 있다.
2번은 취약점으로 이루어진 스크립트를 처음부터 동작시킬 수는 있으나, 악성PDF가 시작되는 시점까지 도달하는 시간이 오래 걸릴 수 있다.

 

이번 샘플은 정말 생각보다 어려웠을 수 있다.

설명을 한다고했지만, 그래도 처음 접하는 사람이라면 충분히 어려울 수 있다.

그래도 잘 따라하길 바란다 ㅎㅎㅎㅎㅎㅎ

반응형

댓글

Designed by JB FACTORY