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