网络安全领域中的加密流量的检测是一个老生常谈的话题,随着人工智能的发展,给同样的问题,带来了不同的解决思路。
近年来,越来越多的研究者,尝试着将AI应用到已有的网络安全领域中。从早先的一些不靠谱的文章人工智能网络安全?请再认真点!,到如今的一些是实实在在的实验成果。可以看到,科学的确在进步。AI在网络安全领域中的应用,也的确越来越多。
绿盟天枢实验室发布的一篇《基于深度学习的物联网恶意软件家族细粒度分类研究》就是一篇靠谱的文章。通过具体的实验验证自己的思路,从中可以看到作者是在真真正正的在用AI做一些事情,其解决问题的思路也非常值得借鉴。当然从业务角度和专业的AI算法角度出发,仍有不足和提升的空间。今天我们就来隔空对话,详细的聊聊该方法中的一些道道。
1 文章中,识别木马的主要思路
用一句话来概括这篇文章《基于深度学习的物联网恶意软件家族细粒度分类研究》的主要思路就是:把木马通信的pcap包做切分,然后用AI图片分类模型进行训练。其原理是想借助AI的分类功能从木马的通信数据中找到线索。
这种思想很有创意,从流量测入手也是网络安全问题的只一个主要解决手段之一。难能可贵的是作者也做了一些实验,验证的其思路的可行性。如图:
从结果中可以看出,这种做法有一定的识别能力,但也暴漏出了一定的问题,例如第4、8、10、11类的分类问题。
面对这样的结果,忍不住想深入分析一下,我们觉得,分类模型是没问题的,问题应该出在业务层面的数据处理环节。
2 业务角度的提升
文章中描述了对业务数据处理的方法:“首先调研当前流行的物联网恶意软件家族,然后在内部平台上查询并下载样本,共下载到12种恶意家族的样本,最后通过沙箱返回相应的pcap数据包。并使用USTC-TK2016工具集对数据进行预处理”
要了解这个问题需要先明白USTC-TK2016工具会做什么。
2.1 USTC-TK2016工具集做了什么?
USTC-TK2016工具集应该是把所有的会话的前多少个字节切一块儿,多余的去掉,不够的补0。这种做法其实和DPI的数据处理非常相似, DPI系统中,也是重点对每一个流量的前几个字节进行分析。当然实际情况中,作者也可能不是这么做的。但从文章中看不出具体做法,我们就先对该做法进行分析,与作者无关,仅仅是技术层面的探讨。
这么做的话,会带来什么?我们接着往下看
2.2 数据采集的问题
按照前文所说的做法,本质是把一个会话当成一个识别的对象,然后拿这个去训练。即,从一个会话里按照一定的规则取出784字节,将其转成28*28大小的图片,然后以图片的方式来进行分类处理。
从海量的数据分析角度来看,依赖一个会话的一行数据去做输入的方式并不可取。因为每个APP会有多种会话可能,而且在某种情况下,多个APP也可能会有相似的会话数据产生。
还有一个问题就是这些木马在那个所谓的沙箱里跑的时候,有些时候产生的流量其实并不一定全是木马的流量,有一些也可能是背景流量,比如它附着的win10或者说是某一个linux操作系统时,系统本身就会产生一些流量。文章中并没有提及清洗噪音一事。如果在处理数据时,没有做这些去噪音的动作,也会影响识别效果。
2.3 清洗掉了关键信息
在数据清洗阶段,作者将流量数据特有的ip地址等信息进行随机替换,这一操作使得模型在识别任务中损失了大量的线索。其实木马的通讯流量中,远端的IP加端口是一个特别固定的集合,是识别木马的最有利线索。
一般来讲,木马都会与C2服务器(command and control server)通讯,而这种C2服务器全球一共也没几个,例如大部分的蠕虫木马,其C2服务器最多也就二十几个地址,然后端口也是固定的,所以直接使用几个地址再加几个固定端口马上就能搞定问题。
当然了,如果直接这么用就是确定模型了,根本不需要人工智能啊!其实也是这样的。
自己把最有用信息去掉,然后通过细微的特征来进行观察,并对其分类,这有种给自己出难题的感觉。它违背了使用AI的本质:AI还是要根据实际需要而用,而不是为了使用AI而用。
2.4 应该将AI用到适合的场景
从AI的应用场景来看,该文章是可行方案,但不是最佳方案。其实以目前的技术,这种层次上的应用识别, DPI已经做得非常完美了。
文章开头出说到传统的DPI系统对加密数据识别不出来的现象是有一些问题的。因为在作者所提供的那个场景里, 所涉及到的80%或90%的流量,都是使用这种确定性的DPI模型来识别出来的。现在又在识别出来的结果之上,使用人工智能再去尝试识别一下,有点多此一举。不过从学术角度来看,作者所做的实验还是有价值的。起码证明了使用AI在通过流量进行应用识别领域的可行性。
该文章是想用它的这个方法去否定DPI,其实他也没有证明为什么他可以解决加密数据识别问题。因为对于加密出来的数据,还有可能会出现各种不同的图。
而单纯对于文章中的这个特定场景,本质上直接用多项式算法是完全可以描述的。实际上不应该用人工智能。
2.5 安全领域的AI到底要怎么用?
就本篇文章来说,把某一个源地址出来的数据做一个识别目标,或是把某一个源地址出来的每一个会话单独去识别,这个是很难做到的。
如果要做的话,可以换个思路将远端的某一个地址当一个识别目标,会好一些。因为它更能够捕捉到以IP为单位的个体意图。而监控会话也不应该只是一条,应该是根据多条会话合并后所产生的整体行为来进行定性。
将数据转成图片进行分类是一个很出色的思想,因为图片本身是2维数据,要充分利用这个特征,在转化过程中将每条的会话作为行,多条的序列作为列,才会更大程度的还原事件本身的信息。而不是直接将单条数据的1维特征硬转成二维来进行处理。
2.6 更好的AI技术支招
同为AI人,看到安全领域有人用AI踏踏实实的做实验、做研究甚是开心。AI技术的发展和推广离不开我们这一代同行们的努力。
以上仅仅是我们根据以往的经验,对该文章中技术方法的一些建议。由于我们并不是安全出身,不周之处还望多多指正。
下面,献上我们在AI方向的一些经验,希望会对该行业的同行们一些帮助。
1,对于超多类识别问题,尤其是识别APP问题,不建议用分类算法。因为种类实在太多了,而大多分类都依赖于有监督学习,在没有看到样本同时,很难训练分类模型。尤其APP还有版本更新问题,一个版本就会换一批特征,无法正确的定位和捕捉
2,这种超多分类识别问题,建议使用表示学习,通过拟合空间距离来做相似度匹配。这样可以应对各种未知情况,而且对于非监督训练可以可以平滑过渡
3,文章中提到的分类模型虽然很成熟,但实在太老。使用的输入格式,当今也很少有人再用。建议使用ResNet、NasNet等目前主流的分类模型。现在最先进的分类模型是EfficientNet。《技术解读EfficientNet系列模型》建议关注一下,使用该模型可以将分类效果提升很多。
4,推荐一些比较优秀的非监督训练模型,可供参考,自编码、变分自编码、最大化互信息、f-gan等,这些技术可以在网络安全的数据研究方面提供很多的启发。
5,对于未知分类,未知威胁的识别处理,也是我们目前研究的方向。这个比较有挑战的任务引起了我们极大的兴趣。目前我们主要使用了图神经网络和零次学习的相关技术。目前部分成果和知识点同样也写到了书里,未来会陆续出版。同时也希望这方面有研究的同行们一起交流互相学习。