PDNS数据驱动DGA分析

这次介绍360netlab团队最近的报告《PDNS数据驱动DGA分析》,原文请参见NANOG会议日程 NANOG 71幻灯片在这里

这篇报告描述了他们在一个实际业务系统里用DNS查询数据捕获分析DGA的工作。和之前专栏文章《从无效的DNS流量中检测基于DGA的恶意程序》介绍的偏方法和理论的论文不同,“PDNS数据驱动DGA分析“把类似方法提升到产品业务水平,讲述了他们在实际工程中利用实际收集的数据捕捉DGA的算法和方法,并在报告里列举了一个实际业务系统需要经历的若干技术难点。这个报告也为工业产品的数据分析流程提供了一个很好的模版,它描述了数据获得、数据筛选和清洗、数据建模、分析和理解结果、用第三方信息组合深入探索等若干步骤,对其他数据分析工作有一定参考意义。

恶意软件的DGA C&C流量隐藏在DNS查询数据里,所以拥有DNS查询数据推送是第一步,该团队利用自己的DNS查询服务器以及其他渠道收集DNS查询数据并做分析。数据的筛选和清洗也是必不可少的工作,它需要对分析课题的特性有深入的了解。作者利用了DGA的短时特性、集中感染以及快速变化的特性,在百万QPS的全量DNS数据里筛选了符合要求的DNS查询作为数据建模的输入。筛选后的DNS查询满足长尾特性,这也和多数DGA的行为吻合:DGA为了隐藏自己会产生很多无效DNS查询,从而平摊到每个可能C&C域名的查询量并不多。

数据建模上,作者利用了DGA感染IP的集中特性,认为感染IP和域名的二分图有强相关,为了量化相关度,利用感染IP和域名的邻接矩阵和自己的转置相乘计算域名之间关联,并用 Louvain 算法按关联分数将关联的域名聚类,这些聚类结果可能指向为某个DGA族群。基于DGA的长尾特性,作者仅对长尾聚类,这也让这个稀疏大矩阵相乘在工程上可行。

为了理解聚类结果,作者首先利用已知DGA比如conficker等验证聚类,如果聚类重复发现了已知DGA,可以认为该聚类可行;同时也通过第三方知识验证聚类结果是否指向某种恶意软件。作者列举了聚类结果里有若干种噪音,判定噪音并分析噪音的来源,这也是学术论文因为数据量太小涉及不到但是工业系统里占比重很大的工作。

作者并不止步于聚类的结果,他们更进一步的工作是建立维护一个恶意软件沙盒,通过沙盒动态分析捕捉恶意软件的DNS请求,并和聚类结果对比联系沙盒的二进制和DGA族群。沙盒行为分析有效补充了基于DNS的DGA分析:它提供了DGA存在的确实证据,有效支持了阻断系统;同时它的DNS流量数据也提供给沙盒分析进一步支持,比如定义了二进制文件的感染力度和威胁程度。

这份报告描述了DNS数据应用到DGA检测的实际工作流程,展示了实际生产环境里数据分析的艰苦情况,里面提到的各种方法对相关工作有很多指导意义。构建工业系统也有很多壁垒,比如数据壁垒,工程技术壁垒等,这份报告也描述了克服这些壁垒把实验室方法放到产品里的实战经验。

很多数据科学和分析的初学者往往有一些不切实际的幻想,觉得数据科学的工作就是拿一份清晰漂亮的数据丢给模型调调参数就可以了,而构建一个工业级的业务系统情况远比这个复杂,作者能够提出这些方法解决实际问题,也建筑在他们对自己的课题和数据有深入了解的情况下,从数据收集到筛选到聚类的矩阵相乘,其中很多技术难点,只有对业务和数据有深入理解才可以完成。这篇报告英文标题为“A DGA Odyssey: PDNS Driven DGA Analysis“,可能描述了该团队工作的心路历程:从一个可行的理论成果到一个实际能用的工业级业务系统,其构造的过程就是奥德修斯历经千难万险和风暴、独眼巨人等搏斗最终回到家乡一样艰辛。这些艰辛在工业系统里的有效的区分了不同研究组和公司的产品竞争力,通俗点说就是,坑都要踩,谁先踩完谁就赢得竞争。

题图来自于 Lynx cat Photo: Bobcat Kittens 遵循非商业使用准则。


大家好,这是“安全数据与机器学习”专栏的第四篇文章。这个专栏配合我们的小密圈/知识星球群组“安全数据与机器学习”和我们的blog专栏 Kakapo - 一个机器学习社区 ,给各位安全届的朋友提高锻炼数据建模和机器学习的知识。我们会不定期寻找一些优秀的文章,在这里写上摘要和导读,引导大家前去深入学习。如果想参与“安全数据与机器学习”的讨论,请下载“知识星球”app并搜索“安全数据与机器学习“或者点击 t.xiaomiquan.com/IIqZV7 接受邀请。

发布于 2017-10-06

文章被以下专栏收录