張尚韜
摘要:通過(guò)分析了傳統(tǒng)網(wǎng)絡(luò)協(xié)議漏洞挖掘工具在生成測(cè)試數(shù)據(jù)的不足,深入研究了Fuzz漏洞挖掘技術(shù)方法。通過(guò)研究藍(lán)牙OBEX協(xié)議的格式規(guī)范,提出了基于TLV(Type-Length-Value)的藍(lán)牙OBEX協(xié)議Fuzz數(shù)據(jù)生成模型。最后基于TLV數(shù)據(jù)生成模型設(shè)計(jì)并實(shí)現(xiàn)了藍(lán)牙OBEX協(xié)議漏洞挖掘工具(ObexFuzzer)。
關(guān)鍵詞:藍(lán)牙OBEX;Fuzz;漏洞挖掘
中圖分類(lèi)號(hào):TP309 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2020)07-0047-05
0 引言
綠盟科技高級(jí)研究員于旸曾這樣說(shuō)過(guò)“凡是歷史上傳統(tǒng)網(wǎng)絡(luò)設(shè)備出現(xiàn)過(guò)的問(wèn)題,幾乎都已經(jīng)在無(wú)線設(shè)備上重演了”。藍(lán)牙作為無(wú)線技術(shù)的一種重要應(yīng)用,自然也不能例外。幾乎所有的藍(lán)牙協(xié)議棧都已經(jīng)被發(fā)現(xiàn)各種安全問(wèn)題,其中很多問(wèn)題可以直接導(dǎo)致系統(tǒng)被控制、數(shù)據(jù)被竊取。絕大多數(shù)人對(duì)藍(lán)牙的安全威脅都一無(wú)所知,也沒(méi)有解決藍(lán)牙安全問(wèn)題的意識(shí)。另外,很多使用藍(lán)牙的設(shè)備是手機(jī)、平板等,普通用戶根本不知道如何給這些設(shè)備升級(jí)以解決安全問(wèn)題。更糟的是,有些藍(lán)牙協(xié)議棧開(kāi)發(fā)商出于自身利益的考慮,甚至不肯為存在漏洞的軟件發(fā)布補(bǔ)丁[1-4]。
OBEX(Object Exchange)即對(duì)象交換協(xié)議,是藍(lán)牙協(xié)議棧、紅外線協(xié)議棧等面向應(yīng)用層的協(xié)議,該協(xié)議支持文件傳輸、對(duì)象Push、數(shù)據(jù)同步等多種應(yīng)用,提供了設(shè)備之間簡(jiǎn)單易行的對(duì)象交換手段[5-6]。隨著藍(lán)牙技術(shù)的廣泛應(yīng)用,藍(lán)牙OBEX協(xié)議已經(jīng)被更多地應(yīng)用于智能手機(jī)、筆記本電腦、平板電腦、數(shù)字相機(jī)等各種設(shè)備之間進(jìn)行數(shù)據(jù)的交換。而根據(jù)CVE著名安全漏洞數(shù)據(jù)庫(kù)統(tǒng)計(jì)已收錄藍(lán)牙協(xié)議棧漏洞62個(gè),其中關(guān)于OBEX協(xié)議漏洞就有18個(gè)。通過(guò)這些可利用漏洞可以達(dá)到控制別人的設(shè)備和竊取用戶的敏感數(shù)據(jù)。因此,對(duì)該協(xié)議進(jìn)行安全漏洞挖掘技術(shù)的研究,具有極其重大的意義[7-17]。
1 基于TLV的藍(lán)牙OBEX協(xié)議Fuzz數(shù)據(jù)生成模型
1.1 Fuzz技術(shù)模型
Fuzz是一種自動(dòng)化的安全漏洞挖掘技術(shù),它使用大量半有效(Semi-Valid)的數(shù)據(jù)或者文件作為應(yīng)用程序的輸入,試圖發(fā)現(xiàn)應(yīng)用程序存在的安全漏洞。
Fuzz技術(shù)在大多數(shù)情況下用于發(fā)現(xiàn)安全Bug,因此也可以應(yīng)用于軟件測(cè)試方面。Fuzz技術(shù)是通過(guò)構(gòu)造Fuzzer工具來(lái)實(shí)現(xiàn)的,圖1顯示了Fuzz的通用測(cè)試過(guò)程。
1.2 OBEX協(xié)議格式
OBEX即對(duì)象交換(Object Exchange)協(xié)議最開(kāi)始是紅外數(shù)據(jù)協(xié)會(huì)IrDA(Infrared Data Association)開(kāi)發(fā)的用于紅外數(shù)據(jù)鏈路上數(shù)據(jù)對(duì)象交換的會(huì)話層協(xié)議。OBEX請(qǐng)求數(shù)據(jù)包主要有三個(gè)部分組成:操作碼+包長(zhǎng)度+必須或者可選的數(shù)據(jù),另外,OBEX響應(yīng)數(shù)據(jù)包也由三個(gè)部分組成:響應(yīng)碼+包長(zhǎng)度+必須或者可選的數(shù)據(jù)。
當(dāng)應(yīng)用第一次請(qǐng)求發(fā)送OBEX對(duì)象時(shí),則發(fā)出一個(gè)請(qǐng)求連接分組,啟動(dòng)一個(gè)OBEX會(huì)話,OBEX會(huì)話建立過(guò)程由OBEX客戶端啟動(dòng)。該會(huì)話自連接請(qǐng)求發(fā)出開(kāi)始。該請(qǐng)求格式如表1所示。
由表1可以看出,請(qǐng)求連接分組由一個(gè)字節(jié)的操作碼,兩個(gè)字節(jié)的連接請(qǐng)求分組長(zhǎng)度,一個(gè)字節(jié)的OBEX版本號(hào),一個(gè)字節(jié)的標(biāo)志位,兩個(gè)字節(jié)的OBEX分組最大長(zhǎng)度以及不定個(gè)字節(jié)的可選分組頭組成。
連接請(qǐng)求由在遠(yuǎn)程主機(jī)的OBEX服務(wù)端接收。服務(wù)端通過(guò)向客戶端發(fā)出成功應(yīng)答確認(rèn)連接,通過(guò)發(fā)送其它應(yīng)答信息到客戶端表示建立連接失敗。連接應(yīng)答分組格式如表2所示。
1.3 TLV語(yǔ)義
TLV(Type-Length-Value)語(yǔ)法格式應(yīng)用在很多協(xié)議的編碼格式之中。其中T(Type)字段類(lèi)似標(biāo)簽表示后面數(shù)值表示的含義,L(Length)字段表示定義數(shù)值的長(zhǎng)度,V(Value)字段表示實(shí)際的數(shù)值。因此,一個(gè)編碼值又稱為T(mén)LV三元組。編碼可以是基本型或結(jié)構(gòu)型,如果它是一個(gè)簡(jiǎn)單類(lèi)型的、完整的顯示值,那么編碼就是基本型(Primitive);如果它表示的值具有嵌套結(jié)構(gòu),那么編碼就是結(jié)構(gòu)型(Constucted)。如表3所示。
1.4 藍(lán)牙OBEX協(xié)議Fuzz數(shù)據(jù)生成模型
藍(lán)牙OBEX協(xié)議操作數(shù)據(jù)包都是以協(xié)議數(shù)據(jù)單元(PDU)方式傳送的,每個(gè)藍(lán)牙OBEX協(xié)議數(shù)據(jù)單元一個(gè)操作碼頭+默認(rèn)格式(共7字節(jié))開(kāi)始,后跟可選頭,而這些可選頭格式就是以TLV通用編碼格式來(lái)編碼的。且可選頭可以含有多個(gè)TLV三元組。每個(gè)TLV元組可以按任意順序出現(xiàn),這使應(yīng)用程序可以很容易地跳過(guò)不支持的元組。本文以Put發(fā)送數(shù)據(jù)包為例。如表4所示。
根據(jù)TVL的編碼格式的規(guī)則說(shuō)明,Put命令數(shù)據(jù)包的可選頭編碼是基本型用TVL格式編碼的OBEX協(xié)議Put命令數(shù)據(jù)包。表5給出了以TLV形式表示的藍(lán)牙OBEX協(xié)議Put操作碼數(shù)據(jù)包中的可選頭。
該TLV字段的內(nèi)容進(jìn)行Fuzz測(cè)試時(shí),其內(nèi)容長(zhǎng)度這一字段也要進(jìn)行變更,否則,該協(xié)議數(shù)據(jù)包發(fā)送到服務(wù)端,服務(wù)端將檢查校驗(yàn)碼可得知此數(shù)據(jù)包不符合協(xié)議規(guī)范此數(shù)據(jù)包將丟棄。這樣將產(chǎn)生大量的無(wú)效數(shù)據(jù)包,嚴(yán)重影響Fuzz工具的效率。而在進(jìn)行藍(lán)牙OBEX協(xié)議Fuzz數(shù)據(jù)生成時(shí),其數(shù)據(jù)包將存在多個(gè)TLV三元組,為了提高藍(lán)牙OBEX協(xié)議數(shù)據(jù)包高效的生成,提出了基于TLV的Fuzz數(shù)據(jù)生成技術(shù)模型。
藍(lán)牙OBEX協(xié)議Fuzz測(cè)試數(shù)據(jù)生成技術(shù),是通過(guò)進(jìn)行前期研究分析OBEX協(xié)議規(guī)范格式的基礎(chǔ)上,對(duì)常用操作請(qǐng)求/響應(yīng)數(shù)據(jù)包進(jìn)行配置、填充合理數(shù)據(jù)內(nèi)容生成Fuzz測(cè)試數(shù)據(jù)包集,為了達(dá)到高效目的,需要完成的工作如下。
(1)數(shù)據(jù)包預(yù)處理,識(shí)別協(xié)議數(shù)據(jù)包中的靜態(tài)部分和動(dòng)態(tài)部分。靜態(tài)部分表示數(shù)據(jù)包中不可改變的部分,比如版本號(hào)、保留位。動(dòng)態(tài)部分代表了可被改變的變量。例如協(xié)議字段中的ID的值,把協(xié)議中的各個(gè)字段按屬性劃分。
(2)分析易觸發(fā)漏洞的字段,這些字段最容易導(dǎo)致目標(biāo)軟件在解析時(shí)發(fā)生錯(cuò)誤,按照威脅度的高低確定字段的優(yōu)先級(jí)。
(3)分析字段易觸發(fā)的漏洞類(lèi)型,按照所要觸發(fā)漏洞類(lèi)型來(lái)確定該數(shù)據(jù)類(lèi)型的填充。
Fuzz數(shù)據(jù)生成技術(shù)依賴研究者對(duì)協(xié)議中的各個(gè)字段的分析能力,研究者需要充分分析協(xié)議規(guī)范中最容易導(dǎo)致目標(biāo)軟件在解析時(shí)發(fā)生故障的位置。本研究將使用一個(gè)數(shù)據(jù)生成模塊生成Fuzz測(cè)試數(shù)據(jù)包集。該技術(shù)模型如圖2所示。
2 模塊設(shè)計(jì)與實(shí)現(xiàn)
ObexFuzzer工具是針對(duì)藍(lán)牙OBEX服務(wù)應(yīng)用程序進(jìn)行漏洞挖掘,其系統(tǒng)結(jié)構(gòu)設(shè)計(jì)分為三大模塊,分別為:數(shù)據(jù)生成模塊、測(cè)試發(fā)送模塊、服務(wù)響應(yīng)監(jiān)控模塊,如圖3所示。
數(shù)據(jù)包生成模塊包含靜態(tài)分析協(xié)議數(shù)據(jù)包字段屬性、優(yōu)先級(jí)和動(dòng)態(tài)生成Fuzz測(cè)試數(shù)據(jù)包集。動(dòng)態(tài)生成測(cè)試數(shù)據(jù)包集首先通過(guò)初始化數(shù)據(jù)包模板,填入固定值部分,并按照獨(dú)立字段優(yōu)先級(jí)和相關(guān)字段優(yōu)先級(jí)將各個(gè)字段依次填入。然后根據(jù)字段要觸發(fā)的漏洞類(lèi)型選擇填充方式進(jìn)而生成測(cè)試數(shù)據(jù)包集。
測(cè)試發(fā)送模塊主要完成把數(shù)據(jù)包生成模塊中所生成在本地文件夾中的數(shù)據(jù)包發(fā)送到服務(wù)端進(jìn)行測(cè)試。首先初始化藍(lán)牙設(shè)備,搜尋藍(lán)牙服務(wù)程序。打開(kāi)服務(wù)連接,然后讀取本地生成Fuzz測(cè)試數(shù)據(jù)包,依次發(fā)送到服務(wù)端進(jìn)行測(cè)試。
服務(wù)響應(yīng)監(jiān)控模塊屬于動(dòng)態(tài)監(jiān)視程序,負(fù)責(zé)對(duì)客戶端數(shù)據(jù)發(fā)送進(jìn)行動(dòng)態(tài)的監(jiān)視跟蹤和對(duì)服務(wù)端的通信的響應(yīng)。及時(shí)記錄服務(wù)端與客戶端的數(shù)據(jù)包的交互狀態(tài)并顯示動(dòng)態(tài)的日志記錄。服務(wù)響應(yīng)監(jiān)控模塊功能使用Spylite工具完成。
3 挖掘?qū)嵗治?/p>
3.1 手機(jī)藍(lán)牙協(xié)議棧漏洞挖掘
在利用ObexFuzzer工具測(cè)試時(shí),當(dāng)ObexFuzzer程序在發(fā)送第32個(gè)Fuzz測(cè)試數(shù)據(jù)包時(shí),SpyLite監(jiān)控程序返回了手機(jī)服務(wù)端連接中斷的響應(yīng)。程序中斷發(fā)送。圖4顯示了當(dāng)時(shí)SpyLite監(jiān)測(cè)到發(fā)送第32個(gè)數(shù)據(jù)包時(shí)的情況。圖5顯示的是SpyLite監(jiān)測(cè)到手機(jī)服務(wù)端返回的響應(yīng)結(jié)果。
分析測(cè)試樣本可知漏洞是通過(guò)OBEX協(xié)議發(fā)送一個(gè)Put請(qǐng)求包,由于數(shù)據(jù)包中Name字段的值包含超長(zhǎng)的“..”特殊字符,手機(jī)的OBEX Object Push應(yīng)用服務(wù)程序在解析Name Header字段的值就會(huì)觸發(fā)該安全漏洞。該漏洞是一個(gè)已知的漏洞,CVE編號(hào)是CVE-2020-0523。觸發(fā)漏洞時(shí)的畸形數(shù)據(jù)包樣本如圖6所示。
3.2 適配器藍(lán)牙協(xié)議棧漏洞挖掘
利用OBEXFuzzer工具對(duì)藍(lán)牙適配器進(jìn)行漏洞挖掘,進(jìn)行相關(guān)配置后生成畸形數(shù)據(jù)包對(duì)其進(jìn)行Fuzz測(cè)試。其測(cè)試步驟方法可參見(jiàn)手機(jī)藍(lán)牙協(xié)議棧挖掘。
查看Spylite記錄日志信息,出現(xiàn)異常的進(jìn)程是BTStackServer。用Windbg加載該進(jìn)程,重新發(fā)送該數(shù)據(jù)包觸發(fā)該異常,如圖7所示。
該漏洞是通過(guò)OBEX協(xié)議發(fā)送一個(gè)Put請(qǐng)求,由于請(qǐng)求協(xié)議數(shù)據(jù)包Name字段內(nèi)容超長(zhǎng)觸發(fā)漏洞,該漏洞是一個(gè)未知的緩沖區(qū)溢出漏洞。
0045E5FF ? ?83C4 04 ? ? ? ? ?add ? ? esp, 4
0045E602 ? ?8945 98 ? ? ? ? ?mov ? ? dword ptr [ebp-68], eax
0045E606 ? ?55 ? ? ? ? ? ? ? push ebp
0045E607 ? ?98 ? ? ? ? ? ? ? cwde
0045E608 ? ?52 ? ? ? ? ? ? ? push ? ?edx
0045E609 ? ?50 ? ? ? ? ? ? ? push eax
0045E60A ? ?E8 F1FFFFFF ? ? call ? ?0045E5FF
// 出現(xiàn)連接字串,或者對(duì)數(shù)據(jù)沒(méi)做處理的錯(cuò)誤
0045E60F ? ?83C4 04 ? ? ? ? add ? ? esp, 4
0045E612 ? ?50 ? ? ? ? ? ? ?push ? ?eax
// EAX指向的是Name字段Value的超長(zhǎng)字符
0045E613 ? ?8D45 9C ? ? ? ? lea ? ? eax, dword ptr [ebp-64] //局部變量
0045E616 ? ?50 ? ? ? ? ? ? ?push ? ?eax
0045E617 ? ?E8 78460700 ? ? call ? ?
//拷貝覆蓋函數(shù)堆棧
0045E61C ? ?83C4 08 ? ? ? ? add ? ? esp, 8
0045E61F ? ?8D4D 9C ? ? ? ?lea ? ? ecx, dword ptr [ebp-64]
0045E622 ? ?51 ? ? ? ? ? ? ?push ? ?ecx
0045E623 ? ?E8 72460700 ? ? call ? ?
0045E628 ? ?83C4 04 ? ? ? ? add ? ? esp, 4
0045E62B ? ?C64405 9B 00 ? ?mov ? ? byte ptr [ebp+eax-65], 0
0045E630 ? ?EB 68 ? ? ? ? ? jmp ? ? short 0045E69A
此時(shí)EAX指向的空間是自己精心構(gòu)造的畸形協(xié)議數(shù)據(jù)包,由于Strcpy函數(shù)在拷貝該數(shù)據(jù)包時(shí)覆蓋了堆棧及函數(shù)返回地址,出現(xiàn)讀取地址不可訪問(wèn)。通過(guò)JMP Esp方法就可以成功利用該漏洞。
4 結(jié)語(yǔ)
本文在研究藍(lán)牙技術(shù)、Fuzz技術(shù)和藍(lán)牙OBEX協(xié)議規(guī)范的基礎(chǔ)上,總結(jié)了以往的Fuzzer工具對(duì)協(xié)議漏洞挖掘的缺陷與不足,提出了基于TLV藍(lán)牙OBEX協(xié)議Fuzz數(shù)據(jù)生成模型并采用該技術(shù)模型實(shí)現(xiàn)了ObexFuzzer工具的設(shè)計(jì)。測(cè)試結(jié)果表明,該工具對(duì)藍(lán)牙OBEX協(xié)議的漏洞挖掘具有很強(qiáng)的實(shí)用性。
參考文獻(xiàn)
[1] 張文安,洪榛,朱俊威,等.工業(yè)控制系統(tǒng)網(wǎng)絡(luò)入侵檢測(cè)方法綜述[J].控制與決策,2019,34(11):2277-2288.
[2] 王群,李馥娟,周倩.網(wǎng)絡(luò)空間安全體系結(jié)構(gòu)及其關(guān)鍵技術(shù)研究[J].南京理工大學(xué)學(xué)報(bào),2019,43(4):495-504.
[3] 楊世超.物聯(lián)網(wǎng)云平臺(tái)接入安全技術(shù)研究[C]//中國(guó)通信學(xué)會(huì).2019年全國(guó)公共安全通信學(xué)術(shù)研討會(huì)優(yōu)秀論文集.中國(guó)通信學(xué)會(huì):中國(guó)通信學(xué)會(huì),2019:5.
[4] 陸英.大數(shù)據(jù)時(shí)代使用藍(lán)牙的風(fēng)險(xiǎn)及解決方案[J].計(jì)算機(jī)與網(wǎng)絡(luò),2019,45(14):52-53.
[5] 韓冰.在線移動(dòng)音頻分享平臺(tái)的應(yīng)用權(quán)限與用戶權(quán)利探究[J].西部廣播電視,2019(13):7-8.
[6] 馮貴蘭,李正楠,周文剛.大數(shù)據(jù)分析技術(shù)在網(wǎng)絡(luò)領(lǐng)域中的研究綜述[J].計(jì)算機(jī)科學(xué),2019,46(06):1-20.
[7] 王旭.網(wǎng)絡(luò)攻擊行為的宏觀模型與分析[D].北京:北京郵電大學(xué),2019.
[8] 安星碩.霧計(jì)算環(huán)境下入侵防御模型及算法研究[D].北京:北京科技大學(xué),2019.
[9] 董曉峰.基于集成學(xué)習(xí)的多特征Android惡意應(yīng)用程序檢測(cè)[D].西安:西安科技大學(xué),2019.
[10] Bluetooth Product Shipments More Than Double Again Reports In-Stat. http://www.allbusiness.com/electronics/computer-equipment-personal-computers/5075329-1.html.oct,2008.
[11] Andreas Becker.Bluetooth Security & Hacks[C].Seminar ITS.August,2007.
[12] Luca Carettoni,Claudio Merloni,Stefano Zanero.Studying Bluetooth Malware Propogation [J]. IEEE Security&Privacy.2007,5(2):17-25.
[13] CVSS. Common Vulnerabilities and Exposures[M].Betascript Publishing,2010.
[14] Michael Sutton,Adam Greene,Pedram Amini.Fuzzing:Brute Force VulnerabilityDiscovery [M].2008.
[15] AJ Solon,M Callaghan,J Harkin,TM.McGinnity.Case Study on the Bluetooth Vulnerabl-ities in Mobile Devices[J].IJCSNS International Jounrnal of Computer and Network Security.2006,6(4):125-129.
[16] David Kammer,Gordon McNutt,Brian Senese,Jennifer Bray.Bluetooth Application Developers Guide[M].Elsevier Science Ltd.2005.
[17] Infrared Data Association,(IrDA)Object Exchange Protocol OBEX Version 1.3[EB/OL].http://www.irda.org.oct,2008.
數(shù)字技術(shù)與應(yīng)用2020年7期