<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

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

    VSole2022-07-28 12:00:00

    圖片:康斯坦丁·薩武西亞/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 指令集。

    無論如何,雖然代碼混淆的未來可能不確定,但有一件事是肯定的——應用程序開發人員需要采取積極主動的方法,觀察安全供應商并相應地進行規劃,以確保他們的應用程序保持安全。

    代碼混淆llvm
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    本文介紹如何利用可逆多項式和線性MBA表達式構造多項式MBA表達式,并用LLVM Pass實現一種簡單的多項式MBA混淆。MATH WARNING: 本文涉及少量抽象代數知識,基本上都是網安專業信安數學必修課中學到的內容。
    對于應用程序開發人員來說,低級虛擬機位碼在過去七年中一直是 Apple 工具鏈和 Android 原生開發工具包的主要內容。隨著Xcode 14 beta的發布,從今年開始很快成為 iOS 和 MacOS 開發的標準,Apple 已經棄用了構建位碼應用程序的選項。
    針對于這種情況比較好處理,直接在上述第5步不修正其Terminator,讓其保持原有的代碼,直接continue即可,這樣就可以保證其正常運行。同時在進行第五步時判斷當且僅當Terminator為BranchInst時才進行修正后繼,否則不做任何處理。
    二進制代碼相似判斷有著廣泛的用途,如 Bug 搜索、惡意軟件聚類、惡意軟件檢測、惡意軟件譜系跟蹤、補丁生成、跨程序版本移植信息和軟件剽竊檢測等應用場景。其常見的八種應用如下所示:
    Kam1n0是一款功能強大且易于擴展的匯編代碼管理和分析平臺,該工具允許用戶將一個大型二進制文件集合索引到不同的存儲庫中,然后它會給廣大研究人員提供各種不同的分析服務,例如克隆搜索和分類等等。
    但是,研究人員最近發現了自2019年10月以來一直在競選活動中使用的前所未有的FinSpy示例。兩者都是星期五首次公開披露。2019年3月,Amnesty International發布了一份報告,分析了針對埃及人權捍衛者以及媒體和公民社會組織工作人員的網絡釣魚攻擊。新樣品 本周發布的最新襲擊事件繼續針對埃及民間社會組織。研究人員表示,針對macOS的FinSpy示例“使用了相當復雜的鏈來感染系統,開發人員已采取措施使其分析復雜化。”
    AI安全論文第19篇介紹惡意代碼分析經典論文DeepReflect,希望您喜歡
    之前看chenx6大佬的博客學習了一下編寫基礎的LLVM Pass,但是那個有很明顯的問題是,作者為了處理Function內部重復引用的多次解密的問題,特判了引用次數,如果存在多處對global string的引用是無法進行混淆的。但是實際的編程中很難不會引用多處字符串,所以那個只能混淆簡單代碼。之后學習了一下pluto-obfuscator項目,里面有一份GlobalEncryption.cpp,借此機會學習一下,順便寫一份New PassManager版本的。runOnModule首先獲取Module的LLVMContext,獲取所有的全局變量,添加到GVs中。
    ollvm反混淆學習
    2021-10-16 16:57:55
    在debug版中ollvm的特征非常明顯,一個分發器,和引用了這個分發器的真實塊。但經過編譯器優化后,分發器可能會變成多個,基本塊會合并造成虛假塊也可能會和真實塊合并,等等。這樣做也不能說能夠找到函數的所有分支。控制流塊的剔除采用了無名俠大佬對基本塊簽名的方法。將剩余的塊標記為真實塊,并使用模擬執行找出對應關系。
    可以看到有兩個printf函數打印了一些數據出來,我們點第一個打印的字符串。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类