开发者社区> 桃子红了呐> 正文

DGA特征挖掘

简介:
+关注继续查看

摘自:https://paper.seebug.org/papers/Archive/drops2/%E7%94%A8%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E8%AF%86%E5%88%AB%E9%9A%8F%E6%9C%BA%E7%94%9F%E6%88%90%E7%9A%84C%26amp%3BC%E5%9F%9F%E5%90%8D.html

0x00 前言


本文用识别由域名生成算法Domain Generation Algorithm: DGA生成的C&C域名作为例子,目的是给白帽安全专家们介绍一下机器学习在安全领域的应用,演示一下机器学习模型的一般流程。机器的力量可以用来辅助白帽专家们更有效率的工作。

本文用到的演示数据集和python演示代码请参见 https://github.com/phunterlau/dga_classifier 关于编码和行文风格过于仓促的问题,请不要在意这些细节,如果有相关问题可以微博上@phunter_lau,大家互相交流进步。

0x02 数据收集


分类的任务需要告诉机器他用来学习的正例(positive samples)和反例(negative samples),在这里正例就是C&C域名,反例就是正常的合法域名。

正例和反例的涵盖范围和具体问题有关,具体到本文的例子,我选择Conficker(ABC三种混合)当作正例,Alexa前10万当作反例。Conficker的算法早在多年前公开。

0x03 特征工程


这几乎是整个文章最有值得读的部分。如果能把人类的经验用数量化表达给机器,机器就能学习到人类的经验,而特征(feature)就是人类经验的数量化。特征工程是个反复循环的过程,一开始我们找到基线特征,用分类算法计算并评价结果,如果结果不能达到预期,再回头来加入新的特征帮助更好的分类。

基本特征:随机性和熵

Shannon熵可以很好的判别fryjntzfvti.bizgoogle.com/qq.com之间的区别,因为前者用了很多不重复字母而qq.com的重复字幕比较多。但是很多合法域名的熵值和C&C域名之间的并非是绝对差距,比如baidu.com也是五个不重复的字母,这单个特征不足以最终决策,我们还一些其他高级的特征。

高级特征:还有什么能表达随机性呢

合法域名一般比较好念出来,C&C域名不好念

思考一下合法域名和C&C域名的目的,就可以想到:合法域名为了让人类记住会选一些好念(pronounceable)的域名,比如 google yahoo baidu等等有元音字母之类好念的,而C&C域名为了随机性就不太好念,比如fryjntzfvti.biz。域名里元音字母占的比重可以是个很好的特征。

“好念“这个概念也可以有另外一个高级一些的特征,叫做gibberish detection,判断一个字符串是不是能用人类的语言念出来,比如google就不是一个英文单词但是朗朗上口。这背后是一个基于马尔可夫链的模型,具体细节可以参见 https://github.com/rrenaud/Gibberish-Detector

连续 vs 分散

通过进一步观察我们可以发现,C&C域名的随机性也表现在连续出现的字母和数字上。一般随机生成的域名都不会出现大段连续的数字或者连续出现相同的字母。同时因为英文字母分布里辅音字母远多于元音字母,C&C更可能连续反复出现辅音字母,而合法域名为了好念多是元音辅音交替。这些都是不容易想到但是容易计算的特征,代码并不复杂。

还有什么?n-gram 的平均排名!

这是我个人认为比较巧妙的想法。

对于字符串文本的机器学习,n-gram (unigram(单字)bigram(相邻双字)trigram(相邻三字))常常能提供重要的特征。举例来说,fryjntzfvti.biz的域名的bigram分解是以下12个:

^f,fr,ry,yj,jn,nt,tz,zf,fv,vt,ti,i$

这里^$代表字符串的开头和结尾。观众朋友可以自行计算trigram当作练习。bigram/trigram本身出现的频率也可以当作特征,但是对这个问题来说,bigram本身可能有 (26+2)^2=784种组合,trigram就有21952种组合,特征向量的长度太长而我们的数据约有25万组,如果把他们本身当作特征,模型训练的速度很慢。(比较熟悉机器学习的观众朋友可能会提示用PCA等降维方法,我实际实验表明降维到20维左右效果也不错,在此不当作本文内容,请有兴趣的观众朋友自己实验一下。)

C&C域名的随机算法产生的bigram和trigram比较分散,而合法域名喜欢用比较好念好见的组合。如果把正例反例出现的bigram按照出现频率进行排序会发现,合法域名的bigram在频率排序里的位置比较靠前,而随机C&C域名产生的比较分散的bigram/trigram基本上频率都很低,所以bigram/trigram的平均排名也可以很好的区分C&C和合法域名。

扯一些额外内容。n-gram的分析方法也常用于malware的代码和二进制码的自动分析,比如ASM里面每个指令当作一个gram,指令的组合可能对应于一些可疑行为。靠人工找这些可能可疑行为对应的指令组合十分麻烦,但是机器就适合做这些繁琐的事情啊,只要把所有n-gram扔给机器做分类,最后机器会给出特定组合的权重,就能找到这些对应的指令对了。二进制代码的分析也有类似方法,参见最近Kaggle的malware分类比赛的获胜报告(参考文献3)。有白帽专家可能会问,有些可疑指令对可能距离比较远怎么办?这种情况就是skip-gram分析,建议谷歌搜索相关关键词,这里就不多说撑篇幅了。

究竟还能再挖出来什么特征呢?

特征工程就好像Taylor Swift的胸一样,你只要需要,用力挤努力挤还是有的。如果按照反例Alexa前10万名训练隐含马尔可夫链,计算一下从A_iA_i+1转换的概率。这个转换概率的分布对于正例有一些区别,也可以用来帮助区分。具体关于马尔可夫链相关知识请参见http://en.wikipedia.org/wiki/Markov_chain (解释起来背后的原因篇幅比较大,就只贴一下这个特征的分布图,但是不要害怕,看示例代码里的实现其实很简单,只是计算转移矩阵而已)

markov example

领域特征:安全专家的领域知识

对于C&C域名,不只是随机性,其他白帽专家才知道的领域知识也会提供重要的特征。

比如域名所在的ccTLD可以当作特征。我们知道多数情况下.com的域名申请又贵又要审核,所以现在很多C&C不会选择.com,反而会选一些审核不严的比如.biz .info .ru .ws以及最近爆发的.xyz之类的ccTLD都是C&C重灾区。中国的白帽专家也可能知道.cn现在申请都得备案,所以C&C也不太可能用.cn的根域名当作C&C。值得提醒的是,这些情况并非100%确定,比如C&C可能找到一个cn域名的下级域名当C&C而主域名已备案,这些需要机器综合考虑其他特征来判断。ccTLD这样的类别特征(categorial feature)在使用的时候需要编码变成 is_biz=0/1, is_ws=0/1这样展开的0/1向量,这个方法叫做OneHotEncoder。实际的模型结果也显示出来.biz .info之类的ccTLD对C&C域名的判断占的重要性比重很大。

还有一些看似比较无聊但是很有价值的知识:比如C&C域名现在越来越长,因为短的域名都被抢光了,所以域名长度也可以是重要的特征。更多这些特征需要安全专家加入自己的领域知识来得到,专家的领域知识在机器学习里的重要程度几乎是第一位的。

 

见原文。。。
















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7640055.html,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19825 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29215 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13589 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22544 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16489 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20725 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14905 0
4267
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载