그냥저냥

[PDF Malware] PDF 악성코드 분석 (Obfuscated JavaScript + ShellCode) 본문

Malware

[PDF Malware] PDF 악성코드 분석 (Obfuscated JavaScript + ShellCode)

ex3llo 2016. 8. 12. 02:02


우선 PDFiD.py로 분석대상 파일의 구조를 확인하자. 

해당 파일 내에는 자바스크립트와 임베디드된 파일이 존재한다는 것을 알 수 있다.


이제 peepdf로 각 오브젝트에 대한 상세내용을 보도록 하자.

가장 먼저 확인해야할 자바스크립트 관련 오브젝트는 3번과 7번 오브젝트에 존재하는 것을 확인할 수 있다. 우선 7번 오브젝트를 살펴보도록 하자.


7번 오브젝트는 8번 오브젝트를 참조하고 있고, 8번 오브젝트의 스트림을 확인해보면 아래 사진처럼 난독화된 자바스크립트 코드를 확인할 수 있다. (난독화라 하기도 애매한...그냥 코드 중간중간 주석문이 들어간 것 뿐이다.)


8번 오브젝트를 파일로 추출한 후 중간중간 삽입되어있는 주석문을 제거하면 아래처럼 깔끔한 자바스크립트 코드를 볼 수 있다.

this.subject 부분은 현재 PDF 문서의 Subject 영역의 데이터를 의미하고, Replace 가 2번 들어가 있는 것으로 보아 난독화된 코드를 2번 복호화시킬 것으로 추측된다. 


이제 난독화된 스크립트가 불러들일 영역인 Subject 영역을 살펴보자.

Subject 영역은 9번 오브젝트에 존재하며, 9번 오브젝트의 내용을 보면 replace 할 대상 문자열과 중간중간 삽입되어있는 문자들을 볼 수 있다.

    



이제 eval 함수를 document.write 로 바꿔서 어떤 데이터가 출력되는지 확인해보자.

9번 오브젝트의 데이터는 파일로 추출하여 자바스크립트 변수 a에 저장했다.


아래는 복호화된 데이터 결과이다. 중간에 payload 라는 변수에 담긴 값이 ShellCode 부분이다. 해당 부분을 IDA로 분석하기전에 바이너리 데이터로 적절히 변환해주자.


바이너리 변환 스크립트 코드는 아래와 같다.

#!/usr/bin/python
import os, sys
import re

if os.path.isfile(sys.argv[1]):
	sc = open(sys.argv[1]).read()
else:
	sc = sys.argv[1]

bin_sc = re.sub('%u(..)(..)',lambda x: chr(int(x.group(2),16))+chr(int(x.group(1),16)),sc)

try:
	FILE = open(sys.argv[2],"wb")
	FILE.write(bin_sc)
	FILE.close()

except Exception, e:
	print 'Cannot save binary to disk %s' % e


<변환할 payload 데이터>


바이너리 파일로 변환한 후 IDA로 분석해보면 외부 서버에 접속해서 파일을 다운받는 기능을 수행하는 ShellCode임을 알 수 있다.



Comments