一种基于元信息的Android恶意软件检测方法
- 格式:pdf
- 大小:1.31 MB
- 文档页数:8
恶意软件检测恶意软件是指具有恶意目的的计算机程序,包括病毒、木马、蠕虫、间谍软件等。
它们会给用户带来不便甚至造成财产损失。
为了保护计算机和个人信息的安全,及时发现和清除恶意软件非常重要。
本文将介绍恶意软件检测的方法和工具。
一、常见的恶意软件检测方法1. 病毒库检测:病毒库是由安全厂商建立和维护的一个数据库,包含了已知的病毒特征。
病毒库检测通过比对计算机系统中的文件和程序与病毒库的特征,来判断是否存在已知的恶意软件。
这是一种常见且有效的检测方法。
2. 行为监测:恶意软件在感染计算机后会表现出一些特殊的行为,如修改系统文件、创建新文件、发送垃圾邮件等。
行为监测通过分析计算机的行为和操作记录,检测出是否存在异常行为,从而判断是否有恶意软件的存在。
3. 网络流量监测:恶意软件通常会通过网络与外部服务器进行通信,传输有害信息或接收远程指令。
通过监测计算机与外部服务器的网络流量,检测出是否存在恶意软件。
这种方法在网络安全领域应用广泛。
二、恶意软件检测工具推荐1. 杀毒软件:杀毒软件是一种常见的恶意软件检测工具,如Windows Defender、卡巴斯基、诺顿等。
它们通过病毒库检测和行为监测等方法,实时监测和防护计算机系统,及时清除潜在的恶意软件。
2. 防火墙:防火墙可以监控网络流量、过滤恶意网络请求,是保护计算机免受网络攻击和恶意软件侵扰的重要工具。
常见的防火墙有Windows防火墙、360安全卫士等。
3. 恶意软件扫描工具:除了杀毒软件和防火墙外,还有一些专门针对恶意软件检测的扫描工具,如Malwarebytes、AdwCleaner等。
它们能够检测和清除计算机中的恶意软件,提供更加全面的保护。
三、如何防范恶意软件除了及时检测和清除恶意软件外,预防恶意软件的感染也是非常重要的。
以下是一些防范恶意软件的建议:1. 安装可信的软件:避免从不明来源下载和安装软件。
只从官方网站或可信渠道下载软件,并确保软件的来源可靠。
一种Android应用程序恶意代码检测方法摘要:本文结合静态分析和动态分析提出一种恶意代码检测系统设计与实现。
静态分析模块中利用静态逆向分析技术,通过对敏感API函数的查找与统计、敏感信息数据流的跟踪实现恶意行为的检测。
动态分析模块中通过对系统日志的分析,对运行中的软件进行跟踪,记录运行过程中产生的各种敏感性行为,最终结合静态分析与动态分析产生的行为报告判断目标软件是否包含有恶意代码。
关键词:Android;恶意代码;静态分析;动态分析近年来,智能手机操作系统层出不穷,移动互联网面临着越来越多的安全问题。
智能终端恶意软件不仅会使用户的个人财产和数据安全受到威胁,也会对国家的信息安全造成了巨大隐患。
因此,分析智能终端操作系统安全性,以及提高对恶意软件的检测能力是十分必要的[1]。
为了对网络上泛滥的各种Android软件进行安全评估,本文将探讨Android平台下的恶意代码检测技术,提出结合静态分析与动态分析的恶意代码检测方案。
1 系统设计恶意代码检测系统主要由静态分析和动态分析两个模块组成。
静态分析模块主要包括黑白名单检测模块、反编译模块、数据流跟踪模块、关键字匹配与替换模块等。
如果在黑白名单检测模块检测出目标软件为恶意软件或者非恶意软件,则退出检测系统,否则进行动态分析。
动态分析利用Android系统输出日志的原理,实现对目标软件运行中所产生的敏感行为进行监控的目的。
1.1 静态检测系统设计1.1.1关键技术分析1)源代码的API恶意行为检测分析技术源代码分析首先利用Apktool工具对应用程序进行反编译,Apktool工具集成有Google官方的baksmali工具,可以将应用程序解压缩后得到的Dex字节码文件完整的转化为Smali代码文件的。
Smali代码文件完整的保留了源程序,逻辑结构比较清晰,能够进行比较准确的查找[2,3]。
2)数据流跟踪分析技术针对源代码的API恶意行为检测技术关于逻辑流程方面的缺点,本文中使用了数据流跟踪分析技术。
网络安全中的恶意代码检测方法恶意代码是指那些带有恶意意图的计算机程序,它们可能对用户的计算机系统、数据以及网络安全带来巨大风险。
随着网络攻击的不断增加和恶意代码的复杂化,恶意代码检测成为了网络安全中至关重要的一环。
本文将探讨网络安全中的恶意代码检测方法。
1. 病毒特征检测法病毒特征检测法是一种基于病毒数据库的常用检测方法。
它通过比对文件或代码的特征与已知病毒特征进行匹配,以确定是否存在恶意代码。
该方法的优势在于可以检测出已知的病毒,但缺点是无法检测出未知的病毒,因为对于未知的病毒,病毒特征数据库中并没有相应的特征。
2. 行为监测法行为监测法是一种动态分析方法,它通过监测程序运行时的行为来判断是否存在恶意代码。
该方法可以检测出未知的恶意代码,因为它不依赖于特定的特征库。
行为监测法主要是通过监控程序的系统调用、文件读写、网络连接等行为来推断程序是否具有恶意行为。
然而,由于恶意代码具有多样性和变异性,行为监测法也存在漏报和误报的风险。
3. 静态分析法静态分析法是一种通过分析恶意代码的源代码或二进制码来检测恶意代码的方法。
它可以在不运行程序的情况下检测出恶意代码的存在,并可以提供恶意代码的详细信息。
静态分析法主要依靠对代码结构、指令流等进行分析,以推断代码是否具有恶意行为。
然而,静态分析法也存在一些局限性,例如无法检测出加密或混淆的恶意代码。
4. 机器学习方法近年来,机器学习方法在恶意代码检测中得到了广泛应用。
机器学习方法利用大量的已知恶意代码样本进行训练,从而建立分类模型,并通过对新样本进行分类来判断是否存在恶意代码。
机器学习方法可以有效地检测出未知的恶意代码,并且可以通过不断更新训练样本来提高检测效果。
然而,机器学习方法也存在一些挑战,例如需要大量的训练样本和处理不平衡数据的问题。
5. 混合检测方法为了提高恶意代码检测的准确性和效率,研究者们提出了一种将多种检测方法结合起来的混合检测方法。
混合检测方法可以综合利用特征检测、行为监测、静态分析、机器学习等方法的优势,从而提高恶意代码检测的综合能力。
基于textCNN 模型的Android 恶意程序检测①张雄冠, 邵培南(中国电子科技集团公司第三十二研究所, 上海 201808)通讯作者: 张雄冠摘 要: 针对当前Android 恶意程序检测方法对未知应用程序检测能力不足的问题, 提出了一种基于textCNN 神经网络模型的Android 恶意程序检测方法. 该方法使用多种触发机制从不同层面上诱导激发程序潜在的恶意行为; 针对不同层面上的函数调用, 采用特定的hook 技术对程序行为进行采集; 针对采集到的行为日志, 使用fastText 算法来提取词向量; 最后使用textCNN 模型根据行为日志对Android 程序进行检测与识别. 实验结果表明, 该方法对Android 恶意程序检测的平均准确率达到了93.3%, 验证了该方法对Android 恶意程序检测具有较高的有效性与正确性.关键词: Android 系统; 恶意程序检测; 行为触发; hook 技术; fastText 模型; textCNN 模型引用格式: 张雄冠,邵培南.基于textCNN 模型的Android 恶意程序检测.计算机系统应用,2021,30(1):114–121. /1003-3254/7722.htmlAndroid Malware Detection Based on textCNN ModelZHANG Xiong-Guan, SHAO Pei-Nan(The 32nd Research Institute of China Electronics Technology Group Corporation, Shanghai 201808, China)Abstract : Aiming at the problem that the current Android malware detection method has insufficient ability to detect unknown applications, this study proposes an Android malware detection method based on the textCNN neural network model. This method uses a variety of trigger mechanisms to induce the potential malicious behavior of the application from different levels. For function calls at different levels, the specific hook technology is used to collect the application behavior. For the collected behavior logs, the fastText algorithm is used to extract word vectors. Finally, the textCNN model is used to detect and identify Android applications based on behavior logs. Experimental results show that the average accuracy of the method for detecting Android malicious applications reaches 93.3%, which verifies that the method has high effectiveness and correctness for detecting Android malwares.Key words : Android system; malicious program detection; behavior trigger; hook technology; fastText model; textCNN model近10年来, 伴随着互联网技术的迅猛发展, 以及智能移动终端的普及, 传统的计算机软件也开始向基于智能终端的应用市场转移. 根据360互联网安全中心发布的《2019年手机安全状况报告》展示[1], 2019年截获的新增Android 恶意程序样本约为180.9万个,平均每天截获的新增恶意程序样本个数约为0.5万个.观察新增样本的类型, 还是以恶意扣费、资费消耗和隐私窃取这3种类型为主. 由此可见, Android 操作系统的安全形势依然刻不容缓, 为了减少恶意程序对用户造成的损失, Android 恶意程序检测也就成为一个值计算机系统应用 ISSN 1003-3254, CODEN CSAOBNE-mail: Computer Systems & Applications,2021,30(1):114−121 [doi: 10.15888/ki.csa.007722] ©中国科学院软件研究所版权所有.Tel: +86-10-62661041① 收稿时间: 2020-05-19; 修改时间: 2020-06-16; 采用时间: 2020-06-19; csa 在线出版时间: 2020-12-31114得深入研究的课题.目前, Android恶意程序检测技术主要分成两种:基于签名的检测技术[2]和基于行为的检测技术. 基于签名的检测技术实际上利用了模式匹配的思想, 使用这种方法进行检测需要对比已知的恶意代码签名库,因此这种方法无法识别未知的恶意程序. 而基于行为的检测技术因为不需要依赖签名的特性逐渐成为目前研究与应用的主流方法之一. 基于行为的检测技术又可依据是否需要实际运行目标程序进一步分为静态行为分析方法和动态行为分析方法.静态行为分析法是目前应用相对广泛的恶意代码检测方法. 其优势在于可以直接利用反编译技术提取代码本身的特征, 不必在指定检测环境下运行代码, 从而能够在应用安装前完成分析. 文献[3]就提出了一种组合静态行为分析方法, 该方法使用API调用、API 时间序列及API使用频率作为3种静态特征, 再结合C4.5、DNN、LSTM三种模型进行训练, 最后采用投票法确定测试样本的结果. 尽管应用广泛, 但静态行为分析法还是具有一定的局限性. 随着互联网安全技术的提高, 越来越多的Android应用为了抵抗未知的反编译分析而采用了代码保护技术. 与此同时, 恶意程序也在不断地进化, 比如采用代码混淆技术来隐藏和加密自身的恶意代码. 面对这样的情况, 使用静态行为分析技术的检测效率也是越来越低.动态行为分析法则是要求在沙箱或隔离环境中安装并运行程序, 这样做的目的是尽可能监控程序执行过程中所产生的行为, 并判断是否存在恶意行为. 这种方法不需要反编译目标程序, 且不受代码混淆技术的影响, 因此具有较高的检测效率. 目前, 动态行为分析法从原理上可以分为以下两类.第1类是基于污点跟踪技术[4]的分析方法, 这类方法首先标记程序对资源数据的访问范围, 然后依据程序对被标记的污点数据的使用情况来判断该程序的行为是否具有合法性. 采用污点跟踪技术的检测方法可以有效地识别出恶意程序所产生的隐私泄露、数据篡改甚至漏洞利用等问题. 文献[5]介绍了一个基于污点追踪技术的恶意软件数据流分析模型TaintART, 该模型采用多级污点分析技术把污点标签存储在寄存器中, 从而减少污染标签的存储量, 可以改善传统污点分析效率较低的问题. 尽管基于污点跟踪技术的检测方法能够更细粒度地分析恶意程序的行为属性, 但是这种分析通常只能在Android虚拟机层进行, 因而无法检测恶意程序在其他层(例如Native层)存在的恶意行为.第2类则是基于系统函数调用情况的分析方法,这类方法主要是通过检测程序对系统函数的调用行为来判断程序是否具有恶意性. 恶意程序往往需要利用系统提供的函数接口来实现其恶意行为, 因此这类方法可以通过分析程序的系统函数调用情况来识别恶意程序. 文献[6]就介绍了一种监控目标软件对Android Native层系统函数和框架层API的调用情况的方法,然后通过分析函数的调用序列及调用函数所传递的参数来检测恶意软件.随着机器学习技术的日渐成熟, 将机器学习算法应用到Android恶意代码检测中也逐渐成为了研究的主流趋势. 文献[7]就提出了一种基于机器学习的动态监测框架用来监控软件行为, 并通过实验分别对SVM、k近邻等多种机器学习算法进行了评价. 文献[8]的研究则是采用随机输入和人工交互输入来提取Android 系统调用, 并使用两种特征选择方法来共同构建特征矩阵, 最后使用RandomForest、RotationForest及AdaBoost三种机器学习模型分别进行实验. 尽管目前机器学习在Android恶意代码检测的应用中取得了较好的效果, 但是其面对新增的、变种的恶意软件的检测能力依然有待提高. 同时基于传统机器学习的方法往往需要手动工程来判断一个文件的行为是否具有恶意, 但手动工程一般不仅时间消耗较长, 而且需要人为确定特征、参数、变量等.针对静态行为分析方法与基于污点跟踪技术的分析方法在Android代码行为特征提取上的不足, 以及传统机器学习方法在恶意程序检测中存在的问题, 本文提出了一种在动态行为分析的基础上利用textCNN 神经网络模型的Android恶意程序检测方法. 本方法的主要思路是首先采用多种触发机制相结合的行为诱导方法来触发Android程序潜在的恶意行为; 接着通过hook技术挂钩关键函数接口, 进而对程序的各种行为数据进行采集并构建行为日志; 然后基于行为日志提取行为特征数据作为模型输入; 最后使用textCNN 神经网络对行为数据集进行训练、参数优化得到最终的分类模型, 并通过实验与传统机器学习方法SVM、RandomForest以及传统循环神经网络进行比较, 证明了本方法具有较好的检测效果.2021 年 第 30 卷 第 1 期计算机系统应用1151 动态行为采集方法任何Android程序所产生的行为实际上都具有特定的行为模式, 即这些行为可以分解为由原子行为组成的时间序列. 而这些原子行为往往需要调用系统提供的函数接口来实现, 因此可以采用基于系统函数调用的动态行为分析方法从程序对Android框架层API 和Native层函数的调用情况中提取行为特征, 再通过对比恶意程序的行为来判断程序的合法性. 基于这个原理, 本文提出了一种以监测系统函数调用为基础的动态行为采集方法, 该方法主要包含两个模块: 行为触发模块和行为采集模块. 行为触发模块的作用是采用多种触发机制尽可能多地触发程序的行为, 使得采集模块可以尽可能全面地采集到软件的所有行为数据.行为采集模块的作用是通过hook技术来监控并记录程序对Android系统函数的调用情况以形成行为日志.1.1 行为触发模块已知动态行为检测方法是在沙箱或隔离环境中运行程序, 其中第一个关键的步骤就是要能够触发程序的行为. 倘若无法触发恶意程序的全部行为, 则后续的行为采集模块很可能就无法提取到有效的恶意行为数据, 继而一定会影响检测模型最后的检测效率. 因此,为了提高程序行为触发的覆盖率, 首先需要明确的是被触发的行为所发生在Android系统中的层面, 主要包含以下3类: (1) 系统层面, 当系统层面的事件(例如开机、连接网络等)执行后会立即触发恶意程序的恶意行为, 比如当系统接入互联网后, 恶意程序会开始传输系统中隐私数据. (2) Service层面, 许多恶意程序会将其恶意行为隐藏在后台服务中, 这样就可以在用户未知的情况下执行操作. (3) UI及Activity层面, 当用户对恶意程序的UI进行操作时, 往往就会触发恶意的Activity活动. 针对不同系统层面的行为需要采取不同的触发机制, 具体的流程与框架如图1所示.本模块通过使用Android模拟器模拟各种系统事件发生的方式来触发程序系统层面的恶意行为. 已知在Android系统中, 软件若要监听系统事件就必须在Manifest文件中注册广播组件. 因此本模块通过解析目标程序的Manifest文件来获取已注册的广播组件信息,然后利用ADB调试桥与telnet远程控制命令在模拟器中模拟广播组件相对应的各种事件, 从而触发程序系统层面相对应的行为.图1 行为触发模块框架流程图针对程序在Service层面的恶意行为, 本模块采用启动所有Service事务的方式来触发潜在该层面的恶意行为. 因为任何应用想要在Android系统中使用Service事务就必须在Manifest的文件中注册Service 组件, 所以本模块通过解析目标程序的Manifest文件来获取已注册的Service组件, 然后利用ADB工具启动这些Service事务, 进而触发执行在这些Service中的恶意行为.针对UI及Activity层面的恶意行为, 本模块所采用的方法相对复杂一些. 首先, 通过静态分析目标程序来获取软件中Activity之间的跳转路径信息; 接着, 针对每一个Activity, 在启动之后利用UI获取部件提取当前Activity的UI层次信息; 然后, 本模块会利用系统自动化测试工具MonkeyRunner[9]针对这些UI信息来模拟各种UI事件触发程序的行为; 当遍历完当前Activity的所有UI元素后, 即可按照Activity的跳转路径信息继续下一个Activity的遍历.1.2 行为采集模块考虑到目前Android平台的应用软件都会使用混淆、加壳技术来保护自身的程序代码, 因此本模块采用了一种基于动态分析的多层次的行为数据提取方法以应对该问题. 本模块所采用的方法主要以Android逆向技术和Android安全框架为理论基础, 分别对Android 的应用框架层和Native层的程序行为进行采集.针对Android应用框架层的行为数据, 本模块主要通过Android注入技术以及Java hook技术进行采集的. 已知Android系统一般采用虚拟机对应用层的软件程序进行隔离和管理, 其中4.4版本之前采用的是Dalvik虚拟机, 而4.4版本之后采用的是Android Runtime. 在Dalvik虚拟机进行Hook的原理是: 首先计算机系统应用2021 年 第 30 卷 第 1 期116将虚拟机里面的Java方法的Method标识字段改为nativeMethod; 接着自己编写一个Native方法, 在这个Native方法中, 再自定义一个Java方法, 并在这个方法里调用了原方法; 然后在调用前后分别通过注入技术插入钩子, 从而可以记录原方法的调用情况了; 最后把原Java方法的nativeFunc字段指向这个Native方法.当原方法被调用时, 首先会调用到自定义的Native方法, 在调用过程中, 原函数的调用数据就被采集. 对于Android Runtime进行hook的原理实际上是类似的, 已知Java层的每一个方法在Android Runtime实现中都对应一个ArtMethod结构体, 只要把原方法的结构体内容通过注入方式替换为新的结构体内容, 当然原方法被调用的时候, 真正执行的就是注入的新方法的指令. 为了兼容不同版本的Android虚拟机, 本模块采用了同时支持Dalvik虚拟机和ART虚拟机的Xposed[10]框架对Android应用框架层API进行hook工作.对于Android Native层的行为数据, 本模块则采用基于Inline hook[11]的动态注入技术进行采集. 对比基于全局偏移表的hook方法, Inline hook的优势在于不会受到表的限制, 能够修改重写内存中任意一处的指令, 从而实现对系统函数的挂钩. Inline Hook的实现原理是首先获得被hook系统函数的入口地址, 然后在入口地址处插入强制跳转指令, 使进程跳转到特定函数中, 在该函数中执行监听并记录程序的行为数据, 从而就实现了对Android底层接口函数调用情况的监测.当目标程序的一系列操作行为被成功触发之后,各种操作行为必然依靠应用框架层或系统Native层的函数接口来实现, 此时行为采集模块就可以利用上述方法对函数接口的调用情况进行监测与记录, 根据记录结果即可生成程序的行为日志. 本实验所生成的行为日志的条目及相关含义如表1所示.表1 目标程序行为日志条目说明条目名称说明Method Category被调用函数所属的类型Method Name被调用函数的名称及所属包的包名Arguments调用函数是传递的参数2 基于textCNN的检测框架卷积神经网络CNN曾被广泛应用于计算机视觉领域, 随着深度学习研究的不断深入, 不少学者也开始使用CNN模型来处理自然语言处理问题. textCNN[12]即是由Yoon Kim提出的一种用于处理文本分类问题的卷积神经网络模型. textCNN的主要思想是使用多个通道以及多个不同大小的卷积核, 并通过一维卷积的方式提取词向量矩阵的特征, 然后使用最大池化层从特征矩阵选出每个通道中的最大值, 与其他通道的最大值进行拼接, 组合成最终的特征向量, 最后通过全连接层计算分类的概率. 经过动态行为触发模块和采集模块后, 程序的行为数据实际上转换为了文本数据,因此可以采用textCNN模型来进行处理.2.1 嵌入层预处理文本数据对于文本类数据, 首先需要将自然语言数值化, 以方便后续处理. 对于动态行为日志文本, 其中每一行的函数调用记录代表一个动态行为, 本文将每一行视为一个行为词汇, 然后分别对每个词汇构建相应的词向量. 将文本中的词汇表征成词向量最简单的方式就是采用one-hot编码方法, 但是这种方法也存在比较明显的缺点, 比如生成的向量长度过大以及无法准确表达词汇之间的相似关系. 而textCNN模型提供一个隐藏的嵌入层, 可以将one-hot向量投影到低维空间里, 在指定维度中编码语义特征. 本文在嵌入层采用的向量表示方法为fastText[13]. fastText实际上是Word2Vec 中跳字模型[14]的一种改进, 使用子词嵌入的方法将构词信息引入到了模型中.z y在fastText中, 往往使用子词集合来表示中心词,假设一个中心词w, 将其长度在一定范围内的子词及特殊子词的并集记为G w. 已知fastText中词典由所有词的子词集合的并集构成, 假设w的子词y在词典中的向量表示为, 则中心词的向量v w就表示成:对比跳字模型, fastText训练的词向量可以更加准确地描述动态行为词汇之间相关性. 当在检测过程中即便遇到词典中未曾出现的行为词汇, fastText模型也可以从与其结构类似的其他词汇中获得对该词汇更好的向量表示.2.2 使用textCNN对数据进行分类textCNN模型的核心结构是卷积神经网络, 其基本结构包括输入层、卷积层、池化层、全连接层和输出层. 卷积神经网络用于行为分类的模型结构图[15]如图2所示.2021 年 第 30 卷 第 1 期计算机系统应用117图2 textCNN行为分类模型图从图2中可以看到, 在textCNN模型的卷积层, 卷积核的宽度与词向量的维度是一致的, 表明模型在提取特征的时候, 将行为词汇作为日志文本的最小粒度.在Android动态行为日志中, 往往恶意行为是由多个连续的动态行为词汇组成, 因此可以通过设置卷积核的高度来提取日志中相邻行为词汇的关联性, 不仅考虑了动态行为文本中的词义而且兼顾了词序以及上下文. 图2中卷积核的高度分别设置为2、3、4, 对应提取文本中的2-gram、3-gram、4-gram特征. 对比传统机器学习中的n-gram模型, 使用卷积核的优势在于, 只考虑连续词汇的组成, 不会使训练集词表爆炸式增长.在卷积层中模型使用了不同大小的卷积核, 卷积得到的feature maps会具有不同的向量维度. 因此在池化层中, 可以使用1-max-pooling方法通过提取每个feature map中的最大值来表征该特征向量. 池化层的主要作用是下采样, 通过不断降低数据维度来减少网络中的参数和计算次数. 最后模型将每个特征向量经过1-max-pooling池化得到的值拼接起来, 即为池化层最终的输出向量.textCNN模型最后一层为全连接层, 池化层的输出结果在进入全连接层之前, 需要进行Dropout操作来避免过拟合. 全连接层设置可以参照传统卷积神经网络, 第1层采用ReLU作为激活函数, 第2层则使用Softmax分类函数来进行分类.3 实验分析3.1 实验环境与数据本文的实验环境与相关配置如表2所示.表2 实验环境与配置实验环境相关配置移动端操作系统Android 6.0APK分析框架MobSF v3.0.0Android Hook框架Xposed v90-beta3PC端操作系统Window 10编程语言Python 3.6深度学习框架PyTorch 1.4.0本文实验所需的Android恶意软件样本均来自于VirusShare网站[16], 其中样本的数量为1500个. 同时,实验所需的1000个正常样本均下载于Android官方应用市场Google Play. 对于1500个恶意样本和1000个正常样本, 分别使用其中的70%作为本文模型的训练样本, 剩下的30%作为测试样本.计算机系统应用2021 年 第 30 卷 第 1 期118对于每一个样本, 经过动态行为采集框架处理后会得到一个行为日志. 原始的行为日志是json 数据格式, 为了便于后面textCNN 模型的处理, 实验需要通过Python 爬取日志中关键信息, 将其转换为txt 文档表示. 文档中的每一行即为一个行为API, 每一行分为3个部分, 由空格分隔, 每个部分的说明如表1所示.3.2 实验评价指标为了充分评估模型的性能, 本文在验证模型训练结果的时候采用了k 折交叉验证技术. 在本实验中,k 的取值设定为10, 即将训练集划分为10个规模相等且无交集的子集, 在每次训练过程中依次选择1个子集作为测试集, 剩余9个子集作为训练集, 最终以10次计算结果的平均值作为模型评价指标的最终结果.P Precision P Recall 本实验使用3个通用的评价指标即准确率、召回率以及F 1值来对实验结果进评价. 本实验采用的样本分类混淆矩阵如表3所示.表3 样本分类结果混淆矩阵真实类别预测类别正常样本恶意样本正常样本TP FN 恶意样本FPTN表3中, TP 表示实际为正常样本, 被预测为正常样本的样本数目; FP 表示实际为恶意样本, 被预测为正常样本的样本数目; FN 表示实际为正常样本, 被预测为恶意样本的样本数目; TN 表示实际为恶意样本,被预测为恶意样本的数目. 实验评价指标的计算公式如下所示:3.3 实验参数设置由于实验结果在很大程度上会受到实验参数的影响, 因此在实验中将会对模型的参数进行设置. 首先实验将行为日志转换后的文本最大长度设置为400, 超过长度的部分将直接进行截断操作. 本实验使用fastText 模型训练词向量时所设置的参数值如表4所示.表4 fastText 模型训练参数设置参数名参数值word_ngrams 2Window 上下文窗口5最小字符长度2最大字符长度5迭代周期5000在textCNN 模型的训练过程中, 本实验将卷积核的高度固定设置为3、4、5. 对于其他参数, 分别设置了几组对照实验, 其中卷积核数量分别对比了64、128、256三组值, Dropout 参数分别对比了0.3、0.4、0.5三组值, 激活函数对比了ReLU 和tanh 两种函数.通过对比上述几组参数值对实验结果的影响, 最终确定模型的参数如表5所示.表5 textCNN 模型训练参数设置参数名参数值卷积核高度3, 4, 5卷积核数量128Dropout 0.5激活函数ReLU Pooling1-max-pooling迭代周期20003.4 实验结果与分析为了验证本文提出的对于Android 应用程序的动态行为采集框架的有效性, 本文设置了3组对照实验,分别采用不同的方法来提取Android 软件的行为特征.第1组采用传统的静态行为分析法来提取程序的静态行为文本数据, 实验中具体参考文献[3]提出的方法;第2组采用基于污点跟踪技术的分析方法来提取程序的行为文本数据, 实验中具体参考文献[5]中方法; 第3组就采用本文的基于系统函数调用的动态行为采集方法来提取实验数据. 3组实验均使用相同的Android 样本数据集, 然后将3组实验得到的3组文本数据集都经过fastText 模型预处理以及textCNN 模型进行训练, 最后相同模型在不同数据集上的实验结果如表6所示.表6 不同数据集实验结果对比数据集P PrecisionP RecallF 1第1组0.77320.76930.7713第2组0.87560.88610.8810第3组0.92640.93420.9305从表6中数据可以看出, 本文提出的动态行为采集框架可以更有效的提取出Android 程序中行为特征.2021 年 第 30 卷 第 1 期计算机系统应用119第一组数据集的检测准确率相对较低, 原因在于现在的Android应用程序都添加了代码混淆和代码保护壳等对抗反编译的措施, 对比而言本文方法几乎没有受到这些措施的影响. 第2组与第3组实验结果的对比证实了基于污点跟踪技术分析方法存在的局限性, 即无法检测恶意程序在Android Native层的恶意行为.为了对比textCNN模型与传统机器学习模型及传统深度学习模型在Android恶意程序上的检测能力,本文设置了4组对照实验, 将textCNN模型与SVM模型、RandomForest模型以及循环神经网络LSTM模型进行了对比. SVM与RandomForest均是机器学习中比较成熟的分类模型, LSTM也是一种可以高效处理文本问题的神经网络模型. 对于SVM、RandomForest 和LSTM模型中使用的词向量, 本实验均采用传统Word2Vec模型预处理行为数据集来得到. 不同模型在相同测试集上的实验结果对比如表7所示.表7 不同模型实验结果对比模型P Precision P Recall F1SVM0.87130.88630.8789 RandomForest0.90470.89070.8977 LSTM0.92680.92120.9240textCNN0.93860.94110.9397从表7中可以看出, 对比SVM与RandomForest 这两种机器学习模型, textCNN模型的准确率、召回率和F1值分别高出了6.73%、5.48%、6.08%和3.39%、5.04%、4.2%, 同时LSTM模型的实验结果较两种机器学习模型而言也有明显的提升. 这说明采用神经网络模型较传统机器学习方法而言确实可以提高Android 恶意程序的检测准确率. 对比textCNN与LSTM, 可以看到在相同测试集上textCNN模型的检测准确率还是有所提升的, 虽然这种提升是有限的, 但是应该考虑到textCNN具有模型复杂度更小且训练速度更快的先天优势. 图3展示的是4种模型在相同数据集上损失函数值随迭代次数变化而变化的情况. 从图中可以看出, textCNN模型的损失值相对于其他3种模型不仅下降速度较快, 而且最终收敛到一个更低的稳定值.综合两部分的实验结果可以表明本文提出的基于textCNN模型的利用动态行为分析方法的Android恶意程序检测模型是切实可行的方案, 能够有效提升Android恶意程序检测的准确性和有效性.200600400100080014001200180020001600LSTMRandomForestSVMtextCNN迭代次数图3 不同模型损失值变化图4 结论与展望本文提出了基于textCNN模型的Android恶意程序检测方法. 该方法实现了包含多种触发机制的行为触发系统, 有效提高了程序动态行为的检测覆盖率; 通过hook技术动态采集程序系统函数接口和应用层API的调用情况来生成动态行为日志; 通过fastText算法对行为日志进行词嵌入处理, 将文本数据转换为词向量数据; 使用textCNN模型对程序的行为数据进行检测与分类. 在实验环节, 本文使用1500个恶意样本和1000个正常样本, 分别对动态行为采集模块和基于textCNN的检测模块设置了对照实验, 实验结果证实了本文提出的这两个模块是切实可行的且能够有效提高Android恶意软件检测的准确性.在下一步工作中, 针对动态行为采集模块, 将研究更加智能的动态行为触发机制, 以提高行为检测的覆盖率; 针对动态行为检测与分类模块, 将继续研究分类模型的优化问题, 并尝试将捕捉行为词汇前后依赖关系的机制以及注意力机制引入到模型中, 使模型能够更高效地检测Android程序是否存在恶意性.参考文献360互联网安全中心. 2019年手机安全状况报告. 2020.1–9.1吴震雄. Android恶意软件静态检测方案研究[硕士学位论文]. 南京: 南京邮电大学, 2015.2Ma Z, Ge HR, Liu Y, et al. A combination method for Android malware detection based on control flow graphs and machine learning algorithms. IEEE Access, 2019, 7: 21235–21245. [doi: 10.1109/ACCESS.2019.2896003]3Enck W, Gilbert P, Han S, et al. TaintDroid: An information-flow tracking system for realtime privacy monitoring on smartphones. ACM Transactions on Computer Systems, 4计算机系统应用2021 年 第 30 卷 第 1 期120。
基于机器学习算法的恶意软件检测系统设计与实现恶意软件(Malware)是指一种恶意目的而编写、传播和利用的计算机程序。
恶意软件破坏现代计算机系统和网络的安全,给用户和企业带来了严重的经济和安全威胁。
因此,设计和实现一个高效准确的恶意软件检测系统非常重要。
本文将介绍基于机器学习算法的恶意软件检测系统的设计与实现。
首先,我们将介绍恶意软件的分析和识别原理。
然后,我们将讨论机器学习在恶意软件检测中的应用,并介绍几种常用的机器学习算法。
接下来,我们将详细阐述基于机器学习算法的恶意软件检测系统的设计与实现过程,并对系统进行评估和性能分析。
最后,我们将总结本文的工作,对未来的研究方向进行展望。
一、恶意软件分析和识别原理恶意软件通常具有以下特征:1)隐蔽性:恶意软件常常会隐藏自己的存在,使其不易被发现;2)破坏性:恶意软件可以破坏计算机系统的正常功能和运行;3)盗版:恶意软件可以窃取用户的敏感信息,如个人账户信息、信用卡号码等。
恶意软件的分析和识别是指通过对恶意软件进行分析和处理,以便识别出其中的恶意行为和特征。
传统的恶意软件分析方法包括静态分析法和动态分析法。
静态分析法是指直接对恶意软件的二进制文件进行审查,从中提取关键信息。
动态分析法是指在安全环境中运行恶意软件,并观察其行为和特征。
二、机器学习在恶意软件检测中的应用机器学习是一种人工智能的分支,通过分析和处理大量数据,训练一个模型来完成特定任务。
在恶意软件检测中,机器学习可以帮助我们自动提取和识别恶意软件的特征和行为,从而实现高效准确的恶意软件检测。
目前,常用的机器学习算法包括:1)支持向量机(SVM):SVM是一种常用的分类算法,它通过将样本映射到高维空间中,来实现对恶意软件和良性软件的分类。
2)决策树:决策树是一种基于树形结构的分类算法,它将特征空间划分成一系列的子空间,并在每个子空间中生成一个决策规则。
3)神经网络:神经网络是一种模拟人脑神经元网络结构的计算模型,它可以自动学习和归纳数据中的模式和规律。
基于人工智能的恶意软件检测研究随着计算机技术的发展,恶意软件已经成为了计算机安全领域中的一大难题。
恶意软件具有隐蔽性、攻击性和变异性等特点,对计算机和数据安全形成了巨大的威胁。
为了保障计算机和数据的安全,研究恶意软件检测技术已经成为了计算机安全领域的一个热门研究方向。
而在研究恶意软件检测技术的过程中,基于人工智能的方法已经逐渐成为了一种重要的检测手段。
一、人工智能在恶意软件检测中的应用在恶意软件检测中,人工智能方法主要包括神经网络、支持向量机、决策树等。
这些方法能够通过学习病毒的特征和模式,快速检测出恶意软件。
在这些方法中,神经网络是最为常用的一种方法之一。
神经网络模拟人脑的神经网络结构,通过自我学习和自适应调节实现对复杂问题的处理。
在恶意软件检测中,神经网络可以对病毒进行自动学习,不断改善检测效果。
另外,支持向量机和决策树方法也被广泛应用于恶意软件检测中。
支持向量机通过求解最优超平面,将样本映射到高维空间中,在高维空间中通过分离超平面检测出恶意软件。
决策树则是通过对样本进行分支和判断,逐步确定恶意软件的检测方法。
二、人工智能在恶意软件检测中存在的挑战虽然人工智能在恶意软件检测中具有良好的应用前景,但是在实际应用过程中还存在着一些挑战。
一方面,恶意软件的数量和种类非常庞大,在样本的获取和处理方面存在困难。
另一方面,恶意软件具有变异性和适应性,能够不断改变自身的特性和行为,导致检测难度加大。
三、未来人工智能在恶意软件检测中的发展趋势未来人工智能在恶意软件检测中的发展趋势将会越来越明显。
一方面,随着云计算和大数据技术的发展,人工智能在恶意软件检测中的应用将得到更为广泛的推广。
另一方面,随着计算机性能的提高,人工智能也将不断得到完善和优化,从而提高检测效率和检测准确率。
同时,在未来的恶意软件检测技术研究中,将会有更多的跨学科合作和应用。
例如,生物信息学、网络安全等领域的交叉融合将会推动恶意软件检测技术的进一步发展。
————————————————————————————————————————————————一种基于元信息的Android恶意软件检测方法作者李江华,邱晨机构江西理工大学信息工程学院DOI 10.3969/j.issn.1001-3695.2018.04.0312基金项目国家自然科学基金资助项目(61463021,61762046);江西省教育厅科技项目(GJJ160599,GJJ170516)预排期卷《计算机应用研究》2019年第36卷第11期摘要Android应用普遍具有比所属类型更多的功能,需要获取更多的权限,过多的权限可能带来一定的安全隐患。
针对这类问题,提出一种基于元信息的Android恶意软件检测方法。
首先,通过对Android应用程序描述进行LDA主题提取,实现数据降维,使用K-means聚类算法按照功能类型对应用程序分组;然后,对属于同一功能类型的所有应用程序,提取其权限信息,以权限特征为研究对象,使用kNN算法进行Android恶意软件的分类检测。
实验结果获得94.81%的平均准确率,证明方法的有效性和高准确率。
关键词Android恶意软件检测;元信息;应用程序描述;权限特征作者简介李江华(1976-),男(通信作者),河南新野人,博士,主要研究方向为信息安全、语义Web 、大数据分析与处理(4912170@);邱晨(1992-),男,江西九江人,硕士,主要研究方向为信息安全、机器学习.中图分类号TP311访问地址/article/02-2019-11-037.html投稿日期2018年4月8日修回日期2018年5月29日发布日期2018年8月10日引用格式李江华, 邱晨. 一种基于元信息的Android恶意软件检测方法[J/OL]. 2019, 36(11). [2018-08-10]. /article/02-2019-11-037.html.第36卷第11期 计算机应用研究V ol. 36 No. 11 优先出版Application Research of ComputersOnline Publication——————————收稿日期:2018-04-08;修回日期:2018-05-29 基金项目:国家自然科学基金资助项目(61463021,61762046);江西省教育厅科技项目(GJJ160599,GJJ170516)作者简介:李江华(1976-),男(通信作者),河南新野人,博士,主要研究方向为信息安全、语义Web 、大数据分析与处理(4912170@ );邱晨(1992-),男,江西九江人,硕士,主要研究方向为信息安全、机器学习.一种基于元信息的Android 恶意软件检测方法 *李江华†,邱 晨(江西理工大学 信息工程学院, 江西 赣州 341000)摘 要:Android 应用普遍具有比所属类型更多的功能,需要获取更多的权限,过多的权限可能带来一定的安全隐患。
针对这类问题,提出一种基于元信息的Android 恶意软件检测方法。
首先,通过对Android 应用程序描述进行LDA 主题提取,实现数据降维,使用K -means 聚类算法按照功能类型对应用程序分组;然后,对属于同一功能类型的所有应用程序,提取其权限信息,以权限特征为研究对象,使用kNN 算法进行Android 恶意软件的分类检测。
实验结果获得94.81%的平均准确率,证明方法的有效性和高准确率。
关键词:Android 恶意软件检测;元信息;应用程序描述;权限特征 中图分类号:TP311 doi: 10.3969/j.issn.1001-3695.2018.04.0312Android malware detection method based on meta -informationLi Jianghua †, Qiu Chen(School of Information Engineering Jiangxi University of Science & Technology , Ganzhou Jiangxi 341000, China ) Abstract: Many applications have more functions than their types, and they need to acquire more permissions. Excessive permissions may bring some security risks. To address these issues, this paper proposes an Android malware detection method based on meta information. First, through the description of Android application of LDA theme extraction, the implementation of data dimensionality reduction, using the k -means clustering algorithm in accordance with the functional type of the application group; Then, for all applications belonging to the same functional type, extract their permission information, and take the permission features as the research object, using KNN algorithm to classify and detect the malicious software of Android. The experimental results obtained the average accuracy of 94.81% and proved the validity and high accuracy of the method.Key words: Android malware detection; meta information; application description; permission features0 引言Android 应用程序元信息,是指用户在下载和安装应用程序之前看到的信息[1],如应用程序描述、评分等。
Android 应用程序元信息包含的信息种类非常多;同时,由于各大应用市场的管理方式、经营方式和设计方式的不同,用户看到的信息也有所区别。
Android 应用程序描述的作用是对应用程序进行介绍,说明其功能。
需要注意的是,很多应用程序提供了比所属类型更多的功能,这在应用程序描述中才能够看到。
应用程序要执行其功能,需要相应的权限支持,很多应用具有比所属类型更多的功能,需要获取更多的权限,过多的权限可能带来一定的安全隐患。
要确定这样的应用是否为恶意应用,需要进一步的分析检测。
1 相关研究当前,在进行Android 恶意软件检测方法的研究时,多数研究聚焦于应用程序的权限[2,3]、Java 代码[4~6]等静态特征和系统调用[7]、网络流量[8,9]等动态特征上,针对动态特征进行研究或者使用动态特征和静态特征相结合的方式[10]赢得了更多科研人员的青睐。
周裕娟等人[11]提出了一种使用权限信息和权限提升威胁信息作为特征进行Android 恶意软件检测的方法。
Enck 等人[12]提出了一种Kirin 安全规则进行Android 恶意软件检测。
Felt 等人[13]认为应用程序的任何行为都是与API 的调用有关的,而API 调用又可以映射到权限,他们在研究中使用了一种可以自动化检测Android API 调用的工具,以便构建检测超额权限所必需的权限映射,用实验证明有三分之一的应用程序存在过度申请权限的情况。
杨欢等人[14]利用关联规则挖掘的方式试图找到权限的组合关系与恶意应用程序相关的规则,基于这个规则进行恶意软件检测,最后获得了87%的准确率。
文伟平等人[10]在其研究中也给出了一套危险权限组合规则,如权限组合RECEIVE_BOOT_COMPLETED + INTERNET + ACCESS_COARSE_LOCATION,会泄露用户的位置,但是某名为“Puppet Football Fighters-Steampunk Soccer”体育游戏类应用,其权限列表(图1)就包含这种组合,使用权威检测网站VirusTotal对其进行检测,检测结果为良性软件。
这说明危险组合权限规则并不具有普遍适用性。
图1 某应用程序权限列表受限于硬件和软件技术,一些方法即使取得了较好的效果,也不便于推广和应用。
因此,基于Android应用程序元信息的恶意软件检测受到了一部分研究者的关注,开展了一定的研究。
Teufl等人[15]使用复杂的知识发现过程和精益统计的方法来分析从Google官方应用市场Google Play收集的元信息,并使用机器学习算法进行分类。
Martin等人[16]在其研究中探索了一种名为ADROIT的方法,使用了多种元信息作为实验数据,声称最终获得了93.67%的精度。
这类研究中采用的元信息种类众多,处理难度较高。
基于此,Gorla等人[17]提出了一种采用元信息种类较少的方法,通过应用程序描述确定应用程序的主题,主题词由研究者自行决定,通过对应用程序的主题进行聚类,然后确定与主题相关的API调用异常,他们在MalGenome[18]的数据样本上正确识别了56%的恶意应用程序。
在使用较少元信息种类的前提下,为了提高检测率,也为确定具有更多功能的应用是否为恶意应用,本文提出一种新的基于元信息的Android恶意软件检测方法,以Android应用程序元信息为研究对象,进行Android恶意软件检测方法的研究。
2 本文方法本文方法选择的研究对象是Android应用程序描述和权限,它们都属于Android应用程序元信息。
方法有两个主要步骤:a)根据Android应用程序描述确定应用程序的功能类型,按照功能对应用程序分组。
Android应用程序描述用于介绍应用程序的功能,从中提取出描述功能的关键词,然后使用聚类算法进行聚类,可确定应用程序的功能类型,进而达到按照功能对应用程序分组的目的。
举例说明,设有A、B、C、D四个应用程序,它们的功能如表1所示,经过聚类处理后将A、B、C、D四个应用程序按照功能进行分组,结果如表2所示,其中每个组的名称用功能表示。