藍(lán)牙是一種短距的無(wú)線通訊技術(shù),可實(shí)現(xiàn)固定設(shè)備、移動(dòng)設(shè)備之間的數(shù)據(jù)交換?梢哉f(shuō)藍(lán)牙是當(dāng)今世界上,最受歡迎和使用最為廣泛的無(wú)線技術(shù)之一。隨著物聯(lián)網(wǎng)的快速發(fā)展,藍(lán)牙技術(shù)也加速了其發(fā)展步伐以適應(yīng)不斷增長(zhǎng)的市場(chǎng)和用戶需求。藍(lán)牙特別興趣小組(SIG)正不斷努力提高藍(lán)牙的傳輸速度,以讓藍(lán)牙技術(shù)更好的融合于各種物聯(lián)網(wǎng)設(shè)備當(dāng)中。
低功耗藍(lán)牙(BLE)是藍(lán)牙4.0規(guī)范的一部分,其包括傳統(tǒng)藍(lán)牙和藍(lán)牙高速協(xié)議。相較于傳統(tǒng)藍(lán)牙,BLE旨在使用更低的功耗,并保持同等距離的通信范圍。BLE只在需要時(shí)傳輸少量數(shù)據(jù),而除此之外則會(huì)保持關(guān)閉狀態(tài),這大大降低了其功耗,也使其成為了在低數(shù)據(jù)速率下需要長(zhǎng)久連接使用的理想選擇。BLE非常適合運(yùn)用于電視遙控器,但對(duì)于需要傳輸大量數(shù)據(jù)的無(wú)線媒體流設(shè)備則并不適用。
BLE內(nèi)置于我們今天使用的許多電器或智能設(shè)備當(dāng)中,例如智能手機(jī),智能電視,醫(yī)療設(shè)備,咖啡機(jī)等等。
BLE 受歡迎的原因?
支持多平臺(tái),以下列出的設(shè)備和平臺(tái)均支持藍(lán)牙 4.0和BLE:
iOS5+ (iOS7+ preferred)
Android 4.3+ (numerous bug fixes in 4.4+)
Apple OS X 10.6+
Windows 8 (XP, Vista and 7 only support Bluetooth 2.1)
GNU/Linux Vanilla BlueZ 4.93+
Windows Phone
BLE 聽(tīng)上去不錯(cuò),但真的如此嗎?
從安全的角度來(lái)看,這個(gè)問(wèn)題提的非常的好。事實(shí)是 – BLE只是一個(gè)協(xié)議。制造商可以在他們的設(shè)備中安全地實(shí)施BLE。但如果隨機(jī)數(shù)生成器無(wú)法生成“足夠強(qiáng)壯”的隨機(jī)數(shù),那么即使最強(qiáng)的加密協(xié)議也可能被破解,這同樣也適用于BLE。因此,換句話來(lái)說(shuō)就是BLE的安全性實(shí)際掌握在其實(shí)施者手中。
雖然,所有低功耗藍(lán)牙設(shè)備開(kāi)發(fā)的主要?jiǎng)訖C(jī)都是為了增強(qiáng)用戶體驗(yàn)。但與此同時(shí),我們需要思考的是安全性是否也已同步?
下面,讓我們看看影響B(tài)LE安全性的三個(gè)主要漏洞:
1. 竊聽(tīng)
考慮常規(guī)的BLE通信,一端是手機(jī),一端是BLE設(shè)備。假如二者沒(méi)有進(jìn)行認(rèn)證加密,那么在通信開(kāi)始之前,在附近開(kāi)啟一個(gè)BLE Sniffer,就可以看到手機(jī)與BLE設(shè)備之間的連接后的通信數(shù)據(jù)明文。
2. MITM 攻擊
MITM(Man in the Middle)中間人攻擊是指第三方設(shè)備混入BLE通信鏈路之間,偽造通信數(shù)據(jù)迷惑雙方。
假如設(shè)備A和設(shè)備B在通信之始,設(shè)備M注意到二者要進(jìn)行通信,設(shè)備M截取設(shè)備A發(fā)起的連接請(qǐng)求,偽裝成設(shè)備B跟其建立連接進(jìn)行通信,通信完畢后再偽裝成設(shè)備A向設(shè)備B發(fā)起連接請(qǐng)求,建立連接后重復(fù)設(shè)備A在前面發(fā)送的數(shù)據(jù)。這樣設(shè)備A就一直以為在跟設(shè)備B進(jìn)行通信,設(shè)備B也同樣,卻不知中間還藏著一個(gè)第三者。
3. 拒絕服務(wù)攻擊
由于目前大多數(shù)無(wú)線設(shè)備都使用內(nèi)置電池組,因此這些設(shè)備存在遭受拒絕服務(wù)攻擊(DoS)的風(fēng)險(xiǎn)。DoS攻擊會(huì)導(dǎo)致系統(tǒng)頻繁崩潰,并耗盡其電池電量。Fuzzing攻擊也會(huì)導(dǎo)致系統(tǒng)崩潰,因?yàn)楣粽呖赡軙?huì)將格式錯(cuò)誤或非標(biāo)準(zhǔn)數(shù)據(jù),發(fā)送到設(shè)備的藍(lán)牙無(wú)線電檢查其響應(yīng),并最終擊垮設(shè)備。
BLE 的核心概念
BLE有兩個(gè)基本概念:
GAP – 通用屬性配置文件
GATT – 通用屬性
GAP
GAP(Generic Access Profile)主要負(fù)責(zé)控制設(shè)備連接和廣播。GAP使你的設(shè)備被其他設(shè)備可見(jiàn),并決定了你的設(shè)備是否可以或者怎樣與合同設(shè)備進(jìn)行交互。
GAP給設(shè)備定義了若干角色,其中主要的兩個(gè)是:外圍設(shè)備(Peripheral)和中心設(shè)備(Central)。
外圍設(shè)備:這一般就是非常小或者簡(jiǎn)單的低功耗設(shè)備,用來(lái)提供數(shù)據(jù),并連接到一個(gè)更加相對(duì)強(qiáng)大的中心設(shè)備。
中心設(shè)備:中心設(shè)備相對(duì)比較強(qiáng)大,用來(lái)連接其他外圍設(shè)備。例如手機(jī)等。
廣播協(xié)議
GAP的廣播工作流程如下圖所示:
在GAP 中外圍設(shè)備通過(guò)兩種方式向外廣播數(shù)據(jù):Advertising Data Payload(廣播數(shù)據(jù))和Scan Response Data Payload(掃描回復(fù)),每種數(shù)據(jù)最長(zhǎng)可以包含31字節(jié)。這里廣播數(shù)據(jù)是必需的,因?yàn)橥庠O(shè)必需不停的向外廣播,讓中心設(shè)備知道它的存在。掃描回復(fù)是可選的,中心設(shè)備可以向外設(shè)請(qǐng)求掃描回復(fù),這里包含一些設(shè)備額外的信息,例如設(shè)備的名字。
GATT
GATT(Generic Attribute Profile)定義了兩個(gè)BLE設(shè)備,通過(guò)Service 和Characteristic進(jìn)行通信。GATT使用了ATT(Attribute Protocol)協(xié)議,ATT 協(xié)議把 Service,Characteristic對(duì)應(yīng)的數(shù)據(jù)保存在一個(gè)查找表中,次查找表使用 16 bit ID 作為每一項(xiàng)的索引。一旦兩個(gè)設(shè)備建立起了連接,GATT 就開(kāi)始起作用了,這也意味著,GATT只有在GAP管理的廣播流程完成后才能啟動(dòng)。
GATT的兩個(gè)主要概念:
Services
Characteristics
Service
Service是把數(shù)據(jù)分成一個(gè)個(gè)的獨(dú)立邏輯項(xiàng),它包含一個(gè)或者多個(gè) Characteristic。每個(gè) Service 有一個(gè) UUID 唯一標(biāo)識(shí)。 UUID 有 16 bit 的,或者 128 bit 的。16 bit 的 UUID 是官方通過(guò)認(rèn)證的,需要花錢購(gòu)買,128 bit 是自定義的,這個(gè)就可以自己隨便設(shè)置。
官方通過(guò)了一些標(biāo)準(zhǔn) Service,完整列表在這里。以 Heart Rate Service為例,可以看到它的官方通過(guò) 16 bit UUID是0x180D,包含3個(gè)Characteristic:Heart Rate Measurement, Body Sensor Location和Heart Rate Control Point,并且定義了只有第一個(gè)是必須的,它是可選實(shí)現(xiàn)的。
Characteristic
在GATT事務(wù)中的最低界別的是Characteristic,Characteristic是最小的邏輯數(shù)據(jù)單元,當(dāng)然它可能包含一個(gè)組關(guān)聯(lián)的數(shù)據(jù),例如加速度計(jì)的 X/Y/Z三軸值。
與Service類似,每個(gè) Characteristic用16 bit或128 bit的UUID唯一標(biāo)識(shí)。你可以免費(fèi)使用Bluetooth SIG官方定義的標(biāo)準(zhǔn) Characteristic,使用官方定義的,可以確保 BLE 的軟件和硬件能相互理解。當(dāng)然,你可以自定義Characteristic,這樣的話就只有你自己的軟件和外設(shè)能夠相互理解。
例如,SIG規(guī)定的官方TX功耗UUID是0×1804。
利用 BLE 的工具
Linux為BLE提供了最好的支持。想要使用BLE,我們需要安裝blueZ。命令如下:
sudo apt-get install bluez
這里我使用的是Ubuntu系統(tǒng)的電腦,該設(shè)備將作為與其他外圍設(shè)備通信的中心網(wǎng)關(guān)。安裝完成后,我們需要兩個(gè)工具來(lái)掃描,連接和讀/寫數(shù)據(jù)。
hcitool
gatttool
在開(kāi)始之前,我們需要掃描附近的BLE設(shè)備。找到后我們需要設(shè)法與其建立連接,讀/寫數(shù)據(jù),發(fā)現(xiàn)其中的漏洞以進(jìn)行利用。因此,hcitool是我們必不可少的工具。
|