[5] 블랙홀 툴킷의 PDF 난독화 풀이

난독화/난독화 강좌 2013. 5. 13. 02:49

[5] 블랙홀 툴킷의 PDF 난독화 풀이

 

1.      Blackhole Exploit Toolkit 이란?

 

악성코드 유포에 이용되는 Web exploit Toolkit 중에서도 가장 많이 알려져 있고, 악성코드 유포에

이용되는 빈도수도 꾸준히 상위권을 유지하고 있다. 현재는 2.0버전이 이용되고 있으며, pdf, java 등 다양한 취약점을 이용한다.

 

 

2.      Blackhole Toolkit의 난독화

 

블랙홀 툴킷을 분석하면 다양한 난독화 기법이 이용되는 것을 볼 수 있다. 그 중 에서도 메인페이지 부분과 pdf파일에 삽입된 자바스크립트 난독화 부분이 있는데, 특히 pdf 부분은 시간이 지날수록 조금씩 어렵게 바뀌고 있다.

 

3.      PDF 파일에 삽입된 자바스크립트 난독화 분석.

 

2013 5 10일 확인된 blackhole toolkit의 샘플 중 pdf 난독화 부분을 확인해 보겠다.

 

3.1 분석을 위해 수집한 패킷 샘플에서 PDF 파일 추출

[그림 1] 샘플패킷에서 PDF파일 추출

 

 

3.2 악성 PDF 파일에서 자바스크립트 추출

[그림 2] PDF파일에서 자바스크립트 분리하기

1)    그림에서 Load 버튼을 클릭하여 저장한 PDF파일을 불러온다

2)    그림에서 부분에 표시된 Objects을 클릭하면 부분에 내용이 표시된다.

3)    Objects를 하나씩 클릭하여 의심스러운 내용이 포함된 것을 찾는다

4)    아래그림 처럼 분리된 자바스크립트를 확인할 수 있다

 

[그림 3] 분리된 자바스크립트

 

3.3 악성 스크립트 분석

 

3.3.1 스크립트 구조

[그림 4] 악성 스크립트의 구조

 

1)    난독화된 데이터 부분 a ZA( )함수들로 이루어져 있는 배열이다.

 

2)    이것은 첫 번째 스크립트 부분의 마지막 줄에 있는 function ZA(a)에 의해 아스키코드로

   변환된다.

 

3)    아스키코드로 변환된 것은 다시 두 번째 스크립트 부분에 의해 문자열로 변환되어 실행된다.

 

3.3.2 첫 번째 스크립트 부분 분석

 

if((this.getSaveItem+"")[0]=="f")if(ImageField1.ZZA(321,513613,"a")===0) {z=this;zz="y";x='eI';}

// if조건이 만족할 때 {z=this;zz="y";x='eI';}인데, 여기서는 스크립트만 가져왔기 때문에 조건이

 성립하지 않아 스크립트가 동작하지 않는다. 실행되도록 하기 위해 if 절을 주석 처리하겠다

 

dd="Code";  

ddd="ar";

s="ntvtdhfePJxTmlNo#hFpx!ZeA*yvv#@yiODshOxsTLbKSJljyjNibt3tb23t";

xx=s[2]+'al';

// 위의 4줄은 메인 부분을 보기 어렵게 하기 위해 쪼개놓은 코드라고 생각하면 된다.

   메인 부분을 이 부분들을 보고 수정하면 원래 복호화 코드가 된다

 

function ZZA(){return 0;}   //  if 절을 만족시키기 위해 사용하는 코드

 

function ZA(a){return z["\x65"+xx]("\x70ar"+"s"+x+s[0]+s[1])(a,26);}

// 메인 부분 1, 이 부분을 위의 내용들을 참고하여 수정하면 아래처럼 된다

ð  function ZA(a){return this.eval(parseInt(a,26);}

 

 

3.3.3 두 번째 스크립트 부분 분석

 

if((z.getSaveItem+"")[0]=="f")if(zz=="y")if(020===0x10)

// 첫 번째 부분과 동일한 이유로 if절은 주석 처리한다

 

z["\x65"+xx](String["fromCh"["conca"+s[3]](ddd,dd)]["appl"["conca"+s[3]](zz)](String,a));

//메인 부분 2, 이 부분도 위의 내용들을 참고하여 수정하면 아래처럼 된다

 

ð  this.eval(String.fromCharCode.apply(String,a));

 

 

3.3.4 복호화 데이터 출력

  - 스크립트 분석한 것을 적용하면 아래와 같다

 

[그림 5] 간결화한 스크립트

1)    문자열로 확인하기 위해 스크립트가 실행되는 두 번째 eval alert으로 변경 후 실행한다

 

- alert으로 수정하여 실행하면 아래처럼 복호화된 데이터를 확인할 수 있다

[그림 6] 복호화 결과

1)    결과를 확인하면 Shallcode가 포함된 스크립트를 확인 할 수 있다

 

 

3.4 shallcode 추출 및 악성코드 유포 URL 확인

- 복호화 결과에서 우리가 필요한 shallcode 부분만 document.write를 이용하여 추출한다

 

 

[그림 6] 스크립트에서 Shallcode 부분 추출

1)     실제로 동작하는 Shallcode 부분만 추출하기 위해 나머지 부분은 주석처리 후 Shallcode

    저장되는 변수를 확인한다

 

- Malzilla Tool을 이용하여 최종 악성코드 유포지 확인

[그림 7] Mallzilla를 이용한 악성코드 유포지 확인

 

1)    Shallcode를 분석하기 위해서는 일반적으로 해당부분을 파일로 만들어 ollydbg에서 분석한다.

     하지만 여기서는 간단하게 malzilla를 이용하는 방법을 알아보았다.

 

2)    일반적으로 Shallcode malzilla로 확인 시 Xor 연산이 되어 바로 보이지 않는 경우가 많지만,

      해당 샘플에서는 악성코드 유포지가 바로 확인되었다

 

 

 

 

[참고] Shallcode를 실행파일로 만들어주는 사이트: http://sandsprite.com/shellcode_2_exe.php

 

설정

트랙백

댓글