part1
点击上方蓝字关注我们
往期推荐
1.摘要
利用中间人攻击(PitM)和过滤EDR特定通讯数据包, 可以干扰和阻止EDR与云服务器的通讯过程, 从而有效隐藏报警信息, 使其不被SOC团队察觉。这种效果可以通过对目标主机实行ARP欺骗并配置iptables来实现。这种方法的优势在于不需要管理员权限或对受害主机的访问, 但需要一台与其在同一网络中需要由攻击者控制的主机。
2.实施ARP欺骗网络架构
ARP欺骗技术之前有篇文章有详细讨论,参考:黑客利用ARP协议进行侦查和攻击手法, 下面是利用ARP欺骗实施中间人攻击的网络架构图:
上图中实体对象有三个,分别为:
Victim Host(受害者主机): 其IP地址为:192.168.10.52 ; Mac地址为:00:0c:29:6a:2e:fd; ARP表为: 192.168.10.1 @ 00:e1:a9:eb:26:41, 其Mac地址最终被伪造成: 00:0c:29:39:33:63。
Gateway(网关): IP地址为:192.168.10.1; Mac地址为: e0:e1:a9:eb:26:41。
Attacker Host(攻击者主机): 其IP地址为:192.168.10.239; MAC地址为: 00:0c:29:39:33:63; 其伪造的ARP回复为:
192.168.10.1 is at 00:0c:29:39:33:63
上图中的ARP攻击流程如下:
攻击者主机发送伪造的ARP回复: 攻击者主机(IP:192.168.10.239,MAC:00:0c:29:39:33:63)向受害者主机发送一个伪造的 ARP 回复,内容是“192.168.10.1 的 MAC 地址是 00:0c:29:39:33:63”。
受害者主机更新ARP表: 受害者主机(IP:192.168.10.52,MAC:00:0c:29:6a:2e:fd) 收到这个伪造的 ARP 回复后,会将其 ARP 表中的网关 IP(192.168.10.1)对应的 MAC 地址更新为攻击者的 MAC 地址(00:0c:29:39:33:63)。
受害者主机通信重定向到攻击者主机:由于受害者主机认为网关 IP(192.168.10.1)的 MAC 地址是 00:0c:29:39:33:63(攻击者的 MAC 地址),因此受害者主机发送到网关的流量实际上被重定向到攻击者主机。
攻击者可以截获和篡改流量:攻击者主机现在可以接收、截获并可能篡改受害者主机与网关之间的流量,从而实现中间人攻击。
3.实施中间人攻击过程
假设攻击者和受害机器的配置信息如下:
攻击者系统: Ubuntu 22.04
受害者主机: Windows11并安装了EDR
攻击者开展攻击步骤:
1.安装dsniff工具,命令如下:
sudo apt install dsniff
2.确认可以实施攻击的IP地址范围:
sysctl -w net.ipv4.ip_forward=1
3.运行arpspoof,命令格式如下:
sudo arpspoof -i <interface> -t <target ip> <gateway ip>
下面是一个实际攻击的命令:
sudo arpspoof -i ens34 -t 192.168.10.52 192.168.10.1
以下是命令执行后的回显信息:
上图中显示了受害主机的ARP表, 网关192.168.10.1的 MAC 地址已从原来的 e0:e1:a9:eb:26:41 更新为 00:0C:29:39:33:63。如图:
可以通过浏览受害主机上的网站并使用tcpdump观察攻击者机器上的出站流量来确认流量:
tcpdump -i <interface> host <victim ip>
tcpdump -i host
在攻击者计算机上观察来自受害主机的出站流量:
4.拦截EDR通讯数据包
在执行PitM攻击过程中, 通过在forward表中配置规则,可以利用iptables来丢弃目标数据包, 可以根据目的IP地址或子网编写 DROP规则, 然而这种方式存在巨大挑战, 某些EDR产品与数百上千台服务器进行通信, 很难在保证隐身的同时覆盖每台服务器, 有一种解决方案是硬编码进程名称并阻止这些进程生成的所有出站流量, 但这种方法不适合应用在中间人攻击场景中。
大部分EDR供应商通过端口443使用TLS加密来与远程API进行通信, 虽然TLS目标是保护通信安全, 但在初始密钥交换流量的某些内容是可读的,例如:作为初始握手过程的一部分, "Client Hello"消息包含一些可读信息,如图:
最初的尝试是使用iptables阻止“Client Hello”数据包,阻止TLS密钥交换完成。要应用iptables规则,可以对服务器名称使用字符串匹配并阻止客户端Hello数据包。以下是规则内容:
iptables -A FORWARD -p tcp --dport 443 -m string --string "security.microsoft.com" --algo bm DROP
iptables -A FORWARD -p tcp --dport 443 -m string --string“security.microsoft.com“--algo bm DROP
但问题出现了, 虽然在一开始有效果, 但随着时间推移, 一些数据包会丢失,导致EDR控制台接收到数据并发出警报。这很可能是由于处理解析的方式和高流量造成的。与基于IP地址或端口丢弃数据包相比,使用iptables进行字符串匹配的效率较低。
这种方法实现的脚本可以在这里自取:
https://github.com/TierZeroSecurity/edr\_blocker
5.EDR监控封锁技术
由于内置的iptables与字符串匹配解决方案不是那么有效,我们决定使用Python Scapy来开发自己的搜索工具。
Python Scapy开源地址: https://github.com/secdev/scapy
Python Scapy库支持解析TLS握手, 包括SNI, 它比iptables字符串匹配性能更高,即使Scapy在用户模式运行也有不错的性能。由于该库不能丢弃数据包,所以初步的想法是解析Client Hello数据包中的SNI,并根据单词列表进行检查。如果找到匹配项,iptables将使用更有效的规则更新,以根据目的IP地址丢弃数据包。我们测试了在异步嗅探模式下运行的Scapy,并观察到即使在4K视频流中也没有数据包丢失。当工具终止时,它会刷新创建的iptables规则。
Scapy 具有生成自定义数据包的能力,包括 ARP 回复。因此,可以在同一个代码中嵌入 ARP 欺骗功能。该工具接受目标主机的 IP 地址和网关 IP 地址,并向目标发送伪造的 ARP 回复,以冒充网关并执行中间人攻击。当工具终止时,它会向目标发送正确的 ARP 回复,以恢复被污染的 ARP 表。
除此之外,该工具还提供了其它的一些功能:
确保在攻击者计算机上启用了数据包转发,即使用sysctl -n net.ipv4.ip_forward进行
检查。
监控模式-当SNI包含阻塞条目时,它不创建iptables规则。
详细模式-输出客户端Hello数据包中的所有服务器名称。
输入文件-它获取包含单词列表的文件的文件路径,以匹配TLS握手的SNI服务器名称。
下面对微软的端点检测产品进行测试, 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或Office365。应该在使用工具之前进行充分的测试。当云服务器无法访问时发生的任何事件或警报都将缓存在本地。然而,本地缓存在重新启动时会被清除,从而导致可见性丧失。
同样,也对CrowdStrike产品进行了该工具测试, CrowdStrike不像MDE那样频繁地执行TLS握手。有三种方法可以捕获TLS握手:
**选项1:**只需在详细模式下运行工具并等待一段时间,通常为30分钟~ 1小时。
选项2:在工具运行时重启机器。ARP 欺骗会在 CrowdStrike 的初始 TLS 握手发生之前进行,工具将能够捕获并开始阻止它。
**选项3:**由于已知CrowdStrike的API主机托管在AWS上,因此可以在攻击者计算机上使用tcpdump来识别与AWS关联的IP地址,该地址应如下所示:
以下屏幕截图显示了CrowdStrike观察到的SNI:
可以看到, 两个服务器名称都以cloudsink.net结尾。因此,CrowdStrike只使用了以下顶级父域:
cloudsink.net
在使用该工具时, 在至少一个 IP 地址被阻止之前,不要执行可能触发警报的任何操作。
_参考链接:_https://tierzerosecurity.co.nz/2024/07/23/edr-telemetry-blocker.html
往期推荐
点个在看你最好看