개요

Virtual machine introspection (VMI)이란 Guest operating system의 현재 Runtime상태를 Hypervisor에서 추적하는 기술을 말한다. 이 기법은 디버깅이나 보안을 위해서 사용된다. VMI는 하이퍼바이저에서 Guest의 상태를 추적할 수 있는 다양한 방법과 분석 기법들을 제공한다.

예를 들어서 VMM은 VM의 동작중에서 특정 명령어가 수행할 경우 VMM으로 Context를 전환할 수 있다. 이러한 환경에서 System call 혹은 Page table modification처럼 특정 명령어가 수행될 경우 VMM으로 Context를 전환하여서 Seccomp와 같은 것을 구현하거나 아니면 page table dump을 떠서 Security Attack이 수행중인지를 파악할 수 있다. 혹은 I/O와 같은 경우에도 패킷을 분석하여서 GuestOS가 잘못된 일을 하고 있는지, 아니면 GuestOS가 사용하는 트래픽의 양과 같은 일들을 검사하고 파악할 수 있다.

VMI을 위한 기법들은 Virtual machine와 상호 협력을 하거나 아니면 완전히 Isolate된 환경에서 작동하기도 한다. Virtual machine과의 Semantic gap을 해결하여서 어떻게 하면 Guest operating system이 제공하는 Low-level의 정보를 의미있는 정보로 바꾸냐 하는 문제가 있다.

상호협력 모델

이렇나 모델에서는 VM내부에 Hypervisor에 정보를 주기위한 통로가 있다. 이러한 정보는 Network나 I/O디바이스등 Hypervisor와 통신할 수 있는 통로를 통해서 전달된다. 이러한 모델은 VM과의 협력이 필요하기 때문에 VM이 잘못 작동되거나, 아니면 Attacker가 VMI도 공격할 수 있는 환경에서는 잘 못 작동할 수 있는 위험성이 있다.

VM의 밖에서 작동하는 모델

VMI는 Virtual machine monitor외부 환경에서도 작동할 수도 있다. 이러한 환경에서는 잘 알려진 Operating system의 구조체와 같은 정보를 Virtual machine의 Page map과 같은 Low-level 정보로부터 Decoding하여서 Security check을 수행한다. Semantic gap을 해결해야 하는 문제가 있지만, GuestOS의 도움이 필요없어서 보안적으로 유리하고 GuestOS가 잘못 작동하여도 계속 진행할 수 있다는 장점이 있다.

참고

  1. https://suif.stanford.edu/papers/vmi-ndss03.pdf
  2. https://bedrocksystems.com/blog/virtual-machine-introspection/