---
# System prepended metadata

title: 大學專題研究
tags: [公開]

---

# 結合虛擬化 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流程。