1.3 使用AI进行安全建设
传统安全领域,无论是主动的威胁发现和安全防护还是被动的入侵检测,基本都是基于以往经验总结的静态检测规则和黑白名单。这些技术在过去很长一段时间已经被证明难以抵抗黑产以及针对性极强的商业间谍。基于经验积累的静态规则技术,总是处于被动挨打的境地,无论是精心的加密混淆还是没有补丁的零日攻击,大多可以轻松绕过现有的防护体系。安全圈有句戏言,这种安全设备是“人多聪明它多聪明,人已经想到的,没准能防住,人没想到的肯定防不住”。另外,这种基于规则的安全技术,现实中的最大问题是,规则的难以维护,规则之间的重复与冲突更让这些问题雪上加霜,堪比一片混乱的机房(见图1-6)。
图1-6 一片混乱的机房
是否可以使用AI技术给安全领域带来一股新的力量呢?2015年,微软在Kaggle上发起了一个恶意代码分类的比赛,并提供了超过500 G的原始数据。有意思的是,取得第一名的队所采用的方法与我们常见的方法存在很大不同,展现了AI在安全领域的巨大潜力。早期的反病毒软件大都单一地采用特征匹配的方法,简单地利用特征串完成检测。随着恶意代码技术的发展,恶意代码开始在传播过程中进行变形以躲避查杀,此时同一个恶意代码的变种数量急剧提升,形态较本体也发生了较大的变化,反病毒软件已经很难提取出一段代码作为恶意代码的特征码。Kaggle比赛中最重要的环节就是特征工程,特征的好坏直接决定了比赛成绩。在这次Kaggle的比赛中冠军队选取了三个黄金特征,恶意代码图像、OpCode n-gram和Headers个数,其他一些特征包括ByteCode n-gram、指令频数等。机器学习部分采用了随机森林算法,并用到了xgboost和pypy加快训练速度,最终他们检测的效果超过了常见传统检测方式获得了冠军。
在移动领域,使用类似的思路也取得了不错的成绩,百度安全使用深度学习识别恶意APK,准确率达到99.96%,召回率达到了80%,2016年,反映该研究成果的论文《AI BASED ANTIVIRUS: CAN ALPHAAV WIN THE BATTLE IN WHICH MAN HAS FAILED?》被BlackHat会议收录并做了相关演讲。恶意APK伴随移动互联网井喷式发展,其数量在近几年呈几何级增长(见图1-7),传统的基于规则的检测技术已经无法覆盖如此大量的恶意程序。
图1-7 恶意APK数量猛增
在大量的人工分析恶意APK的工作中发现,人工分析的过程很类似图像识别的过程(见图1-8)。深度学习在图像识别领域有着成熟的应用,是否可以通过提取APK特征,通过深度学习的方法来自动化识别恶意APK呢?
图1-8 恶意APK分析与图像识别
对APK的特征提取主要分为三大类:
❑ 第一类是结构化特征,包括APK申请的权限的个数,资源文件中包含的图像文件个数和参数大于20的函数的个数等。
❑ 第二类是统计类特征,包括近千条统计特征。
❑ 第三类是长期恶意APK检测的经验总结的特征,包括资源文件中是否包含可执行文件,assets文件夹中是否包含APK文件等。
特征提取过程如图1-9所示。
图1-9 APK特征提取过程
归一化处理1000多个APK特征(见图1-10),取值控制在-1和1之间。
图1-10 归一化APK特征
使用深度学习网络训练,训练过程如图1-11所示。
图1-11 APK深度学习训练过程
整个训练过程中使用超过了15万个样本,训练使用了百度开源的深度学习框架Paddle。
事实上,在安全领域的常见分类问题上,基于AI的技术都取得了不错的进展,比如垃圾邮件、恶意网址、黄反鉴别、病毒检测等。对此有兴趣想多了解的读者可以看我撰写的《Web安全之机器学习入门》和《Web安全之深度学习实战》两本书。