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