PDF 파일 분석하기

제 목 : PDF 파일 분석하기
작성자 : ByJJoon
작성일 : 2009. 8. 18

최근 PDF 관련 취약점이 많이 나오며 PDF 파일에 악의적인 스크립트가 삽입되는 사례가 많이 발견되고 있습니다. PDF 파일에 악의적인 스크립트가 삽입되었는지 여부를 확인하기 위해 이 문서를 작성합니다.

사용되는 툴

이번 문서에서는 위의 툴들을 사용할 것입니다. 위의 툴들 중 pdf-parser와 PDFiD는 Python으로 작성된 툴이므로 Python이 설치되어 있어야 합니다. 먼저 Python을 설치하도록 하겠습니다.

Python 다운로드 : http://python.org/download/

자신의 플랫폼에 맞는 Python을 다운로드 하여 설치를 하셨다면 이제 분석을 하도록 하겠습니다. 먼저 악성 PDF 파일을 한번 살펴보도록 하겠습니다.

PDFiD를 통해 PDF 문서를 확인해본 결과 해당 문서내에 Javascript가 3개 포함되어 있다는 결과를 확인할 수 있었습니다. 이제 pdf-parser를 이용하여 해당 코드를 문서내에서 찾아보도록 하겠습니다. 명령어는 아래와 같습니다.

pdf-parser.py --search javascript 파일명

실행을 하면 위와 같은 결과를 확인할 수 있으며 obj(Object)가 3개 있음을 확인할 수 있습니다. 이전에 PDFiD를 통해 확인한 결과도 3개 였기 때문에 이 3군데 중 악성 스크립트가 있을 것입니다. 다시 출력결과를 한번 살펴보도록 하겠습니다.

C:\Documents and Settings\ByJJoon\바탕 화면\PDF 분석>pdf-parser.py --search javascript malware.pdf
obj 1 0
 Type: /Catalog
 Referencing: 2 0 R, 3 0 R, 4 0 R, 5 0 R, 6 0 R, 7 0 R
 [(1, '\n'), (2, '<<'), (2, '/OpenAction'), (1, ' '), (2, '<<'), (2, '/JS'), (1, ' '), (2, '('), (3, 'this.Kll1k1kj\\'),

[생략]

 <<
   /OpenAction /JS (this.Kll1k1kj\(\))

   /S /JavaScript

 >>

obj 7 0
 Type:
 Referencing: 10 0 R
 [(1, '\n'), (2, '<<'), (2, '/JavaScript'), (1, ' '), (3, '10'), (1, ' '), (3, '0'), (1, ' '), (3, 'R'), (1, '\n'), (2, '>>'), (1, '\n')]

 <<
   /JavaScript 10 0 R

 >>

obj 12 0
 Type:
 Referencing: 13 0 R
 [(1, '\n'), (2, '<<'), (2, '/JS'), (1, ' '), (3, '13'), (1, ' '), (3, '0'), (1, ' '), (3, 'R'), (1, '\n'), (2, '/S'), (1, ' '), (2, '/JavaScript'), (
1, '\n'), (2, '>>'), (1, '\n')]

 <<
   /JS 13 0 R

   /S /JavaScript

 >>

위는 출력 결과 내용 중 굵은 글씨로 된 부분이 Object 위치 및 참조가 표시되는 부분입니다. 이제 Javascript가 포함되었다는 3개의 부분을 상세히 살펴 보도록 하겠습니다.

pdf-parser.py --object 번호 파일명

3개의 부분이 나왔으니 3개의 부분 모두 참조되는 번호를 확인하여 가다 보면 13번을 확인하였을 시 아래와 같은 내용이 나타납니다.

C:\Documents and Settings\ByJJoon\바탕 화면\PDF 분석>pdf-parser.py --object 13 malware.pdf
obj 13 0
 Type:
 Referencing:
 Contains stream
 [(1, '\n'), (2, '<<'), (2, '/Filter'), (1, ' '), (2, '/FlateDecode'), (1, '\n'), (2, '/Length'), (1, ' '),
')]

 <<
   /Filter /FlateDecode

   /Length 4315

 >>

FlasteDecode 부분이 나타난다면 해당 부분에 악의적인 코드가 있을 가능성이 높습니다. 해당 부분을 자세히 살펴 보도록 하겠습니다. Pdf-paser에는 이 FlateDecode를 해독해 주는 옵션이 있습니다. 해당 옵션을 이용하여 한번 확인해 보도록 하겠습니다.

pdf-parser.py --object 번호 --raw --filter 파일명

--filter 옵션을 이용하여 raw값으로 뽑게 되면 아래 화면처럼 숨겨진 코드가 나타나게 됩니다.

코드 내용을 바로 파일로 저장하기 위해 아래 명령어를 사용합니다.

pdf-parser.py --object 번호 --raw --filter 파일명 > output.txt

output.txt로 저장한 다음 아래 굵게 표시된 내용처럼 수정을 하여 파일형식을 웹페이지 파일(html)로 저장하여 열어보면 메시지 박스가 나타나며 코드를 확인할 수 있습니다.

<html>
<script>
 var labal=alert;var vbc=" CCCHCCC var  CCCPCCC ay CCCLCCC  CCCACCC a CCCDCCC  =  CCCNCCC  CCCECCC  CCCMCCC  CCCXCCC  CCCGCCC a CCCPCCC  CCCMCCC ( CCCYCCC % CCCNCCC  CCCZCCC A CCCZCCC A% CCCNCCC  CCCZCCC A CCCZCCC A% CCCNCCC  CCCZCCC 
.
[중략]
.
vbc = vbc.replace(/ CCCACCC /g,'o');
vbc = vbc.replace(/ CCCPCCC /g,'p');
vbc = vbc.replace(/ CCCICCC /g,'1');
labal(vbc);
</script>
</html>

코드 확인은 이전에 작성한 Malzilla 문서를 통해 최종 악성코드 다운로드 URL을 확인하실 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다