吴一鸣
摘要:Android生态系统未加限制地应用安装权限存在巨大安全隐患问题.对此提出修改Android系统源代码,实现比对apk格式文件包含的公钥信息、确认文件来源安装权限的安全提升方案。该方案充分满足Android生态系统对恶意代码防范的信息安全要求。操作系统定制功能更符合业务需求,可作为深度定制版本的移动智能操作系统。实践结果达到预期,未经认证的应用无法安装,提升了Android源码的安全性。
关键词Android系统;恶意代码;源码安全
DOI:10.11907/rjdk.201018 开放科学(资源服务)标识码(OSID):
中图分类号:TP309文献标识码:A 文章编号:1672-7800(2020)006-0253-04
0引言
Android生态系统应用安全隐患主要是恶意代码,根据《2019年上半年中国手机安全状况报告》,360互联网安全中心共截获Android平臺新增恶意程序样本约92.0万个,平均每天截获新增手机恶意程序样本约0.5万个,平均每天拦截手机恶意程序攻击约107.5万次。虽然危害方式及特点各异,但恶意代码均需以应用作为媒介在目标终端上运行,由此导致各种形式的网络安全破坏及非法操作。当前Android生态系统应用的安全性提升主要是通过权限机制及恶意代码检测实现。文献[2]分析了基于权限的Android应用程序安全性提升;文献[3]提出一个通用的恶意软件检测框架,该框架通过逆向工程从Android应用中提取(安全应用、受感染应用)特征信息并建立关键信息特征库。这两种方法较适合已知存在安全缺陷的应用,一旦未在应用安装阶段加以限制,则安全隐患会带人Android终端。
因此,未加限制的应用安装权限存在巨大安全隐患,通过源码优化的Android系统可有效提升Android终端的网络安全性,禁止安装未经认证的应用。本文通过研究Android源码,修改、优化相应功能模块,实现比对apk格式文件包含的公钥信息,确认文件来源安装权限,提升Android源码的安全性。
1 需求分析
Android生态系统应用恶意代码的安装分为两种方式:①直接方式。因终端安装权限未受限制,各类非法应用可以随意安装;②间接方式。终端被动捆绑静默安装恶意代码应用,比如采用与其它应用打包安装的方式植入终端。
当用户下载、安装并运行包含恶意代码的应用时,终端便会遭到攻击。针对上述问题,本文提出一个技术方案,在Android终端禁止未经认证的应用安装,只有通过安全模式认证的应用方能安装到终端上。该方案杜绝了终端使用者因有意或无意安装含有恶意代码的应用,有效提升了Android终端的安全性。
2 技术原理
Android生态系统应用认证模式采取签名机制,该机制确保应用apk格式安装文件的完整性。为实现完整性确认,对apk格式安装文件要作一个摘要处理,然后采用密码学理论的非对称加密,即用私钥对摘要内容进行加密,用公钥解密。摘要信息经此加解密过程如能对应一致,则表明apk格式安装文件完整无篡改。文件签字机制可保证apk格式文件在公开发布之时摘要信息覆盖的apk格式文件均无法被篡改。
Android生态系统应用签名机制如图1所示。
签名机制另一个技术优势是可利用公钥具备的验证属性作为确认安装文件来源的依据。本文方案技术原理:通过签名机制认证是否为指定的安装文件,同时确保文件完整性,决定该apk格式文件是否具有安装权限。
apk格式安装文件经解压后,可看到一个META-INFO文件夹。该文件夹实现签名机制,包含MANIFEST.MF、CERT.RSA和CERT.SF文件,这3个文件定义及功能如下:
(1)MANIFEST.MF:apk格式安装文件摘要信息。假设apk格式安装文件中某个文件被篡改,当应用安装验证时,篡改后的文件摘要信息与MANIFEST.MF的检验信息不同,则无安装权限。MANIFEST.MF文件的生成方式为遍历apk格式安装文件压缩包含的所有文件,对非文件夹以及非签名文件逐个采用SHA-1算法和BASE64编码生成摘要信息,这是Android应用安装文件签名验证过程的第一步。安装文件压缩包含的每个文件与MANIFEST.MF摘要文件信息要对应,修改某个压缩包文件内容,必须修改MANFEST.MF文件中对应的摘要值。
(2)CERT.SF:MANIFEST.MF摘要信息的签名文件。这是应用安装文件认证过程的第二步,是对第一步得到摘要文件的签名。对MANIFEST.MF文件本身及文件中的每一条内容再次采用SHA-1算法及BASE64编码后,转换内容写入CERT.SF文件中。CERT.SF文件记录的签名信息保证apk格式安装文件和MANIFEST.MF摘要文件同时符合完整性要求。
(3)CERT.RSA:保存公钥、加密算法以及CERT.SF非对称密文等信息。Android终端在进行验证时,使用公钥对不正确的签名密文进行解密,与CERT.SF文件不一致则不能通过检验。假设apk格式安装文件修改了程序内容,新生成的摘要信息能与内容对应起来,签名文件CERT.SF也能与摘要信息文件对应,但是由于篡改者没有私钥,因而也不能生成正确的CERT.RSA文件。
META-INFO文件夹各文件关系如图2所示。
3 功能实现
通过apk格式文件签名认证提升应用安全性,主要应用于以下3种场景:
(1)第三方认证。这种场景适用于杀毒安全软件或APP Market之类的软件下载市场,由可信赖的第三方应用负责指定应用安全问题。第三方收集样本并置于云端,对比应用安全样本,联网检查特定应用的安全认证结果。该场景缺点是无法将大量的应用签名数据放在移动设备本地,在无网络情况下无法实现功能,需要联网检测。
(2)应用自检测认证。在应用运行时,自身完成签名认证。授权的签名信息可以存放在apk格式文件内,也可存放于云端。该场景缺点是应用一旦被破解自检测功能便会失效。
(3)Android系统对安装应用进行签名机制认证,指定应用安装权限,该场景涉及Android系统源码修改。
综合比较上述3种场景可知场景(3)最优,因此本文方案的实现技术为修改Android源代码,通过比对apk格式文件包含的公钥,确认文件的安装权限。如果来源在允许安装权限范围内就进行安装,反之不予安装;再由签名机制确认apk格式安装文件完整无篡改,并触发之后的安装流程。本文技术方案流程如图3所示。
功能实现关键代码如下:
(1)在Android源码中,新增提取第三方应用签名信息的函数。
代码说明:通过传参"apk安装文件路径”至PackageParser类,实例化pp对象;pp对象调用collectCertificates方法后返回应用签名信息。
代码说明:以“X.509”静态模式将CertificateFactory类实例化为certFactory对象;通过传送签名信息至certFactory对象,实例化cert对象;cert对象调用getPublicKey方法后返回应用公钥信息。这两个函数可以提取第三方应用的公钥。
(2)验证应用签名信息公钥的安装权限。安装apk格式文件时调用自定义函数showUninstallAPKSignatures()和parseSignature(),验证应用签名信息公钥的安装权限。其中字符串“R.string.install_failed_invalid_signature”是新增的自定义字符串,例如“禁止安装,签名不符”。
代码说明:調用showUninstallAPKSignatures函数获取应用签名信息;调用parseSignature函数获取公钥信息;比对公钥,确认应用的安装权限。
4 开发验证
开发验证环境如表1所示。
对修改后的Android系统源码进行编译,在编译好的Android系统源码文件夹下命令行输入“emulator”,运行Android模拟器,模拟器启动,系统正常,如图4所示。
通过命令行adb指令"adb install weixin.apk”,将路径“~/android-2.3.7r1/out/host/linux-x86/bin/”下“weixin”(微信)应用的安装文件“weixin.apk”安装至模拟器。
返回安装状态信息“failed install‘weixin.apk:INSTALL_FAILED_INVALID_SIGNATURES',其中返回信息包含在PackageManager类中定义"INSTALL_FAILED_INVALID_SIGNATURES”的字段,模拟器Android终端禁止未经认证的应用app安装,验证成功,如图5所示。
5 结语
本文基于Android系统修改相应源代码,比对apk格式安装文件包含的公钥,确认应用安装权限,对应用层产生规则性的根本影响。研究成果充分满足Android生态系统对应用恶意代码防范的信息安全要求。后续与研究Android系统中安全认证应用的同步机制,确保安全认证应用列表及时更新,有效提升安全防护的实时性。