李 濤 田迎軍 葛陽(yáng)晨 田 源 李 劍
1(山東高速建設(shè)管理集團(tuán)有限公司 濟(jì)南 250098)2(北京郵電大學(xué)人工智能學(xué)院 北京 100876)3(北京郵電大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 北京 100876)(552126247@qq.com)
隨著物聯(lián)網(wǎng)(Internet of thing, IoT)市場(chǎng)規(guī)模的快速增長(zhǎng),越來(lái)越多的設(shè)備進(jìn)入人們的生活.萬(wàn)物互聯(lián)成為網(wǎng)絡(luò)發(fā)展的重要方向.《2019—2020中國(guó)物聯(lián)網(wǎng)發(fā)展年度報(bào)告》中指出,全球物聯(lián)網(wǎng)設(shè)備連接數(shù)保持強(qiáng)勁增勢(shì),設(shè)備接入量超70億臺(tái),我國(guó)物聯(lián)網(wǎng)產(chǎn)業(yè)規(guī)模己超1.2萬(wàn)億元,同時(shí)隨著5G、人工智能、區(qū)塊鏈、IPv6等新一代信息技術(shù)的發(fā)展,物聯(lián)網(wǎng)將會(huì)得到更加快速的發(fā)展.預(yù)計(jì)到2025年,活躍的物聯(lián)網(wǎng)設(shè)備數(shù)量預(yù)計(jì)將達(dá)到342億臺(tái)[1],物聯(lián)網(wǎng)將深刻影響到人類生產(chǎn)和生活的各個(gè)方面,包括智能家居、智能醫(yī)療、智能交通、智能電網(wǎng)等其他工業(yè)與公共基礎(chǔ)設(shè)施[2].
另一方面,物聯(lián)網(wǎng)在為公眾生活與工作提供便利的同時(shí),其安全面臨著嚴(yán)峻挑戰(zhàn).物聯(lián)網(wǎng)安全問(wèn)題不僅能給用戶帶來(lái)財(cái)產(chǎn)損失,嚴(yán)重時(shí)甚至?xí){用戶的生命安全[3].2016年CNVD公開(kāi)發(fā)布的網(wǎng)絡(luò)設(shè)備漏洞每年以30%左右的速度增長(zhǎng).僅2019年就出現(xiàn)了智能門鎖安全漏洞、物聯(lián)網(wǎng)攝像頭任意訪問(wèn)、兒童手表暴露隱私等眾多物聯(lián)網(wǎng)設(shè)備安全問(wèn)題.眾多的物聯(lián)網(wǎng)設(shè)備固件安全問(wèn)題不僅給用戶造成極大的隱私及財(cái)產(chǎn)安全威脅,也阻礙了物聯(lián)網(wǎng)行業(yè)的迅猛發(fā)展.據(jù)統(tǒng)計(jì)80%的物聯(lián)網(wǎng)設(shè)備采用弱密碼算法,70%的物聯(lián)網(wǎng)通信過(guò)程未加密,90%的物聯(lián)網(wǎng)固件存在安全隱患.
因此,設(shè)計(jì)并實(shí)現(xiàn)快速、有效的物聯(lián)網(wǎng)設(shè)備固件內(nèi)存漏洞檢測(cè)工具,能夠幫助安全研究員指明物聯(lián)網(wǎng)設(shè)備中的安全問(wèn)題,同時(shí)能夠幫助物聯(lián)網(wǎng)廠商快速定位到代碼設(shè)計(jì)缺陷,從而更好地促進(jìn)物聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展.綜上所述,針對(duì)物聯(lián)網(wǎng)設(shè)備固件的漏洞分析技術(shù)具有重要研究意義.
固件(firmware)通常是指一種嵌入在硬件設(shè)備中的軟件,是運(yùn)行在物聯(lián)網(wǎng)設(shè)備上的核心軟件之一,擔(dān)任著一個(gè)系統(tǒng)最基礎(chǔ)最底層工作.例如個(gè)人計(jì)算機(jī)的基本輸入輸出系統(tǒng)(basic input output system, BIOS)、統(tǒng)一可擴(kuò)展固件接口(unified extensible firmware interface, UEFI)可能僅包含設(shè)備的基本功能,并且只能為更高級(jí)別的軟件提供服務(wù).對(duì)于不太復(fù)雜的設(shè)備,固件充當(dāng)設(shè)備的完整操作系統(tǒng),執(zhí)行所有控制、監(jiān)視和數(shù)據(jù)操作功能.圖1所示為物聯(lián)網(wǎng)設(shè)備的結(jié)構(gòu):
圖1 物聯(lián)網(wǎng)設(shè)備結(jié)構(gòu)
固件是一段以二進(jìn)制形式存于只讀存儲(chǔ)器的程序,在以前,是在生產(chǎn)過(guò)程中被寫(xiě)入硬件固化,且后期無(wú)法修改,需要重新生產(chǎn).隨著技術(shù)的發(fā)展固件可以寫(xiě)入EPROM(可擦寫(xiě)可編程只讀存儲(chǔ)器)或EEPROM(電可擦可編程只讀存儲(chǔ)器)中,以滿足對(duì)固件維護(hù)更新的需求.其中,修復(fù)錯(cuò)誤、向設(shè)備添加新功能、提高設(shè)備的穩(wěn)定性和工作效率是固件維護(hù)更新的常見(jiàn)原因.
根據(jù)固件是否包含操作系統(tǒng)以及包含操作系統(tǒng)的種類,可以將固件分為3類:
1) 單片機(jī)固件.
單片機(jī)固件是不包含操作系統(tǒng)的,通常以單個(gè)二進(jìn)制鏡像的形式存在,固件中僅包含一個(gè)簡(jiǎn)單的循環(huán)控制,負(fù)責(zé)不斷接收外部環(huán)境發(fā)送產(chǎn)生的中斷信號(hào),基于底層硬件驅(qū)動(dòng)完成處理外部事件.雖然小巧,但是功能簡(jiǎn)單,可移植性較差.
2) 通用操作系統(tǒng)固件.
隨著硬件性能的提升,物聯(lián)網(wǎng)設(shè)備中被移植了以Linux為主的通用操作系統(tǒng),如busybox,uClibc提供輕量級(jí)的用戶空間環(huán)境.這些修改通常保留了Linux的內(nèi)核,該類固件開(kāi)發(fā)簡(jiǎn)單,可直接使用操作系統(tǒng)中的網(wǎng)絡(luò)通信系統(tǒng)、文件管理系統(tǒng)、進(jìn)程調(diào)度系統(tǒng)等,具有高效使用CPU和內(nèi)存、運(yùn)行穩(wěn)定、可移植性高的特點(diǎn),缺點(diǎn)是固件所需的存儲(chǔ)較大.這類設(shè)備包括智能路由器、智能攝像頭等.
3) 實(shí)時(shí)操作系統(tǒng)固件.
實(shí)時(shí)操作系統(tǒng)(real time operating system, RTOS)指的是沒(méi)有緩沖區(qū)延遲、能夠?qū)崟r(shí)處理數(shù)據(jù)的操作系統(tǒng).RTOS可以分為軟實(shí)時(shí)操作系統(tǒng)和硬實(shí)時(shí)操作系統(tǒng).軟實(shí)時(shí)只要按照任務(wù)的優(yōu)先級(jí),盡可能快地完成操作即可;硬實(shí)時(shí)則要求在規(guī)定的時(shí)間內(nèi)必須完成任務(wù),這是在操作系統(tǒng)設(shè)計(jì)時(shí)保證的.常見(jiàn)的實(shí)時(shí)操作系統(tǒng)有VxWorks[4],F(xiàn)reeRTOS[5],其中FreeRTOS因?yàn)槠溟_(kāi)源免費(fèi)、可在資源有限的微控制器中運(yùn)行等優(yōu)點(diǎn)被學(xué)術(shù)界和工業(yè)界廣泛應(yīng)用.在物聯(lián)網(wǎng)設(shè)備中使用RTOS,能夠讓設(shè)備最大化利用有限CPU資源;此外對(duì)于開(kāi)發(fā)人員而言,可以簡(jiǎn)化固件程序設(shè)計(jì)、提高開(kāi)發(fā)效率.實(shí)時(shí)操作系統(tǒng)的物聯(lián)網(wǎng)設(shè)備在追求任務(wù)實(shí)時(shí)性的同時(shí)有低功耗的需求.常見(jiàn)的配備實(shí)時(shí)操作系統(tǒng)的設(shè)備有智能插座、智能燈泡等.
物聯(lián)網(wǎng)的概念自2005年提出,期間隨著硬件設(shè)備、云計(jì)算、5G等技術(shù)不斷發(fā)展成熟,相關(guān)的物聯(lián)網(wǎng)產(chǎn)業(yè)以此為基礎(chǔ)在智能家居、智能汽車、智慧醫(yī)療、工業(yè)控制、智慧城市等領(lǐng)域也迅速發(fā)展擴(kuò)大.在物聯(lián)網(wǎng)環(huán)境下,嵌入式設(shè)備數(shù)目的日益增長(zhǎng),固件系統(tǒng)規(guī)模逐漸復(fù)雜,以及物聯(lián)網(wǎng)設(shè)備低功耗、有限資源環(huán)境下缺失有效的保護(hù)機(jī)制,使得固件安全問(wèn)題日益嚴(yán)峻.
2010年曝光的震網(wǎng)病毒[6]是第1個(gè)專門定向攻擊真實(shí)世界中基礎(chǔ)能源設(shè)施的蠕蟲(chóng)病毒,包括核電站、水電站、國(guó)家電網(wǎng)等工業(yè)與公共基礎(chǔ)設(shè)施都遭受了大規(guī)模的破壞.2019年3月7日,委內(nèi)瑞拉國(guó)內(nèi),包括首都加拉加斯在內(nèi)的大部分地區(qū)的電力系統(tǒng)受到破壞,造成大規(guī)模持續(xù)停電[7].停電導(dǎo)致大規(guī)模的交通擁堵,與此同時(shí)學(xué)校、醫(yī)院、工廠、機(jī)場(chǎng)等都受到嚴(yán)重影響,網(wǎng)絡(luò)通信設(shè)備也無(wú)法正常使用.2021年5月,美國(guó)最大燃油運(yùn)輸管道公司科洛尼爾[8]和全球最大肉類供應(yīng)商JSB集團(tuán)[9]遭勒索攻擊,造成短期內(nèi)石油、肉類供應(yīng)緊張.
很多物聯(lián)網(wǎng)設(shè)備固件安全問(wèn)題頻頻發(fā)生的主要原因有以下3個(gè):
1) 開(kāi)發(fā)人員對(duì)代碼安全性認(rèn)識(shí)不足.
固件大多數(shù)是用C語(yǔ)言編寫(xiě)的,雖然C語(yǔ)言本身提供了各種API確保內(nèi)核安全,但是程序關(guān)鍵步驟的安全需要開(kāi)發(fā)人員作出判斷,常見(jiàn)的如入?yún)z查、數(shù)組越界問(wèn)題、死鎖問(wèn)題、異常處理、密碼硬編碼等問(wèn)題.有相當(dāng)數(shù)量的固件開(kāi)發(fā)者并沒(méi)有安全編碼的經(jīng)驗(yàn),同時(shí)對(duì)代碼安全性認(rèn)識(shí)不足,導(dǎo)致在實(shí)際編程過(guò)程中存在疏漏,最終成為固件漏洞.在設(shè)備接入互聯(lián)網(wǎng)運(yùn)行的情況下,這樣的漏洞將存在安全隱患,極易成為黑客的攻擊目標(biāo).
2) 物聯(lián)網(wǎng)設(shè)備廠商缺乏安全意識(shí).
一方面,廠商為快速推出產(chǎn)品追求利潤(rùn)而忽略或者不重視物聯(lián)網(wǎng)設(shè)備的安全,在產(chǎn)品從開(kāi)發(fā)到上線的過(guò)程中,缺少專業(yè)人員對(duì)設(shè)備代碼的審計(jì)、對(duì)設(shè)備進(jìn)行安全測(cè)試,這些規(guī)范流程的缺失導(dǎo)致物聯(lián)網(wǎng)設(shè)備的安全問(wèn)題經(jīng)常發(fā)生且相關(guān)的安全防護(hù)水平較低.根據(jù)Ponemon研究所[10]在《2017年移動(dòng)物聯(lián)網(wǎng)應(yīng)用安全研究報(bào)告》中的數(shù)據(jù)說(shuō)明,大多數(shù)物聯(lián)網(wǎng)設(shè)備制造廠商在最開(kāi)始產(chǎn)品設(shè)計(jì)時(shí)并沒(méi)有在安全方面進(jìn)行考慮.并且在將近1 000名受訪問(wèn)人員中只有30%左右的人表示,他們的企業(yè)會(huì)使用足夠的資金在物聯(lián)網(wǎng)設(shè)備的安全上.而多數(shù)企業(yè)則說(shuō)明,安全性不是其產(chǎn)品設(shè)計(jì)的關(guān)鍵.
另一方面,設(shè)備廠商對(duì)現(xiàn)有固件的維護(hù)與更新,需要巨大的投入但利潤(rùn)收益不顯著,供應(yīng)商對(duì)已經(jīng)出現(xiàn)問(wèn)題的過(guò)期固件停止維護(hù)或者更新不及時(shí),因此攻擊者可以利用在低版本固件中存在的已知漏洞對(duì)設(shè)備進(jìn)行攻擊.當(dāng)前正在使用的智能硬件設(shè)備中的固件普遍使用的是過(guò)時(shí)的版本,其中可能包含漏洞.國(guó)家對(duì)物聯(lián)網(wǎng)產(chǎn)品的安全性缺乏強(qiáng)制性或懲罰性的要求也是原因之一.2020年,輕量級(jí)TCP/IP軟件庫(kù)被披露出19個(gè)0-day漏洞[11],可能導(dǎo)致不同行業(yè)的數(shù)十億IoT設(shè)備面臨著遠(yuǎn)程攻擊的風(fēng)險(xiǎn).
此外,從消費(fèi)者的角度而言,他們關(guān)注的是產(chǎn)品設(shè)備功能的使用,固件的更新不僅要求消費(fèi)者具有一定的網(wǎng)絡(luò)基礎(chǔ)知識(shí),而且升級(jí)后的固件能否穩(wěn)定以及是否會(huì)帶來(lái)性能的降低等不確定因素也影響了消費(fèi)者主動(dòng)去更新固件,這些都導(dǎo)致當(dāng)前智能硬件設(shè)備問(wèn)題眾多.
3) 固件設(shè)備計(jì)算、存儲(chǔ)資源有限.
相比計(jì)算機(jī)和智能手機(jī),智能設(shè)備硬件設(shè)計(jì)的復(fù)雜度相對(duì)較低.這大大降低攻擊者通過(guò)硬件分析發(fā)起攻擊的成本.由于物聯(lián)網(wǎng)設(shè)備的計(jì)算機(jī)能力和存儲(chǔ)能力有限,無(wú)法將傳統(tǒng)安全的一些防御措施部署到設(shè)備固件中,這些因素給設(shè)備的廠商和維護(hù)人員提出了安全性挑戰(zhàn).如配用電物聯(lián)網(wǎng)終端普遍存在計(jì)算資源有限的問(wèn)題,難以采用有較高計(jì)算資源要求的加密認(rèn)證技術(shù)[12].2014年,研究人員破解了西班牙電力公司智能電表采用的AES-128對(duì)稱加密算法,通過(guò)向電表注入惡意代碼,實(shí)現(xiàn)了對(duì)電表標(biāo)識(shí)碼篡改、修改電量讀數(shù)進(jìn)行竊電,甚至以此為跳板攻擊其他電表,切斷供電,造成事故.
綜上,在智能物聯(lián)網(wǎng)設(shè)備飛速發(fā)展的過(guò)程中,其安全狀態(tài)卻不容樂(lè)觀.由于固件提供了設(shè)備最基礎(chǔ)的功能實(shí)現(xiàn),所以固件的安全性對(duì)整個(gè)設(shè)備的影響至關(guān)重要.廠商急于開(kāi)發(fā)出新功能和新產(chǎn)品吸引消費(fèi)者從而擴(kuò)大智能家居市場(chǎng)份額,但受到產(chǎn)品上市時(shí)間以及研發(fā)成本的限制,安全人員無(wú)法在開(kāi)發(fā)周期中投入足夠多和廣泛的安全測(cè)試工作;同時(shí)受限于固件設(shè)備的硬件資源,無(wú)法部署完善的防御系統(tǒng).這些吸引了許多黑客組織對(duì)智能設(shè)備系統(tǒng)進(jìn)行攻擊和利用.
根據(jù)國(guó)家互聯(lián)網(wǎng)應(yīng)急中心的CNVD統(tǒng)計(jì)顯示,2020年公開(kāi)收錄的通用型聯(lián)網(wǎng)智能設(shè)備漏洞3 047個(gè),新增漏洞數(shù)量呈顯著增長(zhǎng)趨勢(shì),同比增長(zhǎng)28%[13].這些安全漏洞涉及的漏洞類型如圖2所示,主要的漏洞包括設(shè)備權(quán)限繞過(guò)、信息泄露、緩沖區(qū)溢出、遠(yuǎn)程代碼執(zhí)行、弱口令等.漏洞涉及的設(shè)備類型主要包括家用路由器、網(wǎng)絡(luò)攝像頭、防火墻等.
圖2 聯(lián)網(wǎng)智能設(shè)備漏洞類型分布
其中和固件相關(guān)的漏洞包括固件認(rèn)證繞過(guò)漏洞、內(nèi)存漏洞、邏輯漏洞、命令注入漏洞、固件修改漏洞等.
在所有的物聯(lián)網(wǎng)設(shè)備漏洞類型中,攻擊者著重關(guān)注的是認(rèn)證繞過(guò)攻擊,常常將其作為入侵的切入點(diǎn).未能實(shí)施強(qiáng)大的訪問(wèn)策略和身份驗(yàn)證控制的組織可能會(huì)允許攻擊者繞過(guò)身份驗(yàn)證,可讓攻擊者執(zhí)行各種惡意操作.
圖3 物聯(lián)網(wǎng)設(shè)備交互模型
物聯(lián)網(wǎng)設(shè)備由于其萬(wàn)物互聯(lián)的屬性,所有設(shè)備都需要通信交互,而交互不可避免需要對(duì)對(duì)方的身份進(jìn)行認(rèn)證.設(shè)備的認(rèn)證不僅包括對(duì)云平臺(tái)的認(rèn)證和對(duì)用戶的認(rèn)證,還包括對(duì)其他設(shè)備的認(rèn)證,只有通過(guò)認(rèn)證的對(duì)象才能獲得執(zhí)行相關(guān)操作的權(quán)限或訪問(wèn)敏感數(shù)據(jù),物聯(lián)網(wǎng)設(shè)備交互模型如圖3所示.然而,由于固件中存在密碼硬編碼、口令設(shè)置過(guò)于簡(jiǎn)單、開(kāi)發(fā)過(guò)程中留下的隱藏認(rèn)證接口等問(wèn)題,以及其他不嚴(yán)謹(jǐn)?shù)恼J(rèn)證邏輯,攻擊者可以加以利用并繞過(guò)設(shè)備身份驗(yàn)證機(jī)制,從而控制設(shè)備,獲取敏感信息,執(zhí)行各種惡意操作,嚴(yán)重威脅用戶財(cái)產(chǎn)及其人身安全.因此,探究智能設(shè)備中的認(rèn)證繞過(guò)漏洞是極具意義的.
內(nèi)存漏洞在固件漏洞中最常見(jiàn)[14],非預(yù)期的內(nèi)存訪問(wèn)導(dǎo)致堆棧內(nèi)存發(fā)生錯(cuò)誤,攻擊者可以利用此漏洞對(duì)內(nèi)存進(jìn)行任意讀寫(xiě).內(nèi)存漏洞的分類有以下幾種:棧堆溢出漏洞、內(nèi)存泄露漏洞、空指針異常漏洞、格式化字符串漏洞、整數(shù)溢出漏洞、數(shù)組越界漏洞等.外部不合法的輸入是導(dǎo)致內(nèi)存漏洞的直接原因.通過(guò)構(gòu)造特定的輸入,攻擊者可以引發(fā)固件程序緩沖區(qū)溢出、重啟、拋出異常、掛起、敏感信息泄露、拒絕服務(wù)等行為.例如,Swisslog Healthcare Nexus Panel是Swisslog Healthcare公司的一款醫(yī)療設(shè)備.Nexus Control Panel 7.2.5.7之前版本存在整數(shù)下溢漏洞(CNVD-2021-62181)[15],攻擊者可利用該漏洞覆蓋內(nèi)部隊(duì)列數(shù)據(jù)結(jié)構(gòu),從而實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行,甚至?xí):颊呱】?
在計(jì)算機(jī)程序設(shè)計(jì)中,不嚴(yán)謹(jǐn)?shù)倪壿嫊?huì)產(chǎn)生邏輯漏洞,導(dǎo)致程序運(yùn)行不正確,但程序不會(huì)異常終止或崩潰.邏輯漏洞通常不會(huì)被立即識(shí)別出來(lái),但會(huì)產(chǎn)生意想不到的或不需要的輸出和行為.如果攻擊者利用邏輯設(shè)計(jì)上的漏洞構(gòu)造特定的輸入,就可以使程序的正常功能發(fā)生偏移.例如設(shè)備權(quán)限等級(jí)設(shè)計(jì)不合理,低權(quán)限的用戶能夠執(zhí)行一些高危操作,如修改、刪除核心的配置文件,設(shè)備的底層將會(huì)受到嚴(yán)重的破壞;如果設(shè)備間的通信沒(méi)有經(jīng)過(guò)加密處理或者加密算法過(guò)于簡(jiǎn)單,那么這樣的邏輯是不嚴(yán)謹(jǐn)?shù)模瑫?huì)使設(shè)備間的數(shù)據(jù)傳輸遭到監(jiān)聽(tīng)和篡改;如果將使用到的賬號(hào)、密碼硬編碼于代碼中,或者在配置文件中保留如數(shù)據(jù)庫(kù)地址等敏感信息,通過(guò)反匯編技術(shù),攻擊者可以輕易獲得這些信息并入侵設(shè)備系統(tǒng).此外,為了給用戶提供便利,設(shè)備廠商一般會(huì)為設(shè)備提供初始化的登錄賬號(hào)和密碼,如果用戶未對(duì)其及時(shí)進(jìn)行修改,攻擊者可以利用這些已知信息對(duì)設(shè)備進(jìn)行破壞.Schneider Electric Easergy T300是法國(guó)施耐德電氣公司的一款用于電力行業(yè)的遠(yuǎn)程終端單元,使用1.5.2及之前版本固件的終端里存在邏輯漏洞(CNVD-2021-21479)[16],該漏洞源于程序使用弱加密算法,攻擊者可借助暴力破解的方式,利用該漏洞獲取密碼信息,進(jìn)而控制終端、操作設(shè)備.
命令注入漏洞指攻擊者通過(guò)惡意構(gòu)造的參數(shù),將高危命令拼接到正常命令中,從而達(dá)到破壞系統(tǒng)或者獲取敏感文件的目的.缺少對(duì)用戶輸入進(jìn)行完備的檢查通常是導(dǎo)致命令注入漏洞的主要原因,常見(jiàn)的命令注入有SQL注入、Shell注入等.在物聯(lián)網(wǎng)設(shè)備中,固件是直接與底層硬件進(jìn)行交互的,擁有非常高的權(quán)限,所以命令注入會(huì)造成巨大的危害.對(duì)于包含操作系統(tǒng)的固件而言,它們支持運(yùn)行命令行,雖然降低了固件的開(kāi)發(fā)、部署成本,但這也給固件留下命令注入的安全隱患.尤其是固件程序缺少對(duì)外界輸入命令行指令的校驗(yàn)邏輯時(shí),物聯(lián)網(wǎng)設(shè)備將暴露于執(zhí)行高危命令的危險(xiǎn)中.如攻擊者可以構(gòu)造特定的指令以獲取設(shè)備上存儲(chǔ)的文件或者查看數(shù)據(jù)庫(kù)的內(nèi)容,這會(huì)造成敏感信息泄露;可以執(zhí)行如rm -rf這樣的高危操作指令來(lái)刪除系統(tǒng)上的重要信息,使物聯(lián)網(wǎng)設(shè)備無(wú)法繼續(xù)運(yùn)行;可以通過(guò)netstat命令查看設(shè)備所連接的遠(yuǎn)程服務(wù)器的信息,并對(duì)其發(fā)起攻擊.Discord Recon Server是美國(guó)Discord公司的一個(gè)AI機(jī)器人.Discord Recon Server存在代碼注入漏洞(CNVD-2021-34351)[17],該漏洞屬于遠(yuǎn)程代碼執(zhí)行,利用該漏洞,遠(yuǎn)程攻擊者可在服務(wù)器上執(zhí)行命令.
固件病毒存在于物聯(lián)網(wǎng)設(shè)備的固件主板上,病毒會(huì)在每次設(shè)備啟動(dòng)時(shí)被加載,具有隱蔽性大、清除困難的特點(diǎn).對(duì)于傳統(tǒng)的病毒來(lái)說(shuō),操作系統(tǒng)級(jí)別的安全防御軟件可以完成對(duì)病毒的查殺,最嚴(yán)重的情況下,通過(guò)重新安裝操作系統(tǒng)即可完成清理.但是固件病毒駐留在設(shè)備主板上,傳統(tǒng)防御軟件無(wú)法讀取此位置的內(nèi)容,這是造成固件病毒檢測(cè)困難、清除困難的重要原因.固件是運(yùn)行在物聯(lián)網(wǎng)設(shè)備上的核心軟件,擔(dān)任著一個(gè)系統(tǒng)最基礎(chǔ)最底層工作,對(duì)下控制著底層硬件的操作,對(duì)上承載著設(shè)備的復(fù)雜功能,因此固件病毒對(duì)設(shè)備的危害極大.隱藏在固件中的病毒通過(guò)設(shè)備啟動(dòng)時(shí)被加載,攻擊者通過(guò)留下的后門,可以獲取敏感信息,如入侵智能攝像頭查看視頻監(jiān)控.固件病毒還可以感染操作系統(tǒng),實(shí)現(xiàn)病毒的復(fù)制與傳播,大量被感染的設(shè)備形成巨大的僵尸網(wǎng)絡(luò),可以對(duì)目標(biāo)網(wǎng)絡(luò)發(fā)起DDoS攻擊.此外,固件病毒必須通過(guò)專門的硬件檢測(cè)工具才能發(fā)現(xiàn),普通用戶難以發(fā)現(xiàn)并清理病毒.因此可以得出固件病毒比普通病毒危害更大.Basnight等人[18]闡述了將修改后的病毒固件上傳到物聯(lián)網(wǎng)設(shè)備的可編程控制邏輯器上.攻擊者可以通過(guò)逆向工程,了解固件代碼的更新邏輯,進(jìn)而修改與更新相關(guān)的配置文件,以便在固件更新中注入惡意代碼.
物聯(lián)網(wǎng)固件難以獲取主要體現(xiàn)在2方面:一方面,固件源碼獲取困難.大多數(shù)廠商為了保證設(shè)備安全與知識(shí)產(chǎn)權(quán),不會(huì)公開(kāi)固件源碼的下載,或者一些廠商只提供了最新版本的固件,無(wú)法獲得該固件的歷史版本.另一方面,固件代碼種類復(fù)雜.為了完成設(shè)備的各項(xiàng)功能,充分發(fā)揮各種程序語(yǔ)言的優(yōu)勢(shì),固件代碼里通?;煊袇R編以及C,Java,Python,JavaScript,Php等不同類型代碼,這極大阻礙了后期反編譯工作的進(jìn)行.常用的獲取固件手段包括從軟件獲取(如爬蟲(chóng)、模擬設(shè)備誘騙下載、App內(nèi)提取)以及從硬件提取.
4.1.1 通過(guò)爬蟲(chóng)獲取
一些設(shè)備廠商公開(kāi)了固件的下載地址,可以通過(guò)訪問(wèn)設(shè)備廠商的服務(wù)器獲取公開(kāi)可用的固件.對(duì)于未公布下載地址的設(shè)備,可以通過(guò)分析其固件時(shí)的網(wǎng)絡(luò)流量,獲得固件更新下載的地址.該方法不需要讀取物理設(shè)備的硬件,Chen等人[19]、Costin等人[20]均利用該方法編寫(xiě)網(wǎng)絡(luò)爬蟲(chóng),從各大設(shè)備廠商的web/ftp服務(wù)器獲取了幾萬(wàn)個(gè)設(shè)備的固件.
4.1.2 模擬設(shè)備行為誘騙下載
這是一種從軟件層面獲取固件的方法,通過(guò)模擬物聯(lián)網(wǎng)設(shè)備在真實(shí)環(huán)境下與云平臺(tái)的交互行為,包括數(shù)據(jù)格式和傳輸協(xié)議等.如通過(guò)設(shè)備模擬向云平臺(tái)直接發(fā)送固件更新的請(qǐng)求,或者間接將設(shè)備參數(shù)和設(shè)備過(guò)期的版本號(hào)等欺騙云發(fā)送固件下載鏈接,以達(dá)到獲取最新固件的目的.在進(jìn)行設(shè)備行為模擬時(shí),通常將模擬設(shè)備發(fā)送請(qǐng)求的軟件稱為幻影設(shè)備,Zhou等人[21]詳細(xì)介紹了構(gòu)造幻影設(shè)備的流程.
4.1.3 App內(nèi)提取
對(duì)于采用BLE(bluetooth low energy),Thread,ZigBee或者協(xié)議進(jìn)行通信的設(shè)備,如手環(huán)、體重秤、智能插座,傳輸數(shù)據(jù)量小,具有小巧、低能耗的特點(diǎn).這類物聯(lián)網(wǎng)設(shè)備并不和云平臺(tái)通過(guò)WiFi連接,當(dāng)進(jìn)行數(shù)據(jù)上報(bào)、固件更新時(shí),以手機(jī)或者網(wǎng)關(guān)為中轉(zhuǎn),間接接入互聯(lián)網(wǎng).為了提升用戶體驗(yàn),設(shè)備廠商在手機(jī)應(yīng)用程序中預(yù)先存儲(chǔ)或者下載最新版本的固件,等手機(jī)和設(shè)備建立連接時(shí)再進(jìn)行固件的更新升級(jí).利用此特性可以分析手機(jī)內(nèi)的文件,提取App里后綴名為.bin或者.fw的文件.
4.1.4 通過(guò)硬件提取
固件程序是保存在存儲(chǔ)器中的,通過(guò)人工拆解物聯(lián)網(wǎng)設(shè)備找到存儲(chǔ)芯片,通過(guò)編程器讀出芯片中的數(shù)據(jù).除此之外,如果主板上的接口沒(méi)被封死,還可以利用設(shè)備主板上的串口或聯(lián)合測(cè)試工作組(joint test action group, JTAG)接口,將設(shè)備與電腦連接,使用配套的軟件如OpenOCD等,可以硬件調(diào)試接口,讀取設(shè)備中的內(nèi)存信息,從而獲取固件代碼.硬件提取固件耗時(shí),而且提取出固件后,可能致使物聯(lián)網(wǎng)設(shè)備報(bào)廢,浪費(fèi)物力財(cái)力,導(dǎo)致實(shí)驗(yàn)無(wú)法繼續(xù)進(jìn)行.在實(shí)際研究工作中,通過(guò)硬件調(diào)試可以讀取通信加密密鑰,所以該方法常作為輔助手段,用于解密通信協(xié)議,輔助人工逆向工作.
由于固件的格式復(fù)雜多樣,沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),一方面固件的代碼風(fēng)格、結(jié)構(gòu)差異較大,另一方面固件運(yùn)行于不同的硬件之上,其處理器架構(gòu)和內(nèi)存架構(gòu)有較大差異,對(duì)于固件分析工具的可拓展性是巨大的挑戰(zhàn).當(dāng)前對(duì)于固件的自動(dòng)拆解工具主要應(yīng)用于包含通用操作系統(tǒng)的固件的解析,因?yàn)檫@些設(shè)備固件的鏡像通常是由簡(jiǎn)單的歸檔文檔或標(biāo)準(zhǔn)的文件系統(tǒng)組成的,使用現(xiàn)有的工具如binwalk可以很容易解壓.常見(jiàn)的使用通用操作系統(tǒng)的智能設(shè)備有智能路由器、智能攝像頭.對(duì)于單片機(jī)固件和實(shí)時(shí)操作系統(tǒng)固件,現(xiàn)有工具往往需要首先獲取固件二進(jìn)制文件在存儲(chǔ)器中裝載函數(shù)地址,然后將二進(jìn)制文件轉(zhuǎn)換為可以分析的鏡像文件.然而,這類固件在不同硬件上所使用的處理器、內(nèi)存架構(gòu)差異較大,其固件的文件格式不同,不同設(shè)備的裝載規(guī)則不同.目前針對(duì)單片機(jī)固件和實(shí)時(shí)操作系統(tǒng)固件,對(duì)于高效識(shí)別裝載基址、架構(gòu)還沒(méi)有一個(gè)很好的解決方法,已有的基址識(shí)別方案的準(zhǔn)確率較低[22],因此,在解析固件的文件格式時(shí),會(huì)產(chǎn)生誤判或者無(wú)法處理成可分析的鏡像文件.
符號(hào)信息缺失是物聯(lián)網(wǎng)固件分析面對(duì)的另一個(gè)問(wèn)題.在固件的開(kāi)發(fā)過(guò)程中,C語(yǔ)言的IoT開(kāi)源項(xiàng)目和標(biāo)準(zhǔn)函數(shù)庫(kù)是開(kāi)發(fā)者的首選.開(kāi)發(fā)者一般采用靜態(tài)鏈接的方式向設(shè)備寫(xiě)入固件,因?yàn)樵摲绞綄⑺械亩M(jìn)制代碼片段鏈接為一個(gè)二進(jìn)制代碼文件,有效地壓縮了程序體積,設(shè)備運(yùn)行代碼的效率也得到提高.這對(duì)于存儲(chǔ)、計(jì)算資源受限的物聯(lián)網(wǎng)設(shè)備來(lái)說(shuō)非常友好.但是從固件安全分析與逆向工程的角度來(lái)看,靜態(tài)鏈接抹去了函數(shù)名、變量名等庫(kù)函數(shù)的符號(hào)信息,導(dǎo)致無(wú)法區(qū)分設(shè)備廠商自定義的函數(shù)和標(biāo)準(zhǔn)庫(kù)中的函數(shù)信息,增加了固件反編譯的成本.而目前的靜態(tài)分析工具例如Dtaint[23]依賴于分析數(shù)據(jù)源函數(shù)到漏洞觸發(fā)點(diǎn)函數(shù)之間的數(shù)據(jù)流信息,由于靜態(tài)鏈接方式導(dǎo)致符號(hào)信息的缺失,使用靜態(tài)分析技術(shù)分析固件時(shí)將受到阻礙.
目前在動(dòng)態(tài)分析領(lǐng)域,固件仿真對(duì)于漏洞挖掘技術(shù)十分重要.動(dòng)態(tài)分析是通過(guò)仿真軟件加載固件,使固件在虛擬環(huán)境中運(yùn)行,并對(duì)固件進(jìn)行模糊測(cè)試[24].常用的仿真軟件有QEMU,它支持多種指令集,移植性好,仿真速度快,免費(fèi)且開(kāi)源,因此被廣泛應(yīng)用于固件安全性分析的仿真平臺(tái)設(shè)計(jì)中.Chen等人[19]首次提出了基于QEMU對(duì)以Linux為基礎(chǔ)的固件鏡像進(jìn)行大規(guī)模的動(dòng)態(tài)仿真方法,并識(shí)別出體系結(jié)構(gòu)的固件鏡像的百分比高達(dá)96.6%,說(shuō)明其仿真以Linux為操作系統(tǒng)固件能力是有效的.但由于固件格式的差異,在實(shí)際仿真其他類型非Linux操作系統(tǒng)的設(shè)備固件時(shí),會(huì)造成QEMU模擬固件時(shí)大量出現(xiàn)崩潰的情況,主要是因?yàn)椴煌碳袷讲町愝^大,仿真軟件難以正確定位固件裝載函數(shù)的地址或者無(wú)法訪問(wèn)廠商定制硬件的屬性.此外,如何構(gòu)造合適的測(cè)試用例也成為仿真困難的原因之一.由于固件的響應(yīng)嚴(yán)重依賴外部信號(hào)的輸入,而外設(shè)由于其類型豐富且內(nèi)部狀態(tài)復(fù)雜,因此為每個(gè)外設(shè)設(shè)計(jì)定制化的輸入需要大量人力成本,此外也難以構(gòu)造極端的輸入場(chǎng)景,無(wú)法探索更深的路徑.
一方面,出于成本和安全考慮,開(kāi)發(fā)人員會(huì)簡(jiǎn)化固件代碼,裁去不必要的組件,保留核心代碼,并在設(shè)備出廠時(shí)將其調(diào)試接口封死,很少有設(shè)備向第三方提供完備的調(diào)試接口,避免留有后門與外界直接交互,所以在固件運(yùn)行時(shí)數(shù)據(jù)難以通過(guò)調(diào)試接口獲取.另一方面,固件運(yùn)行的硬件資源有限,如CPU算力不夠、內(nèi)存過(guò)小.即使可以通過(guò)靜態(tài)插樁或二進(jìn)制重寫(xiě)等技術(shù),在物聯(lián)網(wǎng)設(shè)備中部署動(dòng)態(tài)分析方法也會(huì)因?yàn)槭苤朴谟布Y源,而影響到其分析結(jié)果.
分析物聯(lián)網(wǎng)固件面臨眾多挑戰(zhàn),保障物聯(lián)網(wǎng)設(shè)備安全的關(guān)鍵在于采用自動(dòng)化的流程,高效檢測(cè)固件漏洞[25].因此研究高效的自動(dòng)化的固件安全漏洞檢測(cè)方法具有重要意義.一方面可以在廠商正式發(fā)布固件之前檢測(cè)出漏洞,有效避免未來(lái)受攻擊所造成的損失;另一方面可以實(shí)現(xiàn)在有限時(shí)間內(nèi)分析大量固件,節(jié)省人力、物力等成本.
目前主流的自動(dòng)化漏洞檢測(cè)技術(shù)可以分為4類,分別是靜態(tài)分析技術(shù)、符號(hào)執(zhí)行技術(shù)、模糊測(cè)試技術(shù)、機(jī)器學(xué)習(xí)技術(shù).
靜態(tài)分析無(wú)需運(yùn)行物聯(lián)網(wǎng)設(shè)備,只對(duì)固件代碼進(jìn)行掃描,通過(guò)詞法分析、語(yǔ)法分析、控制流、數(shù)據(jù)流分析等技術(shù)驗(yàn)證固件代碼是否滿足規(guī)范性、安全性、可靠性、可維護(hù)性等指標(biāo).通過(guò)分析程序特征發(fā)現(xiàn)漏洞,可以達(dá)到檢測(cè)潛在安全漏洞的目的.由于設(shè)備固件程序涉及商業(yè)機(jī)密,廠商幾乎不公開(kāi)源代碼或文檔,獲取固件代碼極其困難,一般只能通過(guò)逆向工程,然后結(jié)合一些傳統(tǒng)的程序靜態(tài)分析技術(shù)進(jìn)行漏洞挖掘.物聯(lián)網(wǎng)設(shè)備固件的靜態(tài)分析的一般步驟如下:
1) 提取出固件中需要分析的程序模塊;
2) 使用逆向工具,將其轉(zhuǎn)換為匯編語(yǔ)言或其他中間語(yǔ)言;
3) 結(jié)合二進(jìn)制分析平臺(tái)或者逆向工具,恢復(fù)程序變量、函數(shù)、結(jié)構(gòu)以及CFG(control flow graph)等信息;
4) 結(jié)合靜態(tài)程序分析技術(shù),如模糊哈希[26]、污點(diǎn)分析[27]等,實(shí)施漏洞挖掘.
符號(hào)執(zhí)行[28]技術(shù)最早源于20世紀(jì)70年代中期,通過(guò)采用抽象的符號(hào)代替精確值作為程序輸入變量,得出每個(gè)路徑抽象的輸出結(jié)果,收集執(zhí)行路徑約束集合,求解約束產(chǎn)生的測(cè)試輸入,在給定的約束下,探索盡可能多的不同的程序路徑,用于檢查是否存在各種錯(cuò)誤.但是大多數(shù)符號(hào)執(zhí)行技術(shù)不適用于大型程序,存在路徑爆炸的問(wèn)題,隨著程序規(guī)模的擴(kuò)大,程序中有意義的路徑呈指數(shù)級(jí)擴(kuò)大.有些程序中存在無(wú)盡循環(huán)或遞歸調(diào)用,這更大大增加了有意義路徑,增大了符號(hào)執(zhí)行難度.
模糊測(cè)試技術(shù)最早出現(xiàn)于1990年,Miller等人[29]使用模糊測(cè)試發(fā)現(xiàn)Unix系統(tǒng)中的漏洞.其核心思想是將自動(dòng)或半自動(dòng)生成的隨機(jī)數(shù)據(jù)輸入到一個(gè)程序中,并監(jiān)控程序崩潰、錯(cuò)誤和內(nèi)存泄露等異常.針對(duì)固件運(yùn)行時(shí)所處的環(huán)境不同,可以將模糊測(cè)試分為2類:基于真實(shí)設(shè)備環(huán)境的模糊測(cè)試;基于仿真環(huán)境的模糊測(cè)試.在固件分析中應(yīng)用模糊測(cè)試技術(shù),向運(yùn)行固件發(fā)送大量有效或無(wú)效的輸入,觀察程序輸出的行為特征.在常規(guī)自動(dòng)化測(cè)試過(guò)程中,模糊測(cè)試擴(kuò)大了代碼覆蓋范圍,提高了代碼覆蓋率測(cè)試程度.但是模糊測(cè)試也存在一些問(wèn)題,如具有較強(qiáng)的盲目性、測(cè)試用例冗余度大、對(duì)關(guān)聯(lián)字段的針對(duì)性不強(qiáng)等.
人工智能技術(shù)可以對(duì)設(shè)備收集信息,對(duì)信息進(jìn)行深入學(xué)習(xí)和理解,在一定程度上可以彌補(bǔ)現(xiàn)有的檢測(cè)和防御技術(shù)在自動(dòng)化方面的不足[30].例如,使用一些機(jī)器學(xué)習(xí)、深度學(xué)習(xí)算法來(lái)挖掘已有的固件漏洞特征,并在代碼中匹配已知漏洞,結(jié)合模糊測(cè)試自動(dòng)進(jìn)行惡意應(yīng)用檢測(cè)或漏洞挖掘,借鑒遷移學(xué)習(xí)思想融合不同平臺(tái)的檢測(cè)知識(shí).隨著物聯(lián)網(wǎng)應(yīng)用類型不斷豐富,以及交互場(chǎng)景越來(lái)越復(fù)雜,利用人工智能技術(shù)提升威脅檢測(cè)和防御方案的效果是值得繼續(xù)深入研究的方向.
隨著5G、人工智能、區(qū)塊鏈、IPv6等技術(shù)的發(fā)展,物聯(lián)網(wǎng)設(shè)備數(shù)量呈爆炸式增長(zhǎng),其安全問(wèn)題也越來(lái)越得到學(xué)術(shù)界和工業(yè)的關(guān)注和重視.固件向下控制底層硬件,向上為復(fù)雜的設(shè)備功能提供支撐,固件安全對(duì)物聯(lián)網(wǎng)設(shè)備的重要程度是不言而喻的.但是在實(shí)際環(huán)境中,固件由于其格式復(fù)雜多樣,并沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),包括代碼結(jié)構(gòu)、處理器架構(gòu)、內(nèi)存架構(gòu)的差異較大,阻礙了固件自動(dòng)分析工具的可拓展性.雖然當(dāng)前針對(duì)固件安全的重視程度得到加強(qiáng),且研究也在不斷地增多,但仍有不足和亟待解決的問(wèn)題.
對(duì)于靜態(tài)分析技術(shù)而言,針對(duì)特定格式的固件能起到有效的作用,但是其可擴(kuò)展性差,測(cè)試某些類型的固件時(shí)會(huì)產(chǎn)生較高的誤報(bào),且當(dāng)固件代碼過(guò)多時(shí),靜態(tài)分析的難度會(huì)提高.目前隨著邊緣計(jì)算的興起,更多的數(shù)據(jù)計(jì)算與處理的相關(guān)代碼被加入到離數(shù)據(jù)更近的固件中,固件代碼量的增加會(huì)阻礙靜態(tài)分析.此外,設(shè)備廠商為了保護(hù)固件安全,混淆機(jī)制被應(yīng)用于固件代碼中,所以逆向工程的難度加劇.
符號(hào)執(zhí)行是程序分析技術(shù)的主要研究方向之一,在軟件測(cè)試等領(lǐng)域有很好的應(yīng)用前景,學(xué)術(shù)研究已經(jīng)相對(duì)成熟,很多企業(yè)以及科研機(jī)構(gòu)都在積極嘗試將符號(hào)執(zhí)行技術(shù)用于產(chǎn)品中.在符號(hào)執(zhí)行中,目前已經(jīng)可以將固件的可執(zhí)行bin文件輸入?yún)?shù),但是其擴(kuò)展性差,針對(duì)不同類型的固件需要人工定制不同的符號(hào)執(zhí)行,且存在路徑爆炸的問(wèn)題.
模糊測(cè)試可以分為在真實(shí)設(shè)備上運(yùn)行和在虛擬機(jī)中模擬運(yùn)行,前者面臨真物理資源有限的問(wèn)題,且關(guān)于固件運(yùn)行時(shí)的信息幾乎不能獲取;后者所面對(duì)的挑戰(zhàn)是目前的模擬器尚不能完全模擬硬件的所有真實(shí)狀態(tài),需要構(gòu)造大量有效或無(wú)效的輸入發(fā)送給模擬環(huán)境下的固件,構(gòu)造的輸入難以全面覆蓋,因此對(duì)固件進(jìn)行測(cè)試無(wú)法很好地進(jìn)行.
此外,隨著人工智能的發(fā)展,以此為依托的固件檢測(cè)技術(shù)正成為安全領(lǐng)域的研究熱點(diǎn).因?yàn)樵摲椒ú皇芟抻诠碳募軜?gòu),表現(xiàn)出良好的可拓展性,需要攻克的難點(diǎn)在于如何為固件特征提取,建立模型,選擇合適機(jī)器學(xué)習(xí)算法.可以將目前在普通軟件安全領(lǐng)域成熟的人工智能檢測(cè)手段,快速地移植到固件的漏洞測(cè)試中,但是需要不斷地調(diào)整參數(shù)改進(jìn)模型來(lái)提高的訓(xùn)練效率和預(yù)測(cè)精度.
綜上,只有及時(shí)解決固件安全分析中的諸多難點(diǎn),提前發(fā)現(xiàn)物聯(lián)網(wǎng)固件漏洞,才能有效地發(fā)現(xiàn)和防御攻擊行為,讓人們更安全地體驗(yàn)物聯(lián)網(wǎng)時(shí)代的便捷.