最近我刚刚开始学习Windows内核漏洞利用,因此决定以博客的形式分享一些我的学习心得。
本部分主要是关于搭建实验环境;接下来的部分我计划介绍一下如何使用Ashfaq Ansari所开发的“HackSys Extreme Vulnerable Driver”(HEVD,项目网址为:hacksysteam/HackSysExtremeVulnerableDriver)来做一些练习。
希望对大家有所帮助!
本文中我所用的环境如下:
·使用Kali Linux作为主机系统(当然,你可以选择你所偏好的任何系统);
·VirtualBox虚拟机软件(下载网址:Oracle VM VirtualBox);
·2台虚拟机,操作系统为Windows 7(32位),且都安装了Virtual Guest Additions工具(译者注:类似于VMware Workstation上的VMTools)——其中一台虚拟机用作调试方,另一台作为被调试方;
·WinDbg调试器(可以在Windows SDK中找到,下载网址:Windows 10 SDK - Windows app development)。
当我们进行用户级的调试时,调试方与被调试方在同一台机器上;而在内核级调试的情况下这不可能,因为我们需要对被调试的操作系统进行完全控制(即,如果我们中断程序执行,整个系统都将冻结)。这就是为什么我们需要两台虚拟机扮演不同的角色。
建立调试方
调试方是指我们用于监视被调试方的机器;因此,我们需要在上面安装WinDbg调试器,并配置符号以解析系统结构。
为了安装WinDbg调试器,我们需要下载Windows SDK(下载网址:Windows 10 SDK - Windows app development);根据Windows系统版本,有时我们还需要安装一些必要的更新。
在安装选项中,必须选择调试工具,如下图所示。
WinDbg调试器安装后,我们应该添加符号;为此,我们只需要添加一个环境变量“_NT_SYMBOL_PATH”,WinDbg调试器将自动引用该变量。
然后使用能够下载符号的链接为其赋值,如下所示:
Symbol information
完整的变量内容看起来就像这样(含义:下载的符号将存储于C:\Symbols文件夹中):
1
SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols
建立被调试方
我们需要配置被调试方,使其能够被外部控制。为此,我们在启动菜单中添加一个额外选项;当我们以该配置启动系统时,将启用调试功能。
我们需要用到一个工具“bcdedit”。首先,我们将当前设置复制到一个新的选项,比方说名为“Debug me”。具体命令格式如下:
1
bcdedit /copy {current} /d "Debug me"
该命令将返回一个新选项的GUID,我们需要复制并开启该选项的调试功能。具体命令格式如下:
1
bcdedit /debug {MY_GUID} on
最后,我们可以看一下调试接口可用的设置,具体命令如下:
1
bcdedit /dbgsettings
在调试方与被调试方之间建立连接
调试方与被调试方将通过串行端口COM1进行通信,而该串口是通过主机系统上的命名管道仿真实现的。配置非常简单,我们只需要保证调试方与被调试方具有相同的管道命名集合。调试方创建管道,之后被调试方连接已存在的管道(这就是必须先运行调试方的原因)。
我使用Linux系统作为主机系统,因此选择管道名称如下:
1
/tmp/wke_pipe
请注意,如果你使用Windows系统作为主机系统,你的管道名称应该遵循不同的约定,例如:
1
\\.\pipe\wke_pipe
更多内容请参阅网址:Named pipe - Wikipedia
测试连接
万事俱备,现在我们只需要测试环境是否正确运行!首先启动调试方,运行WinDbg,然后让其等待被调试方的连接。例如:
“文件”菜单 -> “内核模式调试”选项,如下图所示。
选择COM作为接口,如下图所示。
然后我们运行被调试方主机;当确定被调试方连接到管道时,我们可以将其中断。例如:
被调试方连接上管道,如下图所示。
现在我们可以将其中断,选择“调试”菜单 -> “中断”选项,如下图所示。
当命令行窗口提示符为“kd”时,代表我们正控制着被调试方,如下图所示。
此时被调试方被冻结,等待着调试方的命令。通过运行“g”命令,我们可以释放被调试方并使其继续运行,如下图所示。
本文由 看雪翻译小组 木无聊偶 编译,来源 hasherezade's 1001 nights
转载请注明来自看雪论坛