본문 바로가기
정보보호 (Security)

PDFDot v0.23 : PDF 분석 및 시각화 도구

by 날으는물고기 2013. 10. 24.

PDFDot v0.23 : PDF 분석 및 시각화 도구

설명

PDF(Portable Document Format) 파일은 어도비 시스템즈에서 개발한 전자 문서 형식이다. 컴퓨터 환경에 관계없이 같은 표현을 하기 위한 목적으로 개발되었으며 장치 독립성 및 해상도 독립성을 가지고 있다. 상당수의 파일들이 이 형식으로 변환되어 사용되고 있다.

많은 사용자들이 사용하는 파일 포맷이다보니 취약점 공격도 꾸준히 나오고 있다. PDF 파일 포맷은 그 내부가 복잡하지는 않지만, 분석하기에는 무척 까다로운 비정형화 된 형식으로 구성되어 있다. 따라서 PDF 파일 분석이 용이하면서 한 눈에 PDF 구조를 시각화 할 필요가 있어 PDFDot 도구를 개발하게 되었다.


주요 기능

v0.23 (2013/10/24)
1. 스트림만 가진 오브젝트 출력 기능 (–stream 옵션)
2. 문자열 검색 기능 (-s 옵션)

v0.22 (2013/10/10)
1. 압축 해제 필터 인식 기능 강화

v0.21 (2013/10/07)
1. 다양한 압축 해제 필터 지원
(FlateDecode, ASCIIHexDecode, ASCII85Decode, LZWDecode, RunLengthDecode)

v0.2 (2013/10/01)
1. PDF trailer 추적 기능
2. Root Object 추출 (-r 옵션)
3. PDF 파일 포맷 중 점진적 업데이트 추적 기능 지원

v0.1 (2013/09/27)
1. PDF 오브젝트 추적 기능 (시각화 지원)
2. PDF 오브젝트 스트림 추출
3. PDF 오브젝트 압축 해제 지원 (FlateDecode만 지원)


사용법

PDF 파일은 다양한 오브젝트가 존재하며 이들의 참조로 구성이 되어 있다. 각각의 오브젝트들은 자신의 Type과 다양한 속성값 및 스트림을 포함하기도 한다. 대체로 악성코드들은 앞에서 언급한 오브젝트의 스트림으로 존재하는 경우가 대부분이다(물론 최악의 경우에는 스트림이 SWF 파일 포맷을 가지고, SWF 파일 내부의 ActionScript 형태로 가지는 경우도 있다).

분석을 위해 준비한 test.pdf 파일은 다음과 같다.

이제 PDFDot 프로그램을 통해서 test.pdf 파일의 오브젝트 구조를 살펴보도록 하겠다. 우선 PDFDot은 아래 링크에서 다운로드 받을 수 있다.

분석하고자 하는 PDF 파일을 PDFDot 프로그램의 인자값으로 넣어주는데 대체로 PDF의 루트(Root) 오브젝트는 1번 오브젝트이다. PDFDot 버전 0.20 이상 버전에서는 -r 옵션을 통해 루트(Root) 오브젝트를 확인할 수 있다.

C:\> pdfdot.exe test.pdf -r

이제 제일 먼저 분석해야 할 대상은 1번 오브젝트이다. 따라서 -o 옵션을 사용하여 1번 오브젝트를 지정하면 다음과 같은 화면이 나온다.

C:\> pdfdot.exe test.pdf -o1

PDF 파일을 분석하는데 있어서 가장 중요한 부분은 PDF 내부 참조 구조를 정확히 파악하는 것이 중요하다. 즉, 위 그림을 보면 오브젝트 1번은 2번과 4번 오브젝트를 참조하고 있다는 사실이다.

이제 -o 옵션의 숫자 값을 바꿔가면서 오브젝트의 참조 내용을 확인해보면 이를 간략히 표현하면 다음과 같은 형태가 될 것이다.

위의 그림은 수작업으로 PDF 구조를 그려본 것이다. 이렇게 보면 한눈에 PDF 내부 구조를 쉽게 알 수 있다. 하지만, 매번 PDF를 분석할 때마다 이 구조를 수작업으로 한다는 것은 무리가 있다. 그래서 PDFDot 프로그램에는 이를 자동으로 그려주는 -g 옵션이다.

우선 -g 옵션을 사용하기 위해서는 그래프를 그리기 위한 별도의 외부 프로그램인 Graphviz가 필요하다. 따라서 아래의 사이트에서 윈도우용 설치 프로그램을 다운로드 받아 설치한 다음 -g 옵션을 사용할 수 있다.

Graphviz가 설치 되었다면 다음과 같이 명령어를 입력해본다.

C:\> pdfdot.exe test.pdf -g test_pdf.png

이 명령어가 정상적으로 실행되었다면 test_pdf.png 파일이 생성될 것이며, 파일을 열어보면 아래와 같은 PDF 내부 구조를 보여주게 된다.

PDFDot 프로그램을 사용하여 PDF 내부 구조를 출력해보면 빨간색의 오브젝트 박스와 검은색의 오브젝트 박스를 볼 수 있다. 이 중에서 빨간색 오브젝트 박스에 주목해야 한다. 바로 악성코드가 존재할 가능성이 있는 오브젝트들을 표현하고 있기 때문이다.

앞서 PDF 악성코드들은 대체로 오브젝트의 스트림 형식으로 저장되어 있다고 하였다. 지금 이 PDF 내부 구조를 보면 문제의 오브젝트들은 1번, 4번, 5번, 7번번 9번이다. 따라서 이들 오브젝트들을 다시 -o 옵션을 사용하여 살펴본다.

그중에서 오브젝트 5번을 살펴보자.

C:\> pdfdot.exe test.pdf -o5

위 그림에서 확인할 수 있듯이 오브젝트 5번에는 281 Byte의 스트림이 포함되어 있으며, 압축되어 있는 상태이다. 이 스트림을 추출해보자. 추출하기 위해서는 -d 옵션을 사용하면 된다.

C:\> pdfdot.exe test.pdf -o5 -d obj5.dmp

이렇게 스트림을 추출하면 압축된 상태로 추출되므로 압축을 해제해야 한다. 압축 여부를 확인하는 방법은 오브젝트의 내용중 /Filter로 표현이 되어 있다면 압축된 형태라고 보면 되겠다(물론 압축이 아닌 경우도 있다). 따라서 압축을 해제 하기 위해서 -f 옵션을 함께 지정하면 압축 해제된 스트림을 얻을 수 있다. 하지만, /Filter로 지정되어 있지 않다면 -f 옵션을 사용해서는 안된다.

자, 이제 -f 옵션까지 사용하여 스트림으로 추출된 obj5.dmp 파일을 열어보자.

C:\> pdfdot.exe test.pdf -o5 -d obj5.dmp -f

그림에서 보는 것처럼 자바스크립트가 오브젝트 5번의 스트림으로 저장되어 있었다. 같은 방법으로 오브젝트 7번과 9번도 스트림을 추출해본다.

C:\> pdfdot.exe test.pdf -o7 -d obj7.dmp -f
C:\> pdfdot.exe test.pdf -o9 -d obj9.dmp -f

자바스크립트는 아니지만 ASCII로 구성된 내용을 확인할 수 있다. 오브젝트 5번의 자바스크립트가 오브젝트 7번과 9번 스트림 내용을 다시 복호화 하는 과정을 거치게 된다.

사실 이후부터는 자바스크립트에 대한 내용이라 여기서 소개하는 PDF의 분석 내용에서 벗어나는 주제이므로 생략하기로 한다.

지금까지 간단하게 PDFDot을 이용하여 PDF의 내부 구조를 시각화 하고 그중 악성코드로 의심되는 오브젝트를 선별한 다음 스트림 추출을 통해 악성코드를 진행하는 것을 살펴보았다. 분석을 하다보면 이 보다 더 다양한 형태의 PDF를 보게 되겠지만, 거의 대체로가 이런 순서를 통해 PDF 악성코드를 분석하게 된다.



위 글에 대해 별도의 문의 사항이 있다면 hanul93@gmail.com으로 메일 보내주시기 바란다.



출처 : www.nurilab.com

728x90

댓글