谷歌云消息传递安全性

11

公司创建一个项目并获得一个发送者ID。公司创建一个应用程序,内置其发送者ID,并将应用程序放置在商店中。

攻击者反向工程该应用程序并提取了发送者ID和用于接收GCM注册ID的服务器接口。

攻击者创建自己的应用程序,内置公司的发送者ID和服务器注册接口,并将应用程序放置在商店中。这个攻击应用程序基本上在GCM方面冒充了公司的真实应用程序:它注册以接收来自公司发送者ID的消息,并像“真实”应用程序一样将其GCM注册ID发送到公司的服务器。

现在公司想要向其所有应用程序实例广播一些信息。也许是提醒更新可用。有没有办法区分“攻击应用程序”(像真实应用程序一样注册)和公司应用程序的“真实”版本?


不错的问题,但可能不适合在这里讨论。 - ceving
7个回答

3

根据您的情况,即使攻击者拥有注册ID,也不可能向用户发送消息。发送消息的公司服务器需要首先通过 Google 进行身份验证(OAuth2)才能发送消息。因此,只有攻击者知道发送方的密码和注册ID,才能发送给用户。但是,发送方的密码当然永远不会发送到客户端。


2

嗯,这甚至可以在攻击者应用程序的调试版本中工作,但他不能将其应用程序放入商店。 GCM标识的一部分是应用程序ID,需要在商店中保持唯一。


1

GCM注册ID是由Google请求的,从应用程序请求并提交到您的服务器。当使用不同应用程序(但相同的发送者ID)创建Regid时,仍然必须将其提交到服务器,并且您首先必须明确向该特定regid发送消息。

无论是合法还是非法的应用程序安装都不能接收未经授权的消息。(前提是您声明并使用了权限)


1

同样的问题也可能存在于C2DM,你可以嗅探发件人的电子邮件地址,而不是GCM的项目ID。

C2DM或GCM,不应该用于发送敏感用户信息(即帐户名称、私人信息等),它主要用于通知,真正的应用程序可以使用它执行进一步的操作。

我无法看出一个通知对于一个“假/黑客”应用程序有多有用,他们会用“您有新消息”通知做什么?


1
你有任何来源吗? - Schiavini

0
我建议您拥有自己的“临时服务器”,使用API密钥(即您所提到的发送者ID)。而不是将其嵌入应用程序本身。

0

GCM在这种情况下是安全的。
在注册应用程序之前,您甚至不能在原始应用程序中使用您的发送者ID。这意味着您需要在GoogleApiConsole中指定私钥指纹。这就足够了。


0
实际上,Google 让你为 GCM 注册一个服务器密钥,让你可以白名单服务器 IP。 因此,你应该添加你的服务器 IP,这样只有你的服务器被允许使用该密钥发送消息,才能确保安全。

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