用机器智能解决网络安全问题:基于DNS的实践(上)

第125期(上)

中国科大数据群分享:

Build machine intelligence on security: a DNS approach

主讲人:

Liu Hongliang, Principal data scientist, Nominum

分享内容细节(上):

感谢校友群对我的邀请,今天我来讲一讲我们公司Nominum数据和科学组使用数据来做网络安全这个话题下面的一些技术。今天分享的这个主题叫做用机器智能来做网络安全,我们公司Nominum是一家做DNS软件服务和安全的公司,在第二页可以看到关于我们公司的一些介绍。

现在我们跳到第三页,这是我差不多每一次报告都会提醒大家,来提起话题的一个问题。如果每天我们有一千亿条,也就是100 billion的实时的DNS查询,我们能从这里拿到些什么东西?

首先我先给大家简要地回顾一下,DNS是什么?大家都是科大出来的,我们肯定都知道,如果你想上科大BBS的话,在校内打202.38.64.3就可以了。但是呢,这个数字如果你记得太多,大家会记不住,所以呢我们就给他一个域名叫做bbs.ustc.edu.cn,这就是DNS的存在的意义。也就是说我们用一个人类可以记住的名称,我们管它叫做域名,让机器后台把它转化成实时的IP。比如说这种转换也解决了很多技术上面的,随着新技术发展产生的难题。比如说科大的BBS是分校内和校外的,当我们在校外进行转化的时候,它就会变成218.104.71.174,有效的区分了各个网段。其实在现在所有大家使用的因特网当中,DNS是基础服务当中的一层,这个我们上课都说过,它是英特网七层模型当中的第四层,它是UDP的协议。很多大家可能想不到的各种服务,它用的都是DNS。比如说你家里买了一个智能开关,后面它要跟它的宿主服务器进行联系,它就会发送一个DNS请求,所有的你要看YouTube,你要上优酷,包括今天我们上毛豆网,它需要后面的CDN的联系,它也通过DNS。在我的工作当中,做的最重要的部分是通过DNS这些做网络安全,因为很多恶意的软件,它也是通过DNS和它的宿主服务器进行联络的。

比如说我们跳到第五页,来看一看为什么要通过DNS来做网络安全。因为,设想一下,我们就记得今年比较早期的时候见到的WannaCry这个勒索软件,我们也见过很多各种其他的木马,盗号木马,DDoS木马等等。这些个恶意软件,一般它的工作行为是这样的,在每一台感染机器上面,它会在一定的时间段,向它的宿主服务器,发送一个请求,比如说我今天要干什么?这个宿主服务器,我们就管它叫做主控服务器,英文叫做Command Control,专业术语是C&C或者C2。

就是像右边这个卡通画指示的,这些被病毒感染的机器就会问宿主服务器,我们今天要打哪个?当宿主服务器的控制者接到了指令,说我们今天需要攻击某个网站,比如说我今天要攻击Nominum,它就会对这些感染机器的查询作出反馈。就说今天打Nominum,然后这些整个它控制的僵尸网络就可以发起攻击。

这种控制模式我们管它叫Command Control的一种控制模式,有一个单独的宿主服务器,控制一群被恶意软件感染的机器。当然了这些恶意软件的感染不只是说DDoS攻击,也有可能是你的浏览器弹窗,可能是偷盗你的本地存储密码,也可能是偷盗你的信用卡信息,你的身份证信息等等其他信息,以及最近几年特别火特别可恶的勒索病毒,它从宿主服务器里面接受一个加密的密码,然后通过这个密码加密你本地机器的一些文档文件,跳出一个窗口,说你的机器已经被锁了,必须付多少比特币,它也是通过Command Control这个方法进行联络的。而我的主要工作也就是找到这些Command Control域名,然后把它在我们的平台上封掉。

当然了这个页面所给大家展示的是Command Control的联系方式中最简单的一种。在接下来的后面的几页幻灯片当中,我可能会说到一些其他比较复杂的方式,这还是很有意思的,这个老鼠游戏当中,我们当猫必须要跑得快一点。

接下来到第六页,也就说为什么Nominum这个平台适合做这个事,我们从合作运营商当中,每天实时的收过来差不多一千亿条DNS查询,这100 billion都是实时的,用我们的算法在这些数据查询当中找到了恶意域名。同时我们也可以实时的推送这些恶意域名,到我们的DNS平台上,告诉我们的DNS服务器,比如说ABC.EFG.XYZ这个域名,我们侦测它是一个恶意域名,我们会让我们的DNS解析服务,在解析它的同时,即使它是一个可以指向一个IP的域名,我们跟感染的机器的反馈的结果是:“没有,这个域名不存在”,这其实也就是有效地阻止了感染机器,进一步的DDoS攻击,进一步的勒索,其实这是一个很有效的平台工作。所以呢我们就有这个责任去找到这些恶意域名。

现在问题来了,第七页,我就放了二个截图。我们可以想象一下,一千亿条,每天一千亿条是个什么概念,也就说我就随便放整个截图,左边这个截图差不多有三四十条DNS查询,这是0.000001秒当中我们的实际数据中观察的。当中有两个域名,我们的算法侦测到它是一个疑似,右边又是0.00001秒当中的域名,我们的方法侦查到又是一个疑似的。

我们有如此大的数据量,但是我们有如此少的时间,也就告诉我们,如果我们真的想用人工去做的话,比如像第八页所展示的,我们就像那个驴一样被翘到了空中,任务实在是太重了,我们必须要建立一些机器。所以今天的报告我会跟大家讲一讲,是我们建立机器智能的一些工作。

首先第一个机器智能的工作,我们叫做实时的异常检测工作是在第九页。在DNS查询当中,我们想找一些异常的DNS,因为我们知道google.com, baidu.com, maodou.io这些都不是什么异常的域名,这些都是很正常的域名,所以就应该作为合法的查询让它通过。

而有一些域名,比如说KJXY.XXXX,看起来很乱的域名,我们就说这是不是可能是一个恶意软件的Command Control,所以我们的异常检测系统,它是一个智能的机器,它模仿人类的这种思维,模仿人类安全研究员的专家思维来判断,哪些域名看起来很奇怪,它是一种异常,这种异常体包括这个域名从来没有出现过、这个域名样子看起来很奇怪、这个域名看起来它的子域名太多了,比如说google自己,它只有mail.google等等,其他合法的,也就是总共也就几百个,但是如果有一个域名一下出来两百多万个子域名,这是什么?这是一种DDoS攻击的方式,所以我们的第一个工作,也就是很多公众的入口,也就是这个实时的异常检测。我们通过构建一个异常检测的机器,在100 billion的queries当中做实时的检测。现在问题来了,100 billion的queries每天差不多相当于每秒钟一百万到一百五十万之间。怎么在快速实时的输入数据当中判断哪个域名看起来它就是很奇怪,这是一个很难的工程性挑战。我们在这上面做了很多的工作,我们有自己的Nominum detection system以及专门针对这个新域名,我们这个截图当中有一个叫做New core domain,我们定义了叫做新核心域名。也就是说这一个域名在之前的很长一段时间里,从来没有在我们的数据当中发现,今天突然出现了,那它应该是有些什么问题,这个实时的异常检测系统,我们认为它很有效,并且很努力的把它做成一个接近实时的越好,我们现在已经可以做到差不多是毫秒级别。

现在问题来了,为什么我们一定要做一个特别实时的系统?这是第十页我想说的。因为在我们的实际工作当中,我们观测到很多特别是从今年开始,一个新的流行趋势,也就是恶意软件的作者往往就是想挣些快线,他申请了很多域名,每个域名只用两个小时。

比如说在这个页面当中,我们看到右边是在我们实际工作当中侦测到的,对于澳大利亚的一个银行在做攻击,它的域名叫commbank-login-acc.com,对于一个普通群众,你要是在手机上看到commbank,这可能是我家银行,一点进去输入我的用户名密码,你就中招了。

而且这种Phishing等恶意攻击它生命周期特别短,往往只有像我们在右边的第二幅图可以看到的,我们做了这个域名,它在我们的历史数据当中的统计。我们发现在前四个小时它已经可以完成它55%的感染率。也就是说如果我们真的像传统的方法,我们需要一个密罐,需要用密罐来捕捉,并且通过人工去审核的话,我们在第四个小时收到第三方安全工作组给我们的汇报,在第四个小时再把它封禁掉,这就太迟了。也就说在如今安全领域的一个新趋势,也就是这些域名来得快,走得也快,我们必须在一个很短的时间内把它抓住,然后把它封禁掉。我们的系统架构方法是使用Kafka,来收集我们在世界各地的各个运营商给我们的数据,我们在世界各地都设有自己的数据中心,运营商可以通过数据中心把他们的数据实时的用Kafka传输到我们这里,然后我们在3号线数据中心把这些Kafka的数据集中到一起,然后自己构建了一些saleable solution,也就是能够实时处理差不多100 billion每天的实时数据的一个系统,这个系统当中我们用到了一些开源的工具,比如说Hadoop, Scala,也有一些我们自己研发的一些东西,这当中还是一个比较大的工程挑战。各位师兄师姐师弟师妹如果有兴趣的话,可以给我的email发封信,我们可以针对这个做商业上或者是学术上的合作。

然后另外一个工作,这个工作主要是由我来做的,所以可能要稍微多讲一点点,我们管它叫做域名的关联系统,这其实并不是一个新的点子,这在第11页,我从自然语言处理当中,我想到了这个这个办法,大家肯定知道在13年的时候,google出了一篇文章叫做word2vec,它对于每一个英文字,它通过输入一篇又一篇的Wikipedia这样的文章,它可以建立每一个英文字之间的关联,这种关联可以简单地简化成一个代数计算。

然后在我的工作当中我就想,如果你把每一个ip它给出了的DNS查询当作一篇Wikipedia的文章,每一个域名在查询中当做一个英文字,那么我是不是也可以通过机器的算力,就是通过一个很强大的机器以及很好的算法去就砸在这些数据上面,我可以是不是就可以通过这个办法构建任意两个域名之间的关联?

事实上是可以的。这个在自然语言处理当中的方法可以用到DNS的查询当中,并且我们已经成功地构建了我们的系统,叫做Domain2vec的系统,就是从word2vec那个名字过来的。它继承了word2vec关于词句之间建模的sequence modelling,和最近的一篇文章sequence to sequence那个方法比较的类似。我们通过学习DNS查询的序列,最大化这些常用序列之间的出现的概率,从而我们可以学到任意两个域名之间,可以通过一个简单的点击操作,就可以知道它俩之间的关联性。具体怎么用呢,很多种用法,这在这个报告当中可以分享一到两个事例,比如说结合前面的我们说到的,anomaly detection,这些异常的域名训练出来的向量,我们对所有的异常域名,直接做点击进行一个相似度打分,并且针对这个相似度,我们做一次聚类操作。结果就如右边所示,我们发现有些域名它很漂亮地聚成一团,这里的可视化用的是t-SNE,在标题当中写了,这个如果有兴趣的话可以自己玩一下,速度还是挺快的。

我们发现有一些域名,这当中每一个点就是个域名,很漂亮的集中在一块。因为我们说这东西是什么?然后我们就点击一下,会发现它们是一些已知的或者说未知的一些域名生成算法生成的一些域名。这里的域名生成算法,可以提一下,在前面第五页的时候,我们说到有一个command control的域名,然后这些感染的机器来跟command control的域名进行联系,然后它们就可以发送攻击了。当然了我们人类的研究员也不傻,如果抓到了一个恶意软件,做立项工程,我们很容易去发现,它在里面内置的command control域名。所以呢,现在很多恶意软件它用一种很聪明的招数,也就说它不把这个command control域名内置到它的二进制文件里面,反而通过一个叫做域名生成算法,根据今天的日期,根据今天最火的一条推特,根据今天两种货币之间的汇率等等,当作随机数字种子。然后生成差不多一千或者五百这样的域名,然后通过这些域名冲淡它自己实际在DNS查询当中的信号,这也就是我们在第七页当中看到的那么多看似乱七八糟的域名,多数都是这么来的。恶意软件想通过这种办法来阻挠人类研究员,通过在DNS数据当中进行挨个搜索查询来找到它们。

但是这些作者忽略了另外一个问题,如果它通过一个域名生成算法生成一列的域名,然后挑当中一个来做它真实的command control的话,它这些五百个、一千个DNS的查询都是要发出去的,我们都是会收到这些查询的。这个查询会形成一个序列,这个序列是很容易被我们的domain2vec model进行建模,并且对比任意两个域名的相似性做聚类。

这些看似聪明的DGA域名,会自己把自己聚成一个类。当我们发现的这些聚类,当我们发现这些信号的话,我们就很容易把这一批总共五百或者一千,最强的有一个叫PykspaDGA算法,它生成二千个真实的,以及八千个假的,总共1万个,每天一波都会形成一个很大的聚类,我们会把这个聚类抓到,然后实时的推送到封禁系统上。

这个DGA其实对我们来说反而是一个聪明反被聪明误的办法,这个方法很有效的抵抗了人类的研究,但是它抵抗不住机器。当然这只是一个例子,当我们用到这种域名关联模型,可以做很多其他的东西,一会儿在之后的幻灯片会说到,我们先看一下第12页。

在这里我就跟大家简单讲一下,这一个模型的基本流程是什么?因为这是我自己做的,所以我觉得这个还是一个比较聪明的一个办法。通过我们的Kafka可以收到全世界各大运营商,总共好几十个运营商,各大都有,具体的名字公司不可以说,反正各大都有,差不多大家用的这些提供商基本上都是我们的客户。当我们收到了这些实时数据的时候,为它序列进行建模,我们把每一个域名转化成它的哈夫曼编码,然后通过这些哈夫曼编码,最大化这一个域名所在以及它周围这些存在域名的贡献化的概率。

通过反复最大化贡献的这个概率,我们训练一个深层的神经网络,就是类似word2vec的办法,但是我们的网络比它们要稍微的复杂一些。通过这个网络,我们可以计算任意两个域名之间的关联,简单的向量点击就可以了。然后结合我们前面提到的实时异常检测,比如说这总有十万个域名,它都是在我们异常检测当中出现的。

很简单,把这些十万的域名,我们通过DBSCAN一个很简单的聚类算法,就可以很轻松地得到nexus, 3Pack,sex,game over等等等等。如果你是安全行业,你会耳熟能详闭着眼睛都知道这些恶意软件是干什么的。同时我们也发现有一些族群它不能匹配到任何一种恶意软件,这是怎么回事?我们就由自己的研究团队去深挖这些域名的行为,通过这种方法已经找到了差不多十几种新的未知的DGA的算法。这些DGA有些是比较漂亮的DGA,比如说Bedep这种DGA,它的DGA算法是一致的,但是它用的种子是开始发动恶意攻击之前的某一天的某两个国家之间的汇率,也就是说即使我们逆向工程的算法得不到种子,也是没办法预测它的名字。幸运的是domain2vec model可以把这些控制域名很好的聚集成一类,而不需要知道它的种子,我们就可以知道这一部分域名总共五百多个,这是坏的,实时把它推送到封禁系统就可以了。关于这个模型,如果大家有兴趣的话,可以线下我们好好交流,这其实里面有很多的方法论以及一些实验细节的东西,这些模型也是我们公司申请的专利了,这里面会有一些详细的东西。

其实对于这个模型来说,为什么我个人觉得比较好,因为是我是高能物理出身,其实这个模型在筛选以及聚类,其实很符合高能物理当中的一个分析的方法论。当知道了这么多事件,当中需要对事件进行筛选,然后对每个事件它的每一个独立的频道进行分析。

所以你看在安全领域的数据跟我们在高能物理的数据里面的方法论其实是很一致的,所以作为一个物理出身的,我比较幸运可以接触到这么多数据,并且用高能物理的分析方法来解决网络安全的数据问题。

Build machine intelligence on security: a DNS approach(下)请见今日次条文案。

致谢:

本次是数据群第一次采用直播形式进行,感谢毛豆网提供的基础支持

作者简介

刘洪亮0002,物理学博士,现在Akamai任首席数据科学家。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180314G14APT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励