阿里移動安全


[無線安全]玩轉無線電——不安全的藍牙鎖

0x00 前言

隨著物聯(lián)網科技的飛速發(fā)展, 各類IOT設備都通過使用無線技術BTLE; ZigBee; WIFI; 6LoWPAN等來實現萬物互聯(lián). 但隨之而來的安全及個人用戶隱私問題也越來越敏感.  汪汪將在這篇文章中分享一個低功耗藍牙智能鎖的分析案例. 希望能對IOT安全研究起到拋磚引玉作用.

 

 

BTLE 俗稱低功耗藍牙, 比傳統(tǒng)的藍牙更能控制功耗和成本. 因此成為當下 IOT 產品中使用非常頻繁的技術. 比如小米智能手環(huán); 飛利浦的HUE 智能燈,  甚至還有羞羞的蛋蛋系列都是通過BTLE 來完成聯(lián)接的.  據說BTLE設備的年出貨量在過去15年內增加了1000倍,已經達到了30億的水平,在未來的4~5年內還將增加到50億.

 

 

不過越是流行的東西, 黑客對其也越是有興趣. 通過簡單的搜索便可發(fā)現不少關于BTLE 設備安全隱患的文章. 其中編號為 CVE-2013-4866 的硬編碼PIN漏洞堪稱一絕. 因為它是第一個關于智能馬桶的漏洞. 感興趣的朋友可以自行了解相關信息.

 

 

0x01 BTLE 基礎

有些朋友可能會覺得僅僅是家里的智能燈或者手環(huán)被黑了, 并不會造成什么特別的影響.  可是有一類藍牙智能設備的安全問題可就沒這么簡單了. 不過在進入主題之前大家先來了解一下BTLE 吧.****

 

其實關于BTLE 的基礎介紹網上已經有很多了. 這里只是簡單介紹下想要進行測試的必備知識. BTLE 設備運行在2.4ghz. 分為40 個頻道, 每個頻道 2Mhz 帶寬.  其中頻道 37; 38; 39 為廣播頻道. 剩余的37個頻道為數據頻道.

 

 

BTLE 定義使用了3 種匹配模式. JustWorks; 6-digit PIN **和 **Out of band. 其中JustWorks 默認使用000000作為PIN來完成匹配. 這樣的設計給本身不帶輸入方式的設備提供了便利. 但同時讓所有人都可以輕易以其匹配. 我們的目標 DOG&BONE 智能鎖使用的正是此方式.

在匹配成功后, 我們便可以通過一個獨特的UUID對 Characteristics 進行讀寫操作. 從而實現不同的功能, 比如開燈/關燈等. 在格式上UUID 又分為Bluetooth Special Interest Group (SIG) 規(guī)范的 16bit 公有UUID (e.g. 0000180F-0000-1000-8000-00805F9B34FB) 和 廠商自定義的 128 bit 私有UUID (e.g. 00001524-1212-EFDE-1523-785FEABCD123)

 

 

在與BTLE 交互的硬件方面可以說非常簡單. 僅僅一個便宜的BTLE 藍牙Dongle 即可. 同時大部分的手機比如IPHONE 自帶BTLE功能. 如果想增加收發(fā)信號范圍的話還可以通過外接天線的方式達到目的.

 

 

軟件方面的選擇也非常之多. 如果是IPHONE 用戶的話, 個人推薦 LightBlue. 當然想要深入的話, 則必須使用Linux下的開源軟件, 比如hcitool or Gatttool. 尤其是gatttool 提供了一個非常好的交互界面.

 

 

 

0x02 BTLE 智能鎖

市面上具有BTLE功能的安防產品種類繁多, 其中又以智能鎖為主. 但是作為一款安全產品的自身的安全性能又如何呢. 在DEFCON24上有安全研究員爆出數款藍牙智能鎖的安全漏洞. 而漏洞的類型五花八門. 從明文密碼到重放攻擊, 甚至還有一款門鎖在Fuzzing 攻擊下完全失效, 導致門戶大開.

 

 

其實智能鎖的架構非常簡單. 通過手機APP 作為中轉跟云服務器交互, 用戶甚至可以從地球任何一個角落打開鎖. 這是普通門鎖無法比的.

 

 

今天的主角DOG&BONE 藍牙智能鎖正式登場了. DOG&BONE 智能鎖是由一家位于英國的公司生產. 目前在市面上售價為100 $. 但在逆向了他們的手機APP后, 發(fā)現真正的開發(fā)者應該是一名華人. 就如大多數廠商那樣, 他們也號稱自家的智能鎖安全性能極高. 適當的宣傳是可以理解的, 但這家公司似乎有點過了頭. 簡單來說就是號稱此鎖擁有銀行級別的安全性能, 甚至需要設計出蘋果電腦的傳奇硬件黑客Steve Wozniak 親自出馬才行. 但真實情況是不是真有那么安全呢? 讓我們來一起測試下吧.

 

0x03 攻擊準備

在攻擊起始階段最重要的就是情報收集, 掌握目標盡可能多的信息對隨后的深入研究至關重要. 就DOG&BONE 鎖而言, 我們可以使用LightBLUE 與其交互, 得到一些基本信息開始.

 

 

如圖所示: 我們可以知道DOG&BONE的藍牙地址; 使用了Nordic的藍牙芯片. 且提供了何種services, 這些services 的UUID 又是哪些.

 

 

善用GOOGLE 搜索可以發(fā)現除了官方文檔之外的許多信息. 這里我們發(fā)現網上已經有其他研究人員對其進行解剖. 方便我們了解了其內部結構信息. 從而更加確認了DOG&BONE 使用的是Nordic NRF51822 芯片.

從官方發(fā)布的APP 我們可以了解到DOG&BONE都提供了哪些功能. DOG&BONE 的APP 同時有IOS 和Android 2種版本, 條件允許的話可以對2種版本分別測試分析. DOG&BONE APP 可以時時查看鎖的電池容量等基本信息. 我們可以通過 tap to unlock 和設置passcodes 等方式來打開智能鎖. 并且可以共享給其他用戶, 并限制其使用的次數和時間. 當設備提供的功能越多, 潛在的攻擊點也隨之增長. 隨后我們會針對這些功能進一步深入.

 

跟大多數Android app 一樣, APP本身沒有加固. 所以我們可以輕易通過JD-GUI 得到JAVA Byte codes. 從代碼中我們可以窺探到DOG&BONE的工作機制和采用了何種認證方式. 一些至關重要的信息也同時暴露出來. 比如UUID 和其對應的功能.

 

 

不僅如此DOG&BONE APP雖然使用了SSL 來加密其與云服務器的交互數據, 但是并沒用啟用Certs-Pinning. 所以我們仍可以通過中間人的方式抓到所有的交互數據包. 并對其進一步分析. 常用的MitM工具包括 MitMProxy 和BurpSuit Pro 等.

 

 

另一方面DOG&BONE使用藍牙來與智能鎖交互. 詳細的藍牙交互數據包將大大縮短我們的分析的時間. 幸運的是自從Android 4.4 開始便提供了Bluetooth HCI Logs 的功能. 我們可以將得到的btsnoop_hci.log 導入Wireshark 中進行分析.

 

 

在分析后, 我們可以得知DOG&BONE 是通過對屬性為lock_password的UUID 寫入正確的解鎖密碼得以開鎖. 而這個解鎖密碼則是從服務端產生的, 并發(fā)送到鎖和APP里保存. 但是這個密碼只有當用戶將鎖和自己的賬號取消關聯(lián), 再重新綁定時才會更新. 那么問題來了會有用戶每開一次鎖就把鎖和自己的賬號取消關聯(lián)嗎?

 

 

通過MitM抓包可以得到當前的開鎖密碼. 這時可以用BTLE dongle 將密碼寫入lock_password 的UUID 來驗證密碼的正確. 但請注意目前我們僅是從自己的手機得到開鎖密碼. 如果想截取別人的開鎖密碼, 我們就需要知道如何從空中抓包..

Unlock DogBone Lock (視頻地址)

http://v.qq.com/page/n/2/1/n0519c7d021.html


0x04 攻擊 – RF無線層

如何從空中抓取藍牙包?這里必須提及Michael Ossmann 設計的Ubertooth. 這可以說是藍牙安全研究的瑞士軍刀. 具體使用方法可以移步到其官網. 但必須提醒的是如果需要確??梢宰サ剿{牙包, 我們需要使用3 個Ubertooth 來監(jiān)控 37 38 39 這3 個廣播頻道.

 

 

 

在得到足夠的數據包后, 我們可以通過 CrackLE 來破解出BTLE 配對的密碼. 但是因為DOG&BONE 使用的是JustWorks 配對模式. 所以其實是完全可以省略這步的.

 

 

如果覺的Ubertooth 價格過高的話, 我們也可以用基于CC2540 芯片的TI-SmartRF Sniffer. 和其自帶的SmartRF 軟件. 而且測試發(fā)現抓包效果要比Ubertooth 好些.

 

 

0x05 攻擊 – APP 運用層

大家還記得DOG&BONE還有一個共享鎖的功能么. 在共享給其他用戶的同時, 還可以限制其使用的次數和時間. 那么這期間到底發(fā)生了什么, 是否可以繞過限制呢. 這里我們通過BurpSuit Pro 來一探究竟.

其實共享過程很簡單, 當鎖的主人決定共享給某個用戶. 服務端會發(fā)送邀請token 給此用戶

 

當此用戶接受了邀請. 服務器便會將鎖的ID 和共享類型等信息返回到用戶的賬號. 這里的共享類型包含了次數以及時間限制信息.

 

 

而當此用戶想開鎖時, 客戶端便會發(fā)送請求到服務端. 如果一切順利服務端會將當前的解鎖密碼返回. 從而達到開鎖的目的.

 

 

但如果用戶的次數用完了, 此時再發(fā)送開鎖請求. 服務端返回錯誤信息.

 

但是因為整個過程都在我們的掌握之中, 所以我們可以將服務端的返回信息換成任意我們想要的信息. 比如提高共享次數等. 以下是繞過共享次數限制的視頻演示.

Bypass DogBone lock sharing limits (視頻地址)

 

http://v.qq.com/page/y/3/v/y05190ihb3v.html

 

0X06 攻擊 – 物理機械層

以上我們通過逆向應用程序, 藍牙數據包嗅探等方式搞定了Dog&Bone 智能鎖的安全防御. 但事實上還有一個非常簡單但又非常致命的方式可以打開鎖. 那就是使用SHIM (鐵片) 攻擊, 事實證明往往最簡單的攻擊方式卻是最行之有效的. 以下是演示視頻, 在看過之后你還愿意花100 美金去買這個所謂的智能鎖嗎?

 

Bypass DogBone by SHIM (視頻地址:)

http://v.qq.com/page/j/8/q/j0519sav98q.html

 

0X07 總結

通過DOG&BONE 藍牙鎖這個案例, 相信大家對低功耗藍牙設備的分析和攻擊方式有了一定程度的了解. 但市面上的BTLE相關產品種類繁多, 每款產品的安全程度也各不相同. 大家可以自行嘗試玩出新花樣. 而從開發(fā)者的角度來說在設計階段就要將安全防御考慮進去. 在產品上市前可以考慮找白帽黑客測試過后再發(fā)布.

http://www.cnblogs.com/alisecurity/p/7117946.html