HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

简介: 本文讲的是HEVD内核攻击:驱动程序的编译、安装、加载及调试(一),HEVD是HackSys的一个Windows的训练项目,是一个存在漏洞的内核的驱动,里面存在多个漏洞,通过ControlCode控制漏洞类型,这个项目的驱动里几乎涵盖了内核可能存在的所有漏洞
本文讲的是 HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

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:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

右键单击解决方案资源管理器中右侧的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:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

安装驱动程序

Windows 7 x64不允许安装任何旧版的驱动程序。从Windows Vista开始,所有64位版本的Windows都需要驱动程序代码为驱动程序加载数字签名。Microsoft提供了各种解决方法来测试驱动程序,但我们认为最简单的选项是使用TESTSIGNING引导配置选项,因为这能允许我们使用Visual Studio对驱动程序签名的测试证书,并且不需要完全信任的验证链。

打开管理员命令提示符,并发出以下命令:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

加载驱动程序

通常,驱动程序是使用安装程序创建的,但是为了到达测试效果,我们还是要选择使用OSR驱动程序加载程序。从此链接下载实用程序并解压缩OSRLOADER.exe。不过要想加载新编译的驱动程序,我们还需要先“注册服务”,注册完毕,点击“开始服务”就可以了!

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

内核调试

显然,在VMWare工作环境中,我们为内核调试配置共享串行端口管道是很轻松的,但是OSX上的VMWare Fusion没有正式支持它。因为一些最有用的链接已过时:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

然后在关闭debugee VM(Win7x64之一)之前,我们需要使用另一个bcdedit命令。打开管理员命令提示符并输入以下内容:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

然后关闭它。打开debugee的.vmx文件,将以下内容附加到其中:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

在此,我们建议与这两个VM共享/ private / tmp文件夹。

无论如何,启动调试VM并打开WinDBG AMD64。单击文件>内核调试……直到启动内核连接对话框。单击串行选项卡,将COM1更改为COM2,然后单击确定。现在启动Win7x64 debugee VM。如果一切顺利,我们应该能在调试器中看到下图所示的情形:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

如果我们注册的HEVD驱动程序能自动启动,那么它应该已经被加载并准备好调试了。我们可以通过在调试器中发出一个Break并发出lmkm HEVD_Win7x64命令来进行检查:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

如果发现在自动启动的状态下,没有加载,我们就需要使用OSRLOADER.exe再次启动它,不过在这样做之前,我们需要对调试环境做一个快速调整,必须在每个内核调试会话期间发出以下命令(意味着重新启动后):

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

一旦完成,输入g继续执行debugee VM,以便我们可以重新加载驱动程序。 现在继续使用OSRLOADER.exe来启动驱动程序服务。如果一切顺利,内核调试结果如下所示:

HEVD内核攻击:驱动程序的编译、安装、加载及调试(一)

因为在的下一篇关于HEVD 内核攻击的文章中,我们将会用到这些代码。




原文发布时间为:2017年3月23日
本文作者:xiaohui
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
3月前
编译cuttlefish内核遇到的问题
编译cuttlefish内核遇到的问题
|
7月前
LabVIEW为可执行文件构建安装程序时找不到运行引擎
LabVIEW为可执行文件构建安装程序时找不到运行引擎
74 0
将模块编译入内核
将模块编译入内核
113 0
|
Linux vr&ar 开发者
驱动编译进Linux内核
驱动编译进Linux内核
224 0
|
编译器 Linux 开发工具
调试记录 | Linux 内核静态库封装问题
调试记录 | Linux 内核静态库封装问题
349 0
|
Linux 编译器 Shell
【Linux】【编译】编译及Makefile的调试手段和技巧
【Linux】【编译】编译及Makefile的调试手段和技巧
665 0
|
Windows
Windbg内核调试之三: 调试驱动
这次我们通过一个实际调试驱动的例子,来逐步体会Windbg在内核调试中的作用.由于条件所限,大多数情况下,很多人都是用VMware+Windbg调试内核(VMware的确是个好东西).但这样的调试需要占用大量的系统资源,对于和我一样急性子的朋友来说这是不可接受的:).
1286 0