HEVD 内核攻击:漏洞攻击的完全实现及SMEP绕过(四)

本文讲的是HEVD 内核攻击:漏洞攻击的完全实现及SMEP绕过(四)

到目前为止,我们还没有完全实现漏洞的攻击。让我们回顾一下第2篇里为DoS PoC创建的漏洞利用步骤,现在我们可以修改其中一些步骤,来实现SYSTEM shell。

第一步,生成cmd.exe进程

虽然这一步非常简单,但是要在Python中实现,还是需要一些额外的代码,与C语言代码相比,我们将使用Kernel32.dll中的CreateProcess API来启动shell。查看函数原型,该函数需要为调用设置两个结构体,其中一个将使用我们启动的cmd.exe进程的PID返回给我们。稍后我们需要使用shellcode来设置我们的结构体。

第一个是STARTUPINFO结构体(STARTUPINFO是用于指定新进程的主窗口特性的一个结构)。使用Python ctypes可以在我们的脚本中重新创建STARTUPINFO结构体,如下所示:

我们可以在脚本中引用这个结构体,如下所示:

我们需要的是一个PROCESS_INFORMATION结构,因为这个结构更易于管理,在ctypes中看起来是这样:

这里包含了dwProcessId dword中创建的进程PID。通过创建这两个结构,我们可以参考CreateProcess函数原型并将我们的API调用放在一起:

第二步和第三步和第2篇里的过程一模一样,大家可以爬楼。

第四步,使用shellcode分配缓冲区

首先将shellcode翻译成Python。这也包括将cmd.exe进程的PID动态插入到shellcode中,这样我们就创建了一个可以接收我们需要的PID并创建shellcode的函数:

利用VirtualAlloc函数复制我们的shellcode区域,当然前提是确保指定的分配缓冲区是可执行的。假设一切顺利,我们就可以将shellcode复制到缓冲区(ctypes提供一个memmove()函数),然后返回shellcode所在的地址:

第五步,创建shellcode的缓冲区

这一步又与第2章提到的DoS PoC非常相似。不过,这一次,我们的函数还需要收到shellcode所在的分配地址,以便我们可以将它添加到我们的缓冲区。我们的DoS PoC缓冲区由2048“A”组成,其后是8“B”和8“C”。 “C”是在rip寄存器中结束的,所以我们要用我们的shellcode地址来替换它:

第六步,触发漏洞

首先生成cmd.exe并获取它的PID,然后分配shellcode并将该地址插入到我们创建的缓冲区。

如果一切顺利的话,会出现以下的情景:

至此,漏洞就可以完全实现了。不过,我们在实际的测试中发现,这些漏洞攻击只是在Windows 8以前的系统版本中运行的很好,由于Windows 8及更高版本上已经配置了一些新的缓解措施,所以这些漏洞利用就会被禁止。

主管模式执行保护(SMEP)有点像ring 0模式下的DEP,是内核的一种缓解措施,我们可以将它简单的理解成禁止在内核态下执行用户空间的代码。换句话说,当以内核模式运行时,处理器将不会运行映射到用户模式存储器的指令。

在Windows 7版本中,我们是将shellcode复制到内存中。一旦我们劫持了内核中的执行流程,我们就会将其指向带有shellcode的用户内存缓冲区,但如果我们在启用了SMEP的系统上也这么做,那么一旦处理器试图执行用户内存缓冲区的任何指令,则运行就会中断。

正如开始的时候我说SMEP有点像DEP,绕过DEP比较常见的方法就是ROP链,因此绕过SMEP的常见方法也是比较简单的方法也是ROP链,在DEP中构造ROP链需要dll的基址,其实在SMEP中构造ROP链需要动态链接库内核的地址,而获取内核地址的一种非常好用的方法就是NtQuerySystemInformation。

那么我们如何绕过SMEP呢?最简单的途径就是简化CR4寄存器,以便让Windows认为是处理器不支持SMEP。这与我们的Windows 7 HEVD堆栈溢出漏洞大致相同,但在我们触发溢出之前,我们必须首先执行ROP链以禁用SMEP。为了构建我们的ROP链,我们必须找到内核的基址,总共分8步:

1.Spawn cmd.exe进程
2.使用shellcode分配缓冲区
3.获取内核基地址
4.构建ROP链
5.获取容易受到攻击的设备句柄
6.获取正确的IOCTL的堆栈溢出功能
7.创建一个将执行重定向到ROP链及shellcode的缓冲区
8.触发漏洞

以上只有第3步和第4步是新步骤,所以我们就直接来叙述这两个步骤,其余的步骤,请参看前文。

第三步,获取内核基址

就像绕过DEP比较常见的方法就是ROP链一样,我们可以使用ASLR,使用ROP来破坏内核中的SMEP可能会受到KASLR的阻碍。当然有各种方法来击败KASLR,但这不在本文的讨论范围之内。

简单来说,利用psapi.dll的EnumDeviceDrivers功能就可以实现这一目标,EnumDeviceDrivers可以检索系统中每个设备驱动程序的加载地址,其中包括返回结果中的实际内核:

第四步,建立ROP链

使用这一步的前提是,假设大家已经很熟悉ROP技术了。

现在我们已经得到了内核基地址,接下来我们将继续构建绕过SMEP的ROP链。这不是很难,因为这是一个非常小的ROP链,只需要把ntoskrnl.exe解析为几个字节数组。

我们的目的就是将控制值弹出到CR4寄存器中。在搜索到可用的ROP后,我们发现没有很多与CR4进行交互的指令,这时 ntoskrnl.exe中的KiFlushCurrentTbWorker函数实际上可以被利用起来:

接下来,我们只需要在内核的地址空间中找到POP RCX就可以了。最后,我们可以构建一个函数,该函数采用内核的基地址和shellcode的用户地址,将CR4值放在该函数中,最后在shellcode缓冲区得到以下代码:

至此,在Windows 8及更高版本上我们也实现了最终的漏洞利用:

原文发布时间为:2017年3月30日

本文作者:xiaohui 

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-11-30 11:40:55

HEVD 内核攻击:漏洞攻击的完全实现及SMEP绕过(四)的相关文章

HEVD内核攻击:漏洞的使用(二)

本文讲的是HEVD内核攻击:漏洞的使用(二), 上一章我们已经把调试环境给设置好了,本章我们就来说说如何来来利用这些漏洞. https://github.com/hacksysteam/HackSysExtremeVulnerableDriver上有很多有趣的漏洞.我们之所以会使用这些有漏洞的驱动程序,是因为我们更熟悉Ring0模式下的有效载荷(Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3,RI

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

本文讲的是HEVD内核攻击:驱动程序的编译.安装.加载及调试(一), HEVD是HackSys的一个Windows的训练项目,是一个存在漏洞的内核的驱动,里面存在多个漏洞,通过ControlCode控制漏洞类型,这个项目的驱动里几乎涵盖了内核可能存在的所有漏洞,从最基础的栈溢出,到池溢出,释放后重用等等类型,是一个非常好的项目.非常适合我们熟悉理解Windows内核漏洞的原理,利用技巧等等. 项目地址:https://github.com/hacksysteam/HackSysExtremeVu

HEVD 内核攻击: 编写Shellcode(三)

本文讲的是HEVD 内核攻击: 编写Shellcode(三), 在上一篇文章中,我们已经能以可控的方式使用内核了.但是,当创建Windows内核漏洞利用时,目标通常都是希望以某种方式获得更高的权限,通常是SYSTEM权限.这时我们就必须用到内核有效载荷. 窃取进程token 使用这个方法的最终目标是使用SYSTEM级别访问权限打开命令提示符.一旦我们在 ring 0中获取了执行的控制权限,就有办法来打开命令提示符.最常用的方法是窃取特权进程的进程token, Windows安全模型非常复杂的,不

Linux内核RCE漏洞CVE-2016-10229 Linux kernel 4.5以下版本可能被攻击者利用进行DoS攻击

在早些年,总有人说Linux很安全,但近几个月Linux内核的漏洞屡次出现,在2016年中的时候还爆出 linux内核入侵者被抓获 事实证明linux早就被黑客盯上了 .这次漏洞由于涉及面也不小,绿盟科技发布安全威胁通告. 近日,Linux内核爆出一则高危漏洞(CVE-2016-10229,CNNVD-201703-210),在Linux 4.5之前的系统内核中,当recv以MSG_PEEK标志位被调用时,攻击者可以通过UDP来触发一个不安全的二次校验和计算,以此来远程执行代码,可能导致系统被控

Windows XP用户面临新的0day漏洞攻击

一个新的Windows内核0day漏洞正被用于攻击Windows XP用户.微软已经证实了该漏洞,并发出了安全警告.该本地提权漏洞是与一个Adobe Reader漏洞结合起来入侵Windows XP机器,存在漏洞的Adobe Reader版本包括9. 5.4.10.1.6和11.0.02.该提权漏洞允许攻击者在内核模式下执行任意代码,包括安装恶意程序.浏览.修改或删除数据,创建拥有完整 管理权限的帐号.安全公司建议Windows XP用户将Adobe Reader升级到最新版本,以及升级到较新的

Web服务器防木马及漏洞攻击的权限配置

从系统安装到用户安全设置.系统权限设置三方面进行讲解Web服务器防木马及漏洞攻击的权限配置,希望通过这篇文章可以让你的服务器更加安全. 一.系统的安装   1.按照Windows2003安装光盘的提示安装,默认情况下2003没有把IIS6.0安装在系统里面. 2.IIS6.0的安装 以下为引用的内容: 开始菜单->控制面板->添加或删除程序->添加/删除Windows组件 应用程序 ---ASP.NET(可选) --启用网络 COM+ 访问(必选) --Internet 信息服务(IIS

Win2000中文版防范输入法漏洞攻击

漏洞描述 大家都知道,在安装Windows 2000简体中文版的过程中,默认情况下同时安装了各种简体中文输入法.这些随系统装入的输入法可以在系统登录界面中使用,以便用户能使用基于字符的用户标识和密码登录到系统,在这种情况下,应限制提供给用户的功能.然而,在默认安装的情况下,Windows 2000中的简体中文输入法不能正确地检测当前的状态,导致在系统登录界面中提供了不应有的功能.进而,一些别有用心的用户可以通过直接操作该计算机的键盘得到当前系统权限,运行他选择的代码.更改系统配置.新建用户.添加

预防查询语句数据库注入漏洞攻击

简单地说,Sql注入就是将Sql代码传递到应用程序的过程,但不是按照应用程序开发人员预定或期望的方式插入,相当大一部分程序员在编写代码的时 候,并没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.这种漏洞并非系统照成,而是由程序员在编程中忽略了安全因素.Sql注入漏洞攻击原 理就是利用非法参数获得敏感信息,收集整理,分析出管理员账号密码. 当开发应用程序时,尤其是有关数据库信息的查询,查询语句中可能会有拼接字符串注入漏洞,这便会导致用户资料泄露.那么该如何防范此类漏洞的出现. 可以为查

文档型漏洞攻击研究报告

本文讲的是文档型漏洞攻击研究报告, 研究背景 由于反病毒技术快速发展及免费安全软件在全球的高度普及,恶意程序的传播变得越来越困难.自2013年以来,中国一直是全球个人电脑恶意程序感染率最低的国家. 但是随着漏洞挖掘及利用技术越来越公开化,导致越来越多的黑客更加倾向于利用常见办公软件的文档漏洞进行恶意攻击,特别是在一些APT(Advanced Persistent Threat)攻击中,更是体现得淋漓尽致.针对特定目标投递含有恶意代码的文档,安全意识薄弱的用户只要打开文档就会中招. 对于漏洞文档(