在 macOS 上破解 Meta 的 Messenger 证书固定

逆向工程师详细说明了他们如何绕过 Meta 的 Messenger macOS 应用中的证书固定,以拦截其加密流量,这也引发了更广泛的讨论:这类客户端侧防御到底有多有效。评论者权衡了证书固定、混淆和完整性检查之间的取舍,指出有决心的攻击者总能修改二进制文件,而公司使用这些技术主要是为了提高随意篡改或 CA 受损时的门槛。讨论进一步扩展到用户检查应用流量的权利、逆向工程的法律边界,以及像 Apple 和 Meta 这样的平台应当在用户设备上运行什么样的程序拥有多大控制权。

逆向工程 Messenger 的证书固定

  • 几位评论者描述了在其他应用(Snapchat、TikTok、Instagram)上类似的过去尝试,并指出证书固定加上 RE 加固可能非常难以绕过。
  • 许多人强调,翻转条件分支(例如 JNE/JE)并重新运行应用,是一种常见、已有几十年历史的破解模式;Messenger 这一案例被视为现代例子。
  • 有人预计 AI 或自动化的、类似模糊测试的工具会帮助定位这些分支,不过也有人指出,这主要是一个标准的模糊测试/搜索问题,而不是一个“AI”问题。

为什么不直接用网页或 Android 客户端?

  • 网页界面通常使用不同的 API,或者缺少特定行为,因此当分析桌面客户端的协议时,它们并不是好的替代品。
  • Android 应用更容易被拦截(而且 Meta 也记录了如何用于漏洞赏金工作),但 Texts.com 正在构建一个桌面客户端,所以匹配桌面行为很重要。

混淆、完整性检查与威胁模型

  • 几位评论者认为,对客户端二进制进行重度混淆或完整性检查的价值有限:有动机的攻击者最终还是会赢,而且这会增加成本、性能开销和调试痛苦。
  • 证书固定被描述为一种低成本的“提高门槛”措施,主要用于防范恶意代理或受损 CA,而不是严肃的逆向工程防护手段。
  • 也有人反驳说,如果没有完整性检查,通过修补几个字节来绕过固定看起来太容易,不过批评者回应,阻止用户修改自己的软件是对用户不友好的。

平台控制与用户自由

  • 有人把这与 Apple 更加封闭的模式联系起来(Secure Enclave、代码签名、沙箱),把它视为一种强制信任和完整性的方式;而其他人则将其描述为“危险”的或反用户的。
  • 大家都同意,一旦攻击者控制了客户端设备,就不可能实现完美防御;你所能做的只是增加所需成本。

流量检查、阴谋论与隐私

  • 评论者乐于能够检查 Messenger 的流量,以验证“Facebook 通过麦克风监听”之类的说法,不过也有人指出,额外的应用层加密仍然可能隐藏内容。
  • 多条回复指出,完全控制客户端时,你总可以在加密之前进行 hook。
  • 一个很大的分支讨论了怪异的广告定向到底是因为窃听,还是因为高度有效的行为模型和社交图谱(例如朋友在共享网络上的浏览行为)。
  • 一些人认为这种预测型广告技术本质上是反乌托邦的,并主张个人数据在法律上应对公司而言具有“毒性”;另一些人则认为人们高估了自己数据的特殊性。

iOS/macOS 数据持久化与用户控制

  • 有用户抱怨,Facebook 的跟踪数据在 iOS 上即使删除应用后仍会保留。
  • 其他人解释说,应用可以把项目存储在与开发者绑定的 Keychain 中,用户看不到;在 iOS 上,要移除这些内容通常需要清空手机且不恢复备份、越狱,或者由应用提供删除逻辑。

法律考量

  • 有几篇帖子质疑,绕过证书固定是否违反 DMCA 的反规避条款。
  • 回复引用了美国对善意安全研究以及为互操作性进行逆向工程的豁免,但也指出 EULA 和一些判例法可能会使事情变得复杂。

工具与替代技术

  • 提到的工具包括用于拦截的 Proxyman、用于原生 hook 的 Frida、基于 eBPF 的 TLS 跟踪,以及用于 TLS 密钥记录的 SSLKEYLOGFILE。
  • 有人指出,与其破解固定,不如通过 hook TLS 库(例如借助 eBPF 或 Frida)在加密前捕获明文,不过基于代理的工作流仍然非常方便。