常天佑 朱濤 宋健 谷廣宇



摘? 要: 嵌入式IoT設備系統種類多差別大,系統存在危險數據過濾不嚴格的風險大,攻擊者可通過精心構造的惡意數據包獲取系統的控制權。嵌入式系統的安全性已逐漸成為設備被廣泛采納的最大障礙。針對命令注入型漏洞與程序接收數據密切相關這一特征,本文通過對嵌入式通用網關接口(Common Gateway Interface,CGI)程序接收的數據進行數據流分析,使用污點分析技術研判程序接收的數據是否能夠不經無害處理而到達系統敏感函數,達到檢測CGI程序是否存在命令注入漏洞的目的。
關鍵詞: CGI; 嵌入式; 污點分析; 漏洞挖掘
中圖分類號:TP313.3? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2023)04-01-04
Abstract: Embedded IoT devices have many different kinds of systems, and there is a high risk that the system is not strictly filtered with dangerous data. Attackers can gain control of the system through carefully constructed malicious data packets. Security of embedded systems is emerging as the biggest barrier to widespread adoption. In view of the feature that the command injection vulnerability is closely related to the data received by the program, the data flow received by the embedded common gateway interface (CGI) program is analyzed, and the taint analysis technique is used to determine whether the data received by the program can reach the system sensitive function without harmless processing. The purpose of detecting whether the CGI program has command injection vulnerability is achieved.
Key words: CGI; embedded; taint analysis; vulnerability mining
0 引言
近年來,智能制造,智能家居,智慧醫療等智能化應用推動了越來越多的智能化設備接入互聯網,在IoT Analytics研究報告中預計,到2025年,將有大約270億臺物聯網設備通過網絡互聯,這些網絡互聯的物聯網設備大部分都采用嵌入式系統。未來物聯網嵌入式設備的應用范圍將不斷被拓寬,隨之而來的是大規模安全漏洞[1-4]的出現,這一趨勢給物聯網的發展帶來極大的挑戰。
據360公開安全研究報告顯示,與IoT設備相關的漏洞增長率比漏洞整體增長率高出14.7%[5]。相關研究發現,小而精、低功耗是IoT嵌入式設備追求的目標,因而導致缺少完善的安全機制和防護手段,IoT嵌入式設備的安全隱患逐漸成為其被廣泛采納的最大障礙。在物聯網設備入網前和入網后,發現漏洞并及時修復漏洞,可以保障物聯網設備的安全性。因此,研究IoT嵌入式系統的漏洞挖掘具有極為重要的學術意義和實際應用價值。
針對嵌入式設備的漏洞挖掘是當前網絡安全的研究熱點之一。已有的研究如基于源代碼相似性檢測,是根據已知漏洞代碼特征匹配進行大規模漏洞挖掘[6-8],但這種漏洞挖掘需要提供程序源代碼。COSTIN等在文獻[9]中提出使用靜態分析方法,根據已知漏洞特征對大規模固件進行漏洞挖掘,該方法對已知漏洞的檢測有一定的效果,但是無法檢測到未知的漏洞。學術界比較推崇的是符號執行[10],符號執行分為動態符號執行和靜態符號執行,它能夠以盡可能少的測試用例達到一定的代碼覆蓋率,但符號執行面臨路徑空間爆炸和狀態空間爆炸問題[11],它的開銷非常大。工程界比較推崇基于fuzzing的模糊測試技術,由于嵌入式系統無論在帶寬處理還是計算資源上都遠低于傳統PC系統,Fuzzing這種在傳統PC領域非常成熟的技術對帶寬資源和計算資源要求都非常高,而仿真嵌入式系統是一件具有挑戰的事情,仿真環境通常對系統配置的依賴較多,嵌入式設備的多樣性使得仿真難以具備通用的配置。CHEN等在文獻[12]提出基于已知特征進行系統級仿真環境漏洞檢測的方法。由于仿真環境對系統配置的依賴較多,因而該實驗證明了嵌入式設備的多樣性會使得仿真難以具備通用的配置。在NDSS 2016上推出一個開源工具Firmdyne[13],其在虛擬嵌入式系統方面做出較大的貢獻,但該工具僅適用部分品牌路由器系統的虛擬復現。
本文提出了基于污點分析的嵌入式CGI程序命令注入漏洞挖掘方法,采用污點分析技術研判程序接收的數據是否能夠不經無害處理而到達系統敏感函數,以此檢測出CGI程序是否存在命令注入式漏洞。實驗結果表明本文提出的方法能夠有效挖掘嵌入式CGI程序的命令注入式漏洞。
1 CGI程序的污點分析技術
1.1 CGI程序運行原理
CGI是Web服務器運行時外部程序的規范,按照CGI編寫的程序可擴展服務器功能。CGI程序運行在HTTP服務器中,為HTTP服務器與其他第三方應用程序之間提供數據交換手段。程序的大部分采用C語言編寫,通過系統函數調用來控制設備,以此達到靈活高效又能操控設備的目的。
如圖1所示,Web服務器發送HTTP請求Request到CGI進程,CGI進程把HTTP請求的Header設置為進程的環境變量。HTTP請求的Body正文設置為進程的標準輸入,CGI進程的標準輸出作為HTTP數據包響應Web服務器的請求,這樣CGI程序獲取瀏覽器參數在完成業務邏輯運算或執行相關動作后返回瀏覽器。其中環境變量是指 CGI 程序定義的一組環境變量,通過環境變量可傳遞數據。常用CGI程序環境變量如表1所示。
根據REQUEST_METHOD變量值可判斷CGI請求所采用的請求方法,以決定是通過Stdin還是通過環境變量QUERY_STRING獲取客戶端傳輸數據。當使用ISINDEX查詢或FORM表使用GET方法時,可以通過QUERY_STRING環境變量獲取CGI程序URL中″?″之后的數據;當環境變量METHOD為POST時,CGI 程序通過標準輸入STDIN 讀取數據獲取POST表單信息。通過CONTENT_LENGTH環境變量獲取獲取傳輸數據的字節數,通過CONTENT_TYPE環境變量獲取傳輸數據的編碼類型。CGI程序通過函數environ可以獲得所有的環境變量及其值,通過函數getenv可以獲得指定環境變量的對應值。
1.2 CGI程序的污點分析思路
污點分析作為數據流分析的實踐,是漏洞挖掘的一種有效方法[14],它標記不可信數據為污點數據,通過數據流分析的方法,監控污點數據在程序中的傳播以判斷是否存在命令執行、信息泄露等違反安全的操作。本文采用污點分析的方法,通過分析CGI程序接收的HTTP請求數據包能否以不受限制的方式傳播到系統敏感函數,來研判CGI程序是否存在命令注入漏洞。污點分析可以抽象成三元組
如圖2所示,CGI程序通過getenv函數獲取環境變量的值,該數據值作為程序接收的數據是數據流分析的關鍵。另外Body內容作為程序標準輸入的數據也是數據流分析的重點對象。這些數據作為污點分析抽象三元組的source污染源部分,被視為外部引入的不信任數據。sink污點匯聚點代表直接產生危險的敏感操作,對于嵌入式CGI程序,重點關注system-like此類系統敏感函數。
如圖3所示,system-like系統調用函數的參數作為污點匯聚點是污點分析的最終節點。接下來CGI程序的污點分析就是分析程序中環境變量值和標準輸入值是否能夠不經無害處理傳播到污點匯聚點,即system-like函數參數。如果能,說明程序能夠產生命令注入式安全問題,否則不存在命令注入式安全問題。
1.3 CGI程序的污點分析算法
污點分析算法作為系統的核心,通過解析環境變量和輸入數據進行污染源的識別;通過污染源更新和標記更新進行污點標記的傳播;通過解析系統函數參數進行匯聚點的識別。最后以匯聚結點是否檢測到污點標記來判斷程序是否存在命令注入式安全問題,算法如下。
污點分析算法以CGI程序作為輸入,利用IDA分析引擎反匯編出程序指令集,識別污點輸入源函數,匯聚結點函數,然后針對每一條指令進行污點標記和污點更新,最后以匯聚結點是否檢測到污點標記來判斷程序是否存在命令注入式安全問題。
2 實驗分析
為驗證本文提出方法的有效性,本文在angr工具的基礎上實現原型系統,使用IDA Pro腳本反編譯解析CGI程序。
2.1 實驗環境設置
實驗采用Linux虛擬機,配置intel I7 CPU,內存16G,磁盤64G,操作系統為Ubuntu18.04,完成CGI程序污點源識別、污點標記傳播,匯聚點識別等實驗。
2.2 實驗對象選擇
通過固件下載和硬件讀取的方式收集多個廠家共38個嵌入式設備的CGI程序,詳見表2。選取以下CGI程序作為測試集來進行實驗分析,以此驗證本文方法的可行性和有效性。
2.3 實驗可行性測試
本文選取DIR-815_A1_FW:v1.02b06固件的CGIBIN程序作為測試對象進行分析,該程序存在CNVD-2018-01084遠程命令注入式漏洞。利用binwalk提取固件中的CGIBIN程序,在IDA pro7.5中反編譯結果如圖4所示。
原型系統每執行一條程序指令均進行污點傳播標記,部分污點傳播記錄如圖5所示。
最終原型系統發出了警告,經分析可以看到程序在0x40DF78處引發了漏洞,如圖6所示。
通過上述實驗結果,能夠發現DIR-815_A1_FW:v1.02b06固件中的CGI程序存在命令注入式漏洞,同時在測試其他的CGI程序時具有類似的結果,驗證了本文提出的方法是可行的和有效的。
3 結束語
針對IoT嵌入式系統漏洞突出,人工手段難以應對大量的、類型多樣IoT嵌入式系統的漏洞挖掘,本文針對嵌入式CGI程序命令注入此類典型漏洞,首先對CGI程序的工作原理和環境變量進行分析,然后重點介紹了CGI程序污點分析的思路并設計污點分析的算法,最后通過實驗驗證本文提出的方法能夠有效挖掘嵌入式CGI程序的命令注入漏洞。
參考文獻(References):
[1] HO G, LEUNG D, MISHRA P, et al. Smart locks: Lessons for securing commodity internet of things devices[C]//Proceedings of the 11th ACM Asia Conference on Computer and Communications Security. New York: ACM,2016:461-472
[2] GARTNER. Internet of things (IoT) market[EB/OL].[2017-07-10].https://www.gartner.com/newsroom/id/3598917.
[3] CONSTANTIN L. Hackers found 47 new vulnerabilities in 23 IoT devices at DEFCON [EB/OL]. [2017-05-23].http://www.Csoonline.com/article/3119765/security/hackers-found-47-new-vulnerabilities-in-23-iot-devices-at-defcon.html.
[4] NAWIR M, AMIR A, YAAKOB N, et al. Internet of things(IoT): Taxonomy of security attacks[C]//2016 3rd International Conference on Electronic Design.Piscataway:IEEE,2016:321-326
[5] 360,典型IoT設備網絡安全分析報告,2021
[6] LI H, KWON H, KWON J, et al. CLORIFI: software vulnerability discovery using code clone verification[J]. Concurrency and Computation Practice and Experience,2016,28(6):1900-1917
[7] 甘水滔,秦曉軍,陳左寧,等.一種基于特征矩陣的軟件脆弱性代碼克隆檢測方法[J].軟件學報,2015,26(2):348-363
[8] LI Z, ZOU D, XU S, et al. VulPecker: an automated vulnerability detection system based on code similarity analysis[C]//Conference on Computer Security Applications. Los Angeles: ACM,2016:201-213
[9] COSTIN A, ZADDACH J, FRANCILLON A, et al. Alarge-scale analysis of the security of embedded firmwares[C]//Proceedings of the 23rd USENIX conference on Security Symposium. Berkeley: USENIX Association,2014:95-110
[10] Libo C, Quanpu C, Zhi X.Sharing More and Checking Less: Leveraging Common Input Keywords to Detect Bugs in Embedded Systems[C]//USENIX Security,2021
[11] 葉志斌,嚴波.符號執行研究綜述[J].計算機科學,2018
[12] CHEN D D, WOO M, BRUMLEY D, et al. Towards?automated dynamic analysis for linux-based embedded firmware[C]//Proceedings of Network and Distributed Systems Security Symposium.Reston:ISOC,2016:1-16
[13] Chen D D, Woo M, Brumley D, et al. Towards Automated Dynamic Analysis for Linux-based Embedded Firmware[C]//NDSS,2016
[14] 王蕾,李豐,李煉,等.污點分析技術的原理和實踐應用[J].軟件學報,2017,28(4):860-882
作者簡介:常天佑(1992-),男,河南遂平人,研究生,助理工程師,主要研究方向:網絡安全。