比特碼的消亡對應用程序安全的未來意味著什么?

圖片:康斯坦丁·薩武西亞/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 指令集。
無論如何,雖然代碼混淆的未來可能不確定,但有一件事是肯定的——應用程序開發人員需要采取積極主動的方法,觀察安全供應商并相應地進行規劃,以確保他們的應用程序保持安全。