# [Vulnerability Detection Algorithm of Lightweight Linux Internet of Things Application with Symbolic Execution Method](https://ieeexplore.ieee.org/abstract/document/9603596?casa_token=K_GBC8-V-eUAAAAA:L5GsIkSIHhHrwjs1VrZBctwLafoZckgqIKPDllrCDRcFSNmgLTfprnlwfFIZHrm-GI1w_3gk)
## Abstract
* 漏洞檢測靠人工分析效率低,準確度難以保證
* 本文提出基於符號執行的自動化漏洞檢測技術
* 用於小型 IoT 裝置的輕量應用
* 實現三種功能
* buffer overflow detection
* encryption reliability detection
* protection state detection
* 實驗檢測演算法的 robustness
* buffer overflow 可在 2.75 秒內檢測
* encryption reliability 可在 1.79 秒內檢測
* 多個資料重複測試,誤差時間不超過 6.4 毫秒
## Introduction
* 為了提前檢測和修復漏洞,有幾種測試方法
* 靜態分析
* 動態分析
* 汙點分析
* 符號執行
* 模糊測試
* 隨著黑箱 fuzzing 的出現,自動檢測逐漸取代手動檢測
* 本文設計了針對 lightweight applications 的檢測演算法,利用符號執行進行漏洞檢測。
* 實驗證明了有效性和準確度
## Symbolic Execution Detection Algorithm Construction
* 用於 Linux 環境
* 提出三種功能
* buffer overflow detection
* encryption reliability detection
* protection state detection
* 
* 使用 angr,利用約束器限制符號變數的執行路徑,進而得到期望的結果
### Overflow Vulnerability Detection Design
* 32-bits 和 64-bits 的都能夠使用
* 檢測方式是觀察是否存在無約束狀態的路徑
* 設計原則是適當分配系統資源,當執行時記憶體空間分配錯誤,就容易出現不受約束的狀態,觸發 buffer overflow 漏洞
### Program Encryption Vulnerability Detection Design
* 使用加密演算法來驗證輸入的密碼是最常見的加密保護形式之一
* 將符號變數當作參數去跑 function,約束變數到驗證成功的路徑後,求解約束條件
* 如果解得出來,代表該驗證方式不可靠
### Protection Opening Verification Design
* 可以辨識 ELF 文件的保護狀態
* aslr
* arch
* canary
* got
* nx
* pie
* plt
* relro
* 如有發現漏洞會進行修復
## Test and Result Analysis
* 為了測試符號執行的有效性和穩健性(robustness),用 C 寫了幾個易受攻擊的程式,並用 GCC 編譯成 ELF
### Automated Overflow Vulnerability Detection
* 程式中有兩個漏洞函數,會因空間分配錯誤觸發漏洞
* 實驗結果有成功找出漏洞
* 
### Encryption Vulnerability Detection
* 需要先透過靜態分析(應該是手動)找出目標地址,如果符號執行能遍歷到該 function,就嘗試反解出密鑰
### Program Robustness Tests
* 為了測試 robustness,測試包含兩種不同類型的程式,分析十組連續檢測的時間
* 
* 基礎測試上,波動不超過 2.9 豪秒(藍線)
* 多參數檢測上,波動不超過 6.4 毫秒(橘線)
* 兩組不同程式分析時間都呈線性,表示檢測能力穩定
* 
* 在 32-bit 和 64-bit 上檢測花費的時間也都在 0.7~0.8 秒左右,差異很小,表示該檢測方式的通用性強
## Conclusion
* 本文設計了一個基於符號執行的漏洞檢測方式,可用於輕量物聯網應用程式
* 實驗證明有良好的準確性和 robustness
* 複雜的程式可能會遇到路徑爆炸的問題是後續的研究方向
###### tags: `paper`