【技术分享】渗透测试中的LLMNR/NBT-NS欺骗攻击

阅读量    247400 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

http://p0.qhimg.com/t01e7b889b1c79d8441.jpg

作者:shan66

预估稿费:140RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

简介 

LLMNR&NBT-NS 欺骗攻击是一种经典的内部网络攻击,然而由于一方面了解它的人很少,另一方面在Windows中它们是默认启用的,所以该攻击到现在仍然是有效的。在本文中,我们首先为读者解释什么是LLMNR&NBT-NS攻击,然后介绍如何通过该攻击进行渗透测试,最后,给出针对该漏洞的防御措施。


什么是LLMNR和NetBIOS名称服务器广播?

当DNS名称服务器请求失败时,Microsoft Windows系统就会通过链路本地多播名称解析(LLMNR)和Net-BIOS名称服务(NBT-NS)试图在本地进行名称解析。    


LLMNR和Netbios NS广播有什么问题吗?

当DNS名称无法解析的时候,客户端就会将未经认证的UDP广播到网络中,询问它是否为本地系统的名称。 事实上,该过程是未被认证的,并会广播到整个网络,从而允许网络上的任何机器响应并声称是目标机器。 


什么是LLMNR / NBT-NS中毒攻击?

通过侦听LLMNR和NetBIOS广播,攻击者可以伪装成受害者(客户端)要访问的目标机器,从而让受害者乖乖交出相应的登陆凭证。在接受连接后,攻击者可以使用Responder.py或Metasploit等工具将请求转发到执行身份验证过程的流氓服务(如SMB TCP:137)。 在身份验证过程中,受害者会向流氓服务器发送用于身份认证的NTLMv2哈希值,这个哈希值将被保存到磁盘中,之后就可以使用像Hashcat或John Ripper(TJR)这样的工具在线下破解,或直接用于 pass-the-hash攻击。

在Windows中,LLMNR和NBT-NS是默认启用的,并且了解这种攻击的人很少,所以我们可以在内部渗透测试中利用该攻击来收集凭据。为此,我们可以在使用其他攻击手段进行测试的过程中,可以让Responder.py一直运行着。 


Linux和苹果用户是否受该攻击的影响?

是的,Linux和苹果客户端也使用类似的协议,即多播DNS(mDNS),该协议会监听TCP:5353端口。有关mDSN的更多信息,请参阅mDNS的维基百科页面。

典型的LLMNR / NetBIOS名称服务器攻击

下图显示了用户因为无法解析服务器名称而遭受这种攻击的典型场景。

http://p9.qhimg.com/t01e6d4fba4ce4fb6c9.png


攻击过程详解

1. 用户发送不正确的SMB共享地址\ SNARE01

2. DNS服务器响应\SNARE01 – NOT FOUND

3. 客户端进行LLMNR / NBT-NS广播

4. 响应者告诉客户端它是SNARE01并接受NTLMv2哈希值

5. 响应者将错误发送回客户端,因此最终用户如果不是精于此道的话,通常不会引起警觉


实例:使用Kali&Responder.py

下面,我们通过一个实际例子来演示此攻击的危害性:使用Kali Linux和Responder.py在内部渗透测试期间从网络捕获用户凭据。

从github安装最新版本的responder软件: 

root@kali:~# git clone https://github.com/SpiderLabs/Responder.git
Cloning into 'Responder'...
remote: Counting objects: 886, done.
remote: Total 886 (delta 0), reused 0 (delta 0), pack-reused 886
Receiving objects: 100% (886/886), 543.74 KiB | 0 bytes/s, done.
Resolving deltas: 100% (577/577), done.

运行Responder.py,使用您的本地接口和IP地址,具体如下所示: 

root@kali:~# cd Responder/
root@kali:~/Responder# python Responder.py -i 192.168.210.145 -I eth0

这样就可以启动Responder.py了:

http://p0.qhimg.com/t011a4940b1b322c9ab.png

Responder.py运行后,我们模拟一个用户键入错误的SMB服务器名称,比如使用SNARE01而不是SHARE01。 

下面,从客户端计算机输入错误SMB服务器名称: 

http://p5.qhimg.com/t015a7e809ed1eb3699.png

注意:实验室环境中的客户端计算机是Windows 2008 Server R2

在客户端广播不正确的服务器名称的几秒钟时间内,Responder.py就完成了对这个广播请求的应答,并将NTLMv2哈希值写入了硬盘。 

http://p9.qhimg.com/t017846a16365db7798.png

最后一步是破解NTLMv2哈希值,这一步成功与否取决于目标环境中的密码策略的复杂性,这可能需要等待一些时间。 当密码策略是已知的,或者怀疑密码安全性较高的时候,ocl-hashcat将是离线破解的上上之选。由于在测试实验室环境中我们故意使用了不安全的密码,因此这里使用john来破解NTLMv2哈希值: 

http://p2.qhimg.com/t011e6cee93b7e01937.png


如何保护网络免受LLMNR / NBT-NS中毒攻击

好消息是:这种攻击是相当容易预防的。注意,为此需要禁用LLMNR和NetBIOS名称服务,如果您只禁用LLMNR的话,则Windows将无法解析的名称转移到NetBIOS名称服务器以进行解析。


禁用NetBIOS名称服务

似乎没有办法使用GPO来禁用NetBIOS名称服务(如果你知道的话,请在回复中告诉我们!),其手册说明如下所示。

1. 请依次打开:控制面板网络和Internet 网络连接

2. 右键单击网络接口,选择属性,双击“Internet Protocol Version 4 TCP/IPv4”

3. 在下一个屏幕上,单击高级,然后选择WINS选项卡

4. 单击“Disable NetBIOS over TCP/IP”旁边的单选按钮

具体操作,请参阅下面的屏幕截图: 

http://p2.qhimg.com/t01e9f8c0dc7525db2f.png


禁用LLMNR

幸运的是,您可以使用GPO来禁用LLMNR,具体如下所示:

1. Start => Run => gpedit.msc

     打开“Local Computer Policy”=>“Computer Configuration”=>“Administrative Templates”=>“Network”=>“DNS Client”

2. 单击“Turn Off Multicast Name Resolution”,并将其设置为“Enabled”

http://p8.qhimg.com/t01503d8e7658fdb236.png


小结

本文介绍了一种经典的内部网络攻击方法,虽然这种方法由来已久,但是由于了解这种攻击的人非常少,另外由于相关设置在Windows中是默认启用的,所以到目前为止,这种攻击手段仍然行之有效。 

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多