比特码的消亡对应用程序安全的未来意味着什么?
图片:康斯坦丁·萨武西亚/Adobe Stock
对于应用程序开发人员来说,低级虚拟机位码在过去七年中一直是 Apple 工具链和 Android 原生开发工具包的主要内容。随着Xcode 14 beta的发布,从今年开始很快成为 iOS 和 MacOS 开发的标准,Apple 已经弃用了构建位码应用程序的选项。
对于应用程序安全行业来说,他们在很大程度上设计和集成了他们围绕比特码进行代码混淆的方法,这会产生巨大的影响。除非安全供应商适应,否则在不远的将来,许多应用程序可能会面临安全漏洞。
什么是代码混淆?
代码混淆是一种强大的代码保护技术,是应用安全产品的重要组成部分。混淆背后的想法是修改可执行文件,使其对黑客不再透明,但仍保持完整功能。
如果有效地进行混淆,则对程序进行逆向工程非常困难,因此可用于保护敏感的知识产权。例如,混淆可用于隐藏公司不希望竞争对手理解的算法——尤其是为了保护安全代码。
在应用程序防护领域,我们使用多种工具来为应用程序提供一个安全的运行环境。这包括诸如钩子检测、反调试和防篡改之类的东西,具有讽刺意味的是,除非隐藏得很好,否则所有这些都容易被篡改或删除。因此,使用混淆来保护这些工具。
混淆可以插入三个不同的级别:基于源的级别、基于本地二进制的级别以及迄今为止最主要的方法,即中间级别。在许多编译器和本机代码之间是一个中间层,用于进行优化。
低级虚拟机是这方面最著名的例子。LLVM 是一组编译器和工具链技术,可用于开发任何编程语言的前端和任何指令集架构的后端。LLVM 很有用,因为它允许 Clang 或 Rustc 等编译器针对不同的后端,例如 X86_64、armv7、iOS 和 Windows 上的 Linux。如果混淆器可以在这个级别上运行,那么它是最容易构建和维护的,因为它既不依赖于前端编译器语言,也不依赖于后端机器指令集。
但是,有一个缺点:它通常与工具链相关联。对于 iOS 和 MacOS 上的应用程序,那些处于中间级别的混淆可能会受到 Apple 集成软件开发(例如 Xcode 14)的任何更改或重大改革的影响。
什么是位码?
Bitcode 是 LLVM 的中间表示的序列化版本。
LLVM 在应用程序开发以及位代码中流行使用的一个重要原因是它是开源的并且可供所有人使用。这导致许多供应商创建了对位码进行操作的混淆器。它们的优势在于它们也可以针对许多后端,通常也可以针对多个前端。LLVM 库还提供了操作位码所需的所有 API,这一事实进一步促成了它的主导地位。
Apple 之前在其工具链中使用了位码,因为它有多种 CPU 架构来支持这一点,例如 Intel、arm32 和 arm64。在某些情况下,Apple 甚至强制要求应用程序必须以位码格式提交,而不是机器码。这使 Apple 能够在最后阶段降低要安装的特定设备的机器代码。
未来 Xcode 版本如何影响位码?
Apple 现在已经达到了所有新硬件都使用 arm64 并且不再需要 LLVM 提供的灵活后端的地步。值得注意的是,在WWDC 2022主题演讲中,提到了能够更好地纯粹针对该架构进行优化,这暗示 LLVM 中间层将来可能不再用于该目的。
这导致了 Xcode 14 beta 形式的重大改革,Apple 已经弃用了构建位码应用程序的选项。iOS 和 MacOS 的开发人员仍然可以使用带有警告的位码,但稍后将被删除。从本质上讲,现在制作位码应用程序不再那么容易了。
为什么这很重要,谁受到了影响?
未来的 Xcode 版本现在可能会阻止安全供应商使用位码。混淆供应商通常采用两种方法来进行位码混淆,它们会受到不同的影响。
第一种方法是应用程序混淆,其中混淆器在构建后以位码格式作用于整个应用程序,作为 IPA 或 Xcarchive 文件。这是一个很好的方法,因为这意味着混淆器不需要紧密集成到工具链中,并且混淆可以在整个应用程序上工作,而不是一次在单个模块上工作。
第二种是工具链集成方法,其中混淆器替换或修补 Apple 工具链中的组件,以确保在构建过程中调用它。这可能会导致维护问题,但通常这是通过围绕现有 clang 编译器创建包装器的轻量级集成。
第一种方法现在已被有效地弃用。使用它的供应商可能会继续他们的工作(带有警告)至少一年。但是,这种方法可能会在 Xcode 15 或 16 中被阻止。
第二种方法也可能在未来的基础上摇摇欲坠,因为我们不知道苹果是否会在某个时候删除 LLVM 或阻止在编译器中访问它——甚至可能在没有警告的情况下。当前使用基于 LLVM 的混淆器来保护 iOS 和 MacOS 应用程序的所有供应商都将受到此更改的影响。
这对应用程序安全的未来意味着什么?
最终,随着 Apple 寻求利用其统一架构用于 CPU、GPU 和 ML 加速器,LLVM 将变得不那么有用,甚至可能完全消失。Xcode 14 已经包含与 LLVM 竞争的工具链组件。如果 LLVM 消失,那么在未来,Apple 的平台可能会变得更难保护,因此会有更少的供应商提供产品来做到这一点。
这种重组完全有可能危及 App Store 上许多应用程序的安全性。这是否发生将取决于安全供应商的适应性。那些使用工具链集成方法的人暂时还可以,但他们冒着这种方法将来可能会在没有警告的情况下被关闭的风险。
我们可能会看到基于原生二进制的混淆方法的增加。这种混淆方法的主要区别在于直接操作构建的机器代码。目前使用这种方法的混淆器并不多,因为它特别难做,并且可能需要支持许多二进制格式和/或 CPU 指令集。
无论如何,虽然代码混淆的未来可能不确定,但有一件事是肯定的——应用程序开发人员需要采取积极主动的方法,观察安全供应商并相应地进行规划,以确保他们的应用程序保持安全。
