利用ARP分析发现和利用陈旧网络地址配置

本文详细介绍了如何通过分析ARP请求来检测和利用陈旧网络地址配置(SNAC),包括被动和主动检测方法,以及针对UDP和TCP协议的实际利用场景,提供了工具eavesarp的使用指南和防御建议。

分析ARP以发现和利用陈旧网络地址配置

Justin Angel//

引言

在渗透测试中,ARP通常以 poisoning 攻击的形式讨论,攻击者通过污染相邻主机的ARP缓存表,实现中间人(MITM)位置。本文从数据分析的角度出发,通过捕获和量化广播请求来识别网络主机间的通信,其副产品是一个简单的Python工具eavesarp,它基于Jaime Penalba的netdiscover,被动监控ARP请求并呈现发送者、目标和请求总和的表格。这些信息对于规划定向ARP poisoning攻击和识别陈旧网络地址配置(SNAC)至关重要,后者是当网络服务客户端配置了硬编码IP地址或FQDN,但不再与活动主机关联时发生的错误配置。eavesarp通过提供SNAC的主动发现和DNS名称解析功能,扩展了netdiscover的能力。

如果读者对以上简介感到满意,可以直接跳转到“利用SNAC”部分获取实践内容。否则,以下小节将简要介绍ARP的工作原理和相关背景信息。

关于地址解析协议(ARP)的简要说明

ARP是一种用于解析配置了给定IP地址的NIC的MAC地址的协议。请求以明文形式发送到网络,使得广播域的任何成员都可以观察和记录它们。虽然有许多关于如何利用ARP弱点的文章,但本文不会详细讨论,但浏览RFC 826的摘要提供了本文使用的基本术语和见解:

  • 发送主机(sender) – 希望与另一主机(目标)交互的主机。这是请求已知IP地址关联的MAC地址的主机。
  • 目标主机(target) – 发送者希望交互的目的地主机。这是与发送者已知IP地址关联的MAC地址的所有者。

请注意,只有ARP请求是广播的,而不是回复,因此无法确定是否收到目标的回复,除非对目标发出ARP请求或通过MITM攻击观察响应。

背景信息

在最近与BHIS的合作中,客户在内部网络段部署了基于Kali的主机以支持测试。环境中观察到最少的NetBIOS/LLMNR流量,尝试使用Responder利用此流量的广播性质未能捕获弱密码哈希。此外,由于在高价值主机上正确执行了SMB签名,中继攻击无效。使用MailSniper验证通过OSINT技术获得的用户名和BruteLoops进行水平暴力攻击,但未能产生有效凭据。鉴于未识别出明显漏洞,作者选择执行定向ARP poisoning攻击以收集哈希和其他信息。问题很快变为识别哪些主机作为 poisoning 目标,同时最小化对网络条件的影响。

任何理性的评估者都会证明,ARP poisoning攻击既强大又危险:即使配置攻击时出现小错误,也可能导致拒绝服务(DoS)条件。考虑到此阶段是远程执行的,作者无法足够强调“定向”一词。

在ARP poisoning的上下文中,定向意味着什么?从作者的角度来看,理想的MITM定位是成为交换机和已知与提供高价值服务的服务器主机交互的客户端主机之间的中间节点——但不是同时所有主机,因为发送到攻击节点的网络流量水平随每个受害者增加,从而导致引入DoS条件的几率升高。这种“MITM客户端方法”虽然费力,但在受害者主机是用户工作站时是谨慎的,因为对少数工作站的意外DoS比托管可能对客户端环境关键的服务器的DoS更可取。

但是,如何从未经认证的上下文中识别哪些主机在网络上相互交互?

虽然无法绝对确定给定客户端是服务器提供的所需应用层服务的消费者,但监控广播的ARP请求揭示了哪些主机尝试在链路层解析服务器的MAC地址。随着时间的推移收集和分析这些请求,揭示了主机之间相对于网络连接的有趣关系。

简而言之,我需要一个工具执行以下功能:

  • 监控网络接口的广播ARP请求
  • 跟踪每个请求的发送者和目标
  • 维护给定发送者请求目标的频率计数

尽管作者在合作时不知道,但netdiscover执行了所有这些功能,并以良好的交互界面呈现分析数据。但是,请注意顶部记录,其中IP(.3)已请求.7的MAC地址一百六十一次(161)。这是SNAC的关键指标。eavesarp通过提供SNAC的主动验证和DNS功能,扩展了这一概念。

netdiscover:被动捕获ARP流量

从现在开始,本文将重点描述、检测和利用SNAC。在适当条件下,可以利用此错误配置实现客户端和服务之间的MITM位置,同时最小化降低客户端环境操作能力的可能性。

陈旧网络地址配置(SNAC)

当网络服务客户端配置了静态地址值,但广播ARP请求以解析目标MAC地址时未收到响应,表明当前没有主机配置该IP地址时,就会发生SNAC(发音为“snack”)。此事件可能由于各种原因发生,例如DHCP向原始主机发出不同地址,或者原始主机自客户端配置以来已离线。发送者在短时间内对单个目标的重复ARP广播是SNAC的强指标,因为ARP响应在收到有效回复后会被缓存。

虽然导致地址配置陈旧的事件非常常见,但可以利用此类配置实现有趣的目的。如果服务的传输协议恰好是明文UDP,则可以通过假设陈旧配置的IP地址并从适当接口嗅探流量来捕获传输中的流量。在允许为给定NIC设置多个IP的适当网络条件下,为NIC设置第二个IP是一项琐碎任务(参见“IP别名”部分)。

当面对面向连接的协议时,利用SNAC presents一个有趣的情况,因为必须在攻击主机接收任何超出连接信息的数据之前建立连接。但是,可以通过从拦截接口捕获网络流量,确定易受攻击客户端/主机尝试访问的常见端口,然后使TCP侦听器在线以接受连接和初始数据来解决此问题。这允许使用初始负载作为指纹来确定更高层协议。“利用SNAC(使用TCP作为传输的服务)”的最后一部分演示了通过启用攻击主机上的IP伪装来处理面向TCP协议的潜在MITM场景。

在跳转到SNAC的利用之前,提供了两个额外部分来说明eavesarp的使用以及如何在Linux和Windows主机上别名网络接口。

使用Eavesarp进行SNAC检测

这里讨论了eavesarp的基本用法。所有结果都是从进行开发的相当小的网络中收集的。单个主机已故意配置为充当SNAC(.2),以.101作为陈旧地址为目标,这就是为什么至少有一个目标总是具有明显更大的ARP请求计数。

在被动模式(默认)下启动eavesarp,同时指定适当的NIC,会返回一个基本表格,显示发送者.2请求目标.101的MAC的频率远高于广播域中的任何其他目标。这是“陈旧网络地址配置(SNAC)”中描述的指标。

请注意,在上面的图像中,输出按生成最多ARP请求的发送者以降序排序,相应的目标也按此排序。这旨在便于快速识别受SNAC影响的发送者。还观察到记录按颜色块化,每个块只打印一次发送者地址,通过消除重复的发送者值使输出更易消化。如果需要MAC地址,使用-oc(–output-columns)选项指定要显示的值。

eavesarp的基本执行是被动的,因为只捕获和分析广播的ARP请求。上面.3的MAC设置为’[UNRESOLVED]’,因为尚未收到该IP作为发送者的ARP请求——仅作为目标。

也可以配置主动检查,通过为广播请求中观察到的目标发出ARP请求来确认给定配置是否陈旧。可以启用DNS解析以执行发送者和目标地址的反向名称解析,提供PTR记录值。这在主机名具有描述性且可能有助于使ARP poisoning攻击更具针对性的情况下很有用。以下图像显示了启用这些功能后先前捕获的继续。陈旧列中的表情符号表示SNAC。

最后一列旨在传达目标IP是否与目标PTR关联的前向IP不同,这可能表明陈旧配置适用于现在拥有前向IP的主机。在这种情况下,可能可以在攻击主机上启用IP转发,假设陈旧配置的IP,然后通过重写IP/TCP层的包成为拥有前向IP的预期主机的中间人。鉴于发送者和合法主机之间使用明文协议,这可能导致捕获/修改/中继传输中的敏感信息。这是“利用SNAC”部分中“使用TCP作为传输的服务”部分的前提。

虽然此功能仅是美观的,但用户可以始终指定颜色配置文件以适应当前情绪。作者一直使用foxhound配置文件,因为他是一个Metal Gear Solid的极客,并且这是对Sons of the Patriots中使用的界面的很好回调。启动eavesarp时选择有效值传递给–color-profile选项(-cp)会导致外观变化。

本文的其余部分现在将专注于SNAC的利用,从如何为网络接口设置多个IP地址的简要概述开始。

IP别名

为单个NIC分配额外IP地址称为IP别名。当ARP请求针对分配给该接口的目标IP(静态或别名)时,主机将响应相同的MAC地址。正是这种能力允许我们滥用SNAC,而无需毒化相邻主机的ARP缓存。

在Debian Linux主机上,可以执行以下命令来添加或删除目标接口的IP别名。

1
2
ip a add <ip_address>/<netmask> dev <interface>
ip a del <ip_address>/<netmask> dev <interface>

虽然稍微更复杂(一如既往),但这也可以在Windows中应用,首先为目标接口分配静态IP,单击“高级”按钮,然后通过“高级TCP/IP设置”窗口中的“添加”按钮添加新配置。

利用SNAC

本节详细介绍了两种可能利用SNAC的场景。首先,针对syslog配置,代表了最简单的场景,因为UDP传输不需要连接设置——它有效地“铲”免费数据到别名接口。第二个针对SMB,有些人为,但为针对TCP协议提供了基础。

使用UDP作为传输协议的服务

上述syslog场景在“背景信息”部分讨论的环境中显现。配置错误的客户端配置了一个解析到无法使用ARP解析MAC的IP地址的值。此客户端以明文记录包含源自Web服务器处理的HTTP请求查询字符串的工件的记录。这些记录恰好包含明文凭据和其他敏感信息。

为防止披露环境细节,作者创建了一个Python脚本(swisslogger)来复制此场景,并在以下第一个URL中可用,如果读者希望为经验构建目的复制攻击。swisslogger在配置为指向未分配IP地址时,通过连续尝试发送syslog记录,进而产生 constant ARP请求,有效模拟了易利用的SNAC漏洞。

以下是eavesarp和swisslogger的链接:

以下图像显示了执行swisslogger时将IP设置为陈旧值。它只是开始将日志输出到host参数中指定的地址。

以下表格总结了此演示阶段涉及的主机。

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的频率远高于广播域中的任何其他目标。这是“陈旧网络地址配置(SNAC)”中描述的指标。

发送者.2似乎受SNAC影响,目标.101现在被怀疑是未使用的IP地址。可以通过仅使用–target-whitelist标志和启用ARP解析(-ar)来验证此观察,如下图像所示(请注意,列排序是可选的)。

现在是别名接口的时候了。在以下图像中可以看到,发送者.2对目标.101的ARP请求在别名后停止,并且正在接收由swisslogger脚本生成的syslog流量。在第一个图像中实现别名之前执行了date命令,并且tcpdump捕获中显示的时间戳完美对齐。

syslog示例足够简单,几乎感觉是伪造的,但是处理使用TCP作为传输的更高层协议将 inherently 变得更复杂,因为攻击机器需要在从SNAC接收有意义的数据之前处理连接建立。

使用TCP作为传输协议的服务

如SNAC检测部分所述,eavesarp还支持主动ARP和DNS解析。它首先枚举发送者和目标的任何PTR记录,然后执行恢复的PTR值的正向解析。以下图像显示了启用ARP和DNS解析并仅对已知陈旧目标地址(.101)应用白名单时执行eavesarp。

观察到为每个主机定义了PTR记录,我们现在可以使用analyze子命令并仔细查看陈旧目标地址。analyze命令与capture命令的不同之处在于分析eavesarp生成的原始pcap文件或SQLIte数据库文件,但应注意,在捕获模式下执行时,相同的分析选项可用。

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转发,然后实施防火墙规则以重写包 addressed 到.102。

1
2
3
sysctl net.ipv4.conf.eth1.forwarding=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING --dst 192.168.86.101 -j DNAT --to-destination 192.168.86.102

在从.2认证到.101之前初始化了另一个tcpdump会话,以便可以捕获和分析流量,然后可以使用smbclient模拟Karen发起的SMB会话。如下所述,Karen有权访问托管在预期目标主机上的SMB共享,同时错误地引用了先前识别的陈旧地址(.101)。

使用Wireshark审查捕获的流量显示,如预期捕获了哈希凭据,并且可以使用PCredz(更多Laurent Gaffie wizardry)从捕获文件中转储它们以进行离线基于字典的暴力攻击。

结论

在IP别名可行的环境中,检测和利用SNAC是一个琐碎的过程。虽然为促进检测而开发的 proof of concept 工具目前仅适用于Linux,但为其他操作系统开发工具不应代表巨大挑战。利用SNAC的影响相对于源自发送者的网络流量类型,最简单的导致捕获可能包含敏感信息的任意网络流量。

蓝色建议

  • 配置网络基础设施以强制执行动态ARP检查(DAI),这是一种控制,通过确保仅当MAC到IP绑定存在于权威数据库中时才接受ARP响应,防止使用别名IP地址和ARP poisoning攻击(简化)
  • 监控在不合理时间范围内对特定IP地址的过多ARP请求

Debian主机默认缓存给定ARP响应60秒。可以通过与以下文件交互来检查/配置此配置:

1
/proc/sys/net/ipv4/neigh/default/gc_stale_time

较新版本的Windows在成功解析时生成值,但如果未在15到45秒之间再次使用,则标记为“陈旧”

  • 监控指向废弃IP的无效DNS记录,因为客户端可能配置了友好值,导致SNAC
  • 虽然未经测试,但LaBrea(如@strandjs推荐)应通过tarpitting表现出SNAC行为的主机来防止检测和利用SNAC
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计