使用社区发现算法从企业内部无效域名中挖掘DGA

Posted by webber on Category: 机器学习 Tags: 聚类 图算法 社区发现 DGA DNS

使用社区发现算法从企业内部无效域名中挖掘DGA


一、 前言

 最近看到DNS专家Antonakakis教授等发表的论文(参考文献1)和360netlab分享的PPT(参考文献2),两者尝试从运营商DNS流量中检测DGA域名,进而发现僵尸网络。恰好我们这里有自己企业内部的DNS流量,遂吸取两篇文章中方法的优点,在我们自己大数据平台上搞了一把。

二、 检测DGA域名的方法

 僵尸网络通常会使用域名生成算法(DGA)来动态生成大量随机域名,并且选择其中少量域名进行c&c通信。因此一个使用DGA的僵尸网络会产生大量随机的无效域名。通常检测DGA会有两种思路:

1、 检测域名随机性,通过提取域名字符统计特征建模或使用深度学习建模。随着越来越多的DGA通过内置词列表生成DGA,这种方法的有效性在下降。

2、 IP、域名作为顶点,解析关系作为边,构成IP和域名的二部图,感染IP和域名的二部图强相关,对图进行聚类,相同恶意软件家族的域名会聚类成簇。

Antonakakis教授论文方法

enter image description here  论文提出了一个叫Pleiades的基于DGA的僵尸网络检测系统,它可以在大型ISP网络下有效地分析解析失效域名流量从而自动识别僵尸网络。系统分为两个模块,DGA发现模块和DGA分类和C&C检测模块。

  • DGA发现模块

 模块包含两个聚类模型:计算无效域名序列的33个统计特征,使用x-means建模聚类;使用基于谱聚类的图划分策略对主机和域名关系进行聚类,这样被相近主机共同查询过的失效域名会被聚类到一起。关联以上两个模型的聚类结果,得到由同一DGA产生的NXDomains聚簇。然后对关联结果进行过滤,丢弃已知DGA家族和过于嘈杂的类簇。

  • DGA分类和C&C检测模块

 首先结合白名单和沙箱环境中已知DGA类簇,对DGA发现模块输出的聚类结果进行过滤。对以上过滤出的类簇建立两个模型:决策树分类模型和隐马尔可夫检测模型,用于从活跃域名中检测活跃的C&C域名。

360netlab方法

 360netlab报告中使用国内10%以上的DNS流量,整个分析大致可分为以下4个过程。

  • 数据清洗和筛选

 过去7天中的新域名

 二级域名不在Alexa top 10K

 注册商提供的虚拟机

 通配符域名

 …

  • 数据建模

 利用IP和域名的邻接矩阵和自己的转置相乘计算域名之间关联,作为边权重,使用Louvain算法进行聚类,聚类结果可能指向某个DGA家族。注意边权重这里360netlab取阈值>=3,意味着至少3个IP同时感染同一DGA家族软件才能被识别。

  • 聚类筛选

 域名仅由顶级域名和二级域名组成,并且二级域名长度>5

 rdata号<5   聚类类别的Nxdomains占比>=20%   聚类类别的域名数量>=4

  • DGA家族分类和识别

 结合沙箱识别已知和未知的DGA家族

三、 我的做法

 企业终端数量有限,DNS流量以及复杂度远远小于运营商,内部大规模感染同一恶意软件的概率也很低。因此对于发现企业内部的DGA,Pleiades系统太过复杂,360netlab的建模和过滤方法也过于苛刻。因此需要吸取以上两种方法的优点,结合企业内部的DNS流量特点检测DGA域名。

  • 数据清洗

 使用无效域名进行聚类,清洗掉人为输入错误或服务器host配置错误的域名:

 过滤出无效域名(nxdomains)

 对域名进行校验,域名格式不正确的剔除,剔除非英文域名

 对顶级域名进行校验,不在顶级域名列表中的域名剔除,顶级域名列表取自http://www.iana.org/domains/root/db

  • 建模聚类

 对每天的无效域名进行聚类,取ip和域名作为顶点,解析关系作为边,直接使用python-louvain模块的Louvain算法聚类,未使用边权重。过滤出聚类结果中的域名和标签。

  • 聚类结果过滤

 上步每天有20左右的聚类结果,存在很多的noise:类别中只有少量域名,类别中的域名大部分为少量二级域名的子域名,需要进一步筛选:

 类别中域名数量>5

 类别中二级域名去重数/类别中域名数>=80%

四、 结果分析

 最终每天有10个以内的聚类结果,达到了可运维的程度。回溯10月1号-11月20号的DNS流量,并将聚类出的域名查询我们的威胁情报平台,跟踪到了9个疑似DGA域名类,使用字母编号。

  • A类

 7-8字符长度的随机二级域名,子域名v1,顶级域名com、ru、net、org,未命中威胁情报。

enter image description here

  • B类

 6字符长度的随机域名,顶级域名com、org,未命中威胁情报。

enter image description here

  • C类

 5-11字符长度的随机域名,顶级域名com、org、net、biz、info、cc等,少量域名命中威胁情报,在微步上可查到属于Conficker家族的远控域名。

enter image description here enter image description here enter image description here

  • D类

 7-10字符长度的随机二级域名,子域名s,根域名com、ru,全部命中威胁情报,显示为c2域名,这部分域名未在微步查到,威胁情报平台也未提供更详细的信息。

enter image description here

  • E类

 随机短字母和随机数字的组合,未命中威胁情报。

enter image description here

  • F类

 单词和数字的随机组合,这个类别只在一天内出现,未命中威胁情报。

enter image description here

  • G类

 二级域名和三级域名都是随机字符,未命中威胁情报。

enter image description here

  • H类

 单词随机组合的域名,主域名net,少量域名命中威胁情报,在微步查询到为conficker远控域名。

enter image description here enter image description here

  • I类

 长度7的随机字母的二级域名,有时会有x+数字的子域名,未命中威胁情报。

enter image description here

五、 总结

1、 结合企业DNS流量的特点,使用社区发现算法可以有效检测DGA域名,进而指导运维人员发现感染主机。

2、 更进一步,我们希望能够指出聚类结果可能的恶意软件家族类型,可以像Pleiades系统或参考文献3对已知DGA家族建立统计或深度学习模型,也可以结合威胁情报进行判断(事实证明效果有限),Pleiades或360netlab用到的沙箱系统效果也许不错,可惜对于企业壁垒太高。

3、 聚类结果有时表现的不够理想,有时类似的域名会分为多个类,比如C类有时会分裂为两个聚类,尚不清楚是算法原因还是存在不同变种。

参考文献

[1] [From Throw-Away Traffic to Bots:Detecting the Rise of DGA-Based Malware](https://www.usenix.org/conference/usenixsecurity12/technical-sessions/presentation/antonakakis)

翻译

[2] [A DGA Odyssey PDNS Driven DGA Analysis](https://pc.nanog.org/static/published/meetings/NANOG71/1444/20171004_Gong_A_Dga_Odyssey__v1.pdf)

[3] [Automatic Detection of Malware-Generated Domains with Recurrent Neural Models](http://xueshu.baidu.com/s?wd=paperuri%3A%28aa8c6d62789a8532229868f418279cbe%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Farxiv.org%2Fpdf%2F1709.07102&ie=utf-8&sc_us=12234284011031174039)


The article is not allowed to repost unless author authorized




You can donate to me if the article makes sense to you

|

Welcome to follow my wechat



Comments