欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

BadTunnel:跨网段劫持广播协议

来源:本站整理 作者:佚名 时间:2016-06-19 TAG: 我要投稿


0x00 简介
本文提出了一种新的攻击模型,可以跨网段劫持TCP/IP广播协议,我们把它命名为“BadTunnel”。
利用这种方法,可以实现跨网段的NetBIOS Name Service Spoofing攻击。无论攻击者和用户是否在同一网段,甚至中间存在防火墙或NAT,只要用户打开IE或Edge浏览器访问一个恶意页面,或打开一个特殊构造的Office文档,攻击者就可以劫持用户系统对任意NetBIOS名称的解析,从而实现仿冒本地网络的打印服务器、文件服务器等。
通过劫持“WPAD”名称,还可以进一步实现劫持用户的所有网络通信,包括一般网络访问,和Windows Update service以及Microsoft Crypto API更新Certificate revocation list的通信等。而一旦能劫持网络通信,配合类似Evilgrade的工具(参考链接【1】),也很容易在系统上运行任意程序。
这种方法对没有安装2016年6月补丁的所有版本Windows都有效。可以通过所有版本的IE和Edge、所有版本的MS Office、以及大量第三方软件触发。事实上只要存在能嵌入file URI scheme或UNC path的地方,就可以触发BadTunnel 攻击。如果在一个快捷方式中将图标路径设置为恶意file URI scheme或UNC path,只要用户在资源管理器看见这个快捷方式,就会触发BadTunnel攻击。所以BadTunnel可以通过网页、邮件、U盘等多种手段进行利用。甚至还可能威胁WEB服务器和SQL服务器等(参考链接【2】)。
(本文并未包含BadTunnel相关研究的所有内容,其余部分将在BlackHat US 2016的演讲“BadTunnel: How do I get Big Brother power?”中发布。)
0x01 背景知识
NetBIOS是一套古老的协议。1987年IETF发布RFC 1001与RFC 1002,定义了NetBIOS over TCP/IP,简称NBT。NetBIOS包含三种服务,其中之一是名称服务(Name service),即NetBIOS-NS,简称NBNS。NBNS可以通过发送局域网内广播来实现本地名称解析。
当你试图访问\\Tencent\XuanwuLab\tk.txt时,NBNS会向广播地址发出NBNS NB query:
谁是“Tencent”?
而本地局域网内的任何主机都可以回应:
192.168.2.9是“Tencent”。
然后你的电脑就会接受这个回应,然后去访问\\192.168.2.9\XuanwuLab\tk.txt。
这套机制谈不上安全,但由于发生在局域网内,而局域网通常被认为是相对可信的环境。所以虽然很早就有人意识到可以在局域网内假冒任意主机,但这并不被认为是漏洞——就像ARP Spoofing并不被认为是漏洞一样。
WPAD(Web Proxy Auto-Discovery Protocol)是另一套有超过二十年历史的古老协议,用于自动发现和配置系统的代理服务器。几乎所有操作系统都支持WPAD,但只有Windows系统默认启用这个协议。按照WPAD协议,系统会试图访问http://WPAD/wpad.dat,以获取代理配置脚本。
在Windows上,对“WPAD”这个名称的请求很自然会由NBNS来处理。而如前所述,在局域网内,任何主机都可以声称自己是“WPAD”。所以,这套机制也谈不上安全,但由于同样发生在局域网内,而局域网通常被认为是相对可信的环境,所以虽然十几年前就有人意识到可以在局域网内利用WPAD劫持假冒任意主机,2012年被发现的Flame蠕虫也使用了这种攻击方式,但这并不被认为是漏洞——就像ARP Spoofing并不被认为是漏洞一样。
接下来还得再提一下TCP/IP协议。NBNS是用UDP实现的。UDP协议最主要的特点是无会话。无论是防火墙、NAT还是任何其它网络设备,都无法分辨一个UDP包属于哪个会话。只要网络设备允许IP1:Port1->IP2:Port2,就必然同时允许IP2:Port2->IP1:Port1。
刚才我们说过NBNS使用广播协议,通过向本地广播地址发送查询来实现名称解析。但NBNS和绝大多数使用广播协议的应用一样,并不会拒绝来自本网段之外的回应。也就是说,如果192.168.2.2向192.168.2.255发送了一个请求,而10.10.10.10及时返回了一个回应,也会被192.168.2.2接受。在某些企业网络里,这个特性是网络结构所需要的。
0x02 实现方法
所以,假如我们能在NBNS发出名称解析请求的时候,从本网段之外返回一个回应,也同样会被NBNS接受,就可以实现跨网段NBNS Spoofing。但存在几个问题:
1、大多数主机都开启了防火墙,从本地网络之外主动向系统发送数据似乎是不可能的。即使不考虑防火墙,从互联网上主动向一个局域网IP发送数据似乎更是不可能的。也就是说只能对有公网IP又没有防火墙的系统进行NBNS Spoofing?
2、NBNS协议内部封装的几乎就是DNS报文,所以也有Transaction ID。只有Transaction ID匹配的回应包才会被接受。这个问题如何解决?
3、本地网络之外的主机接收不到NBNS NB query广播,又怎么知道该在什么时候发出NBNS Spoofing数据包?
幸运的是,这些问题都可以解决。
首先,Windows系统的NBNS使用且只使用137/UDP端口。“使用且只使用”的意思是:系统发起的NBNS通信,源端口和目标端口都永远是137/UDP。也就是说,如果一台内网的主机192.168.2.2向10.10.10.10发起NBNS查询请求,大概会是这样:
192.168.2.2:137 -> NAT:54231 -> 10.10.10.10:137
而10.10.10.10返回查询结果时会是这样:
192.168.2.2:137
也就是说,无论192.168.2.2的本机防火墙,还是NAT,还是中间的任何其它网络设备,只要允许查询请求发出,并允许查询结果返回,就至少需要在一段时间内,允许10.10.10.10:137发出任何UDP包到192.168.2.2:137。这其实就开启了一条双向UDP隧道。BadTunnel,指的就是这个Tunnel:
192.168.2.2:137  NAT:54231 10.10.10.10:137
有个简单的实验可以帮助你理解这个隧道。准备两台开启了防火墙的系统,IP地址分别是192.168.2.2和192.168.3.3:

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载