Malware Analysis 악성코드분석 Ixaobny.exe 에대하여분석해보자. 2/16/2016 By Kali KM
2 Malware Analysis SAMPLE DETAILES Dropper File Name ixaobny.exe File Size 220 KB ( 225,280 Bytes ) CRC32 5B68BBB5 MD5 FDBC952660B7FCB2A9A5C434D2EDBB6E SHA-1 2BC748B6DEAAB5E342041A3D2A65AE1E46B14609 Dropped #1 File Name File Size MD5 SHA-1 CRC32 ixaobn.dll 79 Bytes 6A9B74D991A70F4606AB3E298618FB74 DC346D4B84CD000FF42EF56C1294505F9593EE64 6EF6FE6A Extracted #1 File Name LogonCLI.EXE File Size 169 KB ( 173,568 Bytes ) CRC32 DF3DA2EA MD5 98E71167C0194A81E674B2874B4A3A4B SHA-1 570EBBDB97E87C434E33382F62AA4E5844929CC9
3 Malware Analysis 목차 1 요약... 4 2 개요... 5 3 동적분석... 6 3.1 Process 분석... 6 3.2 MFT 분석... 7 3.3 Prefetch 분석... 8 3.4 Registry 분석... 9 3.5 Network 분석... 10 4 정적분석... 12 4.1 Memory 분석... 12 4.2 Disassembly 분석... 13 그림 / 표그림 1. 요약... 4 그림 2. Process Explorer... 6 그림 3. WireShark... 10 그림 4. Rekall - Consolescan... 12 그림 5. Rekall - malfind... 13 그림 6. HxD... 14 그림 7. HxD... 15 그림 8. IDA (1)... 15 그림 9. IDA (2)... 16 그림 10. IDA (3)... 16 그림 11. IDA (4)... 17 그림 12. IDA (5)... 18 표 1. 사용된도구... 5 표 2. NTFS Log Tracker... 7 표 3. WinPrefetchView... 8 표 4. REGA... 9 표 5. Whois... 11 표 6. Rekall - dlllist... 13
4 Malware Analysis 1 요약동적분석과정적분석을통해분석을진행하였다. 1 장에서는이렇게분석한내용들을통해해당악성코드가어떠한동작을하였는지요약한페이지다. 우선해당악성코드는안티디버깅기법이존재하기에분석을하는데있어고충을겪었으며완벽한분석은하지못하였다. 분석한내용들은다음과같다. 그림 1. 요약 해당악성코드는디렉터리와파일을생성한다. %AppData% 의 \Roaming\Microsoft 에 ixaobnyx 라는디렉터리는생성한뒤해당경로에 ixaobny.exe 와 ixaobn.dll 그리고 %LocalAppData%\TEMP\ 에 ~ixaobny.tmp 를생성한다. 파일과관련해서는 이렇게동작한다. 프로세스와관련해서총 4 개의프로세스가더생성된다. 최초실행한 6.exe 는 ixaobny.exe 와 cmd.exe 를생성한다음, 위그림과같이각프로세스들은 explorer.exe 와 ping.exe 를생성한다. 여기서 ping.exe 는메모리분석을통해확인한결과로컬호스트에 ping 명령을수행하는것임을확인할수있다. 이렇게실행된프로세스들은 explorer.exe 를남기고모두종료된다. Explorer.exe 는지속적으로프로세스로남아동작하는것을확인할수있다. 마지막으로레지스트리와관련되어해당키에 ixaobny.exe 를등록한다. 이는악성코드의지속성을유지하기위한방법으로, 등록된파일은해당유저가로그인했을때자동으로실행되도록설정한다. 이외에도분석을하면서통신이나서비스등록등의작업이있지만불분명하게분석되었다. 따라서해당부분들은각장에서확인할수가있다.
5 Malware Analysis 2 개요이번문서는악성코드를분석하면서, 어떠한방식으로분석을하고어떻게문서로정리할것인가에대하여중점으로작성하였다. 그러므로악성코드를완벽히파악하는것이아닌, 어떠한기능의함수들을가지고있고이러한함수들이어떠한구조로존재하는지파악하는것이목적이다. 악성코드를분석하는데있어크게 2 단계로나누어살펴볼것이다. 동적분석과정적분석으로나뉘어지며, 동적분석은악성코드를직접실행시키므로나타난결과들에대하여살펴볼것이다. 반대로정적분석은악성코드를디버거를통해실행했을때의결과에대하여살펴볼것이다. 각분석에사용된도구들은다음의표와같다. 분석종류 도구명 버전 동적분석 Process Explorer v16.02 NTFS Log Tracker v1.4 REGA v1.5 WinPrefetchView v1.32 WireShark v1.12 정적분석 Rekall v1.4.1 Volatility v2.3.1 OllyDBG v1.0 IDA Pro v6.6 표 1. 사용된도구 위의도구들을이용하여전체적인분석을진행하였다. 동적분석을먼저진행하여 어떠한동작들이이루어지는지확인을한뒤, 정적분석을통해이에대하여좀더 구체적을알아볼것이다.
6 Malware Analysis 3 동적분석동적분석은해당악성코드를실행하므로나타나는증상에대하여정리한섹션이다. 악성코드를분석함에있어어떠한기능을하는지빠르게파악하기쉽다는측면이있다. 하지만눈에보이는것을위주로확인하기에놓치는측면도존재함은알아야한다. 여기서악성코드의행위에대하여구분을위하여해당악성코드의이름을 6.exe 로변경한후실행하였다. 3.1 Process 분석최초악성코드 6.exe 를실행하면 2 개의자식프로세스를생성한다. Ixaobny.exe 라는새로운프로세스와 cmd.exe 를생성한다. 여기서 cmd.exe 는명령어를통해입력되어실행되는경우가많다. 이러한 cmd 에는 PING 명령어가전해져 PING.EXE 가이에대한하위프로세스로생성된다. 새롭게생성된 ixaobny.exe 는다시 explorer.exe 라는프로세스를생성한다. 여기서 explorer.exe 는흔히악성코드들이자신을위장하기위하여 svchost 와함께흔히 사용되는프로세스의이름이다. 그림 2. Process Explorer 이렇게생성된프로세스들은자신의역할을다한뒤종료된다. 하지만모든 프로세스가종료되는것은아니다. 바로새로생성된 explorer.exe 는계속프로세스로 남아자신의행위를지속한다.
7 Malware Analysis 3.2 MFT 분석그렇다면프로세스가아닌파일과관련하여어떠한동작들이일어나는가에대해선 MFT 를살펴보면용이하다. MFT 에는파일에대한메타정보들이저장되어있기때문에, 유용한정보들을많이제공받을수가있다. 이중특히 $LogFile 의경우트렌젝션로그로, 파일에대한변화가있을경우이에대하여기록하여저장한다. 악성코드에따른트렌젝션로그는아래의표와같다. Event File Name Full Path Dir Creation Ixaobnyx %AppData%\Roaming\Microsoft\Ixaobnyx File Creation Ixaobn.dll %AppData%\Roaming\Microsoft\ixaobn.dll Ixaobny.exe %AppData%\Roaming\Microsoft\Ixaobny.exe Writing Data Ixaobny.exe %AppData%\Roaming\Microsoft\Ixaobny.exe File Creation 6.EXE.PF - IXAOBNY.EXE.PF - ~ixaobny.tmp %LocalAppData%\Temp\~ixaobny.tmp PING.EXE.PF - File Deletion 6.exe %UserProfile%\Desktop\6.exe Writing Data System.evtx %SystemRoot%\System32\winevt\Logs\System.evtx PING.EXE.PF - CMD.EXE.PF - EXPLORER.EXE.PF - ~ixaobny.tmp %LocalAppData%\Temp\~ixaobny.tmp 표 2. NTFS Log Tracker 이를통해어떠한파일과관련되어행동하는지알수가있다. 우선 Ixaobntx 라는디렉터리는생성하고해당경로에 ixaobn.dll 과 ixaobny.exe 를생성한다. 그리고 TEMP 에 ~ixaobny.tmp 를생성한다. 이러한동작을한뒤최초실행되었던 6.exe 는삭제된다. 따라서생성된 ixaobny.exe 와 ixaobn.dll 에대하여접근하고자할경우해당경로로이동하여이를추출할수가있다.
8 Malware Analysis 새로생성된 ixaobn.dll 의경우크기가 79 Bytes 로매우작은파일이다. 심지어해당 파일에는 MZ 헤더또한존재하고있지않다. 따라서이를통해추가적으로얻을수 있는정보는없다. 그렇다면새로생성된 ixaobny.exe 의경우는어떨까? 새로생성된 ixaobny.exe 의경우해당경로로이동하여추출한뒤 HASH 값을 비교해본결과최초실행된 6.exe 와같은 MD5, SHA-1 값을갖는것을확인할수가 있었다. 이는두파일이같은파일이라는것으로, 최초 6.exe 가실행되면해당 바이너리를모두 %AppData%\Roaming\Microsoft\ixaobnyx\ixaobny.exe 라는파일에 기록한뒤자기자신을삭제한다는것을알수가있다. 3.3 Prefetch 분석프로세스가실행될때 Prefetch 파일을생성하게된다. 이러한프리패치파일의경우어떠한파일이같이로드되었는지확인할수가있기때문에, 유용한단서들이주어지는데, 해당파일의경로와파일과관련된다른파일들에대한정보까지확인할수가있다. 아래의표를확인하자. Process Loaded File Full Path 6.exe Ixaobny.exe %AppData%\Roaming\MICROSOFT\Ixaobnyx\ cmd.exe %SystemRoot%\SysWOW64\ Ixaobny.exe.. cmd.exe Ping.exe %SystemRoot%\SysWOW64\ Reg.exe Find.exe Shutdown.exe Icacls.exe 1 Takeown.exe 2 Explorer.exe Ixaobn.dll %SystemRoot%\SysWOW64\ %SystemRoot%\SysWOW64\ %SystemRoot%\SysWOW64\ %SystemRoot%\SysWOW64\ %SystemRoot%\SysWOW64\ %AppData%\Roaming\MICROSOFT\Ixaobnyx\ 표 3. WinPrefetchView 1 파일이나폴더의소유권을가지고오는명령어 2 접근권한을편집하기위한명령어
9 Malware Analysis 표에나타난바와같이해당프로세스가어떠한파일들을로드하는지나타내었다. 여기서최초실행된 6.exe 는새로생성된 ixaobny.exe 와 cmd.exe 를로드하는것을확인할수가있다. 이렇게로드된 cmd.exe 는 ping 뿐만아니라 reg, find, shutdown 등많은실행명령어들을로드하지만, 이중에서 ping.exe 만사용한다는것을 3.1 에서확인할수가있었다. 이상한점이있다면 ixaobny.exe 가 explorer.exe 를하위프로세스로생성하는것을 확인할수가있었는데, 로드된항목에는존재하지가않는다. 또한 Explorer.exe 는 ixaobn.dll 을가지고있지만, 막상메모리를분석한결과에서는해당 dll 이로드되어 있지않다. 따라서프리패치파일에나타난정보만으로는구체적으로어떠한관련이 있는지단정짓기는힘들다. 3.4 Registry 분석해당파일을실행한뒤, 레지스트리에어떠한변화가있는지확인해보아야한다. 흔히악성코드들은레지스트리를이용하는데, 주로지속성유지를위하여레지스트리에등록한다. 이렇게레지스트리에등록된악성코드는서비스로서실행되거나, exe 파일자체로실행되게끔구성되는경우가많다. 분석을위해서는 Regshot 을이용해도비슷한결과를얻게될것이다. 여기선 2016-02-05 02:13:45 가량해당악성코드를실행하였다. 이렇게실행한뒤어느정도여유를두고확인하였다. REGA 를통해확인할경우시간대를통해검색이가능하다. 위의시간을기준으로이후에나타난레지스트리변화에대해기록된사항중특이한요소는아래의사항과같다. Key Last Write Time Key Path Run 2016-02-05 02:13:50 HKCU\Software\Microsoft\Windows\CurrentVersion\Run\ Value Value Type Value Data Xwozbpc REG_SZ %AppData%\Roaming\Microsoft\Ixaobnyx\ixaobny.exe 표 4. REGA
10 Malware Analysis 해당경로는악성코드가지속성을유지하기위하여빈번히사용되는경로이다. 해당경로에등록된파일은 PC 가시작될때자동으로실행되도록하는키이다. 여기서해당키에 xwozbpc 라는값의 ixaobny.exe 를확인할수가있다. 여기서파일은경로는최초실행된 6.exe 가존재하던 Desktop 이아닌 Ixaobnyx 라는것도놓치지말아야한다. 따라서해당악성코드를치료하고자할때, 해당경로의파일을삭제하며레지스트리에등록된키값도제거하여야한다. 3.5 Network 분석해당악성코드는다른곳과통신을진행하는것으로간주된다. 다만프로그램을실행시켰을때바로진행되는것이아니라는것이다. 어떠한경우에통신을진행하는지는확인할수가없었지만, WireShark 를통하여통신에대한 packet 은확인할수가있었다. 그림 3. WireShark 위의목적지와통신을주고받기전, 195.22.28.197 로부터암호화된 Application Data 를받아오는것을확인할수가있다. 이후통신을주고받은 IP 역시같은도메인에 등록된서버임을알수가있다. 위두번의통신모두 GET 을통해요청을한뒤이에 대해서버의응답을받은내용을확인할수가있다.
11 Malware Analysis 항목 내용 Inetnum 195.22.25.128 195.22.31.255 Netname ESOTERICA Descr Lisboa, Portugal Country Portugal Admin-c ES06-RIPE Status Assigned PA Created 2007-01-04T18:09:50Z Last-Modified 2007-01-04T18:09:50Z 표 5. Whois 해당서버에대한정보는 whois 를통해확인할수가있다. Whois 를통해해당 IP 주소를검색하면등록된도메인과할당받은 IP 주소범위에대하여알수있을뿐만 아니라국적, 이름등에대해정보를얻을수가있다. 이에대한결과는위의표와같다.
12 Malware Analysis 4 정적분석정적분석에서는동적분석을통해얻은행위들에대하여좀더세부적으로살펴볼것이다. 이를위해 Rekall 과 Volatility 등을통한메모리분석기법과 OllyDBG 와 IDA 등의디스어셈블러및디버거를통해분석을진행한다. 이러한각분석과정에대하여살펴보자. 4.1 Memory 분석메모리분석과정에사용된메모리는 ixaobny.exe 와 cmd.exe 가종료된후, explorer.exe 만이남아실행되고있는시점의메모리를이용하였다. 우선 cmd 를통해 어떠한명령이사용되었는지확인할수가있다. 아래의그림을보자. 출력된결과를통해 conhost.exe 에 ping.exe 와 cmd.exe 가핸들로되어실행되었다는것을확인할수가 있다. 이뿐만 아니라 덤프된 내용을 통해 ping 명령어가 Localhost(127.0.0.1) 에 보내진다는것을알수있다. 그림 4. Rekall - Consolescan 그렇다면이제 3.2 와 3.3 에서언급되었던 ixaobn.dll 에대하여알아보자. Prefetch 파일을분석하므로얻었던결과에따르면 Explorer.exe 프로세스가 ixaobn.dll 과관련되어 있다는것을알수가있다. 메모리를분석하는데있어특정프로세스가어떠한 DLL 을가지고있는지확인할수가있다. Volatility 와 Rekall 모두 dlllist Plugin 을통해 PID 를지정해주면쉽게결과를확인할수가있다. 아래의표를보자. 해당플러그인의결과로최초 explorer.exe 에대한 DLL List 임을알수가있다. 여기서특이한점이있다면바로 ixaobn.dll 이존재하고있지않다는것이다.
13 Malware Analysis Explorer.exe pid : 2004 Base Size Load Reason/Count Path 0x00150000 0x281000 65535 C:\Widonws\SysWOW64\explorer.exe 0x773c0000 0x1a9000 65535 C:\Windows\System32\ntdll.dll 0x74340000 0x3f000 3 C:\Windows\System32\wow64.dll 0x742e0000 0x5c000 1 C:\Windows\System32\wow64win.dll 0x74fd0000 0x8000 1 C:\Windows\System32\wow64cpu.dll 표 6. Rekall - dlllist 이럴경우몇가지예상해볼수있다. Ixaobny.exe 를통해 explorer.exe 가생성될때 ixaobn.dll 이로드된후해당명령어를실행, 또는바이너리를다른곳에기록한후 FreeLibrary 를통해해당 DLL 을언로드했을수도있다는가능성이존재한다. 아래의그림을보자. 그림 5. Rekall - malfind 이는 malfind 를통한결과로, 코드가삽입된부분을출력해준다. 0x400000 과 0x80000 두곳에 MZ 헤더가존재하고있다. 여기서해당 explorer.exe 를추출하여확인해보면해당 Image Base 는이두곳이아닌 0x150000 임을알수가있다. 이두곳에대한파일이나핸들이존재하지않으므로, 코드를삽입후언로드했을가능성은무시할수없다. 4.2 Disassembly 분석디버거를통해분석을진행함에있어서 Anti-Debugging 기법에의하여분석중인프로세스가계속종료되거나멈추는현상이나타났다. 해당지점부터는 IDA 를통해해당프로세스의구조를파악하는것을위주로분석하였다.
14 Malware Analysis 최초실행한 6.exe 를디버거를통해분석을진행하였다. 해당악성코드는바이너리를가지고있으면서이를압축하여숨겨놓고있는상태이다. 따라서프로세스가진행되면서이러한바이너리가압축해제되는과정을거쳐원래의바이너리로나타나게된다. 아래의그림을보자. 위에있는바이너리가압축이해제되기전의데이터이다. MZ 헤더로시작하여새로운 PE 파일임을알수가있다. 0x70002684 의 CALL EAX 를통해 RtlDcompressBuffer API 를호출하여하단의바이너리로다시생성된다. 해당바이너리는이후에 LogonCLI 라는이름으로메모리에올라오게된다. 그림 6. HxD 이렇게바이너리를생성한이후에임시적인공간을 VirtualAlloc API 를통해생성한 뒤해당명령어들은 6.exe 의바이너리를제거하고해당부분에 LogonCLI 의데이터를 기록한다. 즉, 6.exe 의내용이사라지고위에나타난바이너리 (LogonCLI) 가그위치에 기록된다는것이다. 이후 LogonCLI 의구조분석을통해크기를구한뒤, 내용을 추출하면추가적인분석에도움이된다. 단, 이렇게바이너리가기록되는작업중간에기록되어야할바이트가아닌다른값이중간에기록된다. 분명히반복문을통해해당지점에서읽은바이너리를목적지에기록하는부분임에도불구하고아래의그림과같이차이를보인다. 0x55 를읽었지만해 0xCC(INT 3) 이기록되는등, 본래의코드가손상되어나타난다. 따라서이러한부분은반복문이종료된뒤, 차이가있는바이트를직접수동으로올바르게써주어야한다.
15 Malware Analysis 그림 7. HxD 이렇게총 2 번의바이너리기록이이루어진다. 6.exe 의내용이대체된후중요한다시기록된 6.exe 의메인함수는 0x70002162 에위치해있다. 원래이부분에서는어떠한함수에어떤인자가들어가는지등을확인하므로악성코드의동작에대하여자세하게확인하는것이필요하지만, 본인이파악하지못한안티디버깅기법으로인해정상적인분석은불가능하였다. 대신주요 4 가지기능에대하여알아보자. 새로운메인함수에서는주요한기능을하는방식은 4 가지로볼수가있다. 여러 조건문을통해 4 가지이상의경우로나뉘어지지만, 해당프로세스가별다른기능을하지 않거나종료되는것또한포함되어있기때문에이 4 가지에대해서만살펴볼것이다. 그림 8. IDA (1) 첫번째기능은 ShellExecute API 로가는루프이다. 해당 ShellExecute 에반환값이 5 일경우 Sleep 을호출하는함수로진행한다음, Sleep 이끝나고다시 ShellExecute API 를호출한다. 여기서반환값이 5 인지비교하는데, ShellExecute API 는함수가
16 Malware Analysis 성공적으로진행된경우 32 이상의값을반환한다. 5 가반환이된다는것은 Access Denied 가발생한것으로, 접근이거부됐을땐일정시간이지난뒤다시 ShellExecute 함수를호출한다는것이다. 그림 9. IDA (2) 나머지 3 가지기능이나타나있는부분이다. 주석이존재하는부분은해당주소로 Step Into 하여추가로분석했을때확인할수있는 API 들을기록한것이다. 여기서 특이한점이있다면, 가운데에위치한박스를보자. PUSH 를통해 Offset Parameter 를 Stack 에넣는것을확인할수가있다. PUSH 다음에 CreateProc_WriteMem(skip) 을 호출하는데, 해당부분에는 CreateProcess 가존재하고있다. 따라서새로운프로세스가 생성될때해당 Parameter 부분이크게관련있을것이라볼수있다. Paremeter 에서는주석에나타낸바와같이서비스를생성하고이를시작한다. 하지만이를확인하고동적분석의방법을통해서비스목록에변화가있는지비교해보았을때, 서비스목록이변화하지않았다. 따라서구체적으로어떠한서비스가생성되는지이름은알수없지만, 해당서비스가실행되기전 Dnscache 라는서비스가실행이되어야한다는것은확인할수가있다. 그림 10. IDA (3)
17 Malware Analysis 이러한 Parameter 가 Stack 에들어가는것을확인하였다. 그렇다면그뒤에 호출하는 CreateProc_WriteMem(skip) 을보자. 해당부분의함수를보면크게 3 가지가 있다. CreateProcess, WriteProcessMemory, ResumeThread 이다. 이 3 개의함수가같은 곳에위치한다는것은충분히악의적인행위를할여지가크다는것이다. 아래의그림을보자. CreateProcess 의 CreationFlags 가 CREATE_SUSPENDED 로되어 있는것을확인할수가있다. 이는프로세스를생성하기는하지만, 바로실행하지않고 정지상태에놓는것이다. 이렇게정지된프로세스는 ResumeThread API 를통해 재개시켜주어야만정상적으로프로세스가진행된다. 그림 11. IDA (4) 우선프로세스가생성된후중지상태에들어간다음, WriteProcessMemory API 가사용된다. 해당 API 는지정된프로세스의메모리에버퍼를기록하는 API 이다. 어떠한내용이기록되는지확인할수는없지만 nsize 가 5 라는것임을통해, 기록되는버퍼의크기가 5 Bytes 라는것을알수가있다. 이렇게버퍼가기록된후 ResumeThread 를통해프로세스가재개된다는것을알수가있다. 이제다시그림 IDA (2) 를확인하자. 두번째기능에대하여위에서살펴보았다. 그렇다면이제좌측에존재하고있는 FileCD_Shell_Time2(skip) 에대하여알아보자. 해당 부분에서는파일에대하여복사, 제거함수등이있으며, 여기에도 ShellExecute 가 사용된다. 뿐만아니라, 컴퓨터의이름과로컬시간, 시스템시간을반환하는 API 들도 사용된다. 이를통해해당악성코드를실행한 PC 의정보를수집한다고볼수있다.
18 Malware Analysis 하지만여기서가장중요한함수는바로 CreateProcessAsUser API 이다. 우측의그림과같이 해당 API 가사용된다. 이 API 역시프로세스를 생성하는함수이다. 다만차이점이있다면현재로그온된사용자계정으로프로세스가실해오디는것이아니라지정된특정계정으로프로세스를구동하는 API 이다. 여기서인자로사용된 Creation Flag 를보자. 해당값이 0x4000000 이라는것을확인할수가있다. 해당값은 Default Error Mode 로, 해당프로세스는기본에러모드로 생성된다. 그림 12. IDA (5) 이렇게프로세스가생성할수있는 API 가총 2 개라는것을알수가있었다. 어떠한프로세스가생성되는지는안티디버깅에의하여확인할수가없었지만, 어떠한함수들을가지고 6.exe 가진행되는지알수있었다. 6.exe 의새로운메인함수에서큰카테고리 4 가지중 2 곳이프로세스의생성과관련이있었으며, 다른두가지는외부프로그램을실행시키는쉘명령어와파일을복사하기위한 API 임을확인하였다. 악성코드가어떠한구조도진행되는지는확인하였지만, 그기능에대해서는확인하지못하였음을다시한번이야기한다. 따라서이후안티디버깅을우회하여, 분석을진행할수있게된다면프로세스가생성될때어떠한버퍼를가지고실행되는지확인하면쉽게해당악성코드에대하여이해할수있을것이다.