Windows内核驱动攻击 (Pt. 1) - 环境搭建

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第1张图片

这是接下来一系列关于通过驱动漏洞进行Windows内核驱动攻击里的第一部篇。

在这个项目里我将会使用的带漏洞驱动是HackSys Extreme Vulnerable Driver, 你可以写一系列的基于IOCTL的攻击。

这个驱动可以下载x86和amd64两个已编译版本。这篇文章中我将使用x86版本, 因为会更好理解。

为了热插拔加载驱动到Windows里,HackSys推荐使用OSR Driver Loader。

虚拟机通信设置

我的操作系统是Linux,所以我无法在我的电脑上跑WinDbg来与win7虚拟机通信。

所以我最后设置了两个虚拟机(均使用相同的Win7 Sp1 x86 镜像)。然后我使用Virtual Box来在我的Linux上设置了一个文件,我通过这个文件来建立两个虚拟机之间的通信。

在虚拟机电源关闭的情况下,我设置了第一个虚拟机的Serial Port。这个虚拟机将被用于运行WinDbg的调试。

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第2张图片

第二个用于安装HackSys驱动的虚拟机的设置和第一个类似。

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第3张图片

这样,两个虚拟机间通过/tmp/win_link的通信就完成了!

虚拟机调试设置

现在虚拟机配置好了,我们要做些设置来让通信运行起来。

打开用于调试的虚拟机并且安装WinDbg。完成后我们需要设置环境变量来告诉WinDbg内核符号的来源。设置_NT_SYMBOL_PATH环境变量到https://msdl.microsoft.com/download/symbols。搞定!

现在打开被攻击的虚拟机,我们需要打开Windows调试启动的选项。

首先我们到command prompt里把现在的启动设置复制到一个我们将编辑的新入口:

bcdedit /copy {current} /d "Debug"

这个命令会产出一个我们将要用于引用新的调试选项的GUID。现在我们开通启动选项的调试模式。

bcdedit /debug on

搞定!我们在这个虚拟机上现在拥有一个打开了调试选项的开机设置,它将会通过我们的通信文件传递信息给用于调试的虚拟机。

现在我们回到用于调试的虚拟机并打开WinDbg。去到File -> Kernel Debug并输入115200来进行通信,使用com1当接口。

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第4张图片

重启被攻击的虚拟机,并在启动菜单里选择“Debug”。让他进入到桌面,之后通过选择

Debug -> Break 在WinDbg里创建一个中断使被调试的Windows虚拟机中断。如果WinDbg给你一个

kd> 命令行,并且被攻击的虚拟机卡住了,那恭喜你,成功中断了!

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第5张图片

安装HackSys驱动

现在虚拟机已经被设置成可以调试,我们将要把HackSys驱动装到被攻击的虚拟机来攻击他。

驱动默认使不会很多调试信息,所以我们要打开这些调试信息。

当虚拟机被中断时,我们可以通过以下命令来改变WinDbg里的 Default Mask。

ed nt!Kd_Default_Mask 8

你可以通过在kd> 里输入 g 来继续虚拟机的运行。我们将这样做,进而安装驱动。

假设你已经有了一开头我提到的那些驱动以及安装程序,我们就可以开始装驱动了。打开OSR你可以设置浏览到驱动路径并且让服务自动开启,然后注册这个服务。当注册完成直接开始服务。

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第6张图片

做了这些以后,WinDbg会有些调试的信息。

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第7张图片

现在驱动安装好了并且在运行了,我们将安装HackSys驱动的符号,这样WinDbg才可以更有用。

我们可以通过以下命令在WinDbg里找到HEVD模块

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第8张图片

最后一行就是HEVD驱动,deferred代表WinDbg没有加载任何符号。

我们可以通过以下命令打开路径调试信息来找到放HEVD的pdb的位置:

1: kd> !sym noisy

noisy mode - symbol prompts on

尝试打印全部HEVD的函数,我们可以找到Windbg需要我们放HEVD pdb文件的位置。

1: kd> x HEVD!*

SYMSRV:  https://msdl.microsoft.com/download/symbols/HEVD.pdb/D241CC04CE0B472CB88B1476958369FB1/HEVD.pdb not found

SYMSRV:  C:\ProgramData\dbg\sym\HEVD.pdb\D241CC04CE0B472CB88B1476958369FB1\HEVD.pdb not found

DBGHELP: c:\hacksysextremevulnerabledriver\compile\drv\vulnerable\i386\HEVD.pdb - file not found

*** ERROR: Module load completed but symbols could not be loaded for HEVD.sys

DBGHELP: HEVD - no symbols loaded

如果它没法在线找到,第二选择就是这个地方

C:\ProgramData\dbg\sym\HEVD.pdb\D241CC04CE0B472CB88B1476958369FB1\HEVD.pdb.

在调试的虚拟机上存个和你的驱动版本相同的pdb文件并且运行.reload来重新加载符号。所以你现在可以运行:

0: kd> x HEVD!*

SYMSRV:  C:\ProgramData\dbg\sym\HEVD.pdb\D241CC04CE0B472CB88B1476958369FB1\HEVD.pdb - file not found

DBGHELP: HEVD - private symbols & lines

c:\symbols\HEVD.pdb\D241CC04CE0B472CB88B1476958369FB1\HEVD.pdb

a159f018          HEVD!g_UseAfterFreeObject = 0x00000000

a159f004          HEVD!__security_cookie_complement = 0x5ea60d27

a159e030          HEVD!KeTickCount = struct _KSYSTEM_TIME

a159e110          HEVD!__safe_se_handler_table = void *[]

a159e060          HEVD!_load_config_used = struct IMAGE_LOAD_CONFIG_DIRECTORY32

a159f000          HEVD!__security_cookie = 0xa159f2d8

a159f008          HEVD!__NLG_Destination = struct _NLG_INFO

a15a0006          HEVD!TriggerDoubleFetch (struct _DOUBLE_FETCH *)

a15a0be0          HEVD!TriggerNullPointerDereference (void *)

a159d059          HEVD!__SEH_epilog4 (void)

a159d3b1          HEVD!_NLG_Notify (void)

a159d014          HEVD!__SEH_prolog4 (void)

[...]

来得到所有HEVD里的符号。成功!

测试驱动

最终我们可以测试已经写好的驱动攻击来确保所有的东西正常运行,然后编写我们自己的攻击。

Windows内核驱动攻击 (Pt. 1) - 环境搭建_第9张图片
Windows内核驱动攻击 (Pt. 1) - 环境搭建_第10张图片

它可以通过pool overflow攻击来使用系统权限打开cmd.exe。准备完毕,下一个阶段,让我们开始逆向吧!

本文由看雪论坛 wx_rd.cheung 原创,转载请注明来自看雪社区

你可能感兴趣的:(Windows内核驱动攻击 (Pt. 1) - 环境搭建)