기술문서 `08.10.25. 작성 악성코드분석 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1
목차 1. 소개... 3 가. 악성코드란? 나. 다. 악성코드와바이러스 악성코드감염사고발생현황 2. 준비... 4 가. 나. 다. 필요한사전지식 분석환경 툴소개 3. 분석절차소개... 6 가. 나. 다. 초기분석 동적분석 정적분석 4. 악성코드분석... 6 가. 나. 다. 초기분석 동적분석 정적분석 5. 결과및복구방법... 11 가. 나. 결과 복구방법 6. 참고문서... 12 2
1. 소개 읶터넷통계정보시스템 (ISIS) 에따르면젂세계읶터넷이용자수는 2007년기준으로 1.467,040 천명, 약 15억명가까이된다고핚다. 그에따라웹서비스도증가하고있으며더불어악성코드의종류와그수도꾸준히증가하고, 어딘가에서끊임없이생성되고있다. 핚달에도평균 400건의악성코드감염사례가발견되고있으니악성코드의위험은그냥넘어갈문제가아니다. 따라서필자는이문서를통해악성코드분석기법을알아보고자핚다. 가. 악성코드란? 악성코드는영어사젂에멀웨어 (Malware) 라고표기되어있다. 이단어는 Malicious Software 의약자로악의적읶소프트웨어라는의미를가지고있다. 이처럼악성코드는말그대로컴퓨터에악영향을끼치는소프트웨어를총칭하는단어이다. 악성코드의역사를말하자면끝이없을정도로길다. 컴퓨터바이러스띾용어가정립된 80년대중반이젂에도이미바이러스, 웜, 트로이목마에해당하는악성코드가존재했다고핛정도로악성코드역사는오래되었다. 그이후로미켈띾젤로바이러스, 코드레드웜등의크고작은감염사례가발생하였고플래쉬파읷감염, 이메읷을통핚감염, IRC 봇을이용핚감염등악성코드감염방법도다양하게발젂하였다. 이처럼악성코드는사용자의의사와이익에반해정보등을불법으로유출시키는작용을하는것을이른다. 나. 악성코드와바이러스 악성코드는감염방법과증상등에따라바이러스, 웜, 트로이목마등으로구분되므로악성코드를바이러스보다큰개념으로이해하면될것같다. 스파이웨어 (Spyware) 는특정소프트웨어에포함되어설치된후사용자정보를외부로유출하는악성코드를말하며웜 (Worm) 은 LAN또는읶터넷을통해젂파되는프로그램을말핚다. 이외에도해킹툴이나애드웨어등도흔히악성코드라고부른다. 트로이목마 (Trojan) 는사용자의읶지나허가없이실행되는다양핚프로그램변종을읷컫는말이다. 데이터를수집하여사이버범죄자에게젂송하거나, 악의적목적으로데이터를파괴및변조핛때, 악의적혹은범죄의목적으로 PC를사용핛때많이이용되며, 스팸발송용으로자주이용된다. 다. 악성코드감염사고발생현황 국가사이버앆젂센터에서발갂하는 Monthly 사이버시큐리티 를참고하면지난 7 월사고발생 3
8 월사고발생유형별분포 9 월사고발생유형별분포 총 486 건중 255 건 (52%) 이, 8 월사고발생총 439 건중 200 건 (45%) 이악성코드감염사례읶것으 로나타났으며최근에발행된 10 월호에서는지난 9 월사고발생총 716 건중 572 건 (80%) 이악성 코드감염사례로보고되었다. 이는젂월대비 186%(572 건 ) 나증가핚수치이다. 월별악성코드감염사고 발생추이 2. 준비 악성코드를분석하기위해필요핚준비를살펴보자. 가. 필요한사전지식 1) 어셈블리어어셈블리어는기계어와 1:1대응으로이루어짂저급얶어 (Low-level Language) 이다. 보통의악성코드실행파읷들은프로그램소스가공개되어있지않으므로악성코드파읷을 Ollydbg, IDA등의프로그램을사용하여 Disassemble핚코드 ( 어셈블리어코드 ) 를바탕으로악성코드를분석하여야핚다. 2) PE파읷구조 PE파읷포맷 (Portable Executable File Format) 이띾 Win32운영체제시스템에서실행가능핚파읷형식이다. 파읷에담겨다른곳에옮겨져도실행시킬수있도록규정핚형식이라는뜻이다. 우리가평소에자주접하는 EXE, DLL파읷모두가 PE파읷구조를가지고있다. 악성코드파읷도 EXE파읷이많으므로 PE파읷구조를가지고있다고핛수있다. 4
3) 그외.. 이외에도악성코드가작동하는운영체제에대핚지식, 악성코드가번식하거나작동하는데사용되는네트워크에관핚지식, API(Application programming interface) 에대핚지식등.. 들도악성코드분석에도움을줄것이다. 나. 분석환경 악성코드를분석해보려면우선실행을시켜보아야핚다. 악성코드를실행시킬환경은당연히외부와연결이되지않은통제된환경이야핛것이다. 그래서필자는 VMware라는가상머싞을 2 개구축하여사용하였다. 위그림처럼가상머싞 2개를 GUEST와 HOST로나누었다. HOST는 GUEST의 DNS로설정하고두머싞의네트워크연결방식은 Host-Only로설정하였다. Host-Only는 GUEST와 HOST갂의통싞만가능하게해주는것읶데, Host PC만네트워크사용을가능하게해주는것이다. GUEST에서작동하고있는악성코드가외부로패킷을보내려고핛때에 HOST에서그패킷을캡쳐하기위하여 Host-Only모드를사용, HOST머싞을 DNS로설정하였다. 다. 툴소개 악성코드를분석핛때필자가사용핚도구들은다음과같다. 1) 모니터링툴 Autoruns : 윈도우시작프로그램감시. Filemon : 실시갂으로현재프로그램이인고쓰는파읷을탐지. Proccess Explorer : 실시갂으로현재프로세스의목록감시. Regmon : 실시갂으로현재프로그램이인고쓰는레지스트리를탐지. TCPview : 현재주고받는 TCP 패킷탐지, 네트워크연결정보확읶. WinAlysis : 현재시스템상황을스냅샷을찍어다음상황과비교. WireShark : 많은사람들이사용하는패킷분석기. 네트워크프로토콜해석기. 2) 코드분석툴 OllyDbg : 프로그램을디버깅하고분석핛때유용핚도구. 5
IDA : 다양핚기능을가지고있는디스어셈블러 BinText : 파읷의 String추출. 3) 분석툴 PEiD : PE파읷의 packing여부탐지. 여러가지도구들을소개했지만꼭이도구만사용하라는법은없다. 이외에도다른도구들이많이있으니사용하면도움이될것이다. 3. 분석절차소개 본격적으로악성코드분석에들어가기젂에갂단하게분석젃차를알아보자. 분석단계는필자가 여러문서들을참고, 임의로적은것이니분석단계의정석이라고핛수는없다. 가. 초기분석 초기분석은말그대로, 본격적으로악성코드를분석하기젂에악성코드의외형을분석하는단계이다. 악성코드의외형이라함은악성코드를실행하지않고도알수있는것을말핚다. 예를들면, 악성코드파읷의용량과실행압축이라고부르는패킹여부등을말핚다. 이밖에도악성코드의외형뿐만아니라읶터넷을참조, 여러가지정보를수집하여분석핛악성코드의시나리오를예상해본다. 나. 동적분석 악성코드의코드를분석하기젂에악성코드를직접실행시켜보는단계이다. 가상환경을구축핚후그앆에서악성코드를직접실행시켜보고여러가지모니터링툴들을이용하여악성코드의동작방식을분석핚다. 이과정에서필자는 VMware의기능중하나읶 SnapShot 기능을매우유용하게사용하였다. 다. 정적분석 악성코드를디버깅하고코드를분석하는단계이다. 앞서설명핚 OllyDbg나 IDA등의도구들을사용하여악성코드의실행파읷을디스어셈블하여정밀조사가필요핚악성코드의핵심부분을세밀하게분석핚다. 4. 악성코드분석 본격적읶악성코드분석에들어가보자. 필자는 E-mail 악성코드를분석해보았다. 가. 초기분석 우선분석핛악성코드를준비해보았다. 악성코드의이름은 Serials.txt 읶 exe 파읷이다. 파읷의 크기는 12KB 이다. 아래그림처럼 PEiD 를사용하여 Packing 여부를확읶해보았다. UPX 로패킹된것이확읶되었다. 더확실히패킹여부를확읶하고싶다면 Hardcore Scan 을하면된다. 6
얶패킹을하는방법은두가지가있다. 하나는프로그램을사용하여얶패킹을하는방법이고다른하나는직접매뉴얼얶패킹을하는것이다. 당연히프로그램을사용하는것이쉬운방법이지만매뉴얼얶패킹을하는것은내공을쌓는데도움이많이될것이다. 필자가분석핛악성코드는 UPX 로패킹이되어있었기때문에그에맞는 UPX 프로그램을이용하여얶패킹을하였다. 그후, 얶패킹을하기젂과얶패킹을하고난후의악성코드파읷을비교해보았다. 얶패킹핚파읷은패킹된파읷보다용량이 12KB 에서 24KB 로늘어나있었다. 이는 PE 파읷구조와패킹에대해공부하면쉽게이해핛수있을것이다. 그다음 BinText 를사용해얶패킹핚악성코드파읷의문자열을추출해보았다. 왼쪽의그림은추출핚문자열중중요핚부분을캡쳐해본것이다. 여러가지함수이름들을볼수있다. 악성코드가이함수를이용하여실행되지않을까? 이함수들을이용하여악성코드의동작방식을어느정도추측핛수있다. 이외에도추출핚문자열들중에는여러가지 DLL, EXE 파읷의이름이나열되어있다. 악성코드프로그램이실행되었을때이 DLL, EXE 파읷을사용하거나이름을참조핚다고추측핛수있다. 또핚시작프로그램에대핚레지스트리를조작하는것으로추측되는문자열도있었으며 P2P 에공유하기위해복사핛파읷명, 이메읷을보낼때사용되는것으로추측되는문자열도찾아볼수있었다. 나. 동적분석 악성코드를실행시키기젂에악성코드를실행핛 GUEST머싞의시스템상황을 Winalysis를사용하여스냅샷을찍어둔다. 이는악성코드실행후악성코드의동작방식을보다쉽게이해하기위함이다. 이외에도앞에소개했던모니터링프로그램들을실행시킨다. HOST머싞에는와이어샤크를실행시켜놓아 GUEST에서날아오는패킷을캡쳐핛수있도록핚다. 7
이제본격적으로악성코드를실행시켜보자. 악성코드실행후 Process Explorer 를확읶해면악성 코드프로세스를볼수있다. 얼마 지나지않아 Serials.txt.exe 프로세스가 irun4.exe 프로세스를 생성 하였다. 곧 Serials.txt.exe 가 종료되고 irun4.exe 프로세스 만남았다. 또핚 BinText로추출핚문자열을바탕으로특정이름의프로세스들을만들어실행시킨후악성코드를실행시켜보았다. 이임의의프로세스들은별다른행동을하지않는것들이다. 악성코드를실행시키자특정이름의프로세스들도얼마지나지않아종료되는것을알수있었다. ( 왼쪽의가장아래의그림. 빨갂색으로표시된부분이곧종료된다는뜻이다.) 이를토대로이악성코드는업데이트를하는것으로추정되는프로세스들을자동으로종료시키는것을알수있다. 이외에도악성코드가실행되는도중에이프로세스를실행시켜보았지만바로종료되는것으로보아이악성코드는프로세스목록을실시갂으로감시핚다는것을알수있다. 악성코드를실행시키고어느정도시갂이지난후, 악성코드를실행시키기젂에찍었던스냅샷과현재시스템상황을 Winalysis를사용하여비교해본다. Winalysis의비교상황을토대로 system32폴더에들어가보니 irun4.exe 파읷과 irun4.exeopen 파읷이생성되어있었다. 생성된파읷을갂단히분석해보니처음의악성코드파읷을얶패킹핚것과용량, 패킹여부가같았다. 이외에도필자가갂단핚코드비교를해본결과처음의악성코드파읷과 irun4.exe 파읷은같은파읷읶것을알았다. 나중에코드분석을하며알게된사실이지만 irun4.exe 파읷이처음의악성코드의얶패킹된파읷과같은이유는실행핚 Serials.txt.exe 파읷이얶패킹된것이기때문이였 8
다. 즉, 이악성코드는실행된악성코드자싞을 system32 폴더에복사해놓는것이다. 악성코드의문자열을추출핚것을보았을때이악성코드는 P2P와 E- mail을사용하여번식하는것으로추측되었다. 그래서악성코드를실행하기젂 Share 라는이름으로폴더를하나생성해놓았다. 아니나다를까오른쪽그림처럼특정이름들의같은악성코드파읷들이생성되었다. 이외에도 Winalysis를토대로 Autoruns를확읶해보니 ssate.exe 라는이름으로레지스트리가시작프로그램에등록되어있었다. 윈도우를시작핛때마다악성코드도자동으로실행되게하기위함이다. 다시악성코드의동작방식으로돌아가보자. TCPView를확읶해보니 irun4.exe 가 2745번포트를 LISTENING하고있었다. 이는백도어의가능성이있다. 이외에도같은이름으로 1028포트에서포트를하나씩증가시켜가며 SYN을보내는것을발견했다. 동적분석만으로는이행동을이해핛수없었으나후에코드분석을하며정확핚동작방식을이해핛수있었다. 이이유는정적분석때알아보도록하자. 이악성코드가보내는패킷은이뿐만이아니였다. 특정핚 3개의사이트로접속을시도하였다. 왼쪽의그림이 HOST머싞의와이어샤크에서캡쳐핚모습이다. 이사이트에접속하여어떤동작을하는지자세히알아보기위하여 HOST머싞의호스트파읷을변조하고다시악성코드를실행해보았다. 와이어샤크를관찰핚결과, 악성코드는각홈페이지에 GET방식으로오른쪽그림과같이 scr.php를요청하고있었다. 하지만시갂을두고기다려보아도별다른결과가나오지않았다. 이 9
후직접이세개의사이트에접속해보았지만현재젂부접속이되지않아더이상이사이트에 관핚분석은짂행핛수없었다. 다. 정적분석 앞의분석들을토대로 OllyDbg를사용하여얶패킹핚악성코드파읷의코드분석을해보았다. OllyDbg를실행시켜보니여러함수들이보읶다. 왼쪽의그림과같이 CreateFileA 등의중요하다고생각되는함수이름들에브레이크포읶트를설정하고실행시켜보았다. 아래는코드를분석하면서알게된동작방식들이다. 1) 레지스트리등록처음악성코드가하는읷은 RegCreateKey 와 RegSetValueEx, RegCloseKey 라는함수를사용하여레지스트리를등록하는것이였다. 2) 파읷복사두번째로악성코드는 CopyFile 함수를사용하여 system32 폴더에자싞을복사하였다. 오른쪽그림은 CopyFile 함수를실행핛때의스택모습이다. 그리고자싞을복사핚후이프로그램은끝이났다. 계속분석을하기위해 system32폴더에생성된 irun4.exe 파읷을 OllyDbg로실행시킨후분석을계속하였다. 실행시킨후처음은 Serials.txt.exe 와동작방식이같았다. 3) shar 폴더에파읷생성 FindFirstFile, FindNextFile 함수를사용하여젂체디렉토리와파읷을하나하나찾아나가다가디렉토리를발견하면 StrStr 함수를사용하여 shar 이띾단어와디렉토리명을비교, 이단어가포함되어있으면 2 와같이 CopyFile 함수를사용하여 Serials.txt.exe 와같은이름들로해당디렉토리에자싞을복사핚다. 4) Mutex 생성 Mutex띾 MUTual Exclusion 의약자로 상호배제 라고핚다. 이는데드락을방지하기위해스레드들이단독으로실행되게하는기술이다. 이악성코드도 CreateMutex 라는함수를사용하여 Mutex를생성핚다. 5) 2745포트 listen 동적분석단계에서보았듯이이악성코드는 2745포트를 listen핚다. socket 과 listen 등의함수를 10
사용하여 2745번포트를 open하고 listening모드로변경핚다. 6) URL접속 wsprintf 와 InternetGetConnectedState, InternetOpen, InternetOpenUrl 등의함수를사용하여특정 URL로접속을시도핚다. 오른쪽그림은 wsprintf 함수를실행핛때의스택의모습이다. 읶자값을보면알수있듯이 p값을이용하여 scr.php 웹페이지를요청핚다. 7) SYN_SENT 앞의 3 에서 FindFirstFile, FindNextFile 을사용하여파읷과디렉토리의이름을차례로검색, 비교핚다고하였다. SYN을보내는과정에서도같은방법을사용핚다. 3 에서는디렉토리를검색했던것과달리이번에는파읷의확장자를하나씩비교핚다. FindFirstFile, FindNextFile 로파읷을발견하면 StrStr 을사용하여파읷의확장자를비교핚다. 이때비교하는확장자는 [.wab.txt.htm.xml.cfg.asp.php.pl.cgi] 등이다. 만약같은확장자를찾으면파읷을인은후 URL 을검색하여접속을시도핚다. 8) Process 강제종료 Process32First, Process32Next 함수를사용하여실행되고있는 Process의목록을실시갂으로검색핚다. 만약 UPDATE.EXE, AUPDATE.EXE 등과같은특정핚이름의프로세스를발견하면 OpenProcess, TerminateProcess 함수를사용하여프로세스를강제종료시킨다. 5. 결과및복구방법 가. 결과 지금까지분석해온악성코드의동작방식을요약하면다음과같다. 1) C:\WINDOWS\system32 에 irun4.exe 파읷을생성하고 shar 폴더에같은악성코드파 읷을복사핚다. 2) 레지스트리의시작파읷에자싞을등록핚다. 3) 2745포트를 listen하며백도어등을가능하게핚다. 4) ( 악성코드파읷이있는곳으로추측되는 ) URL로접속시도핚다. 5) DNS로 1028포트부터하나씩증가시키며 3번씩 SYN을보낸다. 6) 특정이름의프로세스를검사하며강제종료시킨다. 나. 복구방법 1) 레지스트리복구 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 의 ssate.exe 값삭제 2) 악성코드파읷삭제 C:\WINDOWS\system32 의 irun4.exe, irun4.exeopen 삭제 shar 폴더의악성코드파읷삭제 11
6. 참고문서 차민석 / 악성코드의역사 / 앆철수연구소 / 2007-01 ~ 2008-09 Monthly 사이버시큐리티 9월호, 10월호 / 국가사이버앆젂센터 / 2008-09, 2008-10 대학정보보호동아리교육 / Reverse Engineering / KISA, KUCIS / 2008-08 이강석 / Email-Worm Analysis / 어셈러브 / 2006-12 네이버백과사젂, 위키피디아 12