API 순차적특징을이용한악성코드변종분류기법 한경수 1), 김인경2), 임을규3) Malware Family Classification Method using API Sequential Characteristic Kyoung-Soo Han 1), In-Kyoung Kim 2), Eul-Gyu Im 3) 요약 공격자들은금전적인이득을목적으로악성코드를제작하여유포시킴으로써사용자들의컴퓨터를감염시키고 ID 및패스워드, 메일주소, 휴대폰번호, 금융정보와같은각종개인정보들을감염된사용자들의컴퓨터로부터유출시킨다. 또한감염된사용자들의컴퓨터를봇넷으로구성하여 DDoS 공격, 스팸발송등의공격을수행한다. 악성코드자동생성도구는공격자들사이에보편화되어신종및변종악성코드를쉽게생성할수있게해준다. 이로인해국내외에서새롭게발견되는악성코드의수는지속적으로증가하는추세이다. 그러나악성코드에대한대응방법은아직까지대부분악성코드를수동으로분석하고시그니처를생성하는방법으로대응하고있어악성코드의전파속도에뒤처지고있다. 이에따라악성코드에의한직접적인피해및 2차적인피해는급속도로확산되고있으므로악성코드에대한신속한분석과대응이필요하다. 본논문에서는악성코드에대한정적분석을수행하여얻을수있는 API 리스트의순차적특징을이용하여보다빠른악성코드변종분류방법을제안하고, 각종악성코드샘플을대상으로수행한실험및결과에대하여기술한다. 핵심어 : 악성코드, 악성코드변종분류 Abstract Malware is generated to gain profit by attackers, and it infects many user's computers. As a result, attackers can acquire private information such as ID, password, e-mail address, cell-phone number and banking account from infected machines. Moreover, infected machines are used for cyber-attacks such as DDoS attack, spam, and so on. The number of new malware discovered everyday is increasing continuously because the automated tools allow attackers to generate the new malware or their variants easily. However, new countermeasures against the malware are invented at lower rate than the propagation rate of the malware. Therefore, rapid malware analysis method is required in order to mitigate the infection rate and secondary damage to the users. In this paper, we proposed a malware variants classification method using sequential characteristics of API list, and described an experiment result with some malware samples. Keywords : Malware, Malware Variants Classification 접수일(2011 년02월06 일), 심사의뢰일 (2011년02 월07 일), 심사완료일 (1 차:2011 년02월16 일, 2 차:2011 년02월28 일) 게재일(2011 년04월30 일) 1 133-791 서울시성동구행당1동 17 한양대학교전자컴퓨터통신공학과. email: 1hanasun@hanyang.ac.kr 2 133-791 서울시성동구행당1동 17 한양대학교전자컴퓨터통신공학과. email: blackangel@hanyang.ac.kr 3 교신저자서울시성동구행당동한양대학교컴퓨터공학부교수 ( ) 133-791 1 17. email: imeg@hanyang.ac.kr 319
API 순차적특징을이용한악성코드변종분류기법 1. 서론 전세계적으로컴퓨터와인터넷의보급이확산됨에따라정보네트워크의구축이더욱광범위 해지고있다. 그러나이와더불어바이러스나웜, 트로이목마와같은악성코드역시증가하고있으 며, 사용자들의컴퓨터를감염시켜서각종정보를유출하거나또다른시스템을공격하는데사용 하는등그부작용도꾸준히증가하고있다. 또한이렇게악성코드에감염된사용자들의컴퓨터가 연결되어거대한봇넷(Botnet) 을형성하고더욱광범위한사이버공격에이용된다[1-2]. 공격자들은 금전적인이득을목적으로악성코드를제작하여유포시킴으로써사용자들의컴퓨터를감염시킨다. 이때공격자들은보편화된악성코드자동생성도구와기존의악성코드를이용하여손쉽게신종 및변종악성코드를제작하기때문에이로인해매일새롭게발견되는악성코드의수와종류는기 하급수적으로증가하고있다. 그러나악성코드에대한대응방법은대부분수동으로악성코드를 분석하고시그니처를생성함으로써대응하고있어악성코드의전파속도에뒤처지고있다. 이에 따라악성코드에의한직접적인피해및 대한신속한대응이필요하다. 2차적인피해는급속도로확산되고있으므로악성코드에 본논문에서는악성코드의변종을빠르게분류하기위해정적분석을통해얻을수있는 API 순차적특징을이용한시스템을제안한다. 이는악성코드가윈도우(Windows) 에서실행되기위해 서실행가능한파일포맷인 PE(Portable Executable) 형식을가지고있기때문에 PE 파일에대한 정적분석을수행하여악성코드에삽입된 API 리스트를분리하고, 해당 API 리스트에나타난순 차적특징을비교하는알고리즘을통해유사도를계산함으로써어떤악성코드의변종인지분류하 는방법이다. 실험에서는트로이목마악성코드의세부분류인 Trojan-DDoS와 Trojan-Spy 샘플들을 대상으로 API 순차적특징의유사도를비교하여기술한다. 본논문의구성은다음과같다. 2장에서는 API와악성코드의분석방법과관련된배경지식에대 하여설명하고, 3 장에서는악성코드의탐지및분류방법에대한관련연구를기술한다. 4장에서는 API 리스트의순차적특징을이용하여악성코드변종을분류하는기법을제안하고, 5장에서는제 안한기법을바탕으로실험한결과를기술한다. 마지막으로 6장에서는결론과향후연구방향에 대하여제시하고자한다. 2. 배경지식 2.1. API API(Application Programming Interfaces) 란응용프로그램에서사용할수있도록운영체제나프 로그래밍언어가제공하는기능을제어할수있도록만든인터페이스를의미하며, 다른응용프로 그램과상호작용을하게해주는것이다[3-4]. 320 또한윈도우에서도마찬가지로응용프로그램을위한
함수들을 Windows API 로제공된다. Windows API 들은동적라이브러리(DLL) 에포함되어윈도우 프로그래밍시사용할수있게해주며, 사용자모드와커널모드에서동작한다. 특히커널모드에서 동작하는 API는 Native API 라부른다[5]. [ 표 1] 은윈도우사용자모드의주요 DLL과포함된 API 의예를나타낸것이다. [ 표 1] 윈도우사용자모드의주요 DLL과 API의예 [Table 1] The Example of DLLs and APIs in User Mode of Windows KERNEL32.DLL USER32.DLL GDI32.DLL 설명 윈도우커널이제공하는모든작업처리메모리관리파일입출력작업관리등,, 사용자인터페이스모든윈도우조작로직처리 그래픽장치인터페이스화면및프린터에텍스트와그래픽출력 예 LoadLibraryA, GetCurrentProcess, ExitProcess, TerminateProcess, GetFileType, CreateFileA, WriteFile 등 MessageBoxA, CreateWindowExA, SetCapture, SendMessageA 등 DeleteDC, SetTextColor, GetWindowOrgEx, GetTextMetricsA, GetTextExtentPointA 등 2.2. API 리스트추출방법 2.2.1. 커널후킹 커널후킹을이용한 API 리스트추출방법으로는 SSDT(System Service Descriptor Table) 후킹 이나 IDT(Interrupt Descriptor Table) 후킹등이존재하며, 주로 Native API에대한정보를얻기 위해사용된다. SSDT 후킹은커널모드에서서비스를받기위해필요한테이블내함수의메모리 주소를변경하거나테이블자체를프로그램내부메모리로리다이렉트함으로써사용된 Native API 의리스트를추출할수있다. IDT 후킹은인터럽트를처리하는데사용되는테이블을변경한다. 이때 IDT 내의인터럽트처리수로를변경하여특정인터럽트를후킹함으로써 Native API 정보를 추출한다 [5-7]. 2.2.2. IAT 분석 PE(Portable Executable) 파일포맷은윈도우운영체제로더가실행코드를관리하는데필요한 정보를캡슐화한데이터구조이다. 이는링크를위한동적라이브러리참조와 API Export 및 Import 테이블, 리소스관리데이터, 스레드로컬저장데이터를포함한다. 일반적으로 EXE 파일 을실행하게되면 Windows 운영체제로더가파일의구조를분석하고메모리에로드하여프로그 램의진입점으로들어가게하며, 로드하는동안파일내부의 Import 정보를통해필요한 DLL도 321
API 순차적특징을이용한악성코드변종분류기법 찾아메모리에로드한다. PE 파일에는.text,.data,.rdata,.idata,.edata 등의섹션들이포함되는데, 그중에서도.idata 섹션에는다른 DLL을통해사용할수있는 API들의테이블에관한정보가포 함된다..idata는 IMAGE_IMPORT_DESCRIPTOR 들로이루어져있고, 이는 IMAGE_IMPORT_BY_NAME 을가리키며, 이곳에사용될 API 이름과실행되면서할당되는주소가저장된다. 이러한 API 엔트 리포인트배열을 IAT(Import Address Table) 이라한다[6][8]. 결국응용프로그램이 API를이용하 려면해당 API 의주소를알아야하며, 이를저장하기위해서는 IAT(Import Address Tale) 를이용 하는것이다. 따라서 PE 파일을분석함으로써 IAT 를찾고, IAT로부터포함된 API 리스트를추출 할수있다. 본논문에서는이방법을사용하여악성코드의 API 리스트를추출한다. 3. 관련연구 3.1. 악성코드분석방법 악성코드를탐지하고분류하기위한분석방법으로는행위를분석하는동적분석방법과코드 를분석하는정적분석방법이존재한다. 동적분석은분석환경내에서악성코드를실행시킴으로 써수행되는악성행위및위험요소를실시간으로모니터링하고추적하는방법이다. 정적분석은 악성코드를실행하지않고구성요소들의연관성및호출관계등을분석함으로써악성코드의구 조와삽입된 DLL(Dynamic Link Library) 등을파악할수있으며, 소프트웨어역공학(Reverse Engineering) 에서주로사용된다[9-10]. 3.2. 동적분석기반의탐지및분류방법 동적분석을기반으로하는악성코드탐지기법은악성코드의행위에대한특징이필요하다. [10] 에서는실행압축의우회기법을이용한악성코드에대하여행위기반의탐지패턴을생성하 고, 신종및변종악성코드를탐지하는방법을제안하였다. 제안한방법은시스템의중요자원에 접근하려는 API를대상으로동적분석과정적분석을수행하여악성코드의행위및순차패턴의 통합과정을통해악성코드를동적으로탐지하기위한시그니처를생성하는방법을제안하였다. [11] 에서는그래프마이닝(Graph Mining) 과개념분석(Concept Analysis) 을이용하여특정악성 코드셋트에서나타날수있는행위에대한특징들을자동으로추출하는방법을제안하였다. 제안 한방법은행위가유사한악성코드들의하위셋트(Subset) 로분류하고, 각해당악성코드를대표할 수있는악성행위에대한그래프를구성하여클러스터링함으로써악성코드패밀리에대한함축적 행위(Significant Behavior) 로종합하는방법이다. [12] 에서는에뮬레이터를기반으로악성코드의행위를모니터링하여자동으로시스템콜인자와 반환값, 오류상태등의주요속성을기록하는 API Capture 를개발하였다. [13] 에서는 322
Metamorphic Generator 로부터생성된악성코드를탐지하기위해에뮬레이터를이용한동적모니 터링을기반으로악성코드에서의 API 콜을추적하고빈도수를측정하여 CAPI(Critical API) 을추 출함으로써시그니처를생성한다음통계학적방법으로 를분류하는방법을제안하였다. CAPI 비율간의차이를계산하고악성코드 3.3. 정적분석기반의탐지및분류방법 악성코드를특정시그니처로정의하기위해악성코드를분석하는방법중의하나로플로우차트 (Flow Chart) 혹은플로우그래프(Flow Graph) 를이용하는방법이존재한다. [14] 에서는바이너리 를분석하여도출된함수의호출흐름을시그니처로정의하고, 이를이용하여악성코드를탐지하 는방법을제안하였다. 이는악성코드에서시스템콜의호출관계를분석하여콜그래프(Call Graph) 로나타내고, 프로세스/ 메모리/ 소켓등 32개의시스템오브젝트에대한 Read/Write/Open/Close의네가지행위를하는 API 들로그룹화하여코드그래프(Code Graph) 로 단순화한후유사도를측정함으로써악성코드를탐지하는방법이다. [15] 에서는컨트롤플로우그 래프(Control Flow Graph) 를이용하여문자열(String) 형태의플로우그래프시그니처를생성하고 유사도를계산함으로써악성코드의변종을탐지할수있는시스템을제안하였다. [16] 에서는스크 립트악성코드를대상으로각코드의기능을파악하여컨트롤플로우에따른그래프와변수의사 용여부등코드의의존도에따라의존도그래프(Dependency Graph) 로나타내고, Hybrid Genetic Algorithm 을이용함으로써서브그래프의유사도를측정하여악성코드를탐지하는방법을제안하 였다. [17] 에서는 Metamorphic 악성코드의시스템콜및라이브러리함수호출을기반으로특정악성 행위를나타낼수있는코드조각에대한의미(Semantics) 나기능(Functionality) 을특징화함으로써 패턴을생성하는방법과유사도계산을통한코드패턴매칭방법을제안하였다. [18] 에서는 PE 파일의정적분석을기반으로 2 개의파일을비교하기위해함수리스트를벡터로나타내고, 함수 내의명령어빈도를기준으로내림차순정렬시킨후코사인유사도분석 (Cosine Similarity Analysis) 을통해유사도를측정하는방법을제안하였다. [19] 에서는 ClamAV[20] 를확장시켜빠른탐지와메모리를적게사용하는것에초점을맞추고, 이를위해서 Feed- Forward Bloom Filter(FFBF) 를사용하였다. 이는전체파일을 w 길이의슬라이 딩윈도우로스캔하고, 스캔된내용에대하여블룸필터를통해비트벡터(Bit Vector) 를생성한후 데이터베이스에존재하는기존악성코드의비트벡터와비교하여동일한값이포함되어있을경우 악성코드를탐지하는방법이다. 323
API 순차적특징을이용한악성코드변종분류기법 4. 제안하는방법 4.1. 개요 본논문에서는 PE 파일이실행될때필요한 DLL 및 API 정보를가진 IAT(Import Address Table) 로부터 API 리스트를추출하고, API의종류및순차적특징을이용하여악성코드를분류하 는방법을제안한다. 전체적인방법의흐름은 [ 그림 1] 과같다. 정적분석을통해추출된 [ 그림 1] 제안하는방법의전체흐름도 [Fig. 1] The Overview of Proposed Method API 리스트로부터유사도를측정하여두악성코드의유사성, 즉동일 한악성코드의변종여부를탐지하는방법은다음과같은단계를수행한다. 단계 1. 악성코드들로부터 API 리스트를추출한다. 일반적으로프로그램은내부에 IAT를포함하여 호출할 API 리스트를관리한다. 제안한방법은 IAT로부터해당악성코드의 API를추출하는 방법을사용한다. 단계 2. 악성코드가아닌정상적인프로그램으로부터자주포함되는 API의리스트를 DLL 별로저 장하여화이트리스트(White List) 를생성한다. 그리고악성코드로부터추출된 API 리스트에서 화이트리스트의 API 를제거한다. 324 단계 3. 화이트리스트의 API가제거된악성코드의 API 리스트와비교대상이되는 API 리스트에서
동일하게포함된 API 를분리한다. 즉, 양쪽 API 리스트에서동일하게포함된 API의순서를 특징으로하여두악성코드의유사성을계산한다. 4.2. API 추출 본논문에서악성코드로부터 API 리스트를추출하는방법은 2장의배경지식에서언급한바와 같이정적분석을통해 IAT를찾고내부에포함된 API 이름들을추출한다. 최근에는이러한방법 을자동으로찾아서보여주는 PE 분석도구들이존재하며, [ 그림 2] 는 PEview라는 PE 분석도구 를이용하여 IAT에포함된 API 를조회한결과이다. [ 그림 2] PEview를이용한 IAT 조회 [Fig. 2] IAT Check using PEview 4.3. 화이트리스트생성 본논문에서제안하는방법은유사한기능을가진프로그램, 즉악성코드변종의경우악성코드 가실행될때호출하여사용하는 API의종류나 IAT에포함된해당 API들의순서가유사할것이 라는가정에서출발한다. 그러나악성코드를실행함에있어서호출되는 API들은정상적인응용프 로그램에서도호출될수있다. [ 그림 3] 에나타낸것처럼악성코드나정상응용프로그램의기능이 비슷할경우실행을위해호출되기위한 API들이 IAT 에동일하게포함될수있다. 예를들면, [ 표 2] 와같이정상응용프로그램 Groove와악성코드 Trojan-Spy.Zapchast.f 및 Trojan-DDoS.Smurf.c에 325
API 순차적특징을이용한악성코드변종분류기법 는 GetProcAddress, GetCurrentProcess, TerminateProcess가 IAT에공통적으로포함되어있는것 을볼수있다. 따라서제안하는방법에서는이러한공통적인특성으로인한오판(False Positive) 을줄이기위해여러가지정상프로그램에서자주사용되는 API들을화이트리스트로작성함으로 써 [ 그림 4] 와같이필터링에이용하고, 비교대상이되는악성코드 API 리스트사이의유사도를 계산한다. [ 그림 3] 악성코드와정상응용프로그램에서사용되는 API [Fig. 3] APIs used in Malware and Benign Application [ 표 2] 정상응용프로그램과악성코드의 IAT에포함된 API의예 [Table 2] The Example APIs Included in Benign Application and Malware 정상응용프로그램 (Groove) Trojan-Spy.Zapchast.f Trojan-DDoS.Smurf.c APIs DeleteCriticalSection, InitializeCriticalSection, CloseHandle, GetCurrentThreadId CharNextW, CharPrevW, CoCreateInstance, Sleep, CreateProcess, VirtualProtect, GetCommandLineW, GetCurrentProcessId, GetModuleFileNameW, ( 중략) SetUnhandledExceptionFilt er, UnregisterClassA, WaitForSingleObject CallNextHookEx, CreateWindowExA, DefWindowProcA, EnterCriticalSection, ( 중략) TlsAlloc, TlsFree, TlsGetValue, TlsSetValue, UnhookWindowsHookEx CreateFileA, CreateFileMappingA, GetCurrentProcessId, GetEnvironmentVariableA, ( 중략) MapViewOfFile, UnmapViewOfFile ExitProcess, FlushFileBuffers, FreeEnvironmentStringsA, FreeEnvironmentStringsW, GetACP, GetCommandLineA, ( 중략) LoadLibraryA, MultiByteToWideChar, RtlUnwind, SetFilePointer, SetHandleCount, SetStdHandle, VirtualAlloc, VirtualFree, WideCharToMultiByte, WriteFile GetProcAddress, GetCurrentProcess, TerminateProcess 326
4.4. 유사도계산 악성코드의 IAT에포함된 API 리스트에서화이트리스트 API들을제거하고나면비교대상이 되는두개악성코드의 API 유사도계산을위해 API 들의교집합을추출한다. 본논문에서는단순 히교집합을추출하여유사도를계산하는것이목적이아니라해당 API가나타는순차적특징을 이용하여유사성계산하는방법을제안하는것이므로, [ 그림 4] 와같이기존의순서를유지하여교 집합을추출한다. [ 그림 4] 두개의악성코드 API 리스트에서교집합추출 [Fig. 4] The Intersection Extraction from 2 Malware API lists. 다음으로추출된교집합으로부터순차적특징을유지하여원본 를생성하며, 이를위한알고리즘은다음과같다. API 리스트의부분집합리스트 Algorithm: SumOfSameSequence 1. SumOfSameSequence(String List A, B) 2. i, j, pre_i, pre_j, next_i, next_j 0 3. new String List A, B 4. if( A.length == 1) 5. return 0 6. end if 7. 8. while( i < A.length ) 9. while( j < B.length) 10. if( A[i] == B[j] ) 11. i i+1 12. pre_i i 13. j j+1 14. while( pre_j < j) 15. B [next_j] B[pre_j] 16. next_j next_j+1 17. pre_j pre_j+1 18. end while 19. pre_j j 20. go to line 4 21. end if 22. else 23. j j+1 24. end else 25. end while 26. A [next_i] A[i] 27. i i+1 28. j pre_j 29. next_i next_i+1 30. end while 31. 32. count A.length A.length 33. 34. if(count == 1) 35. return SumOfSameSequence(A,B ) 36. end if 37. else 38. return count + SumOfSameSequence(A,B ) 39. end else 327
API 순차적특징을이용한악성코드변종분류기법 제안한알고리즘에서는먼저두개의악성코드 API 리스트의순차적특성을파악하기위해리 스트 A를기준으로동일한순서로나타나는 API 들을원본리스트에서제거한다. [ 그림 4] 에서보 인 API 리스트를그예로설명하면, 동일한순서로나타나는 API들을리스트 A와리스트 B에서 모두제거하고그개수를카운트한다. API#4와 API#5는 API#3이후로나타났지만리스트 B에서는 그보다이전에나타났으므로리스트에남게되고그다음순서로나타난 API#6과 API#7을리스 트에서제거하게된다. 새로운리스트 A' 과 B' 에제거되지않는 API를기록하는과정으로표현하 면다음과같다. [ 그림 5] 에서는동일한순서로나타난 API를제거한리스트 A', B' 를생성하고, [ 그림 6] 과같이생성된리스트에동일한알고리즘을재귀적으로적용하여전체교집합리스트에 서동일한순서로나타난 API 의총합을계산한다. [ 그림 5] API 리스트에알고리즘을적용한결과 [Fig. 5] Applied Result of Algorithm for API Lists [ 그림 6] 재귀적으로알고리즘을적용한결과 [Fig. 6] Recursively Applied Result of Algorithm 328
제안한알고리즘을통해동일한순서를가진 API 하위집합의합을계산한후, 하위집합의크 기와전체 API 리스트의합집합과의비율을계산함으로써유사도를판단한다. 이를유사도계산 수식으로표현하면수식 (1) 과같다. (1) X : API List Set / n(x) : # of API List Set X / S(X,Y) : Same Sequence Subset of X,Y 제안한방법은단순히교집합으로유사도를계산하는것이아니라, 동일하게나타나는 API의순 차적특징을반영함으로써더정확한유사도계산결과를기대할수있다. 또한부분적인합을이 용하지만 LCSS(Longest Common Sub-Sequence) 가아닌동일한순서로나타나는 API를전부추출 하여유사도계산에사용하기때문에 성코드로분류할수있다. API의순서변경으로생성된악성코드의변종을동일한악 5. 실험및결과 5.1. 실험환경및데이터 본논문에서제안한방법및알고리즘을 JAVA 개발환경인 Eclipse 를이용하여구현하였다. 또 한실험을위해서는 VX Heavens[21] 으로부터악성코드샘플을선택적으로수집하였다. 수집한악 성코드는윈도우상에서실행될수있는트로이목마(Trojan) 이며, 기능적으로분류했을때각각 Trojan-DDoS 125개와 Trojan-Spy 420 개이다. 각악성코드샘플의진단명은 Kaspersky 안티바이러 스의진단명을따른다. 수집한악성코드샘플들로부터 API 리스트를추출하고, 구현한프로그램을 통해화이트리스트를적용한 API 리스트의순차적특징에대하여유사도를계산하였다. 5.2. 화이트리스트 본논문에서제안한방법은보다정확한유사도계산및오버헤드감소를위해정상응용프로 그램들에서나타날수있는 API 리스트를정리하여화이트리스트로작성한다. [ 표 3] 은실험에앞 서화이트리스트를추출하기위해사용한정상프로그램들과이를통해작성된화이트리스트이다. 이때화이트리스트내에존재하는 API는정상응용프로그램들에서 5번이상 IAT에포함된것들만 필터링하였다. 329
API 순차적특징을이용한악성코드변종분류기법 [ 표 3] 정상응용프로그램기반의화이트리스트작성 [Table 3] White-list Extraction based on Benign Applications 정상프로그램 Mspaint, NateOn, Notepad, Hwp, Calcul, Explorer, itunes, utorrent, Excel, Groove, AlZip, AlFtp, Everything, Acrobat 화이트리스트 BitBlt, CloseHandle, CoCreateInstance, CoTaskMemFree, DeleteCriticalSection, DeleteDC, DeleteObject, EnableWindow, EnterCriticalSection, exit, FindClose, FreeLibrary, GetACP, GetClientRect, GetCurrentProcess, GetCurrentProcessId, GetCurrentThreadId, GetCursorPos, GetDC, GetDeviceCaps, GetFocus, GetLastError, GetModuleFileNameW, GetModuleHandleA, GetModuleHandleW, GetParent, GetProcAddress, GetProcessHeap, GetSubMenu, GetSystemMenu, GetSystemMetrics, GetSystemTimeAsFileTime, GetTickCount, GetVersionExW, GlobalAlloc, GlobalFree, GlobalLock, GlobalUnlock, HeapAlloc, HeapFree, InitializeCriticalSection, InterlockedCompareExchange, InterlockedDecrement, InterlockedExchange, InterlockedIncrement, InvalidateRect, IsWindowVisible, LeaveCriticalSection, LoadLibraryA, LoadLibraryW, LocalAlloc, LocalFree, lstrlenw, memcpy, MessageBoxW, MulDiv, MultiByteToWideChar, PostQuitMessage, QueryPerformanceCounter, RaiseException, ReadFile, RegCloseKey, RegOpenKeyExW, RegQueryValueExW, ReleaseDC, ScreenToClient, SelectObject, SetActiveWindow, SetCursor, SetErrorMode, SetForegroundWindow, SetMapMode, SetUnhandledExceptionFilter, SetViewportExtEx, SetWindowPos, Sleep, TerminateProcess, UnhandledExceptionFilter, UpdateWindow, WideCharToMultiByte, WriteFile, SetLastError, VirtualAlloc, VirtualFree, GetCommandLineW 5.3. 악성코드유사도계산결과 실험에서는알고리즘을구현한프로그램을이용하여 Trojan-DDoS와 Trojan-Spy 각각의샘플들 에대하여유사도를계산하였다. 실험방법은같은패밀리내에포함되는악성코드샘플들의유사 도를계산하고, 다른패밀리내의악성코드샘플들사이의유사도를계산한다. [ 표 4] 는 Trojan-Spy의각 Zapchast, GhostSpy, PCSpy 패밀리샘플들에대하여유사도를계산한 결과를나타낸것이다. 같은패밀리내에포함된샘플들사이의유사도는약 0.4 이상이며, 같은 Trojan-Spy 라하더라도다른패밀리내에포함된샘플들사이의유사도는그이하로나타나는것 을확인할수있다. 330
[ 표 4] Trojan-Spy 악성코드샘플들사이의유사도 [Table 4] Similarity between Trojan-Spy Samples Trojan -Spy.Zapchast.GhostSpy..PCSpy Trojan-Spy.Zapchast.GhostSpy..PCSpy.b.f.g.i.52.40.b.c.d.b 1.000 0.414 0.414 0.414 0.171 0.207 0.071 0.060 0.065.f 0.414 1.000 0.414 0.414 0.161 0.232 0.057 0.070 0.068.g 0.414 0.414 1.000 0.414 0.161 0.232 0.057 0.070 0.068.i 0.414 0.414 0.414 1.000 0.161 0.232 0.057 0.070 0.068.52 0.171 0.161 0.161 0.161 1.000 0.488 0.194 0.172 0.177.40 0.207 0.232 0.232 0.232 0.488 1.000 0.187 0.111 0.115.b 0.071 0.057 0.057 0.057 0.194 0.187 1.000 0.404 0.414.c 0.060 0.070 0.070 0.070 0.172 0.111 0.404 1.000 0.965.d 0.065 0.068 0.068 0.068 0.177 0.115 0.414 0.965 1.000 [ 표 5] 는 Trojan-DDoS의각 Desex, Delf, Boxed 패밀리샘플들에대한유사도계산결과를나타 낸것이다. Desex 및 Boxed 의경우높은유사도계산값이나타났으나, Delf의경우그값이비교 적작게나타났다. 이는악성코드제작자가해당악성코드의변종을제작하면서동일한기능을수 행하는다른 API 를사용하도록악성코드를업그레이드한것으로판단된다. [ 표 5] Trojan-DDoS 악성코드샘플들사이의유사도 [Table 5] Similarity between Trojan-DDoS Samples Troja n-dd os.desex.delf.boxed Trojan-DDoS.Desex.Delf.Boxed.a.b.e.i.a.j.a 1.000 0.625 0.118 0.032 0.042 0.036.b 0.625 1.000 0.056 0.000 0.041 0.071.e 0.118 0.056 1.000 0.278 0.130 0.120.i 0.032 0.000 0.278 1.000 0.117 0.120.a 0.042 0.041 0.130 0.117 1.000 0.811.j 0.036 0.071 0.120 0.120 0.811 1.000 [ 표 6] 은 Trojan-Spy와 Trojan-DDoS 사이의각악성코드샘플들에대한유사도계산결과이다. Trojan-DDoS.Delf를제외하고같은패밀리내에포함되는악성코드샘플들사이의유사도는 0.4 이상을유지하고클래스및패밀리가다른경우유사도값이더작다. 여기서 Trojan-Spy.GhostSpy와 Trojan-DDoS.Delf, 그리고 Trojan-Spy.Zapchast와 Trojan-DDoS.Boxed 사이 의유사도가높게나타난것을볼수있다. 이는클래스와패밀리가다르게분류되어있더라도파 일및레지스트리조작, 프로세스생성또는종료와같이악성코드가감염된시스템을조작하는데 필요한 API 가유사하게포함되었기때문이라고할수있다. 331
API 순차적특징을이용한악성코드변종분류기법 [ 표 6] Trojan-Spy 및 Trojan-DDoS 악성코드샘플들사이의유사도 [Table 6] Similarity between Trojan-Spy and Trojan-DDoS Samples Trojan -Spy Trojan -DDoS.Zapchast.GhostSpy.PCSpy.Desex.Delf.Boxed Trojan-Spy Trojan-DDoS.Zapchast.GhostSpy.PCSpy.Desex.Delf.Boxed.g.i.52.40.b.c.a.b.e.i.a.j.g 1.000 0.414 0.161 0.232 0.057 0.070 0.068 0.087 0.190 0.110 0.328 0.295.i 0.414 1.000 0.161 0.232 0.057 0.070 0.068 0.087 0.190 0.110 0.328 0.295.52 0.161 0.161 1.000 0.488 0.194 0.172 0.045 0.056 0.214 0.400 0.092 0.103.40 0.232 0.232 0.488 1.000 0.187 0.111 0.091 0.089 0.396 0.342 0.100 0.093.b 0.057 0.057 0.194 0.187 1.000 0.404 0.032 0.016 0.140 0.173 0.050 0.048.c 0.070 0.070 0.172 0.111 0.404 1.000 0.014 0.014 0.069 0.150 0.036 0.041.a 0.068 0.068 0.045 0.091 0.032 0.014 1.000 0.625 0.118 0.032 0.042 0.036.b 0.087 0.087 0.056 0.089 0.016 0.014 0.625 1.000 0.056 0.000 0.041 0.071.e 0.190 0.190 0.214 0.396 0.140 0.069 0.118 0.056 1.000 0.278 0.130 0.120.i 0.110 0.110 0.400 0.342 0.173 0.150 0.032 0.000 0.278 1.000 0.117 0.120.a 0.328 0.328 0.092 0.100 0.050 0.036 0.042 0.041 0.130 0.117 1.000 0.811.j 0.295 0.295 0.103 0.093 0.048 0.041 0.036 0.071 0.120 0.120 0.811 1.000 [ 그림 7] 은악성코드의 IAT에포함된 API들을단순히합집합에대한교집합비율로유사도를 계산한결과와, 본논문에서제안한방법을통해유사도를계산한결과에대하여임계치 (Threshold) 설정값에따라발생하는긍정오류(False Positive) 비율을비교한그래프이다. 임계치 를 0.4로설정할경우제안한방법에서나타나는긍정오류비율은 0.074 로, 이는합집합에대한 교집합비율로계산했을경우보다낮게나타나는것을확인할수있다. 332 [ 그림 7] False Positive 비율비교 [Fig. 7] False Positive Rate
5. 결론및향후연구 본논문에서는악성코드 PE 파일의 IAT에포함된 API 리스트의순차적특징을이용하여악성 코드변종을분류할수있는방법을제안하였다. 제안한방법은정상응용프로그램들에서나타날 수있는 API 리스트를화이트리스트로정리하고, 악성코드간의유사도를계산할때이를제거함 으로써오버헤드감소및보다정확한유사도를계산한다. 제안한방법및유사도계산알고리즘 을구현하고, 수집한 Trojan-Spy 및 Trojan-DDoS 악성코드샘플들에대하여실험을진행하였다. 그결과같은패밀리내에포함되는샘플들사이의유사도는약 0.4 이상의유사도를보였으며, 임 계치를 0.4~0.2 사이로설정했을때의긍정오류비율을계산한결과는 0.074~0.160 사이의값을 보였다. 그러나모든클래스의악성코드가아닌 2가지클래스의트로이목마악성코드샘플을대상 으로실험을진행하였기때문에향후다양한클래스의악성코드샘플들을대상으로제안한방법을 적용하여알고리즘을보완함으로써보다개선된악성코드분류방법을연구하고자한다. 333
API 순차적특징을이용한악성코드변종분류기법 참고문헌 334 [1] D. Barroso, Botnets-The Silent Threat, ENSIA Position Paper, no. 3, pp. 1-9, November 2007. [2] 한경수, 임광혁, 임을규, 허니넷을이용한 P2P 기반 Storm 봇넷의트래픽분석, 정보보호학회논문지, 제19권제4 호, pp. 51-61, 2009년 8 월. [3] Charles Petzold, Programming Microsoft Windows 5th Edition, Microsoft Press, 2002. [4] 강태우, 조재익, 정만현, 문종섭, API call 의단계별복합분석을통한악성코드탐지, 정보보호학회논문지, 제17권제6 호, pp. 89-98, 2007년 12 월. [5] 권오철, 배성재, 조재익, 문종섭, Native API 빈도기반의퍼지군집화를이용한악성코드재그룹화기법연구, 정보보호학회논문지, 제18권제6 호, pp. 115-127, 2008년 12 월. [6] Greg Hoglund, James Butler, Rootkits: Subverting the Windows Kernel, Pearson Education, Inc, 2006. [7] 김완경, 소우영, 윈도우 XP 커널기반 API 후킹탐지도구설계및개발, 보안공학연구논문지, 제7권제4 호, pp. 385-397, 2010년 8 월. [8] 김성우, 해킹파괴의광학개정판, 와이미디어, 2006. [9] 한경수, 신윤호, 임을규, 스팸메일로전파되는악성코드의분석및대응프레임워크, 보안공학연구논문지, 제7권제4 호, pp. 363-383, 2010년 8 월. [10] 박남열, 김용민, 노봉남, 우회기법을이용하는악성코드행위기반탐지방법, 정보보호학회논문지, 제16권제3 호, pp. 17-28, 2006년 6 월. [11] M. Fredrikson, S. Jha, M. Christodorescu, R. Sailer, and X. Yan, Synthesizing Near-Optimal Malware Specifications from Suspicious Behaviors, Proceedings of the 2010 IEEE Symposium on Security and Privacy, pp. 45-60, November 2010. [12] Q. Miao, Y. Wang, Y. Cao, X. Zhang, and Z. Liu, APICapture - a Tool for Monitoring the Behavior of Malware, Proceedings of the 3rd International Conference on Advanced Computer Theory and Engineering, pp. 390-394, August 2010 [13] V. P. Nair, H. Jain, Y. K. Golecha, M. S. Gaur, and V. Laxmi, MEDUSA: MEtamorphic malware Dynamic analysis Using Signature from API, Proceedings of the 3rd International Conference on Security of Information and Networks, September 2010. [14] J. Lee, K. Jeong, and H. Lee, Detecting Metamorphic Malwares using Code Graphs, Proceedings of the 2010 ACM Symposium on Applied Computing, pp. 1970-1977, March 2010. [15] S. Cesare, and Y. Xiang, A Fast Flowgraph Based Classification System for Packed and Polymorphic Malware on the Endhost, Proceedings of the 24th IEEE International Conference on Advanced Information Networking and Applications, pp. 721-728, April 2010. [16] K. Kim, and B. Moon, Malware Detection based on Dependency Graph using Hybrid Genetic Algorithm, Proceedings of the 12th Annual Conference on Genetic and Evolutionary Computation, pp. 1211-1218, July 2010.
[17] Q. Zhang, and D. S. Reeves, MetaAware: Identifying Metamorphic Malware, Proceedings of the 23rd Annual Computer Security Applications Conference, pp. 411-420, September 2007. [18] A. Karnik, S. Goswami, and R. Guha, Detecting Obfuscated Viruses Using Cosine Similarity Analysis, Proceedings of the 1th Asia International Conference on Modelling & Simulation, pp. 165-170, March 2007. [19] SK. Cha, I. Moraru, J. Jang, J. Truelove, D. Brumley, and D. G. Andersen, SplitScreen: Enabling Efficient, Distributed Malware Detection, Proceedings of the 7th USENIX Conference on Networked Systems Design and Implementation, April 2010. [20] ClamAV, http://www.clamav.net/ [21] VX Heavens, http://vx.netlux.org/ 한경수 (Kyoung-Soo Han) 저자소개 2008 년상지대학교컴퓨터정보공학부학사 2010 년한양대학교전자컴퓨터통신공학과석사 2011년 4월현재한양대학교전자컴퓨터통신공학과박사과정 관심분야 : 악성코드분석, 네트워크보안, 정보보호 김인경 (In-Kyoung Kim) 2010 년한양대학교컴퓨터공학부학사 2011년 4월현재한양대학교전자컴퓨터통신공학과석사과정 관심분야 : 악성코드분석, 네트워크보안, 정보보호 임을규 (Eul-Gyu Im) 1992 년서울대학교컴퓨터공학과학사 1994 년서울대학교컴퓨터공학과석사 2002년 University of Southern California 컴퓨터과학과박사 2011년 4월현재한양대학교컴퓨터공학부조교수 관심분야 : 네트워크보안, 악성프로그램분석, RFID 보안, SCADA 보안 335