基于可信第三方的Android应用完整性验证模型
2015-02-10杨晓晖常思远江丽军
杨晓晖, 常思远, 江丽军, 王 虹
(河北大学 网络技术研究所 河北 保定 071002)
基于可信第三方的Android应用完整性验证模型
杨晓晖, 常思远, 江丽军, 王 虹
(河北大学 网络技术研究所 河北 保定 071002)
提出一个基于可信第三方的Android应用完整性验证模型.采用特征选择算法、 XML解析和反编译来获取Android系统完整性信息,终端通过与可信第三方进行验证来保证应用的完整性.对比实验结果表明了系统的有效性和可行性.
Android操作系统; 完整性验证; 可信第三方
0 引言
目前,移动终端的普及率越来越高,尤其是Android的普及率非常高,因而对于Android安全方面的研究也就成了热点之一.当前Android平台的开放性很高,任何人都可以自由发布自己的应用.但是这种以开发者为核心,依托于用户的粗粒度授权机制存在着诸多的安全问题和漏洞[1].Android内置的安全机制包括:权限、沙箱、签名[2].其中,沙箱机制继承于Linux,每个应用程序都运行在自己的进程中,Linux的自主访问控制机制保证了应用程序的文件对其他的应用是不可见的,因而是比较安全的[3].Android的签名可以是第三方的权威认证,也可以是作者的自签名,一般只是用于应用程序的升级,对于同一包名的应用只有采用同一数字证书的才会被认为是同一个应用[4].Android的权限机制漏洞比较严重,由于Android所有的权限信息和组件信息都保存在AndroidManifest.xml中,当应用调用了不在该清单文件中的权限时,Android自身的安全机制会发生错误,由此产生了混淆代理人攻击和共谋[5],除此之外还有粗粒度的授权机制,将权限的判断权交由一无所知的用户去判断,用户无法撤消权限,只能将程序卸载掉.本文提出一个基于可信第三方的Android应用完整性验证模型,采用特征选择算法、 XML解析和反编译来获取Android系统完整性信息.该系统在Android SDK的仿真器上进行了测试,实验结果表明了系统的有效性和可行性.
1 相关工作
由于Android自身的漏洞与开放性的关系,针对Android的攻击越来越多.国内外对于Android安全的研究也有不同的进展.文献[6]提出了一种内核级别的对所有加载代码度量的机制,但是这种机制不能保证Android系统初始环境的安全,而且需要对源代码进行一定的修改.文献[7]对Android包管理器进行修改,允许用户只给予程序部分权限就能正常运行程序或者能够动态地调整用户权限的授权和回收,但是可能会对系统性能造成一定的影响.文献[8]提出了一种入侵检测系统来对含有敏感权限的恶意程序进行检测.文献[9]提出通过对应用程序的源代码分析,判断程序是否遵循了最小权限的原则,从而判定程序的必要权限.文献[1]和[10]都提到了目前国内的Android生态圈比较混乱,大量第三方应用市场存在,这些应用市场为恶意应用的传播提供了途径,更有甚者将原始应用修改重新打包来收集用户数据.
2 系统结构
由于Android生态环境的特殊性,使其拥有大量的应用市场.这些应用市场不能够对提交的应用进行严格的审核,甚至有些应用市场在自己市场的应用中加入代码来收集用户信息等.针对这些问题,本文提出了一种基于可信第三方的Android应用完整性验证模型,整体结构如图1所示.
图1 整体结构
本模型的定义如下:
角色集U={M,T,C},包含应用市场,可信第三方,终端.
实体e是一个应用,有一个属性e.n表示该应用的包名,标示一个应用.
操作集λ={GetHash,GetApp,Verify}, 包含获取应用Hash,获取原始应用,可信第三方验证完整性.
(1)T→GetApp(ei.ni);可信第三方获取原始应用ei.
(2)T→GetHash(ei.ni);可信第三方记录原始应用ei的Hash信息和ei属性ni.
(3)M→GetApp(ej.nj);应用市场获取原始应用ej.
(4)C→GetApp(ej.nj);终端获取原始应用ej.
(5)C→GetHash(ej.nj);终端获取原始应用ej的Hash信息.
(6)T→Verify(Hash(ej.nj));终端将ej的Hash信息交给可信第三方验证.
(7) If(nj=ni) Then→(8);可信第三方根据n判断是否拥有该应用的信息,有的话进入(8),没有则结束.
(8) If(Hash(ei.ni))=Hash(ej.nj)
Thenei=ej
Elseei!=ej;
可信第三方根据Hash信息进行比较来判断完整性.当ei和ej的Hash摘要一致时,表明验证成功,应用的完整性没有遭到破坏;当ei和ej的Hash摘要不一致时,表明验证失败,应用的完整性遭到了破坏.
3 安全模型
原始应用与可信第三方的通信以及终端与可信第三方的通信是在不安全的网络环境候中,使用PKI/CA来实现通信的安全认证.
属性定义:Ce可信第三方的数字证书,PK可信第三方的公钥,SK可信第三方的私钥,DK对称加密的密钥,IMEI为手机的唯一标示码,T0为计数器,(IMEI+T0)MD5=摘要信息,R是随机字符串.
ei(原始应用)与T(可信第三方)的验证如图2所示.具体流程如下:
(1)ei与T通信,获得Ce;
(2)ei向CA验证Ce;
(3)ei将(R)加密(PK) 发送给T,要求使用SK加密;
(4)T使用SK解密得到R;
(5)T将(R)加密(SK)发送给ei;
(6)ei((R)加密(SK))解密(DK)得到R,R验证成功,说明服务器是安全的;
(7)ei(应用信息)加密(PK)发送给T;
(8)T将((应用信息)加密(PK))解密(SK),记录ei的Hash;
(9)T(记录完成消息)加密(SK)发送给ei;
(10)ei((记录完成消息)加密)解密(DK),完成ei的完整性注册.
图2 原始应用与可信第三方通信流程图
C(终端)与T(可信第三方)的验证如图3所示.具体流程如下:
(1)C与T通信,获得Ce;
(2)C向CA验证Ce;
(3)C将(R)加密(PK)发送给T,要求使用SK加密;
(4)T使用SK解密得到R;
(5)T将(R)加密(SK)发送给ei;
(6)C将((R)加密(SK))解密(DK)得到R,R验证成功,说明服务器是安全的;
(7)C将(DK)加密(PK)发送给T;
(8)T将((DK)加密(PK))解密(SK),得到DK;
(9)C将(IMEI)加密(DK)发送给T;
(10)C将(摘要信息+应用信息+T0)加密(DK)发送给T;
(11)T解密.
如果是T0次,则记录下这个IMEI关于这个应用的T1次访问,将T0变为T1;如果不是T0次,则查看当次的T与记录的T是否一致,不一致的话拒绝访问;
(12)T将ei的验证结果返还给用户.
(摘要信息+结果+计数器T1)加密(DK)→发送给终端;
(13)C解密,将摘要信息和本地的(IMEI+T0)MD5比较.
如果一致,将T0变为T1,向用户显示结果;如果不一致,则向可信第三方发出信息,将可信第三方的T1变回T0.
(14)使用DK加密,让T更改T1的值.
图3 终端与可信第三方通信流程图
4 应用信息的获取
4.1 可信第三方
可信第三方获取的原始应用是编译过的APK文件,分析其相应信息需要使用AXMLPrinter2反编译核心代码处理APK文件,从中获取应用的包名等信息.处理后的文件中的AndroidManifest.xml文件是Android的注册清单文件,应用的所有信息都包含在其中.在Manifest元素中的package属性的值就是该应用的包名,还有Android:versionCode属性表示应用的版本号,使用这两个属性值作为完整性判断的根据.
4.2 终端
由于Android的安全机制只有在安装时才会校验应用的签名,在安装之后如果程序发成了变化,Android也不会关心.此外由于一些应用会使用ADB静默安装[11],用户根本不知道该应用已经安装,所以需要在运行时实时提供应用的信息.
Android应用通过组件间通信(ICC)机制来检索数据和资源,ICC使用intent来封装信息.Android中的应用运行在一个任务栈中,栈底是正在运行的应用.使用包管理器来获得在栈底位置应用的intent,对其进行过滤,可获取该应用的包名、APK文件等,然后对这些信息进行Hash运算处理之后交由可信第三方进行安全验证.终端信息获取如图4所示.
图4 终端信息获取
5 安全性分析
使用GNY逻辑进行分析[12],下面列出了主要的推理规则.
公式:PistoldX表示P被告知了某消息X;PpossX表示P拥有X;PsaidX表示P曾经说过X;Pbelieves fresh(X)表示P相信X是新鲜的,在本会话前没有用过;Pbelieves reco(X)表示P相信X是可识别的;Pistold*X表示在当前会话中P没有发送过X,即X不是源自于P的.
推理规则:
表示对于一个主体P来说有以下条件:① P收到一个非源消息,该消息使用公钥对消息X和秘密s加密后的信息;② P拥有s和相应的私钥;③ P相信公钥k+是自己的公钥;④ P相信s是它和Q之间一个合适的秘密;⑤ P相信X和s的级联是可识别的;⑥ P相信X,s,k+中至少有一个是新鲜的.那么P就相信:Q说过X与s级联的消息;Q拥有k+;Q曾经说过使用k+对X和s加密后的密文.
由于终端和可信第三方与原始应用的可信第三方的安全模型是一致的,只有最终获取对等密钥之后做的验证不一样,那么将这一部分模型提取出来.使用E表示实体(原始应用,终端),T表示可信第三方,Ce可信第三方的数字证书,k+可信第三方的公钥,k-可信第三方的私钥,ket对称加密的密钥,R表示随机字符串,Info表示需要在可信第三方记录的信息,ni表示纳时.协议理想化如下:
M1.Eistold*Ce.
E被告知了一个非源的Ce;
初始假设S
Epossket
Epossk+
EpossCe
EpossR
EpossInfo
Tpossk-
Tpossk+
协议分析
消息1:
1.Eposs(Ce,k+) 根据M1,T1,P1
消息2:
3.Tposs(na,R) 根据M2,T1,T4,P1,S
4.Tbelievesfresh(na,R) 根据2,F1
5.TbelievesEsaid(na,R) 根据M2,3,4,I2,S
消息3:
8.EbelievesTposs(R,k-) 根据7,I5,S
消息4:
11.Tposs(nb,ket) 根据M4,T4,P1
12.Tbelievesfresh(nb,ket) 根据11,F1
13.TbelievesEsaid(nb,ket) 根据M4,11,12,I2,S
消息5:
15.Tposs(Info) 根据M5,14,T3,P1
根据M1,E获得了 (Ce,k+).根据M2,T获得了E在na时使用k+加密的R,根据F1,T相信R是新鲜的.根据I2,T相信R是由E发过来的.根据M3,E收到使用k-加密的R,解密得到R,E相信k+是T的公钥,因此E相信k+k-是E,T之间的一个合适的密钥.根据M4,T收到了使用k+加密的ket对称密钥,解密得到ket,T相信ket是新鲜的且是E发送的.T相信ket是E,T之间的一个合适的密钥.E使用ket来加密向T发送的需要T验证的信息.
6 仿真实验
测试环境为CPU:Inteli5-4570 3.2GHz,内存8GB,操作系统Win7 64位;仿真器:GoogleSDK模拟器;仿真器RAM: 256MB;SD卡容量:200MB;AndroidSDK:2.3.3.
6.1 功能性验证
准备一些检测用的应用,在可信第三方验证过后被篡改的,没有经过可信第三方验证过的和经过可信第三方验证的.图5显示了test1与可信第三方验证之后,返回的验证成功信息.图6和图7显示了test2,test3与可信第三方验证后,可信第三方返回的错误信息.图8显示了可信第三方收到相关信息,并返回了值.表1说明了可信第三方返回值的含义.
图5 test1验证成功
图6 test2验证失败
图7 test3验证失败
图8 可信第三方收到的信息
6.2 安全性验证
准备100个应用,其中有10个没有在可信第三方记录信息,15个在可信第三方记录信息后篡改部分内容,实验结果见表2.结果表明,本模型能够将所有无记录或者被篡改的应用检验出来,但是对于正常的应用可能会由于网络延迟或者终端内存耗尽导致任务栈部分任务消失,造成无法检测出该应用,这些无法检测出的应用被标记成无记录的应用.
表1 可信第三方返回值Tab.1 The returned values from trusted third party
表2 安全性验证结果Tab.2 The results of security verification
6.3 性能测试
文献[4]提出了一种基于应用权限的安全检测机制,该机制通过对应用敏感权限检测来判断应用的安全.该机制需要用户一直运行着检测程序,对内存的占用较大,而本文提出的模型只在应用初次使用时去获取相关信息并与可信第三方验证,第1次的开销较大,但之后的开销要小得多.此外本文模型将应用的安全性检测交给了可信第三方进行,而文献[4]的机制只是由本地进行检测,其及时性与安全性相对较差.内存消耗对比实验结果见表3.
表3 内存消耗对比Tab.3 Memory consumption comparison
7 结论
通过对Android安全漏洞以及完整性验证的研究,提出了一种适用于Android的应用完整性验证模型.对在传播过程中可能遭到恶意篡改的问题,提出了较好解决方法.讨论了基于可信第三方的应用完整性验证模型,该系统在Android SDK的仿真器上进行了测试,结果表明该系统可以有效地实现所提出的功能.
[1] 张玉清,王凯,杨欢,等. Android安全综述[J]. 计算机研究与发展,2014,51(7):1385-1396.
[2] 鲍可进,彭钊. 一种扩展的Android应用权限管理模型[J]. 计算机工程,2012,38(18):57-60.
[3] 符易阳,周丹平.Android安全机制分析[C]//第26次全国计算机安全学术交流会.武夷山,2011:23-25.
[4] 闫梅,彭新光.基于Android安全机制的权限检测系统[J].计算机工程与设计,2013,34(3):854-858.
[5] Enck W, Octeau D, McDaniel P,et al. A study of Android application security[C]//Proceedings of the 20th USENIX Security Symposium.Berkeley,2011:64-76.
[6] Nauman M, Khan S, Zhang Xinwen,et al.Beyond kernel-level integrity measurement:enabling remote attestation for the Android platform[C]//Proceedings of the 3rd International Conference on Trust and Trustworthy Computing. Berlin, 2010:1-15.
[7] Enck W,Ongtang M,McDaniel P.On lightweight mobile phone application certification[C]//ACM Conference on Computer and Communications Security.New York,2009:235-245.
[8] 廖明华,郑力明. Android安全机制分析与解决方案初探[J]. 科学技术与工程,2011,11(26):6350-6355.
[9] Vidas T,Christin N,Cranor L.Curbing Android permission creep[C]//Proceedings of the Web 2.0 Security and Privacy Workshop.Oakland, 2011:91-96.
[10]蒋绍林,王金双,张涛,等. Android安全研究综述[J]. 计算机应用与软件,2012,29(10):205-210.
[11]刘昌平,范明钰,王光卫,等. Android手机的轻量级访问控制[J]. 计算机应用研究,2010,27(7):2611-2613.
[12]雷新峰,薛锐.密码协议分析的逻辑方法[M]. 北京:科学出版社, 2013:144-163.
(责任编辑:孔 薇)
Android Application Integrity Verification Model Based on Trusted Third Party
YANG Xiao-hui, CHANG Si-yuan, JIANG Li-jun, WANG Hong
(InstituteofNetworkTechnology,HebeiUniversity,Baoding071002,China)
The Android application integrity verification model based on trusted third party was established. Feature selection algorithm, XML parsing and decompiling were used to acquire the information of the Android application. The integrity of the applications was ensured by the validation from trusted third party. The experimental results verified the feasibility and validity of the system.
Android OS; integrity verification; the trusted third party
2014-12-29
国家自然科学基金资助项目,编号61170254;国家科技支撑计划项目,编号2013BAK07B04;河北省自然科学基金资助项目,编号F2014201152.
杨晓晖(1975-),男,河北邢台人,教授,博士,主要从事分布计算与信息安全研究,E-mail:2381989@qq.com;通讯作者:常思远(1988-),男,河南许昌人,硕士研究生,主要从事信息安全研究,E-mail:6348348@qq.com.
杨晓晖,常思远,江丽军,等. 基于可信第三方的Android应用完整性验证模型[J].郑州大学学报:理学版,2015,47(2):59-67.
TP309
A
1671-6841(2015)02-0059-09
10.3969/j.issn.1671-6841.2015.02.013