分析ARP以发现和利用陈旧网络地址配置
Justin Angel//
引言
在渗透测试中,ARP通常以毒化攻击的形式被讨论,攻击者通过污染相邻主机的ARP缓存表,实现在受害节点之间的中间人(MITM)位置。虽然本文最初受此技术启发,并希望被动获取候选目标列表,但本文旨在从数据分析的角度捕获和量化广播请求,以识别相互通信的网络主机。
这一努力的副产品是一个简单的Python工具eavesarp,专为Debian Linux设计,深受Jaime Penalba的netdiscover影响。eavesarp被动监控ARP请求,并呈现一个总结发送者、目标和每个发送者-目标组合的ARP请求总和的表格。这些信息在规划定向ARP毒化攻击和识别陈旧网络地址配置(SNACs)时至关重要,后者是一种配置错误,发生在网络服务客户端配置了硬编码IP地址或FQDN,但该地址不再与活动主机关联时。eavesarp在netdiscover的基础上,提供了SNAC的主动发现功能,同时具备DNS名称解析能力。
如果读者对上述简要介绍感到满意,可以跳转到“利用SNACs”部分获取实践内容。否则,本介绍的以下小节将提供ARP操作方式的最低限度总结,以及解释此技术产生背景的上下文信息。
关于地址解析协议(ARP)的简要说明
ARP是一种用于解析配置了给定IP地址的NIC的MAC地址的协议。请求以明文形式发送到网络,使得广播域的任何成员都可以观察和记录它们。关于如何利用ARP弱点的文章数不胜数,因此本文不会详细讨论,但浏览RFC 826的摘要提供了本文其余部分使用的基本术语和见解:
- 发送主机(发送者) – 希望与另一主机(目标)交互的主机。这是请求与已知IP地址关联的MAC地址的主机。
- 目标主机(目标) – 发送者希望交互的目的地主机。这是与发送者已知的IP地址关联的MAC地址的所有者。
还要记住,只有ARP请求是广播的,而不是回复,因此无法确定是否收到目标的回复,除非对目标发出ARP请求或通过MITM攻击观察响应。
上下文背景
在最近与BHIS的合作中,客户在内部网络段部署了一个基于Kali的主机以支持测试。环境中观察到最少的NetBIOS/LLMNR流量,尝试利用此流量的广播性质使用Responder未能捕获弱密码哈希。此外,由于在高价值主机上正确执行了SMB签名,中继攻击无效。使用MailSniper验证通过OSINT技术获得的用户名和BruteLoops执行水平暴力攻击使用常见密码,但未能产生有效凭据。鉴于未识别出不同应用程序和服务的明显漏洞,作者选择执行定向ARP毒化攻击以收集哈希和其他信息。问题很快变成了识别哪些主机作为毒化目标,同时最小化对网络条件的影响。
正如任何理性评估者所证明的,ARP毒化攻击既强大又危险:即使配置攻击时出现轻微错误,也可能导致拒绝服务(DoS)条件。考虑到此阶段合作是远程执行的,作者无法足够强调“定向”一词。
在ARP毒化的上下文中,“定向”意味着什么?从作者的角度来看,理想的MITM定位是成为交换机和已知与提供高价值服务的服务器主机交互的客户端主机之间的中间节点——但不是同时所有主机,因为发送到攻击节点的网络流量水平随着每个受害者增加,从而导致引入DoS条件的几率升高。这种“MITM客户端方法”虽然费力,但在受害主机是用户工作站时是谨慎的,因为对少数工作站的意外DoS比托管可能对客户端环境关键的任务服务的服务器更可取。
但是,如何从未经认证的上下文中识别网络上哪些主机在相互交互?
虽然无法绝对确定给定客户端是服务器提供的所需应用层服务的消费者,但监控广播的ARP请求揭示了哪些主机尝试在链路层解析服务器的MAC地址。随着时间的推移收集和分析这些请求,揭示了主机之间相对于网络连接的有趣关系。
简而言之,我需要一个执行以下功能的工具:
- 监控网络接口的广播ARP请求
- 跟踪每个请求的发送者和目标
- 维护给定发送者请求目标的频率计数
尽管作者在合作时不知道,但netdiscover执行了所有这些功能,并以良好的交互界面呈现分析数据。但是,请注意顶部记录,其中IP(.3)已请求.7的MAC地址一百六十一次(161)。这是SNAC的关键指标。eavesarp在此基础上通过提供SNAC的主动验证和DNS功能来构建。
netdiscover:被动捕获ARP流量
从现在开始,本文将重点描述、检测和利用SNACs。在适当的条件下,可以利用此配置错误在客户端和服务之间实现MITM位置,同时最小化降低客户端环境操作能力的可能性。
陈旧网络地址配置(SNACs)
当网络服务的客户端配置了静态地址值,但广播ARP请求以解析目标MAC地址时未收到响应,表明当前没有主机配置该IP地址时,就会发生SNAC(发音为“snack”)。此事件可能因各种原因发生,例如DHCP向原始主机发出不同地址,或者原始主机自客户端配置以来已离线。发送者在短时间内对单个目标的重复ARP广播是SNAC的强指标,因为ARP响应在从给定目标收到有效回复后被缓存。
虽然导致地址配置陈旧的事件相当常见,但可以利用此类配置实现有趣的目的。如果服务的传输协议恰好是明文UDP,则可以通过假定陈旧配置的IP地址并从适当接口嗅探流量来捕获传输中的流量。在允许给定NIC使用多个IP的适当网络条件下,为NIC设置第二个IP是一项琐碎的任务(参见“IP别名”部分)。
当面对面向连接的协议时,利用SNACs presents一个有趣的情况,因为必须在攻击主机接收除连接信息之外的任何数据之前建立连接。但是,可以通过从拦截接口捕获网络流量,确定易受攻击的客户端/主机尝试访问的常见端口,然后使TCP侦听器在线以接受连接和初始数据来解决此问题。这允许使用初始有效负载作为指纹来确定更高层协议。“利用SNACs(使用TCP作为传输的服务)”的最后部分演示了一个潜在的MITM场景,通过在攻击主机上启用IP伪装来处理面向TCP的协议。
在跳转到SNACs的利用之前,提供了两个额外部分来说明eavesarp的使用以及如何在Linux和Windows主机上别名网络接口。
使用Eavesarp进行SNAC检测
这里讨论了eavesarp的基本用法。所有结果都是从进行开发的相当小的网络中收集的。单个主机被有意配置为充当SNAC(.2),以.101作为陈旧地址为目标,这就是为什么至少有一个目标总是具有明显更大的ARP请求计数。
在被动模式(默认)下启动eavesarp,同时指定适当的NIC,会返回一个基本表格,揭示发送者.2请求目标.101的MAC的频率远高于广播域中的任何其他目标。这是“陈旧网络地址配置(SNACs)”中描述的指标。
eavesarp:ARP请求的被动收集
注意上图中的输出按发送者生成的ARP请求数量降序排序,与该发送者关联的相应目标也是如此。这旨在便于快速识别受SNACs影响的发送者。还要注意,记录按颜色分块,每个块仅打印一次发送者地址,通过消除重复的发送者值使输出更易于消化。如果需要MAC地址,使用-oc(–output-columns)选项指定要显示的值。
eavesarp:包括MAC地址
eavesarp的基本执行是被动的,因为只捕获和分析广播的ARP请求。上面.3的MAC设置为“[UNRESOLVED]”,因为尚未收到该IP作为发送者的ARP请求——仅作为目标。
也可以配置主动检查,通过为在广播请求中观察到的目标发出ARP请求来确认给定配置是否陈旧。可以启用DNS解析以对发送者和目标地址执行反向名称解析,提供PTR记录值。这在主机名具有描述性并可能帮助使ARP毒化攻击更具针对性的情况下很有用。下图显示了启用这些功能后先前捕获的继续。陈旧列中的表情符号表示SNAC。
eavesarp:启用主动检测功能
最后一列旨在传达目标IP是否与目标PTR关联的前向IP不同,这可能表明陈旧配置适用于现在拥有前向IP的主机。在这种情况下,可能可以在攻击主机上启用IP转发,假定陈旧配置的IP,然后通过重写IP/TCP层的包成为拥有前向IP的预期主机的中间人。鉴于发送者和合法主机之间使用明文协议,这可能导致捕获/修改/中继传输中的敏感信息。这是“利用SNACs”部分中“使用TCP作为传输的服务”部分的前提。
虽然此功能仅是美观的,但用户可以始终指定颜色配置文件以适应当前情绪。作者一直使用foxhound配置文件,因为他是一个《合金装备》的极客,并且这是对《爱国者之 Sons》中使用的界面的一个很好的回顾。启动eavesarp时选择有效值传递给–color-profile选项(-cp)会导致外观变化。
eavesarp:1337颜色配置文件
eavesarp:Rhino颜色配置文件
eavesarp:Cupcake颜色配置文件
本文的其余部分现在将专注于SNACs的利用,从如何用多个IP地址别名网络接口的简要概述开始。
Big Boss Thumbs Up
IP别名
将附加IP地址分配给单个NIC称为IP别名。当对分配给该接口的目标IP(静态或别名)发出ARP请求时,主机将使用相同的MAC地址响应。正是这种能力允许我们滥用SNACs,而无需毒化相邻主机的ARP缓存。
在Debian Linux主机上,可以执行以下命令来添加或删除目标接口的IP别名。
|
|
虽然稍微更复杂(一如既往),但这也可以在Windows中应用,首先为目标接口分配静态IP,单击“高级”按钮,然后通过“高级TCP/IP设置”窗口中的“添加”按钮添加新配置。
在Windoze上配置别名
利用SNACs
本节详细介绍了利用SNACs可能的两种潜在场景。首先,以syslog配置为目标,代表最简单的场景,因为UDP传输不需要连接设置——它有效地将自由数据“铲”到别名接口。第二个以SMB为目标,有些人为,但为 targeting TCP协议提供了基础。
使用UDP作为传输协议的服务
上述syslog场景在“上下文背景”部分讨论的环境中显现。一个配置错误的客户端配置了一个解析到无法使用ARP解析为MAC的IP地址的值。该客户端以明文记录记录,包含由Web服务器处理的HTTP请求查询字符串中的工件。这些记录恰好包含明文凭据和其他敏感信息。
为防止披露环境细节,作者创建了一个Python脚本(swisslogger)来复制此场景,并在第一个URL below available,如果读者希望为经验积累目的复制攻击。swisslogger在配置为指向未分配的IP地址时,通过连续尝试发送syslog记录,进而产生 constant ARP请求,有效地模拟了一个易利用的SNAC漏洞。
以下是eavesarp和swisslogger的链接:
下图显示了将IP设置为陈旧值时swisslogger的执行。它只是开始将日志流式传输到host参数中指定的地址。
swisslogger:启动连续Syslog记录流
下表总结了此演示阶段涉及的主机。
IP地址 | 角色 | 主机名 | 注释 |
---|---|---|---|
192.168.86.2 | 发送者 | iron | 此主机由于通过swisslogger的陈旧网络地址配置而易受攻击。执行后,它将开始对.101进行一致的ARP请求,指示SNAC。 |
192.168.86.5 | 攻击者 | deskjet | 此主机将运行eavesarp以检测应用于.2的陈旧配置,并在假定.101地址后用于接收来自.2的流量。此主机在别名后将响应任何对.101的ARP请求。 |
192.168.86.101 | 目标 | syslog | 此地址未被任何主机使用,直到.5将被别名。 |
启动eavesarp时指定适当的NIC揭示发送者.2请求目标.101的MAC的频率远高于广播域中的任何其他目标。这是“陈旧网络地址配置(SNACs)”中描述的指标。
eavesarp:ARP请求的被动收集
发送者.2似乎受SNAC影响,目标.101现在被怀疑是未使用的IP地址。可以通过仅使用–target-whitelist标志白名单.101并启用ARP解析(-ar)来验证此观察,如下图所示(注意列排序是可选的)。
eavesarp:陈旧目标的主动确认
现在是别名接口的时候了。在以下图像中可以看到,发送者.2对目标.101的ARP请求在别名后停止,并且正在接收由swisslogger脚本生成的syslog流量。date命令在第一个图像中实现别名之前执行,tcpdump捕获中显示的时间戳完美对齐。
ip (.5/.101):用目标地址别名网络接口
tcpdump (.5/.101):捕获Syslog流量
syslog示例足够简单,以至于几乎感觉是伪造的,但是处理使用TCP作为传输的更高层协议将 inherently 变得更加复杂,因为攻击机器将需要处理连接建立,然后才能从SNAC接收有意义的数据。
使用TCP作为传输协议的服务
如SNAC检测部分所述,eavesarp还支持主动ARP和DNS解析。它首先枚举发送者和目标的任何PTR记录,然后执行恢复的PTR值的正向解析。下图显示了启用ARP和DNS解析并仅对已知陈旧目标地址(.101)应用白名单时eavesarp的执行。
eavesarp:对目标地址执行ARP和DNS解析
观察到为每个主机定义了PTR记录,我们现在可以使用analyze子命令并仔细查看陈旧目标地址。analyze命令与capture命令的不同之处在于分析eavesarp生成的原始pcap文件或SQLIte数据库文件,但应注意,在捕获模式下执行时,相同的分析选项可用。
eavesarp:分析输出数据库以识别MITM机会
eavesarp已将前向地址与初始ARP请求中观察到的值进行了比较,并识别了不协调,如最后一列所传达。这可能表明真实目标主机已更改IP地址为前向值,代表了潜在的MITM机会。
注意:本文即将急剧转向虚构城市,建立在创意自由的大州。它是人为的,但应该为未来的工作提供基础。
在这一点上,让我们假设相邻主机(.102)确实是发送者(.2)所需的预期目标主机,但由于SNAC目前无法访问。还假设网络管理员Karen已注意到来自发送者的奇怪ARP行为,并决定验证syslog客户端的配置参数。然而,在 physically 走到.2并认证(虚构)后,她将尝试通过SMB访问陈旧目标地址以获取其他配置信息,然后再应用任何更改。
为清晰起见,下表已更新以反映附加的上游主机以及新配置:
IP地址 | 角色 | 主机名 | 注释 |
---|---|---|---|
192.168.86.2 | 发送者(SNAC) | iron | 此主机由于通过swisslogger的陈旧网络地址配置而易受攻击。Karen将登录此处并尝试访问上游SMB共享以获取.101上的魔法数据,因为她不知道地址已更改。 |
192.168.86.101 | 目标 | syslog | 此地址已别名到.5的攻击主机接口。 |
192.168.86.5 | 攻击者 | deskjet | 此主机已用.101别名,并将配置防火墙规则以支持IP伪装(nat)。 |
192.168.86.102 | 预期目标 | w10 | 这是最初具有.101 IP地址但此后已更改为.102的主机,导致SNAC。所有流量现在将通过防火墙规则转发到此地址。 |
如上所述,我们知道Karen即将通过SMB访问.101以获取配置信息,因为她不知道预期目标的IP已更改为.102。我们可以通过借鉴Laurent Gaffie的工作来处理这种情况,并在攻击者上启用IPv4转发,然后实施防火墙规则以重写包地址到.102。
|
|
在从.2认证到.101之前初始化另一个tcpdump会话,以便可以捕获和分析流量,然后可以使用smbclient模拟Karen发起的SMB会话。如下所述,Karen有权访问托管在预期目标主机上的SMB共享,同时错误地引用了先前识别的陈旧地址(.101)。
smbclient (.2):Karen认证到陈旧IP地址
tcpdump (.5/.101):捕获流量进行分析
使用Wireshark审查捕获的流量显示,如预期捕获了哈希凭据,并且可以使用PCredz(更多Laurent Gaffie wizardry)从捕获文件中转储它们以进行离线基于字典的暴力攻击。
Wireshark:剖析会话设置请求
PCredz:转储Karen的超强密码哈希
http://g-laurent.blogspot.com/2016/10/introducing-responder-multirelay-10.html
结论
在IP别名可行的环境中,检测和利用SNACs是一个琐碎的过程。虽然为便于检测而开发的概念验证工具目前仅适用于Linux,但为其他操作系统开发工具不应代表巨大挑战。利用SNAC的影响相对于来自发送者的网络流量类型,最简单的导致捕获可能包含敏感信息的任意网络流量。
蓝色建议
- 配置网络基础设施以强制执行动态ARP检查(DAI),一种通过确保仅当MAC到IP绑定存在于权威数据库中时才 honored ARP响应的控制,防止使用别名IP地址和ARP毒化攻击(简化)
- 监控在 unreasonable 时间范围内对特定IP地址的过多ARP请求
Debian主机默认缓存给定ARP响应60秒。此配置可以通过与以下文件交互来检查/配置:
|
|
较新版本的Windows在成功解析时生成一个值,但如果未在15到45秒之间再次使用,则标记为“陈旧”
- 监控指向废弃IP的无效DNS记录