通过中间人攻击阻止EDR数据传输(遥测)

admin 2024年8月5日11:23:57评论33 views字数 4092阅读13分38秒阅读模式

通过中间人攻击阻止EDR数据传输(遥测)

您可以通过执行中间人 (PitM) 攻击和过滤遥测数据包来阻止 EDR 遥测到达其云服务器,从而有效地向 SOC 团队隐藏警报。这可以通过对目标主机进行 ARP 中毒和配置 iptables 来实现。我们可以使用 TLS 客户端 Hello 数据包中的服务器名称指示 (SNI) 来识别要阻止的特定 IP 地址,而不是阻止广泛的 IP 子网。虽然未发送的警报会缓存在主机上,但它们会在重新启动时被清除。

介绍

ARP 欺骗是一种众所周知的攻击,已被攻击者使用多年。它通常用于 PitM 攻击,通过明文协议窃取凭据。一些流行的工具包括bettercap、带有arpspoof 的PCredz。 在本博客中,我们将解释如何通过 ARP 欺骗应用 PitM 攻击来阻止 EDR 遥测流量到其远程 API,从而使警报静音。与主机上的网络过滤攻击(例如操纵防火墙规则或 Windows 过滤平台 (WFP))相比,这种方法的优势在于它不需要管理权限或对受害主机的访问权限。但是,它确实需要与受害主机位于同一网络上的攻击者控制的机器。

ARP欺骗

ARP 欺骗的概念被广泛讨论,因此我们不会过多地讨论。ARP 欺骗(或中毒)在 OSI 第 2 层运行,其中 MAC 地址用于路由。下图说明了实验室设置:

通过中间人攻击阻止EDR数据传输(遥测)

当受害主机需要连接到网络外部时,它需要通过网关192.168.10.1进行路由。主机将尝试通过发送 ARP 请求广播数据包来找出网关的 MAC 地址。攻击者机器不断发送 ARP 回复,声称网关192.168.10.1的MAC 地址为00:0c:29:39:33:63,属于攻击者主机。此操作会毒害受害主机上的 ARP 表,使其认为攻击者机器就是网关。请注意,这不是全双工设置,这意味着只有受害主机上的 ARP 表被毒害,而不是网关的 ARP 表。这使攻击更难被发现。只有来自受害主机的出站流量会受到影响。

如何利用 ARP 欺骗进行 PitM 攻击

您可以按照以下步骤执行 ARP 欺骗:

攻击者机器: Ubuntu 22.04

受害者主机:装有 Microsoft Defender for Endpoint 的 Windows 11

安装 arpspoof:

sudo apt install dsniff

确保 IP 转发已启用:

sysctl -w net.ipv4.ip_forward=1

运行 arpspoof:

sudo arpspoof -i <interface> -t <target ip> <gateway ip>

在此示例中,命令为:

sudo arpspoof -i ens34 -t 192.168.10.52 192.168.10.1

以下屏幕截图显示了 arpspoof 工具的输出:

通过中间人攻击阻止EDR数据传输(遥测)

下图是受害主机的 ARP 表,网关192.168.10.1的 MAC 地址已从原来的e0:e1:a9:eb:26:41更新(中毒)为00:0C:2939:33:63。

通过中间人攻击阻止EDR数据传输(遥测)

您可以通过浏览受害主机上的网站并使用 tcpdump 观察攻击者机器(正在执行 PitM)上的出站流量来确认流量:

tcpdump -i <interface> host <victim ip>

在受害者主机上,浏览一个网站以产生流量:

通过中间人攻击阻止EDR数据传输(遥测)

在攻击者机器上观察来自受害者主机的出站流量:

通过中间人攻击阻止EDR数据传输(遥测)

阻止 EDR 遥测

在 PitM 攻击期间,可以使用iptables通过在 FORWARD 表中配置规则来丢弃流量,FORWARD 表控制通过主机路由的数据包。我们可以根据目标 IP 地址或子网编写 DROP 规则。然而,存在一个重大挑战。关于

在受害者主机上进行 EDR 遥测过滤的文章(例如来自EDRPrison的文章)强调了覆盖 IP 地址的难度,指出“一些 EDR 产品与数百甚至数千个联系服务器通信,因此很难在保持隐秘的同时包含每个联系服务器”。为了解决这个问题,他们的解决方案包括硬编码进程名称并阻止这些进程生成的任何出站流量。不幸的是,这种技术不能应用于 PitM 场景,因为攻击者的机器不知道哪个进程生成了流量。

TLS 握手

我们知道的是,大多数 EDR 供应商都使用端口 443 上的 TLS 加密来与其远程 API 进行通信。虽然 TLS 旨在保护通信,但初始密钥交换流量的某些方面是可读的。例如,作为初始握手过程的一部分的“客户端问候”消息包含人类可读的信息,例如服务器名称指示 (SNI),如下所示:

通过中间人攻击阻止EDR数据传输(遥测)

最初的想法是使用iptables阻止“客户端 Hello”数据包,从而阻止完成 TLS 密钥交换。要应用 iptables 规则,您可以使用与服务器名称匹配的字符串并阻止客户端 Hello 数据包。

具有字符串匹配的 iptables 规则:

iptables -A FORWARD -p tcp --dport 443 -m string --string "security.microsoft.com" --algo bm DROP

然而,问题出现了。虽然最初的方法似乎有效,但我们注意到随着时间的推移,一些数据包被遗漏,导致 EDR 控制台接收遥测数据并发出警报。这很可能是由于解析处理方式和大量流量造成的。与基于 IP 地址或端口丢弃数据包相比,使用 iptables 进行字符串匹配的效率较低。

工具:EDR 遥测阻止程序 - edr_blocker.py

该工具可从此处 下载。该工具针对装有 Microsoft Defender for Endpoint 的主机运行的概念验证视频:https://github.com/TierZeroSecurity/edr_blocker

由于内置的 iptables 字符串匹配解决方案不太有效,我们决定使用Python Scapy 提出自己的 PoC 工具。该工具包括以下功能。

EDR 遥测阻断技术

Python Scapy 库支持解析 TLS 握手(包括 SNI),尽管 Scapy 以用户模式而非内核模式运行,但它似乎比 iptables 字符串匹配提供更好的性能。该库无法丢弃数据包,因此其想法是解析客户端 Hello 数据包中的 SNI 并根据单词表进行检查。如果找到匹配项,iptables 将使用更有效的规则进行更新,以根据数据包的目标 IP 地址丢弃数据包。我们测试了在异步嗅探模式下运行的 Scapy,即使在 4K 视频流期间也没有发现数据包丢失。当该工具终止时,它会刷新创建的 iptables 规则。

内置 ARP 欺骗

Scapy 能够生成自定义数据包,包括 ARP 回复。因此,我们可以在同一代码中嵌入 ARP 欺骗功能。该工具获取目标主机 IP 地址和网关 IP 地址,并向目标发送欺骗的 ARP 回复以冒充网关并执行 PitM 攻击。当该工具终止时,它会向目标发送正确的 ARP 回复以恢复中毒的 ARP 表。

其他功能

还存在一些其他功能,例如:

  • 确保攻击者的机器上启用了数据包转发,例如检查sysctl -n net.ipv4.ip_forward

  • 监控模式 - 当 SNI 包含被阻止的条目时,它不会创建 iptables 规则

  • 详细模式 - 输出客户端 Hello 数据包中的所有服务器名称

  • 输入文件 - 它需要一个包含单词列表的文件的文件路径,以便与 TLS 握手的 SNI 服务器名称进行匹配

阻止 Microsoft Defender 进行端点遥测

Microsoft Defender for Endpoint 或 Windows 在与远程 API 通信时会定期启动 TLS 握手。根据我们的观察,我们创建了以下单词列表用于阻止服务器名称:

  • events.data.microsoft.com

  • wd.microsoft.com

  • wdcpalt.microsoft.com

  • wdcp.microsoft.com

  • blob.core.windows.net

  • winatp-gw-cus

  • automatedirstrprdcus

  • endpoint.security.microsoft.com

  • smartscreen.microsoft.com

阻止这些 TLS 不会影响其他 Microsoft 服务,例如 Teams、Outlook 或 O365。但您在使用该工具之前应始终对其进行测试。在云服务器无法访问时发生的任何事件或警报都将在本地缓存。但是,本地缓存在重新启动时会被清除,从而导致可见性丧失。

阻止CrowdStrike遥测

在与客户合作期间,在征得他们的同意后,我们针对 CrowdStrike 测试了该工具。CrowdStrike

执行 TLS 握手的频率不如 MDE。有三种方法可以捕获 TLS 握手:

选项 1:只需以详细模式运行该工具并等待一段时间,通常为 30 分钟至 1 小时。

选项 2:在工具运行时重新启动机器。ARP 中毒将在 CrowdStrike 的初始 TLS 握手发生之前发生,该工具将能够捕获它并开始阻止。

选项 3:由于已知 CrowdStrike 的 API 主机托管在 AWS 上,因此您可以在攻击者机器上使用 tcpdump 来识别与 AWS 关联的 IP 地址,该地址应如下所示:

通过中间人攻击阻止EDR数据传输(遥测)

以下屏幕截图显示了针对 CrowdStrike 观察到的 SNI:

通过中间人攻击阻止EDR数据传输(遥测)

我们观察到两个服务器名称均以cloudsink.net结尾。因此,CrowdStrike仅使用以下顶级父域:

  • cloudsink.net

如果您正在使用该工具,请不要执行任何可能导致触发警报的操作,直到至少一个 IP 地址被阻止。

减轻

该技术依赖于使用 ARP 欺骗的 PitM 攻击。即使您的网络有 ARP 中毒感知设备,如果仅针对主机,检测攻击也会很困难。利用 VPN 或其他专用网络技术可以帮助缓解 PitM 攻击并防止攻击者阻止 EDR 遥测。

攻击者可能使用的一种访问内部网络的技术是部署物理植入物。配置网络设备以启用 802.1X 身份验证可以帮助降低此风险。

参考

  • https://github.com/TierZeroSecurity/edr_blocker

  • https://github.com/secdev/scapy

  • https://linux.die.net/man/8/iptables

  • https://www.3nailsinfosec.com/post/edrprison-borrow-a-legitimate-driver-to-mute-edr-agent

  • https://www.monkey.org/~dugsong/dsniff/

  • https://www.bettercap.org

  • https://github.com/lgandx/PCredz

原文始发于微信公众号(Ots安全):通过中间人攻击阻止EDR数据传输(遥测)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月5日11:23:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过中间人攻击阻止EDR数据传输(遥测)https://cn-sec.com/archives/3030881.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息