BLE數(shù)據(jù)包捕獲與分析-實戰(zhàn)篇

一枪孩、涉及的基本原理

藍牙信道

有兩種通信信道:廣播信道和數(shù)據(jù)信道(advertising channels and data channels),對應(yīng)的通道如下圖,其中廣播信道只使用37傀缩,38,39這三個通道。數(shù)據(jù)信道共包含37個信道餐茵。


ble-phy-channel-assignment.png

廣播通道作用

設(shè)備發(fā)現(xiàn)
連接建立
傳輸廣播

數(shù)據(jù)通道作用

自適應(yīng)跳頻以及設(shè)備間數(shù)據(jù)傳輸

自適應(yīng)跳頻

在數(shù)據(jù)傳輸時炬转,設(shè)備間會使用跳頻算法在數(shù)據(jù)通道間跳頻辆苔。常見的CC2540不具備捕獲數(shù)據(jù)通道中的數(shù)據(jù)的能力,需使用昂貴的專業(yè)藍牙設(shè)備(數(shù)萬元)或Ubertooth進行捕獲(幾百元返吻,但是不穩(wěn)定)姑子。

藍牙地址(bdaddr)

藍牙地址也有多種類型,有設(shè)備使用固定的藍牙地址测僵,也有設(shè)備使用隨機的藍牙地址街佑。類型如下,具體的定義參考末尾的參考連接


Address-Types-1.png

BLE安全模式

藍牙有兩種安全模式和4個安全等級,Level 1 ~ Level 4對應(yīng)的安全強度由若到強捍靠,分別為:

  • Security Level 1 supports communication without security at all, and applies to any Bluetooth communication, but think of it as applying to unpaired communications.
  • Security Level 2 supports AES-CMAC encryption (aka AES-128 via RFC 4493, which is FIPS-compliant) during communications when the devices are unpaired.
  • Security Level 3 supports encryption and requires pairing.
  • Security Level 4 supports all the bells and whistles, and instead of AES-CMAC for encryption, ECDHE (aka Elliptic Curve Diffie-Hellman aka P-256, which is also FIPS-compliant) is used instead.

二沐旨、準備抓包所需的軟件和硬件

所需硬件

Ubertooth 一個 (配合ubertooth-btle使用)
CSR模組 一個 (配合bluetoothctl使用,也可使用樹莓派等設(shè)備替代)
Linux PC 一臺
ESP32模組 一個 (作為ble server使用)

ESP32模組的長相
截屏2020-09-15 下午3.02.32.png

所需軟件

ubertooth-btle (抓取數(shù)據(jù)信道數(shù)據(jù))
bluetoothctl (監(jiān)聽廣播數(shù)據(jù))
esp-idf (燒錄ble server)
crackle (分析加密情況)
wireshark
LightBlue (手機APP)

三榨婆、動手做

燒錄BLE Server

首先從樂鑫GitHub獲取esp-idf工具鏈和demo磁携,具體的esp-idf下載和配置的方法可按官方教程操作。
當配置好esp-idf后良风,連接ESP32模組和PC谊迄。

燒錄不安全的demo:gatts_demo

該demo位于該路徑下
esp-idf/examples/bluetooth/bluedroid/ble/gatt_server

燒錄方法

cd ~/esp-idf/examples/bluetooth/bluedroid/ble/gatt_server  
make menuconfig    
make flash  //燒錄時可能需按住ESP32模組上的boot鍵

掃描附近的BLE設(shè)備

將CSR模組插入Linux PC,也可直接使用樹莓派烟央。安裝并啟動bluetoothctl(可能需要sudo權(quán)限)统诺。執(zhí)行如下命令。

sudo bluetoothctl
[bluetooth]# scan on   //啟動掃描疑俭,等待一會
[bluetooth]# scan off   //關(guān)閉掃描
[bluetooth]# devices   //查看附近的設(shè)備

找到ESP_GATTS_DEMO對應(yīng)的地址并記住粮呢。

開始捕獲數(shù)據(jù)包

將Ubertooth插入Linux PC,安裝ubertooth-btle并刷入最新的固件钞艇,操作流程參考如下鏈接:
https://github.com/greatscottgadgets/ubertooth/wiki/Build-Guide
https://github.com/greatscottgadgets/ubertooth/wiki/Firmware

準備完成后啄寡,輸入如下命令進行捕獲

touch /tmp/pipe
ubertooth-btle -t aa:bb:cc:dd:ee:ff -f -c /tmp/pipe   //aa:bb:cc:dd:ee:ff為之前獲取到的ESP_GATTS_DEMO對應(yīng)的地址
啟動wireshark 并獲取/tmp/pipe中的數(shù)據(jù)

手機端使用LightBlue連接設(shè)備,由于藍牙跳頻哩照,有時Ubertooth會抓不到包挺物,或者卡住,可以反復(fù)在LightBlue中“返回-進入”來抓取ble通訊包葡秒。

查看明文數(shù)據(jù)

由于我們使用的是未加密的demo姻乓,可直接在wireshark中看到明文傳輸?shù)臄?shù)據(jù)嵌溢,如下圖。


image.png

可以在圖片下方看到deedbeef數(shù)據(jù)值蹋岩,該數(shù)據(jù)值由gatts_demo.c中如下代碼產(chǎn)生赖草。

case ESP_GATTS_READ_EVT: {
        ESP_LOGI(GATTS_TAG, "GATT_READ_EVT, conn_id %d, trans_id %d, handle %d\n", param->read.conn_id, param->read.trans_id, param->read.handle);
        esp_gatt_rsp_t rsp;
        memset(&rsp, 0, sizeof(esp_gatt_rsp_t));
        rsp.attr_value.handle = param->read.handle;
        rsp.attr_value.len = 4;
        rsp.attr_value.value[0] = 0xde;
        rsp.attr_value.value[1] = 0xed;
        rsp.attr_value.value[2] = 0xbe;
        rsp.attr_value.value[3] = 0xef;
        esp_ble_gatts_send_response(gatts_if, param->read.conn_id, param->read.trans_id,
                                    ESP_GATT_OK, &rsp);
        break;
    }

再來分析下安全的BLE連接

在esp-idf目錄下,找到如下demo剪个,按照之前燒錄不安全demo的方式燒錄該demo秧骑。
examples/bluetooth/bluedroid/ble/gatt_security_server

燒錄完成后,使用Ubertooth捕獲手機與ESP32模組間的通訊扣囊。捕獲到的數(shù)據(jù)片段如下乎折。


截屏2020-09-15 上午11.37.49.png

可以看到Random、DHKey侵歇、LL_ENC_REQ等信息骂澄,說明該連接使用到密鑰交換,接下來我們可以借助另一個工具判斷這兩個連接是否安全惕虑。

破解工具上場--crackle

工具下載地址
https://github.com/mikeryan/crackle
該工具可以用來破解BLE通訊中的TK坟冲,或者配合LTK對BLE通訊進行解密。
我們分別使用該工具讀取兩次通訊的PCAP文件溃蔫。

讀取不安全的BLE通訊

image.png

可以看到該通訊PCAP中不包含加密通訊健提。

讀取安全的BLE通訊

image2.png

能看到crackle提示找到了加密的數(shù)據(jù)包,但是由于沒有LTK伟叛,無法解密數(shù)據(jù)包私痹。在讓我們回到demo的代碼中,那么可以看到在example_ble_sec_gatts_demo.c中有如下代碼片段统刮。

case ESP_GATTS_CONNECT_EVT:
            ESP_LOGI(GATTS_TABLE_TAG, "ESP_GATTS_CONNECT_EVT");
            /* start security connect with peer device when receive the connect event sent by the master */
            esp_ble_set_encryption(param->connect.remote_bda, ESP_BLE_SEC_ENCRYPT_MITM);
            break;

代碼片段中用到了ESP_BLE_SEC_ENCRYPT_MITM來指明連接的安全等級紊遵。除了該安全選項,還有另外三個侥蒙,分別是:

  • ESP_BLE_SEC_NONE
  • ESP_BLE_SEC_ENCRYPT
  • ESP_BLE_SEC_ENCRYPT_NO_MITM
  • ESP_BLE_SEC_ENCRYPT_MITM

四癞蚕、總結(jié)

  1. 藍牙提供了完善的安全機制和抗干擾機制
  2. 由于自適應(yīng)跳頻機制的存在,捕獲數(shù)據(jù)通道中的數(shù)據(jù)較為困難
  3. 不是所有的設(shè)備都會選擇安全的BLE藍牙配對和連接模式辉哥,可能存在數(shù)據(jù)明文傳輸?shù)那闆r

五、參考鏈接

https://microchipdeveloper.com/wireless:ble-link-layer-channels
https://www.rfwireless-world.com/Terminology/BLE-Advertising-channels-and-Data-channels-list.html
https://www.novelbits.io/bluetooth-address-privacy-ble/
https://duo.com/decipher/understanding-bluetooth-security

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末攒射,一起剝皮案震驚了整個濱河市醋旦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌会放,老刑警劉巖饲齐,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咧最,居然都是意外死亡捂人,警方通過查閱死者的電腦和手機御雕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滥搭,“玉大人酸纲,你說我怎么就攤上這事∩遥” “怎么了闽坡?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愁溜。 經(jīng)常有香客問我疾嗅,道長,這世上最難降的妖魔是什么冕象? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任代承,我火速辦了婚禮,結(jié)果婚禮上渐扮,老公的妹妹穿的比我還像新娘论悴。我一直安慰自己,他們只是感情好席爽,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布意荤。 她就那樣靜靜地躺著,像睡著了一般只锻。 火紅的嫁衣襯著肌膚如雪玖像。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天齐饮,我揣著相機與錄音捐寥,去河邊找鬼。 笑死祖驱,一個胖子當著我的面吹牛握恳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捺僻,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼乡洼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了匕坯?” 一聲冷哼從身側(cè)響起束昵,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葛峻,沒想到半個月后锹雏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡术奖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年礁遵,在試婚紗的時候發(fā)現(xiàn)自己被綠了轻绞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡佣耐,死狀恐怖政勃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晰赞,我是刑警寧澤稼病,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站掖鱼,受9級特大地震影響然走,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戏挡,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一芍瑞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧褐墅,春花似錦拆檬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至逝钥,卻和暖如春屑那,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背艘款。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工持际, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哗咆。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓蜘欲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晌柬。 傳聞我的和親對象是個殘疾皇子姥份,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344