<b>2.3 低能耗藍牙和通過移動應用程式開鎖</b>
<b></b>
到目前為止,我們已經對磁卡門鎖的攻擊情況進行了研究,為了解針對常見門鎖的基本攻擊手段奠定了堅實的基礎。我們也研究了z-wave門鎖,并發現一個在實作協定時犯的簡單錯誤是如何導緻門鎖不再安全的。
這一節,我們将看一下使用低功耗藍牙(ble)的kwikset kevo門鎖,如圖2-3所示。從物聯網的角度來看,使用iphone應用程式控制這種門鎖看起來非常有趣。
圖2-3:kwikset kevo門鎖
這裡,我們将讨論已知的ble的弱點以及如何捕獲無線流量,但我們會特别關注ios應用程式,這把它從我們目前已經讨論的門鎖中區分出來。
2.3.1 使用抓包工具了解ble的弱點
作為建立于2010年的藍牙4.0标準的一部分,ble在業界受到了驚人的支援,因為它功耗很低,這對智能手機、平闆電腦和物聯網裝置來說都非常重要。藍牙硬體晶片僅需2美元,與zigbee和z-wave協定相比有着明顯的競争優勢。
藍牙技術聯盟負責維護現有的藍牙規範。需要注意的是,該規範涵蓋了經典的藍牙和ble,但兩者并不互相相容(采用4.0以前規範的藍牙裝置不能與ble裝置互相通信)。
ble工作在2.4ghz頻段,被分成40個信道,其中37個用來傳輸資料,其餘3個用于未連接配接的裝置來廣播裝置資訊并建立連接配接。裝置可以在監聽範圍内向任何掃描裝置或接收器廣播資料。這允許裝置發送單向資料到其他裝置。
廣播裝置發送一個廣告資料包,其中包含31位元組的有效載荷,包括關于廣播裝置以及任何其他自定義的資訊。當31個位元組不夠傳遞必要的資訊時,ble支援一種稱為掃描響應的機制,其中偵聽裝置可以用它來請求第二條廣告幀,長度也是31位元組,總數達到了62個位元組。
廣告包不包含任何安全機制,是以敏感資訊一定不能在廣播包中發送。
為了在兩個方向上都能傳輸資料,裝置需要在主裝置和從裝置之間建立連接配接。主裝置接收到由從裝置發送的廣告資料包,并要求該從裝置建立一個永久連接配接。一個裝置可以同時為主裝置和從裝置。一個從裝置可以連接配接到多個主裝置,一個主裝置也可以連接配接到多個從裝置。
ble包可以通過使用基于usb的ubertooth one裝置以及ubertooth軟體工具套裝捕獲,ubertooth軟體工具套裝可以通過建構向導生成。這些工具中包含一個頻譜分析儀(如圖2-4所示),在購買ubertooth one後,你應該立即運作它,以確定一切工作正常。
圖2-4:ubertooth 頻譜分析
ubertooth項目還包括一個叫作ubertooth-btle的工具,能夠通過以下指令捕獲ble資料流:
[bash]$ ubertooth-btle -f -c capture.cap
-f标志表示建立立的ble連接配接,-c标志指定捕獲的資料所寫入的檔案名。這個檔案可以使用wireshark網絡嗅探器打開,如圖2-5所示。
每個ble資料包包含一個存取位址(access address,aa),這是一個具體連接配接的唯一辨別符。當裝置發送廣告資料包時,使用固定的存取位址0x8e89bed6(如圖2-5所示)。
圖2-5:用wireshark分析ble廣告包
通過iphone上一個叫作lightblue的ios應用可以模拟ble裝置,如圖2-6所示。這對測試ubertooth one的功能非常有用,并確定抓包工具正在工作。注意,圖2-5中的wireshark正在對圖2-6中名為血壓計的廣告虛拟裝置的資料包進行抓包分析。
研究人員mike ryan在他的白皮書“藍牙:低能耗帶來的低安全性”中介紹了如何捕獲ble連接配接。從本質上講,使用hopincrement值連接配接跨越37個預留用于傳輸的信道。nextchannel值的計算方法如下:
nextchannel ≡ channel + hopincrement (mod 37)
主裝置和從裝置用這個公式計算出并跳到下一信道。主、從裝置相繼跳頻傳輸一個資料包。如果沒有資料需要傳輸,那他們發出一個無資料網絡包。是以,為了嗅探ble連接配接,當使用-f 參數抓包時,ubertooth-btle工具按照同樣的順序跳頻。
圖2-6:用lightblue ios 應用程式模拟ble裝置
在ryan的文章中,他公開了一個ble的關鍵安全問題,重要的是要了解ble采用的密鑰交換協定容易受到暴力破解的攻擊。
主、從裝置在傳輸資料時可以使用資料加密來保護資料安全。為了做到這一點,就必須建立被稱為長期密鑰(long-term key,ltk)的共享秘密。在大多數情況下,主裝置和從裝置在後續的連接配接中會重複使用ltk。通過選擇一個臨時密鑰(temporary key,tk)開始密鑰交換協定,這個臨時密鑰是基于備受推崇的進階加密标準(aes)協定生成的。
根據ble的規約,如果選擇了僅工作模式,那麼tk的值是0。這種模式用于裝置很少或是沒有顯示或輸入機制的時候,是以配對是自動的。除此以外,tk使用介于0到999 999之間的一個值。更常見的是在主裝置和從裝置上顯示出生成的數字要求使用者來确認。一旦計算出tk,主、從裝置用tk生成一個短期密鑰(short-term key,stk)。由stk最終生成ltk。
ryan釋出了一款名為crackle的工具,使用抓到的ble資料包,并嘗試用0到999 999之間的值作為tk去暴力破解資料包。一旦找到tk,便可以很容易地通過tk解密驗證stk。最後,可以通過使用stk解密獲得ltk。假設捕獲的資料包存儲在一個名為capture.pcap檔案中,下面是運作crackle工具的指令:
[bash]$ crackle -i capture.pcap -o decrypted.pcap
tk found: 249592
ltk found: 26db138d0aa63a12dd596228577c4731
done, processed 106 total packets, decrypted 19
像wireshark這樣的工具能打開decrypted.pcap這種包含明文的資料檔案。需要注意的是,ryan的暴力破解方法不能有效破解帶外資料(out-of-band,oob)模式,這種模式通過協定交換一個128位密鑰,不同于ble協定。但大多數裝置使用僅工作模式或6位數字模式,是以大部分的ble裝置是易受攻擊的。
任何研究ble物聯網裝置的人都應熟悉ryan的研究和ubertooth系列工具,因為這些是進行網絡流量分析和對問題産品的安全設計測試中不可缺少的部分。此外,截止到寫作本書時,目前的藍牙規範(4.1)仍沒有解決暴力攻擊問題,是以依靠ble加密的裝置依舊脆弱。
2.3.2 kevo移動應用程式不安全
圖2-3中的kwikset kevo鎖可通過iphone上配套的kevo ios應用程式操作。
在第一次啟動時,使用者被要求指定一個電子郵件位址和密碼。如圖2-7所示,密碼必須為8個字元及以上,至少包含1個數字。
如圖2-8所示,kevo應用程式采用了一個政策,如果密碼輸入錯誤6次則鎖定賬戶。鎖定有效期為24小時。
圖2-7:kevo iphone應用程式最低密碼要求
忘記密碼的使用者必須正确回答賬戶相關的安全問題(如圖2-9所示)。由kevo應用程式選出的這些問題是在使用者建立賬戶時提示使用者回答的。
圖2-8:kevo賬戶輸入錯誤6次後被鎖定
如果一名惡意攻擊者已經暫時獲得了使用者的電子郵件賬戶,便可嘗試猜測答案或通過網絡釣魚攻擊用社會工程學方法獲得密碼。與此同時,kevo應用程式就密碼的複雜性做了出色的工作,采用鎖定政策并要求回答安全問題,但使用者應該認識到,這些資訊可經常通過釣魚攻擊和惡意軟體的方法竊取到。
該鎖還實作了一種機制,允許使用者向其他人發送電子密鑰。你隻要提供個人的電子郵件位址,對方就會收到一封來自kevo的電子郵件,如圖2-10所示。要打開鎖,對方必須先用kevo iphone應用程式建立一個賬戶,并驗證自己的電子郵件位址。
圖2-9:kevo重置密碼的安全問題
這裡的安全風險是犯罪分子可能臨時獲得攻擊目标的電子郵件賬戶。由于被攻擊目标必須建立一個新賬戶,并回答有關注冊的安全問題,犯罪分子可以輸入任意的安全問題答案,這将反過來鎖定正在重置密碼的合法使用者。
從房門裡面擡起門鎖上面的蓋子很容易發現一個程式設計按鈕。如圖2-11所示,使用者按下這個按鈕并在鎖旁邊拿着電話用它打開門鎖。一旦設定好,使用者需要觸摸門鎖外面的面闆喚醒門鎖。這時,當門鎖在附近發現一個預程式設計授權的iphone,門鎖和iphone就可以通過ble通信實作打開(或鎖上)。
圖2-10:向外部發送電子鑰匙
然而,有人用一部從未授權的新iphone,隻需下載下傳kevo應用程式并猜到或擷取到密碼,登入到應用程式後就能開鎖。雖然應用程式實作了控制密碼的安全機制,但要做到讓門鎖更安全,可以在即使知道密碼的情況下仍需要新裝置使用程式設計按鈕來配對。
這給我們帶來對鎖本身的實體接觸的問題。我們知道使用各種方法撞鎖開門是一項技藝,有些人非常擅長。事實上,對kevo鎖進行撞鎖開門測試,人們可以繞開實體鑰匙的機制。
實體撞鎖是一個人們熟知的影響很多鎖的問題,除此之外,移動應用程式功能應用在kevo鎖上,人們可以用iphone和臨時實體接觸門鎖,在幾秒鐘之内重新給鎖程式設計,使其關聯上一個新裝置——實際上,這是一種虛拟撞鎖。通過按住重置按鈕幾秒鐘,如圖2-12所示,然後一步步按照圖2-11中那樣就可以關聯新的裝置了。臨時實體接觸門鎖的人不需要有實體撞鎖的技能,也不需要額外的訓練和工具,就可以很容易地做到這些。
圖2-11:用鎖上的程式設計按鈕關聯iphone
注意,這個人必須進到被保護的場所内才可以,因為重置和程式設計按鈕是朝向裡面的。然而,仍有一種風險,臨時工或拜訪者可以濫用這個功能下次不請自入。或更有甚者,他們把電子鑰匙發給其他人。
本節提供了一個很好的例子,我們應當仔細考慮這個問題,我們越來越依賴移動應用程式來保障我們的人身安全。密碼猜測和釣魚攻擊常被用來攻擊我們的數字資訊,但如同kevo iphone應用程式一樣,平台上相同的攻擊可能會破壞家庭和辦公室的實體安全。
圖2-12:門鎖上的重置按鈕
鎖制造商需要有更強的意識認識到這些威脅,并實施更嚴格的控制。由于物聯網裝置固件的實體性質,事實上情況很複雜,即便使用應用程式界面提供更新,許多使用者為了節約時間,都會延遲更新。他們不想在離開家或回家的時候還等待門鎖處理安全更新檔安裝。
這意味着:基于物聯網的裝置制造商如kevo,必須力争在其産品的初始版本實作正确的安全功能。這很不容易,因為安全是很難完美的,是以使用這些裝置的使用者應該意識到潛在的風險,正如本節所描述的。