《移动智能终端安全》课件第14章.pptx

上传人(卖家):momomo 文档编号:7608459 上传时间:2024-04-17 格式:PPTX 页数:86 大小:1.88MB
下载 相关 举报
《移动智能终端安全》课件第14章.pptx_第1页
第1页 / 共86页
《移动智能终端安全》课件第14章.pptx_第2页
第2页 / 共86页
《移动智能终端安全》课件第14章.pptx_第3页
第3页 / 共86页
《移动智能终端安全》课件第14章.pptx_第4页
第4页 / 共86页
《移动智能终端安全》课件第14章.pptx_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、第14章 应用软件的防护14.1 应用程序的保护应用程序的保护14.1.1 使用加壳保护使用加壳保护1.加壳原理加壳原理软件加壳技术是一种代码加密技术,用来保护软件不被非法修改或反编译,运行时比原程序更早启动,并且拥有控制权。具体流程是首先启动一个外壳程序,再由外壳程序解密应用本身代码文件并进行动态加载。该方法可以有效防止针对应用内部关键函数的篡改,但是攻击者可以通过恶意代码植入的方式来篡改外壳程序的执行流程,实现破坏系统等攻击的目的。第14章 应用软件的防护以下介绍该项技术的基本原理。(1)在加壳的过程中需要三个对象:需要加密的apk(源apk)。壳程序apk(负责解密apk工作)。加密工具

2、(将源apk进行加密和壳dex合并成新的dex。第14章 应用软件的防护(2)主要步骤:将需要加密的apk和自己的壳程序apk,用加密算法对源apk进行加密,再将壳apk进行合并得到新的dex文件,最后替换壳程序中的dex文件即可。得到的新的apk叫作脱壳程序apk。脱壳程序apk不是完整意义上的apk程序,其主要工作是:负责解密源apk,然后加载apk,并使其正常运行。在这个过程中需要了解的知识是:将源apk和壳apk合并成新的dex文件需要涉及dex文件的格式。第14章 应用软件的防护2.dex文件格式文件格式1)dex文件结构一个完整的dex文件可分为三个区域片段,分别是文件头、索引区和

3、数据区,其文件结构如图14-1所示。文件头包含本文件的标识符、校验和、大小等信息,并存储所有索引区的大小和偏移地址;索引区中存储字符串、类型、方法原型等索引信息,该信息可用结构体来表示,通过索引信息可找到数据在dex文件中的具体位置;数据区中存储具体的数据以及方法指令。第14章 应用软件的防护图14-1 dex文件结构第14章 应用软件的防护文件头header的大小固定为0 x70,可以用一个结构体来描述,其中每一项的具体含义如图14-2所示。图14-2 文件头结构图第14章 应用软件的防护对于class_defs结构体,其存储的是dex文件中所有class的相关信息,比如class的类型、访

4、问类型和包含的方法等。其结构如图14-3所示。图14-3 class_defs结构体第14章 应用软件的防护该结构的每一项含义在图14-3中已经注释。从该结构可以看出,class_data_off所指向的内容为该class类所包含的全部数据,该数据由结构体组成,如图14-4所示。class_data_off存储的数据为DexClassData结构体的偏移地址。第14章 应用软件的防护图14-4 DexClassData结构体第14章 应用软件的防护DexClassData描述dex文件中某个类的相关信息,DexMethod描述该类中函数的信息。DexMethod的methodIdx是该函数在m

5、ethod_id_item中的Index索引值,accessflags描述该函数的访问权限以及其他的信息,codeoff是一个偏移地址,偏移所指向的位置为DexCode结构。DexCode描述函数的具体信息,具体含义如图14-4的注释所示。通过对class_defs结构的分析,可查找类包含的函数的信息。第14章 应用软件的防护2)dex文件头部信息文件头部的各项如表14-1所示。只需关注表14-1中的checksum、signature和 file_size三个项目。第14章 应用软件的防护第14章 应用软件的防护(1)checksum。checksum(文件校验码)使用adler32算法校验

6、文件中除magic、checksum外的所有文件区域,用于检查文件错误。adler32是Mark Adler发明的校验算法,和32位CRC校验算法相同,是一种用于保护数据、防止意外更改的算法。因为该算法容易被伪造,所以是不安全的保护措施。但是,其计算速度相比CRC更快。第14章 应用软件的防护alder32校验算法流程包括求解两个16位的数值A、B,并将结果连接成一个32位整数。A是字符串中每个字节的和,而B是A在相加时每一步的阶段值之和。在adler32开始运行时,A初始化为“1”,B初始化为“0”,最后的校验之和要与65521(继216之后的最小素数)进行取模运算。第14章 应用软件的防护

7、具体公式如下:第14章 应用软件的防护(2)signature。signature是使用SHA-1哈希算法对除magic、checksum和signature外的所有文件区域进行操作,用于唯一识别文件。SHA-1哈希算法流程。对于任意长度的明文,SHA-1首先对其进行分组,使得每一组的长度为512位。每个明文分组的摘要生成过程如下:a.将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。b.申请五个32位的链接变量,记为A、B、C、D、E。第14章 应用软件的防护c.16个子明文分组扩展为80个。d.80个子明文分组进行四轮运算。e.链接变量与初始链接变量进行求和运算。f.链接

8、变量作为下一个明文分组的输入,重复进行以上操作。最后,五个链接变量里的数据即为SHA-1摘要。第14章 应用软件的防护 SHA-1的分组过程。对于任意长度的明文,SHA-1的明文分组过程与MD5类似。首先为明文添加位数,使明文总长度为448(mod 512)位。在明文后添加位的方法是第一个添加位是l,其余都是0。将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文之后。此时的明文长度是512位的倍数。与MD5不同的是,SHA-1的原始报文长度不能超过2的64次方,另外SHA-1的明文长度从低位开始填充。第14章 应用软件的防护对于512位的明文分组,SHA-1将

9、其分成16个子明文分组(sub-block),每个子明文分组为32位,使用Mk(k=0,1,15)表示该16个子明文分组。将该16个子明文分组扩充到80个子明文分组,记为Wk(k=0,1,79),扩充的方法如下:Wt=Mt,0t15Wt=(Wt3 Wt8 Wt14 Wt16)1,16t79第14章 应用软件的防护 SHA-1的四轮运算。SHA-1有四轮运算,每一轮包括20个步骤,一共80步。当第一轮运算中的第1步骤开始处理时,A、B、C、D、E五个链接变量中的值先赋值到另外五个记录单元A、B、C、D、E中。这五个值将保留,用于在第四轮的最后一个步骤完成之后与链接变量A、B、C、D、E进行求和操

10、作。第14章 应用软件的防护SHA-1的四轮运算,共80个步骤使用同一个操作程序,即A,B,C,D,E(A5)+ft(B,C,D)+E+Wt+Kt,A,(B30),C,D其中:ft(B,C,D)为逻辑函数,Wt为子明文分组Wt,Kt为固定常数。第14章 应用软件的防护此操作程序的意义为:a.将(A5)+ft(B,C,D)+E+Wt+Kt的结果赋值给链接变量A。b.将链接变量A的初始值赋值给链接变量B。c.将链接变量B的初始值循环左移30位后再赋值给链接变量C。d.将链接变量C的初始值赋值给链接变量D。e.将链接变量D的初始值赋值给链接变量E。第14章 应用软件的防护SHA-1规定四轮运算的逻辑

11、函数如表14-2所示。第14章 应用软件的防护在操作程序中需要使用固定常数Ki(i=0,1,2,79),Ki的取值如表14-3所示。第14章 应用软件的防护(3)file_size。File_size即dex文件大小。为什么只需要关注checksum、signature和file_size三个字段呢?因为若要将一个文件(加密之后的源apk)写入到dex中,那么肯定需要修改文件校验码(checksum),因为其作用是检查文件是否有错误。signature也一样,是唯一识别文件的算法。此外,还需要修改dex文件的大小。不过此处还需要一个操作,即标注加密的apk的大小,因为在脱壳的时候,需要知道ap

12、k的大小,才能正确地得到apk。那么标注加密apk的大小值放到哪呢?该值直接放到文件的末尾即可。所以总结需要做的步骤是:修改dex的三个文件头,再将源apk的大小追加到壳dex的末尾。修改之后得到新的dex文件样式如图14-5所示。第14章 应用软件的防护图14-5 修改后的dex文件结构第14章 应用软件的防护14.1.2 使用使用NDK保护保护Android NDK直译为“安卓原生开发套件”。它是一系列工具的集合,能够帮助开发者快速开发C(或C+)的动态库,可以将原生C、C+代码的强大功能和Android应用的图形界面结合在一起,解决软件跨平台问题。Android NDK集成了交叉编译器,

13、通过JNI接口向开发人员提供一套JNI接口函数,通过这些函数可以在原生C、C+代码中与Java代码进行数据交换。第14章 应用软件的防护具体如何利用NDK来有效保护源代码呢?常采用的策略是将代码中的敏感信息隐藏在NDK中,比如服务器的IP地址、加密的算法等。如何才能隐藏此类信息呢?应该使用Android NDK把这些数据编译在so文件中,通过JNI获取,则可达到保护敏感信息的目的,即用NDK隐藏敏感信息。下面通过一个例子来演示具体隐藏的过程。第14章 应用软件的防护1.准备工作准备工作(1)下载最新版Android Developer Tool。Android Developer Tool也称

14、作ADT,是Google的一款Android集成开发工具。它解压后有两个目录:Eclipse和SDK。Eclipse目录里是一个定制的Eclipse,已经装好了SDK插件、NDK插件和C/C(CDT)等插件,大小不到400MB。SDK目录下是一个最新API级别的Android SDK。建议下载该ADT。如果之前下载过各个版本的SDK,将它们拷贝过来仍可以正常使用。若没有下载过SDK,则需要在Eclipse下安装C/C(CDT)和NDK插件。第14章 应用软件的防护(2)下载Android NDK,大小为294MB。(3)如果是Windows用户,还需安装Cygwin 1.7(建议不要以Wind

15、ows作为开发平台)。2.创建项目创建项目(1)新建一个Android Project。(2)右键选择“Android Tools”,在弹出的下拉菜单中点击“Add Native Support”,如图14-6所示。第14章 应用软件的防护图14-6 设置增加对Native的支持第14章 应用软件的防护输入so库文件的名字。so文件位于项目libs目录下的armeabi文件夹中,文件名为 libxxxx.so。在此输入的是“AppConfig”,编译成功后生成libAppConfig.so文件,最后点击【确定】按钮,Eclipse变成C/C+编辑视图,NDK插件在项目下创建了一个jni目录,并

16、且在jni目录下创建AppConfig.cpp文件和Android.mk文件,如图14-7所示。第14章 应用软件的防护图14-7 生成AppConfig.cpp及Android.mk文件第14章 应用软件的防护3.代码编写代码编写(1)编写一个Java类,包含一个getAppUrl()的native方法。因为要隐藏服务器的地址,所以需要返回一个String字符串。(2)编写AppConfig.cpp文件。第14章 应用软件的防护以下分别对以上各行代码进行解释。第一行代码:引入jni.h头文件。第二行代码:因为此处用C语言,所以需要extern“C”(C为大写)。第三行代码:JNIInterf

17、ace类的getAppUrl()方法位于com.loveplusplus.hellojni包下,所以有一个固定的写法:Java包名类名_方法名JNIEnv*env,jobject thiz是固定传入的参数。第14章 应用软件的防护第四行代码:此行注释掉的代码是C语言返回字符串的写法。第五行代码:返回一个字符串,再点击【编译】按钮,NDK会将AppConfig.cpp编译到libAppConfig.so文件中。第14章 应用软件的防护14.1.3 使用代码混淆保护使用代码混淆保护虽然通过编写NDK代码可以有效保护源码,但并不是所有人都具备C、C+编程基础,因此在编写NDK代码时也是困难重重。代码

18、混淆是指对原始程序进行处理,得到与原程序功能完全一致但结构不一致的新程序。Google在Android SDK 2.3时就加入了Proguard代码混淆工具,开发者可以通过该工具对自己的代码进行混淆。通过混淆技术,源文件中的类、方法以及字段等会变为无意义的名称,使得逆向人员很难理解其中的含义,难以对代码进行分析,达到有效保护源码的效果。下面简要描述基于Android Studio IDE的代码混淆实现过程。第14章 应用软件的防护(1)开启混淆。在Android Studio中找到项目module的build.gradle。将minifyEnabled设置为true。(2)公共部分。在混淆的过

19、程中,有一部分是固定不变的。下面列出保持不变的模块,要使用时只需将代码copy即可。基本指令区:默认保留区:webview:第14章 应用软件的防护(3)不需要混淆的代码。不混淆的部分用关键字-keep来修饰。不混淆的部分分为如下几个模块:实体类。第三方包。与js互相调用的类(没有可不写)。反射相关的类和方法。第14章 应用软件的防护(4)libs下的第三方jar包的混淆方式。保留libs下的jar包的方式为:使用-keep关键字,找到libs目录,然后打开相应的jar文件,找到对应的包名,添加如下代码:-keep class 包名.*;(5)complie的第三方jar包的混淆方式。comp

20、lie的第三方jar包的混淆方式和libs下的相同。打开对应的引用jar文件,添加如下代码:-keep class 包名.*;(6)代码注释的混淆方式。需要使用Bind来修饰变量。第14章 应用软件的防护14.1.4 使用签名校验保使用签名校验保护护由于经过恶意代码植入的软件需要重编译才能够安装使用,因此导致签名的改变以及程序本身的一些变化,故可以通过检查签名以及检查软件本身的校验值来实现对抗重编译。1.检查签名检查签名Android SDK提供检测软件签名的方法,可调用系统函数来获得签名。如果签名较长,则可以通过比较签名的哈希值来检验签名是否发生改变。检查签名基于Android签名机制。第1

21、4章 应用软件的防护Android签名之前,需要了解的知识点有:数据摘要(信息摘要)、签名文件、证书文件、jarsign工具签名、signapk工具签名、keystore文件与pk8文件和x509.pem文件的区别、如何手动签名。以下分别介绍这些知识点。1)数据摘要(信息摘要)、签名文件和证书文件(1)数据摘要。数据摘要是一种算法,即对一个数据源进行一个算法之后得到一个摘要,也叫数据指纹。不同的数据源,其数据指纹也不一样。第14章 应用软件的防护信息摘要算法(Message Digest Algorithm)是一种能产生特殊输出格式的算法,其原理是根据一定的运算规则对原始数据进行某种形式的信息

22、提取,被提取出的信息被称作原始数据的消息摘要。信息摘要算法有MD5算法和SHA-1算法及其大量的变体。信息摘要的主要特点有以下三点:无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。只要输入的原始数据不同,对其进行摘要以后产生的消息摘要必不相同。具有不可逆性,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的原始消息第14章 应用软件的防护(2)签名文件和证书文件。签名文件和证书文件成对出现,两者不可分离。而且后面通过源码可以看到,这两个文件的名字一样,但后缀名不一样。要确保可靠通信,必须要解决两个问题:首先,确定消息的来源是其申请的那个人;其次,保证信息在传递的过程中不被第三方篡改

23、,而且即使被篡改,也可以发觉。数字签名是为了解决这两个问题而产生的,它是对非对称加密技术与数字摘要技术的一个具体应用。第14章 应用软件的防护消息的发送者先生成一对公私钥对,再将公钥给消息的接收者。如果消息的发送者想给消息接收者发消息,在发送的信息中,除了要包含原始的消息外,还要加上另一段消息。这段消息通过如下两步生成:第一步,对要发送的原始消息提取消息摘要。第二步,对提取的消息摘要用自己的私钥加密。通过这两步得出的消息,即原始信息的数字签名。而对于消息的接收者来说,所收到的消息包含两个部分,一是原始的消息内容,二是附加的数字签名。接收者将通过以下三步验证消息真伪。第14章 应用软件的防护 对

24、原始消息部分提取消息摘要,注意使用的消息摘要算法要和发送方使用的一致。对附加上的那段数字签名使用预先得到的公钥解密。比较前两步所得到的两段消息是否一致。如果一致,则表明消息确实是期望的发送者发的,且内容没有被篡改过;如果不一致,则表明传送的过程中出现问题,消息不可信。第14章 应用软件的防护过数字签名技术,可以有效解决可靠通信的问题。如果原始消息在传送的过程中被篡改,则消息接收者对被篡改的消息提取的摘要与原始的不同。并且,由于篡改者没有消息发送方的私钥,即使可以重新算出被篡改消息的摘要,也无法伪造出数字签名。综上所述,数字签名其实是只有消息的发送者才能产生的别人无法伪造的一段数字串,此数字串是

25、对消息的发送者发送消息真实性的有效证明。有一个前提,即消息的接收者必须事先得到正确的公钥。第14章 应用软件的防护其中,数字证书用到了数字签名技术,只不过要签名的内容是消息发送方的公钥,以及其他信息。但与普通数字签名不同,数字证书中签名者是要具有一定公信力的机构。所以,数字证书可以保证数字证书里的公钥确实是证书所有者的,或者证书可以用来确认对方的身份。因此,数字证书主要是用来解决公钥的安全发放问题。第14章 应用软件的防护2)jarsign工具签名和signapk工具签名Android中有两个签名工具:jarsign和signapk。jarsign是Java自带的工具,可以对jar进行签名。s

26、ignapk是专门为Android应用程序APK进行签名的工具,两者的签名算法没什么区别,主要是签名时使用的文件不一样。3)keystore文件与pk8文件和x509.pem文件的区别jarsign工具签名使用的是keystore文件,signapk工具签名使用的是pk8、x509.pem文件。其中在使用Eclipse工具写程序输出Debug包的时候,默认用jarsign工具进行签名,而且Eclipse中有一个默认签名文件,如图14-8所示。第14章 应用软件的防护图14-8 Eclipse中默认签名文件第14章 应用软件的防护4)如何手动签名(1)使用keytool和jarsign来进行签名

27、。在正式签名处发布包的时候,需要创建一个自己的keystore文件,如图14-9、图14-10所示。图14-9 导出要签名的发布包第14章 应用软件的防护图14-10 创建签名文件第14章 应用软件的防护可以对keystore文件起自己的名字,后缀名无关紧要。创建文件之后,生成MD5和SHA1的值,该值不用记录,可通过以下命令查看keystore文件的MD5和SHA1的值。“keytool-list-keystore debug.keystore”命令的执行结果如图14-11所示。第14章 应用软件的防护图14-11 查看签名文件第14章 应用软件的防护(2)使用signapk来进行签名,其代

28、码如下:java-jar signapk.jar.testkey.x509.pem testkey.pk8 debug.apk debug.sig.apk(3)两种签名方式的区别。jarsign签名时用的是keystore文件,signapk签名时用的是pk8和x509.pem文件。因为都是给APK进行签名的,所以keystore文件和pk8、x509.pem文件之间可以相互转化。第14章 应用软件的防护2.检查校验值检查校验值植入恶意代码后,软件本身会发生变化。因此可以再对软件计算MD5值,保存在网络上,在启动时对软件的MD5值进行校验,从而判断软件是否被重打包过。这在一定程度上防止了软件的

29、重编译。检查校验值是基于MD5算法实现的,下面通过介绍MD5算法的基本思路来理解该功能是如何实现的。第14章 应用软件的防护MD5算法是一种信息摘要算法,主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要,是“压缩+加密+hash算法”的结合体,是绝对不可逆的。1)MD5算法的计算步骤MD5以512位分组来处理输入的信息,且每一分组被划分为16个32位子分组,经过一系列的处理后,算法的输出由四个32位分组组成,四个32位分组级联后将生成一个128位散列值。第14章 应用软件的防护(1)填充。如果输入信息的长度(bit)对512求余的结果不等于448,则需要填充位,使得对512求余的

30、结果等于448。(2)记录信息长度。(3)装入标准的幻数(四个整数)。(4)四轮循环运算。第14章 应用软件的防护2)MD5算法的应用(1)一致性验证。MD5的典型应用是对一段文本信息产生信息摘要,以防止被篡改。常在某些软件下载站点的软件信息中看到其MD5值,作用在于可在下载该软件后,对下载的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保用户获得的文件与该站点提供的文件为同一文件。(2)数字证书。如果有一个第三方的认证机构,用MD5可以防止文件作者的“抵赖”,即数字签名应用。第14章 应用软件的防护(3)安全访问认证。在Unix系统中用户的密码以MD5(或其

31、他类似的算法)经hash运算后存储在文件系统中。当用户登录时,系统将用户输入的密码进行MD5 hash运算,和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。第14章 应用软件的防护14.2 Android平台的恶意代码检测平台的恶意代码检测基于Android平台的恶意代码检测系统由静态检测、动态检测和云端检测三种组成。系统详细功能结构如图14-12所示。下面对各个类型进行深入的阐述,并详细介绍实现过程中使用的框架、算法和平台工具。第14章 应用软件的防护图14-12 恶意代码检测模型第14章 应

32、用软件的防护首先,静态检测模块通过基于特征码匹配技术对系统文件和应用进行静态扫描,找出恶意软件和被已知恶意代码感染的软件。第二,动态检测模块分为两个部分。一部分通过在后台监听系统广播并分析应用行为来判断该应用是否为恶意软件或被恶意代码感染,建立应用黑白名单;另一部分是通过监听系统信息,将信息数据上传至云端服务器进行存储和分析。最后,云端检测模块利用基于周期性频次异常检测的技术来分析终端节点上传的系统信息记录。服务器与终端设备间的通信采用双密钥加密算法。第14章 应用软件的防护基于Android 平台的恶意代码检测系统有以下五个组成部分:人机交互:主要用于系统和用户之间的交互,即完成一些简单的输

33、入输出功能。该模块的实现依赖Android平台的程序框架层提供的丰富的API。静态检测:主要用于在未联网的状态下或在普通模式下进行恶意代码检测。该模块的实现依赖于特征码匹配技术的实现,即串扫描技术。第14章 应用软件的防护 动态检测:主要是对系统环境进行实时的监控,在一些特定的事件发生时起作用。另外该模块负责监听一些关键的系统行为信息,并记录到云端服务器数据库,进行周期性的统计和分析,从而发现隐藏的恶意软件。云端检测:主要是由云端的高性能服务器在基于周期性频次异常检测技术对大量的用户系统信息进行分析检测后,生成检测报告并返回给终端节点。数据中心:主要是为其他模块的持久化及相关操作提供数据支持,

34、对病毒和软件黑白名单数据结构进行说明。第14章 应用软件的防护14.2.1 静态检测静态检测1.基于特征码的匹配基于特征码的匹配基于特征码匹配模块的设计是利用串扫描技术对恶意代码进行检测,以此来构建整个安全系统的第一道防线。由于串扫描技术算法简单且维护方便,其检测效率十分高,故应用广泛。目前在用的安全产品都使用了该技术。串扫描技术主要是先对系统中的应用程序和静态文件进行特征码提取,再与数据库中的特征码进行快速匹配得出匹配结果,如果待检测的文件中包含恶意代码则给出用户提示信息,否则进入下一个匹配流程。第14章 应用软件的防护针对移动终端设备资源和计算能力有限的问题,该系统对静态检测模块进行了优化

35、。优化过程如下:(1)将待检测对象拆解成二进制文件,并提取基本特征和特殊特征等信息。(2)将数据库中的特征码依其行为进行详细分类,如扣费恶意代码、网络流量恶意代码、传播恶意代码和系统破坏恶意代码等。再将提取的特征码按照其特殊特征进行串扫描,实现快速高效的匹配。第14章 应用软件的防护(3)根据(2)中的检测结果对应用程序进行名单分类。若包含恶意代码,则给出危险提示信息,并将其加入应用黑名单;若扫描发现没有包含任何恶意代码,则将其加入白名单,进行下一轮匹配过程。在没有联网的情况下系统无法与云端建立连接,此时可以使用该功能对系统做一定程度的安全检查。第14章 应用软件的防护2.匹配实现匹配实现该模

36、块的实现应用了数据中心的两个数据模块,即恶意代码特征数据库和应用黑白名单。这些数据都需要进行持久化处理,关系型数据库是最好的选择。在Android平台中,按照数据访问权限的不同,数据存储方式可分为私有和开放两种类型;按照存储方式的不同,又可分为文件存储、SQLite数据库、内容提供器、SharedPreferences和网络五种类型。根据检测系统的安全特性,可选择私有的存储方式,若系统中存在的数据量较大,则可选择SQLite数据库作为系统的数据存储方式。匹配流程如图14-13所示。第14章 应用软件的防护图14-13 匹配流程第14章 应用软件的防护1)串扫描串扫描技术是指通过扫描已知恶意代码

37、的二进制文件,提取出该恶意代码中存在的且具有唯一性的字节序列生成特征码,将待检测的文件对象拆分成字节片段与特征码字节序列匹配的技术。串扫描技术是传统特征码扫描技术的基础。该方法的一般步骤是先收集大量的恶意代码样本,提取特征码、建立特征码库,最后通过不断更新用户端的恶意代码特征码库来到达检测的目的。第14章 应用软件的防护这种方法存在滞后性。当新的恶意代码威胁出现后,基于特征码匹配的反病毒软件平均48天后才能发挥作用。而在这段时间内,恶意代码可能已经给系统或者用户带来了不可估量的损失和伤害。随着新的恶意代码的不断出现,用户端的恶意代码特征库将会变得越来越大,在一定程度上会降低检测的效率。另外,该

38、方法也无法识别恶意代码的变种。第14章 应用软件的防护2)启发式扫描为了改进特征码扫描技术滞后性的缺点,安全软件使用了启发式扫描技术。该技术是在对海量的恶意软件和正常软件进行分析后,定义一系列区分正常软件和恶意软件的规则,通过规则,能判断软件的类别。启发式技术是一种被动的检测方式,通过扫描应用程序文件内容或者观察应用执行过程中的某些行为后作出判断。比如一个游戏软件被一种从后台发送短信的恶意代码感染后,其静态文件结构发生变化,行为也变得异常。第14章 应用软件的防护此时可通过启发式规则来增强对此类恶意代码变种或未知代码的检测。但针对这种方式,恶意代码的制造者能够通过代码迷惑技术对恶意代码进行压缩

39、、加密、插入垃圾指令等手段,轻松躲避启发式检测技术的检测。另外,此类技术依赖于脱壳、解密、反汇编等技术的发展来对静态文件进行分析。第14章 应用软件的防护14.2.2 动态检测动态检测1.动态检测的概念动态检测的概念虽然简单的特征码匹配广泛应用,但存在更新滞后等问题。为了保障移动终端设备的安全,还需要采用其他措施来提高系统的安全性能。因此,可以采用动态检测的方式来监听系统中运行的应用进程,从而阻止被恶意代码感染的应用运行或者执行恶意代码。第14章 应用软件的防护监听到系统事件后,就可以对捕获到的系统事件进行对比分析了。整个过程可以分为以下两个步骤来实现。(1)首先该安全软件将对比应用安装时所申

40、请的系统权限记录。如果应用执行了未经授权的恶意行为,则调用系统权限来阻止该行为的执行,并提示用户进行查杀或者卸载。(2)利用系统信息综合评估模块来对授权的行为进行分析评估,找出隐藏在正常应用里面的恶意代码行为,达到彻底消除安全威胁的目的。第14章 应用软件的防护2.动态检测的实现动态检测的实现接收和发送短信、拨打电话、访问网络、访问数据库和文件读取等都被定义为敏感事件。这些是平时使用手机时经常产生的事件,但也是恶意代码经常利用的事件。为了能够检测到恶意代码的恶意行为,必须对这些事件进行监听、分析以区分恶意行为和正常行为,降低误报和漏报的发生率。在对事件进行监听之前,需要对已安装应用的权限做一个

41、记录,如访问网络、拨打电话和发送短信等。第14章 应用软件的防护实现对这些事件的监听有两种方式:一种是使用广播组件,一种是使用观察者模式。下面分别对这两种方式进行详细介绍。1)使用广播组件接收事件消息首先通过在该安全软件的配置文件AndroidManifest.xml中进行如下配置,并将该监听级别设置为最高,即将过滤属性priority设置为1000。第14章 应用软件的防护2)使用观察者模式监听系统事件该模式主要依赖系统提供的Observer类,基于此类,派生出了ContentObserver和FileObserver等类。下面以FileObserver为例进行简要说明。该类采用观察者模式,

42、用于监听文件系统的变化。详细的代码实现逻辑和步骤如下:(1)实现一个监听器类MyObserver,该类是FileObserver的派生类,定义了被监听对象的处理逻辑。(2)实例化一个MyObserver类,并启动对SD卡文件系统的监听。第14章 应用软件的防护3.信息系统评估信息系统评估系统信息是指用来描述系统行为的信息,分为四类:系统资源信息、系统状态信息、用户信息和网络信息。(1)系统资源信息:主要描述系统资源的使用情况。每个应用(包括操作系统的运行)都需要使用系统资源。这里所说的应用包含恶意软件或者感染了病毒的正常应用。正常的应用在使用系统资源时,系统CPU或者电量信息处在比较稳定的范围

43、,而恶意软件的运行会造成CPU使用率的意外升高或者电量的非正常消耗。这些异常会通过系统资源的使用情况得到体现。第14章 应用软件的防护对稳定的状态下。一旦系统中正在运行的进程发生任何异常,都会影响到系统运行状态。如某个游戏意外停止等事件,会触发系统异常信息。(3)用户信息:主要指用户行为信息而非用户资料信息。用户的行为信息主要包括用户启动程序、接发短信、接打电话和访问网络等行为的次数和时间信息。用户行为是没有太多的周期性规律的,而恶意代码导致的恶意行为则可能引起某些行为的周期性产生,通过观察这些信息可以检测到恶意软件。第14章 应用软件的防护(4)网络信息:主要记录不同网络协议的流量信息,包括

44、TCP、UDP和ICMP等协议的流量占总流量的比例信息等。通过观察该信息可以发现专门通过刷流量来进行恶意攻击的行为。综合Android平台系统本身的特性和恶意软件的行为特征,主要通过提取系统信息中的CPU使用量、内存使用增量、SD卡使用增量、网络流量、电池消耗量、进程数、接发短信数、应用安装数及相应的时间戳等来进行应用行为的综合评估,再通过综合评估的结果来检测恶意代码。第14章 应用软件的防护14.2.3 云端检测云端检测随着云计算技术的诞生和应用,安全系统可以将耗时、耗资源的检测工作交给运算能力和存储空间极大的云端服务器去做。手机作为云计算系统的终端,只负责少量数据的发送和接收。这样不但彻底

45、解放了手机,同时也有效保护了手机系统和数据的安全。第14章 应用软件的防护在云计算架构中,用户将大量的个人信息,如联系人信息、照片、个人账户及密码等存储在云端。虽然在云端有保密措施来防止信息的泄漏和盗取,但信息从终端传输到云端或从云端读取数据是通过开放的互联网实现的,互联网的开放性给了黑客窃取隐私、机密信息的机会。在云计算的构架中,因为每个用户都可以获取服务器的信任,因此伪造数据、截获数据等行为极易发生。所以,系统在设计终端与云端集群服务器的通信方式时,可采用比较安全的双密钥加密方式,以防止用户信息的泄漏,保证用户信息的安全。第14章 应用软件的防护云端检测模块中的数据加密子模块可采用安全性较

46、高的双密钥加密,该方式不仅解决了对称密钥被劫持后带来的信息泄露隐患,也解决了非对称密钥对大量数据加密不足的问题,其实现流程如下。首先,云端向智能终端发送一个公钥;接着,智能终端产生一个对称密钥,并使用所获公钥加密对称密钥,加密后发送给云端,云端与智能终端使用对称密钥进行相互通信;最后,服务器端随机产生一个公钥发送给手机客户端,客户端用收到的公钥对产生的对称密钥进行加密,并发送给服务器端。服务器端和手机客户端即可通过该对称密钥对数据加密并通信。第14章 应用软件的防护小小 结结本章的主题是保护应用软件的安全。围绕该主题,首先介绍在移动智能终端保护应用软件的措施,分别为加壳、签名、代码混淆及对软件所含信息的校验,并深入介绍了每个措施的具体实现步骤及最基本的算法理论知识。由于每种保护措施都有自己的局限性,不能确保应用软件被逆向及植入恶意代码事件不会发生,因此本章进一步介绍了恶意软件的检测方法。检测方法包括:静态检测、动态检测及云端检测。此外,本章还介绍了部分检测方法基于Android平台的实现代码。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《移动智能终端安全》课件第14章.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|