中國電子科技集團(tuán)公司第三十研究所 胡兆華 張一
嵌入式通信設(shè)備的安全漏洞是通信系統(tǒng)受到網(wǎng)絡(luò)安全威脅的重要原因之一。近年來,基于嵌入式系統(tǒng)的各類產(chǎn)品如雨后春筍般層出不窮,在通信領(lǐng)域更是廣泛使用。嵌入式通信設(shè)備的安全性不僅涉及個人隱私,甚至關(guān)乎國家安全。嵌入式通信設(shè)備正面臨日益嚴(yán)重的攻擊威脅,安全狀況極為嚴(yán)峻。
為了應(yīng)對嵌入式通信設(shè)備安全性提升的迫切要求,本文對嵌入式通信設(shè)備的特點(diǎn)及安全脆弱性進(jìn)行分析,通過對相關(guān)安全性測試技術(shù)的研究,提出了適用于嵌入式通信設(shè)備安全性測試的內(nèi)容和方法,為嵌入式通信設(shè)備的安全測試提供方法指導(dǎo),也為安全防護(hù)能力提升提供設(shè)計參考。
嵌入式通信設(shè)備具有功能穩(wěn)定、可靠性高、高實(shí)時性、系統(tǒng)資源占用少等特點(diǎn),一般部署于通信網(wǎng)絡(luò)中,通過特定的通信協(xié)議與外部實(shí)體進(jìn)行交互,如圖1 所示。
圖1 嵌入式通信設(shè)備與外部實(shí)體的交互Fig.1 Interactions between the embedded communication equipment and the external entity
嵌入式通信設(shè)備的高可靠性決定了其運(yùn)行的高安全性需求,其安全性很大程度上與嵌入式系統(tǒng)的安全性緊密相關(guān)。對于嵌入式通信設(shè)備而言,一方面受限于硬件尺寸、系統(tǒng)資源等因素,系統(tǒng)自身的安全防護(hù)能力非常有限;另一方面,作為通信設(shè)備,其部署的應(yīng)用環(huán)境使其直接暴露在通信網(wǎng)絡(luò)的各種攻擊力量下,因此,對嵌入式通信設(shè)備的安全防御能力評估非常重要。
嵌入式通信設(shè)備通過各類通信協(xié)議與外部實(shí)體進(jìn)行數(shù)據(jù)交互,設(shè)備內(nèi)部采用嵌入式操作系統(tǒng),由應(yīng)用程序?qū)崿F(xiàn)各種業(yè)務(wù)功能。嵌入式通信設(shè)備可能存在操作系統(tǒng)漏洞、應(yīng)用軟件漏洞、通信協(xié)議漏洞等,容易被攻擊者攻擊和滲透。
1.2.1 操作系統(tǒng)脆弱性
主流的嵌入式操作系統(tǒng)包括Vxworkd、Linux、uC/OS-II等,本文以嵌入式Linux 系統(tǒng)為例進(jìn)行操作系統(tǒng)脆弱性分析。Linux 操作系統(tǒng)作為自由、開放的系統(tǒng)軟件,設(shè)計初衷并非安全操作系統(tǒng),因此安全防護(hù)措施并不完善,需要依賴使用者在應(yīng)用中去提升其安全性。嵌入式Linux 系統(tǒng)存在的主要安全脆弱點(diǎn)如下:(1)訪問控制:Linux 系統(tǒng)主流發(fā)行版本均為自主訪問控制,自主訪問控制機(jī)制未考慮用戶角色、程序可信度等安全要素,故不能提供有效的安全性保障;(2)系統(tǒng)管理:為方便管理和操作,Root 賬戶擁有系統(tǒng)的所有權(quán)限,這種機(jī)制不符合“最小特權(quán)”管理原則。Root 賬戶可運(yùn)行任意程序,這種過高的特權(quán)可能導(dǎo)致較高的安全風(fēng)險;(3)文件系統(tǒng)訪問:容易出現(xiàn)Root 權(quán)限的濫用而普通用戶權(quán)限不足的情況;(4)網(wǎng)絡(luò)協(xié)議:網(wǎng)絡(luò)協(xié)議棧中部分協(xié)議存在安全漏洞;(5)系統(tǒng)日志方面:Linux 系統(tǒng)的日志缺乏資源訪問記錄和事件詳情記錄,無法跟蹤和記錄非法操作,也缺少必要的日志分析與警告。
1.2.2 應(yīng)用軟件缺陷
應(yīng)用軟件漏洞是嵌入式通信設(shè)備脆弱性的主要來源,主要有編碼錯誤和環(huán)境配置錯誤兩大類,進(jìn)一步細(xì)分,還可以分為以下幾類:(1)輸入驗證錯誤:對用戶提供的輸入數(shù)據(jù)未進(jìn)行合法性檢查,攻擊者可輸入非法數(shù)據(jù)對系統(tǒng)進(jìn)行攻擊;(2)緩沖區(qū)溢出錯誤:當(dāng)程序緩沖區(qū)寫入數(shù)據(jù)超過其規(guī)定長度時,會造成緩沖區(qū)溢出,破壞程序正常的堆棧,使程序執(zhí)行其他代碼;(3)邊界條件錯誤:程序未對邊界條件進(jìn)行有效判斷;(4)意外情況錯誤:程序處理邏輯中未正確處理異常情況而導(dǎo)致運(yùn)行出錯;(5)設(shè)計錯誤:程序處理邏輯不嚴(yán)謹(jǐn),或是為了調(diào)試方便而設(shè)計的一些“后門”;(6)配置錯誤:系統(tǒng)或應(yīng)用的配置錯誤,比如訪問權(quán)限配置錯誤、參數(shù)配置錯誤等。
1.2.3 通信協(xié)議脆弱性
嵌入式通信設(shè)備通信協(xié)議的脆弱性,一方面原因是協(xié)議設(shè)計上的安全缺陷;另一方面原因是協(xié)議實(shí)現(xiàn)時的編碼錯誤。通信協(xié)議一般有以下幾類常見的脆弱性:(1)數(shù)據(jù)的機(jī)密性:通信交互的敏感數(shù)據(jù)未進(jìn)行加密保護(hù),攻擊者可以在通信線路上直接探測或捕獲通信設(shè)備與外部實(shí)體間傳輸?shù)拿舾袛?shù)據(jù);(2)數(shù)據(jù)的完整性:通信雙方交互信息未進(jìn)行完整性保護(hù),攻擊者可輕易對通信線路上的數(shù)據(jù)進(jìn)行篡改或刪除,而數(shù)據(jù)接收方卻不能察覺或未進(jìn)行數(shù)據(jù)正確性驗證;(3)協(xié)議數(shù)據(jù)的抗重放:通信雙方對交互的協(xié)議數(shù)據(jù)沒有抗重放檢測能力,攻擊者可截獲通信協(xié)議數(shù)據(jù)并原封不動地重新發(fā)送給數(shù)據(jù)接收方,接收方不能判斷該協(xié)議數(shù)據(jù)是否是已經(jīng)接收過的數(shù)據(jù);(4)協(xié)議的弱認(rèn)證性:通信協(xié)議數(shù)據(jù)在交互過程中,缺乏對交互對象的身份驗證或者是身份驗證力度較弱,交互數(shù)據(jù)很容易被攻擊者仿冒,接收方卻不能覺察交互對象的改變,攻擊者可進(jìn)而實(shí)施信息竊取或拒絕服務(wù)等攻擊。
傳統(tǒng)的安全性測試方法和工具主要面向通用IT 系統(tǒng),不能完全滿足對嵌入式通信設(shè)備進(jìn)行安全性測試的需要,主要原因如下(:1)嵌入式通信設(shè)備非標(biāo)準(zhǔn)通用設(shè)備,采用的嵌入式操作系統(tǒng)經(jīng)過定制化開發(fā)或裁剪,通用安全漏洞掃描工具的掃描結(jié)果可能存在大量誤報;(2)嵌入式通信設(shè)備采用了較多的定制化軟件,公開安全漏洞較少,傳統(tǒng)安全評估分析工具難以對其進(jìn)行安全性評估;(3)嵌入式通信設(shè)備采用專用通信協(xié)議,通用協(xié)議測試工具不支持這類專用協(xié)議,無法開展相關(guān)協(xié)議分析測試。
綜上所述,傳統(tǒng)安全測試手段缺乏對嵌入式通信設(shè)備定制化開發(fā)程序的測試實(shí)踐和技術(shù)積累,基于通用設(shè)備或協(xié)議的安全性測試工具并不完全適用于嵌入式通信設(shè)備的安全性測試。
針對當(dāng)前嵌入式通信設(shè)備的安全現(xiàn)狀,在已有嵌入式通信設(shè)備安全脆弱性分析實(shí)踐的基礎(chǔ)上,本文總結(jié)了適用于嵌入式通信設(shè)備的安全性測試方法,在充分利用傳統(tǒng)安全性測試手段的基礎(chǔ)上,采用已知漏洞分析、未知漏洞挖掘以及安全配置檢查等相結(jié)合的方法對嵌入式通信設(shè)備進(jìn)行安全性測試。
已知漏洞分析主要用于發(fā)現(xiàn)嵌入式操作系統(tǒng)內(nèi)核、三方應(yīng)用服務(wù)等的已知缺陷,主要有4 種分析方法:版本掃描、原理掃描、補(bǔ)丁對比和人工分析。這幾種分析技術(shù)的原理及優(yōu)缺點(diǎn)對比如表1 所示。
表1 漏洞分析的技術(shù)原理及對比Tab.1 Technical principles and compareisons of vulnerablility analysis
嵌入式通信設(shè)備的未知漏洞挖掘,主要針對應(yīng)用軟件或通信協(xié)議中的潛在未知安全漏洞。漏洞挖掘的方法有靜態(tài)分析、動態(tài)分析和人工分析3種,如表2 所示。
表2 漏洞挖掘方法和原理Tab.2 Methods and principles of vulnerability mining
2.2.1 靜態(tài)分析方法
嵌入式通信設(shè)備漏洞挖掘的靜態(tài)分析方法,一般使用代碼靜態(tài)分析工具對程序代碼進(jìn)行靜態(tài)字符串搜索,實(shí)現(xiàn)代碼缺陷的發(fā)現(xiàn)。
測試者獲取嵌入式系統(tǒng)的源碼,可以使用源代碼掃描工具自動進(jìn)行代碼分析,常用的源代碼掃描工具有Klocwork、Cppcheck、Parasoft C/C++test 等。對于不能提供源碼的系統(tǒng)或軟件,比如:執(zhí)行文件、三方庫等,可以采用基于目標(biāo)碼的二進(jìn)制分析工具實(shí)現(xiàn)靜態(tài)分析。二進(jìn)制分析工具采用二進(jìn)制逆向分析技術(shù)實(shí)現(xiàn)文件掃描和分析,再人工對掃描結(jié)果判斷、篩選,最終確認(rèn)問題?;谀繕?biāo)碼的分析方法一般涉及程序編譯器、計算機(jī)硬件指令系統(tǒng)、可執(zhí)行文件格式等方面的分析技術(shù),實(shí)現(xiàn)難度較大。目前較為成功的商業(yè)化二進(jìn)制分析工具有CodeSonar、SwiftBinary、Cybellum等,開源的分析工具,包括angr、BAP、cew_checker、BinAbslnspector等,它們在實(shí)際項目中代碼質(zhì)量保障上發(fā)揮了重要的作用。
2.2.2 動態(tài)分析方法
動態(tài)分析方法作為靜態(tài)分析方法的補(bǔ)充,在嵌入式通信設(shè)備的漏洞挖掘中有重要作用。動態(tài)分析方法分為白盒分析和黑盒分析兩類。白盒分析方法主要是對動態(tài)運(yùn)行的程序代碼流進(jìn)行分析[2],通過設(shè)置斷點(diǎn)動態(tài)跟蹤目標(biāo)程序代碼流,以檢測有缺陷的函數(shù)調(diào)用及其參數(shù),主流的代碼分析工具都支持代碼流的分析。黑盒分析方法分為數(shù)據(jù)流分析和格式分析兩種。數(shù)據(jù)流分析對業(yè)務(wù)或管理數(shù)據(jù)流進(jìn)行分析,并嘗試構(gòu)造輸入非常規(guī)的數(shù)據(jù)來觸發(fā)漏洞。格式分析可用于協(xié)議漏洞分析,通過解析協(xié)議數(shù)據(jù)包,對涉及字符串?dāng)?shù)據(jù)的操作進(jìn)行分析。對動態(tài)Web 頁面、文件格式和通信協(xié)議等的動態(tài)分析通常采用模糊測試工具實(shí)現(xiàn)。
實(shí)際嵌入式設(shè)備的漏洞挖掘過程中,靜態(tài)分析、動態(tài)分析和人工分析方法的綜合使用已經(jīng)成為未來的主要方向。
嵌入式設(shè)備除了軟件代碼存在脆弱性,操作系統(tǒng)的安全策略缺失或不足也是導(dǎo)致設(shè)備容易受到惡意攻擊的原因之一,因此對操作系統(tǒng)的安全策略配置進(jìn)行檢查是嵌入式設(shè)備安全性測試的重要內(nèi)容。
操作系統(tǒng)的安全策略配置檢查主要從訪問控制、文件系統(tǒng)安全、運(yùn)行安全三方面進(jìn)行。
2.3.1 訪問控制安全
對系統(tǒng)的關(guān)鍵或敏感文件訪問權(quán)限進(jìn)行設(shè)置,禁止非授權(quán)訪問。對系統(tǒng)重要文件訪問制定安全策略,實(shí)施嚴(yán)格的強(qiáng)制訪問控制。
2.3.2 文件系統(tǒng)安全
(1)重要文件加固:通過chattr 命令對系統(tǒng)重要文件或目錄進(jìn)行鎖定[1];(2)臨時目錄安全:臨時目錄中所有用戶均有讀寫權(quán)限,需要禁止在/tmp、/var/tmp、/dev/shm 等臨時目錄下執(zhí)行應(yīng)用程序[1]。
2.3.3 安全運(yùn)行策略
(1)用戶登錄:刪除多余的用戶和用戶組[3],限制冗余的用戶登錄權(quán)限;對用戶登錄次數(shù)進(jìn)行限制;使用普通用戶登錄,禁止Root 登錄;遠(yuǎn)程登錄使用密鑰,禁止密碼登錄;(2)系統(tǒng)服務(wù):關(guān)閉不需要的系統(tǒng)服務(wù);(3)系統(tǒng)開機(jī)啟動過程:不允許通過輸入按鍵中斷啟動過程;(4)密碼策略:系統(tǒng)口令的過期時間進(jìn)行限制,對口令復(fù)雜度進(jìn)行設(shè)置,對新口令的歷史重用度進(jìn)行限制;(5)帳戶策略:對賬戶歷史命令保存條數(shù)、賬戶使用超時時間進(jìn)行限制;(6)賬戶切換:只允許指定用戶組使用su 命令切換到Root 用戶;(7)登錄界面隱藏系統(tǒng)版本信息;(8)開啟防火墻;(9)最小權(quán)限原則:系統(tǒng)只賦予每個管理員完成任務(wù)所需的最小權(quán)限,且職責(zé)分離;(10)行為監(jiān)控審計:啟用必要的日志記錄。
結(jié)合上述安全性測試技術(shù)和方法,對某嵌入式通信設(shè)備進(jìn)行了應(yīng)用實(shí)踐,測試環(huán)境如圖2 所示。
圖2 安全性測試拓?fù)鋱DFig.2 Scurity test toplogy diagram
被測嵌入式通信設(shè)備、陪測設(shè)備和測試平臺通過交換機(jī)相連,測試終端1 控制測試平臺執(zhí)行測試,監(jiān)控終端對被測通信設(shè)備的狀態(tài)進(jìn)行監(jiān)控,測試終端2 直連被測設(shè)備,對設(shè)備進(jìn)行系統(tǒng)安全配置測試。
測試終端1 控制測試平臺執(zhí)行以下安全性測試:(1)主機(jī)和Web 漏洞掃描:掃描設(shè)備開放的端口和應(yīng)用服務(wù),發(fā)現(xiàn)操作系統(tǒng)、Web 及其他應(yīng)用服務(wù)的已知漏洞。針對發(fā)現(xiàn)的已知漏洞,使用測試終端2 進(jìn)行漏洞復(fù)現(xiàn)及驗證,去除掃描工具誤報的漏洞。(2)協(xié)議模糊測試:利用測試平臺構(gòu)造變異的協(xié)議報文發(fā)往被測設(shè)備,動態(tài)監(jiān)測被測設(shè)備的工作狀態(tài),通過監(jiān)測終端記錄被測設(shè)備的狀態(tài)信息、異常日志及報警信息,捕獲設(shè)備異常崩潰的狀態(tài)信息。(3)網(wǎng)絡(luò)攻擊測試:通過測試平臺發(fā)送各種Dos 攻擊報文、通信業(yè)務(wù)的重放包,或大量發(fā)送精心構(gòu)造的畸形網(wǎng)絡(luò)包,檢測被測設(shè)備的資源占用和對通信業(yè)務(wù)的影響情況。
此外,通過測試終端2 直連設(shè)備,對被測設(shè)備進(jìn)行靜態(tài)測試。重點(diǎn)是通過串口進(jìn)行操作系統(tǒng)的安全配置測試,包括安全登錄、文件系統(tǒng)檢查、安全運(yùn)行策略等。
通過上述安全性測試,發(fā)現(xiàn)該設(shè)備存在多個冗余端口和應(yīng)用服務(wù),操作系統(tǒng)和應(yīng)用程序還存在嚴(yán)重安全漏洞。通過協(xié)議模糊測試,發(fā)現(xiàn)設(shè)備多處協(xié)議處理存在內(nèi)存溢出問題,可導(dǎo)致系統(tǒng)崩潰;同時,設(shè)備通信協(xié)議字段檢查不嚴(yán)格,Dos 攻擊和畸形包均可引起設(shè)備資源耗盡,甚至重啟。操作系統(tǒng)也存在弱口令登錄、安全運(yùn)行策略未配置等安全隱患。以上測試結(jié)果說明綜合采用多種安全性測試方法有效。
開展對嵌入式通信設(shè)備的安全測試可以評估設(shè)備的安全風(fēng)險,提升設(shè)備的安全能力,也能為制定適當(dāng)、有效的設(shè)備安全防護(hù)策略提供參考,從而保障嵌入式通信設(shè)備的安全運(yùn)行。本文從嵌入式通信設(shè)備的安全脆弱性分析出發(fā),研究了傳統(tǒng)安全測試手段的局限性,提出了嵌入式通信設(shè)備的安全性測試方法并在設(shè)備上進(jìn)行了測試實(shí)踐,為提升嵌入式通信設(shè)備的安全防護(hù)能力提供了技術(shù)支撐和設(shè)計依據(jù)。
引用
[1] 熊婧,黃小昆.安全操作系統(tǒng)滲透測試方案研究[J].電子產(chǎn)品可靠性與環(huán)境試驗,2013:141-146.
[2] 董麗,趙琪,周鍵.嵌入式軟件安全性分析和測試方法研究[J].信息系統(tǒng)工程,2021(5):70-71.
[3] 李景煒.嵌入式Linux操作系統(tǒng)安全性研究[D].西安:西安電子科技大學(xué),2015.