HEVD是HackSys的一个Windows的训练项目,是一个存在漏洞的内核的驱动,里面存在多个漏洞,通过ControlCode控制漏洞类型,这个项目的驱动里几乎涵盖了内核可能存在的所有漏洞,从最基础的栈溢出,到池溢出,释放后重用等等类型,是一个非常好的项目。非常适合我们熟悉理解Windows内核漏洞的原理,利用技巧等等。
项目地址:https://github.com/hacksysteam/HackSysExtremeVulnerableDriver
编译驱动程序
我们需要安装Visual Studio 2015以及最新的SDK。还要安装Windows驱动程序工具包(WDK)。因为我们想要的目标为Windows 7的 64位操作系统,所以我还要下载了Windows 7的SDK。
所有安装都是我们从github所下载的HEVD源代码的zip文件,而且我们还会把驱动程序源代码提取到一个目录。接下来,打开Visual Studio并启动一个新项目。安装WDK后,我们就可以选择创建一个空的内核模式驱动程序,然后为这个新项目命名一个易于识别的名称(例如HEVD-win7x64),然后点击OK:
右键单击解决方案资源管理器中右侧的Header Files文件夹,然后单击添加>现有项目……,直到我们浏览到驱动程序源代码目录,然后将这些目录导入所有.h文件。这些操作完成后,我们就可以对解决方案资源管理器中的源文件文件夹执行相同操作,并导入所有.c文件。现在在项目菜单下,选择HEVD-win7x64属性……直到打开项目属性对话框。不过要实现新项目的正常工作,我们还要进行一些操作,单击C / C ++节点并将“Treat Warnings As Errors”更改为“No (/WX-)”,另外还需要向下滚动到代码生成子节点,将安全检查选项更改为“Disable Security Check (/GS-)”,以便我们可以使用此缓冲区溢出,而不会出现其他"并发攻击"。单击驱动程序设置节点,并确保目标操作系统是Windows 7,目标工作平台在桌面。在Build菜单下,单击Build Solution,如果一切正常,我们应该在x64 Release中的项目文件夹下找到HEVD-Win7x64.sys:
安装驱动程序
Windows 7 x64不允许安装任何旧版的驱动程序。从Windows Vista开始,所有64位版本的Windows都需要驱动程序代码为驱动程序加载数字签名。Microsoft提供了各种解决方法来测试驱动程序,但我们认为最简单的选项是使用TESTSIGNING引导配置选项,因为这能允许我们使用Visual Studio对驱动程序签名的测试证书,并且不需要完全信任的验证链。
打开管理员命令提示符,并发出以下命令:
加载驱动程序
通常,驱动程序是使用安装程序创建的,但是为了到达测试效果,我们还是要选择使用OSR驱动程序加载程序。从此链接下载实用程序并解压缩OSRLOADER.exe。不过要想加载新编译的驱动程序,我们还需要先“注册服务”,注册完毕,点击“开始服务”就可以了!
内核调试
显然,在VMWare工作环境中,我们为内核调试配置共享串行端口管道是很轻松的,但是OSX上的VMWare Fusion没有正式支持它。因为一些最有用的链接已过时:
然后在关闭debugee VM(Win7x64之一)之前,我们需要使用另一个bcdedit命令。打开管理员命令提示符并输入以下内容:
然后关闭它。打开debugee的.vmx文件,将以下内容附加到其中:
在此,我们建议与这两个VM共享/ private / tmp文件夹。
无论如何,启动调试VM并打开WinDBG AMD64。单击文件>内核调试……直到启动内核连接对话框。单击串行选项卡,将COM1更改为COM2,然后单击确定。现在启动Win7x64 debugee VM。如果一切顺利,我们应该能在调试器中看到下图所示的情形:
如果我们注册的HEVD驱动程序能自动启动,那么它应该已经被加载并准备好调试了。我们可以通过在调试器中发出一个Break并发出lmkm HEVD_Win7x64命令来进行检查:
如果发现在自动启动的状态下,没有加载,我们就需要使用OSRLOADER.exe再次启动它,不过在这样做之前,我们需要对调试环境做一个快速调整,必须在每个内核调试会话期间发出以下命令(意味着重新启动后):
一旦完成,输入g继续执行debugee VM,以便我们可以重新加载驱动程序。 现在继续使用OSRLOADER.exe来启动驱动程序服务。如果一切顺利,内核调试结果如下所示:
因为在的下一篇关于HEVD 内核攻击的文章中,我们将会用到这些代码。