【待看】EDR联动数据包封锁技术

news/2024/11/15 20:55:38/文章来源:https://www.cnblogs.com/o-O-oO/p/18367865

一、摘要

利用中间人攻击(PitM)和过滤EDR特定通讯数据包, 可以干扰和阻止EDR与云服务器的通讯过程, 从而有效隐藏报警信息, 使其不被SOC团队察觉。这种效果可以通过对目标主机实行ARP欺骗并配置iptables来实现。这种方法的优势在于不需要管理员权限或对受害主机的访问, 但需要一台与其在同一网络中需要由攻击者控制的主机。

二、实施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 地址),因此受害者主机发送到网关的流量实际上被重定向到攻击者主机。攻击者可以截获和篡改流量:攻击者主机现在可以接收、截获并可能篡改受害者主机与网关之间的流量,从而实现中间人攻击。

三、实施中间人攻击过程

假设攻击者和受害机器的配置信息如下:

攻击者系统: 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

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

四、拦截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

五、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.comwd.microsoft.comwdcpalt.microsoft.comwdcp.microsoft.comblob.core.windows.netwinatp-gw-cusautomatedirstrprdcusendpoint.security.microsoft.comsmartscreen.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

原创 二进制空间安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784060.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

034、Vue3+TypeScript基础,路由params参数的使用

01、main.js代码如下:// 引入createApp用于创建Vue实例 import {createApp} from vue // 引入App.vue根组件 import App from ./App.vue//引入路由 import router from ./routerconst app = createApp(App); //使用路由 app.use(router); // App.vue的根元素id为app app.mount…

RocketMQ 的convertAndSend方法和syncSend方法区别

RocketMQ的convertAndSend方法和syncSend方法是两种不同的消息发送 convertAndSend方法是将消息内容转换为指定的格式,然后发送到指定的消息队列。这个方法是异步发送的,也就是说,发送消息后就立即返回并不等待对方的响应。 syncSend方法则是同步发送消息,也就是说发送消息…

CSDN取消关注博主才可阅读全文限制

安装这个脚本可以跳过关注 脚本地址作者:翎野君 出处:http://www.cnblogs.com/lingyejun/ 若本文如对您有帮助,不妨点击一下右下角的【推荐】。如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。转载文章请务必保留出处和署名,否则保留追究法…

c语言中%f输出double型和float型值

001、[root@PC1 test]# ls test.c [root@PC1 test]# cat test.c #include <stdio.h>int main(void) {double i; //声明double型 和 float型变量float j;i = 3.14;j = 3.14;printf("i = %f\n", i);printf("j = %f\n", j);return 0; } […

unbuntu更新Python3版本到最新,安装依赖手动编译

安装依赖sudo apt update sudo apt install build-essential zlib1g-dev libffi-dev libssl-dev下载安装包,手动配置编译 官网查找对应linux版本tgz包wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz tar -xzvf Python-3.11.0.tgz cd Python-3.11.0配置编译…

MISC-666

MISC-666 前言 很简单的一道题,主要是涉及hex转图片,文件头 PNG 文件头: 89 50 4E 47 0D 0A 1A 0A 文件尾: AE 42 60 82 题目 666.zip解压获得6个txt文件,内容分别如下 #1 89504e470d0a1a0a0000000d494844520000012c0000012c0806000000797d8e75000000017352474200aece1ce9…

ollama搭建本地ai大模型并应用调用

1、下载ollama 1)https://ollama.com 进入网址,点击download下载2)下载后直接安装即可。 2、启动配置模型 默认是启动cmd窗口直接输入1 ollama run llama3启动llama3大模型 或者启动千问大模型1 ollama run qwen2启动输入你需要输入的问题即可 3、配置UI界面 安装docker并部…

Fluent Editor:一个基于 Quill 2.0 的富文本编辑器,功能强大、开箱即用!

你好,我是Kagol,个人公众号:前端开源星球。带大家一起使用下 Fluent Editor,使用起来基本上和 Quill 没什么区别,只需要重点关注下增强的部分,比如表格、附件、@提醒、表情等模块。你好,我是 Kagol,个人公众号:前端开源星球。 今年4月份,听到 Quill 2.0 正式发布的消…

二进制下载部署Nginx

一、通过Nginx官网并采取二进制方式部署 Nginx官网 二、具体步骤[root@web01 yum.repos.d]# ll -d nginx.repo -rw-r--r--. 1 root root 398 Aug 17 22:01 nginx.repo [root@web01 yum.repos.d]# pwd /etc/yum.repos.d接下来可以直接使用 yum -y install nginx 则是直接从官方下…

c语言中%f和%lf读入浮点型数据

001、a、%lf、和 %f读入double型值[root@PC1 test]# ls test.c [root@PC1 test]# cat test.c ## 测试程序 #include <stdio.h>int main(void) {double i, j; // 声明两个double型变量printf("i: "); scanf("%lf", &…

万兆以太网协议栈的FPGA实现(三):万兆网CRC

参考: 基于FPGA的千兆以太网的实现(3)_以太网crc计算-CSDN博客CRC 802.11来自将8位数据同时输入,再输出32位CRC数值; 其能成功实现的原因就是因为并行化。(下路仅是部分的计算步骤)结合千兆网CRC的计算思想,我们只需要把第一轮单字节CRC的结果作为第二轮CRC的开始,就可…

面试场景题:一次关于线程池使用场景的讨论。

你好呀,我是歪歪。 来一起看看一个关于线程池使用场景上的问题,就当是个场景面试题了。 问题是这样的:字有点多,我直接给你上个图你就懂了:前端发起一个生成报表页面的请求,这个页面上的数据由后端多个接口返回,另外由于微服务化了,所以数据散落在每个微服务中,因此需…