0x01 基礎介紹GPS追踪器可以幫助定位孩子,寵物、汽車,從而使用戶更加安心。用戶可以通過提供簡單的SOS按鈕來呼叫幫助,從而幫助確保老年人或殘疾人的安全。為了實現此目的,許多設備在亞馬遜和eBay等常見網站上進行了銷售,售價為25至50美元,與使用智能手機實現某些相同功能相比,它們在價格上更具吸引力。
但是,我們對這些設備的真正了解有多少,這些設備知道我們在哪裡,有時甚至可以聽到我們的聲音,我們在這裡討論的大多數設備也都帶有麥克風。事實證明,當今的某些GPS追踪器,尤其是那些處於低端市場的GPS追踪器,是存在風險的,而不是讓你省心。他們不僅缺乏安全警報,而且這些設備更有可能使你的親人更加危險。
我們決定看一下亞馬遜,eBay和阿里巴巴上的幾種兒童追踪器,以了解它們如何經受住我們的安全測試。
GPS追踪器基礎當今可用的GPS追踪器使用多種通信渠道和技術。圖1顯示了一個典型的體系結構。
圖1: GPS追踪器的典型配置和架構
其中涉及許多傳輸協議和網絡層,因此我們同時在許多方面進行工作,以評估這些設備的安全性。
通常,追踪器是一種簡單,廉價的設備,以SOC(片上系統)模塊為主要組件。串行總線將SOC連接到提供位置的GPS模塊以及連接到SIM卡的GPRS調製解調器,SIM卡為設備提供DATA + SMS功能。通常,你還可以找到按下“ SOS”按鈕時使用的用於電話功能的麥克風和揚聲器。
圖2: GPS追踪器內部工作原理
我們將研究分為四類:
分析特定設備的啟動過程
分析管理門戶網站
分析移動應用程序和雲平台之間的流量
分析追踪器和雲平台之間的GPRS流量
攻擊真實設備我們決定選擇一個追踪器並進行一些更廣泛的研究。我們選擇了市售的追踪器—— T8 Mini GPS Tracker,該追踪器像一個鑰匙扣,具有SOS按鈕和雙向通訊功能(揚聲器和麥克風)。
圖3:感興趣的追踪器
首先引起我們注意的是使用流程,隨附的說明:
按照說明,有一個Web門戶和一個移動應用程序可用於管理追踪器。我們選擇了最便捷的方法,首先打開了一個可達的Web應用程序http://en.i365gps.com。在許多層面都存在錯誤:
圖4: Web應用程序登錄截圖
如你所見,第一個red flag登錄表單是通過HTTP協議提供的,而不是通過更安全的HTTPS。此外,有兩個選擇可以連接到雲平台:使用用戶名和密碼的帳戶或使用ID和密碼的帳戶。
圖5:默認密碼
這適用於Android應用程序和Web應用程序。令人震驚的事實是:“ …如果需要通過用戶名登錄,則用戶需要聯繫經銷商註冊用戶名。”由於你必須致電經銷商以請求用戶名,因此很明顯,可以使用ID,其密碼為“ 123456”。
出於演示目的,我們的ID為:17032491112和密碼123456。當你登錄到平台時,將出現此界面。
圖6: Web應用程序界面
這裡的所有內容仍然通過不安全的HTTP協議傳輸,你可以更改密碼,但是仍然無法創建帳戶,讓我們把關注點放在ID上。
用戶名ID作為進入應用程序的“username”的ID是11位數。正如你在設備信息圖7中所看到的那樣,它有時被稱為IMEI,代表“國際移動設備身份”。
圖7:設備標識
你可以看到設備被標識為T8S-49112,因此後五位數字取自“ IMEI”,而開頭可能是型號。這里奇怪的是,IMEI的數字不符合標準IMEI規範。根據規範,IMEI應該為15位長,最後一位是所謂的控制位。當我們進行更多搜索時,我們在追踪器(圖8)中發現了完整的IMEI ,隨後在包裝盒上的小標籤上也發現了完整的IMEI 。因此,在我們的案例中,完整的IMEI為:
圖8:追踪器的內部以及IMEI和ID
圖9: IMEI簡化的細分
因此,當我們獲取“ IMEI”和ID號並將其與規範格式匹配時,我們將獲得
圖10:與IMEI匹配的ID
TAC的第一部分由各個子部分組成,但為簡單起見,我們可以說它以與MAC地址前綴幾乎相同的方式分配給供應商。這也意味著所有其他追踪器的數字都是可預測的,你可以輕鬆枚舉它們。結合固定密碼,這意味著我們可以按此IMEI編號順序登錄約25%的設備。
0x02 協議分析好了,暫時將IMEI枚舉放在一邊,讓我們看看設備,移動應用程序和Web應用程序如何與雲平台對話。
從Web應用到雲平台我們已經知道Web應用程序中的所有通信都是通過HTTP進行的,所以讓我們看一下使用某些標準工具從Web應用程序發出的請求是什麼:
圖11: Web應用程序AJAX請求(Chrome中的開發人員工具)
通過使用簡單的工具,我們可以看到所有請求都是純文本格式的標準JSON AJAX請求。我們不需要深入分析這部分,因為這些命令與移動應用程序向雲平台發出的命令大致相同。有趣的是,所有JSON請求都再次未加密且以明文形式發送,但更重要的是設備可以發出的命令。除了獲得預期的命令外,例如獲取GPS坐標和位置,還有其他一些其他的功能:
你可以使追踪器撥打任意電話號碼,並且一旦連接,就可以通過追踪器在對方不知情的情況下收聽。
你可以使追踪器代表自己將SMS消息發送到任意號碼。這可以讓你獲取設備的電話號碼並將SMS用作攻擊媒介。
你可以將URL發送到追踪器,追踪器可以從該URL 更新其固件,從而使攻擊者可以在設備上更新新的固件。
從移動應用到雲平台
圖12:配套應用程序
現在讓我們看一下AIBEILE android應用程序如何與雲平台進行通信。使用Wireshark捕獲流量後,我們立即看到它使用純文本HTTP協議通過非標準端口TCP:8018與雲平台進行通信。
圖13: Android應用程序在登錄時捕獲了流量
可以看到整個通信仍然未加密,並以純文本形式發送到端點http://(redacted):8018/openapiv3.asmx。這是請求的截圖:
圖14:登錄數據包的詳細信息
有趣的是,登錄請求使用內置的Key和LoginAPP值,這給我們一個提示,即該框架正在由不同的應用程序使用,因為Key 也被內置在APK 文件中。
LoginType字段在此處通過用戶名和密碼(LoginType=0)或IMEI和密碼(LoginType=1)方法進行區分,此參數控制你使用的憑據類型。
登錄成功後,將以HTTP形式返迴響應,該響應中包含XML字符串,該字符串實際上是JSON。典型的成功響應如下所示:
圖15:對登錄請求的JSON響應
可以看到很多很明顯的字段,但這裡最重要的字段是key2018,這是Base64編碼的64字節長的會話密鑰,並且deviceID在這兩個密鑰中都需要進行進一步的請求和命令。
這樣的命令之一可能是GetTracking。你可以看到登錄後發出了該命令(圖13),唯一的輸入參數是:
圖16: 請求追踪器的實際位置或最後看到的位置
我們不能完全確定Model 字段發的含義。下面是響應包:
圖17: 對GetTracking調用的響應
應用程序和雲平台完全以純文本方式進行通信,沒有加密。
從追踪器到雲端
現在,讓我們更深入地研究設備如何與雲平台對話,如何通過移動運營商提供商在實際追踪器和服務器之間交換數據。
對在LTE或GPRS移動協議之上使用IP傳輸的協議進行解碼或逆向並不容易。通常沒有簡單的方法來利用流量,因為流量先封裝在GPRS中,然後再從設備傳輸到電信運營商,然後再直接傳輸到雲平台服務器,而沒有明顯的方法來嗅探數據流向雲平台或返回雲平台的方式。
如果要分析此類流量,則基本上有兩種選擇:
建立自己的偽BTS站並運行自己的GSM網絡,以便觀察通過的所有流量。
在設備內部的GPRS調製解調器對數據進行編碼和發送之前檢查數據。
第一種選擇很複雜,要合法地進行,你需要一個法拉第籠,因為在大多數國家/地區,在沒有許可證的情況下運行自己的GSM網絡是非法的。同樣,建造設備並非易事,但是有許多開源解決方案(https://osmocom.org/projects/osmobts),與以太網或WiFi嗅探相比,它並不方便易用。
第二種選擇需要一些硬件技能,並且設備可能會失效。正如我們在一開始就指出的那樣,大多數GPS追踪器內部都將GPRS調製解調器作為一個離散組件,儘管通常很小,但仍有很大的機會利用主CPU和GPRS調製解調器之間的串行線。
在打開GPS追踪器後,確定了一些看上去完全類似於我們所需的連接點的墊。有兩組串行連接墊(TXD/RXD/GND),很明顯,一組用於GPS到CPU的通訊,另一組用於CPU到GPRS調製解調器,因此通過反複試驗,我們確定了正確的一組:
圖19:進入追踪器以進行GPRS通信
完成此測試後,我們可以確認所有數據未加密地從GSM網絡傳輸到雲平台服務器。通信是基於文本的協議,最重要的是缺少授權,整個工作僅需通過其IMEI識別追踪器即可。
從SMS 到追踪器最後一點是,你可以使用另一個頻道來控制追踪器,你可以使用簡單的SMS消息進行設置並獲取一些信息。要獲取GPS位置,你可以通過手機向定位器中插入的SIM卡號碼發送短信。為此,你需要知道密碼,但是除非用戶更改了密碼,否則所有設備的默認密碼都是相同的。
圖20:手冊中說明的SMS命令
我們通過進行一些硬件逆向學習了所有這些知識,但是我們真的必須這樣做嗎?事實證明,在研究命令時,你可以通過SMS消息直接向追踪器發出命令,我們發現了這一點:
圖21:用於設置追踪器的SMS命令
該命令隱藏在名稱“Setup IP and port”下,意味著你可以設置設備與之通信的雲平台服務器所在的IP地址和TCP端口。這是攻擊者想要的信息;結合用於來回發送數據的不安全協議,你可以輕鬆地進行MITM中間人攻擊,並使用標準IP工具捕獲所有數據。
如下測試:
圖22:通過惡意服務器轉發流量
圖23: Wireshark捕獲了位置數據包的流量
可以輕鬆發現IMEI/ID和坐標,已識別命令的格式似乎是文本格式,並且遵循以下格式:
Heartbeatcommandtracker-server
[3G*1703249112*000C*LK,0,1226,85]
Heartbeatresponseserver-tracker:
[3G*1703249112*0002*LK]
Activatemonitormode(callbackthisnumber)server-client:
[3G*1703249112*0015*MONITOR,+420612661749]
SendSMS“Test”toprovidednumber(+420602661749)server-client:
[3G*1703249112*0016*SMS,+420602661749,Test]
Positionandstatus(client-server):
[3G*1703249112*0090*UD,210619,053538,V,37.481010,N,-122.2315369,W,0.00,0.0,0.0,0,86,86,0,15,00000000,4,255,202,1,2082,5673,140,2082,12,128,2082,5671,118,2082,11,115]0x03 查找API在調查各種API時,發現我們正在調查的平台似乎已被許多其他供應商廣泛使用。通過谷歌搜索,我們找到了移動應用程序-雲接口的文檔:
圖24:在另一個實例中找到的記錄的部分列表API
遍歷此API提供的每個命令並不是本研究的目的,但是讓我們看一些示例以進一步說明安全性有多糟糕以及這會對普通用戶造成什麼後果。
儘管我們調查的追踪器沒有攝像頭,但其他使用相同雲平台框架的追踪器卻有攝像頭,例如下圖的A19-3G Network GPS Smart Watch,此命令激起了我們的興趣。