Hot Potato-Windows上的提权漏洞

阅读量149821

|

发布时间 : 2016-01-18 11:49:42

x
译文声明

本文是翻译文章,文章来源:360安全播报

原文地址:http://foxglovesecurity.com/2016/01/16/hot-potato/

译文仅供参考,具体内容表达以及含义原文为准。

https://p5.ssl.qhimg.com/t01c22ef9b1fa56f069.png

Windows 7,8,10,Server 2008以及Server 2012版本的操作系统平台中存在提权漏洞,攻击者可以利用这一漏洞发动新型的网络攻击。

工作机制

在Windows操作系统的默认配置下,Hot Potato(也被称为Potato)能够利用Windows中的漏洞来获取本地计算机的控制权限,即通过NTLM relay(特别是HTTP->SMB relay)和NBNS协议欺骗。

你可能会觉得这些内容似成相识,那是因为谷歌的安全技术人员曾经披露过类似技术的相关内容-https://code.google.com/p/google-security-research/issues/detail?id=222。实际上,我们所使用的一些代码正是从他们的概念验证实例以及应用扩展中“盗取”来的(听起来有些尴尬)。

通过这项技术,我们可以在安装了Windows操作系统的工作站中为自己提权,并将自己的低级权限提升至“NT  AUTHORITYSYSTEM”-在Windows操作系统中,这是可获取到的最高等级的权限了。

这一点至关重要,因为很多的组织和机构不得不依靠Windows的用户账号权限来保护他们组织内部网络的安全。比如说,如果有一名攻击者能够得到目标网络中任意一台Windows工作站的高级访问权限,那么他们就可以利用这种访问权限来进行“横向攻击”,并入侵同一网域中的其他主机。作为一名攻击者,我们通常会通过目标主机中的一个低级用户或者服务账号来获取目标主机的访问权限。而获取到目标主机的高级访问权限是攻击者在渗透测试中的关键步骤,这一步通常会在一种特殊的方式下进行,因为目前还没有已知的漏洞或者技术可以直接使用。

攻击者在目标主机中实现权限提升时所使用的技术并不算新颖,但是他们使用这项技术的方式却令人耳目一新。微软公司已经了解到了所有的相关信息,但不幸的是,在不破坏系统向后兼容性的情况下,这些问题是很难进行修复的,所以攻击者已经使用这项技术长达十五年之久了。

这一漏洞利用技术主要有三大部分组成,其中每一部分都可以通过命令行来进行配置。每一部分均对应着一个已知类型的攻击,而且这些攻击方式也已经被使用多年了:

1.本地NBNS欺骗

NBNS是一个UDP广播协议,该协议是 TCP/IP 上的 NetBIOS (NetBT) 协议族的一部分,它在基于 NetBIOS 名称访问的网络上提供主机名和地址映射方法,Windows操作系统通常会使用这一协议来进行域名解析。当你(或Windows)进行一次DNS查询时,Windows首先会检测“hosts”文件。如果不存在可用资源的话,那么它将会尝试进行DNS查询。如果搜索失败,那么系统又将会进行NBNS查询。NBNS协议会在本地广播域中向所有的主机发出询问-“谁知道主机XXX的IP地址?”。网络中的空闲主机都会对这一消息产生应答。

在渗透测试过程中,我们通常会对本地网络中的网络流量和NBNS请求的应答信息进行嗅探和观察。我们将会伪装成网络中的主机,并使用我们自己的IP地址对所有的请求进行应答,我们希望能够得到一些有趣的信息。

为了实现权限提升这一目的,我们不能想当然地认为我们能够嗅探到网络流量信息。为什么呢?因为这需要本地管理员权限。那么,我们怎样才能实现NBNS欺骗呢?

如果我们能够提前知道NBNS请求所对应的目标主机的主机名(在此环境下,我们的目标主机IP为127.0.0.1),我们就可以创建一个虚假的应答信息,并快速地使用NBNS应答信息来对目标主机进行泛洪攻击(因为它是一个UDP协议)。其中有一个比较复杂的地方,即NBNS数据包中有一个长度为2子节的数据域-TXID。TXID必须与请求和应答信息相匹配,问题就在于我们无法读取到请求信息。但是我们可以通过快速泛洪攻击并对总共65536个可能值进行快速遍历。

如果目标网络中保存有主机的DNS记录呢?我们可以使用一种名为UDP端口exhaustion(枯竭)的技术来迫使目标系统中所有的DNS查询失败。我们所做的一切都是为了使每一个UDP端口失效。因为这会使得系统在进行DNS查询时没有可用的UDP端口资源,所以DNS将会失效,而此时NBNS请求也将会回退。

在我们的测试过程中,这一方法是百分之百有效的。

2.伪造WPAD代理服务器

在Windows操作系统中,IE浏览器在默认配置下会通过URL:“http://wpad/wpad.dat&#8221”来自动尝试检测网络代理。而且Windows中的一些服务也会采用这一机制,例如Windows Update,而且这似乎是Windows的一种版本依赖。

当然了,并不是所有的网络中都存在URL“http://wpad/wpad.dat&#8221”。因为并不是所有的DNS域名服务器都存在主机“wpad”的。但是我们仍然可以使用NBNS欺骗来进行主机名欺骗。

我们一旦能够伪造NBNS的应答信息,我们就可以对目标主机(127.0.0.1)进行攻击了。我们将会对目标主机使用NBNS应答数据包来进行泛洪攻击。

与此同时,我们将会在本地运行一个HTTP服务器(IP地址为127.0.0.1)。当它接收到了请求(http://wpad/wpad.dat”)之后,它将会产生类似下图所显示的应答信息:

https://p1.ssl.qhimg.com/t01b99c7b68b8f58d30.png

有趣的是,低权限的用户同样可以进行这样的攻击,这将会影响目标主机中所有的用户,包括管理员账户和系统账户在内。在下面所给出的截图中,两名用户同时登录到了同一台设备中,低权限用户正在进行本地NBNS欺骗,在第二张截图中大家可以看到高权限用户将会受到攻击的影响。

http://p3.qhimg.com/t01745fcb1a3d113322.png

http://p3.qhimg.com/t01342823bb77e6b2b5.png

3.HTTP -> SMB HTLM Relay

大家应该都听说过NTLM relay,但是大家通常会将其误解为针对Windows NTLM认证的攻击。攻击者可以通过中间人攻击来对NTLM协议进行攻击。如果攻击者能够诱骗目标用户在其设备上使用NTLM协议进行身份验证,攻击者就可以将身份验证请求转发到其他的设备上。

微软公司已经通过禁用NTLM认证协议来修复了这一问题。这也就意味着,SMB -> SMB NTLM relay将无法工作。但是,类似HTTP -> SMB这样的跨协议攻击仍然可以正常使用。

在Potato攻击中,所有的HTTP请求将会被重定向至“http://localhost/GETHASHESxxxxx””,其中的xxxxx表示的是某些唯一标识符。发送至“http://localhost/GETHASHESxxxxx””的请求信息会收到一个请求NTLM认证的应答信息。

当高权限账户进行这样的HTTP请求,比如说,当Windows更新服务发出这样的请求之后,这一命令将会在“NT AUTHORITYSYSTEM”权限下执行。

漏洞利用

整个过程也许看起来会有些古怪,因为Windows在处理代理设置以及WPAD文件时所采用的处理机制就十分的奇怪。当Windows中已经存在相应的WPAD可用资源时,系统将会花费30至60分钟的时间来刷新WPAD文件。

我们在此所列举出的相关技术是按其复杂程度从最简单到最复杂来进行排序的。列举在后面的漏洞利用技术都可以在之前的所有操作系统版本中使用。我们在下方给出了相应的演示视频。

Windows 7-https://youtu.be/Nd6f5P3LSNM

Windows Server 2008- https://youtu.be/z_IGPWgL5SY

Windows 8/10/Server 2012- https://youtu.be/Kan58VeYpb8

相关代码

如果大家想要了解更多有关的信息和操作过程,请查看我们的GitHub主页:https://github.com/foxglovesec/Potato

本文翻译自360安全播报 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
WisFree
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66