【问题标题】:Android Studio warning when using PackageManager.GET_SIGNATURES使用 PackageManager.GET_SIGNATURES 时的 Android Studio 警告
【发布时间】:2016-08-28 15:25:07
【问题描述】:

我需要获取包签名,我目前使用此代码获取它:

Signature[] sigs = c.getPackageManager()
                        .getPackageInfo(c.getPackageName(),
                                        PackageManager.GET_SIGNATURES).signatures;

但是,Android Studio 给了我这个警告:


从 getPackageInfo 读取应用签名:如果未正确验证,应用签名可能会被利用;有关详细信息,请参阅问题说明。

应用签名验证不当可能会导致以下问题:恶意应用使用其真实证书和虚假证书将自己提交到 Play 商店,并获得对它不应该拥有的功能或信息的访问权限,因为另一个应用只检查假证书,忽略其余部分。请确保验证此方法返回的所有签名。


在这种情况下验证签名意味着什么?我将根据服务器检查签名以确保它们匹配 - 这是他们的意思吗?

在本地测试中,它只输出一个负整数,而不是代码中的数组。

【问题讨论】:

  • 我已经提交了an issue,要求提供此类事情的真实文档。我会假设只要你的“检查签名”算法是不错的,你应该没问题。但是,由于我不清楚他们在警告什么,我无法确定。

标签: android android-studio android-studio-2.1


【解决方案1】:

跟踪弹出文本导致Android Studio 的this source code fragment
在同一个文件中,a line 包含指向外部资源的链接。
进一步追踪导致this presentation关于“Fake ID”漏洞。

Description of a problem:

问题在于,当 Android 构建信任链时,验证过程仅比较“主题”,而不是将实际密钥与证书签名者详细信息中提供的密钥进行比较。因此,攻击者可以修改信任链并声称由一方签名——而无需该方实际签名。

由于此错误,生成了错误的证书链,并且可能包含合法证书,这些证书嵌入在 APK 中,但并未用于实际签署应用程序。

这是 Android 源代码的the commit,可防止使用此漏洞。 这意味着如果设备具有 Android 4.4,则问题不会发生。在运行较低的 Android API 设备时,可能会造成伤害。

【讨论】:

  • 所以这是一个已知的错误,可能导致证书被泄露。它是“自动”修复的还是必须添加更多代码来解决/防止它?
  • 自 KitKat 以来,证书链替换或修改不会出现问题。但是,如果您真的想检查包的证书指纹,请查看this(可能对较低的 API 设备有帮助)。
猜你喜欢
  • 1970-01-01
  • 2017-10-11
  • 2019-06-22
  • 2015-11-16
  • 2020-08-25
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
相关资源
最近更新 更多