开源项目-基于Intel VT技术的Linux内核调试器

时间:2023-01-05 03:33:00

 本开源项目将硬件虚拟化技术应用在内核调试器上,使内核调试器成为VMM,将操作系统置于虚拟机中运行,即操作系统成为GuestOS,以这样的一种形式进行调试,最主要的好处就是调试器对操作系统完全透明。如下图:

开源项目-基于Intel VT技术的Linux内核调试器

       图1 虚拟化调试器框架

    传统的内核调试器的工作原理是接管中断向量表中的INT1INT3处理程序。前者对应的是 #DB异常,通常是设置了单步标志后引发的单步异常和CPUDR寄存器中定义的内存访问异常引发。后者由int3这条指令引发,而int3这条指令用于调试断点。

    而基于硬件虚拟化技术的调试器以VMM的身份运行,操作系统作为GuestOS,那么VMM将最先截取到CPU异常。因此基于虚拟化技术的调试器不需要替换CPU中断向量表项中的中断处理程序指针,如此一来,我们再稍做一些其他安排,调试器将对操作系统完全透明。

    检测当前是否有调试器调试自己是非常容易的。因此上述这种透明化在一些特殊场合尤为必要。例如一个反病毒工程师试图调试一个伪装严密的Rootkit(内核木马),而Rootkit检测到当前自己正在被调试器调试,就避免进行一些危险的动作,这样反病毒工程师就很难通过调试跟踪来得知这个Rootkit样本的内部结构与危害。而基于虚拟化技术的调试器可以很方便的隐蔽自己,防止被调试程序得知自己正在被调试。


   

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

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

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


    说明:这个开源项目是孟学政同学做的毕业设计,因为他本人是window下软件开发的大牛(习惯于用32位汇编编写程序),曾开出了基于intel VT的window内核调试器。在我讲授Linux内核操作系统之后,希望他能在Linux下实现同样的功能,以此为毕业设计,他完成了Linux内核调试全部功能。在此,我们将不仅把此项目的源代码全部放出,而且文档也开放。阅读相关文档和代码,你对硬件虚拟化的了解不再停在原理层面,对Linux内核也不仅仅止于阅读其代码,而是真枪实刀的动手实战。

   随后将陆续发布文档和代码。