穆超,王鑫,楊明,張恒,陳振婭,吳曉明
面向物聯網設備固件的硬編碼漏洞檢測方法
穆超1,王鑫1,楊明1,張恒2,陳振婭1,吳曉明1
(1. 齊魯工業大學(山東省科學院)山東省計算中心(國家超級計算濟南中心)山東省計算機網絡重點實驗室,山東 濟南 250014;2. 江蘇海洋大學計算機工程學院,江蘇 連云港 222005)
隨著物聯網設備的普及,越來越多有價值的數據產生,依托物聯網設備進行大數據分析和挖掘是近年來學術界和工業界關注的熱點問題。然而,由于缺乏必要的檢測和防護手段,很多物聯網設備存在嚴重的信息安全隱患。特別地,設備硬編碼信息與系統加解密、身份認證等功能密切相關,可為核心數據提供機密性保障,一旦被惡意攻擊者利用,會產生敏感信息泄露、后門攻擊、非授權登錄等嚴重后果。針對該問題,在研究物聯網設備中硬編碼漏洞表現特征的基礎上,提出了一種可執行文件中多類型字符識別定位和硬編碼漏洞檢測方法。首先,提取固件內容并篩選所有可執行文件作為待分析源,提出特殊格式字符、外部文件引用、密碼實現3類硬編碼字符的識別與定位;然后,根據函數調用關系對硬編碼字符所在函數進行可達性分析,采用中間表示IR模型消除指令異構性,并利用數據流分析方法確定字符型和參數型硬編碼值;最后,設計符號執行方法確定硬編碼漏洞的觸發條件,最終輸出漏洞檢測結果。一方面,所提方法在利用中間表示模型的基礎上引入了符號執行的方法,消除了指令架構依賴性,減少了漏洞誤報率;另一方面,該方法可融合字符、文件、密碼實現3類硬編碼字符的不同特征表現,增加了漏洞檢測的覆蓋范圍,提升了檢測方法的通用性。實驗結果表明,所提方法可有效檢測多種物聯網設備中的字符、文件、密碼3類硬編碼漏洞,具有較好的檢測精度,可為后續安全防護技術的部署提供一定指導。
大數據;物聯網安全;硬編碼;漏洞檢測
隨著大數據技術的迅猛發展,以數據為依托的大數據應用技術不斷完善,同時大數據帶來的隱私泄露等安全問題日益突出,數據的采集、傳輸、存儲、應用等各個環節都需要進行數據安全的保障工作。在數據采集階段,物聯網設備擁有豐富的傳感器和感知器,是獲取各項指標、屬性等重要參數的數據終端,亦是大數據應用的數據來源[1]。因此,為獲得真實可靠的數據資源,研究物聯網終端設備安全具有重要意義。
然而,物聯網設備生產廠商急于推出產品搶占市場,缺乏系統上線前產品的安全檢測,導致物聯網產品存在大量的漏洞;另外,廠商產品中缺少安全防護模塊,難以應對不斷演化的惡意攻擊行為。進一步,規模龐大的物聯網設備暴露在公網中,這些設備存儲著海量的用戶數據,一旦被惡意攻擊者控制,會導致嚴重的用戶隱私泄露,從而引發更嚴重的網絡攻擊。例如,在2016年的Mirai僵尸網絡攻擊事件[2]中,攻擊者攻陷了數以萬計的物聯網設備,并以此為節點發動分布式拒絕服務(DDoS,distributed denial of service)攻擊,最高攻擊峰值達到1 Tbit/s,造成大量主流網站癱瘓。
近幾年,研究者在物聯網安全領域做了大量工作[3-5],主要研究方向包括物聯網設備通信協議缺陷分析[6-8]、物聯網云平臺安全[9-11]和物聯網固件漏洞檢測[12-16],重點研究了內存泄露、代碼注入、認證繞過、信息泄露等安全問題。在這些工作中,針對物聯網設備中可執行文件的硬編碼漏洞研究還處于初級階段。硬編碼與系統的授權認證、密碼保護等模塊有重要關系,這些模塊中包含保障物聯網安全的核心組件,提供數據加解密、數字證書應用和身份認證等功能,對于保證物聯網設備核心數據的機密性、保障關鍵信息的完整性和可用性至關重要。若這些組件本身存在安全問題,一旦被攻擊者利用,會引發嚴重的安全事故,威脅人身財產安全。例如,F-Secure公司的研究人員發現在Foscam C2和Opticam I5的網絡攝像頭中,存在多處硬編碼漏洞[17],可導致非授權用戶遠程訪問,造成持續性的網絡攻擊。
針對硬編碼漏洞的檢測,通常采用漏洞特征提取與靜態分析結合的技術。在現有研究中,Thomas等[18]提出了一種靜態分析方法測量單個靜態數據對固件中二進制文件控制流程的影響,識別二進制文件中的靜態數據對比函數,并使用靜態數據序列集標記每個函數的基礎塊和可達性,從而確定硬編碼身份認證后門。該方案測試樣本較少,無法保證在大規模測試中的適用性。Shoshitaishvili等[19]研發了一種支持物聯網設備運行和分析的工具Firmalice,基于符號執行引擎Angr[20]和程序切片技術增加漏洞分析的可擴展性,根據攻擊者的輸入控制能力檢測硬編碼型的認證繞過漏洞,但該工具需要人工設置安全策略,對先驗知識有較強的依賴性。
在現有針對硬編碼漏洞檢測的研究工作中,大多考慮特定的物聯網設備,存在樣本數量較少的問題,且在特定格式敏感字符與硬編碼外部文件引用的檢測方面存在較大不足,缺乏密碼模塊硬編碼漏洞檢測的深入研究。現有安全事件表明,某些特定格式字符(如WPS PIN碼、IP地址、郵箱)被攻擊者獲知,可幫助其構造更復雜更高級的攻擊方案;密鑰硬編碼文件的泄露可造成設備的授權繞過、加密數據被解密、協議信道被攻破等問題;密碼模塊是物聯網設備安全建設的重要支柱,也是漏洞檢測的重中之重,而現有針對密碼理論和密碼實現中的硬編碼漏洞研究較欠缺,存在嚴重的安全隱患。因此,亟須開展針對物聯網設備硬編碼漏洞的安全檢測研究。
本文提出一種面向物聯網設備固件的硬編碼漏洞檢測方法,可以自動化實現硬編碼字符識別和硬編碼漏洞檢測。首先,獲取和解析物聯網固件文件,并篩選所有可執行文件。本文考慮3種硬編碼型漏洞,對特定格式字符串、外部引用文件和密碼實現中的硬編碼字符進行識別和定位,結合函數調用關系進行函數可達性分析,采用中間表示(IR,intermediate representation)形式模型解決固件異構問題,生成核心函數控制流程圖(CFG,control flow graph),并利用符號執行引擎進行約束求解,最終獲得硬編碼漏洞觸發條件。
本文的主要貢獻如下。
1) 提出一種針對硬編碼漏洞的檢測方法,識別和定位特定硬編碼字符,判斷函數調用可達性,定位敏感函數中關鍵參數的數據流和分析符號執行,實現硬編碼漏洞的精準識別和檢測。
2) 設計并構建一種面向物聯網設備固件的硬編碼漏洞檢測系統,實現3種類型的硬編碼漏洞檢測(可導致安全風險的特殊格式硬編碼字符、敏感文件的外部引用、使用硬編碼參數的不安全密碼函數實現),該系統具備良好的可擴展性和適用性。
3) 基于構建的硬編碼漏洞檢測系統,對多類真實物聯網設備固件進行了處理和安全性分析,成功地在多個固件中檢測出硬編碼漏洞。
目前針對物聯網設備固件漏洞的檢測與分析已有大量的研究工作,其中與本文研究內容相關的研究方案主要包括動態分析和靜態分析。
動態分析指通過將固件程序加載到實際設備或仿真環境中,融合模糊測試等技術生成測試用例,并根據程序實時運行狀態來分析和挖掘漏洞的技術。FIRM-AFL[21]是目前主流的物聯網固件仿真工具,可以實現大量基于Linux內核的固件全系統仿真,但支持的系統架構有限,且無法支持實時操作系統。Avatar[22]實現了軟硬件混合的仿真系統,通過連接模擬器和真實硬件完成指令操作,但軟硬件之間的頻繁交互使得仿真時效性較差。IoTFuzzer[23]通過分析物聯網設備的App來挖掘內存漏洞,但僅局限于分析有對應App的物聯網設備,且代碼覆蓋率不高。總之,動態分析受制于物聯網設備有限的存儲和計算資源,以及需要適配復雜異構的硬件環境,這增加了動態分析的難度。
靜態分析的分析對象是程序源碼和二進制文件,通過逆向提取固件文件系統,搭建檢測模型,結合程序分析技術等實現挖掘漏洞。Karonte[24]首先提取二進制文件中的用戶請求模塊,追蹤進程間通信數據流的傳播過程并建立二進制依賴圖(BDG,binary dependency graph),采用跨文件污點分析方法檢測不安全的數據流。SaTC[25]通過Web服務的前端搜索用戶輸入的關鍵字,并根據該數據流定位處理輸入的后端代碼,利用敏感字符污點分析來發現非可信輸入和危險應用。上述研究主要針對用戶輸入的安全檢測,卻忽略了系統中的硬編碼會存在安全威脅。Mu等[26]采用函數特征提取以及改進的指令統計方法來識別物聯網中的密碼函數,并通過調用關系圖分析函數應用場景,該研究主要集中在對物聯網固件中密碼函數的識別,并未檢測密碼函數實現中是否存在缺陷。FIE[27]通過符號化思維,建立終端統一描述進行符號執行分析,可提升分析覆蓋率,但對源碼有較強的依賴性,且未考慮密碼實現中的安全問題。
本節介紹關于物聯網設備固件中硬編碼字符識別和硬編碼漏洞檢測的背景知識。
程序源代碼需經編譯器編譯為二進制可執行文件,該過程與所選編譯器、編譯配置選項、編譯優化選項等相關;由于物聯網設備存在不同的系統架構,編譯生成的二進制可執行文件具有完全不同的匯編代碼形式,增加了調試分析程序的難度。為解決不同編譯選項、不同系統架構所帶來的異構難題,選擇將二進制可執行文件反編譯后進行中間表示轉換:將不同架構匯編代碼統一轉化為同一種中間語言,通過對中間語言表示的優化和分析,克服異構分析協調的挑戰。
對二進制可執行文件的分析主要步驟有:解碼文件指令,翻譯為帶語義的特定格式語言。針對特定系統架構的解碼器在該架構下擁有詳細的指令系統,但其具有較強的指令依賴性,難以移植;可支持多處理器體系架構的通用解碼器,其對指令的表示和描述具有一致性。
本文選擇Angr工具中基于Valgrind[28]實現的PyVEX模塊構建中間表示,其支持對多種架構的抽象,并具有豐富的API接口,包括寄存器、堆棧結構、常量、算術運算與邏輯運算等指令和結構的分析和調用。
本文采用數據流分析方法,定位已轉為中間語言的待檢函數參數等數據,對參數在執行過程中的賦值與調用等操作進行分析,以檢測硬編碼型缺陷。
數據流分析是一種針對數據在程序執行路徑上的分析溯源技術,用于分析數據在程序執行過程中的流動方向和取值變化。在數據流分析中,依據不同的程序路徑分析精度,語句的執行順序可以分為流敏感性分析和流不敏感性分析;考慮程序路徑的深度,根據程序中函數代碼的數據傳遞位置不同分為過程內分析和過程間分析。
利用數據流分析規則,并按照某種路徑執行順序分析代碼的中間表示過程,是檢測漏洞的有效手段。按照程序執行過程自底向上、從右至左的分析順序,在數據流分析中,與數據產生和傳輸直接相關且最重要的語句是賦值語句及過程調用語句。賦值語句用于改變變量的取值,且在同一函數調用中可能會發生多次變化,需要根據檢測規則標注和監控變量取值的變化過程,同時觀測運行至控制轉移語句時的路徑條件。對于過程調用語句,需根據函數的名稱和定義識別各參數的語義信息,并依據函數調用關系圖分析參數在各函數調用時的傳遞過程及賦值變化。
分析過程內數據流時,按照程序的存儲位置以及程序控制流程圖確定語句執行順序。對程序流程圖進行廣度優先或深度優先遍歷時,在基本塊上保留部分分析結果,并采用前置條件或后置條件進行基本塊摘要運算。分析過程間數據流時,首先保存當前執行程序段的數據環境,然后對調用過程的內部代碼進行分析,并保存返回時的參數值。
本文利用Angr工具的符號執行模型,對數據流分析定位的參數進行約束求解,以此生成運行至該參數的路徑限制條件,從而明確硬編碼漏洞的觸發條件。
符號執行是一種靜態分析方法,將程序執行模擬為符號表達式,程序的輸出結果表示為符號之間的邏輯和算術運算,對程序流程的分析轉化為對表達式的求解。符號執行根據程序的執行過程可以分為針對單個函數的過程內分析,以及考慮函數調用過程和環境信息的過程間分析。
符號執行通常用于程序全局分析和代碼安全性檢測,首先解析程序代碼并生成中間表示,構建程序路徑控制流圖和調用圖等,借助符號表示式完成程序執行流程的覆蓋,之后進行約束求解產生測試用例,根據滿足條件判斷路徑可達性。檢查變量和符號的取值是否滿足相應的約束條件或符合特定的漏洞特征,進而深入該路徑分析程序的執行缺陷中。當遇到循環、迭代、遞歸調用時,符號執行易產生路徑爆炸,采用增加限制條件來緩解分析路徑的數量。
在工程實現時,密碼算法可能會出現硬編碼的漏洞,通常這種硬編碼以初始值、參數等形式出現。例如,在源代碼中,設置關鍵參數為常量,編譯生成的可執行文件會攜帶這種硬編碼特征;在可執行文件調用密碼函數進行參數賦值時,安全狀態下這些參數來自用戶輸入或系統隨機生成,但由于程序硬編碼漏洞的存在,相關參數可能會被直接賦值為靜態常量。以RSA算法中的Padding值以及CBC模式中的初始化向量(IV,initialization vector)為例,若這些參數實現不當,則密碼算法可能存在硬編碼漏洞。根據CWE-780對該漏洞的官方描述,當RSA算法未采用最優非對稱加密填充(OAEP,optimal asymmetric encryption padding)時,這些弱安全填充模式使用非隨機字節,使得明文和密文之間具有映射性,進而導致明文更容易被推測。在采用CBC模式的密碼算法中,加解密需利用一個初始IV值與第一個塊進行異或,并將異或結果作為下一個塊的IV,若初始IV值設定不當,則可能受BEAST攻擊[29]。
系統架構如圖1所示,主要分為3個模塊。
1) 預處理階段:提取物聯網識別固件文件,并篩選特定格式文件。
2) 硬編碼字符的識別和定位階段:對可執行文件進行逆向分析,提取所有的字符,基于預設硬編碼檢測方案識別滿足條件的硬編碼字符,并在程序中進行定位。
3) 硬編碼漏洞檢測:獲取硬編碼字符調用函數,驗證該調用函數的可達性,并對關鍵參數進行硬編碼檢測。

圖1 系統架構
Figure 1 System architecture
本文基于開源固件分析工具Firmadyne[30]開發爬蟲進行固件資源下載,采用Binwalk和Firmware Mod Kit工具對MIPS、ARM、PowerPC等架構固件進行提取。根據文件類型篩選可執行文件和鏈接庫文件,如ELF文件、SO文件、DLL文件、EXE文件等。
固件文件中存儲著大量的硬編碼字符(如注釋信息、版本信息、打印信息、調試信息、程序中定義的常量),其中,一些字符是程序執行的輔助信息,可以被公開訪問,不具備敏感性,如程序注釋;另一些字符與程序的重要功能有關,具有一定敏感性,如登錄賬戶信息。
如何界定硬編碼字符的敏感性是本文面臨的第一個挑戰問題。從攻擊者的角度出發,根據硬編碼字符的泄露是否對程序運行結果產生影響、是否會進一步泄露更多的系統信息、是否會引發已知的漏洞等,將字符分為敏感字符和普通字符。
根據上述分類依據,結合敏感字符的應用場景,重點研究3類敏感字符的硬編碼漏洞檢測方法,并根據每類漏洞設計識別方案和模型。
3.2.1 特殊格式字符
該類漏洞的硬編碼字符通常直接以字符串格式存儲,字符內容具有規律性,可以使用正則表達式、字符特征匹配等方法進行識別。例如,WPS PIN碼字符,是QSS快速連接功能的識別碼,可以代替Wi-Fi密碼進行認證,識別后可接入網絡,若某款路由器的WPS PIN碼存在硬編碼漏洞,一旦泄露會導致網絡的非授權連接。PIN碼通常是滿足校驗規則的8位數字組合,具有明顯的識別特征。同樣地,IP地址、郵箱地址、產品序列號、登錄賬號等硬編碼字符都具有各自的特征,這些字符與產品的敏感信息、授權認證和版權保護有直接關聯,是需要重點檢測的對象。
本文提出一種固件可執行文件中特殊格式字符的定制化識別方法,支持用戶添加自定義新規則,具備較強的系統擴展性。下面介紹幾類硬編碼字符的識別方法。
①賬戶口令字符:設置常用賬號口令字典實現匹配,由于本文不考慮爆破攻擊的情形,因而所選字典無須規模過大。采用top1000字典進行匹配,同時提取口令所在的函數名稱,對函數名進行口令的模糊匹配。
② IP地址:采用正則表達式初步篩選字符,并將無效IP地址、廣播IP地址、保留IP地址等去除,保留內網IP和公網IP等有效IP地址。
③郵箱地址:采用正則表達式進行字符初選,利用EmailVerify[28]等站點對郵箱進行有效性校驗,保留合法合規的郵箱地址。
④ WPS PIN碼:利用正則表達式獲取8位連續的純數字,基于checksum校驗算法獲得符合校驗的疑似PIN碼。
⑤編碼和Hash字符:利用正則表達式獲取特定長度或帶明顯編碼特征的字符,如base64編碼、URL編碼、MD5 Hash,并對其嘗試進行解碼。
3.2.2 外部文件引用
程序執行會經常調用外部文件,如配置文件、源碼文件,若一些高敏感文件(如密鑰文件、證書文件)遭到泄露,則攻擊者有更大概率解密出網絡流量、登錄認證過程等敏感信息,從而嚴重威脅系統安全。針對此類硬編碼漏洞,首先檢測函數中出現的路徑和文件,并查看該文件是否真實存在,若存在,則識別文件類型和讀取文件內容。管理并維護一個敏感文件列表白名單,主要包含以下幾類。
①賬戶文件:/etc/passwd、/etc/shadow等賬戶相關文件。
②數據庫文件:.db、.mdb、.bak等數據庫相關文件。
③數字證書類文件:.key、.pem、.der、.cer等與數字證書和密鑰相關的文件。
④配置文件:.ini、.config等文件。
3.2.3 密碼實現硬編碼
在實現密碼算法時會引入數字、字符常量等硬編碼,這些常量一般通過參數賦值等方式進行傳遞,若這些參數配置不當,則攻擊者可利用密碼實現上的缺陷實施破壞行為。
此類硬編碼與特殊格式字符與外部文件兩類硬編碼不同,需要先定位函數,然后分析函數中的參數是否存在硬編碼,本文主要檢測兩類密碼實現的硬編碼問題:帶Padding參數的RSA算法;帶IV值參數的CBC模式算法。
經過以上步驟,可以獲取硬編碼字符的位置和其調用函數,僅憑這些無法斷定是否存在硬編碼漏洞以及該漏洞是否可被執行,需進一步對調用函數的可達性、硬編碼字符具體值以及運行至該硬編碼的程序執行條件等進行全面分析,并根據以上結果綜合判定硬編碼漏洞情況。
3.3.1 函數可達性分析
源代碼經過預處理、編譯、匯編等過程變為可執行文件,在編譯過程中,編譯器通常會對源碼進行優化處理,移除無用代碼和死代碼。由于編譯器的優化能力和配置選項存在較大差別,為防止可執行文件中出現未被調用函數的情況,需對二進制可執行文件中的所有函數做調用可達性分析,剔除未被調用的函數。
首先,獲取可執行文件中所有的導出函數,并生成一個集合,在集合中找到文件的程序入口函數,如main、entry、start等,以入口函數為根節點,獲取此根節點函數對其他函數的調用關系圖,對圖中的所有節點進行深度優先或廣度優先遍歷,將遍歷的所有節點函數記為調用函數集合1,1中的元素表示該可執行文件運行時,從程序入口出發可能被調用的函數集合。采用同樣的方法,對集合中的其他非入口函數進行遍歷和提取,得到集合2,3,...,,合并個集合并去重生成集合,最終得到此可執行文件的可達函數集合,中的每一個元素函數在可執行文件執行時都是調用可達的。函數可達集合生成過程如圖2所示。
最后,根據硬編碼字符所在的函數是否在可達函數集合內,判斷其調用可達性。
如圖3所示,存在3個硬編碼函數F3()、F7()、F8(),其中,圖3(a)中F3()函數位于入口函數的調用關系圖節點中,是可達函數,則說明F3()中的硬編碼字符可以被調用觸發;與之相對,圖3(b)的F7()函數與圖3(c)的F8()函數雖然有硬編碼字符,但屬于不可達函數,因而即使存在硬編碼字符,亦不會被調用觸發。因此,圖3中存在硬編碼且調用可達的函數只有F3()。

圖2 可達集合S生成過程
Figure 2 Reachable setgenerating process

圖3 硬編碼函數可達性分析
Figure 3 Reach ability analysis of hard coded functions
3.3.2 確定硬編碼字符值
硬編碼字符所在的函數滿足調用可達性之后,需要對硬編碼字符所在的定義位置和賦值過程進行分析,尤其是以參數形式存儲的硬編碼字符,其通常比較隱蔽。
本文首先將待分析函數生成程序控制流程圖,為后續分析提供程序執行流程的依據;為了解決匯編指令的異構問題,采用PyVEX模塊的IR模型將待分析函數轉為中間表達式;采用數據流分析的方法回溯待分析函數的參數,識別參數的個數、格式,定位到參數賦值語句,最終根據參數在定義、賦值、調用等過程的情況判定其取值變化,并確定存在漏洞的硬編碼字符值。
如圖4所示,函數F1()調用函數F2(),且已知當函數F2()中參數=2時存在漏洞。對函數F2()中參數是否存在硬編碼的分析過程如下。

圖4 參數硬編碼字符值的確定
Figure 4 Determination of parameter hard coded character value
①識別并定位函數F2(),根據調用關系找到父函數F1(),生成F1()的程序控制流程圖。
②將函數F1()生成中間表達式,結合函數F2()的定義得知有3個參數,類型均為int,采用數據流分析方法對參數進行回溯,并得到與參數定義和賦值相關的代碼塊為代碼塊1、2、3、5、6,調用過程為代碼塊7、8。
③根據函數F2()的漏洞描述,當第一個參數=2時是存在缺陷的,則進一步定位出參數的定義和賦值代碼塊1、5、6,其中參數賦值為2的代碼塊為6。
④分析得到函數F2()中參數的定義、賦值、調用過程分別在代碼塊1、6、8中,且函數F2()存在漏洞。
3.3.3 硬編碼漏洞觸發條件分析
分析該硬編碼漏洞的路徑執行順序和程序跳轉條件,在程序控制流程圖中標注存在硬編碼的代碼塊位置,采用Angr工具中的符號執行模塊將執行流程轉變為符號表達式,對從入口函數到硬編碼代碼塊的路徑進行約束求解,若存在滿足要求的約束解,表明該硬編碼漏洞可以被觸發。
如圖5所示,函數Fn()中存在多個疑似硬編碼字符漏洞,需要分析從函數Fn()入口執行到漏洞處的觸發條件,分析過程如下。

圖5 硬編碼漏洞觸發條件
Figure 5 Hard coded vulnerability trigger conditions
①生成函數Fn()的程序控制流程圖,并在圖中標注出存在硬編碼字符的代碼塊為5、7、8。
②使用Angr載入該文件的Fn()函數,加載符號執行模塊生成各代碼塊間跳轉的符號表達式。
③設置存在硬編碼字符的代碼塊5、7、8為目標地址,并進行符號表達式的約束求解。
④若約束解不為空,則證明存在從函數Fn()入口到該代碼塊的調用路徑,該硬編碼字符可以被觸發;若約束解為空,則表明此代碼塊處的硬編碼字符無法被執行。
經過以上4個步驟,得到3個硬編碼觸發需要滿足的約束條件如下。
在整體設計、模塊功能建模的基礎上,本文進一步構建了針對物聯網設備固件的硬編碼漏洞檢測系統,并對多類真實物聯網設備固件進行了處理和分析,本節展示漏洞檢測結果和部分實例。
使用開發的網絡爬蟲,從物聯網設備官方網站、社區論壇、FTP站點等網絡資源處獲得551個固件,包括360、TP-Link、Tenda、D-Link、Western Digital等廠商的物聯網設備。選取主流廠商不同產品的物聯網設備固件,包括攝像頭、路由器、硬盤、打印機。在這些固件中,使用固件解析工具Binwalk和Firmware-Mod-Kit成功提取164個,固件架構類型包括MIPS、ARM、PowerPC、X86_64,篩選出二進制可執行文件和鏈接庫文件共計839個。其中可執行文件共625個,主要位于bin、sbin等目錄下,與系統授權、指令操作、組件功能及Web服務等相關,如busybox、http、webs、ucloud、pppd等;鏈接庫文件共214個,主要位于lib、libs等目錄下,與OpenSSL服務、程序語言庫、加解密功能及協議應用等有關,如libcrypto.so、libssl.so、libgcc.so等。
各廠商固件預處理結果如圖6所示。

圖6 各廠商固件預處理結果
Figure 6 Firmware pretreatment results of each vendors
固件的預處理文件分布情況如表1所示。

表1 預處理文件分布情況
利用構建的物聯網設備固件硬編碼漏洞檢測系統對上述5家廠商的相關產品進行測試,共發現81個硬編碼漏洞。其中,每個固件至少存在特殊格式字符(占比64.2%)和外部文件引用(占比28.4%)硬編碼漏洞,容易引起敏感信息泄露、通信流量解密等;而密碼實現中的硬編碼漏洞(占比7.4%)則相對較少,一方面是因為密碼應用場景比普通場景少,另一方面是密碼硬編碼漏洞只在個別密碼算法中出現。各廠商硬編碼漏洞檢測結果如表2所示。

表2 各廠商硬編碼漏洞檢測結果
為深入理解物聯網設備固件中的硬編碼漏洞,對3類硬編碼漏洞的典型案例進行分析。
4.3.1 特殊格式字符硬編碼漏洞
特殊格式字符硬編碼主要檢測對象包括登錄賬戶、IP地址、郵箱地址、WPS PIN碼、產品序列號、后門賬戶等。
(1)后門賬戶
在TP-Link的TL-AP450C攝像頭固件中,函數getDefaultWebCtrlUser()(偽代碼如圖7所示)位于uclited可執行文件中,檢測出與Web Ctrl應用相關的默認用戶admin/admin。

圖7 函數getDefaultWebCtrlUser()偽代碼
Figure 7 Function getDefaultWebCtrlUser() pseudo code
在TP-Link的TL-IPC20攝像頭固件中,可執行文件cet中函數http_digest_auth_check()(偽代碼如圖8所示)的作用是對攝像頭Request請求進行配置,并在HTTP Header中設置Authorization值完成Digest登錄認證。檢測出該函數中存在一個硬編碼的默認用戶admin/zMiVw8Kw0 oxKXL0,該檢測結果是對CVE-2018-11482的補充,是在官方公告的漏洞版本之外的新發現。與官方通告的websys.lua文件不同,本文的檢測對象是可執行文件,且識別出該硬編碼是采用Digest方式進行登錄的默認攝像頭賬戶。同時在該函數中檢測出另一個硬編碼字符opaque = 64943214654649846565646421。
(2)WPS PIN碼
WPS PIN碼通常由8位純數字組成,且滿足前四后三加一校驗位的規律,具有明顯的識別特征。對已有固件進行分析,成功實現對CVE-2016-10179[31]漏洞的精準檢測。
D-Link的DWR-932B路由器固件開啟了WPS功能,在可執行文件appmgr的函數wifi_get_default_wps_pin()(偽代碼如圖9所示)中,檢測出硬編碼WPS PIN值28296607。
4.3.2 外部文件引用
外部文件應用主要檢測對象包括配置文件、密鑰文件、數字證書文件、賬戶文件等。

圖8 函數http_digest_auth_check()偽代碼
Figure 8 Function http_digest_auth_check() pseudo code

圖9 函數wifi_get_default_wps_pin()偽代碼
Figure 9 Function wifi_get_default_wps_pin() pseudo code
(1)密鑰文件引用
在360的路由器固件中,lib目錄下鏈接庫文件libcloudquery.so的createPostHeader()函數存在對路徑下/app/devices/bin/rsa_public_key.pem的密鑰文件引用,如圖10所示。

圖10 rsa_public_key.pem密鑰文件引用
Figure 10 rsa_ public_ key. pem key file reference
同樣地,在cgitest.cgi文件中,sub_45EB04()函數引用了/etc/360_pub.key密鑰文件,如圖11所示。

圖11 360_pub.key密鑰文件引用
Figure 11 360_ pub.key key file reference
(2)賬戶文件引用
在360路由器固件360P4-V2中,存在位于bin目錄下的busybox文件讀取/etc/passwd文件,函數FUN_004344fc()偽代碼如圖12所示。

圖12 函數FUN_004344fc()偽代碼
Figure 12 Function FUN_004344fc() pseudo code
在passwd文件中存儲著4個系統默認用戶。文件內容如圖13所示。

圖13 /etc/passwd文件內容
Figure 13 Contents of /etc/passwd file
4.3.3 密碼實現硬編碼漏洞
密碼實現硬編碼主要檢測對象包括RSA 算法中Padding是否存在硬編碼值,以及在CBC模式中IV是否存在硬編碼值。
(1)RSA Padding值
在Tenda的ucloud文件中,函數int_rsa _verify()(偽代碼如圖14所示)存在對RSA算法的調用,且設置的RSA Padding值為1。
(2)CBC模式IV值
在Western Digital固件的uams_dhx_pam.so文件中,函數FUN_000128e0()(偽代碼如圖15所示)調用CAST_ cbc_encrypt()函數,且CBC的IV值為硬編碼靜態常量LWallace。

圖14 函數int_rsa_verify()偽代碼
Figure 14 Function int_rsa_verify() pseudo code

圖15 函數FUN_000128e0()偽代碼
Figure 15 Function FUN_000128e0() pseudo code
實驗結果表明,本文構建的物聯網設備固件可執行文件硬編碼漏洞檢測系統可以有效識別出特殊格式字符、外部文件引用、密碼實現硬編碼3類硬編碼字符,且檢測成功率較高。
針對物聯網設備固件硬編碼中存在的安全問題,本文提出了一種物聯網設備固件硬編碼字符識別和硬編碼漏洞檢測方法,并構建了檢測系統。設計了一種動態更新的鏈接庫管理方法實現鏈接庫的維護,采用中間表示IR模型、數據流分析、符號執行等方法分別實現函數調用可達性分析、硬編碼字符確認和漏洞觸發條件分析,對特殊格式字符、外部文件引用、密碼實現3類硬編碼漏洞檢測進行了深入研究和大量實驗驗證。實驗結果表明,通過對164個物聯網設備固件的839個可執行文件分析,成功識別出81個硬編碼漏洞,證明硬編碼漏洞普遍存在于物聯網設備固件中。本文提出的方法可以有效檢測物聯網設備固件中的硬編碼漏洞,可為后續物聯網設備的安全防護技術的部署提供一定指導。
然而本文依然存在部分關鍵挑戰問題沒有被完全解決。首先,在物聯網固件提取方面,對于采用非常規壓縮算法、非標準系統架構、使用加密保護以及搭載實時操作系統的固件,本文提出的方法在適配性方面還存在較大不足;其次,在硬編碼字符和硬編碼漏洞選擇上,未涉及所有類型;此外,在對漏洞攻擊利用和安全加固方面,本文尚未做深入研究。在今后的研究工作中,需增加固件樣本種類和數量,深入研究非典型固件的提取技術,提高檢測的適用范圍,增加對更多類型硬編碼漏洞的支持,并進一步研究漏洞利用與安全防護方案。
[1] 王鑫. 面向分布式計算的隱私保護研究[D]. 浙江: 浙江大學, 2020.
WANG X. Research on privacy protection for distributed computing[D]. Zhejiang: Zhejiang University, 2020.
[2] BURSZTEIN E, COCHRAN G J, DURUMERIC C Z, et al. Understanding the Mirai Botnet[C]//USENIX Security Symposium. 2017.
[3] 楊毅宇, 周威, 趙尚儒, 等. 物聯網安全研究綜述: 威脅, 檢測與防御[J]. 通信學報, 2021, 42(8): 188-205.
YANG Y Y, ZHOU W, ZHAO S R, et al. Survey of IoT security research: threats, detection and defense[J]. Journal on Communications, 2021, 42(8): 188-205.
[4] 張玉清, 周威, 彭安妮. 物聯網安全綜述[J]. 計算機研究與發展, 2017, 54(10): 2130.
ZHANG Y, ZHOU W, PENG A N. Survey of internet of things security[J]. Journal of Computer Research and Development, 2017, 54(10): 2130-2143.
[5] 鄭堯文, 文輝, 程凱, 等. 物聯網設備漏洞挖掘技術研究綜述[J].信息安全學報, 2019, 4(5): 61-75.
ZHENG Y W, WEN H, CHENG K, et al. A survey of IoT device vulnerability mining techniques[J].Journal of Cyber Security, 2019, 4(5): 61-75.
[6] CAO X H, SHILA D M, CHENG Y, et al. Ghost-in-zigbee: Energy depletion attack on zigbee-based wireless networks[J]. IEEE Internet of Things Journal, 2016, 3(5): 816-829.
[7] WEN H, CHEN Q A, LIN Z. Plug-N-Pwned: comprehensive vulnerability analysis of OBD-II dongles as a new over-the-air attack surface in automotive IoT[C]//USENIX Security Symposium. 2020: 949-965.
[8] CHEN J Y, ZUO C S, DIAO W R, et al. Your IoTs are (not) mine: on the remote binding between IoT devices and users[C]//2019 49th Annual IEEE/IFIP International Conference on Dependable Systems and Networks. 2019: 222-233.
[9] HE W, GOLLA M, PADHI R, et al. Rethinking access control and authentication for the home Internet of things (IoT)[C]//USENIX Security Symposium. 2018: 255-272.
[10] YUAN B, JIA Y, XING L, et al. Shattered chain of trust: understanding security risks in cross-cloud IoT access delegation[C]//USENIX Security Symposium. 2020: 1183-1200.
[11] FERNANDES E, RAHMATI A, JUNG J, et al. Decentralized action integrity for trigger-action IoT platforms[C]//Proceedings 2018 Network and Distributed System Security Symposium. 2018: 1-16.
[12] ZHANG L, CHEN J, DIAO W, et al. {CryptoREX}: large-scale analysis of cryptographic misuse in {IoT} Devices[C]//22nd International Symposium on Research in Attacks, Intrusions and Defenses (RAID 2019). 2019: 151-164.
[13] ALMAKHDHUB N S, CLEMENTS A A, BAGCHI S, et al. μRAI: securing embedded systems with return address integrity[C]//Proceedings 2020 Network and Distributed System Security Symposium. 2020: 1-18.
[14] YAO Y, ZHOU W, JIA Y, et al. Identifying privilege separation vulnerabilities in IoT firmware with symbolic execution[C]//European Symposium on Research in Computer Security. 2019: 638-657.
[15] ZHOU J, DU Y, SHEN Z, et al. Silhouette: efficient protected shadow stacks for embedded systems[C]//USENIX Security Symposium. 2020: 1219-1236.
[16] MU C, YANG M, CHEN Z, et al. Research on RSA padding identification method in IoT firmwares[C]//Journal of Physics: Conference Series. 2020: 012061.
[17] Vulnerabilities in foscam IP cameras report[R].
[18] THOMAS S L, CHOTHIA T, GARCIA F D. Stringer: measuring the importance of static data comparisons to detect backdoors and undocumented functionality[C]//European Symposium on Research in Computer Security. 2017: 513-531.
[19] SHOSHITAISHVILI Y, WANG R, HAUSER C, et al. Firmalice- automatic detection of authentication bypass vulnerabilities in binary firmware[C]//NDSS. 2015: 1-8.
[20] WANG F, SHOSHITAISHVILI Y. Angr-the next generation of binary analysis[C]//2017 IEEE Cybersecurity Development (SecDev). 2017: 8-9.
[21] ZHENG Y, DAVANIAN A, YIN H, et al. FIRM-AFL: greybox fuzzing of IoT firmware via augmented process emulation[C]//28th USENIX Security Symposium (USENIX Security 19). 2019: 1099-1114.
[22] ZADDACH J, BRUNO L, FRANCILLON A, et al. AVATAR: A framework to support dynamic security analysis of embedded systems' firmwares[C]//NDSS. 2014: 1-16.
[23] CHEN J Y, DIAO W R, ZHAO Q C, et al. IoTFuzzer: discovering memory corruptions in IoT through app-based fuzzing[C]//Pro- ceedings 2018 Network and Distributed System Security Symposium. 2018: 1-15.
[24] REDINI N, MACHIRY A, WANG R, et al. Karonte: detecting insecure multi-binary interactions in embedded firmware[C]//2020 IEEE Symposium on Security and Privacy. 2020: 1544-1561.
[25] CHEN L, WANG Y, CAI Q, et al. Sharing more and checking less: Leveraging common input keywords to detect bugs in embedded systems[C]//30th USENIX Security Symposium (USENIX Security 21). 2021: 303-319.
[26] MU C, WANG X, YANG M, et al. Vulnerability analysis for iot devices of multi-agent systems: a cryptographic function identification approach[C]//Proceedings of 2021 5th Chinese Conference on Swarm Intelligence and Cooperative Control. 2023: 1510-1519.
[27] DAVIDSON D, MOENCH B, RISTENPART T, et al. {FIE} on firmware: Finding vulnerabilities in embedded systems using symbolic execution[C]//22nd USENIX Security Symposium (USENIX Security 13). 2013: 463-478.
[28] NETHERCOTE N, SEWARD J. Valgrind: a framework for heavyweight dynamic binary instrumentation[J]. ACM Sigplan Notices, 2007, 42(6): 89-100.
[29] DUONG T, RIZZO J. Here come the⊕ninjas[J]. Unpublished manuscript, 2011, 320.
[30] CHEN D D, EGELE M, WOO M, et al. Towards automated dynamic analysis for linux-based embedded firmware[C]//Pro- ceedings 2016 Network and Distributed System Security Symposium. 2016: 1-16.
Hardcoded vulnerability detection approach for IoT device firmware
MU Chao1, WANG Xin1, YANG Ming1, ZHANG Heng2, CHEN Zhenya1, WU Xiaoming1
1. Shandong Provincial Key Laboratory of Computer Networks, Shandong Computer Science Center (National Supercomputer Center in Jinan),Qilu University of Technology (Shandong Academy of Sciences), Jinan 250014, China 2. School of Computer Engineering, Jiangsu Ocean University, Lianyungang 222005, China
With the popularization of IoT devices, more and more valuable data is generated. Analyzing and mining big data based on IoT devices has become a hot topic in the academic and industrial circles in recent years. However, due to the lack of necessary detection and protection methods, many IoT devices have serious information security risks. In particular, device hard-coded information is closely related to system encryption and decryption, identity authentication and other functions, which can provide confidentiality protection for core data. Once this information is exploited by malicious attackers, serious consequences such as sensitive information leakage, backdoor attacks, and unauthorized logins will occur. In response to this problem, a multi-type character recognition and positioning scheme was designed and a hard-coded vulnerability detection method in executable files was proposed based on the study of the characteristics of hard-coded vulnerabilities in IoT devices. The proposed method extracted the firmware of IoT devices and filtered all executable files as the source to be analyzed. Then, a solution to identify and locate three types of hard-coded characters was provided. Further, the reachability of the function, where the hard-coded character was located, was analyzed according to the function call relationship. Meanwhile, the instruction heterogeneity was mitigated by an intermediate representation (IR) model. The character and parameter hard-coded values was obtained through a data flow analysis approach. A symbolic execution method was devised to determine the trigger conditions of the hard-coded vulnerabilities, and then the vulnerability detection result was output. On the one hand, the proposed method introduced the method of symbolic execution based on the use of the intermediate representation model, which eliminated the dependency of instruction architecture and reduces the false positive rate of vulnerabilities; On the other hand, this method can integrate characters, files, and cryptographic implementation to realize the different characteristics of three types of hard-coded characters, which increased the coverage of vulnerability detection and improves the versatility of the detection method. The experimental results show that the proposed method can effectively detect three types of hard-coded vulnerabilities of characters, files and cryptographic implementation in various IoT devices, and has good detection accuracy, which can provide certain guidance for the deployment of subsequent security protection technologies.
big data, IoT security, hard coding, vulnerability detection
TP393
A
10.11959/j.issn.2096?109x.2022070
2022?06?10;
2022?09?02
楊明,yangm@sdas.org
國家重點研發計劃(2021YFF0901301-02);山東省自然科學基金(ZR2021QF057);國家自然科學基金(61873106);江蘇省杰出青年科學基金(BK20200049);齊魯工業大學(山東省科學院)計算機科學與技術學科基礎研究加強計劃(2021JC02023);工業控制技術國家重點實驗室(浙江大學)開放課題(ICT2022B36)
The National Key R&D Program of China (2021YFF0901301-02), Shandong Provincial Natural Science Foundation (ZR2021QF057), The National Natural Science Foundation of China (61873106), The Natural Science Foundation of Jiangsu Province for Distinguished Young Scholars (BK20200049), QLU/SDAS Computer Science and Technology Fundamental Research Enhancement Program (2021JC02023), Open Research Project of the State Key Laboratory of Industrial Control Technology, Zhejiang University, China (ICT2022B36)
穆超, 王鑫, 楊明, 等. 面向物聯網設備固件的硬編碼漏洞檢測方法[J]. 網絡與信息安全學報, 2022, 8(5): 98-110.
Format: MU C, WANG X, YANG M, et al. Hardcoded vulnerability detection method for firmware of IoT devices [J]. Chinese Journal of Network and Information Security, 2022, 8(5): 98-110.
穆超(1990?),男,山東濟南人,齊魯工業大學(山東省科學院)助理研究員,主要研究方向為物聯網安全與數據安全。

王鑫(1992?),男,山東鄒平人,博士,齊魯工業大學(山東省科學院)副研究員,主要研究方向為工業互聯網安全與數據隱私保護。
楊明(1981?),男,山東東營人,博士,齊魯工業大學(山東省科學院)研究員,主要研究方向為密碼學、云安全、大數據安全、物聯網安全。

張恒(1981?),男,江蘇連云港人,博士,江蘇海洋大學教授,主要研究方向為系統安全與控制和人工智能算法安全。
陳振婭(1983?),女,山東菏澤人,齊魯工業大學(山東省科學院)副研究員,主要研究方向為數據安全與隱私保護。

吳曉明(1981?),男,山東濱州人,博士,齊魯工業大學(山東省科學院)研究員、博士生導師,主要研究方向為物聯網安全與信息安全。