GCM SENDER ID被曝光会带来哪些后果?

16

场景: 假设攻击者通过反向工程一个.apk文件获得了用于推送注册服务的SENDER ID, 攻击者开发了一个相似的假应用程序,它具有相同/不同的包名称,并且已上传到与Google Play不同的应用商店。

我的问题: 他/她能否使用相同的SENDER ID来运行该应用程序?对于安装该假应用程序的用户会造成什么影响?

相关问题: google cloud messaging security 的问题看起来有点相似。还有 Android GCM:多个应用程序使用相同的发送方ID 的答案提供了有价值的信息。阅读两个被接受的答案,结论似乎是绝对可行的,因此建议不要在推送消息中包含敏感数据。

但这似乎并不是解决问题的方法。我无法理解上述安全漏洞的影响。

2个回答

18
发送者ID(也称Google API项目ID)与唯一的应用程序包名称无关。事实上,多个应用程序可以使用相同的发送者ID注册到GCM,这将允许使用相同的API密钥向所有这些应用程序发送GCM消息。当然,即使在同一设备上,每个应用程序都会有不同的注册ID。
如果某人知道您的发送者ID,则可以使用该发送者ID注册到GCM,但是如果不知道API密钥,则无法向真假应用程序发送GCM消息。当他们注册GCM时,GCM会接收其虚假应用程序的软件包ID。因此,如果您向真实应用程序的注册ID发送消息,则不会到达虚假应用程序。为了使虚假应用程序从您的服务器获得消息,它需要向您的服务器发送自己的注册ID,并欺骗您的服务器认为它是真实应用程序。在我们的服务器应用程序中,您必须提及我们的API密钥。如果您想发送任何通知,则需要它。

这意味着,如果黑客不知何故获知了我的服务器URL(应该是隐藏的),他可以在我的服务器上注册注册ID,并且每当我的服务器决定向所有应用程序发送推送消息时,假应用程序也将收到推送消息。 - Shobhit Puri
谢谢你的回答。它确实帮助我理解了,但现在根据你的回答,我有一个额外的问题。很可能在我的应用程序中会提到服务器URL,以便我的应用程序可以向我发送注册ID。在服务器端是否可以进行某些检查,以确保POST请求仅来自我的原始应用程序而不是虚假应用程序?如果我的问题听起来太直接了,我很抱歉,但我无法想象这个过程。 - Shobhit Puri
@ShobhitPuri 这是正确的,除非您的应用程序在与您的服务器联系时有一些证明其身份的方式。 - Eran
我自己还有点困惑。是否存在监听推送通知可能会导致安全风险的情况?如果通知中包含敏感信息,那么这种情况只有在发送推送时不发送敏感信息才是真正的全面解决方案(因此,如果伪造应用程序的ID,也没关系)。 - Jason C
1
@JasonC 听起来很对。既然其他应用程序可以接收到消息,那么也可以看到你的推送消息的内容。因此,不应在其中放置敏感信息。 - Shobhit Puri

1
他们将无法使用您的GCM Sender ID发布通知。
请记住,在获取Sender ID时,您还必须提交应用程序的包名称和发布签名密钥的SHA-1签名。该签名绑定到GCM Sender ID,因此只有由您的发布密钥签名的应用程序才能注册并接收GCM通知。
Google Play也不允许发布具有重复包名称的应用程序,因此没有人可以创建一个伪造的应用程序,其包名称已经在Play商店中。
然而,没有什么是100%安全的。我认为黑客也可以找出您的SHA-1签名密钥,并以某种方式破解APK,以欺骗系统认为该应用程序是由您的发布密钥签名的。我见过这样的应用程序被“破解”以规避Android许可库。这可能会欺骗GCM服务器认为该虚假应用程序被授权接收GCM消息。但是,“破解”的应用程序仍不被允许发布到Google Play,因此合法用户受到影响的风险非常小。

结合@Eran的回答,我的理解是虽然多个应用程序可以使用相同的SENDER ID,但只有那些由我的发布密钥签名的应用程序才能使用。但是,当我在控制台上创建一个新项目时,Google会给我一个发送者ID。然后,我只需按照这里所述打开Google Cloud Messaging,并在我的应用程序中使用该ID。我不太明白它与发布密钥的关系。 - Shobhit Puri
另外,如果黑客的应用程序在不同于Google Play的应用商店上怎么办?我读过一篇文章声称,有几个破解/伪造的应用程序已经从除了Google Play之外的应用商店下载了超过五十万次。 - Shobhit Puri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接