張尚韜
摘要:通過分析了傳統(tǒng)網絡協(xié)議漏洞挖掘工具在生成測試數(shù)據(jù)的不足,深入研究了Fuzz漏洞挖掘技術方法。通過研究藍牙OBEX協(xié)議的格式規(guī)范,提出了基于TLV(Type-Length-Value)的藍牙OBEX協(xié)議Fuzz數(shù)據(jù)生成模型。最后基于TLV數(shù)據(jù)生成模型設計并實現(xiàn)了藍牙OBEX協(xié)議漏洞挖掘工具(ObexFuzzer)。
關鍵詞:藍牙OBEX;Fuzz;漏洞挖掘
中圖分類號:TP309 文獻標識碼:A 文章編號:1007-9416(2020)07-0047-05
0 引言
綠盟科技高級研究員于旸曾這樣說過“凡是歷史上傳統(tǒng)網絡設備出現(xiàn)過的問題,幾乎都已經在無線設備上重演了”。藍牙作為無線技術的一種重要應用,自然也不能例外。幾乎所有的藍牙協(xié)議棧都已經被發(fā)現(xiàn)各種安全問題,其中很多問題可以直接導致系統(tǒng)被控制、數(shù)據(jù)被竊取。絕大多數(shù)人對藍牙的安全威脅都一無所知,也沒有解決藍牙安全問題的意識。另外,很多使用藍牙的設備是手機、平板等,普通用戶根本不知道如何給這些設備升級以解決安全問題。更糟的是,有些藍牙協(xié)議棧開發(fā)商出于自身利益的考慮,甚至不肯為存在漏洞的軟件發(fā)布補丁[1-4]。
OBEX(Object Exchange)即對象交換協(xié)議,是藍牙協(xié)議棧、紅外線協(xié)議棧等面向應用層的協(xié)議,該協(xié)議支持文件傳輸、對象Push、數(shù)據(jù)同步等多種應用,提供了設備之間簡單易行的對象交換手段[5-6]。隨著藍牙技術的廣泛應用,藍牙OBEX協(xié)議已經被更多地應用于智能手機、筆記本電腦、平板電腦、數(shù)字相機等各種設備之間進行數(shù)據(jù)的交換。而根據(jù)CVE著名安全漏洞數(shù)據(jù)庫統(tǒng)計已收錄藍牙協(xié)議棧漏洞62個,其中關于OBEX協(xié)議漏洞就有18個。通過這些可利用漏洞可以達到控制別人的設備和竊取用戶的敏感數(shù)據(jù)。因此,對該協(xié)議進行安全漏洞挖掘技術的研究,具有極其重大的意義[7-17]。
1 基于TLV的藍牙OBEX協(xié)議Fuzz數(shù)據(jù)生成模型
1.1 Fuzz技術模型
Fuzz是一種自動化的安全漏洞挖掘技術,它使用大量半有效(Semi-Valid)的數(shù)據(jù)或者文件作為應用程序的輸入,試圖發(fā)現(xiàn)應用程序存在的安全漏洞。
Fuzz技術在大多數(shù)情況下用于發(fā)現(xiàn)安全Bug,因此也可以應用于軟件測試方面。Fuzz技術是通過構造Fuzzer工具來實現(xiàn)的,圖1顯示了Fuzz的通用測試過程。
1.2 OBEX協(xié)議格式
OBEX即對象交換(Object Exchange)協(xié)議最開始是紅外數(shù)據(jù)協(xié)會IrDA(Infrared Data Association)開發(fā)的用于紅外數(shù)據(jù)鏈路上數(shù)據(jù)對象交換的會話層協(xié)議。OBEX請求數(shù)據(jù)包主要有三個部分組成:操作碼+包長度+必須或者可選的數(shù)據(jù),另外,OBEX響應數(shù)據(jù)包也由三個部分組成:響應碼+包長度+必須或者可選的數(shù)據(jù)。
當應用第一次請求發(fā)送OBEX對象時,則發(fā)出一個請求連接分組,啟動一個OBEX會話,OBEX會話建立過程由OBEX客戶端啟動。該會話自連接請求發(fā)出開始。該請求格式如表1所示。
由表1可以看出,請求連接分組由一個字節(jié)的操作碼,兩個字節(jié)的連接請求分組長度,一個字節(jié)的OBEX版本號,一個字節(jié)的標志位,兩個字節(jié)的OBEX分組最大長度以及不定個字節(jié)的可選分組頭組成。
連接請求由在遠程主機的OBEX服務端接收。服務端通過向客戶端發(fā)出成功應答確認連接,通過發(fā)送其它應答信息到客戶端表示建立連接失敗。連接應答分組格式如表2所示。
1.3 TLV語義
TLV(Type-Length-Value)語法格式應用在很多協(xié)議的編碼格式之中。其中T(Type)字段類似標簽表示后面數(shù)值表示的含義,L(Length)字段表示定義數(shù)值的長度,V(Value)字段表示實際的數(shù)值。因此,一個編碼值又稱為TLV三元組。編碼可以是基本型或結構型,如果它是一個簡單類型的、完整的顯示值,那么編碼就是基本型(Primitive);如果它表示的值具有嵌套結構,那么編碼就是結構型(Constucted)。如表3所示。
1.4 藍牙OBEX協(xié)議Fuzz數(shù)據(jù)生成模型
藍牙OBEX協(xié)議操作數(shù)據(jù)包都是以協(xié)議數(shù)據(jù)單元(PDU)方式傳送的,每個藍牙OBEX協(xié)議數(shù)據(jù)單元一個操作碼頭+默認格式(共7字節(jié))開始,后跟可選頭,而這些可選頭格式就是以TLV通用編碼格式來編碼的。且可選頭可以含有多個TLV三元組。每個TLV元組可以按任意順序出現(xiàn),這使應用程序可以很容易地跳過不支持的元組。本文以Put發(fā)送數(shù)據(jù)包為例。如表4所示。
根據(jù)TVL的編碼格式的規(guī)則說明,Put命令數(shù)據(jù)包的可選頭編碼是基本型用TVL格式編碼的OBEX協(xié)議Put命令數(shù)據(jù)包。表5給出了以TLV形式表示的藍牙OBEX協(xié)議Put操作碼數(shù)據(jù)包中的可選頭。
該TLV字段的內容進行Fuzz測試時,其內容長度這一字段也要進行變更,否則,該協(xié)議數(shù)據(jù)包發(fā)送到服務端,服務端將檢查校驗碼可得知此數(shù)據(jù)包不符合協(xié)議規(guī)范此數(shù)據(jù)包將丟棄。這樣將產生大量的無效數(shù)據(jù)包,嚴重影響Fuzz工具的效率。而在進行藍牙OBEX協(xié)議Fuzz數(shù)據(jù)生成時,其數(shù)據(jù)包將存在多個TLV三元組,為了提高藍牙OBEX協(xié)議數(shù)據(jù)包高效的生成,提出了基于TLV的Fuzz數(shù)據(jù)生成技術模型。
藍牙OBEX協(xié)議Fuzz測試數(shù)據(jù)生成技術,是通過進行前期研究分析OBEX協(xié)議規(guī)范格式的基礎上,對常用操作請求/響應數(shù)據(jù)包進行配置、填充合理數(shù)據(jù)內容生成Fuzz測試數(shù)據(jù)包集,為了達到高效目的,需要完成的工作如下。
(1)數(shù)據(jù)包預處理,識別協(xié)議數(shù)據(jù)包中的靜態(tài)部分和動態(tài)部分。靜態(tài)部分表示數(shù)據(jù)包中不可改變的部分,比如版本號、保留位。動態(tài)部分代表了可被改變的變量。例如協(xié)議字段中的ID的值,把協(xié)議中的各個字段按屬性劃分。
(2)分析易觸發(fā)漏洞的字段,這些字段最容易導致目標軟件在解析時發(fā)生錯誤,按照威脅度的高低確定字段的優(yōu)先級。
(3)分析字段易觸發(fā)的漏洞類型,按照所要觸發(fā)漏洞類型來確定該數(shù)據(jù)類型的填充。
Fuzz數(shù)據(jù)生成技術依賴研究者對協(xié)議中的各個字段的分析能力,研究者需要充分分析協(xié)議規(guī)范中最容易導致目標軟件在解析時發(fā)生故障的位置。本研究將使用一個數(shù)據(jù)生成模塊生成Fuzz測試數(shù)據(jù)包集。該技術模型如圖2所示。
2 模塊設計與實現(xiàn)
ObexFuzzer工具是針對藍牙OBEX服務應用程序進行漏洞挖掘,其系統(tǒng)結構設計分為三大模塊,分別為:數(shù)據(jù)生成模塊、測試發(fā)送模塊、服務響應監(jiān)控模塊,如圖3所示。
數(shù)據(jù)包生成模塊包含靜態(tài)分析協(xié)議數(shù)據(jù)包字段屬性、優(yōu)先級和動態(tài)生成Fuzz測試數(shù)據(jù)包集。動態(tài)生成測試數(shù)據(jù)包集首先通過初始化數(shù)據(jù)包模板,填入固定值部分,并按照獨立字段優(yōu)先級和相關字段優(yōu)先級將各個字段依次填入。然后根據(jù)字段要觸發(fā)的漏洞類型選擇填充方式進而生成測試數(shù)據(jù)包集。
測試發(fā)送模塊主要完成把數(shù)據(jù)包生成模塊中所生成在本地文件夾中的數(shù)據(jù)包發(fā)送到服務端進行測試。首先初始化藍牙設備,搜尋藍牙服務程序。打開服務連接,然后讀取本地生成Fuzz測試數(shù)據(jù)包,依次發(fā)送到服務端進行測試。
服務響應監(jiān)控模塊屬于動態(tài)監(jiān)視程序,負責對客戶端數(shù)據(jù)發(fā)送進行動態(tài)的監(jiān)視跟蹤和對服務端的通信的響應。及時記錄服務端與客戶端的數(shù)據(jù)包的交互狀態(tài)并顯示動態(tài)的日志記錄。服務響應監(jiān)控模塊功能使用Spylite工具完成。
3 挖掘實例分析
3.1 手機藍牙協(xié)議棧漏洞挖掘
在利用ObexFuzzer工具測試時,當ObexFuzzer程序在發(fā)送第32個Fuzz測試數(shù)據(jù)包時,SpyLite監(jiān)控程序返回了手機服務端連接中斷的響應。程序中斷發(fā)送。圖4顯示了當時SpyLite監(jiān)測到發(fā)送第32個數(shù)據(jù)包時的情況。圖5顯示的是SpyLite監(jiān)測到手機服務端返回的響應結果。
分析測試樣本可知漏洞是通過OBEX協(xié)議發(fā)送一個Put請求包,由于數(shù)據(jù)包中Name字段的值包含超長的“..”特殊字符,手機的OBEX Object Push應用服務程序在解析Name Header字段的值就會觸發(fā)該安全漏洞。該漏洞是一個已知的漏洞,CVE編號是CVE-2020-0523。觸發(fā)漏洞時的畸形數(shù)據(jù)包樣本如圖6所示。
3.2 適配器藍牙協(xié)議棧漏洞挖掘
利用OBEXFuzzer工具對藍牙適配器進行漏洞挖掘,進行相關配置后生成畸形數(shù)據(jù)包對其進行Fuzz測試。其測試步驟方法可參見手機藍牙協(xié)議棧挖掘。
查看Spylite記錄日志信息,出現(xiàn)異常的進程是BTStackServer。用Windbg加載該進程,重新發(fā)送該數(shù)據(jù)包觸發(fā)該異常,如圖7所示。
該漏洞是通過OBEX協(xié)議發(fā)送一個Put請求,由于請求協(xié)議數(shù)據(jù)包Name字段內容超長觸發(fā)漏洞,該漏洞是一個未知的緩沖區(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)連接字串,或者對數(shù)據(jù)沒做處理的錯誤
0045E60F ? ?83C4 04 ? ? ? ? add ? ? esp, 4
0045E612 ? ?50 ? ? ? ? ? ? ?push ? ?eax
// EAX指向的是Name字段Value的超長字符
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
此時EAX指向的空間是自己精心構造的畸形協(xié)議數(shù)據(jù)包,由于Strcpy函數(shù)在拷貝該數(shù)據(jù)包時覆蓋了堆棧及函數(shù)返回地址,出現(xiàn)讀取地址不可訪問。通過JMP Esp方法就可以成功利用該漏洞。
4 結語
本文在研究藍牙技術、Fuzz技術和藍牙OBEX協(xié)議規(guī)范的基礎上,總結了以往的Fuzzer工具對協(xié)議漏洞挖掘的缺陷與不足,提出了基于TLV藍牙OBEX協(xié)議Fuzz數(shù)據(jù)生成模型并采用該技術模型實現(xiàn)了ObexFuzzer工具的設計。測試結果表明,該工具對藍牙OBEX協(xié)議的漏洞挖掘具有很強的實用性。
參考文獻
[1] 張文安,洪榛,朱俊威,等.工業(yè)控制系統(tǒng)網絡入侵檢測方法綜述[J].控制與決策,2019,34(11):2277-2288.
[2] 王群,李馥娟,周倩.網絡空間安全體系結構及其關鍵技術研究[J].南京理工大學學報,2019,43(4):495-504.
[3] 楊世超.物聯(lián)網云平臺接入安全技術研究[C]//中國通信學會.2019年全國公共安全通信學術研討會優(yōu)秀論文集.中國通信學會:中國通信學會,2019:5.
[4] 陸英.大數(shù)據(jù)時代使用藍牙的風險及解決方案[J].計算機與網絡,2019,45(14):52-53.
[5] 韓冰.在線移動音頻分享平臺的應用權限與用戶權利探究[J].西部廣播電視,2019(13):7-8.
[6] 馮貴蘭,李正楠,周文剛.大數(shù)據(jù)分析技術在網絡領域中的研究綜述[J].計算機科學,2019,46(06):1-20.
[7] 王旭.網絡攻擊行為的宏觀模型與分析[D].北京:北京郵電大學,2019.
[8] 安星碩.霧計算環(huán)境下入侵防御模型及算法研究[D].北京:北京科技大學,2019.
[9] 董曉峰.基于集成學習的多特征Android惡意應用程序檢測[D].西安:西安科技大學,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.