检测恶意软件的方法和装置
技术领域
本发明涉及计算机及通信技术领域,尤其涉及一种检测恶意软件的方法、一种建立恶意软件特征数据库的方法、一种检测恶意软件的装置及一种建立恶意软件特征数据库的装置。
背景技术
安卓(Android)是由谷歌(Google)公司发布的一种以Linux***为核心的、适用于移动终端的操作***。Android是一种开放式的操作***,允许除谷歌和移动终端厂商之外的第三方开发者使用多种编程语言来开发基于Android平台的应用软件,这一特性使得其成为目前使用最为广泛的手机操作***。随着基于Android平台的应用软件数量的急剧增长,基于Android平台的恶意软件也越来越多,这些恶意软件可以导致用户隐私信息被泄露,影响用户使用。
由于目前绝大多数移动终端都具备连接互联网的功能,基于Android平台的恶意软件主要是通过网络传播,用户从互联网下载恶意软件到移动终端并安装恶意软件之后,恶意软件可以将收集到的用户隐私信息,例如电话薄、本地短信邮箱中的短信等,通过短信或邮件发送至预先指定的接收端。针对上述工作原理,现有技术主要通过网站审核、网关阻断和移动终端扫描等技术来防止基于Android平台的恶意软件传播。
现有在网络侧对基于Android平台的恶意软件进行检测的原理是:检测设备首先对待识别的基于Android平台的应用软件(简称:待识别应用软件)的apk压缩包的内容进行哈希(hash)运算,获取运算结果MD5值,所述apk压缩包中包括资源文件、dex字节码文件、配置文件和界面布局文件等等。然后将所述hash运算获得的MD5值,与对已知恶意软件的特征值进行比较,若比较一致,则确定所述待识别应用软件为恶意软件;否则,确定所述待识别应用软件为正常软件。所述已知恶意软件的特征值是指对已知恶意软件apk压缩包的内容进行hash运算获得的MD5值。
发明人在实现本发明过程中发现,现有技术至少存在以下问题:恶意软件的传播者人为修改待识别应用软件apk压缩包的部分字节,导致其内容发生改变,进一步使检测设备对其进行hash运算后的结果发生改变,在进行特征值匹配时与已知恶意软件的特征值不同,从而达到逃避检测的目的。
发明内容
本发明实施例提供一种检测恶意软件的方法,用以解决现有技术对基于Android平台的恶意软件进行检测时,准确性较低问题。
对应地,本发明实施例还提供了一种建立恶意软件特征数据库的方法、一种检测恶意软件的装置和一种建立恶意软件特征数据库的装置。
本发明实施例提供的技术方案如下:
一种检测恶意软件的方法,包括:
对待检测应用软件的压缩包进行解析,提取其中包含的可执行文件,并根据可执行文件的结构格式,从所述可执行文件中获取特征内容,所述特征内容是指完成所述待识别应用软件功能必要的内容;
采用预定算法,计算所述特征内容的唯一标识值;
将计算得到的唯一标识值与已知恶意软件的特征值进行比较,所述特征值是指对已知基于Android平台的恶意软件可执行文件中的特征内容,采用所述预定算法计算后,获得的唯一标识值;
若比较结果一致,则确定所述待检测应用软件为基于Android平台的恶意软件。
一种建立恶意软件特征数据库的方法,包括:
接收输入的已知基于Android平台的恶意软件样本;
对所述恶意软件样本进行解析,提取其中包含的可执行文件;
根据可执行文件的结构格式,从所述可执行文件中获取特征内容,所述特征内容是指完成所述恶意软件功能必要的内容;
采用预定算法,计算所述特征内容的唯一标识值,作为所述恶意软件样本的特征值;并存储所述特征值。
一种检测恶意软件的装置,其特征在于,包括:
第一解析单元,用于对待检测应用软件的压缩包进行解析,提取其中包含的可执行文件;
第一获取单元,用于根据可执行文件的结构格式,从第一解析单元解析出的所述可执行文件中获取特征内容,所述特征内容是指完成所述待识别应用软件功能必要的内容;
第一运算单元,用于采用预定算法,计算所述特征内容的唯一标识值;
比较单元,用于将第一运算单元得到的唯一标识值与已知恶意软件的特征值进行比较,所述特征值是指对已知基于Android平台的恶意软件可执行文件中的特征内容,采用所述预定算法计算后,获得的唯一标识值;
确定单元,用于若比较单元的比较结果一致,则确定所述待检测应用软件为基于Android平台的恶意软件。
一种建立恶意软件特征数据库的装置,其特征在于,包括:
接收单元,用于接收输入的已知基于Android平台的恶意软件样本;
第二解析单元,用于对所述恶意软件样本进行解析,提取其中包含的可执行文件;
第二获取单元,用于根据可执行文件的结构格式,从第二解析单元得到的所述可执行文件中获取特征内容,所述特征内容是指完成所述恶意软件功能必要的内容;
第二运算单元,用于采用预定算法,计算所述特征内容的唯一标识值,作为所述恶意软件样本的特征值;
存储单元,用于存储第二运算单元得到的特征值。
本发明实施例通过提取待检测应用软件压缩包中可执行文件中的特征内容,所述特征内容是指完成所述待识别应用软件功能必要的内容;然后计算提取的特征内容的唯一标识值,将计算得到的特征值与已知恶意软件的特征码进行比较,根据比较结果判断待检测应用软件是否是恶意软件。解决了现有技术无法识别篡改后的恶意软件的问题,提高了检测的准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a为本发明实施例一提供的检测基于Android平台的恶意软件方法的流程图;
图1b为本发明实施例一提供的建立恶意软件特征数据库的方法的流程图;
图2为本发明实施例二提供的实例的详细流程图;
图3为本发明实施例三提供的检测基于Android平台的恶意软件的装置的结构示意图;
图4为本发明实施例三提供的建立恶意软件特征数据库的装置的结构示意图。
具体实施方式
基于Android平台的应用软件中,用于实现该应用软件功能的方法(也被称为函数)是封装在可执行文件中的,目前来说,大多数Android平台上的可执行文件为dex字节码文件。在应用软件运行时,通过执行其中的dex字节码文件来实现该应用软件的功能。
在Android平台上开发应用软件时,通常使用java语言,对工程文件进行编译后生成一个压缩文件包,通常大多数为apk格式的压缩文件包,对apk压缩包进行解压缩后,解压缩结果中包含一个dex格式的字节码文件,dex字节码文件是在Dalvik虚拟机上执行的一种可执行文件,其中Dalvik虚拟机是Android操作***中用于运行应用软件的应用环境。
为了便于Dalvik虚拟机中的解析器进行解析,每个dex文件的内容都符合统一的结构格式。表1为dex文件结构格式中文件头DexHeader部分的简要描述。通过解析DexHeader可以获得字符串集合列表String table、类集合列表classlist、域集合列表field table、方法集合列表method table、类定义集合列表classdefinition table等各部分的内容在dex文件中的存储地址,继而获取各部分内容。每部分内容也都符合统一的结构格式,例如方法集合列表method table在dex文件中的存储格式如表2所示,字符串集合列表String table内容如表3所示。通过上述结构可以在应用软件运行过程中实现方法调用,例如在应用软件运行过程中,若调用到某种方法,则会通过查找DexHeader获得method table的存储位置Absolute offset of the method table,其中method table中存储了每个方法的描述信息(描述信息中不仅包含该方法的参数,还包括代码执行语句),而每个方法描述信息的长度是相同的,例如64k,根据method table的存储位置,结合DexHeader中指示的方法的数量Number of methods in the methodtable,可以得到每个方法的描述信息的存储位置。再根据method table的存储位置查找到method table后,根据method table中每个方法method描述信息中的一些参数,例如方法归属的类名Class index of the class this field belongs to、方法名称String index of the method name等,找到待调用的方法的描述信息,执行该描述信息中的代码执行语句,从而实现方法调用。
表1
表2
表3
发明人通过对基于Android平台的应用软件运行过程的分析,发现在可执行文件(例如dex字节码文件)中,有一些内容是不可被修改的,一旦被修改,则无法实现应用软件的功能,也就是说这部分内容是完成所述待识别应用软件功能必要的内容,例如,如果对method table的内容进行修改,则无法正确实现函数调用(例如,方法归属的类名、方法名称改变后,无法找到待调用的函数),导致无法实现应用软件的功能。而另一些内容是可以被修改的,修改后并不会对应用软件的运行发生实质影响,例如,如果修改其中的魔鬼数字′Magic′value的值,则并不影响应用软件的功能。
通过上述分析可以知道,即使恶意软件传播者企图通过篡改apk压缩包来逃避检测,也不会篡改其中会影响应用软件运行的内容,因为那样将导致恶意软件无法运行,也就无法实现传播恶意软件的目的。
根据上述分析结论,发明人提出了一种检测基于Android平台的恶意软件的方案,下面结合各个附图对本发明实施例技术方案的主要实现原理、具体实施方式及其对应能够达到的有益效果进行详细的阐述。
实施例一
如图1a所示,本发明实施例的主要实现原理流程如下:
步骤10,对待检测应用软件的压缩包进行解析,提取其中包含的可执行文件。
可选地,所述应用软件的压缩包为apk压缩包,可执行文件为dex字节码文件。
步骤20,根据可执行文件的结构格式,从所述可执行文件中获取特征内容,所述特征内容是指完成所述待识别应用软件功能必要的内容。
可选地,当所述可执行文件为dex字节码文件时,所述特征内容包括但不限于方法集合列表的内容、类集合列表的内容、字符串集合列表的内容等中的任意一种、或多种的组合。
可选地,当特征内容为方法集合列表的内容时,获取特征内容的方式包括:
根据dex字节码文件结构格式,从dex字节码文件头中用于描述方法集合列表的地址的字段中读取第一数据,从dex字节码文件头中用于描述方法集合列表中方法数目的字段中读取第二数据;
将所述第二数据与每个方法描述信息的预定长度相乘;
以第一数据指示的数据为起始地址,读取相乘结果指示的长度的数据作为方法集合列表的内容。
当特征内容为类集合列表、字符串集合列表或者其中两种以上的组合时,也可以采用类似的方式来获取特征内容,这里不再一一举例说明。
步骤30,采用预定算法,计算步骤20中获取的所述特征内容的唯一标识值。
可选地,可以采用哈希算法或单向数学函数,具体地,可以选择采用消息摘要算法第二版(MD2,Message Digest Algorithm 2)、消息摘要算法第四版(MD4,Message Digest Algorithm 4)、消息摘要算法第五版(MD5,MessageDigest Algorithm 5)、安全哈希算法第一版(SHA-1,Secure Hash Algorithm-1)等算法来计算所提取的特征内容的唯一标识值。
步骤40,将计算得到的唯一标识值与已知基于Android平台的恶意软件的特征值进行比较,所述特征值是指对已知基于Android平台的恶意软件可执行文件中的特征内容,采用所述预定算法计算后,获得的唯一标识值。若比较结果一致,进入步骤50,若比较结果不一致,则进入步骤60。
步骤50,若比较结果一致,则确定所述待检测应用软件为基于Android平台的恶意软件。
可选地还包括,步骤60,若比较结果不一致,则确定所述待检测应用软件为正常软件。
本发明实施例还提供了一种建立恶意软件特征数据库的方法,其流程示意图如图1b所示。
步骤11,接收输入的已知基于Android平台的恶意软件样本。可选地,该样本的格式为apk压缩包。
步骤12,对所述恶意软件样本进行解析,提取其中包含的可执行文件。可选地,可执行文件为dex字节码文件。
步骤13,根据可执行文件的文件结构格式,从所述可执行文件中获取特征内容,所述特征内容是指完成所述待识别应用软件功能必要的内容。
可选地,特征内容以及提取特征内容的步骤的介绍与附图1a中的步骤20类似,在这里不再重复。
步骤14,采用预定算法,对所述特征内容进行运算,获得所述特征内容的唯一标识值,作为所述恶意软件样本的特征值。
步骤15,存储所述特征值。可选地,还可以存储所述样本的标识信息(包括名称、描述信息等等)与所述特征值的对应关系,方便后续检测出恶意软件后,查找到该恶意软件对应的标识信息。
本发明实施例提供的检测恶意软件的方法,首先提取待检测应用软件压缩包中可执行文件中的特征内容,通过对该特征内容执行预定算法,得到该特征内容的唯一标识值,将该唯一标识值与已知恶意软件的特征值进行比较,根据比较结果判断待检测应用软件是否是恶意软件。而不是像现有技术一样,通过对整个应用软件压缩包进行运算获得的标识值与已知恶意软件的特征值进行比较,来确认待检测应用软件是否是恶意软件。由于在本发明实施例提供的方案中,即使恶意软件传播者人为篡改应用软件压缩包的部分内容,仍然不会改变对特征内容执行预定算法后获得的唯一标识值,无法达到逃避检测的目的,因此提高了检测基于Android平台的恶意软件的准确性,降低了漏报几率。
实施例二
本发明实施例提供了一个检测基于Android平台的恶意软件的实例,对实施例一中提供的方法进行详细的说明。
如图2所示,在本发明实施例的流程图中,通过步骤201~步骤205构建样本特征库,通过步骤211~步骤217检测待识别应用软件是否是基于Android平台的恶意软件。需要说明的是,其中构建样本特征库的过程和检测恶意软件的过程可以分别由不同的设备来完成,例如构建样本特征库由数据库管理设备完成,而检测恶意软件的过程由检测设备来完成,检测设备可以集成于网关设备、或者网站服务器中。对于网关设备而言,需要首先对数据包进行重组处理,从中获得待检测应用软件的apk压缩包。
步骤201,数据库管理设备接收输入的已知基于Android平台的恶意软件样本Malware1,该样本的格式为apk压缩包。
可选地,上述已知恶意软件样本可以是人工分析得到的、或者是沙箱分析得到的,这里不进行限定。
步骤202,数据库管理设备对所述恶意软件样本Malware1的apk压缩包进行解析,提取其中包含的dex字节码文件,即为dexfile_s1。
步骤203,数据库管理设备根据预定的dex文件结构格式,从所述dex字节码文件dexfile_s1中获取特征内容,所述特征内容是指完成所述待识别应用软件功能必要的内容。在本实施例中以方法集合列表的内容为例进行说明。
数据库管理设备读取dex字节码文件头中0x4c位置上的4字节的内容作为方法集合列表中方法的数目,和0x50位置上的4字节的内容作为方法集合列表的地址。计算方法的数目和每个方法描述信息的预定长度的乘积作为方法集合列表的尺寸,如方法的数目为10,每个方法描述信息的预定长度为64字节,则方法集合列表的尺寸为640字节。从偏移量为0x50的地址上,读取640字节的内容作为方法集合列表。
步骤204,数据库管理设备对所述方法集合列表的内容执行MD5算法,获得运算结果MD5值,作为所述恶意软件样本的特征值。
数据库管理设备将上述读取的640字节输入hash算法,获得运算结果MD5值,作为所述恶意软件样本的特征值f_value1。
步骤205,数据库管理设备将所述恶意软件样本的特征值存入数据库中。
数据库管理设备针对不同恶意软件样本,重复执行步骤201~步骤205,在数据库中建立如表4所示的特征值表。
表4
恶意样本名称 |
特征值 |
描述信息 |
Malware1 |
f_value1 |
略 |
Malware2 |
f_value2 |
略 |
Malware3 |
f_value3 |
略 |
…… |
…… |
…… |
可选地,由于数据库存储空间的限制,可以设定一些老化规则,以免数据库的可用空间很快耗尽。例如,老化规则可以设置为:若一个特征值超过10天未被匹配中,则删除该特征值相关记录;或者被匹配中的频率小于3次/天,则删除该特征值相关记录;或者特征值保存时间超过3个月,则删除该特征值相关记录。通过上述规则,从数据库中删除传播性较低、或者较老,大多数移动终端已安装对应补丁的恶意软件的特征值相关记录。
步骤211,检测设备获得待检测的基于Android平台的应用软件。
可选地,当检测设备集成于网关设备时,待检测应用软件为对同一数据流中的数据包进行重组处理后获得的。当检测设备集成于网站服务器时,待检测应用软件为网站用户提交的。当检测设备集成于移动终端中的客户端时,待检测应用软件为从网站服务器下载得到的,在这里不进行限定。
步骤212,检测设备对待识别应用软件的apk压缩包进行解析,提取其中包含的dex字节码文件,记为dexfile_test。
步骤213,检测设备根据预定的dex文件结构格式,从所述dex字节码文件dexfile_test中获取方法集合列表的内容。
具体提取特征内容的过程与步骤203类似,在这里不再重复。
步骤214,检测设备对所述方法集合列表的内容执行MD5算法,获得运算结果MD5值。
步骤215,检测设备将步骤214中所述运算结果MD5值与表4所示数据库中存储的各特征值进行比较。若比较结果一致,进入步骤216,否则进入步骤217。
可选地,检测设备为了提高比较效率,在所述数据库和检测设备分别设置于不同的实体设备中时,检测设备可以在本地缓存数据库中的数据,并定期根据数据库中的数据更新缓存数据。
步骤216,若比较结果一致,则确定所述待检测应用软件为基于Android平台的恶意软件。
可选地,在确定所述待检测应用软件为恶意软件之后,还可以采用对应的应对措施,例如当所述检测设备集成于网关设备中时,检测设备丢弃承载该应用软件的数据包,即阻断承载该应用软件的数据流,达到阻止恶意软件通过网络传播的目的。当所述检测设备集成于网站服务器时,检测设备触发网站服务器删除该应用软件。
步骤217,若比较结果不一致,则确定所述待检测应用软件为基于Android平台的正常软件。
本发明实施例提供的恶意软件的检测方案,首先在构建存储恶意软件特征值的数据库时,是根据已知恶意软件的特征内容(该特征内容是指完成所述待识别应用软件功能必要的内容)来进行哈希运算获得特征值。在检测过程中,从待检测应用软件apk压缩包中dex字节码文件中提取特征内容,再根据提取的特征内容执行hash运算,将hash运算结果与数据库中的特征值进行比较,来确认待检测应用软件是否是恶意软件。在本发明实施例提供的方案中,若恶意软件传播者人为篡改特征内容,则恶意软件无法成功运行,失去了传播的目的,若恶意软件传播者人为篡改除特征内容之外的apk压缩包的其他内容,由于不会改变检测时对特征内容执行hash运算后获得的MD5值,因此检测设备仍然能够识别出被篡改的恶意软件,因此提高了检测基于Android平台的恶意软件的准确性,降低了逃避检测的可能性。
实施例三
与实施例一相对应,本发明实施例还提供了一种检测基于Android平台的恶意软件的装置,如图3所示,该装置包括第一解析单元301、第一获取单元302、第一运算单元303、比较单元304和确定单元305,具体如下:
第一解析单元301,用于对待检测应用软件的压缩包进行解析,提取其中包含的可执行文件;
第一获取单元302,用于根据可执行文件的结构格式,从第一解析单元301解析出的所述可执行文件中获取特征内容,所述特征内容是指完成所述待识别应用软件功能必要的内容;
第一运算单元303,用于采用预定算法,计算所述特征内容的唯一标识值;
比较单元304,用于将第一运算单元得到的唯一标识值与已知恶意软件的特征值进行比较,所述特征值是指对已知基于Android平台的恶意软件可执行文件中的特征内容,采用所述预定算法计算后,获得的唯一标识值;
确定单元305,用于若比较单元304的比较结果一致,则确定所述待检测应用软件为基于Android平台的恶意软件。
可选地,所述特征内容,以及第一获取单元302获取特征内容的具体方式请参照实施例一中的介绍,在这里不再赘述。
可选地,附图3所示的装置可以集成于网关设备、网站服务器等实体设备中,在该装置集成于网关设备中时,所述装置还包括:阻断单元,用于在确定单元305确定所述待检测应用软件为基于Android平台的恶意软件后,阻断承载所述待检测应用软件的数据流。
在该装置集成于网站服务器中时,所述装置还包括:删除单元,用于确定单元305确定所述待检测应用软件为基于Android平台的恶意软件后,触发删除所述待检测应用软件。
相应地,请参照附图4,本发明实施例还提供了一种建立恶意软件特征数据库的装置,该装置包括:
接收单元401,用于接收输入的已知基于Android平台的恶意软件样本,可选地,该样本的格式为apk压缩包;
第二解析单元402,用于对所述恶意软件样本进行解析,提取其中包含的可执行文件;
第二获取单元403,用于根据可执行文件的结构格式,从第二解析单元402得到所述可执行文件中获取特征内容,所述特征内容是指完成所述恶意软件功能必要的内容;
第二运算单元404,用于采用预定算法,计算所述特征内容的唯一标识值,作为所述恶意软件样本的特征值;
存储单元405,用于存储第二运算单元404得到的特征值。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读取存储介质中,如:ROM/RAM、磁碟、光盘等。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。