网络安全攻防:Android App签名

  • A+
所属分类:移动安全
App证书是App在被推送到App市场中,表示开发者身份的。把开发者的ID和他们的App以密码学原理关联起来。通过App签名来保证Android App的完整性,确保App不会被其他的App所冒充,所以App在被安装之前都要被签名。在Android系统中,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个 Permission 的protectionLevel为Signature,那么就只有那些与该Permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。

在签名时,需要考虑数字证书的有效期。

(1)数字证书的有效期要包含程序的预计生命周期,一旦数字证书失效,持有该数字证书的程序将不能正常升级。

(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期。

(3)AndroidMarket强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。

Google建议把同一开发者所有的App都使用同一个签名证书,这样就没有人能够覆盖你的应用程序,即使包名相同,所以影响如下。

(1)App升级。使用相同签名的升级软件可以正常覆盖老版本的软件,否则系统比较发现新版本的签名证书和老版本的签名证书不一致,不会允许新版本成功安装。

(2)App模块化。Android系统允许具有相同的App运行在同一个进程中,如果运行在同一个进程中,则它们相当于同一个App,但是可以单独对它们升级更新,这是一种App级别的模块化思路。

(3)允许代码和数据共享。Android 中提供了一个基于签名的 Permission 标签。通过允许的设置,可以实现对不同App之间的访问和共享。

1. 通用签名

搭建好Android开发环境后(使用Eclipse或Android Studio),对APK签名的默认密钥存在debug.keystore文件中。在Linux和Mac上debug.keystore文件位置是在~/.android路径下,在Windows目录下文件位置是C:user用户名.android路径下。

除了debug.keystore外,在AOSP发布的Android源码中,还有以下几个证书是公开的,任何人都可以获取,在源码的build/target/product/security目录中,如图1所示。
网络安全攻防:Android App签名
图1  公开证书目录

2. 通用签名风险

(1)如果攻击者的应用包名与目标应用相同,又使用了相同的密钥对应用进行签名,攻击者的应用就可以替换掉目标应用。

(2)另外,目标应用的自定义权限android:protectionlevel为“signature”或“signatureOrSystem”时,保护就形同虚设。

(3)如果设备使用的是第三方ROM,而第三方ROM的系统也是用AOSP默认的签名,那么使用如果使用系统级签名文件签名过的应用,权限就得到了提升。

对于普通开发者如果自己的签名证书泄露也可能发生(1)、(2)条所提到的风险。


微信公众号:计算机与网络安全

ID:Computer-network


网络安全攻防:Android App签名


一如既往的学习,一如既往的整理,一如即往的分享。感谢支持网络安全攻防:Android App签名

“如侵权请私聊公众号删文”



扫描关注LemonSec

网络安全攻防:Android App签名

觉得不错点个“赞”、“在看”哦网络安全攻防:Android App签名

本文始发于微信公众号(LemonSec):网络安全攻防:Android App签名

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: