# 虛擬化高效安全 CI ### 一、前言 為了使生活更加的便利,物聯網設備蓬勃發展,結合 5G 時代的到來,物聯網設備正處於高速發展期,目前全球已經有數億台物聯網裝置連接於網路中,且不斷有新的裝置加入中,如此龐大的裝置數量吸引了攻擊者的注意,如 圖1 所示,攻擊者透過挖掘可利用的漏洞入侵 IoT 裝置,更進一步威脅到內網其他設備,且物聯網設備往往為了降低成本,給予的計算資源並不多,因此目前尚未存在成熟且通用的物聯網裝置防護策略,環境的脆弱使攻擊者有相當多發揮的機會。 因此如何在開發物聯網設備時,盡可能的減少所有易遭受利用的漏洞出現,變成一個重要的議題,為了改善這一系列開發上的問題及繁雜的步驟,我們提出了一套虛擬化高效安全 CI 流程,在開發建置階段透過新穎的 IoT 模擬技術,為開發者自動化的進行漏洞測試,使開發者在開發物聯網裝置應用程式上帶來諸多的便利。 * 圖1 IoT 攻擊流程 ![](https://i.imgur.com/8k1XfBv.png) ### 二、創意描述 * 將完整漏洞測試導入 IoT CI 流程內 * 為了加速 IoT 設備內部 application 的開發,及提升整體 IoT 環境的安全性,我們將漏洞檢測的機制導入 CI (Continuous Integration)的流程,並針對每一個 IoT 裝置提供合適且統一的環境進行建置,減少開發者因環境不同產生不可預期的錯誤,除了原本安全開發流程,在 CI 階段時所做的靜態分析之外,我們更進一步完成原本在 CD 部屬階段所進行的動態分析,由於透過虛擬化技術,建構出與實際 IoT 設備相同的測試環境,可提前於 CI 階段進行完整的靜態加動態分析(如 圖2 所示),與普通流程相比,可快速且自動化的取得測試結果的回饋,不但增加產品的安全性,也加速完整產品的開發流程。 ![](https://i.imgur.com/7IOFInk.png) <br> * 透過 IoT 韌體模擬技術,協助動態分析執行 * 動態分析由於可以直接觀察到程式執行的行為,因此可以探索到有別於靜態分析的結果,但是由於動態分析需要將程式執行起來,並且需要在 IoT 設備內部執行,測試結果才有其參考價值,因此我們導入 IoT 設備韌體模擬技術,於系統本機內部建構出近似 IoT 設備的系統環境,並將程式置此系統內部執行,成功執行後對其進行動態分析,最終回報探索到的結果,開發者可針對此結果修改錯誤或是具有漏洞的程式碼。 ### 三、系統功能簡介 * 圖3 系統架構 ![](https://i.imgur.com/z2jQ2DD.png) * Web Service * 提供 IoT 開發者合適的操作介面 * 上傳 IoT application source code * 查看漏洞測試分析結果 * 靜態分析及建置 * 根據 Source code 進行靜態分析 * 根據目標 IoT 裝置設定合適建置環境 * 韌體模擬及動態分析 * 模擬目標 IoT 裝置 * 針對待檢測 Application 進行動態分析 * 圖4 系統執行流程圖 ![](https://i.imgur.com/OPvnj4z.png) ### 四、系統特色 * Web Service 本系統透過網頁服務提供 IoT application 開發者上傳其 source code,並可以選擇所建置的 application 是屬於哪個 IoT 設備的,待分析完畢後即可透過網頁查看分析結果。 * 圖5 網頁上傳畫面 ![](https://i.imgur.com/PbDiw2K.png) * 圖6 分析結果呈現畫面 ![](https://i.imgur.com/WvF2YcG.png) * Static Analysis 開發者上傳 source code 之後將會進行靜態分析,發覺如:Integer Overflows、Out of bounds...等問題,靜態分析後的結果將會更新至資料庫中,靜態分析結束後,將會根據開發者所選擇的 IoT 設備,選用合適的編譯環境對其進行建置,並建置後的執行檔放入虛擬環境中進行後續測試。 * Firmware Emulation 本系統透過官方合法公開的 IoT 設備韌體,提取韌體內所需資訊,經過合適的設定,透過開源模擬器 QEMU 將實際存在的 IoT 設備,以虛擬化的方式在 Server 上啟動,提供合適的系統環境以便開發者測試 application。如圖7,成功透過官方韌體啟動 IoT 設備,並可透過 shell 執行指令。 <br>傳統上若要進行開發測試需透過實際硬體設備,但是若是透過實體設備進行漏洞測試,將會遇到幾個問題,首先,若是測試過程中不慎將實體設備損壞,將會造成開發的成本增加,其次如果透過實體設備進行測試,開發過程難以擴大規模,會受到硬體設備的數量限制,以及測試能力會受到 IoT 設備本身硬體資源限制,除上述所說還有其他種種限制,若是以虛擬化設備進行測試,上述缺點將可被解決。 <br>圖7 韌體模擬畫面(Netgear IoT 設備) ![](https://i.imgur.com/8zu60iT.png) * Dynamic Analysis 在此階段同樣根據開發者所選取的設備,啟動相應的虛擬 IoT 設備,並且在此虛擬的 IoT 設備中,執行先前建置完的執行檔,接著對其進行動態分析,動態分析後的結果將會更新至資料庫中,並且連同靜態分析後的結果一同回傳至網頁中,呈現給開發者。 * Fuzzing 針對非 Linux-Based 的應用程式,使用模糊測試以檢查應用程式是否會存在導致 Crash 或 Hang 的錯誤。 本系統透過虛擬化設備進行動態測試,由於不須實體設備的支持,可提前於部屬階段之前進行動態測試,在CI階段中即可完成靜態以及動態測試,是為較全面性的漏洞分析,將可為安全開發盡一份心力,且由於所有的測試皆為自動化的進行,IoT開發者僅需上傳 source code 即可取得結果,有效節省開發及測試的時間成本,適合IoT設備如此快速發展的領域。 ### 五、系統開發工具與技術 #### 使用語言 Shell Script、Python、PHP、HTML5、CSS3 #### 開發技術 Firmware Emulation、Static Analysis、Dynamic Analysis、Fuzzing #### 使用框架及軟體 Laravel、MySQL、Bootstrap、jQuery、Nginx、Buildroot、QEMU、Binwalk、Cppcheck、RouterSploit、AFL、P2IM、FirmAE ### 六、系統對象 本系統主要針對 IoT 設備內部 application 開發提供一系列的服務,因此主要使用者將會是 IoT 設備的開發團隊與系統廠商。 ### 七、系統環境 系統架設環境:Ubuntu 18.04 系統使用環境:不限,僅需擁有瀏覽器即可 ### 八、結語 IoT設備數量近年來急遽增長,IoT 設備遭受攻擊的事件也頻繁發生,但受限於設備本身的可用資源,導致設備的安全性脆弱,除了尋找可行的防護策略之外,如何在開發流程中盡可能的減少漏洞存在機率更是不可忽視的一環,本系統可於 application 在開發流程中實際部屬之前完成靜態及動態分析,且動態分析為透過虛擬化設備完成,無須受限於實際硬體,可大幅擴展測試規模,整體流程皆自動化完成,建構出安全且快速的 CI 流程。