一、網易易盾為什麼會推出安全編譯器Maze?
隨著5G時代的到來,會有越來越多的物聯網裝置走進我們的生活,然而物聯網的終端本身普遍處於白盒環境中,攻擊者很容易獲取相關的資訊進行攻擊,這個時候如果不加以防護,勢必給我們的生活造成重大的影響。然而裝置的程式碼安全是一切安全的基礎,如果裝置程式碼不加以防護或防護不夠,不僅僅會造成本身核心技術洩露,同時也給IoT裝置穩定執行帶來威脅。
與此同時,隨著開發者安全意識的不斷提高以及對於效能上的更多的考量,會有越來越多的移動開發者把演算法或者核心邏輯寫在本地層,如果本地層保護不夠,攻擊者透過逆向分析就可以得到核心的演算法實現,嚴重危害到企業的利益,並且隨著行業逆向水平的提高,逆向工具的使用也越來越普及,對於C/C++二進位制檔案破解的門檻逐步降低。
基於以上這些痛點和威脅,網易易盾開發出了IoT安全編譯器Maze。Maze是一款針對C/C++層原始碼加密混淆的工具,用於保護智慧汽車、智慧攝像頭、智慧傢俱等韌體程式碼,避免因逆向工程被破解,造成核心技術被洩漏、程式碼執行流程被分析等安全問題。
安全編譯器與普通編譯器相似,可將C、C++等原始碼編譯成二進位制程式碼。不同之處在於,安全編譯器在編譯時,能夠對程式碼進行控制流混淆、字串加密等安全保護,從而避免攻擊者透過IDA Pro等逆向工具反編譯二進位制程式碼,分析業務程式碼執行流程,進一步篡改或竊取核心技術。
二、Maze原理說明:“迷宮矩陣”技術
Maze的“迷宮矩陣”技術由兩部分組成:一個是邏輯混淆,另外一個是邏輯排程。
2.1邏輯混淆
控制流平坦化
由於函式的控制流圖是函式邏輯的重要體現點,這裡以函式的控制流作為保護和說明物件。由於函式中的控制流是呈現順序的一個形態,逆向者可以透過逆向工具對其進行分析,還原程式的演算法邏輯。
易盾安全編譯器中控制流平坦化透過一個主分發器來控制程式基本塊的執行流程,分散程式邏輯之間的關係,大大的增大了逆向者的分析難度,原理圖如下所示:
由於函式中的字串是逆向者進行分析的第一個重要入口,因此在易盾安全編譯器中,字串是預設且建議加密的,從下圖中可以看到保護後的字串消失了,保障了函式的安全。
由於函式控制流是逆向攻擊者去分析的重要入口,因此安全編譯器透過對控制流進行虛假變形,以及指令之間的同語義的等價替換。透過構造一系列的邏輯謂詞,和等價轉換規則“豐富”整個程式邏輯,大大的增大逆向分析者去逆向分析的難度,變換前後的原理圖如下所示:
2.2邏輯排程
呼叫隱藏
程式邏輯其中有一部分重要邏輯是透過子函式之間的呼叫來體現的,安全編譯器透過分析函式之間的呼叫鏈,然後複雜化來增加之間的呼叫關係,使得程式呼叫達到一種隱藏的效果。
為了進一步的增大程式之間的分析難度,透過“分散”並重新組織塊狀態之間的呼叫關係,透過引入一個動態的分發塊結構,來模擬整個程式執行的過程,無論是靜態還是動態都使得程式看起來更加的困難,變換其後的效果圖如下所示:
三、保護前後效果對比
以下是採用安全編譯器保護前後的效果圖,可以看到其中重要的字串透過IDA靜態分析完以後消失了,給靜態分析帶來一定的困難。
透過觀察保護前後的混淆控制流,可以看到保護以後的控制流變得異常的複雜,給攻擊者帶來巨大的分析困難,不僅無法靜態分析,即使是動態分析也有很大的困難。
四、相容性&強度
4.1 相容性
Maze的混淆相容所有C/C++語法特徵,不僅適用客戶端的應用開發,相容目前市面上大部分的NDK版本,同時也適用嵌入式開發,保障混淆保護前後功能上的等價轉換。這也使得客戶使用上相容所有的系統端,如Windows、Linux和Mac等;
4.2 強度
我們知道強度與效能在一定程度上體現這樣的關係:一定強度的保證需要效能損失作為代價。這裡Maze 盡最大程度弱化之間的對應關係,找到一個平衡點,以最小的效能損失達到最大的保護強度,同時提供靈活且細粒度的使用方式,保障達到最佳的效果。
五、總結
對於眾所周知的黑盒加殼保護,攻擊者通常只需要抓住分析到的某一個點,就能讓整個保護“淪陷”,而Maze在效能和體積可接受範圍內,使得攻擊者陷入一種“迷宮”(Maze)狀態,越走越亂。
從這來看,Maze是一種新的安全程式碼保護思路,擁有更加靈活、強度更高、效能和體積優良、保護效果好等優點。在部署上,Maze不僅支援透過指令碼輕量級進行部署,也可以對強度和需要進行混淆保護的函式進行靈活的控制,開發層面支援NDK開發和嵌入式開發,使用上則非常靈活,相容Windows、Linux、Mac等系統。
IoT安全編譯器Maze適用於保護智慧汽車、智慧攝像頭、智慧家居等韌體程式碼,也適用於保護移動應用,避免因逆向工程被破解,造成核心技術洩漏、程式碼執行流程被分析等安全問題。