初学Windows内核漏洞利用(一):搭建实验环境 http://bbs.pediy.com/thread-218838.htm
最近我刚刚开始学习Windows内核漏洞利用,因此决定以博客的形式分享一些我的学习心得。
上一部分介绍了如何搭建实验环境;现在,我们将接触Ashfaq Ansari所开发的HEVD(HackSys Extreme Vulnerable Driver,HackSys Team小组所开发的一个Kernel Driver,其中包含大量常见漏洞且原理简单,主要考验各种利用方法,项目网址:8f9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5j5h3y4C8M7%4W2K6N6r3g2S2L8g2)9J5c8V1S2S2j5$3E0e0P5i4y4q4P5s2c8J5k6h3#2W2g2Y4g2D9L8X3g2J5j5h3u0D9k6f1c8J5K9i4k6W2M7R3`.`.),进而将其熟练掌握。下一部分,我计划简要介绍一些漏洞示例和利用技术。
本文所用到的软硬件环境:
·上一部分所描述的实验环境;
·HackSys Extreme Vulnerable Driver(HEVD),包括预构建版本(下载网址:732K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5j5h3y4C8M7%4W2K6N6r3g2S2L8g2)9J5c8V1S2S2j5$3E0e0P5i4y4q4P5s2c8J5k6h3#2W2g2Y4g2D9L8X3g2J5j5h3u0D9k6f1c8J5K9i4k6W2M7W2)9J5c8Y4u0W2L8r3g2S2M7$3g2K6)和源代码(下载网址:483K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5j5h3y4C8M7%4W2K6N6r3g2S2L8g2)9J5c8V1S2S2j5$3E0e0P5i4y4q4P5s2c8J5k6h3#2W2g2Y4g2D9L8X3g2J5j5h3u0D9k6f1c8J5K9i4k6W2M7R3`.`.);
·OSR驱动加载器(下载网址:e5cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2G2M7%4u0G2L8X3I4A6L8X3g2Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0W2j5$3k6E0i4K6y4r3j5i4u0@1K9h3y4D9k6g2)9K6c8o6p5#2y4H3`.`.);
·DebugView工具(下载网址:1b6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1k6h3y4Z5L8X3g2@1i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8Y4y4&6M7$3W2F1N6r3g2J5L8X3q4D9M7#2)9J5c8X3c8W2j5Y4g2Y4N6X3W2W2N6#2)9J5k6h3q4K6M7s2R3`.,位于Sysinternals工具集中,下载网址:13fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1k6h3y4Z5L8X3g2@1i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8Y4y4&6M7$3W2F1N6r3g2J5L8X3q4D9M7#2)9J5c8X3u0T1z5o6b7J5x3o6j5J5);
·Visual Studio 2012开发环境(可以选择你喜欢的版本)。
安装并测试HEVD
首先,我将演示如何安装HEVD:我们将搭建并配置调试方和被调试方,使得调试字符串和HEVD的符号可见;我们还将接触专项利用工具。
查看调试字符串
HEVD和专项利用工具以调试字符串的形式打印大量的信息。我们既可以从调试方主机(使用WinDbg调试器),也从被调试方主机(使用DebugView工具)查看这些信息。
为了查看驱动安装过程中所打印的字符串,我们将在安装HEVD之前进行适当的配置。
调试方:
为了获得命令行提示符“kd”,我们需要中断被调试方的执行流程(在WinDbg调试器中,选择“调试”菜单 -> “中断”选项)。然后,我们使用如下命令,启动打印调试字符串的功能:
之后,我们通过执行“g”命令,使被调试方恢复运行。
注意:开启该功能会使被调试方运行速度变慢;因此,应尽可能在本地查看调试字符串(即只在被调试方)。
被调试方:
我们需要以管理员权限运行DebugView工具,然后选择“拦截”菜单 -> “拦截内核模式”,如下图所示。
安装驱动
首先,我们将预构建的程序包(驱动+漏洞)下载到被调试方(即被攻击主机),安装并测试。我们可以在HackSys Team小组的github页面发布版块(网址:710K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5j5h3y4C8M7%4W2K6N6r3g2S2L8g2)9J5c8V1S2S2j5$3E0e0P5i4y4q4P5s2c8J5k6h3#2W2g2Y4g2D9L8X3g2J5j5h3u0D9k6f1c8J5K9i4k6W2M7W2)9J5c8Y4u0W2L8r3g2S2M7$3g2K6)找到它。程序包丽包括两个版本的驱动,有漏洞/无漏洞;我们选择有漏洞,32位系统编译(i386)的版本,如下图所示。
我们选择服务启动类型为“自动”;然后点击“注册服务”按钮,在其成功后点击“启动服务”。
我们可以在WinDbg调试器(调试方主机)和被调试方主机上的DbgView工具上看到所打印的HEVD旗标信息。
添加符号
HEVD的预编译程序包自带符号文件(sdb文件),我们可以将其添加到调试方。首先,我们通过发送中断信号来停止被调试方的运行,并使用“lm”命令查看所有已加载模块。
为了找到HEVD模块,我们通过如下命令来设置过滤器:
从结果可见,HEVD模块没有附加任何符号;还好,这很容易修复。首先,为了打印WinDbg调试器在搜索符号过程中参考路径的所有信息,我们使用如下命令开启符号加载通知:
然后,使用如下命令尝试重载符号:
…并尝试再次引用它们。从所见到的路径中,我们可以复制pdb文件;在将pdb文件移动到调试方主机的合适位置之后,重新加载符号。可以通过使用如下命令尝试打印HEVD中的所有函数,来测试符号是否成功添加:
测试漏洞利用工具
相同的程序包中还包含一组专项利用工具,我们可以通过执行适当的命令来运行其中每一个工具。下面我们尝试使用其中一些工具,并将cmd.exe设置为待运行的程序,如下图所示。
使用Pool Overflow漏洞利用工具,如下图所示。
如果整个漏洞利用过程运行成功,目标程序(cmd.exe)将被分配更高的权限。
通过执行命令“whoami”可以确认,该程序确实提权运行了,结果如下图所示。
同时,我们可以在调试方主机上看到漏洞利用工具所打印的调试字符串,如下图所示。
除了Double Fetch漏洞之外,其他所有的漏洞利用工具在单核环境下都将运行良好;如果我们想要(Double Fetch)漏洞利用工具生效,就需要保证被调试主机为双核环境。
注意:某些漏洞利用工具并不是100%可靠,在使用它们之后可能会造成系统崩溃;别担心,这很正常。
驱动你好,开始交流!
与用户层情况类似,内核层的漏洞利用同样开始于寻找能够向程序提供输入的点;然后,我们需要找到能够干扰执行流程(与用户层不同,内核层的一次崩溃将直接导致蓝屏!)的输入;最终,我们将尝试精心构造输入,以便我们能够控制有漏洞程序的执行流程。
为了能够从用户模式与驱动交流,我们将向其发送IOCTL(Input-Output control, 输入/输出控制)信号。IOCTL信号允许我们从用户层向驱动发送一些输入缓冲区;这就是我们可以尝试漏洞利用突破的点。
HEVD包含了各种类型漏洞的样例,其中每一个都可以通过使用不同的IOCTL信号来触发,并通过所提交的缓冲区来利用;其中某些(并非所有)漏洞在触发时将导致系统崩溃。
查找设备名称与IOCTL信号列表
我们在与驱动交流之前,需要知道两件事情:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
hackyzh 没想到,真的有人翻译内核漏洞系列了,不过fuzzsecurity网站上的内核漏洞比较全一点