尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
摘要:然後使用AES加密算法和設備中的密鑰對整個數據包進行加密,防止數據嗅探。所有Nokelock鎖都遵循相同的BLE協議。
Nokelock漏洞
我曾在以前的一次信息安全會議上談論一個名為Nokelock的掛鎖。而我今天要討論的是一款同樣名為Nokelock的掛鎖,它來自中國的Nokelock公司。這和我以前在會議上討論過的掛鎖並不是同一個,雖然它們的名字一樣。
在亞馬遜商城中有很多廉價的藍牙掛鎖都來自Nokelocks;這些鎖的外觀均不相同,而且鎖的功能部件也有差異,例如有些帶有指紋傳感器,有些帶有數字鍵盤。此外,有些還會被其他品牌重新包裝再售賣,如Micalock。
我花了很多時間嘗試對BEL(藍牙)協議進行逆向工程,同時對API進行測試,最終發現不少有趣的漏洞。然後,在近6個月內,我們試圖通過多種不同的管道向廠商反映情況,但並沒有得到任何回復。
在我們了解漏洞詳情之前,讓我們先說明如果你擁有Nokelock(或是它的重新包裝版),我可以對它做些什麼:
- 只要在10米範圍內,我可以通過BLE打開你的鎖。我不需要知道關於鎖的帳戶的任何信息,任何鎖我都可以拿下。
- 我可以從Nokelock數據庫中提取所有信息,包括你的電子郵件地址和密碼哈希。
- 我可以獲得鎖的GPS坐標。
- 我可以取消鎖的註冊,並將其分配給另一個帳戶,這樣你就無法打開它。
還有人堅持使用Nokelock嗎?
現在,讓我們進入利用的細節……
藍牙協議(Bluetooth Protocol)
所有Nokelock鎖都遵循相同的BLE協議。該協議是在一個被混淆的Android應用中做到的。
與大多數BLE設備一樣,它使用了某種通信特性:一個被寫入時通知消息傳遞RX數據的TX特性。該特徵的UUID為000036f5-0000-1000-8000-00805f9b34fb; 並且在我研究過的每個鎖上都一直位於句柄0x03處。
通過TX或RX傳遞的每個數據包是16個八位字節,並遵循如下模式:
上面的數據包是一個名為GET_BATTERY的命令,它會返回電池的當前狀態。其中:
- 02010101是靜態命令,表示獲取電池的狀態
- 6e6eaebe是一個可以從設備獲得的令牌
- 6c01231876670b42是隨機填充以防止重復
然後使用AES加密算法和設備中的密鑰對整個數據包進行加密,防止數據嗅探。
有許多不同的數據包可在與設備通信過程中獲取電池狀態,更改設置和解鎖設備。如需解鎖設備,程序需要從設備獲取令牌,然後使用令牌調用unlock。
get token命令是06010101,然後鎖會返回060207以及一個四位八字節的令牌。接著就可以發送解鎖命令(050106303030303030),模擬流程如下:
客戶段 to 鎖:GET_TOKEN
鎖 to 客戶端:TOKEN_RESPONSE
鎖 to 客戶端:UNLOCK
不過,實際情況下比上面所示的要複雜很多,因為整個數據包都被AES加密算法加密過。但幸運的是,我們可以通過兩種方法從API獲取密鑰。而發送所有地API請求都需要一個有效的API令牌,不過我們只需通過廢棄的電子郵件創建一個用戶即可獲得令牌。
每個掛鎖都帶有一個QR碼,就放在路徑/newNokeLock/lock/getDeviceInfo下,可以通過post請求獲取:
從響應中我們可以看到有關該鎖的大量敏感數據,包括加密密鑰:
請注意,這其中不僅包含加密密鑰,還包含BLE的廣播名稱,在本例中為O-W *,可以通過wigle.net進行搜尋。
如果你沒有QR碼,則可以使用設備的MAC地址進行搜尋。由於MAC地址用於和設備進行藍牙通信,因此只要BLE模塊通電(例如,按設備上的某個按鈕),你就可以進行嗅探。然後調用端點/newNokelock/lock/queryDevice:
它將返回與getDeviceInfo端點類似的信息:
請注意,以上所述的對兩個端點的請求都會返回一個名為lockPwd的數據,數值為000000,它由6個值為0x30的八位字節,即ASCII中的「0」。這個參數可能代表著一種為鎖分配密碼的方法,盡管應用從未使用它,一直都是6個「0」,我暫時也無法找到更改密碼的方法。
因此,將以上所述的一切綜合在一起,你就可以利用一個簡單的腳本通過藍牙快速解鎖這個品牌旗下的任何鎖產品。你也可以在我的Github上找到相關腳本。當然我的這個腳本還不是很完善,你可以自己加以修改。
API
現在,讓我們來看看API。我們在API中發現了許多漏洞,從2019年1月至今,我們試圖通過電子郵件,電話和微信等多種機制向製造商通報這些漏洞。我們甚至試圖用普通話與他們進行交談。
但我們沒有得到回應。
未加密的API調用
首先,我們可以直接看到所有的明文流量,如下圖:
是的,所有流量,包括用戶發出的流量都是通過未加密的HTTP協議進行傳輸。要知道,現在使用一個TLS證書是多麼方便,這是不可接受的缺陷。
所有API方法中的IDOR
我還注意到Nokelock的所有API端點都存在嚴重的授權缺陷。這可能導致任意訪問者讀取有關用戶或鎖的信息,包括電子郵件地址,密碼哈希和鎖的GPS位置。
它還允許未經身份驗證的訪問者修改這些數據,非法控制鎖,進行解鎖以及重新綁定。
當然,執行這些操作需要提供令牌,但服務端僅會檢查令牌是否有效,即僅檢查帳戶是否經過身份驗證,而不是帳戶是否已獲得授權。任何人都可以創建帳戶以獲取一個令牌。
針對密碼的不含salt的MD5算法
某個API會返回用戶的密碼哈希值。注意,這是未加salt的MD5哈希。
這是一種加密性較弱的哈希類型,哈希計算速度較快,但同時解密難度也低。一旦攻擊者獲取到了用戶的密碼哈希,很可能在短時間內就破解出明文密碼。
結論
歸根結底,這也許不是一個安全問題。便宜的產品往往不安全,因為成本限制,廠商往往要在產品的很多「次要」方面做出取舍,更不太可能對其進行安全測試。
雖然藍牙掛鎖的產品看起來很棒,但我不建議任何人使用Nokelock的產品。我很難相信它們產品的安全性。
如果Nokelock試圖修復它們的產品,我任意提供幫助,但我認為這將是一個異常艱巨的任務。
本文由白帽匯整理並翻譯,不代表白帽匯任何觀點和立場
來源:https://nosec.org/home/detail/2685.html
原文:https://www.pentestpartners.com/security-blog/pwning-the-nokelock-api/
白帽匯從事信息安全,專注於安全大數據、企業威脅情報。
公司產品:FOFA-網路空間安全搜尋引擎、FOEYE-網路空間檢索系統、NOSEC-安全訊息平台。
為您提供:網路空間測繪、企業資產收集、企業威脅情報、應急響應服務。