基于Fuzzy-IBE的Android防恶意代码注入方案

2016-03-15 02:15张悦,郑东,张应辉
桂林电子科技大学学报 2016年1期



基于Fuzzy-IBE的Android防恶意代码注入方案

引文格式: 张悦,郑东,张应辉.基于Fuzzy-IBE的Android防恶意代码注入方案[J].桂林电子科技大学学报,2016,36(1):39-43.

张悦,郑东,张应辉

(西安邮电大学 无线网络安全技术国家工程实验室,西安710121)

摘要:为了防范Android恶意代码的注入,提升APK的安全性,抵御对其认证文件的碰撞攻击,基于Fuzzy-IBE设计了一种Android防恶意代码注入方案。该方案利用APK自身的多个资源文件作为APK的属性信息,并将属性进行Hash处理,映射为Fuzzy-IBE的解密私钥,防止了恶意攻击者对APK的注入,同时优化了应用程序的内部结构,减少了应用的体积。实验结果表明,该方案对于防止恶意代码注入是有效的。

关键词:智能移动端;Fuzzy-IBE;Android;恶意代码注入;Android签名

时至今日,Android系统日趋鼎盛,由其衍生的操作系统百花齐放,随之而来的是数不胜数的应用程序。除了Google公司提供给用户的基础应用,各个硬件厂商也定制了个性化的应用,与自己的硬件捆绑销售;另一方面,第三方应用市场也不愿错过这样的好机会,纷纷开发出自己的应用平台,上架自己的应用。应用市场里有着如此数量庞大、琳琅满目的应用,却缺乏规范化、统一的管理,使得恶意软件有了可乘之机,用户稍不小心,就会“中招”,造成隐私泄露和经济损失。恶意软件常用的伎俩之一就是利用反编译技术[1-2]将其本身注入[3]到正常的应用中,致使应用感染病毒。用户安装了带有病毒的应用之后,程序仍能执行其本来的功能,但恶意软件却悄悄地开了后门,做着危害用户权益的行为。

数字签名[4]是一种防止数据伪造、篡改的方案,包括签名算法和验证算法。一般来说,数据发布者用自己的私钥对数据进行签名,数据接收者用发布者的公钥来验证接收数据的签名,以确保数据的来源可信。Android系统内置了签名验证机制,未签名的安装包(APK)无法安装到手机上[5]。但Android系统的签名机制还不完善[6],首先其依赖于RSA的安全性,而随着科技的进步,针对RSA的攻击方法越来越多;其次,APK需要耗费额外的存储资源进行验证文件的存储,并且随着多次Hash和签名的进行,Hash值并非与资源文件直接关联,而是与资源文件的Hash值关联,这样难免会使得安全性在一定程度上打折扣。鉴于此,设计了一种基于Fuzzy-IBE的防恶意代码注入方案,可有效地防止恶意代码的注入,提升APK的安全性,同时优化了APK结构,减小了APK的体积。

1知识铺垫

1.1安卓安全性相关知识

1.1.1安卓APK包解析

APK其实际是一个压缩格式的文件。解压后的APK如图1所示。

图1 APK解压Fig.1 APK decompression

现对重要的文件目录及文件作简单说明:

1)assets为外部资源目录,包含程序运行过程中可能用到的外部引用;

2)lib为外部引入的资源库,如开源框架jar文件,NDK编译的so库;

3)META-INF目录存放检验相关文件,是安卓签名保障的核心所在;

4)res为资源文件目录,其中包括图片、色彩描述、尺寸映射描述信息;

5)AndroidManifest.xml为程序全局配置文件;

6)classes.dex为编译后的二进制资源文件,程序的代码编译集成在此文件。

通过AndroidManifest.xml文件中Application节点下的PackageName可识别APK。如在安装APK的PackageInstaller时,会对APK的包名进行检查,包名相同的2个程序会被认作同一个APK。实际上,手机不会校验APK内部结构以及资源上的差异,而仅仅对APK的包名进行标识,以确定是否为同一个APK。

1.1.2安卓签名机制

Android应用的签名机制,主要目的是对APK的完整性和唯一性进行校验。签名过程如下:

1)将APK中所有的资源文件进行SHA-1运算,并将得到的摘要用Base64进行格式规整,写入MANIFEST.MF文件,一同写入的还有应用程序版本、签名版本等信息。

2)将得到的MANIFEST.MF文件用RSA-SHA-1算法进行Hash,同时将MANIFEST.MF文件中的每个消息摘要再进行一次摘要,写入CERT.SF文件。

3)用开发者私钥将CERT.SF文件签名,与公钥一起写入CERT.RSA文件。安装时,验证签名的过程则相反,首先从CERT.RSA文件中获取公钥信息,并验证签名信息,若验证成功,继续对包内所含文件进行Hash,然后从相应的文件中提取Hash值和二次Hash值,如全部相同,则允许安装,否则终止安装。

这种验证方式一定程度上能保证安装包的可靠性。因为APK的本质是一个压缩文件包,若将APK改名为ZIP,便可用常用的解压软件将APK解压缩,若无签名机制的保护,则任何人都可以随意更改其中的资源文件和代码段。但此签名方式存在以下缺点:

1)核心算法采用的是RSA算法。其作为一个20世纪70年代提出的算法,随着科技的发展,计算能力的不断提升,已失去其安全性。虽然最直接的攻击方法是分解大整数,但可利用效率更高的算法去攻击RSA算法,其中具有代表性的是差分算法[7]。

2)过程繁琐且存在安全隐患。需对资源文件进行2次Hash后才能签名,这对计算资源造成了一定程度的浪费。更重要的是,在Hash计算过程中,可能存在安全隐患,已有很多针对Hash函数的攻击算法,如生日攻击[8]。但目前大多数的算法攻击,只是一种碰撞攻击,文献[9]阐述了Android签名主要的Hash算法SHA-1的碰撞攻击。若原文件Hash值为H(A),攻击者将含有恶意意图的文件进行一定的加工,使其Hash值也为H(A),可达到伪造证书、恶意代码植入、欺骗签名的目的。根据碰撞攻击的原理,恶意攻击者替换资源文件后,若能基于伪造文件的Hash值,通过添加冗余无用的资源文件的方法,对原来的CERT.SF文件的Hash值作一次碰撞,重新生成一个CERT.SF文件,使得该文件的Hash值与原文件的H(A)相同,便可达到欺骗系统校验的目的。

3)该方式使用了MANIFEST.MF、CERT.SF、CERT.RSA三个文件用于保存验证信息,对存储资源造成了一定的浪费。

1.1.3安卓恶意代码注入

恶意代码注入的原理如下:

1)准备好一段恶意代码,这段恶意代码可以仅仅是一个模块,也可以是一个具有完整流程的恶意应用。

2)将一个正常的APK反编译处理成smali代码,或将恶意代码模块进行反编译,得到smali代码。smali代码相当于java代码与.dex可执行文件之间的中间代码。

3)通过机器分析后,得到合适的注入点,将恶意代码模块的启动点插入到注入点,并进行编译,编译成功后,进行签名。恶意代码注入过程如图2所示。

图2 恶意代码注入过程Fig.2 The injection process of malicious code

图3为Eclipse开发软件中DDMS工具显示的正常应用注入成功的后台日志截图。通过恶意代码注入后,游戏“愤怒的小鸟”变成了一款可以向指定服务器汇报短信内容的恶意应用。

图3 正常应用注入成功的后台日志Fig.3 Running log after injection

1.2Fuzzy-IBE介绍

2005年Sahai等[10]首次提出了模糊身份加密(fuzzy identity-based encryption,简称Fuzzy-IBE)的概念,证明了其安全性,并对应用场景做了相应的描述。Fuzzy-IBE要求用密钥生成算法对一个集合中的元素(该集合中每个元素关联一个属性)生成公私钥对,然后将私钥通过保密信道发送给用户,用户间传递信息时,首先分享者根据接收者的属性对信息进行加密,为了确保接收者可以成功解密,加密选择的属性与接收者本身的属性交集要大于一个指定的阀值,若未达到该阀值,则不能解密。

设G1为一个以素数p为阶的双线性群[11],g为生成元,e:G1×G2→G2是一个双线性运算:

为拉格朗日参数,其中S为素数的集合。

具体算法描述如下:

1)初始化。主要用于生成系统主密钥,随机选择ti作为属性的私钥,对应的公钥为

2)私钥生成。已知属性集合ω⊆U,任意选择一个d-1维多项式q,使得q(0)=y,可得用户的私钥为Di(i∈ω)=gq(i)/ti。

4)解密。若|ω∩ω′|≥d,则利用拉格朗日插值公式可计算:

2方案设计

方案的核心思想是将APK中的每个资源看作APK的属性,用属性加密APK的核心校验数据。该方案共有3个参与者。

1)系统。主要职责是生成主要的参数及属性对应的私钥,校验APK的合法性。

2)开发者。向系统提交自己的APK,证明自己是该APK的开发者。

3)用户。提交APK的属性给系统,系统向其返回属性对应私钥。用户得到私钥后,解密对应的APK,加载至系统。

2.1方案描述

1)初始化开发者与系统的管理密钥。由开发者和系统共同执行,开发者生成一个APK,递交给系统,系统随机生成一个管理密钥y,并公开系统公钥Y=e(g,g)y。

2)属性生成。该算法由用户或者开发者执行,用于生成APK对应的属性参数。APK中所有的资源文件和配置文件都可看作该APK的属性,所以对所有APK内部文件(除了classes.dex文件之外的资源文件和配置文件),进行一次Hash计算,并将计算所得的Hash值作一次数值上的转换。假设除去classes.dex文件之外的文件共有n个,Hash算法会将任意长度的二进制值映射为固定长度的较小二进制值,通过二进制转十进制的方法,把该二进制值转换为十进制数字,用ti,i∈n表示,其中n为所有属性的个数。

3)APK加密。由开发者和系统协同执行。若是第1次加密APK,开发者会选择随机值s,并将其保存。s将作为开发者的口令,用以向系统证明身份。开发者将该s与APK一同发给系统,系统中有一个数据库,保存着APK的包名和对应开发者的s。系统首先会进行一次检索操作,检索APK的包名,因APK的包名是唯一确定的,系统检索到该APK包名后,会进一步对比开发者提供的s与包名对应的s是否相同,若相同则允许加密,否则,拒绝对APK进行加密。在APK所有属性中,classes.dex文件包含了所有的代码段,无疑是最重要的属性之一,因此选择该文件作为被加密的源文件。将classes.dex文件用M表示,系统结合生成的属性,将ti作

映射后所得的密钥对M作属性加密,加密后的结果为:

4)验证阶段。由系统与用户合作执行。用户调用生成的APK属性,同时向系统请求解密私钥。系统执行如下操作:任意选择一个n-1维多项式q,使得q(0)=y,得到私钥Di(i∈n)=gq(i)/ti,将APK的所有属性生成对应的私钥;然后将私钥返回给用户,用户根据所得的私钥对APK进行解密,若解密后成功加载,证明该APK未被篡改,也未被注入。解密过程同Fuzzy-IBE。

2.2方案的攻击情况分析

1)替换的资源不包括classes.dex文件。在传输过程中,若有用户对APK进行拆包操作,并替换了某些文件,属性值就会相应地减少,根据Fuzzy-IBE中的解密公式,将不能用拉格朗日插值公式对其进行恢复,因而无法解密。

2)替换的资源包括classes.dex文件。若恶意开发者替换了包括classes.dex文件的所有资源,然后要对APK进行一次加密操作,就必须知道开发者的口令s,因为每个APK的包名与s唯一对应,若要开发一个包名相同的APK包,必须拥有s,否则,会提示加密操作失败。此时,该恶意开发者只能重新选择一个s′,其开发的应用便完全成了另外一个应用,不能达到注入的目的。

3)恶意开发者冒充用户,若要获取开发者的s,可以对应用进行解密操作,但整个解密过程无法获知s。虽然密文M和返回的私钥都包含s信息,但根据双线性Diffie-Hellman假设,无法从这2个信息中恢复出s。

4)系统开发者要对APK进行功能上的新增,只需向系统提供自身的口令s,便可对APK进行加密操作,重新生成功能新增的APK。

3方案的优势

1)采用Fuzzy-IBE替换了原方案中的RSA,而目前针对RSA还没有好的攻击方案,这从理论上保证了其安全性。

2)增加了碰撞攻击的实施难度。若APK中的某个资源被替换,恶意开发者就必须通过碰撞来模拟一个资源。相应地,若开发者替换的资源越多,攻击者就必须付出更多的时间和精力来构建相同的Hash碰撞,从而增大了碰撞攻击的实施难度。

3)采用APK本身资源的Hash作为加密密钥,不必额外占用数个文件保存APK的认证信息,使得APK结构更为简单,体积更为小巧。

4)有效地防止了攻击者恶意代码的注入。

4安全性分析

由于该方案的核心是对Fuzzy-IBE的变形操作,算法的安全性依赖于Fuzzy-IBE的安全性,而Fuzzy-IBE在选择身份攻击模型下被证明是安全的[10]。选择身份攻击模型要求攻击者在攻击之前就确定被挑战的身份。对于此类算法的安全性分析,一般由一个思维游戏来进行。

该思维游戏将该方案规约到改进的双线性Diffie-Hellman(modified bilinear Diffie-Hellman,简称MBDH)数学难题上。游戏有攻击者、模拟者和挑战者3个参与者,假如攻击者可以在选择身份模型下,攻破挑战者的方案,则模拟者就可以利用攻击者在攻击过程中得到的信息,以不可忽略的概率解决MBDH数学难题。Fuzzy-IBE在该选择身份攻击下的安全模型表述如下。

1)初始化。攻击者申明自己要攻击的身份,记为α*。

2)建立阶段。挑战者运行建立阶段的算法,告诉攻击者公开参数和系统管理密钥。

4)挑战。攻击者传递2个等长的挑战明文m0、m1给挑战者,让挑战者用模糊身份α*对2个明文中的1个进行加密,加密后的密文记为cb,b∈{0,1}。

5)阶段二。重复阶段一。

6)猜测。攻击者对加密后的密文进行猜测,输出猜测的结果b′∈{0,1},若b=b′,即攻击者通过密文猜对其是由哪个明文加密所得,攻击者获胜。

在选择身份攻击模型下,文献[10]证明了算法是安全的,即攻击者在概率多项式时间内,赢得此思维游戏的概率很小,可以忽略。

5结束语

利用Fuzzy-IBE设计了一种Android防恶意代码注入方案。该方案可有效地防止恶意代码的注入,并使得应用结构更为简单,体积更为小巧。但该方案仍存在一些缺陷:在开发者与系统交互信息时,s与APK是以明文的方式直接提交到系统,在这个过程中,若有恶意开发者对信息进行窃听,并获取开发者的身份标识s,就有可能冒充开发者对APK进行注入,而且当开发者每次生成一个APK时,都要向系统提供该s。如何保障s在传递过程中的安全性,尽可能减少s的传递次数,是今后研究的重点。

参考文献:

[1]陈凯明,刘宗田.反编译研究现状及其进展[J].计算机科学,2001,28(5):113-115.

[2]徐尤华,熊传玉.Android应用的反编译[J].电脑与信息技术,2012,20(1):50-51.

[3]黄超,王菲飞.Android应用程序的恶意代码静态注入[J].保密科学技术,2014(1):41-45.

[4]郑东,赵庆兰,张应辉.密码学综述[J].西安邮电大学学报,2013,18(6):1-10.

[5]雷灵光,张中文,王跃武,等.Android系统代码签名验证机制的实现及安全性分析[J].信息网络安全,2012(8):61-63.

[6]吴文焕.Android应用程序数字签名机制研究[J].软件,2014(2):109-110.

[7]田军舰,寇应展,陈财森,等.RSA公钥密码算法差分计时攻击研究[J].计算机工程,2011,37(5):146-148.

[8]刘美,王玉柱,何定养,等.SHA-512算法及其基于生日攻击的安全性分析[J].后勤工程学院学报,2010,26(3):92-96.

[9]WANG X,YIN Y L,YU H.Finding collisions in the full SHA-1[C]//Proceedings of the 25th Annual International Conference on Advances in Cryptology.Heidelberg:Springer,2005:17-36.

[10]SAHAI A,WATERS B.Fuzzy Identity-Based Encryption[M]//Advances in Cryptology-EUROCRYPT 2005.Heidelberg:Springer,2005:457-473.

[11]王海艳,徐明明.基于双线性映射和属性证书的远程证明方案[J].计算机技术与发展,2012,22(1):233-237.

编辑:张所滨

An Android anti-malware injection scheme based on Fuzzy-IBE

ZHANG Yue, ZHENG Dong, ZHANG Yinghui

(National Engineering Laboratory for Wireless Security, Xi’an University of Posts and Telecommunications, Xi’an 710121, China)

Abstract:In order to prevent the injection of Android malicious code, improve the security of APK and resist the impact of the authentication file, An Android anti-malware injection scheme based on fuzzy-IBE is designed, the scheme uses APK’s own multiple resource file as APK attribute information, the property is processed by Hash and mapped into Fuzzy-IBE decryption key for preventing the application of malicious attackers effectively. The internal structure of the application is optimized, the size of the application is reduced. The experimental results show that the scheme is effective for anti-malware injection.

Key words:mobile intelligent terminal; Fuzzy-IBE; Android; malware injection; digital signature of Android

中图分类号:TP309.2

文献标志码:A

文章编号:1673-808X(2016)01-0039-05

通信作者:郑东(1964-),男,山西翼城人,教授,博士,研究方向为密码学、云存储安全。E-mail:zhengdong@xupt.edu.cn

基金项目:国家自然科学基金(61272037,61402366,61472472);陕西省自然科学基础研究计划(2013JZ020,2015JQ6236);陕西省教育厅科研计划(15JK1686);西安邮电大学研究生创新基金(CXL2014-04)

收稿日期:2015-09-11