深度安卓恶意软件检测系统:用卷积神经网络保护你的手机

恶意软件可以说是我们现代生活的一大威胁,为了保护我们电子设备中的财产和资料安全,我们往往需要寻求安全软件的帮助。前段时间,来自贝尔法斯特女王大学和亚利桑那州立大学的研究者提出并开源了一种使用神经网络来帮助检测安卓(Android)恶意软件的方法。机器之心在本文中对该项目的介绍文档和论文摘要进行了介绍。


我们使用了一种卷积神经网络(CNN)来进行安卓恶意软件分类。这种恶意软件分类的执行方式是对安卓 APK 进行反汇编,然后对其原始操作码序列(raw opcode sequence)进行静态分析。其中,指示「恶意」的特征是从原始操作码序列中自动学习到,因此无需人工设计恶意特征。该网络运行在 GPU 上,可以快速扫描大量文件。


如果你使用此代码,请引用以下论文:


@inproceedings{mclaughlin2017codaspy,
title = "Deep Android Malware Detection",
author = "Niall McLaughlin and {Martinez del Rincon}, Jesus and BooJoong Kang and Suleiman Yerima and Paul Miller and Sakir Sezer and Yeganeh Safaeisemnani and Erik Trickel and Ziming Zhao and Adam Doupé and {Joon Ahn}, Gail",
year = "2016",
month = "12",
booktitle = "Proceeding of the ACM Conference on Data and Applications Security and Privacy (CODASPY) 2017",
publisher = "Association for Computing Machinery (ACM)",
}


如何运行本代码

给定一个已有的数据集目录(详情见下),其中 run.sh 文件将会执行以下内容:

  1. 将数据集分割为训练集和留存的测试集
  2. 训练神经网络
  3. 在测试集上对训练后的网络进行测试

准备工作

数据集结构

数据集所需目录结构的例子可参看 ./dataset

本神经网络需要格式正确的操作码序列文件,并且数据集目录中需要包含恶意和良性的操作码序列文件的子目录。

在 ./dataset 中提供了一个数据目录示例。该数据集目录必须包含以下结构:

  1. 必须要有一个叫做「Benign」的目录,其中包含了非恶意的操作码序列文件。
  2. 其它目录可以随意命名,其中包含了恶意的操作码序列文件。

操作码序列文件(Opcode Sequence files)

操作码序列文件可以使用操作码序列创建工具从安卓 APK 中创建。该工具放在 ./opcodeseq_creator 下。请参阅该目录下的 README 文件了解更多。

设置

本神经网络的代码是使用 Torch 实现的。推荐使用 GPU 来实现测试和训练加速。有关 Torch 安装的更多详情,请参阅:http://torch.ch/

其中操作码序列创建工具需要 APKTool:https://ibotpeaches.github.io/Apktool/

论文:深度安卓恶意软件检测(Deep Android Malware Detection)

在这篇论文中,我们提出了一种使用深度卷积神经网络(CNN)的全新安卓恶意软件检测系统。恶意软件分类的执行是基于对反汇编的程序的原始操作码序列进行静态分析。指示恶意软件的特征是从原始操作码序列中自动学习到,因此无需人工设计恶意特征。我们提出的系统的训练流程比已有的基于 n-gram 的恶意软件检测方法要简单得多,因为该网络是端到端地训练来联合学习适当的特征并执行分类,因此无需在训练过程中明确枚举数百万 n-gram。该网络设计还允许使用特征这样的长 n-gram,而已有的方法却无法在计算上做到这一点。训练完成后,该网络可以在一个 GPU 上得到有效的执行,从而可以快速扫描大量文件。

入门安卓工程卷积神经网络恶意软件检测
返回顶部