故事要從幾個月前開始。我買了一款很火的健身智慧型手環。因為它是一款可穿戴裝置,所以我就安裝了專為可穿戴裝置開發的android wear app。它輕鬆連線到了智慧型手環上。
然而,一件奇怪的事情發生了:這個程式會連線到nike+fuel band se,但是我的手環牌子不是這個啊!後來我想到我同事有一款耐克手環——而他竟然不知道我連線到了他的裝置上!
於是,我決定做點研究看看我的手環到底有多安全。
通過智慧型手機通訊的智慧型手環
當前市場提供的智慧型手環琳琅滿目,讓人目不暇接。ksn提供了為跟移動裝置上火爆健身追蹤器配合使用而安裝的安卓app資料,如下所示(資料來自同意傳輸該資料的ksn使用者)。
雖然這個資料表現的是安卓app的受歡迎程度(我們無法保證這些合適的裝置有使用者),但從某種程度上來講,這也反映了可穿戴裝置的流行程度。
為了跟智慧型手機通訊,多數健身智慧型手環使用藍芽le技術(智慧型藍芽)。對我們而言,這意味著這些裝置的連線方式跟普通藍芽不同。因為多數手環沒有螢幕以及/或者鍵盤,所以它們並沒有配套的密碼。
這些智慧型手環使用gatt(通用屬性配置檔案),也就是說每台可穿戴裝置都包含一系列服務,而每種服務都有不同的特徵。每個特徵都包含乙個位元組緩衝以及乙個描述符列表,而每個描述符列表都包含乙個值,也就是位元組緩衝。
為了表示這些東西,我利用android sdk中的現有**,來說明連線到藍芽le裝置中的一款應用程式。我一行**也沒寫,只是開啟android studio中的已有專案並且按下「開始」鍵。
上面截圖是在應用程式的幫助下嘗試連線我的健身智慧型手環。我們可看到服務及其特徵。然而,從特徵中獲得手環的資料並不容易,它需要除連線之外的認證步驟。在其他的一些裝置案例中,我能從特徵及其描述符中讀取這些資料,而這些資料很可能是使用者資料。
掃瞄那麼,我通過android sdk應用程式的例子說明我能夠連線到某些裝置。然後,我自己開發了乙個應用程式,可自動搜尋藍芽le裝置,然後進行連線並且獲得它們的服務列表。
通過這個應用程式,我執行了幾次掃瞄。
在莫斯科地鐵系統中的兩個多小時內,我可以連線19臺裝置:11臺fitbit跟8臺jawbone。
在美國華盛頓貝爾維尤乙個健身房的乙個多小時內,我可以連線到20臺裝置:20臺fitbit,耐克、jawbone、微軟、polar及quans各一台。
在墨西哥坎昆的兩個多小時內,我可以連線到10臺裝置:3臺jawbone、7臺fitbit。
在僅僅6個小時的掃瞄中,我可以連線到54臺裝置,雖然存在兩個很嚴格的限制條件:
儘管裝置指出連線的最大距離是50公尺,但實際上距離為6公尺時就很難連線上了。
似乎連線到已跟另外乙個手機繫結的裝置上不可行。所以,如果你的手環已跟手機繫結,別人是無法連線的;而且在掃瞄中甚至不會將你的裝置顯示出來。
上述第2個限制條件意思應該是當手環連線到一台智慧型手機時,就不會受到攻擊。但這是不成立的。舉個例子:當用我的app掃瞄時,我可以攔截手環跟官方應用程式的通訊,即使它們處於已連線狀態。
也有可能我找到的裝置在此之前從未連線過一台手機,或者當我掃瞄時,這台智慧型手環沒有跟手機連線(可能手機禁用了藍芽)。然而,也有可能預先被連線的裝置還可連線,儘管存在這個限制條件。不管是什麼原因,不壞好意的人有一大把的機會連線到健身手環上。
儘管如此,在多數情況下,要獲得使用者資料除了網路連線之外還需要驗證步驟。下面我們來看看我手環的身份驗證流程是什麼樣的。
手環身份驗證流程
官方應用程式通過手環上的四種可用服務對連線到智慧型手機上的手環進行身份驗證。每種服務的每個特徵都標註「characteristicnotification」,也就是app如何通知手環在它想要修改這個特徵時進行通知。之後app就會獲得每個特徵的描述符列表,並將』enable_notification_value』設定標註以通知手環想要對每個描述符作出修改的通知。
隨後,其中的乙個特徵就會更改值即位元組緩衝。這個應用程式就會從手環上讀取這個緩衝:201f1f頭跟位元組陣列,我們就叫authbytes吧。
這個應用程式會建立乙個新陣列。陣列的第一部分是乙個包含在這個應用程式中且以6dc351fd44開頭的常量陣列;第二部分是authbytes。這個應用程式從新陣列中接收到md5,然後以下面的結構方式將其傳送回裝置:
header (201210051f)
md5驗證位元組
這個應用程式隨後會傳送給裝置從中發現的另外乙個陣列。
手環開始震動時,使用者只需按下按鈕完成身份驗證過程。
官方應用程式的身份驗證程式需要15秒,我開發了乙個應用程式只需要4秒就能讓手環震動。
讓使用者按一下手環上的這個按鈕並非難事。你需要的只是耐心。你可以一直反覆不停地嘗試驗證流程直到使用者按下按鈕或者不在範圍內。
驗證完成後,我手環上的資料就可被獲取了。現在,可穿戴健身裝置上並沒有多少資訊,也就是步行次數、睡覺時段、最後一小時的脈搏等等。這款app大概每隔1小時就會將資訊傳輸至雲端。
驗證完成後要執行裝置命令就很容易了。比如,可以修改你應該向裝置傳送的且以f0020c開頭的位元組陣列事件、然後在修改yyyy mm dd dw hh mm ss msmsmsms格式的日期。
對於其他健身手環來說就更容易了:一些裝置在聯網之時就可獲取一部分資料,而nike的應用程式**甚至沒有被混淆,很容易被讀取(結果見此)。
結論研究表明,在某些情況下,你可以在裝置所有者不知情的情況下連線到一台可穿戴裝置上。
通過入侵手環,我讓不懷好意者無法獲取所有的使用者資料,因為資料沒有儲存在手環或手機上——官方應用程式會將資料例行傳至雲端。
健身追蹤器變得越來越流行,並且功能廣泛。或許在不遠的將來它們會提供更多感測器,也就是說會儲存更多的使用者資料,而這些資料大多是醫療資料。然而,這些裝置的建立者似乎對安全考慮甚少。
想象一下吧,如果帶有脈搏感測器的手環被入侵會產生什麼後果,商店所有者可以在你檢視商品**時檢視你的脈搏次數,也有可能別用來了解人們對廣告的反應。此外,被入侵的且帶有脈搏感測器的可穿戴裝置也可被用作說謊檢測器。
當然,還有更多不利行為。比如,通過購買木馬勒索軟體,不懷好意者就可以控制你的手環,讓它不停震動並以此勒索你。
我們將這些結果告知手環廠商。廠商認為這是乙個ux漏洞而不是安全漏洞。出於道德及安全因素的考慮,這次我們沒有公布手環的名稱及型號。如果你擔心網路犯罪分子利用這個漏洞會帶來的可能後果,請聯絡健身智慧型手環廠商,詢問是否受本文所提及問題的影響。
同時,我們希望這篇文章不但能幫助使用者,同時也希望幫助手環製造商在製造裝置時多從it安全角度考慮一下。
手把手教你OA選型
oa選型永遠是oa行業的重要焦點,在選型問題上困擾了很多客戶,雲全oa從這幾個方面教你如何選型。了解研發技術 技術是硬道理。只有過關的技術才會研發出過硬的產品。如果技術不過關,後期將會帶來一系列的問題。同時需要考慮技術的先進性。在現如今社會發展日新月異,今天還遙遙領先的管理模式也許明天就會被淘汰。所...
手把手教你玩轉git
使用以上來寫git命令。mkdir xx 建立乙個空目錄 xx指目錄名 pwd 顯示當前目錄的路徑。git init 把當前的目錄變成可以管理的git倉庫,生成隱藏.git檔案。git add xx 把xx檔案新增到暫存區去。git commit m xx 提交檔案 m 後面的是注釋。git sta...
npm發布 手把手教你
註冊完畢,回到我們的電腦。windows直接cmd到命令列 輸入以下命令,會提示輸入使用者名稱 密碼 郵箱,這些都是註冊時填寫過的。發布之前首先準備 手動建立乙個命名為lib的資料夾,手動建立index.js package.sjon和typing.d.ts文件,建立完成之後就開始下一步,向裡面新增...