기술문서 `07. 10. 21 작성 악성코드분석방법론 2007. 10. 21 태인규 graylynx at gmail.com
1. 개요누구든지한번쯤은뉴스나미디어를통해악성코드에대해들어봤을것이다. 컴퓨터를잘다루지못하는컴맹들도악성코드가무엇인지알고있을만큼, 더이상악성코드는남의이야기가아니다. 이는악성코드가우리실생활에아주밀접해졌고, 그만큼우리의 IT환경이위협받고있다는이야기이다. 그럼무엇이악성코드인가? 인터넷백과사전에서검색해보면, 악성코드란악의적인목적을위해작성된실행가능한코드의통칭으로자기복제능력과감염대상유무에따라바이러스, 윔, 트로이목마등으로분류된다 1 라고정의하고있다. 예전도스시절사용자에게해를끼치는프로그램은바이러스가전부였을때, 그때는악성코드라는개념이없었다. 하지만세월이지나고 IT 환경이발달하면서신기술들이매일홍수터지듯넘쳐났고, 다들신기술을개발하느라여념이없을때, 그취약한부분을파고들며악성코드는발전하기시작했다. 그림 1. 년도별웜 ( 악성코드 ) 발전그래프 2 특히우리나라는발빠르게 IT 인프라를보급하며세계최고의 IT 국가로올라섰지만, 한편으로는그로인해악성코드에훨씬더많이노출되는결과를초래했고, 이는악성코드가번식하기에최적의환경을제공해주었다. 결국 2003년 1월 25일그유명한 1 25 인터넷대란 3 이터졌고, 이제보안은국가차원의문제가되었다. 1 네이버백과사전, 악성코드 2 아이뉴스24, 제2의인터넷대란대비하자, 2005. 3 위키백과, 1 25 인터넷대란은 2003년 1월 25일대한민국대부분의인터넷망이마비된사건이다. 마이크로소프트사 SQL 서버헛점을이용하는슬래머웜이일으켰다. 이사건으로피해를입은인터넷사용자들은한국통신을상대로피해보상소송을제기하기도하였다.
허나다행인건인터넷대란의충격때문인지, 이후많은정보보호회사들과국가기관이생겨났으며, 지금그들은우리나라 IT 인프라를외부로부터보호하기위해혼신의노력을다하고있다. 덕분에우리가그들의보호를받으며별탈없이 IT 생활을영위할수있는것이다. 하지만이런노력에도불구하고, 우리가악성코드로부터완전히자유로울수없는이유는, 하루에도수천개씩쏟아지는악성코드를감당하기엔그대응인력이턱없이모자라기때문이다. 이는곧제2의인터넷대란을유발할수도있는잠재적위협으로연결된다. 그림 2. 최근 1 년간월별악성코드감염사고발생추이 4 악성코드로부터자유롭기위해서는각사용자들의주의와관심이최고의방법이겠지만, 일반적으로대부분이컴퓨터에대해자세한지식을가지고있지못한사람이므로, 꾸준하게사용자들에게그내용을홍보하는것이외에별다른도리가없다. 그럼또어떤해결책이있을까? 악성코드분석인력을늘려서그만큼악성코드를빨리분석하고대응하는것이다. 하지만실제우리나라에서활동하고있는악성코드분석인력은그수가아주적은데, 그것은악성코드분석을하기위해알아야하는고급기술의내용이워낙깊고방대하다는것에기인한다. 특히악성코드분석에필요한핵심기술인리버스엔지니어링 (Reverse Engineering) 5 기술이일반인들에게는매우생소한분야라그만큼처음접근하기가어려우므로, 많은사람들이힘들어하는것같다. 하지만이것도첫단추꿰는것이힘들뿐, 한번맛을보고나면더이상어렵지않은기술임을알게될것이다. 4 국가사이버안전센터, 월간사이버위협동향및대응활동, 2007 5 네이버백과사전, 소프트웨어공학의한분야로, 이미만들어진시스템을역으로추적하여처음의문서나설계기법등의 자료를얻어내는일을말한다.
이글에서필자는악성코드를분석하기위한리버스엔지니어링의시작에대해설명하려한다. 많은사람들이궁금해하는것들, 이를테면어떤도구로어떤책을보고, 어떠한방법으로분석을하며결과는어떻게마무리지어야하는가? 등에대한답변을적어보려한다. 2. 지식악성코드를분석하기위해필요한지식은다음과같다. 가. 해당운영체제에대한지식먼저해당운영체제에대한지식이라함은, 악성코드가번식하는해당운영체제가작동하는원리와구조에대한지식이라할수있다. 운영체제가어떤하드웨어를기반으로동작하며, 어떤 API 6 들을제공하며, 시스템주요정보가저장되는위치는어디인지등에대한세부지식을말한다. 악성코드도하나의프로그램이다. 다른프로그램들과똑같이대상운영체제가지원하는자원을빌려쓰며, 그운영체제내에서만존재가가능하다. 그렇게때문에우리는악성코드를분석하기에앞서해당운영체제에대해알아야할필요가있는것이다. 그럼어떤운영체제를공부해야할까? 최근거의대부부분의악성코드는 MS Windows 시리즈운영체제를대상으로만들어지고있는데, 그이유는일반 PC용으로 Linux등의타운영체제보다 Windows의사용자가압도적으로많기때문이다. 그림 3. 운영체제별침해사고현황 7 그러므로악성코드를분석하기위해서는 Windows 운영체제에대해잘알아야한다. 하지만여기서잘안다는건일반적인사용용도로서의지식이아닌악성코드가운영체제를악용하는데쓰이는기술을파악하기위한지식이다. 6 네이버백과사전, 운영체제와응용프로그램사이의통신에사용되는언어나메시지형식을말한다. 7 국가사이버안전센터, 월간사이버위협동향및대응활동, 2007.
아래는필자의추천도서이다. 1) 운영체제론 (ANDREW S.TANENBAUM 지음 / 사이텍미디어 ) 2) Programming Windows (Charles Petzold / 한빛미디어 ) 3) Windows 시스템실행파일의구조와원리 ( 이호동지음 / 한빛미디어 ) 4) Windows 구조와원리 ( 정덕영지음 / 한빛미디어 ) 5) Microsoft Windows Internals (Mark E. Russinovich 지음 / 정보문화사 ) 물론위의책을무조건다읽고알아야악성코드를분석할수있다는건아니다. 위의책들중한권도읽지않은사람이라도어느정도분석은가능하다. 하지만악성코드를완벽히분석하기위해서는반드시숙지해야할책들이다. 또한악성코드를분석하다보면, 종종필요한정보들을찾아야할때가많은데, 그때에아주도움을주는좋은내용을많이담고있다. 가능하면한번씩은꼭읽어보도록하자. 나. 어셈블리언어에대한지식다음으로, 어셈블리언어 8 에대한지식이다. 우리가접하는악성코드가프로그램소스일가능성은 0% 이다. 모든악성코드는그실행파일만으로전파되며우리는그것을분석해야한다. 즉이미컴파일된바이너리만가지고그소스를역으로분석할수있어야한다는것이다. 바로이기술을리버스엔지니어링이라한다. 어셈블리언어는컴퓨터가사용하는기계어와 1대1 대응이되므로, 컴퓨터로실행되는파일을역으로어셈블리언어로바꾸는것이가능하다. 이를디스어셈블 (Disassemble) 이라한다. 어셈블리언어를알면디스어셈블된코드를토대로악성코드의소스를복원할수있으며, 이것이분석에있어서가장어렵고중요하다고할수있다. 아래는필자가추천하는도서이다. 1) 80x86 마이크로프로세서 (John Uffenbeck 지음 / 홍릉과학출판사 ) 2) IA-32 Intel Architecture Software Developer's Manuals (Intel 홈페이지 ) 3) 어셈블리언어 (KIP R. IRVINE 지음 / 교보문고 ) 하지만어셈블리언어를자유자제로구사할만큼잘할필요는없다고생각한다. 어셈블리언어는꼭알아야할지식임에틀림없지만, 아직도어셈블리언어를사용하여프로그래밍하는사람은거의없을것이다. 분석의측면에서도그렇다. 단지필요한건분석하는데필요한지식일뿐이다. 단지어셈블리코드를보고이것이어떤행동을하는것인가분석할수만있으면그만이다. 8 기계어와 1대1로대응하는언어로사람이이해하기쉽게약간변형시킨언어이다. 기계어와가장가깝기때문에그기계의특성을가장잘살릴수있다는것이장점이다. 하지만기계어와매우비슷하기때문에이해하기어렵다는것이단점이다.
다. 네트워크에대한지식마지막으로네트워크에대한지식이다. 예전도스시절바이러스를분석할때는전혀필요없었던지식이지만, 인터넷이발달하여전세계모든컴퓨터들이거미줄처럼엮여서로통신하는지금은, 웜 9 의출현으로리버스엔지니어링만큼중요한지식이되었다. 그림 4. 코드레드웜감염위치 10 모든국가기관, 단체, 은행, 기업, 가정의컴퓨터들이서로네트워크로연결되어있다. 자칫잘못해서네트워크가마비되기라도한다면사회적대공황으로이어질수도있을만큼네트워크는 IT 그자체라고도볼수있다. 2001년코드레드웜 11 을보라. 단지수백바이트의작은패킷이우리나라네트워크전체를과부하로정지시켰다. 이는분명네트워크의관점에서분석되어야한다. 리버스엔지니어링이미시적분석방법이라한다면, 네트워크분석은거시적분석방법이라할수있겠다. 역시다음의서적을추천한다. 1) Unix Network Programming (W. Richard Stevens 지음 / Prentice Hall) 2) Network Programming for Windows (Anthony Jones 지음 / 정보문화사 ) 3) 성공과실패를결정하는 1% 의네트워크원리 (Tsutomu Tone / 성안당 ) 위에서필자가소개한책만봐야할필요는절대없다. 단지일반적으로가장많이추천하는책위주로직접읽어본책만서술하였다. 자신이읽어보지도않은책을남에게추천할수는 9 위키백과, 스스로를복제하는컴퓨터프로그램이다. 컴퓨터바이러스와비슷하다. 하지만컴퓨터바이러스와웜의중요한차이점은바이러스는스스로전달할수없지만웜은가능하다는점이다. 웜은네트워크를사용하여자신의복사본을전송할수있으며, 어떠한중재작업없이그렇게할수있다. 일반적으로웜은네트워크를손상시키고대역폭을잠식하지만, 바이러스는컴퓨터의파일을감염시키거나손상시킨다. 바이러스는보통네트워크에영향을주지않으며대상컴퓨터에대해서만활동한다. 10 http://www.caida.org 11 컴퓨터프로그래머들이좋아하는카페인음료의이름을딴것으로웹서버운영체제인윈도 NT와윈도 2000의취약점을찾아공격하는웜바이러스.
없는노릇아닌가? 자신이부족하다싶은부분은더많은책을구입해서닥치는데로읽는것이실력향상의최단지름길이라생각한다. 3. 도구그럼악성코드를분석하기위해필요한도구에대해알아보도록하자. 분석도구는다음과같이크게세가지로나눌수있다. 가. 분석에도움을주는도구분석에도움을주는도구란분석을하는데직접적인역할을하지않지만, 분석을더욱편하게도와주거나, 분석환경을만들어주는도구라할수있다. 악성코드가어떤동작을하는지파악하려면좋든싫든악성코드를직접실행시켜봐야한다. 과연실행이되면운영체제에서는어떤일이일어나고네트워크에는어떤변화가일어나는가에대한정보가필요한데, 그러면실행시킬대상이있어야한다. 제약회사에서새로운바이러스가출현했을때, 쥐들에게바이러스를투입하여어떤증상이나타나는지조사하는것에비유할수있겠다. 하지만이렇게하루에수천개씩새로생겨나는악성코드들을분석했다간, 윈도우즈를다시설치하는데더많은시간이필요할것이다. 아주비효율적이다. 그림 5. VMware Workstation 12 그렇기때문에실제악성코드를분석할때는실제 PC가아닌, 그것을대신할가상의 PC 에서악성코드를실행시킨다. 여러분들도다들알고계시는가상 PC 프로그램 13 들이다. 12 http://www.vmware.com 13 컴퓨터내에서각각해당프로그램을실행하는여러운영체제를동시에실행할수있다. 가상 PC 프로그램에는
최근에는그기능이아주좋아져서진짜 PC와거의동일한기능을지원함은물론이고, 악성코드에감염이되었다하더라도, 마우스클릭한번이면악성코드가실행되기전시점으로감쪽같이돌아갈수도있다. 이런기능들을이용해서각운영체제별로악성코드에대해몇번씩이나재실행이가능한것이다. 나. 행동기반분석도구행동기반분석도구란, 위에서설명했듯이실제악성코드를실행시켜보고실행되기전과실행된후를비교하여, 그행동패턴을분석하는도구라할수있다. 주로악성코드가이용하는자원들에대한변화를탐지하게되는데, 일반적으로프로세스목록, 보조기억장치, 레지스트리, 네트워크아답터에대해로깅을실시한다. 다른말로이들을모니터링툴이라고도하는데, 지금은 MS에인수된 SYSINTERNALS 14 라는회사에서나온툴이많이쓰인다. 그목록은다음과같다. 그림 6. ProcessExplorer 1) Autoruns 윈도우즈시작시자동으로실행되는프로그램감시 2) Filemon 대상프로그램이읽거나쓰는파일감시 3) Regmon 대상프로그램이읽거나쓰는레지스트리감시 4) RootkitRevealer 루트킷탐지프로그램 5) Tcpviews 네트워크를통해주고받는 TCP 패킷감시 6) Tdimon 현재시스템의모든 TCP/UDP 입출력상황감시 VMware, Virtual PC, Boch 등이있다. 14 http://www.microsoft.com/technet/sysinternals/utilitiesindex.mspx
7) ProcessMonitor 프로세스목록감시 8) ProcessExplorer 프로세스목록감시 ( 기타추가기능지원 ) 또한, 다음의툴들 15 도많이쓰인다. 9) IceSword 숨겨진프로세스목록을탐지 10) MultiMon 위의모든대상에대한통합실시간감시 11) Regshot 레지스트리분석도구 ( 실행전과후의스냅샷비교 ) 12) Smartsniff 간단한네트워크패킷스니퍼 13) Winalysis 위의모든대상에대해통합분석 ( 스냅샷비교 ) 그림 7. IceSword 악성코드들은기술이날로발전하여, 최근의거의모든악성코드들은스스로를외부로부터보호하는실행압축 16 이나안티-디버깅 17 등의코드를포함하고있다. 또한자신이실행되는곳이실제물리적머신인지, 가상의머신인지파악하는코드가들어있어서가상 PC 프로그램안에서실행되었을때아무런동작도취하지않는악성코드들도출현하기시작했다. 간혹이런악성코드들은위의도구들을탐지할때가있는데, 이때엔다음에설명 15 여기에있는모든도구들은 google에서검색해보면쉽게찾을수있다. 16 국가사이버안전센터, 악성코드분석을위한 " 실행압축 " 해제기법, 흔히말하는 ZIP, RAR처럼데이터들을하나로묶어놓는압축과는달리그대상이 notepad.exe처럼실행할수있는파일을압축한것으로, 실행압축된 notepad.exe는압축을푸는과정없이바로프로그램을실행할수있다. 악성코드도이런점을이용해짧은시간안에많은곳으로전파되도록실행압축을사용하고있으며, 백신제작자들로하여금악성코드를분석하기어렵도록하는데도사용된다. 분석하는데시간이걸리는동안악성코드전파시간을늘릴수있기때문이다. 이와반대로만약실행압축을빨리해제하여분석할수있다면, 그피해규모또한현저히줄일수있을것이다. 17 프로그램단독으로실행됐을때와, 디버거위에실행됐을때의시스템적인차이를이용하여자신이디버깅되고있는지파악하는기술.
할코드기반분석툴과리버스엔지니어링기술로그알고리즘을분석한뒤보호기능을무장해제시키고행동기반분석툴로다시분석해야할필요가있다. 다. 코드기반분석도구마지막으로코드기반분석도구들을살펴보도록하겠다. 코드기반분석도구는크게적극적또는비적극적의성격으로나눌수있다. 18 1) 비적극적코드기반분석도구비적극적분석도구란일반적으로코드를기반으로분석하되, 분석자의노력또는경험이필요하지않는도구로서, 대표적인도구로는 ClamAV 19 와 Strings 20 가있다. 이들도구는악성코드를세밀하게분석할수는없지만, 간단하게악성코드에대한요약정보를얻을수있다는장점이있다. 그래서코드기반분석초기에필수적으로실행하는것이보통이다. 그림 8. ClamAV GUI 2) 적극적코드기반분석도구적극적분석도구란, 분석자의노력또는경험을기반으로악성코드의세세한부분까지분석하는데필요한도구로서, 디버거 21 와디스어셈블러 22 가있다. 18 필자나름대로의기준으로봤을때마음대로지어낸기준이니무시해도좋다. 19 주로이메일로전파되는악성코드를관문에서차단하기위해개발된소프트웨어이다. 시그니쳐기반의악성코드판단도구로, 이미특정악성코드를분석한사람이특정악성코드라고판단할수있는최소한의바이너리 ( 악성코드의 DNA쯤되겠다 ) 를인터넷에올리면, 다른사람들은단지그시그니쳐만받음으로서악성코드를파악할수있게되는원리이다. 20 바이너리에서아스키코드만출력해주는도구 (3글자이상의출력가능한문자로시작하고 NULL 값으로끝나는문자열을출력한다 ) 21 실시간으로대상프로그램의코드를추적하는프로그램. 22 기계어로이루어진실행파일을사람이알아볼수있는어셈블리어로바꾸는프로그램.
그림 10. OllyDbg 주로쓰이는디버거로는 SoftIce 23, OllyDbg 24, WinDbg 25 등이있으며, 디스어셈블러에비해실시간으로실행코드를추적하면서악성코드의세세한부분까지분석할수있다는장점이있다. 또한디스어셈블러로는 IDA 26 와 W32Dasm 27 이있으며, 특히 IDA 는현존최고의디스어셈블러로손꼽힐만큼최고의분석기능을제공한다. 그림 11. IDA Pro 하지만, 명심해야할것은적극적분석도구는그도구자체로는아무런역할도할수없다는것이다. 아무리도구가뛰어나다한들, 분석가의능력과경험에의해결과물의수준은천차만별로차이가난다. 피아니스트에비유하자면, 세계최고의피아노 23 몇년전까지만해도 Ring0 기반최고의디버거였지만, 지금은개발이중단되었다. 24 http://www.ollydbg.de 25 MS에서제공하는커널디버거 (http://www.microsoft.com/whdc/devtools/debugging/default.mspx) 26 http://www.datarescue.com/idabase/ 27 요즘엔거의쓰지않는다.
가있다한들, 그피아노를아름답게칠능력이없으면그피아노는그저그런나무토막에불과한것과같은이치이다. 4. 절차이제무엇을공부해야하는지, 어떤도구를이용해야하는지알게되었다. 그럼다음으로필요한것은무엇일까? 바로, 어떻게분석하나정도가아닐까? 그럼먼저어떻게분석해야하는지큰절차를알아보고, 실제로악성코드샘플을예로분석하면서세세한절차를알아보도록하자. 악성코드를분석하기위한큰절차는다음과같다. 가. 허니팟프로젝트 28 나악성코드연구홈페이지등을통해악성코드샘플을수집한다. 나. ClamAV로분석해보고, 이미분석된악성코드라면어떤행동을하는지미리파악한다. ( 하지만변종악성코드또한같은시그니쳐를가질수있으므로, 대충이러할것이다라고만생각하고결과를완전히신뢰하지않는것이좋다 ) 다. 앞서소개한행동기반분석도구들을통해가상Box안에서악성코드를실제실행시켜보고, 어떤행동을하는지에대해기록한다. 이때최대한많은데이터를수집하는것이중요한데, 이는다음에있을세부적인분석을하는데에매우도움이된다. 라. PEiD 29 등의 PE 헤더 30 분석툴을통하여, 악성코드가자동압축되어있는지검사한다. 마. 만약자동압축되어있다면, 언팩킹 31 한뒤, 다음으로넘어간다. 바. Strings 로어떤문자열이쓰이는지, 어떤 API 들이사용되는지조사한다. 사. 디스어셈블러로구한어셈블리코드를토대로악성코드의루틴을머릿속으로그려본다. 아. 앞서분석한악성코드의루틴을따라, 디버거로실제실행코드를실시간으로추적한다. ( 이부분에서디스어셈블러로는알아내지못한코드들이나타날가능성이높다. 많은 28 야후용어사전, 간단히 ' 해커잡는덫 ' 이란뜻의용어. 즉해커를잡는유혹의꿀단지라는의미이다. 해커공격에대응할수있는시간을벌고해커의움직임을면밀히파악함으로써사이버테러를방지하는신기술로관련업계에서는기대를모으고있다. 29 시그니쳐기반자동압축탐지도구. 대상실행파일이어떤방식으로자동압축되어있는지알려준다. 30 Portable Executable Header. MS Windows에서사용되는 COFF 기반의실행파일포맷. 31 자동압축을강제해제하는것을말한다.
악성코드들이자신의중요한정보는실시간으로숨겨놓고꺼내보기때문이다 ) 자. 분석을통해구한모든데이터를체계적으로문서화한다. ( 중요 ) 차. 악성코드에대응하고치료하는방법을다른사람과공유한다. ( 중요 ) 32 카. 가. 절차로돌아간다. 위의절차는순전히필자의경험에기반한제멋대로절차이므로, 무조건신뢰할필요는없다. 그저공부목적으로깨작깨작분석해본부족한이의경험이어찌수년동안실무에서구르고구른분들의노하우를따라갈수있으리.. 그럼이제실제로악성코드하나를분석해보도록하자! 먼저위에서소개한모든도구들을준비하기바란다. 더불어자신만의악성코드분석에필요한가상머신을운영체제별로하나씩구비해놓으면금상첨화이다. 실제로필자는모든도구들이입맛에맞게설치된가상머신을수십개준비해놓고쓰고있다. 설치하는데는시간이오래걸리지만한번설치해놓으면나중에분석할때매우편하므로하루날잡고한번준비해보는것도좋겠다. 그림 12. 실제한실무자의가상머신이미지들 33 그럼본격적으로분석을시작하자. 먼저, 목표물이있어야한다. 필자는 wsass1.exe 라는악성 32 개인적인생각으로는역시가장중요한것은악성코드의분석결과를많은사람들과공유하고, 탐지하고치료하는방법을개발하는것이라생각한다. 그게바로우리가악성코드를분석해야하는근본적인이유이기때문이다. 33 CertLab, Malware Analysis, 2007
코드샘플을목표물로설정했다. 또한대상운영체제는취약점패치가안된 MS Windows XP ServicePack2를선택했다. 그림 13. 목표로설정한악성코드 wsass1.exe 다음으로 ClamAV나 Virus Total 34 등의악성코드탐지도구로어떤악성코드인지사전정보를구해보자. 그림 14. Virus Total 로얻어낸악성코드의정보 그림14. 를보면많은안티바이러스프로그램들이대상파일 wsass1.exe에대해 IRCBot기능이있는웜이라판단하고있다. 우리에게친숙한안철수연구소의판단을믿고, 안랩 35 홈페이지의바이러스DB에서해당웜을검색해보자. 34 http://www.virustotal.com 35 http://www.ahnlab.co.kr
그림 15. 안철수연구소에서제공하는해당웜의정보 밑으로계속읽어보면, 해당웜의세부동작에관해서도설명하고있는데, 이미이웜에대한분석이이미끝났음을말해준다. 그림 16. 안철수연구소에서제공하는해당웜의정보 하지만, 이정보가반드시내가가진웜이라고확신할수는없다. 다만대충이렇다고만알아두고, 다음분석절차에참고정도만하도록하자. 다음절차로웜을직접실행시켜보도록하겠다. 그전에반드시각종모니터링도구가웜의행동을감지할수있게준비해놓자. 또한가상머신의이미지에대한스냅샷은반드시찍어두도록하자. 그림 17. 네트워크상태변화
그림17. 네트워크상태변화에대한감지결과를보면 wsass.exe라는파일이특정주소의 9070 TCP 포트로접속을시도하고있음을알수있다. 결과를통해이서버가바로해커가만들어놓은 IRC 서버라는것을추측해볼수있다. 그림 18. 악성코드실행전 / 후의시스템상태의변화요약 그림18. 은전체적인시스템상태변화에대한감지결과로, 이악성코드가파일과레지스트리, 그리고공유폴더에대한상태를조작하고있음을말해준다. 그림 19. 파일읽기 / 쓰기감지결과 그림19. 는파일읽기 / 쓰기상태변화에대한감지결과이다. C:\a.bat C:\WINDOWS\System32\msnsrv.exe C:\WINDOWS\System32\wsass.exe 위 3개의파일이새로생성되었음을알수있다. 그림 20. 레지스트리읽기 / 쓰기감지결과
그림20. 은레지스트리읽기 / 쓰기에대한변화로, 특정레지스트리를편집한다. 그중중요한값을정리해보면다음과같다. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices에이름 Windows WKS, 값 wsass.exe의레지스트리생성 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run에이름 Windows WKS, 값 wsass.exe의레지스트리생성 위의레지스트리가등록되면시스템이시작될때마다새로생성된파일이 ( 악성코드사본으로추측 ) 실행된다. 실제로변화된레지스트리값을확인해보자. 그림 21. 변화된레지스트리값 1 그림 22. 변화된레지스트리값 2 이정도면행동기반분석은 OK다. 이제이악성코드가대충어떤방식으로동작하는지알수있을것이다. 그럼이정보를토대로코드기반분석절차를밟도록하자. 먼저 PEiD 로실행압축여부를확인한다. 그림 23. PEiD 로탐지한실행압축정보 ASPack 2.12 -> Alexey Solodovnikov라는팩커로실행압축되어있다. 실행압축이되어있으므로, 제대로분석하기위해선먼저언팩킹을할필요가있다. 언팩킹에관해서이문서에일일이설명하는것은양도많거니와문서의주제에서도벗어나므로, 간단하게요약하고자한다.
더자세한언팩킹정보는각종리버스엔지니어링사이트를참조하기바란다. 그림 24. OllyDbg 디버거로분석한화면 그림24. 를보면디버거가인식할수있는아스키문자열이하나도없다. 바로이때문에언팩킹이필요한것이다. 그림 25. OEP 36 를찾은화면 36 Original Entry Point, 실행압축되기전의원래프로그램의시작포인트
그림25. 는 OEP(0x40BAA8) 를찾은화면이다. 오른쪽창을보면그림24. 에는나오지않았던아스키문자열들이보인다. 바로이웜이사용하는문자열들이다. 자세히들여다보면상당수의 IRC 명령어가포함되어있음을알수있다. 언팩킹된파일을 Strings로문자열을뽑아보면더자세하게알수있다. OEP 를찾은뒤에는덤프 37 를받고 IAT 38 를복구시켜줘야한다. 그림 26. IAT 복구화면 IAT까지복구해주면이제웜은완전히실행압축이해제된것이다. 진짜실행압축이해제되었는지 PEiD로확인해보자. 그림 27. 언팩킹후의웜실행파일 결과를보면, 이웜은 Visual C++ 6.0 으로제작되었다고나온다. 그럼다음으로넘어가서언팩 37 메모리의내용을하드디스크의파일로저장하는것. 38 Import Address Table, 자세한내용은 PE헤더에대한서적을참조하기바란다.
킹된실행파일에대해 Strings 로분석해보자. 그림 28. 웜이사용하는 IRC 명령어목록 그림 29. 웜이사용하는 API 함수목록 그림 30. 각종게임의시디키를빼내는코드 그림 30. 을보면재미있는사실을알수있다. 바로특정게임의여부를검사해서그게임의시
디키를빼내는기능이다. ( 아마도이웜을만든해커는이게임들을좋아하는것같다 ) IRC 명령어들로추측되는문자열들을분석해보면, 해커는피해자에게원격으로명령을내려시스템정보를얻거나파일을지우거나다른 PC를공격하도록할수있음을짐작할수있다. 그럼실제로그코드를눈으로확인해보자. 그림 31. 프로세스생성코드 그림 32. 시작프로그램레지스트리값생성코드 1 그림 33. 시작프로그램레지스트리값생성코드 2
사실여기까지만분석해도대부분의정보를다알았기에중단해도되지만실제로웜이어떤일을하는지테스트해보자 (!) 방법은간단하다, 디버거로실시간추적을하다가봇이해커가만들어놓은 IRC 서버로접속을시도하기직전우리가만들어놓은 IRC 서버주소로값을조작하면된다. 그리고실제로웜이잘작동하는지, 어떤기능들이있는지해커의입장에서웜에게명령을내려보자. 그림 34. 안티 - 디버깅루틴 하지만가장처음에특정조건에따라프로세스를종료하는코드가들어있는데, 항상프로세스가종료되었다. 그림34. 를보면알수있듯이이부분을 jmp 명령으로패치해서우회하였다. 그림 36. 해커가만들어놓은 IRC 서버주소 그림 35. IRC 서버에접속하는코드 그림36. 의코드를통해봇은미리해커가만들어놓은특정 IRC서버로접속을시도하고있다. 이부분을우리가원하는주소로수정하면, 봇을우리가원하는서버로접속시킬수있다. 또한봇을일반적인 IRC서버로접속을유도하려면스택에포인터로올라와있는구조체의포트번호도수정해야한다. 그림 36. 특정채널에접속하는코드
그림 36. 의코드를통해봇은해커가미리만들어놓은채널에자동으로들어가게된다. 그림 37. IRC 봇이서버에접속한후닉네임을등록하는코드 여기까지의모든값들을내가원하는값들로수정하게되면아래그림과같이봇은내가만들어놓은 IRC채널로접속하게된다. 그림 38. 봇을내가원하는 IRC 채널로접속시킨화면 채널에들어온봇에게말을걸어봤지만아무대꾸도하지않았다. 이는봇을만든해커가자신의말만듣게하기위해만들어놓은인증코드때문이다. 이문서에서분석하고있는봇은암호인증과호스트인증의 2단계인증절차를가지고있었지만, 약간의분석기술만있으면얼마든지크랙가능한쉬운코드로되어있었다. ( 문서에인증받
는부분의코드도넣으려했지만, 그렇게되면악용될소지가있으므로생략했다. 또한인증코드역시모자이크처리했음을양해바란다 ) 그림 39. 암호인증기능 그림 40. 암호인증기능크랙 그림 41. 호스트인증기능크랙 호스트인증까지크랙하면봇으로부터 password accepted. 라는응답을받게되며이후부터는봇에게다음과같이내가원하는명령을내릴수있게된다. 그림 42. 두가지인증을모두크랙하고, 봇에게명령을내린화면 5. 대응 마지막으로, 혹시나이미자신의시스템이이웜에감염되었다면, 다음과같은방법으로치료가가능하다. 가. C:\WINDOWS\System32\wsass.exe 삭제나. HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices\Windows WKS
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Windows WKS 레지스트리값삭제다. 최신윈도우즈취약점패치수행라. 최신엔진의안티바이러스프로그램실행 6. 마치며.. 이제까지악성코드를분석하기위한여러가지방법들과필요한도구들을알아보았다. 하지만필자가이런방법들과도구들을소개했다고해서그내용이이글을읽는독자에게완전히흡수될수는없다. 악성코드를잘분석하기위해서, 가장좋은방법은역시무조건분석해보는것이다. 악성코드를수집하는허니팟프로젝트또는악성코드연구홈페이지들을찾아다니며, 끊임없이수집하고분석해보는노력이필요하다. 하지만그중가장중요하고명심해야할점은악성코드수집이나분석은 100% 공부나연구를목적으로수행되어야한다는것이다. 실제로악성코드를많이분석하다보면, 악성코드의원리와코드가속속들이다보이게된다. 더나아가이런부분은이렇게만들었다면, 더치명적이었을건데.. 라는까지생각들때가있다. 인터넷윤리의식이똑바로자라지못한사람이악성코드분석기술을습득하게된다면, 그건국가적손실일뿐만아니라치명적인잠재적위협요소로써매우위험한일이다. 이는악성코드분석가들이가장조심하고신중해야할부분이기도하다. 어떤사이트를해킹하다경찰에잡혀서옥살이를하고나왔더니, 수많은기업에서서로데려가려고하더라라는말은이제는근거도없는헛소리다. 오히려해킹에대한단속이심하고처벌이강한우리나라에서는한번불법자로서낙인이찍히면두번다시이계열로는직장을구하지못할만큼해커에대한인식이안좋은편이다. 경제적여건이나기타다른이유로이런뛰어난능력을까딱잘못사용했다가는평생낙오자로살아야할수도있다. 그만큼위험한기술이기때문이다. 이분야에종사하는사람들은자부심과책임감을갖고항상올바른마음가짐을가지려고스스로노력해야한다. 필자는적어도이문서를읽는모든사람들이그런마음가짐과의식을가지고있다고믿고싶다. 부족한글끝까지읽어주셔서감사합니다. Happy Hacking~!