最近我刚刚开始学习Windows内核漏洞利用,因此决定以博客的形式分享一些我的学习心得。
本部分主要是关于搭建实验环境;接下来的部分我计划介绍一下如何使用Ashfaq Ansari所开发的“HackSys Extreme Vulnerable Driver”(HEVD,项目网址为:https://github.com/hacksysteam/HackSysExtremeVulnerableDriver)来做一些练习。
希望对大家有所帮助!
本文中我所用的环境如下:
·使用Kali Linux作为主机系统(当然,你可以选择你所偏好的任何系统);
·VirtualBox虚拟机软件(下载网址:https://www.virtualbox.org/);
·2台虚拟机,操作系统为Windows 7(32位),且都安装了Virtual Guest Additions工具(译者注:类似于VMware Workstation上的VMTools)——其中一台虚拟机用作调试方,另一台作为被调试方;
·WinDbg调试器(可以在Windows SDK中找到,下载网址:https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk)。
当我们进行用户级的调试时,调试方与被调试方在同一台机器上;而在内核级调试的情况下这不可能,因为我们需要对被调试的操作系统进行完全控制(即,如果我们中断程序执行,整个系统都将冻结)。这就是为什么我们需要两台虚拟机扮演不同的角色。
建立调试方
调试方是指我们用于监视被调试方的机器;因此,我们需要在上面安装WinDbg调试器,并配置符号以解析系统结构。
为了安装WinDbg调试器,我们需要下载Windows SDK(下载网址:https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk);根据Windows系统版本,有时我们还需要安装一些必要的更新。
在安装选项中,必须选择调试工具,如下图所示。
WinDbg调试器安装后,我们应该添加符号;为此,我们只需要添加一个环境变量“_NT_SYMBOL_PATH”,WinDbg调试器将自动引用该变量。
然后使用能够下载符号的链接为其赋值,如下所示:
https://msdl.microsoft.com/download/symbols
完整的变量内容看起来就像这样(含义:下载的符号将存储于C:\Symbols文件夹中):
建立被调试方
我们需要配置被调试方,使其能够被外部控制。为此,我们在启动菜单中添加一个额外选项;当我们以该配置启动系统时,将启用调试功能。
我们需要用到一个工具“bcdedit”。首先,我们将当前设置复制到一个新的选项,比方说名为“Debug me”。具体命令格式如下:
该命令将返回一个新选项的GUID,我们需要复制并开启该选项的调试功能。具体命令格式如下:
最后,我们可以看一下调试接口可用的设置,具体命令如下:
在调试方与被调试方之间建立连接
调试方与被调试方将通过串行端口COM1进行通信,而该串口是通过主机系统上的命名管道仿真实现的。配置非常简单,我们只需要保证调试方与被调试方具有相同的管道命名集合。调试方创建管道,之后被调试方连接已存在的管道(这就是必须先运行调试方的原因)。
我使用Linux系统作为主机系统,因此选择管道名称如下:
请注意,如果你使用Windows系统作为主机系统,你的管道名称应该遵循不同的约定,例如:
更多内容请参阅网址:https://en.wikipedia.org/wiki/Named_pipe
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课