保护Chrome本机消息主机

时间:2015-04-07 19:50:05

标签: google-chrome-extension chrome-native-messaging

我正在使用通过Chrome扩展程序启动的Chrome Native Messaging开发应用程序。

我的问题是:如何确保我提供的主机应用程序真的一样?

我需要确保应用程序通过扩展名调用的真实性。如果我没有阅读注册表的权限或检查某些内容是否已更改,我该如何获得?

3 个答案:

答案 0 :(得分:2)

这是一个很好的问题,我的猜测答案是“不幸的是,你不能”。

实施某种类型的加密哈希会很有趣,就像Chrome用来验证扩展文件一样,但这不是一个非常有力的保证。

考虑(所有这些假设):

  • 您可以通过这种方式轻松保护注册表项/清单,但文件本身呢?
  • 假设你固定了可执行文件的哈希值,那么更新它就会变得很痛苦(你必须同步更新扩展名)。可以使用某种公钥签名解决,而不是散列。
  • 假设您在清单中固定可执行文件。它的数据文件怎么样?更重要的是,本机应用程序使用的呢?

保护Chrome扩展程序/应用程序非常简单,因为您所依赖的唯一“库”/运行时是Chrome本身(并且您信赖它)。本机应用程序可以依赖于系统上的许多东西(比如已经提到的库),你如何跟踪?

无论如何,这对头脑风暴似乎是一件有趣的事情。如果已经有任何相似内容,请查看Chrome bug tracker,如果没有,请尝试提出功能请求。也许可以尝试一些与Chromium相关的邮件列表来询问开发者。

答案 1 :(得分:1)

我意识到这是一篇较老的帖子,但我认为从我提交的错误中分享Chromium团队的官方回复是值得的:https://bugs.chromium.org/p/chromium/issues/detail?id=514936

  

可以修改用户计算机上的注册表或FS的攻击者也可以修改chrome二进制文件,因此通过使用chrome的代码进行修改,攻击者可以禁用chrome中实现的任何类型的验证。因此,chrome必须信任FS(以及来自本地机器的任何东西)。

答案 2 :(得分:0)

如果我正确理解了问题,解决方案可能是

  1. 在安装时注册您的可执行文件,同时签署可执行文件并将您的注册号存储在可执行文件和服务器中
  2. 在扩展中的每个请求(postMessage)中,另外发送由您的服务器提供的令牌
  3. 通过从扩展程序传递令牌以及注册号
  4. ,要求服务器提供下一个令牌以向该扩展发送响应
  5. 如果您是注册用户,服务器将使用令牌进行响应
  6. 使用您的注册号对其进行加密,并将其与扩展程序中的令牌一起发送到扩展程序
  7. 扩展名持有者浏览器会向服务器询问其响应情况
  8. 在扩展令牌的帮助下,服务器将识别可执行注册表编号并解密可执行令牌并验证我们(服务器)为扩展令牌生成的内容
  9. 确认服务器后,浏览器会将其视为回复
  10. 重要的是,您的注册号应该是安全的,并且客户端计算机无法从可执行文件中获取它(使用正确的签名可以实现)

    由于chrome停止了对Applet的支持,我为chrome中的智能卡读卡器实现了相同的功能

    唯一的循环漏洞是,客户端计算机能够在某些工具的帮助下跟踪其发送的每个请求

    如果您能够使用某些httpOnly Cookie(客户端计算机无法读取)或使用密码机制使您的服务器可执行通信安全,那么很可能是您可以实现的安全解决方案