1.4 人工智能在安全领域的应用
人工智能在安全领域的应用还属于起步阶段,各大安全公司以及互联网巨头都投入大量的人力物力,试图使用人工智能的技术来颠覆安全这个行业,目前在黄反鉴定、恶意链接、业务风控领域、病毒分析、APT检测方面都取得了不错的进展,典型案例的就是2015年的一次数据挖掘比赛。
2015年,微软在Kaggle上发起了一个恶意代码分类的比赛,并提供了超过500G的原始数据。有意思的是,取得第一名的队伍三个人都不是搞安全出身的,所采用的方法与我们常见的方法存在很大不同,展现了机器学习在安全领域的巨大潜力。早期的反病毒软件大都单一的采用特征匹配的方法,简单的利用特征串完成检测。随着恶意代码技术的发展,恶意代码开始在传播过程中进行变形以躲避查杀,此时同一个恶意代码的变种数量急剧提升,形态较本体也发生了较大的变化,反病毒软件已经很难提取出一段代码作为恶意代码的特征码。Kaggle比赛中最重要的环节就是特征工程,特征的好坏直接决定了比赛成绩。在这次Kaggle的比赛中冠军队伍选取了三个“黄金”特征:恶意代码图像、 OpCode n-gram 和 Headers 个数,其他一些特征包括 ByteCode n-gram ,指令频数等。机器学习部分采用了随机森林算法,并用到了 xgboost 和 pypy 加快训练速度,最终他们检测的效果超过了常见传统检测方式,取得了冠军。
1.恶意代码图像
这个概念最早是2011年由加利福尼亚大学的 Nataraj 和 Karthikeyan 在他们的论文 Malware Images: Visualization and Automatic Classification 中提出来的,思路非常新颖,把一个二进制文件以灰度图的形式展现出来,利用图像中的纹理特征对恶意代码进行聚类。此后,有许多研究人员在这个思路基础上进行了改进和探索。就目前发表的文章来看,恶意代码图像的形式并不固定,研究人员可根据实际情况进行调整和创新。
- OpCode n-gram
n-gram 是自然语言处理领域的概念,早期的语音识别技术和统计语言模型与它密不可分。 n-gram 基于一个简单的假设,即认为一个词出现的概率仅与它之前的n-1个词有关,这个概率可从大量语料中统计得到。例如“吃”的后面出现“苹果”或“披萨”的概率就会比“公路”的概率大(正常的语料中基本不会出现“吃公路”这种组合),可以看出 n-gram 在一定程度上包含了部分语言特征。
将 n-gram应用于恶意代码识别的想法最早由Tony等人在2004年的论文 N-gram-based Detection of New Malicious Code 中提出,不过他们的方法是基于 ByteCode 的。2008年 Moskovitch 等人的论文 Unknown Malcode Detection Using OPCODE Representation 中提出利用 OpCode 代替 ByteCode 更加科学,如图1-6所示。
在移动应用领域,使用类似的思路也取得了不错的成绩,我的同事王磊使用深度学习识别恶意APK,准确率达到99.96%,召回率达到了80%,2016年,反映该研究成果的论文“AI Based Antivirus: Can Alphaav Win The Battle in Which Man Has Failed?”被享誉国内外的Blackhat会议收录并做了相关演讲。
恶意APK伴随移动互联网井喷式的发展,其数量在近几年几何级别增长,如图1-7所示。传统的基于规则的检测技术已经无法覆盖如此大量的恶意程序。
王磊团队在大量的人工分析恶意APK的工作中发现,人工分析的过程很类似图像识别的过程。深度学习在图像识别领域有着成熟的应用,是否可以通过提取APK特征,通过深度学习的方法来自动化识别恶意APK呢?如图1-8所示。
王磊团队对APK的特征提取主要分为三大类特征:
结构化特征,包括APK申请的权限的个数,资源文件中包含的图像文件个数和参数大于20的函数的个数等。
统计类特征,包括近千条统计特征。
长期恶意APK检测的经验总结的特征,包括资源文件中是否包含可执行文件,assets文件夹中是否包含APK文件等。
特征提取过程如图1-9所示。
归一化处理一千多个特征,取值控制在-1和1之间,如图1-10所示。
使用深度学习网络训练,训练过程如图1-11所示。
整个训练过程中使用超过了15万个样本,训练使用了百度开源的深度学习框架Paddle。本书的第二部中关于深度学习的案例也主要使用Paddle和TensorFlow框架编写。