微信号:LinuxKernelTravel

介绍:Linux内核之旅

基于IntelVT技术的Linux内核调试器的设计与实现(一)-引言

2016-01-05 08:59 MXP

前言:这是几年前学生做的本科毕业设计,因为作者深厚的计算机基础,擅长在Winodow下内核级的开发,当他把这个调试器移植到Linux内核下时,依然达到了预期的效果,其中的一些做法或许对你有所启发。


摘要:传统调试器在特殊领域的应用具有一定困难。如果程序拥有反调试机制,那么就首先就需要破解他的反调试机制。而且Linux平台内置的内核调试器KDB使用方法过于复杂,需要重新编译内核。其它一些第三方内核调试器同样不能很好地应用于特殊领域,有一些存在兼容性问题,有一些同样存在易用性的问题,有一些已经停止开发。

国外hyperdbg项目是一款基于Intel 硬件虚拟化技术的内核调试器。该调试器使用硬件虚拟化技术达到隐藏自身的目的,支持WindowsLinux操作系统。但是一直以来项目开发进度慢,接口不友好,功能单一,只有简单的单步命令和断点命令,对调试符号支持不好,很难将其应用于实际工作中。

基于以上几点,针对特殊领域的应用,有必要开发一款具有反侦测功能、简单易用的内核调试器。VMXICE调试器就是一款基于Linux的内核调试器,同样使用了硬件虚拟化技术,将当前运行的操作系统运行级别降低为GUEST,而调试器运行级别为HOST,这样一来,不修改中断向量表就可以实现监视和拦截调试中断。操作系统被放置于GUEST,并不能探测在位于HOST的调试器软件,这样的做法被证明可以很好地将调试器隐藏。



1 引言

硬件辅助虚拟技术,顾名思义就是硬件支持虚拟化,一般特指CPU的虚拟化。物理CPU虚拟出一个虚拟CPU给客户机使用,并且提供特权级保护支持,虚拟机软件不必关心指令的解析以及特权指令造成的安全问题。这种技术方便了虚拟机的开发,同时也提升了虚拟机的性能。

硬件虚拟化技术除了可以提高虚拟机性能外还有很多其它的用途,例如软件加密与保护,还可以被恶意程序利用。在200683日的拉斯韦加斯的黑帽大会上,COSEINC的安全研究员Joanna Rutkowska演示了一个叫做Blue Pill的恶意程序,该程序使用硬件虚拟化技术侵入Windows操作系统底层并完美地隐藏起来,所有的Anti Rootkit工具均无法检测其存在。

硬件虚拟化技术还可以应用到调试与反调试领域。很多恶意程序都有反调试功能,而基于硬件虚拟化技术的调试器作为VMM,可以优于操作系统响应并拦截调试异常,完美地将自己隐藏起来,被调试的代码很难进行反调试。难以被检测是基于硬件虚拟化技术的调试器最主要的优点。


1-1 传统内核调试器、虚拟化调试器与操作系统层次对比

2010Aristide Fattori等人建立hyperdbg开源项目,该项目基于New Blue Pill部分代码,最初实现了一个基于Intel VT-x技术的Windows内核调试器,后来又支持Linux操作系统,但一直以来该项目进度迟缓,调试器功能单一且Bug太多,无法进行实际应用。本文重新设计了一个基于Intel VT-x的内核调试器,名字叫VMXICE,实现了调试器的基本功能以及符号的解析,满足对Linux内核模块的调试需求。


2 Intel VT-x技术简介

支持VT-x技术的CPU有两种运行模式,VMX模式和非VMX模式。VMX模式就是支持VT技术的主要模式,而非VMX模式则与不支持VT-x技术的CPU运行模式完全相同。而VMX模式又分为两种操作模式,VMX root模式和为VMX non-root模式,VMX root模式是提供给VMM使用的,在这种模式下可以调用VMX指令集,VMM用以创建和管理虚拟机。而VMX non-root模式就是虚拟机运行的模式,这种模式不支持VMX指令集。

VT技术有两种转换,分别为VM EntryVM ExitVM Entry就是从VMX root模式切换到VMX non-root模式,简单的说,就是VMM切换到虚拟机这个转换过程。VM Exit就是从VMX non-root模式切换到VMX root模式,同理可理解为从虚拟机返回到VMM这个过程。

2-1 VMM与客户机的切换

另外每个硬件虚拟的CPU都有一个表示其状态以及控制其特性的结构,VT-x技术的叫做VMCS。该结构包含3个部分:版本标志、VMX退出原因、数据区。而数据区则包含大量与CPU状态和控制相关的信息,包括虚拟机状态保存区(各种寄存器)、宿主机状态保存区、虚拟机运行控制域、VM Entry行为控制域、VM Exit行为控制域、VM Exit信息域。

支持VT-x技术的指令集叫做VMX指令集,该指令集总共有10条指令,详见附录


附录 指令集:VMX

2-1 VMX指令集

指令

作用

VMPTRLD

VMCS构体指为当前操作

VMPTRST

保存VMCS构体指

VMCLEAR

清除VMCS构体

VMREAD

VMCS构体指定域

VMWRITE

VMCS构体指定域

VMCALL

VM Exit事件,返回到VMM

VMLAUNCH

启动个虚拟

VMRESUME

VMM返回到虚拟继续运

VMXOFF

退出VMX操作模式

VMXON

VMX操作模式


 
Linux内核之旅 更多文章 Linux内核之旅—微信平台开篇 《Linux内核设计与实现》章节节选—操作系统和内核简介 hurlex这个基于x86架构的内核 操作系统中的哲学 杂谈:物理世界,虚拟世界
猜您喜欢 2016年7月7日, 今日全球能源资讯(油价涨) 了解下依赖注入 用ZooKeeper真的low吗?上千个节点场景配置服务方案大讨论 - 高可用架构系列 P2P如何过个好年?从物流角度谈流动性管理 为什么Zapier仍然不使用Gevent?