# [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 * ![](https://i.imgur.com/hvXXGKa.png) * 使用 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 * 程式中有兩個漏洞函數,會因空間分配錯誤觸發漏洞 * 實驗結果有成功找出漏洞 * ![](https://i.imgur.com/R2YWcqR.png) ### Encryption Vulnerability Detection * 需要先透過靜態分析(應該是手動)找出目標地址,如果符號執行能遍歷到該 function,就嘗試反解出密鑰 ### Program Robustness Tests * 為了測試 robustness,測試包含兩種不同類型的程式,分析十組連續檢測的時間 * ![](https://i.imgur.com/SjwExWE.png) * 基礎測試上,波動不超過 2.9 豪秒(藍線) * 多參數檢測上,波動不超過 6.4 毫秒(橘線) * 兩組不同程式分析時間都呈線性,表示檢測能力穩定 * ![](https://i.imgur.com/4mNzf4p.png) * 在 32-bit 和 64-bit 上檢測花費的時間也都在 0.7~0.8 秒左右,差異很小,表示該檢測方式的通用性強 ## Conclusion * 本文設計了一個基於符號執行的漏洞檢測方式,可用於輕量物聯網應用程式 * 實驗證明有良好的準確性和 robustness * 複雜的程式可能會遇到路徑爆炸的問題是後續的研究方向 ###### tags: `paper`