가상화 기술을 이용한 메모리 보호 그리고 ring -1 박지환 redbit0@gmail.com 안녕하세요, BoB 2기 교육생 박지환이라고 합니다. 이번 BoB 교육과장을 진행하면서 했던 프로젝트에 대해설명하려고 합니다. 아직까지는 연구가 부족하다고 생각되는 가상화 기술을 응용하여 보안에 접목시켜봤습니다. 박지환 redbit0@gmail.com
가상화 기술이란? 1999년 VMWare가 최초로 릴리즈 됨 이후 현재 10.0 버젼까지 출시되어있음 XEN 2003년 우선 가상화 기술이란 예전부터 노력해왔던 하나의 분야로 계속적으로 개발이 되어나갔습니다. 1999년에 VMWare 가 출시 되었고 이후로 XEN, KVM, HYPER-V 등의 가상화 프로그램들이 개발되어져 왔습니다. 이렇게 점차적으로 가상화 기술이 개발되어가고 시장이 형성되어갔습니다. KVM 2007년 Hyper-V 2008 년
왜? 사용량이 증가할까? 가장 큰 이유는 클라우드 시스템 컴퓨터 자원의 낭비 그 이유로는 실제로 컴퓨터 자원의 사용률은 채 30%가 되지않았기 때문에, 그런 남는 자원들을 효율적으로 사용하기 위한 방법으로 대두 되었습니다. 물론 여러 무거운 프로그램을 돌리게된다면 사용률이 치솟을 수 있겠지만 멀티코어 시스템에서 효율적인 병렬처리를 구현하지 못한 프로그램들이 대부분이기 때문에 대부분의 자원은 낭비된다고 볼 수 있습니다. 그래서 가상화 기술을 이용해서 남는자원을 새로운 일을 할 수 있는 곳에 합리적으로 할당하기 시작했습니다.
왜? 사용량이 증가할까? 소프트 웨어를 이용한 가상화 Web Server 의 가상호스트 설정 Windows 서버의 다중 접속 Paravirtualization 이러한 것들의 예로는 웹 서버의 가상호스트 설정 윈도우즈의 다중 접속 시스템 Paravirtualization 등이 있습니다. 하지만 이것들은 시작에 불가했습니다.
왜? 사용량이 증가할까? 이제는 컴퓨터의 디스크자원을 나눠주는 nDrive Dropbox Evernote 등등과 있고 갖은 스트리밍서비스들이 존재하고 있습니다. 이러한 서비스들 모두 남는 자원을 분할해서 나눠주는것이라고 볼 수 있습니다. 그리고 어디에서도 항상 같은 개발환경에서 개발을 하고 싶어하는 개발자들을 위해 클라우딩 개발 시스템도 존재하고 있습니다. 또한 PC방에서는 하나의 큰 SSD를 가상화하여 여러대의 PC의 공유하는 방식을 통하여 빠른 디스크 속도를 얻고 있습니다.
왜? 사용량이 증가할까? 그리고 이제는 극단적으로 컴퓨터, 즉 서버 자체를 가상화시켜서 판매하기도 합니다. 이러한 서비스들 모두는 예전에는 상상도 할 수 없었지만 이제는 하드웨어 성능이 발전해서 충분한 속도를 낼 수 있게되었고, 또한 하드웨에서부터 원초적이 지원이 있었기 때문입니다.
왜? 사용량이 증가할까? 2005년 Intel Pentinum4 에서 처음으로 선보인 기술 저 전력 ATOM CPU에서도 지원 하드웨어 장치를 가상화 하드웨어에서의 지원은 2005년 인텔이 펜티엄4 프로세서에서 처음 소개되었으며 이후로 꾸준히 발전해 왔습니다. 이 발전되 기술은 앞서 소개한 VMWare, Xen 등에서 점차 사용하기 시작을 했습니다. 그리고 저 전력 CPU인 ATOM에서 지원하게될 정도로 일반화가 되어가고 있습니다. 그럼 가상화의 구조는 어떻게될까요??
일반적으로 가상화 기술은 다음과 같은 구조로 되어있습니다. 이 하이퍼바이저는 하드웨어 바로 위에 존재하기 때문에 OS가 가지는 권한보다 더 높은 권한을 가지게 됩니다. 잘 알고 있는 ring3 아키텍쳐에서는 존재하지않는 가상의 ring -1의 권한을 가질 수 있습니다. 하지만 아직까진 ring -1의 권한을 가지고 할 수 있는 부분에대해서는 연구가 부족했습니다. 그래서 ring 0가 아닌 ring -1이라는 권한을 가지고 어떠한 일들을 할 수 있을지 연구했습니다
무엇을 할 수 있나? 최근 이슈가 되었던 메모리 조작을 이용한 해커에게 입금하게하는 공격방식이 있었고, 공인 인증서의 암호를 탈취하려던 시도도 많았습니다. 하지만 이러한 공격들의 특징은 하드웨어 장치로부터의 데이터를 조작이나 훔쳐가는 방식이였습니다. 키로깅의 경우 키보드로부터의 데이터를 가로채는 방식이고 메모리 해킹은 램 장치의 특정 영역의 데이터를 읽어 오는 방식입니다. 하지만 아까 보았던 하이퍼바이저의 위치인 OS와 하드웨어 사이에서의 징검다리 역할을 하고 있는 하이퍼바이저라면 그 데이터를 충분히 보호, 차단할 수 있습니다. 이러한 보호기법들은 이전에도 존재해왔다고 볼 수 있습니다, 하지만 더 높은 권한에서 행해지는 방법이기 때문에 더 안전하다고 볼 수 있습니다. 또한 보안프로그램이 공격당하던 하나의 문제점인 ring 0의 권한을 얻고자하는 프로그램이 악성코드인지 아닌지 식별하기 어렵기 때문에 보안프로그램과 악성코드는 같은 권한을 가지던 문제점에서 해방 될 수 있습니다. 왜냐하면, 정상프로그램이 ring -1의 권한을 얻고자하는 경우가 없다고 봐도 무방하기 때문입니다.
어떻게 동작할까? 불독화 소프트웨어 구현 혹시 큐브피아에서 발표한 불독화라는것에 대해 알고 있는지 모르겠습니다. 저희가 발표하는 이 기술도 불독화와 매우 유사하게 동작한다고 생각합니다. 저도 자세한 사항은 모르지만 불독화 기술을 적용하기 위해서는 특별한 하드웨어 장치가 필요하다가 들었습니다. 반면 저희는 CPU의 특별한 기능을 이용하여 동작하기 때문에 2005년에 출시된 펜티엄4이상의 CPU를 사용한다면 언제든 이용할 수 있습니다. 물론 소프트웨어적인 구현이기 때문에 동작 속도에서는 저희가 느릴 수 있습니다. 그리고 좀더 상세한 설명에 앞서 준비한 데모 영상을 보시겠습니다!
Hypervisor 이해 Non-root Operation Root Operation 그럼 이제 하이퍼바이저란 무엇인가에 대해 간단히 살펴보겠습니다. 하이퍼바이저는 크게 Root Operation과 N-root operation 두가지 동작 모드를 가지고 있습니다. Root operation은 VM entry 라고 불리기도 합니다. 아까 말한 ring -1의 권한은 Root operation 상태일때의 권한이라고 볼 수 있습니다. N-root operation은 Guest os가 동작할때의 권한이며, ring 0~ ring 3의 권한을 가지게 됩니다. 그럼 어떻게 이 두가지의 동작 모드의 전환이 이루어 지는지 살펴보겠습니다.
Hypervisor 이해 독립적인 VMCS ( Virtual Machine Control Struct ) 하이퍼바이저 동작 모드의 시작은 VMXON 이라는 특권 명령에 의해 시작됩니다. 이후 VMXOFF라는 특권 명령 전까지의 모든 동작이 하이퍼바이저에서의 동작이라고 볼 수 있습니다. 각각의 GuestOS들은 CPU 상태를 나타내는 VMCS ( Virtual Machine Control Struct ) 라는 구조체를 가지고 있습니다. VMLAUNCH 명령을 사용하게되면, VMCS의 정보를 읽어 실제 CPU가 동작하는것 처럼 동작하게 됩니다. 그럼 각각의 Guest OS, 즉 Non-root operation 으로부터 어떻게 root operation으로 돌아와 특정한 행동한 행동을 할 수 있는지 중요하게됩니다.
Hypervisor 이해 VM EXIT Invalid Opcode I/O Operation Non-root Operation VM EXIT Invalid Opcode I/O Operation CPUID, GETSEC, VM OPERATION … etc Other Priviliged Operation N-root operation 에서 root operation으로 제어가 옮겨가는 이유에는 여러가지가 있습니다. 이러한 동작을 VM Exit라고 부르게되며 이 경우에는 많은 이유가 있습니다. 아까 데모영상에서 보신 Stelth Sysenter Hooking이 특권 명령실해시 root operation으로 제어권이 넘어온다는 점을 이용해서 만들었습니다 Root Operation
Hypervisor를 이용한 메모리 보호 EPT ( Extended Page Table ) 가상 메모리를 맵핑을 좀더 편리하고 빠르게 처리함 이전 세대에서는 Shadow Page Table 이라는 기술을 사용 메모리 보호 역시 같은 방식입니다. 다만 조금 특별한 기능이 더 들어가게되는데요, 그 기능은 EPT라고 합니다. Hypervisor에 추가로 사용할 수 있는 기능이며 이것은 가상 메모리와 실제 물리 메모리를 맵핑을 고속으로 처리하기 위해 개발되었습니다. 이 기능을 사용하기 전에는 Shadow Page Table라는 방식을 사용해왔으며 이 방식은 소프트웨어적으로 구현된다는 점에서 속도에서 많은 차이가 나게 됩니다.
Hypervisor를 이용한 메모리 보호 EPT는 다음과 같이 구성되며, 좀 보기 복잡하겠지만 64bit의 가상메모리 즉 페이징 과정을 한번더 진행한다고 보시면됩니다. 구조는 64bit에서의 페이징과 마찬가지고 최상위 PML4부터 PDPTE, PDE, PTE 총 4개의 과정을 거쳐서 실제 물리 메모리 주소가 구해지게 됩니다.
Hypervisor를 이용한 메모리 보호 Guest Virtual Memory Guest Physical Memory Real Guest OS Paging EPT Paging VM EXIT!!
BLUE PILL 2006년에 Joanna Rutkowska (조안나 루크오스카) 가 블랙햇 컨퍼런스에서 발표한 하이퍼바이저를 이용한 루트킷
Q & A 함께 프로젝트를 진행한 김지성, 조민기, 최부근 정신적 지주인 노용환 멘토님 감사합니다.