欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

机器学习安全:鉴别僵尸网络面板

来源:本站整理 作者:佚名 时间:2016-10-13 TAG: 我要投稿


如今越来越多的设备添加了与互联网相连的功能,借此来提高自身性能,改善用户体验。但是大多数设备都没有配备足够的安全措施来保护自己的数据,这就使得这些设备很容易被滥用。
滥用的最普遍形式之一就是用这些相互关联的设备创建僵尸网络,这是个拥有强大计算能力的互连设备隐蔽网络,这种强大的计算能力往往会被滥用来大范围操纵垃圾电子邮件或DOS攻击活动。经过这几年企业与执法部门之间的共同努力,主要的几个僵尸网络(如Rustock、Ramnet和 Waledac)已经被打破。但是,由于很难确定它们发送指令和控制的服务器,目前仍有无数的此类网络依旧活跃。
很明显我们需要开发出更先进的识别技术,尤其是查明C2面板的好办法,这样才能提供明确的证据要求禁用托管C2的IP/域名,这也是发生滥用的指标。这种方法也会十分有利于研究僵尸网络,并最终彻底击败僵尸网络。
一般情况下,我们会先观察到存在恶意软件活动,然后才会发现僵尸网络面板,接下来会确定具体的恶意软件所连接的“背后凶手”。这种鉴定过程往往需要对C2面板类型十分了解的研究人员手动操作。在接下来的文章中,我们将会讨论一种新型的、易于规模化应用的全自动鉴定C2面板方法,这种方法需要的请求数量非常少,所以基本不会被僵尸网络操作人员发现。
介绍
机器学习可以解决查明僵尸网络指挥和控制(C2)面板这个大问题。虽然机器学习本身就是一个难以掌握的难题,但是这带来了一个全新的解决问题工具,对于黑客和工程师来说这是划时代的变化。
在感受过机器学习的能量之后,我迫切地想要将其攻破并运用在更多的安全工具中。在2016年美国黑帽大会上我们展示了这一系列工具。这一项目的相关内容以及项目的Chrome 扩展可以在GitHub 中找到。
鉴别僵尸网络面板
在追踪僵尸网络时,像我一样的安全工作者经常会发现隐藏很深的C2面板。尽管DiamondFox的开发者选择确定面板的真正目的,但事实上大多数开发者都习惯于掩盖自己的意图。
举例来说,Zeus的登陆页面看起来十分正常,毫不起眼:
 


在许多案例中,僵尸网络的运行者都会粉饰自己的C2面板,甚至会骗过最专业的研究人员,使其难以辨别真相。
但是按常理来说,这些运营商一定不会花费心思改写整个面板,所以总会有一些残留的内容。这些残留一般会藏在资源文件中。
机器学习vs 僵尸网络面板
我们可以结合机器学习与模糊哈希打造一个弹性分类器,这样可以按需优化成尽可能少的请求,用来查明这些僵尸网络面板,不管这些面板是否经过修改。
从机器学习的角度来看,这一课题带来了许多有趣的挑战。最大的问题就是已知的活跃僵尸网络面板数量有限。回顾过去可以找到很多已知的活跃面板,但是在给定时间内已知的活跃面板少之又少。这是因为在大多数案例中,某个面板一经发现,用不了多少时间就会被取缔。
活跃样本数量稀缺使得分类变得困难,只有找到更多的数据我们才能更顺利地开展工作。此外,由于这是一个对抗性问题,我们的分类手段必须要能适应僵尸网络运营商的策略,以避免检测。这就意味着我们可能会需要做很多不必要的工作。
最后,我们需要隐身和效率,这就意味着请求数量越少越好。因此,我们需要尽可能减少分类所需的信息量,这就要求我们要以一种微妙的平衡来处理这一问题。
经过这一方法分类之后,僵尸网络面板主要有以下几类:
Andromeda
Betabot
Citadel
Cythosia
Dendroid
Dexter
DiamondFox
Ice IX
JackPOS (Easter variety)
Pony
Solar bot
VertexNet
Zeus
收集特征和样本
将机器学习融入现实世界面临的最重要也是最困难的问题之一就是特征工程。特征通常情况下会表示为0到1之间的值,这些值会从数据中提取,然后输入机器学习的算法当中。
在许多情况下,这一过程中的困难就是确定有关信息,这将会贯穿所有样本(数据点),并且为分类提供了所需值。在我们的示例中,我们正打算在请求结果的基础上创建特征,借此来确定它是否是C2面板。
为了创建功能设置,我们需要确定所有已知的、与僵尸网络C2面板有关的偏移量,我将这一设置叫做“prevectors”。我们对测验组中的每一个样本都请求了所有的已知偏移量,这组测验组当中的所有URL我们都已经确定了它们的属性。这样操作之后界面非常混乱,因为每一个面板都产生了成千上万个请求。
为了更加清晰,我们为测验组中的每一个面板都请求了所有已知偏移量,并将HTTP回应代码和使用这些结果返回结果的ssDeep都存储下来。这使得我们能够确认所有的状态代码都是相同的,并且比较内容时无需存储这些内容。因为首先会匹配回应代码,所以ssDeep对比产生的评分就相当于特征值。
我们已经在所有已知僵尸网络和非僵尸网络中运行了 prevectors,之后需要通过查找重复结果来减少请求数量。如果对于同一个给定请求,相应代码是相同的,那么ssDeep值就是100%匹配,那我们就可以删除这个多余特征。
在减少了特征集之后,我们开始将prevectors 转换为矢量。简单来说,机器学习领域的矢量就是一维数组的值,它们代表从样品中提取的特征。将一个样本转换成矢量时,我们会以同样的顺序处理每一个特征,并且更新矢量中的每个值来匹配特征结果。
一旦生成了矢量集,就可以将其贴上“标签”存储起来,标签会说明这是哪个僵尸网络的面板:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载