A Longitudinal Study of Android Apps Signing Key Protection
这项纵向研究表明,公共仓库中广泛存在的 Android 应用签名密钥管理不善,已导致超过 5,600 个密钥库和 278 个真实世界的应用遭到破坏,这些应用涉及各大 OEM 厂商和应用商店,影响了超过 100 亿用户,并将风险延伸至汽车平台。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你的安卓手机就像一个高安全性的银行金库。要进入金库,你需要一把特定的钥匙。在数字世界中,这把“钥匙”被称为签名密钥(Signing Key)。你安装的每一个应用(比如 WhatsApp、你的银行应用或是一款游戏)都附带一个数字签名,就像信件上的火漆印一样。这个印记证明了两件事:
- 真实性: “我就是我所声称的那个人。”
- 完整性: “自封印之后,没有人篡改过我的内容。”
如果印记有效,你的手机就会信任该应用。如果印记破损或伪造,你的手机就会拒绝它。
这篇论文是对开发者不小心弄丢了自己金库钥匙这一现象进行的深度调查。
核心问题:把钥匙留在门廊上
研究人员(Mark, Qing, Weirao, 和 Chunyang)进行了一场数字寻宝行动。他们在公共代码仓库(例如 GitHub,这是一个程序员分享工作的巨大公共图书馆)中搜寻这些数字钥匙。
他们发现了一个令人震惊的情况:开发者竟然把钥匙随手丢在外面。
- 类比: 想象一下,银行经理把金库钥匙打印出来,把密码写在便利贴上,然后把两者都贴在银行的正门上。
- 现实情况: 团队发现了 5,673 把独特的数字密钥被意外上传到了公共网站。更糟糕的是,在大多数情况下,打开这个密钥的“密码”也以明文形式直接写在旁边。这简直就像是找到了钥匙,还同时找到了写着“密码是 '123456' ”的便条。
调查过程:连点成线
一旦拿到了这些密钥和密码,研究人员并没有止步于此。他们提出了疑问:“到底是谁在使用这些丢失的密钥?”
他们将丢失的密钥与一个包含超过 4,000 个真实应用的数据库进行了对比,这些应用存在于应用商店中,并预装在来自各大公司(如三星、小米、华为等)的手机上。
结果令人震惊:
- 他们发现 26 款热门应用(如百度地图或携程)在公共应用商店中使用这些被泄露的密钥进行签名。
- 他们发现来自 7 家制造商的手机中,有 252 个预装应用也在使用这些丢失的密钥。
- 规模: 这些应用的使用人数超过 100 亿人(包括许多在不同设备上多次使用相同应用的人)。
为什么这很危险:“冒充者”攻击
论文解释了如果黑客得到了这些密钥,他们可以做出极其恐怖的事情。
类比: 想象一名黑客偷走了某家著名面包店的主钥匙。现在,他们可以制作一个看起来与那家面包店著名的巧克力蛋糕完全一样的蛋糕,甚至还带有官方的火漆印。因为印记是真的,面包店的安全系统(你的手机)会认为:“哦,这是来自面包店的正规更新!”从而让黑客的蛋糕取代原本的蛋糕。
研究人员证明了以下几点:
- “更新”诡计: 黑客可以获取一个合法的应用(比如地图应用),注入恶意代码(比如窃取你密码的间谍程序),然后用偷来的密钥对其重新签名。
- 手机的反应: 当你尝试更新地图应用时,你的手机会检查印记。它看到印记有效(因为黑客使用了真实的密钥),于是安装了这个恶意版本,认为这是一个安全的更新。
- “汽车”关联: 研究人员甚至发现了一个用于车载信息娱乐系统(如百度 CarLife)的密钥。这意味着风险不仅限于手机,还可能延伸到你车内的计算机,从而允许黑客干扰你的车辆系统。
“权限”噩梦
论文强调了一个涉及预装应用(随手机自带的应用)的特定且可怕的情景。
- 其中一些应用拥有“超能力”(特权权限),这些是普通应用所没有的,比如在不询问的情况下读取你的短信或查看你的位置。
- 如果黑客利用偷来的密钥替换了一个预装应用,这个新应用会保留那些超能力。
- 结果: 手机可能会永久崩溃,因为新应用请求了它不该拥有的权限;或者,它可能会在后台静默窃取原本受保护的敏感数据。
研究人员如何证明这一点
他们不仅仅是在谈论理论;他们构建了一个“概念验证(Proof-of-Concept)”。
- 他们拿取了一个真实的应用(百度的输入法),偷取了它的密钥,并注入了一个记录你每一次按键动作的脚本。
- 他们用偷来的密钥对这个恶意版本进行签名,并将其安装在一台测试手机上。
- 结果: 手机接受了它作为一个合法的更新,并且恶意脚本成功地在后台开始记录键盘输入。
总结
论文得出结论,安卓安全最大的风险不在于代码本身的缺陷,而在于人为错误。开发者和制造商正在将这些数字密钥视为临时笔记,而非长期的安全资产。
作者的建议:
- 不要把钥匙留在门廊上: 绝不要将密钥或密码上传到公共代码库。
- 使用保险库: 使用安全的托管服务来处理密钥,以免它们就那样躺在开发者的笔记本电脑上。
- 不要共享密钥: 制造商不应该在真实产品中使用相同的“公共”测试密钥。
简而言之,安卓生态系统在理论上是安全的,但在实践中,它就像一座堡垒,守卫们却把备用钥匙留在了门垫下面。这项研究是一个警钟,提醒人们在小偷发现之前,先把钥匙捡起来。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。