# 虛擬化高效安全 CI ### 一、前言 為了使生活更加的便利,物聯網設備蓬勃發展,結合 5G 時代的到來,物聯網設備正處於高速發展期,目前全球已經有數億台物聯網裝置連接於網路中,且不斷有新的裝置加入中,如此龐大的裝置數量吸引了攻擊者的注意,如 圖1 所示,攻擊者透過挖掘可利用的漏洞入侵 IoT 裝置,更進一步威脅到內網其他設備,且物聯網設備往往為了降低成本,給予的計算資源並不多,因此目前尚未存在成熟且通用的物聯網裝置防護策略,環境的脆弱使攻擊者有相當多發揮的機會。 因此如何在開發物聯網設備時,盡可能的減少所有易遭受利用的漏洞出現,變成一個重要的議題,為了改善這一系列開發上的問題及繁雜的步驟,我們提出了一套虛擬化高效安全 CI 流程,在開發建置階段透過新穎的 IoT 模擬技術,為開發者自動化的進行漏洞測試,使開發者在開發物聯網裝置應用程式上帶來諸多的便利。 * 圖1 IoT 攻擊流程  ### 二、創意描述 * 將完整漏洞測試導入 IoT CI 流程內 * 為了加速 IoT 設備內部 application 的開發,及提升整體 IoT 環境的安全性,我們將漏洞檢測的機制導入 CI (Continuous Integration)的流程,並針對每一個 IoT 裝置提供合適且統一的環境進行建置,減少開發者因環境不同產生不可預期的錯誤,除了原本安全開發流程,在 CI 階段時所做的靜態分析之外,我們更進一步完成原本在 CD 部屬階段所進行的動態分析,由於透過虛擬化技術,建構出與實際 IoT 設備相同的測試環境,可提前於 CI 階段進行完整的靜態加動態分析(如 圖2 所示),與普通流程相比,可快速且自動化的取得測試結果的回饋,不但增加產品的安全性,也加速完整產品的開發流程。  <br> * 透過 IoT 韌體模擬技術,協助動態分析執行 * 動態分析由於可以直接觀察到程式執行的行為,因此可以探索到有別於靜態分析的結果,但是由於動態分析需要將程式執行起來,並且需要在 IoT 設備內部執行,測試結果才有其參考價值,因此我們導入 IoT 設備韌體模擬技術,於系統本機內部建構出近似 IoT 設備的系統環境,並將程式置此系統內部執行,成功執行後對其進行動態分析,最終回報探索到的結果,開發者可針對此結果修改錯誤或是具有漏洞的程式碼。 ### 三、系統功能簡介 * 圖3 系統架構  * Web Service * 提供 IoT 開發者合適的操作介面 * 上傳 IoT application source code * 查看漏洞測試分析結果 * 靜態分析及建置 * 根據 Source code 進行靜態分析 * 根據目標 IoT 裝置設定合適建置環境 * 韌體模擬及動態分析 * 模擬目標 IoT 裝置 * 針對待檢測 Application 進行動態分析 * 圖4 系統執行流程圖  ### 四、系統特色 * Web Service 本系統透過網頁服務提供 IoT application 開發者上傳其 source code,並可以選擇所建置的 application 是屬於哪個 IoT 設備的,待分析完畢後即可透過網頁查看分析結果。 * 圖5 網頁上傳畫面  * 圖6 分析結果呈現畫面  * 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 設備)  * 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 流程。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.