Virtualization-based Monitoring
Virtualization-based Monitoring 是指利用虚拟化技术对上层虚拟机进行监控或者保护。通常分为两类模型“In-VM”模型和“Out-of-VM”模型。
- “In-VM” Model
“In-VM”模型如下图所示,虚拟化安全监控的部分模块放置在非可信虚拟机(目标虚拟机)中,而这部分模块通常在虚拟机操作系统的内核中监控系统的安全事件。它们所属的内存区域受hypervisor保护,可以避免Rootkit对其攻击。典型的有“SIM”[1]。由于把部分监控模块引入到目标虚拟机中,这样在同样的操作系统环境下,语义重构过程相对简单,且对整个系统带来的性能损耗低(不会因为监控事件而陷入hypervisor)。但是,也正因如此,它给系统的整体安全带来隐患,很容易被恶意代码检测到虚拟机安全监控的存在,不具备透明性。
- “Out-of-VM” Model
“Out-of-VM”模型如下图所示。在这类模型中,安全监控模块放置在可信虚拟机和hypervisor中,部分虚拟机安全监控把所有的组件都放到了hypervisor中,没有可信虚拟机。通过在hypervisor中对目标主机设置监控点来截获指定的事件,负责分析截获的事件的监控模块可置于可信虚拟机或者hypervisor中,典型的有Ether[2]。由于在不同的处理器模式中,虚拟机安全监控只能直接获取目标虚拟机的寄存器和内存中的二进制序列,所以,语义重构的过程较为复杂;非可信虚拟机、可信虚拟机和hypervisor三者间的切换也会带来较大的性能开销。然而,由于在目标虚拟机中不存在任何模块,所以安全性高,透明性强。
Bridges Across The Semantic Gap
- Hand-crafted data structure signatures
手工重构是指凭借经验,通过遍历指针、搜索特征码等途径,在hypervisor中获取虚拟机中特定的信息。如,可以通过fs或gs寄存器获取kpcr结构,然后通过指针获取kprcb、kthread等结构,进而通过搜索特征码、计算得到SSDT、eprocess链表等。典型的有libvmi[3]。
- Source code analysis
通过分析开源OS的源码,获取函数调用关系、数据结构之间的指向关系等。可以通过工具自动对源码分析。
- Dynamic analysis
动态分析是指跟踪特定的事件,并根据获得的信息判断谁触发了这些事件,或者这些事件的转移方向,一般针对一些动态数据(位置可变、内容可变)可利用此方法进行分析。典型的有HookFinder[4]。
- ……
Protection Method
- W⊕X
通过hypervisor的影子页表或扩展页表等,设置虚拟机的页表属性:可执行的页面不可写,可写的页面不可执行。通常可对内核、驱动模块等的代码段设置为不可写,防止rootkits修改系统代码。
- VMExit
通过陷入机制,来监控软件行为或检测虚拟机行为的合法性。如违背W+X保护会陷入到hypervisor的页异常处理函数中,对hypervisor保护的寄存器进行读/写也可陷入到hypervisor相应的处理函数中。
- Other virtualization
如APIC、网卡的虚拟化等。
- Whitelist
可以在hypervisor中加入白名单机制,过滤非可信的操作。如允许特定函数修改特定地址内容。
- ……
Prevention VS Detection
Prevention侧重于阻止,即在攻击前拦截攻击,如阻止一个恶意驱动的加载。Detection侧重于检测,即在攻击成功后,检测是否发生过攻击。Prevention类的虚拟机监控又称Active Monitoring(主动监控),典型的有Lares[5]。Detection类的虚拟机监控又称Passive Monitoring(被动监控),典型的有VICTOR[6]。
- Active Monitoring(Synchronous)
主动监控一般采用同步机制,即事件发生时进行拦截。所以主动监控适合于监控发生频率较低的事件,如进程的创建。对发生频率较高的事件进行拦截,如拦截线程的切换,则会带来较大的性能损耗,尤其是当这类事件会引起陷入hypervisor的时候。
- Passive Monitoring (Asynchronous)
被动监控一般采用异步机制,即事件发生后进行检测,如周期性的扫描内存。发生频率较高的事件可通过这种方式进行检测。然而这种方法需要权衡性能和风险,确定一个合适的检测周期。过于频繁的检测会带来较大的性能损耗,而周期间隔较大又可能遗漏攻击行为(攻击行为发生在两次检测之间)。
Attack & Defense
- MEP (Modify Execution Path)
MEP是指修改可执行代码从而截获特定的执行流程,如inline hook。这类攻击比较好防御,W+X保护即可。
- KOH(Kernel Object Hooking)
KOH是指替换内核对象的函数指针从而截获这些函数的执行流程,这类攻击方式较难防御,文献中一般采用静态分析或动态分析进行防护。如HookSafe[7]通过拦截内存分配函数,并跟踪这些内存进行防护。
- DKOM(Direct Kernel Object Manipulation)
DKOM有别于以上两种攻击,它不需要截获代码的执行流程,而是只对内核数据进行修改,如从进程双向链表中摘除节点隐藏进程。这类攻击更难防御,一般采用多维视图进行检测,如遍历OS的线程执行队列获得进程列表,从而获得另一维度的视图。
- DKSM (Direct Kernel Structure Manipulation)
DKSM专门针对虚拟化安全监控进行攻击,使hypervisor得到的视图有别于虚拟机的视图。如最简单的,互换eprocess结构成员的进程id和进程名字,这样hypervisor就难以在eprocess结构正确的偏移上获得正确的内容。当然,为保证虚拟机的正常运行,在特定的时机还需纠正这个错误(再换回来),这样就需要截获特定的执行流程。所以可以采用防护MEP和KOH的方法来防御此种攻击。一种更高级的攻击方式,可利用OS的代码构建攻击代码(类似ROP)。针对这种攻击方式,OSck[8]提出一种防护方法,检测栈中的返回地址是否为预期的地址。
Other Hardware Related
- PCI device
利用硬件虚拟化进行内存保护,最小的粒度为一个页面,最小的页面为4096字节。最糟糕的情况是:在一个页面中,我们只监控一个地址(4字节),而访问其它地址时,也一样会陷入hypervisor,所以不必要的开销占据了1023/1024(hooksafe[7]成功减少了这种不必要的开销)。所以有人提出利用PCI硬件设备来达到字节级的监控粒度。
- Privilege Core
LLM[9]提出利用一个特权的CPU内核以及一小块只有这个内核可以访问的内存来检测OS代码的完整性。
- SMM
有人定义系统管理模式为“ring -2”的权限,它具备比hypervisor(“ring -1”)更高的权限,所以有人提出利用SMM进行OS或hypervisor的代码完整性检验。
- ……
Note
以上总结依赖于牛人文章和代码,难免有理解错误的地方,敬请指正。另外由于忘记出处,部分内容没有附加参考文献,敬请海涵。
References
[1] Sharif Monirul, Lee Wenke, Cui Weidong. Secure In-VM Monitoring Using Hardware Virtualization [C]. In Proceedings of the ACM conference on Computer and Communications Security, 2009.
[2] A. Dinaburg, P. Royal, M. Sharif, and W. Lee. Ether: Malware analysis via hardware virtualization extensions [C]. In Proceedings of The 15th ACM Conference on Computer and Communications Security (CCS 2008), 51 – 62, 2008.
[3] Google Project Hosting. vmitools. http://code.google.com/p/vmitools/.
[4] H. Yin, Z. Liang, and D. Song. HookFinder: Identifying and Understanding Malware Hooking Behaviors. InNDSS ’08: Proceedings of the 16th Annual Network and Distributed System Security Symposium, 2008.
[5] B. Payne, M. Carbone, M. Sharif, and W. Lee. Lares: An architecture for secure active monitoring using virtualization. In Proceedings of the IEEE Symposium on Security and Privacy, 2008.
[6] Tupakula U K, Varadharajan V. Dynamic state-based security architecture for detecting security attacks in virtual machines. Computer Journal, 55(4): 397-409, 2012.
[7] Zhi Wang, Xuxian Jiang, Weidong Cui, et al. Countering Kernel Rootkits with Lightweight Hook Protection. In Proceedings of the ACM conference on Computer and Communications Security, 2009.
[8] Owen S. Hofmann, Alan M. Dunn, Sangman Kim, Indrajit Roy, Emmett Witchel. Ensuring Operating System Kernel Integrity with OSck. ACM SIGPLAN NOTICES, 47(4): 279 – 290, 2011.
[9] Yuki Kinebuchi, Shakeel Butt, Vinod Ganapathy, et al. Monitoring Integrity Using Limited Local Memory. IEEE Transacations on Information Forensics and Security, 8(7): 1230-1242, 2013.
闫广禄
2014.11.14
原创文章,作者:BFS,如若转载,请注明出处:https://www.isclab.org.cn/2014/11/14/%e8%99%9a%e6%8b%9f%e5%8c%96%e5%ae%89%e5%85%a8%e7%9b%91%e6%8e%a7%e6%8a%80%e6%9c%af%e5%b0%8f%e7%bb%93/