基于信任链传递的APK重签名算法设计
2014-07-02于成丽郭燕慧钮心忻
于成丽,郭燕慧,钮心忻
(北京邮电大学 网络与交换技术国家重点实验室 信息安全中心,北京 100876)
基于信任链传递的APK重签名算法设计
于成丽,郭燕慧,钮心忻
(北京邮电大学 网络与交换技术国家重点实验室 信息安全中心,北京 100876)
基于信任链传递机制设计了一个Android应用安全管理系统上的APK重签名算法。算法利用官方私钥对通过安全检测的APK中开发者签名文件进行重签名以证明其通过官方安全认证,保证了被签名的APK文件信息的安全性、完整性和不可否认性。测试结果表明,对比重签名整个APK文件算法,算法能够高效加速文件的签名与验签进度,提升了用户应用安装体验;同时具备良好的灵活性和可扩展性,具有较高的应用价值和推广价值。
信任链传递;APK重签名;应用安全管理系统;SHA1算法;RSA算法
1 APK背景简介
伴随着3G,4G业务的商用,电视、PC、手机“三屏合一”的推进,智能电视被称是继PC、平板电脑和智能手机之后的第四屏,吸引了中外众多企业的目光。谷歌、苹果、联想、小米、乐视、TCL、爱奇艺等纷纷进入智能电视领域,各大第三方应用商店也将开始提供Android智能电视应用服务,智能电视将成为互联网公司一个重要的主战场,以Android系统为首的智能终端用户量日益大增。由于这些智能电视终端可植入大量各种各样的APP,这种开源的Android平台为开发者深度定制系统提供很好的机遇,然而部分被收买的开发者在定制ROM时肆意破解篡改发布的APK软件安装包,在APK编译后通过植入大量的木马病毒来窃取用户信息,给Android用户带来了严重的隐私安全和经济损失[1-3]。为保护用户的隐私安全,减少不必要的经济损失,官方安全机构联合应用商城及各大智能电视终端厂商期望建立并维护一套可监管的、健全的、标准化的APK应用安全管理平台。
近期,文献[4]先后通过静态提取APK权限、API调用序列、组件、资源以及APK结构构件特征向量,动态修改APK源码、重新编译成内核镜像文件并加载模拟器并实时监控APK软件安装包等方法,设计了一个对APK安装包动静态检测相结合的恶意APK安全检测方法。随后,易等人[5]提出了一套基于Web的Android应用安全管理系统,该系统允许Android用户在终端添加对应用证书的合法性检测来保证APK软件安装包的安全。借鉴上述动静态安全检测方法和思想,本文搭建了一套健全、可信的APK应用安全管理系统,其具体结构流程如图1所示。
从软件安全的角度考虑,通过对安全检测的重签名APK进行验签,判断它是否由“官方”安全认证并判定它不是被破解、被篡改过的重新签名打包“盗版软件”,确保Android用户安全使用APK软件安装包。如图1所示,由于上述系统上的重签名验签模块被内嵌到智能电视终端应用安装器中,提高验签效率,进而提升用户体验迫在眉睫。鉴于此,本文基于信任链传递机制设计了一个An⁃droid应用安全管理系统上高效安全的APK重签名算法。
图1 APK应用安全管理系统
2 关键技术分析
APK签名即Android应用签名,它是Android系统对APK包完整性和发布机构唯一性的校验机制。显然,An⁃droid用户希望安装被验签过的APK来有效地提升自身系统安全。然而,一些开发者为牟取利益,常常利用自签名私钥对篡改APK安装包、重新签名、开发类似的APK,而这些APK能够盗取用户隐私信息而获取利益。因此,在保护APK的版权和开发者利益且不影响APK正常安装运行的前提下,开发者可以合理利用APK签名算法等手段来限制开发恶意的APK。
APK签名机制的大致框架[6-7]如下:开发者在发布APK前,即要对一个未签名的Android应用程序Un⁃signedApp.Apk签名,首先执行一个signapk.jar包,然后分别 用 公钥 testkey.x509.pem和 私 钥 key.pk8对 Un⁃signedApp.Apk进行数字签名,并将公钥证书信息certifi⁃cate.pem打包在APK文件中,最后在安装应用时,系统对APK进行验签并提取APK的公钥信息,这样只有通过验签的UnsignedApp.Apk才允许被安装到系统智能终端。
另外,通过分析其他APK签名机制发现,签名安装好的APK包中会新增加1个含有3个开发者签名信息文件MANIFEST.MF,CERT.SF,CERT.RSA的目录文件“/ META-INF”。然而,通过跟踪Android系统验签源码发现,验签是通过验证3个签名信息文件来校验APK,并没有对META-INF目录做自校验处理,所以如果在ME⁃ TA-INF目录中添加其他文件并不会影响APK系统验签、安装、运行和更新。本文试图在签名过程中将重签名的APK文件独立存放到META-INF目录下,将验签模块内嵌在智能终端应用安装器中。对于计算整个APK文件重签名的技术,它们在签名和验签过程中都产生大量的复杂运算,极大降低了Android用户体验,因此,考虑改进并开发一种新型APK重签名算法。
为了更加高效合理地处理上述问题,本文将沈昌祥院士等人构建的信任链传递与度量模型[8-10]应用到本文APK重签名算法中。在可信计算体系中,信任链传递与度量模型主要被用来建立可信的操作平台。如图2所示,该模型首先需要创立一个可信根(CRTM),然后通过建立一条信任链可信计算BIOS代码的HASH值,不断将信任传递,经由操作系统装载器(OS Loader)到达可信的操作系统(OS),直到传递给可信平台(AP)进而建立可信的智能终端。下文设计的APK重签名算法仅对新目录META-INF下的3个签名信息文件MANIFEST.MF,CERT.SF,CERT.RSA进行重签名,对其他文件不作任何处理。本文重签名算法以Android系统原生签名为信任根,不断将信任向上传递到APK重签名流程,信任的传递通过完整性度量和验证实现。
图2 信任链传递与度量模型
3 APK重签名算法
3.1 签名过程
本文重签名算法的签名具体实现流程如图3所示。接下来,本文分两阶段详细阐述。
图3 APK重签名算法流程
1)APK系统签名阶段
由于Android系统允许用户使用自签名的私有证书对应用程序签名,于是在公布的源码包中为其提供了一个自带签名工具signapk.jar源码signApk.java。因此,APK系统签名阶段主要是在新增加目录“/META-INF”下依次生成MANIFEST.MF,CERT.SF,CERT.RSA等3个签名信息文件。
(1)生成MANIFEST.MF文件
通过调用addDigestsToManifest方法用SHA1数字签名算法[11]逐一对APK包中所有未签名文件计算摘要值,采用Base64对摘要值进行编码,将编码信息写入MANI⁃FEST.MF文件。
(2)生成CERT.SF文件
通过调用writeSignatureFile方法用SHA1-RSA算法[12]分别对MANIFEST.MF文件和MANIFEST.MF文件中的每个摘要项计算摘要值,将所有摘要计算结果写入CERT.SF文件。
(3)生成CERT.RSA文件
通过调用writeSignatureBlock方法对CERT.SF文件签名,将签名结果和输入的公钥证书打包成PKCS7格式写入CERT.RSA文件。
上述过程以信任链传递机制服务签名过程串行进行的,下一步骤的输入依赖上一步的输出,这种串联性为验签时逐层验证文件完整性提供了便利。
2)APK重签名阶段
顾名思义,APK重签名即在APK系统签名基础之上对其再一次签名,其具体流程如下(为保持流程的连贯性,以下序号接上文1)APK系统签名阶段):
(4)调用CalcalateMetaFileHash()利用SHA1算法对APK系统签名的3个签名信息文件MANIFEST.MF,CERT.SF、CERT.RSA重新计算摘要值;
(5)采用Base64手段对上述摘要值再次编码,调用signData()利用SHA1-RSA算法对编码值进行签名,将签名值写入sign.sig文件;
(6)提取公钥信息及官方签名机构信息写入到info. txt文件;
(7)将sign.sg和info.txt文件插入到APK中ME⁃TA-INF目录。
主要代码如下:
本算法借助于SHA1,RSA[13]等经典数字签名算法,不仅保证了被签名的APK文件信息的安全性、完整性和不可否认性,而且加速文件的签名与验签进度,提升了用户安全安装体验。
3.2 验签过程
类似地,验签过程也分两阶段展开。首先,Android系统使用“PackageInstaller”程序进行应用程序的安装时,利用安装器调用APK重签名验签模块对验签重签名算法;其次调用系统验签程序对Android系统签名逐一验签。其具体流程如下:
1)APK重签名验签阶段
(1)检查APK中是否包含第2.1节APK重签名中第(5)步生成的sign.sig文件。若包含继续下一步验证;若不包含,则验签过程失败,即签名失败。
(2)调用CalcalateMetaFileHash()利用SHA1算法分别对APK的META-INF文件中的签名信息文件MANI⁃FEST.MF,CERT.SF,CERT.RSA计算摘要值。
(3)调用signature.verify()对sign.sig文件签名值和公钥信息进行验签确认是否一致。
主要代码如下:
2)APK系统验签阶段(为保持流程的连贯性,以下步骤接上文1)APK重签名验签阶段)
(4)调用JarUtils.verifySignature()对第2.1节APK系统签名第(3)步的签名验证,验证CERT.RSA的签名是否确实从CERT.SF而来。
(5)调用JarVerifier.verify()对第2.1节APK系统签名第(2)步的摘要验证,验证CERT.SF中的摘要值是否确实MANIFEST.MF文件计算得到。
(6)调用VerifierEntry.verify()对第2.1节APK系统签名第(1)步的摘要验证,验证MANIFEST.MF中的摘要值是否确实由应用程序文件计算得到。
分析可见,上述验签过程通过官方公钥证书利用重签名信息文件sign.sig对MANIFEST.MF,CERT.SF,CERT. RSA这3个开发者签名文件进行验签,并根据验签结果对用户进行风险提示,用户自行选择是否继续安装应用。该过程不仅能够利用APK重签名保证开发者自身签名文件的完整性,而且APK继续安装时还利用开发者签名特性进一步验证APK中其他文件所有文件完整性,这是由于APK每一文件一旦被改动将会导致验签无法顺利通过。
4 测试分析
模拟真实电视用户装机环境,选取Android智能电视装机必备的10款不同APK应用(譬如安全工具、文件管理、购物、影音、生活等)为例进行测试,如表1所示(这里分别命名本文重签名算法和对APK所有文件重签名算法为算法1和算法2)。测试原型系统及实验平台配置中签名服务器(Linux虚拟机)为:CPU(3.29 GHz),RAM(4.00 Gbyte),OS(Ubuntu);验签移动智能终端:CPU(1.45 Hz),RAM(2.00 Gbyte),OS(Android 4.2)。
表1 Android智能电视中的10款不同APK应用测试结果
测试结果表明,Android用户利用本文重签名算法在安装Android智能电视中如上10款APK应用时平均所需等待时间仅为0.3 s,而采用算法2平均所需等待时间将达到1.68 s,接近是本算法的6倍,本算法极大地降低了Android用户APK应用安装体验满意度。这是由于算法2需要对APK文件中所有文件的进行签名,而本重签名算法仅需对META-INF目录下包含开发者签名信息的3个文件进行签名即可。
为使测试更具典型性和普遍性,本文进一步选择了55个0.2~306.1 Mbyte之间的APK文件作为测试对象,分别比较算法1和算法2的签名和验签所需时间,如图4~图5所示。由于智能终端容量所限,Android用户更倾向选择安装较小APK文件,这里较多地选取了文件大小为0~50 Mbyte之间的APK。测试分析表明,整体上看,无论是在签名过程还是验签过程,本文算法平均所需时间仅仅是算法2的1/5,即本文重签名算法在一定程度上加速了签名与验签进度,进一步提升Android用户APK应用安装体验满意度。
图4 签名时间与APK文件大小
图5 验签时间与APK文件大小
5 小结
基于信任链传递机制,本文设计了一个基于Android应用安全管理系统上高效安全的APK重签名算法,详细阐述了算法的签名、验签过程和代码实现过程。该算法利用官方私钥对通过安全检测的APK中META-INF目录下开发签名进行重签名以证明其通过官方安全认证,防止合法的APK被非法篡改,保证了被签名APK文件信息的安全性、完整性和不可否认性。测试结果表明,对比重签名整个APK文件,本文算法能够高效加速文件的签名与验签进度,提升了用户安全安装体验;此外,它具有高实用性、灵活性强和可扩展性等优点,具有较高的应用价值和推广价值。
然而,由于Android平台的开放性,当今未经官方认证APK应用,只进行风险提示,由Android用户选择是否继续安装,并不强行禁止用户安装。因此,对于那些未经官方认证的恶意APK安装检测问题是后续要考虑的课题。
[1]闫梅,彭新光.基于Android安全机制的权限检测系统[J].计算机工程与设计,2013(3):85-88.
[2] 李静华,慕德俊,杨鸣坤,等.Android恶意程序行为分析系统设计[J].北京邮电大学学报,2014(S1):104-107.
[3] 史立原,谭金蓉.安卓电视机芯智能升级的应用研究[J].电视技术,2014,38(6):58-61.
[4]胡文君,赵双,陶敬,等.一种针对Android平台恶意代码的检测方法及系统实现[J].西安交通大学学报,2013(10):37-43.
[5] 易明,叶佳,石瑀.基于Web的Android应用安全管理系统[J].计算机安全,2014(2):26-28.
[6] 孙伟.Android移动终端操作系统的安全分析[J].软件学报,2013(4):105-108.
[7]雷灵光,张中文,王跃武,等.Android系统代码签名验证机制的实现及安全性分析[J].信息网络安全,2012(8):61-63.
[8] 李晓勇,韩臻,沈昌祥.Windows环境下信任链传递及其性能分析[J].计算机研究与发展,2007(11):1889-1895.
[9] 于培.可信计算信任链传递机制的研究与设计[D].西安:西安电子科技大学,2011.
[10]司丽敏.可信计算平台信任链理论与技术研究[D].北京:北京工业大学,2011.
[11] 路而红,董秀则,李雪梅.现代密码算法工程[M].北京:清华大学出版社,2012.
[12] DANGRAD I.A design principle for hash functions[C]//Proc.Crypto LNCS,1989.[S.l.]:IEEE Press,1989:416-427.
[13]RIVESTR,SHAMIR A,ADLEMAN L.A method for obtaining digi⁃tal signatures and public-key crypto-systems[J].Communications of the ACM,1978(21):120-126.
Design of APK Repeating Signature Algorithm Based on Transfer of Trust Chain
YU Chengli,GUO Yanhui,NIU Xinxin
(Information Security Center,State Key Laboratory of Networking and Switching Technology,Beijing University of Posts and Telecommunications,Beijing 100876,China)
Based on the transfer of trust chain,an effective APK repeating signature algorithm is proposed on the application security management platform in this paper.The proposed algorithm signs the security detection APK file repeated by utilizing the official private key on the basis of the traditional APK signature algorithm,after signature APK file can be through the official safety certification.Thus it can be guaranteed security,integrity and nonrepudiation of the signature APK files.Results of the tests show that the proposed algorithm can speed up the rate of signature and verifier signature efficiently compared with the method of signing the whole APK file,and promote Android users’satisfaction when the APK application program is installed.Moreover,it has good flexibility,extensibility,higher application value and popularization value.
transfer of trust chain;APK repeating signature;application security management system;SHA1 algorithm;RSA algorithm
TP393.08
A
�� 雯
2014-08-08
【本文献信息】于成丽,郭燕慧,钮心忻.基于信任链传递的APK重签名算法设计[J].电视技术,2014,38(21).
国家自然科学基金青年基金项目(61302087);教育部博士点基金项目(20120005110017);国家科技支撑计划项目(2012ZX03002012;2012BAH06B02);北京邮电大学青年基金项目(20120005110017)
于成丽(1989—),硕士生,主研智能终端安全保障、移动互联网安全检测、安全加密、密码学、数字水印等;
郭燕慧(1974—),副教授,硕士生导师,主要从事内容安全、软件安全、机器学习、知识发现等研究;
钮心忻(1963—),教授,博士生导师,主要从事信息安全、信息隐藏与数字水印、数字内容及其安全、软件无线电等研究。