「隨著物聯網時代的開啟,需要解決的安全問題會愈來愈多,而程式碼安全是其他安全方案的底層支撐。面對晶片架構繁多,執行環境複雜的嵌入式物聯網裝置,傳統的程式碼安全方案都將會失效,LLVM編譯器為我們帶來了終極程式碼安全解決方案。」
日前,幾維安全CTO劉柏江在2018 ISC網際網路安全大會“網路安全技術創新及應用論壇”上發表了題為《IoT時代LLVM編譯器防護的藝術》的主題演講。
劉柏江,幾維安全CTO,聯合創始人,KiwiVM的締造者
移動網際網路、萬物網際網路,歸根結底都是硬體組成,軟體驅動。軟體程式碼承載著我們生活的方方面面,利用App叫車、購物、支付、聊天等無一不是通過程式碼來實現具體的服務功能。然而由於黑灰產的存在,裸奔的程式碼將會給我們的生活帶來各種糟糕的體驗和危險。尤其是隨著物聯網時代的開啟,需要解決的安全問題會愈來愈多,而程式碼安全是其他安全方案的底層支撐。面對晶片架構繁多,執行環境複雜的嵌入式物聯網裝置,傳統的程式碼安全方案都將會失效,LLVM編譯器為我們帶來了終極程式碼安全解決方案。架構無關、函式粒度、強度可調,堪稱程式碼安全防護的藝術,也是今天要分享的實操性非常強的技術。
萬物互聯,程式碼安全先行
安全圈的同仁們最近幾年都提到一個觀點:萬物互聯,安全先行。但這裡的安全是一個寬泛的概念,它可能是指裝置的物理安全,防止丟失或者被盜;也可能指晶片以及作業系統安全,防止底層漏洞被惡意利用;還可能指物聯網裝置承載的業務安全,防止使用者隱私資料洩漏。
這些安全我稱之為策略安全,它們是通過設計完備的規則以及良好的程式碼實現來達到保護的目的。但是這類安全問題我們絕大多數人是遇不到的,它們屬於Intel、ARM、Apple、Google這類晶片和作業系統巨頭公司的考慮範疇。
軟體程式碼是科技公司最寶貴的財富之一,程式碼安全是我們每位IT從業者都可能會遇到的問題,也是很有必要去解決的問題。程式碼加密能帶來如下好處:第一,防止核心演算法被重構,保護軟體資產;第二,提升策略安全的強度;第三,加大破解難度,延長破解時間,為運營爭取更多的有利視窗期;第四,提高破解成本,將逆向菜鳥拒之門外。
物聯網時代已經來臨
從2007年iPhone的誕生到現在,移動網際網路已趨於成熟,萬物網際網路也已打響軍備競賽,比如Google的Android Things、阿里的AliOS Things,他們都在為新一輪的物聯網平臺佈局。可以預見,未來我們身邊將有數不清的與生活息息相關的智慧終端裝置。作為對策略安全的一個強力補充,程式碼安全也將會繼續為整個生態安全貢獻力量。
晶片體系多
在PC時代,三大主流的桌面作業系統均跑在x86體系下面。而到了移動網際網路時代,我們主要面對的晶片體系是arm,但是arm有thumb、arm、arm64三種不同的指令集,這已經開始有點讓我們們這些做安全和逆向的人感到心力交瘁了。然而到了物聯網時代,鑑於成本、使用場景、效能要求等因素,物聯網裝置所使用的微處理器晶片體系可能會多到讓人難以置信,足以讓安全開發者們癲狂。
執行記憶體小
不像PC或者手機動不動就是幾個G的記憶體容量,物聯網裝置的執行記憶體容量相較PC或手機要小得多的,它們的記憶體可能只有少得可憐的幾十幾百K。
執行環境複雜
物聯網作業系統執行的環境有如下特點:第一,跑在種類繁多的晶片架構上;第二,執行在記憶體一般偏小的環境;第三,受限於功耗硬體效能低下。這些特性給我們做程式碼安全提出了不小的挑戰。在引入我們新型的程式碼加密方案之前,我們先看看歷史方案的做法以及缺陷。
傳統黑盒程式碼加密及侷限
首先,我們科普兩個簡單的概念。黑盒程式碼加密處理的物件是最終的軟體執行體,它們都是以二進位制的方式存在,比如Windows的exe、Android的so以及dex;白盒程式碼加密處理的物件是原始碼,它們都是以文字的方式存在,需要用對應的編譯器才能轉換成二進位制,比如C/C++/Objecti-