Google chrome extension 保护Chrome本机消息主机
我正在开发一个使用Chrome本机消息传递的应用程序,它通过Chrome扩展启动 我的问题是:如何确保主机应用程序与我提供的应用程序完全相同Google chrome extension 保护Chrome本机消息主机,google-chrome-extension,chrome-native-messaging,Google Chrome Extension,Chrome Native Messaging,我正在开发一个使用Chrome本机消息传递的应用程序,它通过Chrome扩展启动 我的问题是:如何确保主机应用程序与我提供的应用程序完全相同 我需要确保扩展调用的应用程序的真实性。如果我没有权限阅读注册表或检查某些内容是否已更改,我如何获得它?这是一个很好的问题,我猜答案是“很遗憾,你不能” 实现某种加密散列(比如Chrome用来验证扩展文件的散列)会很有趣,但这并不是一个很好的保证 考虑(所有这些假设): 这样可以很容易地保护注册表项/清单,但是文件本身呢 假设你固定了一个可执行文件的散列,
我需要确保扩展调用的应用程序的真实性。如果我没有权限阅读注册表或检查某些内容是否已更改,我如何获得它?这是一个很好的问题,我猜答案是“很遗憾,你不能” 实现某种加密散列(比如Chrome用来验证扩展文件的散列)会很有趣,但这并不是一个很好的保证 考虑(所有这些假设):
- 这样可以很容易地保护注册表项/清单,但是文件本身呢
- 假设你固定了一个可执行文件的散列,那么更新它就会很痛苦(你必须同步更新扩展名)。可以通过某种公钥签名而不是散列来解析
- 假设您将可执行文件固定在清单中。它的数据文件呢?更重要的是,本地应用程序使用的库如何
无论如何,这似乎是一件有趣的事情。看看Chrome是否已经有类似的功能,如果没有,尝试提出功能请求。也许可以尝试一些与铬相关的邮件列表来询问开发人员。如果我正确理解了这个问题,解决方案可能是
如果您能够使用某种httpOnly Cookie(客户端机器无法读取)或密码机制使您与服务器的可执行通信安全,那么很可能是您可以实现的安全解决方案,但我认为值得分享Chromium团队对我提交的bug的官方回应: 可以修改用户计算机上注册表或FS的攻击者也可以修改chrome二进制文件,因此,此类攻击者可以通过篡改chrome代码来禁用chrome中实现的任何类型的验证。因此,chrome必须信任FS(以及来自本地机器的任何东西)
您可以在构建时相对轻松地对可执行文件进行签名:计算可执行文件的哈希值,使用私钥对其进行加密,然后将其存储在可执行文件本身中。扩展再次计算散列,然后将其与存储在可执行文件中的散列进行比较(使用公钥解密)。因此,这是一个简单的签名过程,但正如你所说,你必须对本机应用程序依赖的每个文件进行签名。你还可以争辩说,如果共享库遭到破坏,你已经输掉了游戏。我不确定静态链接能改善多少情况。关于注册表呢?当我安装主机应用程序时,我设置为extension以在我定义的某个路径中调用它。但是如果有人更改注册表并将目标指向另一个路径,而不是已更改的应用程序(而不是签名的应用程序),扩展将不会识别更改的路径,并且将正常执行。有没有办法读取注册表以确保注册表上定义的路径对应于真正加载的应用程序?没有,据我所知,目前还没有。正如我所说,您可以尝试将其作为一项功能进行请求。根据biziclop的回答,我可以使用私钥对每个文件进行签名,并将哈希值与文件一起存储。之后,进入扩展名,我需要打开文件并验证签名。对于每个需要以扩展名打开的文件,用户需要授予权限或确认一些弹出窗口?有没有办法让这个过程对用户透明?