一种Android环境下应用程序启动中代码签名验证的方法和系统的制作方法

文档序号:8361753阅读:499来源:国知局
一种Android环境下应用程序启动中代码签名验证的方法和系统的制作方法
【技术领域】
[0001]本发明涉及信息安全领域,尤其涉及一种Android环境下应用程序启动中代码签名验证的方法和系统。
【背景技术】
[0002]根据《手机安全状况报告》2014年第二季度Android平台新增恶意程序样本超过84万个,其中新增恶意程序样本约62.5万个,同比增长381 %,环比增长191 %,这表明恶意软件的增势仍然迅猛,互联网移动安全正面临严峻考验。报告显示,2014年上半年,Android用户感染恶意程序7976万人次,其中二季度感染用户4185万人次,较2013年二季度同比增长了 94.8%,平均每天恶意程序的感染量达到了 46万人次。
[0003]研宄表明,99%的安卓设备存在重大安全漏洞:该漏洞允许黑客在不更改安卓应用程序数字签名的情况下,向应用程序中植入恶意代码,安全专家将该漏洞定义为“安卓系统签名漏洞”。黑客可以利用安卓系统签名漏洞完成任意想要完成的任务:比如窃取手机隐私?目息、完全控制用户手机等。
[0004]Android系统的程序在运行过程中,只对应用程序进行时间戳和路径匹配验证,这种验证方法使系统存在安全隐患,可能会被黑客或被恶意软件利用,使攻击代码可以绕过签名验证机制实施攻击,具体攻击方法的如下所述:
[0005]1.攻击者在应用商店/应用程序下载平台,对应用程序进行修改,可以植入恶意软件,或者修改软件中的广告等上行链接到指点恶意网站,或其他获得系统控制权的有效载荷(payload)植入完成后重新自签名。
[0006]2.攻击者利用程序漏洞,对程序进行修改,可以植入恶意代码,或者修改软件中的广告等上彳丁链接到指点恶意网站,或其他获得系统控制权的有效载荷(payload),完成后重新自签名。
[0007]3.Android应用程序执行代码是从应用程序文件提取并优化得到,在执行代码被删除后,重新生成这个优化代码时不对应用程序文件进行签名验证,攻击者可以利用这个缺陷重新构造执行代码,对程序进行修改,可以植入恶意代码,或者修改软件中的广告等上行链接到指点恶意网站,或其他获得系统控制权的有效载荷(payload),完成后重新自签名。
[0008]4.作为验证判断标准的数据容易伪造,应用程序的时间戳和路径信息在/data/system/packages, xml文件中,可以手动修改时间戳和路径信息,与恶意程序一致,攻击者可以利用这个缺陷实施攻击,对程序进行修改,可以植入恶意代码,或者修改软件中的广告等上行链接到指点恶意网站,或其他获得系统控制权的有效载荷(payload)然后修改时间戳和路径信息绕开现有的启动验证。
[0009]5.攻击者利用rootkit工具控制了目标Andr1d智能终端,在终端上对程序进行修改,对程序进行修改,可以植入恶意代码,或者修改软件中的广告等上行链接到指点恶意网站,或其他获得系统控制权的有效载荷(payload),完成后重新自签名。

【发明内容】

[0010]本发明所要解决的技术问题是提供一种Android环境下应用程序启动中代码签名验证的方法和系统,用以防范Android环境下应用程序遭到攻击,确保应用程序的安全。
[0011]本发明解决上述技术问题的技术方案如下:一种Android环境下应用程序启动中代码签名验证的方法,包括以下步骤,
[0012]步骤SI,在Android智能终端中创建证书签发机构列表,所述证书签发机构列表存储一个或多个可信任的应用程序的代码签名证书签发机构;
[0013]步骤S2,启动应用程序,在应用程序启动的同时验证该应用程序的代码签名证书签发机构是否在所述证书签发机构列表中,若不在,则代码签名验证不通过,应用程序无法启动或中止运行并退出,此时代码签名验证结束;若在,则执行步骤S3 ;
[0014]步骤S3,验证应用程序的证书签发机构的根证书的有效性,若无效,则代码签名验证不通过,应用程序无法启动或中止运行并退出,此时代码签名验证结束;若有效,则执行步骤S4 ;
[0015]步骤S4,验证应用程序代码签名证书的签名的有效性,若有效,则应用程序正常启动并运行,若无效,则代码签名验证不通过,应用程序无法启动或中止运行并退出,此时代码签名验证结束。
[0016]在上述技术方案的基础上,本发明还可以做如下改进。
[0017]进一步地,所述步骤S3包括以下步骤,
[0018]步骤S31,使用应用程序的代码签名证书签发机构CA的公匙来拆封代码的签名证书,如果可以拆封,则执行步骤S32 ;如果不能拆封,则代码签名验证不通过,应用程序无法启动或中止运行并退出,此时代码签名验证结束;
[0019]步骤S32,验证代码签名证书中的Authority Key Identif ier扩展项CertIssuer,是否与CA证书中签发此证书的CA名称相匹配;若匹配,则执行步骤4,若不匹配,则代码签名验证不通过,应用程序无法启动或中止运行并退出,此时代码签名验证结束。
[0020]进一步地,所述步骤S4包括以下步骤,
[0021]步骤S41,用应用程序的代码签名证书的公钥解密代码的数字签名,导出数字摘要;
[0022]步骤S42,对代码原文作哈希算法得出一个新的数字摘要;
[0023]步骤S43,将步骤S41和S42的两个数字摘要的哈希值进行结果比较,结果相同,则签名得到验证,应用程序可以正常启动并运行,否则签名无效,代码签名验证不通过,应用程序无法启动或中止运行并退出,此时代码签名验证结束。
[0024]进一步地,根据应用程序的代码签名验证的安全级别,执行步骤S4前能增加序列号验证和/或有效期验证和/或证书作废止列表查询和/或证书使用策略的认证,验证流程和协议均遵循X.509v3标准。
[0025]进一步地,所述Android环境下应用程序启动中代码签名验证的方法,采用后台验证模式。
[0026]本发明解决上述技术问题的技术方案如下:一种Android环境下应用程序启动中代码签名验证的系统,包括证书签发机构列表模块、证书签发机构验证模块、根证书验证模块和签名证书验证模块,
[0027]所述证书签发机构列表模块用于存储一个或多个可信任的应用程序的代码签名证书签发机构;
[0028]所述证书签发机构验证模块用于验证应用程序的代码签名证书签发机构是否存在于所述书签发机构列表模块;
[0029]所述根证书验证模块用于验证应用程序的证书签发机构的根证书的有效性;
[0030]所述签名证书验证模块用于验证应用程序的代码签名证书的签名的有效性。
[0031]在上述技术方案的基础上,本发明还可以做如下改进。
[0032]进一步地,所述根证书验证模块包括公匙拆封验证单元和扩展项验证单元,
[0033]所述公匙拆封验证单元用于验证应用程序的代码签名证书签发机构CA的公匙是否能够拆封代码的签名证书;
[0034]所述扩展项验证单元用于验证代码签名证书中的Authority Key Identifier扩展项Cert Issuer,是否与CA证书中签发此证书的CA名称相匹配。
[0035]进一步地,所述签名证书验证模块包括证书解密摘要单元、哈希函数摘要生成单元以及摘要比较单元,
[0036]所述证书解密摘要单元用于使用应用程序的代码签名证书的公钥解密代码的数字签名,导出数字摘要;
[0037]所述哈希函数摘要生成单元用于对代码原文作哈希算法得出一个新的数字摘要;
[0038]所述摘要比较单元用于将所述证书解密摘要单元和所述哈希函数摘要生成单元生成的两个数字摘要的哈希值进行结果比较。
[0039]进一步地,根据应用程序代码签名验证的安全级别,增加序列号验证和/或有效期验证和/或证书作废止列表查询和/或证书使用策略的认证,验证流程和协议均遵循X.509v3 标准。
[0040]进一步地,所述Android环境下应用程序启动中代码签名验证的系统,采用后台验证模式。
[0041]本发明的有益效果是:本发明从操作系统层面实现了一种针对黑客对智能终端应用程序的攻击方法的防护机制,将起到保护Android智能终端用户的个人隐私和商业机密的作用,保护应用程序安全、通信安全和数据安全。
【附图说明】
[0042]图1为本发明所述Android环境下应用程序启动中代码签名验证的方法流程图;
[0043]图2为本发明所述Android环境下应用程序启动中代码签名验证的方法中步骤S3的流程图;
[0044]图3为本发明所述Android环境下应用程序启动中代码签名验证的方法中步骤S4的流程图;
[0045]图4为本发明所述Android环境下应用程序启动中代码签名验证的系统结构图;
[0046]图5为本发明所述Android环境下应用程序启动中代码签名验证的系统中根证书验证模块的子单元结构图;
[0047]图6为本发明所述Android环境下应用程序启动中代码签名验证的系统中签名证书验证模块的子单元结构图。
【具体实施方式】
[0048]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0049]如图1所示,一种Android环境下应用程序启动中代码签名验证的方法,包括以下步骤:
[0050]步骤SI,在Android智能终端中创建证书签发机构列表,所述证书签发机构列表存储一个或多个可信任的应用程序的代码签名证书签发机构;
[0051]只有指定机构发布的证书可以用于本发明的应用程序签名,这种设定采取TrustZone方案进行保护,或者采取多因子加密等方式保存在系统中,以保证设定的证书列表完整性,应用程序安装的过程中,验证来自应用商店的应用程序签名证书,如果是设定的证书签发机构列表中的签发机构签发的,则可以安装该应用程序,但本发明不涉及应用程序安装过程,也就是说即使非证书签发机构列表里面的应用程序安装了,也不能通过启动验证。
[0052]步骤S2,启动应用程序,在应用程序启动的同时验证该应用程序的代码签名证书签发机构是否在所述证书签发机构列表中,若不在,则代码签名验证不通过,应用程序无法启动或中止运行并退出,此时代码签名验证结束;若在,则执行步骤S3 ;
[0053]步骤S3,验证应用程序的证书签发机构的根证书的有效性,若无效,则代码签名验证不通过,应用程序无法启动或中止运行并退出,此时代码签名验证结束;若有效,则执行步骤S4 ;
[0054]如图2所示,步骤S3包括以下步骤:
[0055]步骤S31,使用应用程序的代码签名证书签发机构(CA)的公匙拆封代码
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1