如何解决如何防止 Mac 应用程序的用户窥探?
我正在创建一个基于 Chromium/Electron 的 Mac 应用程序。该应用程序本质上是一个浏览器,供我的客户使用我无法控制的网络服务。我的要求是我的应用程序的用户(他们可能在他们的 Mac 上拥有 root 访问权限)不应该能够查看应用程序正在访问的 URL,并且应该无法访问应用程序存储的 cookie。通常,自己进行 MITM 并不难,或者将调试器附加到应用程序并转储内存以查看 URL 和 cookie。
我怎样才能防止这些类型的信息泄露给用户?如果不可能,则可以将其变得非常困难,从而需要非常高的复杂度。
解决方法
您的用户可以完全控制他们的设备,不可能安全地阻止他们代理或探索您的客户端应用程序的功能。混淆似乎是一种选择,但最终,离开您的应用程序的 http 请求将通过不同层遍历整个操作系统,您的用户可以轻松观察到这一点,如果不是,则在网络数据包中(但通常更容易)。
阻止用户知道发生了什么的唯一方法是您拥有自己的后端。前端应用 (Electron) 会向您的后端发出请求,后端可以在用户不知情的情况下发出任何带有任何参数的请求。
请注意,您的后端仍然可以用作代理或预言机,就像用户连接到真实服务一样。在您的情况下,这可能是也可能不是问题,具体取决于您实际想要实现的目标以及原因。
,该应用程序本质上是一个浏览器,供我的客户使用我无法控制的网络服务。我的要求是我的应用程序用户(他们可能在他们的 Mac 上拥有 root 访问权限)不应能够查看应用程序正在访问的 URL,并且应该无法访问应用程序存储的 cookie
基本上,您不能(您可以使用 appropriate infrastructure。但您缺乏这种基础设施)。
在某种程度上,使用 HTTPS 可以保护网络通信(如果您甚至不能使用 那个,那么您就完全走运了 - 用户甚至不需要 root 访问权限Mac 嗅探流量)。您需要验证服务器证书以确保您连接到正确的服务器。
你可能会做的一件事 - 恐怕只是对想要的人有效 - 首先在某个随机服务器上运行测试 API 调用,并验证连接是否完全成功,使用正确的服务器标识和匹配的 IP,如果服务器存在,或者如果服务器不存在则正确失败。其他任何事情都表明有人接管了网络层,此时您可以连接到不同的服务器,进行不同的调用,并感叹服务器没有正确应答。
内存中的字符串可以通过让它们只在最短的时间内可用来(空中报价)保护(结束空中报价),否则以不同的形式存储 - 例如,您可以拥有一个 URL 和一个随机字节序列相同的长度,然后存储序列和 URL 和序列的异或。然后,您可以在每次需要时重新构建 URL,记住将其从它可能进入的任何应用程序缓存中清除。此外,只是为了大声笑,您可以将面包师的十几个不同 URL 清晰地散布在整个代码中。那时的内存转储将没有任何用处。
当然,文件可以使用多种方案中的任何一种进行加密 - 驻留在同一台机器上的文件必须知道如何解码它们使所有此类方案最终都容易受到攻击,但同样,您可以尝试混淆事物.我曾经在一个 ZIP 文件中存储了一些信息 - 但它只是一个加密 ZIP 文件的标题,在末尾粘有适当的目录条目块。数据实际上只是以明文格式压缩,没有任何密码。试图解码文件的人认为它是一个扩展名改变的 plain encrypted Zip file,浪费了大量时间使用几个 Zip 破解工具,最后欠我一瓶啤酒。
除此之外,现实中可以做的事情并不多。
一个很大的优势是将 API 调用和“cookie”维护外包给您控制的外部服务,例如在 Amazon AWS 或 Azure 或类似设备上。 然后您可以使用各种保护方案(例如:所有出站 API 调用都可以存储在一个不透明的对象中,带有时间戳、随机数并使用您服务器的公钥加密,并且发送的响应使用加密您客户的唯一密钥)。由于这相对简单且具有成本效益,因此也是我的建议。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。