物聯網攻擊-攻擊低功耗藍牙設備新手指導


i春秋作家:淺安

 

大家好,在這篇文章中,我們將學習怎樣利用藍牙技術攻擊來攻擊智能藍牙燈泡。為了輕松一點,我將這篇文章分為兩個部分。在第一部分,我們將學習基本的藍牙理論,在第二部分,我們將實際使用這些理論。

讓我們開始吧。

 

我們的目標—我們想要做什么?

我們有一個可以和智能燈泡交互的移動應用。

我們將使用Bluetooth CSR V4.0 dongle 遠程控制燈泡(CSR V4.0 dongle是我們和智能燈泡交流的工具,相當於藍牙收發器)。總而言之,即使我們不是燈泡的主人我們也能控制它。

藍牙知識理論–我們都知道,藍牙是一項歷史悠久的技術,但是你可能不知道,藍牙有兩種不同的通信方式。

1) 經典藍牙,例如 藍牙 2.0

2) 低功耗藍牙 例如 低功耗藍牙 4.0

在藍牙1.0 中,就介紹了經典藍牙的規格。這些規格由SIG確定(SIG,藍牙特別興趣小組)並且所有的藍牙制造商和服務提供商都是SIG的會員。

BLE(低功耗藍牙) 是一種個人無限局域網。它最初由諾基亞在2006年發明並命名為Wibree,在2010年Wibree融入了藍牙標准化。BLE 被有意設計在低功耗設備上運行。因為很多物聯網設備都是低功耗設備,所以他們使用BLE來通信。事實上無線協議有很多,但是BLE是最簡單且最容易實現的。

 

BLE 支持的系統- BLE 幾乎被所有的平台支持,主要可分為下面這些:

1)   移動平台類 -Android ,Ios,windows等

2)   桌面類 – windows ,linux ,macos等

工作頻率2.4-2.8Ghz

 

BLE體系結構,下面是BLE 體系結構

image.png

BLE體系結構包含3層

a)   主機層

b)   控制器層

c)   主機控制器接口層(HCI)

主機層和控制層以主機控制器接口 分開。

對於體系結構,我們不需要了解所有層的功能,我們只需要了解我們所需要的(GATT,GAP和ATT),讓我們具體看下它們的功能。

a)   GAP—通用訪問配置文件(GernericAccess Profile) ,它的作用是發現新的BLE設備.簡單一句話,你的新藍牙設備應該被其它的設備或應用發現,這樣才可以連接它。這一部分的工作主要就是由GAP完成。

b)   ATT – 屬性協議(AttributeProtocol),總而言之,如果我們想連接web 服務器,我們必須使用HTTP協議,HTTP連接了瀏覽器和服務器。可以類比,應用和藍牙智能燈泡的連接就是ATT協議控制。

c)   GATT -通用屬性配置文件(GenericAttribute Profile)。類比,我們使用瀏覽器與服務器交互,因此,瀏覽器負責交換整個數據。GATT也扮演了同樣的角色。它負責在智能藍牙燈泡和移動應用之間交換和展示整個信息。GATT只會在兩個設備連接之后才會起作用。

GATT 主要是利用了服務和特征。 為了更好的理解什么是服務和特征,我們畫了下面這張圖:

image.png

讓我們詳細看下這張圖,在協議內部是服務,在服務內部是幾個特征。

因此

1)  協議—服務的集合

2)  服務—特征的集合

3)  特征—單個數據點

我特意沒有寫具體的定義,讓我們看下下面這個簡單的例子—假設你是一名安全顧問,你可以做網絡和移動應用滲透測試,下面是你列出的自己的技能:

1) Web應用滲透測試

a). Java  應用滲透測試

b). Net應用滲透測試

c). PHP應用滲透測試

2)  移動應用滲透測試

a). Android應用滲透測試

b). ios應用滲透測試

c). Windows應用滲透測試

在上面的例子中

1) 協議就是安全顧問

2) 服務就是Web應用滲透測試技能和移動應用滲透測試技能

3) 特征就是 java 應用滲透測試技能,.net應用滲透測試技能等。

我希望通過這個例子,你能明白協議、服務、特征都是什么。

在BLE中,事實上並沒有什么協議,協議只是服務的集合,你滲透任何BLE設備時也不會使用協議。

藍牙技術聯盟(bluetooth SIG)提供了所有的服務,服務列表可以從https://www.bluetooth.com/specifications/gatt/services獲得。如果你打開了這個鏈接,你可以看到藍牙技術聯盟提供的服務列表。所有的服務都是SIG提供的。現在我們重點關注下“AssignNumber” 這一列,可以看到每一個服務都分配了一些數字,而且所有的數字都以”0×18”開頭。

同樣的,特征列表也是由SIG提供,你也可以打開https://www.bluetooth.com/specifications/gatt/characteristics來查看。如果你打開了這個鏈接,你將看到一個特征列表,所有的特征都是SIG提供的,下面我們看下“AssignedNumber”這一列,我們可以看到所有的特征都是以”0x2A” 開頭,所有的“0x2A’都被保留並用於特征。

 

工具  有很多工具可以重放藍牙數據包,像Ubertooth,Bluefruit和Bluetooth CSR v4.0 dongle都可以。Ubertooth使用最廣泛但也最貴,因此我們使用最便宜的dongle。

 

關於 BluetoothCDR V4.0 Dongle – 首先看下dongle 長什么樣子

image.png

上面展示是usb dongle , 它只要插入計算機就可以使用了。

准備: 首先我們得有一個智能燈泡和一個安卓應用,我們使用安卓應用控制燈泡。

詳細步驟:

1) 抓取燈泡和移動設備之間的通信。Dongle 不能抓取移動設備和燈泡之間的通信,但是我們可以直接查看手機上的HCI日志。在手機上它是這樣顯示的

image.png

這樣就可以了,我們就可以得到手機上藍牙的傳輸數據了。

2) 將日志拷到電腦上。

3) 分析流量

4) 使用Bluettot CSR 重發包

過程: 我正使用Bluetooth CSR v4.0。我可以截取燈泡和智能應用間所有的通信,並用wireshark分析日志,分析完日志之后,我們可以使用CSR重放它。

這就是第一部分要講的。在下一部分,我們將學習怎么利用CSR 進行BLE通信。

物聯網攻擊-攻擊低功耗藍牙新手指導

大家好。這是攻擊低功耗藍牙的第二部分。我希望在閱讀這一部分之前你已經認真閱讀了第一部分。如果你還沒有閱讀第一部分,那還是先看第一部分吧。

讓我們開始第二部分吧。

簡單介紹CSR(ShortPrimer On CSR。CSR即藍牙收發器)   在這一節,我們要簡單學習一下關於CSR的知識,這樣我們才可以理解CSR和智能藍牙燈泡到底是怎樣交互的。正如我們在第一部分所說的,CSR就像一個普通的USB設備,我們可以把它插在電腦上。首先,我們必須檢查CSR設備能不能被我們的電腦檢測到?我們可以

使用hciconfig這個命令來檢驗。就像下面我們所操作的一樣。

image.png

上圖展示的是我們還沒有插入CSR設備時,鍵入hciconfig的結果。hci0 是電腦自帶的藍牙的接口。

image.png

這張圖才是CSR被電腦檢測到后鍵入hciconfig的結果。hci1是我們將CSR設備連接到電腦后新生成的接口。正如上圖所顯示的,我們的CSR設備已經被電腦正常的檢測到了。

第二步– 連接燈泡(Next Step – connecting to the bulb)

 

不管什么時候,通過藍牙連接任何設備的第一步都是打開設備的藍牙。我們已經打開了我們電腦上的藍牙(即CSR藍牙設備)。

現在我們可以掃描附近有哪些可以連接的藍牙設備了。在我們的例子中,我們使用電腦上的CSR設備掃描智能藍牙燈泡。為了搜索周圍的設備,我們可以使用sudo hcitool lescan這個命令。lescan 這個命令可以掃描附近可用的藍牙設備,正如下圖展示的:

image.png

正如上面顯示的,我們可以看到智能藍牙燈泡的MAC地址為F4:B8:5E:E2:BA:E9.

現在我們可以使用 sudo gatttool -I -b device_mac_address 這個命令來連接燈泡了。

解釋下這個命令:

-I          連接接口

-b         識別具體的mac地址

下面就是執行了這個命令的截圖:

image.png

如果你仔細看了上面的截圖,你就會發現在第二行我開始連接燈泡。最后一行(藍色的一行)顯示我們已經成功連上了燈泡。

現在讓我們看下智能藍牙燈泡的服務和特征。我們可以使用primary 和characteristics 命令來分別展示燈泡的服務和特征。

image.png

正如我們所看到的,這個燈泡有4個服務和21個特征。我們可以看到,第一個服務從句柄(屬性句柄)0×0001 開始到句柄(結束組句柄)0x000b結束。你肯定在想,開始值是0×0001,結束值是0x000b,那這兩個值之間是什么昵?對吧!

如果你還記得我們在第一部分談論服務和特征的內容,那你一定記得我說過服務之間是幾個特征。所以,0×0001至0x000b 之間的值當然是燈泡提供的幾個服務。你可以通過characteristics 命令的輸出結果來驗證。仔細看一下,我們可以看到0×0002,0×0004,直到0x000a。在0x000a后照理應該是0x000b,但是實際上我們可以看到是0x000d。那0x000b和0x000c哪去了?

仔細看下primary命令的輸出,可以看到0x000b(組結束句柄)和0x000c(屬性句柄)。事實上,0x000b是第一個服務的結束句柄值而0x000c是第二個服務的開始句柄值。由此我們可以推斷出第一個服務從0×0001開始到0x000b結束並且有5個特征值,特征從0×0002開始到0x000a結束。同樣的,我們可以確定其它的服務,並且可以確定智能藍牙燈泡使用了哪些特征。

句柄 每一個服務和特征都有一個獨一無二的部分叫做句柄。句柄是確認一個服務或特征的基本標識。因此,每個服務與特征都必須使用句柄。同時,如果我們想改變任何一個特征的值,我們必須首先確定它的句柄。

最重要的一點 一些服務和特征的句柄是被BluetoothSIG預定義的,並且使用藍牙的IOT的設備必須使用這些預定義的服務或特征。同時,還有一部分服務或特征是制造商在制造他們的設備時使用的。現在,我們的面臨的問題是當我們滲透一個IoT設備時,我們是利用SIG已經預定義的服務或特征還是使用制造商定義的呢?

如果我們利用SIG預定義的服務,設備制造商是不使用這一部分的,他只能向SIG反映這個問題,但他無法對預定義的服務做任何修改當然更不可能修復它。所以我們必須利用制造商自定義的服務。

現在問題變成了另外一個: 我們怎樣區分一個服務是SIG預定義的還是制造商定義的?讓我們看下characteristics 命令輸出的截圖,在uuid這個區域有些值是0000fff1,0000fff2…0000fff6。規則是制造商定義的特征是都是以‘f’開頭的,例如000f****。因此,當一個值是以’f’開頭,你應該意識到,這個是開發商自定義的特征,我們也只能利用這些特征來滲透。我希望現在你能對哪些是開發商自定義的特征,哪些是SIG預定義的特征有一個清晰的認識了。

 

關於燈泡

 

我們使用的燈泡是Reos制造的智能燈泡。我們可以使用一款名為”ReosLite”的APP來控制這個智能燈泡。我們可以通過這個APP改變燈的顏色,接受發來的警報並且將燈切換為不同的模式。智能燈泡和相應的APP 如下圖所示:

image.png

image.png

現在我將使用APP中的藍牙來控制燈泡。同時,APP和智能燈泡之間所有的連接信息都將被記錄下來並自動保存在手機中。

第一步是連接燈泡。首先我們應該打開手機的藍牙並且打開APP,通過APP來連接燈泡,

連接過程如下圖所示:

image.png

正如顯示的那樣,我們連上了燈泡並且將他命名為”Lite-1”。

現在,我將改變燈泡的顏色,具體的過程如下圖所示:

image.png

image.pngimage.pngimage.png

這就是智能燈泡和APP交互的一個簡單的全過程。

 

利用 這一部分我們將真正開始攻擊

截止到目前,我們改變了燈的顏色,並且將所有的藍牙包都抓取了並傳到電腦。顯示,我們使用wireshark打開日志:

image.png

這里打開有650-700個包。分析所有的包並不是一項簡單的工作。事實上,我們只需要尋找那些寫數據的特殊包,即那些在我們的例子中,改變了燈顏色的那些數據。

我是這樣做的,我首先看了協議(protocol)這一列,這一共有三個協議:HCI_EVT,HCI_CMD和ATT。我googled(谷歌一下或百度一下)它們都有哪些功能。正如我得到的信息,只有ATT協議被用了寫數據給燈泡而其它兩個協議被用於主機控制器接口(HCI)。這就是我需要了解的唯一信息,所以我快速的只檢查ATT包。

ATT包如下圖所示:

image.png

在上如中,我加亮了幾行。在最開始,第一個加亮的部分是從本地向別的地方寫數據(即從手機向燈泡寫數據)。仔細看這一行,可以看到句柄(handle)並且句柄(handle)的值為0x002b。這意味着APP通過值為0x002b的句柄(handle)寫數據。在上一節,我們通過APP改變了燈的顏色,因此,我們改變顏色是通過值為0x002b的句柄。

現在來看第三個加亮的部分—我們看到名為Value的區域。並且Value的值類似0f0d03。。。

現在我們需要明白,0f0d03….這些字符串其實就是被值為0x002b的句柄拿來改變燈的顏色的。同樣的,我們通過分析ATT包,我們可以得到很多這樣的值,如下圖所示:

image.png

現在我們擁有這些Value對應的值及相應的句柄。我們要做的就是—簡單的重發這些包。為了重發這些包,我們需要借助一些工具,在這里,我們使用的就是上文介紹的CSR(藍牙收發器)。同時我們也需要上文的值為0x002b的句柄對應的值。現在,我將CSR連上了電腦,通過使用char-write-req handle_value value這個命令來改變燈的顏色。

命令的解釋

handle_value  句柄(handle)的值

value         燈的顏色的值

同樣,這個命令的截圖如下圖所示:

image.png

正如上圖所示: 我們只是確定了句柄的值(例如0x002b)和其對應Valuefield 的值,這樣,我們就能改變燈的顏色,如下圖所示:

image.png

綜上所述,這個就是我們遠程控制燈泡並且改變燈的顏色,即使我不是燈的主人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM