大规模 DNS 流量中检测恶意请求

渗透技巧 1年前 (2023) admin
359 0 0

工作来源

ESORICS 2021

工作背景

基于 DNS 数据来检测不同种类的恶意域名是个常见的做法,但只有不到 20% 的恶意域名被发现并被添加到黑名单中。

大规模 DNS 流量中检测恶意请求

此前的研究集中在对信标的检测,失陷主机到特定域名的 DNS 查询会表现出周期性。但这种方法存在局限,大型企业的主机与域名的 DNS 查询关系非常多,为了应对庞大的数据规模就必须过滤部分数据或者降低检测频率。如果攻击者同时使用多个域名,就无法在单个请求关系中被捕获。典型的示例为 MSC(multistage channels),失陷主机会与多个域名进行通信,常见的 TrickBot 与 Emotet 都是如此。传统的基于单个请求关系的检测方法,数据集很大且需要进行大量过滤。而直接对域名进行分类,可以大量减少检测数量且能够应对各种对抗措施。

工作设计

主要分为两个阶段:数据处理与分类。数据处理阶段主要将 DNS 查询的时间序列转换为 PSD 向量,表征各种频率下周期性通信强度。另外,首先需要过滤掉良性的域名再按照时间聚合。对聚合的 DNS 查询使用离散傅里叶变换(DFT)生成 PSD 向量。最终在分类阶段,利用神经网络根据域名请求进行分类。

大规模 DNS 流量中检测恶意请求

数据处理

过滤

首先必须删除非常不可能是恶意域名的请求,以此提高准确性并提高处理性能。为了兼顾全局和部分,目前的设定是 Alexa 前一百万域名中排名低于五十万或分析时被至少 3% 的主机访问过,就可以被当作是可信的域名。

DNS 请求聚合

聚合计算时间范围内进行 DNS 请求的数量,聚合数据会生成一个恒定大小的结果。时间范围越小,粒度更细;时间范围越大,效率越高。时间窗口设定为一小时,尽可能消除包括网络延迟、掉线抖动以外的噪音。

PSD 计算

功率谱密度(PSD)为给定输入的离散傅里叶变换(DFT)系数的平方幅值,常用于估计时间序列信号的频谱密度,业界也常用其检测周期性任务。PSD 向量可以被认为是特定时间频率下事件发生的强度。

首先要对 DNS 请求聚合进行离散傅里叶变换:

大规模 DNS 流量中检测恶意请求

最终的 PSD 向量为:

大规模 DNS 流量中检测恶意请求

归一化

由于 PSD 向量大小不同,需要进行归一化将每个频率的幅度映射为 0 到 1 之间的值。归一化后的 PSD 向量,仍能够保持每个频率的尺度一致。

分类

使用前馈神经网络,利用归一化后的 PSD 向量进行分类。神经网络由三个隐藏层(分别有 25、55 和 25 个神经元)、ReLU 激活函数与一个具有 sigmoid 激活函数的输出层组成。并且,Adam 优化器用于最小化二元交叉熵损失。

分类结果以数字从 0 到 1 之间表示,数值与大表明 DNS 查询由 Bot 发出的可能性越大。

工作准备

Akamai 从全球八个公司网络(超过 16000 台设备)收集一周的真实 DNS 数据,其中请求了 1262527 个域名,而设备与域名的请求对有 1893221 对。默认假定这些设备都是未失陷的,所以另外准备了恶意软件通信(如 CobaltStrike、Empire 等)注入数据集。恶意流量需要对(1)连续查询的时间间隔 (2)每次发送的 DNS 查询数量 (3)查询的域名进行控制。

将 16000 台设备,拆分成 10000 台设备的训练集和 6000 台设备的测试集。

工作评估

封闭测试集测试

MORTON 与 Baywatch、WARP 进行对比,信标检测场景下 WARP 最准确(97%),其次是 MORTON(85%)。MSC 检测场景下 MORTON 最准确(85%),其次是 Baywatch-100(72%)。

大规模 DNS 流量中检测恶意请求

尽管 MORTON 与这两者都能给以 85% 以上的准确率检出恶意软件信标。但对于 MSC 的情况,MORTON 仍然可以保持高检出率。

定义丢弃率为恶意 DNS 请求从数据集中被丢弃的速率,从 0% 逐渐增加到 90%。从鲁棒性上来看,信标检测场景下 MORTON 与 Baywatch 都很好,而 WARP 表现较差。在 MSC 检测场景下,MORTON 表现最好,而 Baywatch 与 WARP 表现都很差。

大规模 DNS 流量中检测恶意请求

而且从性能上说,MORTON 比 Baywatch 和 WARP 快两到三个数量级。整个测试集,MORTON 需要 70 秒、Baywatch-10 需要 16 分钟、Baywatch-100 需要近三个小时、WARP 需要近 24 小时。

结果总结如下所示:

大规模 DNS 流量中检测恶意请求

开放真实场景测试

实际部署三者到两个大型企业一周时间,超过两万台设备。检测结果利用 VirusTotal 进行辅助验证,分为 (1)VirusTotal 认为是 Bot 且确实是 (2)VirusTotal 不认为是 Bot 但确实是 (3)完全不是 Bot。

大规模 DNS 流量中检测恶意请求

MORTON 在一周内检出 77 台设备,62% 确实是 Bot。MORTON 的这个检出率,相比其他二者高三倍。而且,Baywatch-100 检出了 365 个连接对,只有 19% 确实是 Bot。在实际场景中,这样会使分析人员陷入告警疲劳。WARP 的误报率为 0%,但检出率只有 MORTON 的一半。

案例分析

  • Gandalf:gammawizard.com 是一个提供在线交易分析的网站,而 Baywatch-100 将其检出。合法行为是每两分钟进行一次查询,但这并不是典型的信标行为。

  • uBlock:uBlock 是 Chrome 浏览器的恶意插件,每十五分钟请求域名的解析情况并向其发送心跳。

  • IsErik:IsErik 是模块化的广告软件,通过 MSC 与服务器进行通信。

三者的 DNS 查询时间序列图如下所示:

大规模 DNS 流量中检测恶意请求

工作思考

这是一篇之前就说要写但一直耽搁着的文章,这个工作早在 Botconf 2022 时就已经讲过,感兴趣可以查看之前写过的文章。

根据通信模式检测利用合法服务进行 C&C 的失陷主机

Avenger,公众号:威胁棱镜Botconf 2022 议题速递

Akamai 展示了从时域到频域的分析方法,也是很有潜力的研究方向。清华早在 CCS 2021 上也发表了一篇利用频域分析检测恶意流量的工作《Realtime Robust Malicious Traffic Detection via Frequency Domain Analysis》,感兴趣可以查看。其他的就不过多赘述了,在大量域名数据上肯下功夫确实是可以折腾出许多玩法的。

原文始发于微信公众号(威胁棱镜):大规模 DNS 流量中检测恶意请求

版权声明:admin 发表于 2023年3月8日 上午10:01。
转载请注明:大规模 DNS 流量中检测恶意请求 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...