李金亮 高文靜
(91404部隊(duì)93分隊(duì) 秦皇島 066001)
?
基于Fuzzing技術(shù)的可信軟件棧穿透性測(cè)試*
李金亮高文靜
(91404部隊(duì)93分隊(duì)秦皇島066001)
摘要利用Fuzzing技術(shù)對(duì)可信軟件棧(TSS)進(jìn)行軟件代碼脆弱性以及安全漏洞測(cè)試,通過故障注入、畸形數(shù)據(jù)構(gòu)造以及異常行為捕獲,發(fā)現(xiàn)了TSS軟件代碼中的安全缺陷,根據(jù)TSS的系統(tǒng)結(jié)構(gòu)與具體機(jī)制,設(shè)計(jì)并實(shí)現(xiàn)了相關(guān)測(cè)試原型系統(tǒng),對(duì)TSS軟件產(chǎn)品進(jìn)行了測(cè)試,實(shí)驗(yàn)結(jié)果表明:TSS軟件產(chǎn)品并不完全符合可信規(guī)范的要求,TSS中的若干API功能函數(shù)中存在可被利用的安全漏洞。
關(guān)鍵詞Fuzzing技術(shù); 可信軟件棧; 穿透性測(cè)試
Penetration Testing for TCG Software Stack Based on Fuzzing Technology
LI JinliangGAO Wenjing
(Unit 93, No. 91404 Troops of PLA, Qinhuangdao066001)
AbstractFuzzing testing technology is utilized to find security faults and codes vulnerability for TCG software stack(TSS). By using fault injection, abnormal data structure and capture abnormal behavior, security flaws in TSS are found in this paper. According to TSS’ structure and specification, the relevant test prototype system is designed and implemented to test some kinds of TSS products. Experiment results show that TSS products do not fully comply with the requirements of specification, there are some vulnerability in API functions of TSS.
Key WordsFuzzing technology, TCG software stack, penetration testing
Class NumberTP309
1引言
可信計(jì)算已經(jīng)成為國際信息安全領(lǐng)域的新熱潮。可信軟件棧(TCG Software Stack,TSS)是可信計(jì)算平臺(tái)的重要組成部分,可信計(jì)算產(chǎn)品應(yīng)符合可信計(jì)算規(guī)范的要求。從安全測(cè)評(píng)的角度出發(fā),應(yīng)通過標(biāo)準(zhǔn)符合性測(cè)試、安全穿透性測(cè)試和漏洞掃描測(cè)試等測(cè)試手段對(duì)TSS進(jìn)行安全測(cè)評(píng),以檢測(cè)TSS系統(tǒng)中是否存在已知、公開的安全漏洞[1]。
在安全穿透性測(cè)試方面,除文獻(xiàn)[2]發(fā)現(xiàn)了部分安全缺陷外,文獻(xiàn)[3]將白盒源代碼審核和Fuzzing技術(shù)相結(jié)合,發(fā)現(xiàn)OpenTC項(xiàng)目中的TSS存在若干程序Bug以及可能造成遠(yuǎn)程溢出的安全漏洞。
本文以國內(nèi)外TSS為穿透性測(cè)試對(duì)象,利用Fuzzing技術(shù)檢查產(chǎn)品代碼中是否存在安全漏洞,從而發(fā)現(xiàn)軟件代碼中的安全缺陷。通過對(duì)相關(guān)TSS產(chǎn)品的實(shí)驗(yàn)測(cè)評(píng),給出TSS安全性評(píng)估的量化測(cè)試結(jié)果,并且發(fā)現(xiàn)API(Application Programming Interface)接口函數(shù)中存在的若干安全漏洞。
2技術(shù)背景
目前國內(nèi)外較常見以及成熟的穿透性測(cè)試技術(shù),主要包括靜態(tài)分析、補(bǔ)丁分析、Fuzzing技術(shù)[4]與動(dòng)態(tài)調(diào)試技術(shù)。這四種技術(shù)分別從靜態(tài)和動(dòng)態(tài)的角度,對(duì)被測(cè)軟件進(jìn)行針對(duì)性的測(cè)試與分析,從而有效地發(fā)現(xiàn)軟件中存在的各種安全漏洞。
Fuzzing技術(shù)是一種自動(dòng)化的軟件黑盒測(cè)試技術(shù),它使用大量半有效的隨機(jī)數(shù)據(jù)作為軟件程序的輸入,通過程序的崩潰和異常等特征,從而尋找其中的安全漏洞[5]。對(duì)于結(jié)構(gòu)封閉的、不開放源代碼的安全硬件和軟件系統(tǒng)而言,Fuzzing的黑盒測(cè)試技術(shù)具有更實(shí)際的應(yīng)用價(jià)值。即使是普遍認(rèn)為的高可信的設(shè)備(如ATM取款機(jī)),也可能由于邊界條件的違背,健壯性受到破壞并被成功利用。Fuzzing技術(shù)最初是用于測(cè)試Unix操作系統(tǒng)及其上應(yīng)用軟件的穩(wěn)定性[6];在后繼的研究中,Fuzzing技術(shù)用于測(cè)試X Windows、Windows NT和Mac OS X等系統(tǒng)上應(yīng)用軟件中的安全漏洞[7~8]。目前,Fuzzing技術(shù)已經(jīng)成為工業(yè)界最為常用的安全漏洞檢測(cè)技術(shù),主要利用該技術(shù)測(cè)試各種文檔處理軟件以及網(wǎng)絡(luò)協(xié)議軟件。安全測(cè)試人員也將其作為安全產(chǎn)品發(fā)布前的最后一道測(cè)試環(huán)節(jié)。
Fuzzing技術(shù)研究的兩個(gè)關(guān)鍵問題,一是脆弱性測(cè)試點(diǎn)以及觀察點(diǎn)的選取,如何在對(duì)測(cè)試對(duì)象深入分析的基礎(chǔ)上,選取薄弱環(huán)節(jié)利用構(gòu)造的測(cè)試數(shù)據(jù),更有效地引發(fā)程序中的安全漏洞;二是半有效畸形數(shù)據(jù)的構(gòu)造,如何在原有正常數(shù)據(jù)的基礎(chǔ)上,結(jié)合漏洞類型相關(guān)的測(cè)試邏輯進(jìn)行變異,變異后的畸形數(shù)據(jù)既能通過待測(cè)程序的輸入檢查,又能引發(fā)相應(yīng)類型的安全漏洞。此外,已有研究人員對(duì)多種漏洞挖掘技術(shù)的結(jié)合進(jìn)行了有益的探索,文獻(xiàn)[9]提出將模型測(cè)試和Fuzzing測(cè)試相結(jié)合,文獻(xiàn)[10]提出了演化灰盒Fuzzing的思路。
3基于Fuzzing技術(shù)的TSS穿透性測(cè)試
3.1故障注入點(diǎn)選取
TSS是一個(gè)多層封裝的軟件系統(tǒng),其中TSP(Trusted Service Provider)是以動(dòng)態(tài)鏈接庫的形式,向用戶應(yīng)用進(jìn)程提供API調(diào)用函數(shù)接口,同時(shí)TSP層將用戶的API調(diào)用以SOAP(Simple Object Access Protocol)數(shù)據(jù)包的形式,通過TCP/IP協(xié)議發(fā)送給下面的TCS(Trusted Core Service)層和TDDL(Trusted Device Driver Layer)層。TCS層和TDDL層是以一個(gè)唯一的獨(dú)立守護(hù)進(jìn)程的形式執(zhí)行,可以接收來自于本地或是遠(yuǎn)程主機(jī)的TSP層發(fā)送的數(shù)據(jù),經(jīng)過內(nèi)部處理后,再由TPM(Trusted Platform Module)驅(qū)動(dòng)下傳給TPM處理,最終處理后的結(jié)果同樣以SOAP數(shù)據(jù)包的形式返回給TSP層,最終由TSP層將結(jié)果返回給用戶進(jìn)程。
為攔截正常的數(shù)據(jù)處理流程,并且分別針對(duì)TSP層和TCS層的API函數(shù)進(jìn)行測(cè)試,穿透性測(cè)試最終選擇兩個(gè)故障注入的最佳測(cè)試點(diǎn),一個(gè)位于用戶層,攔截用戶進(jìn)程對(duì)TSP中API函數(shù)的調(diào)用請(qǐng)求,使用程序代碼插樁技術(shù);另一個(gè)位于網(wǎng)絡(luò)層,攔截TSP層到TCS層的SOAP數(shù)據(jù)包,使用Socket數(shù)據(jù)包過濾技術(shù)。TSS的整體數(shù)據(jù)處理流程與故障注入點(diǎn)的選取如圖1所示。
圖1 TSS數(shù)據(jù)處理流程與故障注入點(diǎn)
數(shù)據(jù)攔截以及故障注入的具體流程如下:
1) 在這兩個(gè)故障注入點(diǎn)完成數(shù)據(jù)的實(shí)時(shí)攔截。 2) 將數(shù)據(jù)轉(zhuǎn)發(fā)給特定的Fuzzing測(cè)試程序。 3) 由該測(cè)試程序完成數(shù)據(jù)的解析,并且根據(jù)漏洞特征測(cè)試算法對(duì)其中關(guān)鍵的數(shù)據(jù)段進(jìn)行畸形數(shù)據(jù)的變異,最后仍按正常數(shù)據(jù)的語法格式重新封裝。 4) 封裝后的數(shù)據(jù)回傳至攔截點(diǎn),并沿原流程繼續(xù)處理。
3.2畸形測(cè)試數(shù)據(jù)構(gòu)造
在Fuzzing測(cè)試中,畸形測(cè)試數(shù)據(jù)的構(gòu)造也是一個(gè)重要內(nèi)容。變異后數(shù)據(jù)既要求通過待測(cè)函數(shù)的輸入檢查,從而進(jìn)入函數(shù)代碼內(nèi)部檢查脆弱點(diǎn);又要求與利用特定漏洞特征測(cè)試算法,盡可能有效地觸發(fā)潛在的安全漏洞。
為簡(jiǎn)化討論,算法假定攔截的數(shù)據(jù)中只包含一個(gè)數(shù)據(jù)緩沖區(qū)變量,而實(shí)際上算法也可同時(shí)處理多個(gè)數(shù)據(jù)緩沖區(qū)變量,從而提高測(cè)試的效率。但還有一種較為復(fù)雜的情況是,多個(gè)緩沖區(qū)變量之間可能存在依賴關(guān)系。例如,當(dāng)緩沖區(qū)A不包含特定值時(shí),緩沖區(qū)B的溢出漏洞就不會(huì)被發(fā)現(xiàn)。例如,在對(duì)某類網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行Fuzzing測(cè)試實(shí)現(xiàn)時(shí),發(fā)現(xiàn)了這樣一個(gè)現(xiàn)象,當(dāng)數(shù)據(jù)包的屬性字段并非“message/external-body”時(shí),數(shù)據(jù)包的內(nèi)容字段就不會(huì)被解析處理,從而也無法發(fā)現(xiàn)相應(yīng)接收函數(shù)的緩沖區(qū)溢出漏洞。
因此,數(shù)據(jù)構(gòu)造模塊在對(duì)測(cè)試數(shù)據(jù)進(jìn)行畸形構(gòu)造前,需要首先利用收集到的通信數(shù)據(jù)的結(jié)構(gòu)描述信息,對(duì)攔截到的數(shù)據(jù)進(jìn)行正常解析。一方面識(shí)別需要構(gòu)造的字段或變量,并且明確字段或變量間的依賴關(guān)系;另一方面需要維持其它字段或變量的穩(wěn)定,利用這些“不變量”保證變異后的數(shù)據(jù)可以通過待測(cè)函數(shù)的語法檢查。在根據(jù)相應(yīng)的漏洞測(cè)試算法對(duì)數(shù)據(jù)進(jìn)行變異后,再根據(jù)結(jié)構(gòu)描述信息進(jìn)行重新的組合。數(shù)據(jù)構(gòu)造模塊的處理流程如圖2所示。
圖2 畸形數(shù)據(jù)構(gòu)造流程
圖3 API函數(shù)輸入數(shù)據(jù)結(jié)構(gòu)描述
在測(cè)試的具體實(shí)施中,各待測(cè)API函數(shù)的輸入數(shù)據(jù)結(jié)構(gòu)描述信息從規(guī)范的定義中提取,采用XML(eXtensible Markup Language)格式記錄其中的變量聲明、類型定義以及需要進(jìn)行構(gòu)造的變量或字段。采用這種方法可以方便地對(duì)測(cè)試數(shù)據(jù)進(jìn)行解析和重組,圖3為TSS中的其中某個(gè)API函數(shù)的輸入數(shù)據(jù)結(jié)構(gòu)的描述信息。
3.3異常捕獲與分析
在明確了故障注入點(diǎn)和數(shù)據(jù)構(gòu)造方法后,就可著手針對(duì)TSS進(jìn)行穿透性測(cè)試實(shí)驗(yàn)與分析。測(cè)試的根本目的是發(fā)現(xiàn)軟件中存在的安全漏洞,而安全漏洞外在最明顯的特征就是測(cè)試對(duì)象的行為異常,在此簡(jiǎn)化理解為程序的崩潰或報(bào)錯(cuò)。錯(cuò)誤要求是可重現(xiàn)的,從而便于對(duì)漏洞的分析以及調(diào)試。雖然針對(duì)TSP層和TCS層函數(shù)分別進(jìn)行測(cè)試,但是由于兩層函數(shù)在數(shù)據(jù)處理上具有關(guān)聯(lián)性,因?yàn)樵跍y(cè)試TSP層函數(shù)時(shí),也需要觀察TCS層的運(yùn)行狀況。TSP層和TCS層的運(yùn)行狀況,都是通過管道通信反饋給Fuzzing程序。
TSP層函數(shù)的Fuzzing測(cè)試流程如圖4所示,故障注入通過HOOK的方式插入到正常處理流程中。在圖中,失敗的測(cè)試用例可能對(duì)應(yīng)某種潛在安全漏洞,需要進(jìn)一步分析與調(diào)試。
圖4 TSP層Fuzzing測(cè)試流程
TCS層函數(shù)的Fuzzing測(cè)試流程與TSP層的類似,故障注入通過Socket包過濾的方式插入到正常處理流程中。實(shí)驗(yàn)中采用了Netfilter機(jī)制,因其作為系統(tǒng)自帶的內(nèi)核模塊,具有較好的穩(wěn)定性和可擴(kuò)展性。
4實(shí)驗(yàn)結(jié)果與分析
基于以上原理與技術(shù),本文實(shí)現(xiàn)了穿透性測(cè)試原型系統(tǒng),并針對(duì)某TSS中的TSP層函數(shù)和TCS層函數(shù)進(jìn)行測(cè)試實(shí)驗(yàn)。在測(cè)試過程中,共生成14397組測(cè)試用例,其中發(fā)現(xiàn)錯(cuò)誤的測(cè)試用例共計(jì)63組,測(cè)試結(jié)果分類統(tǒng)計(jì)如表1所示。
表1 穿透性測(cè)試結(jié)果統(tǒng)計(jì)
表2 API函數(shù)測(cè)試結(jié)果統(tǒng)計(jì)
從統(tǒng)計(jì)數(shù)據(jù)中可以看出,失敗的測(cè)試用例只占全部測(cè)試用例的0.43%左右。從另一個(gè)角度來看,雖然軟件錯(cuò)誤用例的比重很小,但是發(fā)現(xiàn)存在安全漏洞的API函數(shù)的意義卻很重要。在測(cè)試中,發(fā)現(xiàn)5個(gè)TSP函數(shù)和1個(gè)TCS函數(shù)存在安全漏洞,如表2所示。這表明,即使是TSS這種對(duì)安全性要求非常敏感的軟件,也不可避免地存在安全漏洞與缺陷。這些安全漏洞可能被攻擊者用于進(jìn)行拒絕服務(wù)或遠(yuǎn)程代碼執(zhí)行等各種類型的攻擊。
5結(jié)語
TSS的安全測(cè)評(píng)是對(duì)其安全屬性的綜合評(píng)價(jià),利用Fuzzing測(cè)試技術(shù)檢查TSS產(chǎn)品代碼中是否存在安全漏洞,發(fā)現(xiàn)軟件代碼中的安全缺陷,是TSS安全屬性測(cè)評(píng)中不可或缺的重要內(nèi)容。本文利用Fuzzing技術(shù)挖掘軟件中潛在的安全漏洞與缺陷,對(duì)Fuzzing測(cè)試環(huán)節(jié)中的故障注入點(diǎn)、畸形數(shù)據(jù)構(gòu)造以及異常行為捕獲與分析等關(guān)鍵問題進(jìn)行研究,分別針對(duì)TSP層和TCS層函數(shù)制定了不同的Fuzzing測(cè)試方案。對(duì)某TSS產(chǎn)品實(shí)驗(yàn)結(jié)果表明:若干API接口函數(shù)中存在潛在的安全漏洞,對(duì)整個(gè)TSS的安全性產(chǎn)生威脅。
下一步的工作將研究如何把符號(hào)執(zhí)行、污點(diǎn)傳播與Fuzzing技術(shù)相結(jié)合的白盒Fuzzing技術(shù),將程序動(dòng)態(tài)分析技術(shù)與漏洞挖掘技術(shù)相互結(jié)合、優(yōu)勢(shì)互補(bǔ),針對(duì)種類更加豐富的代碼安全缺陷進(jìn)行檢測(cè)。
參 考 文 獻(xiàn)
[1] ZHANG Huanguo, YAN Fei, FU Jianming, et al. Research on Theory and Key Technology of Trusted Computing Platform Security Testing and Evaluation[J]. Science China: Information Sciences,2010,53(3):434-453.
[2] SADEGHI Ahmad Reza, SELHORST Marcel, STUEBLE Christian, et al. TCG inside?-a Note on TPM Specification Compliance. In First ACM Workshop on Scalable Trusted Computing[C]. New York: ACM Press,2006:47-56.
[3] GERGELY Toth, KOSZEGI Gabor, HORNAK Zoltan. Case Study: Automated Security Testing on the Trusted Computing Platform[C]//Proceedings of the 1st ACM SIGOPS European Workshop on System Security. New York: ACM Press,2008:35-39.
[4] SUTTON Michael, GREENE Adam, AMINI Pedram. Fuzzing: Brute Force Vulnerability Discovery[M]. New Jersey: Addison-Wesley Professional,2007.
[5] PETER Oehlert. Violating Assumptions with Fuzzing[J]. IEEE Security & Privacy,2005,3(2):58-62.
[6] BARTON P. Miller, LOUIS Fredriksen, BRYAN So. An Empirical Study of the Reliability of UNIX Utilities[J]. In Communications of the ACM,1990,33(12):32-44.
[7] JUSTIN E. Forrester, BARTON P. Miller. An Empirical Study of the Robustness of Windows NT Applications Using Random Testing[C]//WSS’00: Proceedings of the 4th conference on USENIX Windows Systems Symposium, Berkeley, CA, USA,2000:6-16.
[8] BARTON P. Miller, GREGORY Cooksey, FREDRICK Moore. An Empirical Study of the Robustness of Macos Applications Using Random Testing[C]//RT’06: Proceeding of the 1st International Workshop on Random Testing, New York, NY, USA,2006:46-54.
[9] WILLIAM H. Allen, CHIN Dou, GERALD A. Marin. A Model-based Approach to the Security Testing of Network Protocol Implementations[C]//Proceedings of 31st IEEE Conference on Local Computer Networks,2006:66-73.
[10] JARED Demott, DR Richard, J Enbody, et al. Revolutionizing the Field of Grey-box Attack Surface Testing with Evolutionary Fuzzing[C]//Blackhat Conference,2007.
中圖分類號(hào)TP309
DOI:10.3969/j.issn.1672-9722.2016.03.027
作者簡(jiǎn)介:李金亮,男,工程師,研究方向:指揮控制測(cè)試。
收稿日期:2015年9月12日,修回日期:2015年10月25日