BLE Hacking:使用Ubertooth one掃描嗅探低功耗藍牙

0×00 前言php

低功耗藍牙(Low Energy; LE),又視爲Bluetooth Smart或藍牙核心規格4.0版本。其特色具有節能、便於採用,是藍牙技術專爲物聯網(Internet of Things; IOT)開發的技術版本。html

相似文章推薦:永不消逝的電波(三):低功耗藍牙(BLE)入門之如何調戲別人的小米手環python

BLE主打功能是快速搜索,快速鏈接,超低功耗保持鏈接和傳輸數據,弱點是數據傳輸速率低,因爲BLE的低功耗特色,所以廣泛用於穿戴設備。linux

咱們比較熟悉的網絡有 Zigbee,WIFI、Bluetooth(傳統藍牙),三者之間的關係以下:android

不一樣的無線數據傳輸協議在數據傳輸速率利傳輸距離有各自的使用範圍。Zigbee、藍牙以及 WIFI 標準都是工做在 2.4GHz 頻段的無線通訊標準。git

傳統藍牙數據傳輸速率小於 3Mbps,典型數據傳輸距離爲 2-10m,藍牙技術的典型應用是在兩部手機之間進行小量數據的傳輸。github

WIFI 最高數據傳輸速率可達 50Mbps,典型數據傳輸距離在 30-100m,WIFI 技術提供了一種 Intemet 的無線接入技術。算法

0×01 藍牙與低功耗藍牙chrome

1.1 標準ubuntu

藍牙無線技術是使用範圍最普遍的全球短距離無線標準之一,全新的藍牙 4.0 版本將傳統藍牙,高速藍牙和低功耗藍牙技術三種藍牙技術合而爲一。它集成了藍牙技術在無線鏈接上的固有優點,同時增長了高速藍牙和低功耗藍牙的特色,這三個規格能夠組合使用,也能夠單獨使用,低功耗藍牙即 ble 是藍牙 4.0 的核心規範,該技術最大特色是擁有超低的運行功耗和待機功耗,藍牙低功耗設備使用一粒鈕釦電池能夠連續工做數年之久,可應用與對成本和功耗都有嚴格要求的無線方案,並且隨之智能機的發展將有着更加普遍的領域。

BLE分爲三部分Service、Characteristic、Descriptor,這三部分都由UUID做爲惟一標示符。一個藍牙4.0的終端能夠包含多個Service,一個Service能夠包含多個Characteristic,一個Characteristic包含一個Value和多個Descriptor,一個Descriptor包含一個Value。

BLE 規範中定義了 GAP(Generic Access Profile)和 GATT(Generic Attribute)兩個基本配置文件。

GAP 層負責設備訪問模式和進程,包括設備發現,創建鏈接,終止鏈接。初始化安全特徵和設備配置。

GATT 層用於已鏈接的藍牙設備之間的數據通訊。

1.2 BLE特色&優點

1.2.1高可靠性

對於無線通訊而言,因爲電磁波在傳輸過程當中容易受不少因素的干擾,例如,障礙物的阻擋、天氣情況等,所以,無線通訊系統在數據傳輸過程當中具備內在的不可靠性。藍牙技術聯盟 SIG 在指定藍牙 4.0 規範時已經考慮到了這種數據傳輸過程當中的內在的不肯定性,在射頻,基帶協議,鏈路管理協議中採用可靠性措施,包括:差錯檢測和矯正,進行數據編解碼,數據降噪等,極大地提升了藍牙無線數據傳輸的可靠性,另外,使用自適應調頻技術,能最大程度地減小和其餘 2.4G 無線電波的串擾。

1.2.2 低成本、低功耗

低功耗藍牙支持兩種部署方式:雙模式和單模式,通常智能機上採用雙模式,外設通常採用 BLE 單模。

BLE 技術能夠應用於 8-bit MCU, 目前 TI 公司推出的兼容 BluetoothLE 協議的 SoC芯片 CC254X 每片價格在 7.6 元左右, 外接幾個阻容器件構成的濾波電路和 PCB 天線便可實現網絡節點的構建。Nodic的NRF51822也不過才10元人民幣。

低功耗設計:藍牙 4.0 版本強化了藍牙在數據傳輸上的低功耗性能,功耗較傳統藍牙下降了 90%。

傳統藍牙設備的待機耗電量一直是其缺陷之一,這與傳統藍牙技術採用16至32個頻道進行廣播有很大關係,而低功耗藍牙僅適用 3個廣播通道,且每次廣播時射頻的開啓時間也有傳統的 22.5ms 減小到 0.6~1.2ms,這兩個協議規範的改變,大幅下降了由於廣播數據致使的待機功耗。

低功耗藍牙設計用深度睡眠狀態來替換傳統藍牙的空閒狀態,在深度睡眠狀態下,主機 Host 長時間處於超低的負載循環 Duty Cycle 狀態,只在須要運做時由控制器來啓動,因爲主機較控制器消耗的能源更多,所以這樣的設計也節省了更多的能源。

1.2.3 快速啓動、瞬間鏈接

此前藍牙版本的啓動速度很是緩慢,2.1 版本的藍牙啓動鏈接須要 6s 時間,而藍牙4.0 版本僅須要 3ms 便可完成,幾乎是瞬間鏈接。

1.2.4 傳輸距離極大提供

傳統藍牙傳輸距離通常 2-10m,而藍牙 4.0 的有效傳輸距離能夠達到 60~100m,傳輸距離提高了 10 倍,極大開拓了藍牙技術的應用前景。

1.2.5 高安全性

爲了保證數據傳輸的安全性,使用 AES-128 CCM 加密算法進行數據包加密認證,對於初學階段,安全性問題能夠暫時不考慮。

1.3 協議棧

協議棧內容請參考:Understanding Bluetooth Advertising Packets一文。

中文版:http://blog.csdn.net/ooakk/article/details/7302425

1.4 通訊信道

BLE 工做在 ISM 頻帶,定義了兩個頻段,2.4GHz 頻段和 896/915MHz 頻帶。在IEEE802.15.4 中共規定了 27 個信道:

在 2.4GHz 頻段,共有 16 個信道,信道通訊速率爲 250kbps:

在 915MHz 頻段,共有 10 個信道,信道通訊速率爲 40kbps:

在 868MHz 頻段,有 1 個信道,信道通訊速率爲 20kbpS。

BLE 工做在 2.4GHz 頻段,僅適用 3 個廣播通道,適用全部藍牙規範版本通用的自適應調頻技術。

BlueTooth 有79個射頻信道,按0-78排序,並於2402 MHz開始,以1 MHz分隔:

channel 00 : 2.402000000 Ghz
channel 01 : 2.403000000 Ghz
…
channel 78 : 2.480000000 Ghz

BTLE有40個頻道(也稱爲信道),按37在第一個,後面由0-36,而後第39信道(那麼38呢 :) )第38信道位於10和11之間:

channel 37 : 2.402000000 Ghz
channel 00 : 2.404000000 Ghz
channel 01 : 2.406000000 Ghz
channel 02 : 2.408000000 Ghz
channel 03 : 2.410000000 Ghz
channel 04 : 2.412000000 Ghz
channel 05 : 2.414000000 Ghz
channel 06 : 2.416000000 Ghz
channel 07 : 2.418000000 Ghz
channel 08 : 2.420000000 Ghz
channel 09 : 2.422000000 Ghz
channel 10 : 2.424000000 Ghz
channel 38 : 2.426000000 Ghz
channel 11 : 2.428000000 Ghz
channel 12 : 2.430000000 Ghz
channel 13 : 2.432000000 Ghz
channel 14 : 2.434000000 Ghz
channel 15 : 2.436000000 Ghz
channel 16 : 2.438000000 Ghz
channel 17 : 2.440000000 Ghz
channel 18 : 2.442000000 Ghz
channel 19 : 2.444000000 Ghz
channel 20 : 2.446000000 Ghz
channel 21 : 2.448000000 Ghz
channel 22 : 2.450000000 Ghz
channel 23 : 2.452000000 Ghz
channel 24 : 2.454000000 Ghz
channel 25 : 2.456000000 Ghz
channel 26 : 2.458000000 Ghz
channel 27 : 2.460000000 Ghz
channel 28 : 2.462000000 Ghz
channel 29 : 2.464000000 Ghz
channel 30 : 2.466000000 Ghz
channel 31 : 2.468000000 Ghz
channel 32 : 2.470000000 Ghz
channel 33 : 2.472000000 Ghz
channel 34 : 2.474000000 Ghz
channel 35 : 2.476000000 Ghz
channel 36 : 2.478000000 Ghz
channel 39 : 2.480000000 Ghz

40個頻道中:3七、3八、39爲廣播信道,另外37個頻道用於數據的傳輸:

使用德州儀器(TI)CC2540藍牙低功耗模塊配合官方的SmartRF協議軟件包監聽器:PACKET-SNIFFER,可對三個藍牙廣播信道進行嗅探。

使用方法可參考:Ti.com.cn/packet-sniffer 這種嗅探方案優勢是廉價,不足是隻能嗅探到廣播信道的數據包,沒法捕獲鏈接完成後也就是設備通訊過程當中的數據包:

基於HackRF嗅探藍牙數據包實際上也是可行的:

其方法參考jxj童鞋的BTLE packet sniffer based on HACKRF (function and performance similar to TI’s packet sniffer)

HackRF.NET 中文版:基於HACKRF的低功耗藍牙(BTLE)packet sniffer/scanner

0×02 環境搭建:

咱們說到上面的方案只能嗅探到廣播信道的數據包,沒法捕獲通訊過程當中的藍牙數據包,接下來咱們將使用Ubertooth One來彌補上面方案的缺陷。

2.1安裝lib庫

apt-get install python-software-properties
add-apt-repository ppa:pyside
apt-get update
apt-get install libnl-dev libusb-1.0-0-dev pyside-tools

2.2 安裝libbtbb

wget https://github.com/greatscottgadgets/libbtbb/archive/2015-09-R2.tar.gz -O libbtbb-2015-09-R2.tar.gz
tar xf libbtbb-2015-09-R2.tar.gz
cd libbtbb-2015-09-R2
mkdir build
cd build
cmake ..
make
sudo make install

2.3 安裝ubertooth

wget https://github.com/greatscottgadgets/ubertooth/releases/download/2015-09-R2/ubertooth-2015-09-R2.tar.xz -O ubertooth-2015-09-R2.tar.xz
tar xf ubertooth-2015-09-R2.tar.xz
cd ubertooth-2015-09-R2/host
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

2.4 安裝wireshark

sudo apt-get install checkinstall
wget https://www.wireshark.org/download/src/wireshark-2.0.3.tar.bz2
tar -xvf wireshark-2.0.3.tar.bz2
cd wireshark-2.0.3
./configure
make
make install

2.5 安裝kismet

wget https://kismetwireless.net/code/kismet-2013-03-R1b.tar.xz
tar xf kismet-2013-03-R1b.tar.xz
cd kismet-2013-03-R1b
ln -s ../ubertooth-2015-09-R2/host/kismet/plugin-ubertooth .
./configure
make && make plugins
sudo make suidinstall
sudo make plugins-install

2.6 安裝BLE解密工具crackle (開源項目地址)

git clone https://github.com/mikeryan/crackle.git
cd crackle
make
make install

找到kismet的配置文件kismet.conf ,把」pcapbtbb」加入到kismet.conf的logtypes= 裏邊

0×03 嗅探掃描

3.1 spectool

spectool_curses

spectool_gtk 掃描附近信號並在頻譜上顯示:

spectool_raw RAW中文解釋是「原材料」或「未經處理的東西」,這裏猜想是顯示設備捕獲到的未經處理的信號數據:

spectool_net 將Ubertooth One做爲一臺「硬件服務器」,並監聽TCP:30569端口,局域網內任何能夠跟主機創建通訊的PC可經過Ubertoothe主機IP+30569共享設備。鏈接方式:在另一臺主機終端上執行:spectool_gtk —>選擇Open Network Device —>輸入ip、端口。

3.2 hcitool

root@0xroot:~# hcitool --help
hcitool - HCI Tool ver 4.99
Usage:
    hcitool [options] <command> [command parameters]
Options:
    --help    Display help
    -i dev    HCI device
Commands:
    dev     Display local devices
    inq     Inquire remote devices
    scan    Scan for remote devices
    name    Get name from remote device
    info    Get information from remote device
    spinq    Start periodic inquiry
    epinq    Exit periodic inquiry
    cmd     Submit arbitrary HCI commands
    con     Display active connections
    cc      Create connection to remote device
    dc      Disconnect from remote device
    sr      Switch master/slave role
    cpt     Change connection packet type
    rssi    Display connection RSSI
    lq      Display link quality
    tpl     Display transmit power level
    afh     Display AFH channel map
    lp      Set/display link policy settings
    lst     Set/display link supervision timeout
    auth    Request authentication
    enc     Set connection encryption
    key     Change connection link key
    clkoff    Read clock offset
    clock    Read local or remote clock
    lescan    Start LE scan
    lewladd    Add device to LE White List
    lewlrm    Remove device from LE White List
    lewlsz    Read size of LE White List
    lewlclr    Clear LE White list
    lecc    Create a LE Connection
    ledc    Disconnect a LE Connection
    lecup    LE Connection Update

hcitool scan :掃描附近藍牙設備

hcitool lescan :掃描附近低功耗藍牙設備

3.3 gatttool

root@0xroot:~# gatttool -h
Usage:
  gatttool [OPTION...]

Help Options:
  -h, --help                                Show help options
  --help-all                                Show all help options
  --help-gatt                               Show all GATT commands
  --help-params                             Show all Primary Services/Characteristics arguments
  --help-char-read-write                    Show all Characteristics Value/Descriptor Read/Write arguments

Application Options:
  -i, --adapter=hciX                        Specify local adapter interface
  -b, --device=MAC                          Specify remote Bluetooth address
  -m, --mtu=MTU                             Specify the MTU size
  -p, --psm=PSM                             Specify the PSM for GATT/ATT over BR/EDR
  -l, --sec-level=[low | medium | high]     Set security level. Default: low
  -I, --interactive                         Use interactive mode
gatttool -b 1C:96:5A:FF:4B:E7 -I
[   ][1C:96:5A:FF:4B:E7][LE]> help
help                                           Show this help
exit                                           Exit interactive mode
quit                                           Exit interactive mode
connect         [address]                      Connect to a remote device
disconnect                                     Disconnect from a remote device
primary         [UUID]                         Primary Service Discovery
characteristics [start hnd [end hnd [UUID]]]   Characteristics Discovery
char-desc       [start hnd] [end hnd]          Characteristics Descriptor Discovery
char-read-hnd   <handle> [offset]              Characteristics Value/Descriptor Read by handle
char-read-uuid  <UUID> [start hnd] [end hnd]   Characteristics Value/Descriptor Read by UUID
char-write-req  <handle> <new value>           Characteristic Value Write (Write Request)
char-write-cmd  <handle> <new value>           Characteristic Value Write (No response)
sec-level       [low | medium | high]          Set security level. Default: low
mtu             <value>                        Exchange MTU for GATT/ATT
[   ][1C:96:5A:FF:4B:E7][LE]> 

3.4 ubertooth-scan

root@0xroot:~# ubertooth-scan --help
ubertooth-scan: invalid option -- '-'
ubertooth-scan - active(bluez) device scan and inquiry supported by Ubertooth
Usage:
    -h this Help
    -U<0-7> set ubertooth device to use
    -s hci Scan - perform HCI scan
    -t scan Time (seconds) - length of time to sniff packets. [Default: 20s]
    -x eXtended scan - retrieve additional information about target devices
    -b Bluetooth device (hci0)

ubertooth-scan -s

3.5 ubertooth-btle

ubertooth-btle - passive Bluetooth Low Energy monitoring
Usage:
    -h this help

    Major modes:
    -f follow connections
    -p promiscuous: sniff active connections
    -a[address] get/set access address (example: -a8e89bed6)
    -s<address> faux slave mode, using MAC addr (example: -s22:44:66:88:aa:cc)
    -t<address> set connection following target (example: -t22:44:66:88:aa:cc)

    Interference (use with -f or -p):
    -i interfere with one connection and return to idle
    -I interfere continuously

    Data source:
    -U<0-7> set ubertooth device to use

    Misc:
    -r<filename> capture packets to PCAPNG file
    -q<filename> capture packets to PCAP file (DLT_BLUETOOTH_LE_LL_WITH_PHDR)
    -c<filename> capture packets to PCAP file (DLT_PPI)
    -A<index> advertising channel index (default 37)
    -v[01] verify CRC mode, get status or enable/disable
    -x<n> allow n access address offenses (default 32)

If an input file is not specified, an Ubertooth device is used for live capture.
In get/set mode no capture occurs.

ubertooth-btle -f -c test.pcap抓包&保存到本地

使用這條命令咱們能夠把設備捕獲到的數據包保存到本地,完成後可導入wireshark進行數據包、協議分析。

wireshark導入嗅探到的藍牙數據包須要處理一下才能正常查看,否則沒法正常分析數據:

Edit → Preferences → Protocols → DLT_USER → Edit → New

在payload protocol中輸入btle

使用規則過濾數據包:參考Capturing BLE in Wireshark

btle.data_header.length > 0 || btle.advertising_header.pdu_type == 0x05

3.6 crackle

若是捕獲到足夠的數據包尤爲是btsmp,那接下來即可以用crackle來破解tk和ltk:

crackle -i <file.pcap>

解密數據包,並把解密後的包另存:

crackle -i <file.pcap> -o <output.pcap>
crackle -i <file.pcap> -o <out.pcap> -l <ltk>

0×04 參考 && 感謝

Sniffing and decoding NRF24L01+ and Bluetooth LE packets for under $30

Bluetooth sniffing with Ubertooth : https://dominicspill.com/kiwicon/Spill-Ubertooth-Kiwicon-2012.pdf

Now I wanna sniff some Bluetooth: Sniffing and Cracking Bluetooth with the UbertoothOne

http://j2abro.blogspot.com.au/2014/06/understanding-bluetooth-advertising.html

路人甲@烏雲drops:Bluetooth Low Energy 嗅探

瘋狗@烏雲drops:物聯網安全拔「牙」實戰——低功耗藍牙(BLE)初探

http://j2abro.blogspot.com.au/2014/06/understanding-bluetooth-advertising.html 

http://j2abro.blogspot.com.au/2014/06/analyzing-bluetooth-advertising-with.html 

http://cerescontrols.com/tutorials-3/sniffing-bluetooth-packets-with-kismet-and-wireshark-in-ubuntu-12-04/

https://github.com/greatscottgadgets/ubertooth/wiki/Build-Guide

https://github.com/greatscottgadgets/ubertooth/wiki/Capturing-BLE-in-Wireshark

http://stackoverflow.com/questions/23877761/sniffing-logging-your-own-android-bluetooth-traffic

https://lacklustre.net/bluetooth/wireshark.html

https://blog.lacklustre.net/posts/BLE_Fun_With_Ubertooth:_Sniffing_Bluetooth_Smart_and_Cracking_Its_Crypto/

http://superuser.com/questions/947593/how-can-i-sniff-bluetooth-traffic-coming-from-my-and-another-device

http://www.backtrack-linux.org/forums/showthread.php?t=41552

http://www.splitbits.com/2014/05/14/ubertooth-spectools-chromebook/

http://ubertooth.sourceforge.net/usage/start/

http://hackerific.net/2012/01/28/Spectrum-Tools-and-Ubertooth-One/

https://penturalabs.wordpress.com/2014/02/20/ubertooth-updated-for-2014/

https://blog.lacklustre.net/

相關文章
相關標籤/搜索