안티바이러스자가보호무력화에대한연구 구사무엘, 김슬기 A Study on The Security Vulnerabilities in Self Protectionof Anti Viruses Samuel Koo, Seul-Gi Kim 1. 서론 2009 년 7.7 DDoS 공격에이어지난 26 일 SK Communications 가해킹으로인해 3500 만명의네이트회원개인정보가정보가유출되었으며, 분석결과피해자의컴퓨터에서안티바이러스에감지되지않은악성코드가심겨져있었으며, 이악성코드의유포경로로써이스트소프트의업데이트서버를경유하였다는점에서큰충격을주고있다. 앞의공격들이후, virus 의탐지특히 signatured virus 가아닌, targeted virus 에대한대응의일환으로 heuristic 탐지기법이강화되고있으며, CC-RA 에안티바이러스의자가보호기능에대한요구사항이들어가는등많은대응책을마련하고있다. 하지만공격자가안티바이러스를무력화시키는것이가능하다면, 안티바이러스가성공적으로 virus 의탐지를하는것이가능한지의문이제기되고있다. 이에최신안티바이러스들의자가보호기능에대하여살펴보고, 향후발생가능한공격유형을제시함으로써그에대한대응방안을개발하고적용하여대응능력을향상시키고자한다. 2. 국내안티바이러스점유율안티바이러스의취약점에대하여논하기전에, 국내의일반사용자들에백신점유율을알아보면 2 월을기준으로 E 사 A 45.24%, A 사 V 26.12%, D 사 DC 17.75%, 그리고 N 사 NV 8.58% 으로통계되었다. 이결과를볼때, 국내시장은무료백신이큰점유율을가지고있으며, 앞서제기된 4 가지백신에대한바이러스를만들경우, 국내일반사용자들은공격의범위에포함될수있다는것을의미한다. 그럼으로, 본연구는점유율이가장높은 4 가지안티바이러스를기준으로분석을하여보고자한다. 3. 자가보호자가보호란무결성이유지되어야하는안티바이러스가자신이사용하는파일, 레지스트리, 프로세스, 서비스, 커널객체 ( 이벤트, 뮤텍스, 네임드파이프, 메일슬롯, 공유메모리 ) 등을외부에서접근하는것을관리또는차단하는것을의미한다. 3.1. 자가보호방법 3.1.1. 유저후킹유저후킹의방법으로는 API(Application Programming Interface) 에대한 IAT (Import Address Table) 후킹, EAT (Export Address Table) 후킹, Detour (Inline Function Hooking) 등이많이사용되고있다.
Windows 시스템에서프로세스간의메모리영역이분리되어있음으로, 전역후킹을위해서는시스템전체의프로세스에 DLL 을삽입하거나코드조각을삽입하여야한다. 3.1.2. 커널후킹커널후킹의방법으로는 NTAPI(Native Application Programming Interface) 에대한 SSDT (System Service Descriptor Table) 후킹, IDT(Interrupt Descriptor Table) 후킹, SYSENTER, 필터드라이버, IRP(I/O Request Packet) 후킹등이많이사용되고있다. Windows 시스템에서커널모듈은하나의메모리공간을공유한다. 이영역에서의후킹은한번의설치로시스템전체에영향을미칠수있는장점으로, 악성코드제작자와안티바이러스제작자모두선호하는위치이다. 3.2. 자가보호대상 3.2.1. 파일보호파일보호의목적은안티바이러스구성요소의무결성보장에있다. 파일의구성요소는일반적으로실행파일 (EXE, DLL, SYS) 와데이터파일 (DAT, LOG, CONF) 가있다. 3.2.2. 레지스트리보호레지스트리보호의목적은안티바이러스설정의무결성보장에있다. 레지스트리는안티바이러스의라이선스정보, 검사예외설정, 그리고최종검사날짜등의민감한정보가존재할가능성이높다. 3.2.3. 프로세스보호프로세스보호의목적은안티바이러스의실행보장에있다. 프로세스는안티바이러스의실행상태의대표적형태이며, 프로세스보호는실행의단위인쓰레드에대한보호를포함한다. 프로세스의무결성이보장받지못할경우, 안티바이러스는정상적동작을보장받지못한다. 3.2.4. 서비스보호서비스보호는프로세스보호의특수한형태이다. 서비스란 Windows 시스템에서특별한권한을가지는프로세스를말하며, 많은안티바이러스의실시간감지가서비스에존재한다. 3.2.5. 드라이버보호드라이버에는안티바이러스에핵심적인부분과자가보호가구현되어있을가능성이크다. 자가보호에대해주관리하는부분임으로, 드라이버에대한무결성은상당히중요하다. 3.2.6. 커널객체보호커널객체는안티바이러스가구동됨에있어서필요한동기화객체및드라이버또는서비스와 I 인터프로세스커뮤니케이션함에있어서필수적인요소들이며, 해당요소에대한무결성을보장받지못할경우, 이후안티바이러스의동작을예측할수없게된다. 4. 자가보호지원여부 8 월 14 일현재를기준으로안티바이러스들의버전과자가보호기능지원여부는다음과같다. 안티바이러스이름최신버전지원여부 1 E사 A 1.55, 2.0 Beta O 2 A사 VL 2011.08.14.00 O 3 I사 A2 3.0 O 4 H사 V2 2011 O 5 D 포털 DC 1.5.0.84 X 6 N 포털 NV 1.0.78 X
A, V, A2, V2 는자가보호를지원하고있으며, D 포털 DC 와 N 포털 NV 은지원하고있지않음을알수있다. 전세계시장에서의점유율을기준으로최상위에존재하는 AVG, AVAST, NORTON, MCAFEE, ESET NOD32, AVIRA, SYMANTEC 등이자가보호를전부제공하고있다는점에서다음클리너와네이버백신의자가보호미지원은의문이드는부분이다. 5. 관련연구및제안하는방법 과거에는자가보호기능이존재하지않아, 안티바이러스공격을대상으로하는악성코드들이어렵지않게백신들을무력화시키는것이가능하였다. 그러나최근에는대부분의안티바이러스들이자가보호기능을탑재하여, 과거보다는비교적백신에대한공격이어려워지게되었다. 그럼으로, 악성코드제작자들은안티바이러스의자가보호에대한연구를많이진행하고있을것으로예상된다. 5.1. TerminateProcess 공격자가보호기능이존재하지않았던과거에많이사용되었던방법으로안티바이러스의프로세스를 Windows 가지원하는 API 인 TerminateProcess 를이용하여강제시키는공격으로써, 안티바이러스프로세스를전체프로세스목록에서검색하여찾은후, 해당프로세스에대하여 OpenProcess API 를 PROCESS_TERMINATE 권한으로호출하여, 핸들을획득하고, TerminateProcess API 를이용하여안티바이러스를강제종료시키는공격이다. 5.2. WinStationTerminateProcess 공격 TerminateProcess 공격과유사하나, Windows 의구성요소인 svchost.exe 는안티바이러스에게신뢰되는프로세스일가능성이높다는점에악용하여, svchost.exe 에게특정프로세스의종료를요청하는 API 인 WinStationTerminateProcess API 를안티바이러스프로세스를대상으로하여호출함으로써, 안티바이러스를강제종료시키는공격이다. 5.3. DebugActiveProcess 공격본공격은프로세스를직접종료시키는것이아닌, 공격자가만든악성코드가안티바이러스의디버거프로세스로설정함으로써, 안티바이러스프로세스에통제권을얻는것이목적인공격이다. 실행중인프로세스의디버거를지정하는 API 인 DebugActiveProcess 를안티바이러스프로세스를대상으로하여호출함으로써, 안티바이러스를악성코드의통제범위에넣는공격이다. 5.4. DebugBreakProcess 공격특정프로세스에서중단점예외를발생시키는 API 인 DebugBreakProcess 를안티바이러스를대상으로호출함으로써, 안티바이러스프로세스를 Suspend 상태로만들어, 무력화시키는공격이다. 5.5. Terminating Thread 공격안티바이러스의자가보호가프로세스에대해서만보호하도록잘못구성되어있을경우, 가능한공격으로써, 프로세스의모든쓰레드가파괴될경우프로세스가종료된다는원리에기반하고있는공격이다.
5.6. Suspending Thread 공격안티바이러스의자가보호기능에의해쓰레드종료가막혀있을경우, 쓰레드의상태를 Suspend 로만들수있는 API 인 SuspendThread 를사용하여안티바이러스의모든쓰레드를 Sus 아무동작도할수없는 suspend 상태로만들어, 무력화시키는공격이다. 5.7. NULL Context Overwrite 공격쓰레드의 context 를변경시킬수있는 API 인 SetThreadContext 를이용하여안티바이러스프로세스의 context 의모든값을 0 으로만듬으로써, 안티바이러스프로세스를비정상종료시키는공격이다. 5.8. Create Abnormal Thread 공격특정프로세스에새로운쓰레드를생성할수있는 API 인 CreateRemoteThread 를이용하여안티바이러스프로세스에시작지점을잘못된주소또는호출프로세스자신을종료시키는 API 인 ExitProcess 를가리키게함으로써안티바이러스프로세스의자가종료를유도하는공격이다. 5.9. Memory NoAccess 공격메모리의접근권한을변경할수있는 API 인 VirtualProtectEx 를이용하여안티바이러스프로세스에모든메모리권한을 NoAccess 로변경시킴으로써, 안티바이러스프로세스의비정상종료를유도시키는공격이다. 5.10. NULL Memory Overwrite 공격특정프로세스에메모리를기록하여주는 API 인 WriteProcessMemory 를이용하여안티바이러스프로세스의모든메모리공간에 NOP(No Operation) 코드를기록함으로써, 안티바이러스프로세스의비정상종료를유도시키는공격이다. 5.11. Duplicate Handle from Maximum Allowed 공격안티바이러스의프로세스에대한자가보호가후킹으로되어있을경우, 가능한한최대의권한으로핸들을얻어주는 Flag 인 MAXIMUM_ALLOWED 를 OpenProcess 또는 OpenThread API 와함께사용하여핸들을얻어낸후, 핸들을복사하여주는 API 인 DuplicateHandle 을이용하여더높은권한으로복사시켜, 4.1 ~ 4.10 공격중, 권한의부족으로이루어지지못했던것을우회하여공격하는것이가능하다. 5.12. Duplicate Handle from CSRSS 공격 Windows 시스템상에존재하는모든프로세스의핸들은 csrss.exe 프로세스안에존재하며, 이핸들을 DuplicateHandle API 를이용하여복사함으로써후킹을이용하여구성된안티바이러스의자가보호를우회하여권한을얻어낸후, 4.1 ~ 4.10 공격중, 권한의부족으로이루어지지못했던것을우회하여공격하는것이가능하다. 6. 실험및결과 6.1. 실험환경및데이터제안한방법및알고리즘을 C++ 개발환경인 Visual Studio 를이용하여구현하였다. 또한실험을위해서 Trojan.Win32.Scar.252841 를수집하였으며, 수집한악성코드는윈도우상에서실행될수있는 DDoS 에이전트 (Agent) 이며악성코드의진단명은 H 사 V 안티바이러스의진단명을따른다. 수집한악성코드를안티바이러스를무력화전과후실행시키어보고, 변화를관찰하였다.
안티바이러스를무력화하기전, 악성코드는안티바이러스소프트웨어에의해감지및삭제되는것을볼수있었다. 안티바이러스무력화에대한테스트를진행하기전, 정확한실험을위하여안티바이러스의설정에서자가보호기능의동작여부를다시확인하였다. 안티바이러스의설정이올바르게되어있음을확인하였음으로, 제안에대한구현을실행하여안티바이러스프로세스에대하여무력화실험을수행하였다.
안티바이러스소프트웨어가작동을멈추었을것으로예상됨으로, 무력화전감지후삭제되었던악성코드를다시다운로드후실행시키어보았다. 악성코드가안티바이러스에의해검출되지않고, 정상적으로실행된것을볼수있다. 안티바이러스제품별단계에차이는있었으나, 모두무력화되었다. 무력화후 10 초정도시스템딜레이가발생하는경우가존재했으나, 그후엔발생하지않았다. D 사의 DC 의경우해당악성코드를잡아내지못하여, 실험이불가능하였으나, 자체보호가존재하지않아쉽게종료가가능함과, 시작프로그램감시기능의우회를통해가능여부를확인하였다.
7. 결론및향후연구 안티바이러스의자가보호의잘못된신뢰범위지정및보호에대하여공격할수있는방법을제안하였다. 제안한방법은잘못된 API 신뢰범위를가지는안티바이러스자가보호시스템에서나타날수있는취약점을정리하고, 악성코드샘플의검출여부실험을통해자가보호및실시간탐지우회여부에대하여연구하였다. 그러나본연구는지나치게적은안티바이러스샘플수와악성코드샘플수로인해, 높은오차를가질수있으며향후연구에서는다양한클래스의안티바이러스를대상으로제안한방법을다수의악성코드를가지고적용하여보다개선된무력화방법을연구하고자한다. 참고문헌 [1] 김성우, 해킹파괴의광학개정판, 와이미디어, 2006. [2] D. Barroso, "Botnets-The Silent Threat ", ENSIA Position Paper, no. 3, pp. 1-9, November 2007. [3] Greg Hoglund, James Butler, Rootkits: Subverting the Windows Kernel, Pearson Education, Inc, 2006. [4] Charles Petzold, Programming Microsoft Windows 5th Edition, Microsoft Press, 2002. [5] 강태우, 조재익, 정만현, 문종섭, PI call 의단계별복합분석을통한악성코드탐지 정보보호학회논문지, 제 17 권제 6 호, pp. 89-98, 2007 년 12 월. [6] 김완경, 소우영, 윈도우 XP 커널기반 API 후킹탐지도구설계및개발 보안공학연구논문지, 제 7 권제 4 호, pp. 385-397, 2010 년 8 월. [7] 박남열, 김용민, 노봉남, 우회기법을이용하는악성코드행위기반탐지방법 정보보호학회논문지, 제 16 권제 3 호, pp. 17-28, 2006 년 6 월.