1.LLMNR简介
链路本地多播名称解析(LLMNR)是一个基于域名系统(DNS)数据包格式的协议,可用于解析局域网中本地链路上的主机名称。它可以很好地支持IPv4和IPv6,是仅次于DNS解析的名称解析协议。
2.LLMNR解析过程
当本地hosts和DNS解析失败时,会使用LLMNR解析。LLMNR解析过程如图1-26所示。
1)主机在本地NetBIOS缓存名称中进行查询。
2)如果在缓存名称中没有查询到,则以此向配置的主备DNS服务器发送解析请求。
3)如果主备DNS服务器没有回复,则向当前子网域发送多播,获取对应的IP地址。
4)本地子网域中的其他主机收到并检查多播包。如果没有响应,则请求失败。
从以上工作过程可以明白,LLMNR是以多播形式进行查询的,类似于ARP通过MAC寻找IP地址。这样就存在一个欺骗攻击问题。
图1-26 LLMNR解析过程
3.LLMNR欺骗攻击
假设用户访问一个域名xxx,如图1-27所示,在hosts文件和DNS解析失败时,会通过LLMNR进行广播请求。攻击者利用该广播请求时间向请求用户回复响应IP地址,这时域名xxx映射的IP就是攻击者IP,用户访问域名xxx就会解析到攻击IP,这样攻击者便可以拿到NetNTLM哈希。
4.LLMNR防御措施
1)在Windows系统中依次选择“开始”→“运行”选项,然后输入gpedit.msc命令打开本地组策略管理器,如图1-28所示。
2)依次选择“计算机配置”→“管理模板”→“网络”→“DNS客户端”,如图1-29所示。
3)双击打开“关闭多播名称解析”策略设置,如图1-30所示。
4)将“关闭多播名称解析”策略设置中的状态改为“已禁用”,如图1-31所示。
图1-27 LLMNR欺骗攻击
图1-28 打开本地组策略管理器
图1-29 打开配置DNS客户端
图1-30 打开“关闭多播名称解析”
图1-31 将“关闭多播名称解析”策略设置中的状态改为“已禁用”
1.NetBIOS简介
NetBIOS(Network Basic Input/Output System,网络基本输入输出系统)是一种接入服务网络的接口标准。主机系统通过WINS服务、广播及lmhosts文件等多种模式,把NetBIOS名解析成对应的IP地址,实现信息通信。因占用资源小、传输快的特点,NetBIOS被广泛应用于局域网内部消息通信及资源共享。
2.NetBIOS服务类型
NetBIOS支持面向连接(TCP)和无连接(UDP)通信。它提供3个分开的服务:名称服务(NetBIOS name)、会话服务(NetBIOS session)、数据报服务(NetBIOS datagram)。NetBIOS name为其他两个服务的基础。
NetBIOS服务类型在TCP/IP上的基本架构如图1-32所示。
图1-32 NetBIOS服务类型在TCP/IP上的基本架构
表1-7对3种常见的NetBIOS服务类型进行了详细说明。
表1-7 3种常见的NetBIOS服务类型
3.NetBIOS解析过程
NetBIOS协议进行名称解析的过程如下。
1)主机检查本地NetBIOS缓存。
2)如果缓存中没有请求的名称,但是配置了WINS服务器,则向WINS服务器发送请求。
3)如果没有配置WINS服务器或WINS服务器无响应,则和LLMNR一样向当前子网域发送广播。
4)如果子网域的其他主机无响应,则读取本地的lmhosts文件(C:\Windows\System32\drivers\etc\)。
NetBIOS协议通过发送UDP广播包进行解析。如果不配置WINS服务器,则和LLMNR一样会有欺骗攻击问题。
4.NetBIOS防御措施
1)执行命令ncpa.cpl打开网络连接,如图1-33所示。
图1-33 执行命令ncpa.cpl打开网络连接
2)依次选择“本地连接”→“属性”→“Inter-net协议版本4(TCP/IPv4)”→“属性”→“高级”选项来配置,如图1-34、图1-35、图1-36所示。
图1-34 打开网络连接属性
图1-35 配置TCP/IPv4
图1-36 配置IP地址
3)在WINS选项卡的NetBIOS设置中禁用NetBIOS,如图1-37所示。
图1-37 在WINS选项卡的NetBIOS设置中禁用NetBIOS
WPAD全称Web Proxy Auto-Discovery Protocol,也就是Web代理自动发现协议。(这里的代理就是我们在渗透中使用BURP的时候修改的代理设置。)它的作用是让局域网浏览器自动发现内网中的代理服务器,并且自动设置成该代理来连接企业内网或者互联网。
若系统开启了WPAD,那么主机就会在当前连接的局域网中寻找代理服务器,找到之后会在代理服务器中下载PAC(Proxy Auto-Config,代理自动配置)文件。这个PAC文件会定义用户在访问什么地址的时候使用什么代理。
1.WPAD实现方式
前面说过,主机会在当前连接的局域网中自动寻找代理服务器,而它的实现方式主要有两种。
(1)DHCP
在DHCP服务器中,252选项是被用于查询或者注册的指针。可以在DHCP服务器中添加一个用于查找WPAD主机的252选项,内容是部署在WPAD主机上的PAC文件的URL。当客户端Web浏览器要访问某个地址时,Web浏览器会向DHCP服务器发送DHCP INFORM数据包来查询PAC文件的位置,DHCP服务器收到请求后会返回DHCP ACK数据包(其中包含选项和配置列表)进行响应。在这些返回选项中的252选项就是代理自动配置文件的位置,Web浏览器就可以据此执行下载PAC文件请求。图1-38为以DHCP方式获取PAC的示意图。
目前大多数内网中已经不再使用DHCP服务器来配置客户端的WPAD,而采用较为简单的DNS服务器方式。
(2)DNS
这种方式是目前使用较为广泛的。通过DNS方式实现WPAD的原理是:先由Web浏览器向DNS服务器发起WPAD+X查询,DNS服务器接收到查询请求后返回提供WPAD主机的IP地址,Web浏览器通过该IP地址的80端口下载wpad.dat(浏览器配置用文件)和wspad.dat(防火墙配置用文件)以实现自动配置。例如:用户的计算机网络名称为test.xx.example.com,浏览器将依次尝试图1-39中的URL,以期在客户端的域中找到一个代理配置文件。
图1-38 以DHCP方式获取PAC的示意图
图1-39 以DNS方式来实现WPAD的示意图
2.PAC文件内容
PAC文件的最主要作用是控制浏览器如何处理使用HTTP/HTTPS的流量。其实在每个PAC文件中都会有一个FindProxyForURL函数,用来定义Web浏览器是将流量直接发送到Internet还是发送到代理服务器的规则。以下是PAC文件的具体配置内容。
1)shExpMatch尝试将主机名或URL与指定的shell表达式匹配。如果匹配,则返回true。
2)isInNet函数判断主机名的IP地址是否在指定的子网内,如果在,则返回true。如果传递了主机名,则该函数会将主机名解析为IP地址。
3)如果在host中匹配到了.example.com,就会返回true。DIRECT的意思是直连,这句话的意思就是:如果访问了.example.com的URL,那么就会直接连接,不通过代理。
4)如果host在指定的IP范围内,那么就会通过代理fastproxy.example.com:8080访问。