繁体   English   中英

Android签名验证

[英]Android signature verification

在Android签名验证及其漏洞的情况下,我有很多疑问需要清除。

一旦我们为应用程序生成apk,我们就可以解压缩apk并使用apktool编辑资源文件。 当我们重新打包已编辑的apk时,它会丢失其签名。 我可以使用jarsigner和我自己的私钥来重新签名unsigned apk,我在生成apk时使用了私钥。 我在playstore中找到了一个名为zipsigner的应用程序,可以用来签署这种类型的unsigned apk。

所以当这个zipsigner签署unsigned apk时,apk是用同一个私钥签名还是用不同的密钥签名? 因为我的META-INF文件夹仍然保存XXX.SF和XXX.RSA文件,其中包含我的私钥信息。 如果它是我的同一个私钥,那么新的apk将是我的应用程序的升级,或者如果它是一个不同的密钥,我将有两个不同的应用程序具有相同的名称。

从上述情况来看,有可能在重新打包时我的apk中可能包含恶意软件。 在Android的签名验证机制中似乎存在漏洞,其中META-INF文件夹内的文件的消息摘要不包含在MANIFEST.MF以及XXX.SF文件中。 这使得任何人都可以在这些文件夹中包含恶意软件代码,重新打包apk并使用zipsigner应用程序重新签名。

我正在寻找一个解决方案,我可以阻止文件被添加到META-INF文件夹中,我从下面的博客中找到了一个。 但我无法理解解决方案。 这看起来更像是一个研究课题,因此互联网上没有太多的信息。 有人可以尝试找出博客中指定的解决方案。 博客链接在问题下方指定。

http://blog.trustlook.com/2015/09/09/android-signature-verification-vulnerability-and-exploitation/

  1. 私钥永远不会是分布式APK的一部分,除非我误解了你的问题。 除非您自己的系统被黑客入侵,否则无法代表您签名。

  2. 共享链接(blog.trustlook.com)讨论了使用.sf(以及具有相关扩展名的文件)扩展名的Android跳过文件检查。 因此,恶意软件可以在具有这些扩展之一的文件中隐藏自己。 提到的解决方案是Android“系统固件”修复,而不是可以在应用程序级别完成的事情 这意味着,OEM(Google本身或三星/其他)必须发布更新的固件来解决此问题。 检查最新更新,它可能已经修复。

  3. 在我看来,即使用户侧载APK,这也比真正的攻击/威胁更令人讨厌 有关详细信息,请参阅下面的Blackhat文章 - https://www.blackhat.com/docs/ldn-15/materials/london-15-Xiao-What-Can-You-Do-To-An-APK-Without-其私人的琴键wp.​​pdf

您还应该阅读此有关防篡改的可能方法APK - https://www.airpair.com/android/posts/adding-tampering-detection-to-your-android-app

从其他答案中读取链接黑帽:APK问题

  1. 如果您保持私钥安全,那么只有您可以签署APK,只有您能够将它们发布到给定的商店。
  2. 未检查和验证META-INF目录中的额外信息。 这允许将额外的数据添加到jar文件中,这可以用于将信息走私到APK中。 但是这不会被你的APK文件使用,也不会造成声誉受损。
  3. 测试算法存在缺陷,这意味着如果自签名,则不会在设备上检查证书的有效性。

数据走私

不检查META-INF文件是加密代码如何工作的副作用。 为了保护您需要创建一条唯一描述该消息的消息。 这是受保护数据的哈希值。 不幸的是,证书不能包含在此中,因为它是在计算哈希值之后添加的。 因此,通常可以在不破坏签名的情况下添加地点。 对于windows和.exes, 微软的报告在这里:MS13-98 在这种情况下,某些安装程序使用未经检查的数据来选择从哪里下载文件。 这使他们很脆弱。

在X509证书中,有未选中的字段。 (未经身份验证的属性)。 这使得任何基于X509的解决方案都能够走私数据。 您的保护,是您上传的本地副本没有走私值。

如果您不依赖安全目录中未经过身份验证的数据,那么您就不会容易受到更改。 所以最好的选择是不要这样做。

自签名问题

自签名会导致错过一些检查。 这允许攻击者创建一个可更新的包,声称是他们的。 这是版权问题,而不是安全问题,因为它明显是被篡改的二进制文件(不通过自签名检查)。

有没有办法重新打包apk并使用相同的私钥签署应用程序?

  • 私钥在APK中不可用,因此无法用于重新签名数据。
  • APK(META-INF外部)中的文件无法在不更改其哈希值的情况下进行修改。

每当apk被解压缩时,它会丢失其签名信息吗?

取消打包APK不会破坏其签名,您可以重新打包。 您可以从APK中删除项目而不会破坏签名。 但是,不能在不破坏签名的情况下更改资源和代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM