尋找物聯網裝置連線的端點: 射頻與硬體(二)
上一篇,我介紹了尋找物聯網裝置連線端點的無線分析技術,今天接著介紹硬體分析技術。
收集和分析GPRS資料
一旦目標被研究人員部署在網路中的工具捕獲到,那他們就能夠捕獲該目標與其他伺服器交換的資料。通過使用上述3中隔離方法中的一種,研究人員能夠在外部網路中捕獲裝置,並攔截其通訊內容。例如,研究人員可以觀察到他們模擬的行動網路將一個臨時移動使用者標識(TMSI)與目標國際移動使用者標識(IMSI)相關聯:
nipc list registered IMSIMSISDN --------------- --------------- 20801XXXXXXXXXXXX69691320681
研究人員還可以在SGSN Mobile Station(即手機終端) 列表中獲取資訊:
mbts sgsn list GMM Context: imsi=20801XXXXXXXXXXXXX ptmsi=0xd3001 tlli=0xc00d3001 state=GmmRegisteredNormal age=5 idle=1 MS#1,TLLI=c00d3001,8d402e2e IPs=192.168.99.1
注意,研究人員的網路分配的IP地址為192.168.99.1,這意味著裝置可以傳送資料和聯絡伺服器。
捕獲GSMTAP查詢,可以得到裝置使用的APN如下。
捕獲GSMTAP介面上的APN
通過在為SGSN建立的tun介面上使用Wireshark捕獲流量,研究人員建立了名為sgsntun的虛擬網路介面,可以攔截部通訊和外部網際網路上伺服器之間交換的訊息。
捕獲對講機和伺服器之間的交換訊息
在捕獲中,可以注意到只有兩個不同的TCP埠在唯一的伺服器上被查詢到,並與研究人員的對講機同步。對埠TCP 60001的查詢似乎專門用於同步時間,實際上,當多次請求該服務時,研究人員會得到當前時間。
In [1]: import socket In [2]: import binascii In [3]: ip = '91.121.XXX.XXX' In [4]: port = 60001 In [6]: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) In [7]: s.connect((ip, port)) In [8]: s.send(binascii.hexlify("011e4d25636014006600000000000000090000011e1540XX[...]")) Out[8]: 320 In [9]: data = s.recv(1024) In [10]: data Out[11]: '2018/09/07 15:09:01\n'
通過檢視裝置貼圖,可以注意到請求中包含了對講機的ID號(以小端格式1540XX呈現),如下所示。
查詢中使用的裝置的ID
所以研究人員的假設是,只有用這個數字才能識別出其他裝置,但是對於這種特殊的服務,模擬對講機並不很好用。
檢視捕獲的資訊,研究人員可以看到埠55556/tcp也在同一個遠端伺服器上執行服務。使用這種對講機,為55556/tcp服務傳送的有效載荷與研究人員前面提到的60001/tcp進行通訊。但是在最後一個埠上,必須對管理web面板進行更改,以便與對講機進行通訊。可能會生成更新此內部通訊的資料,但是,此服務傳送的資料並不是很清楚。
查詢中使用的裝置的ID
使用ent命令快速分析有效載荷,可以發現,伺服器傳送的有效載荷似乎是加密的。
$ ent payload.hex Entropy = 7.371044 bits per byte. [...]
由於獲取加密的有效載荷並不是本次研究的目的,研究人員可以求助於硬體來理解那些二進位制檔案。研究人員希望通過對其韌體的分析,能夠識別出所使用的演算法和金鑰。但是對於這一部分,研究人員採用的方法是目標裝置攔截查詢和響應。
如前所述,在裝置及其控制伺服器之間的GPRS上捕獲的資料可能包括許多有趣的東西,包括憑證或服務的身份驗證令牌等。此外,像偽造伺服器這樣的網路攻擊對於客戶端攻擊也很有意義。
在某些情況下,還可以執行網路掃描來發現目標裝置中正在執行的服務。但據研究人員所調查,最後一種情況非常少見,需要目標裝置更加複雜,功能更加豐富,並使用更強大的架構。
這就是使用惡意GPRS基站尋找移動端點的方法,現在讓研究人員看看如何在不使用惡意BTS的情況下對硬體攻擊做同樣的事情。
硬體的方式
識別目標
通過檢視對講機的印刷電路板(PCB),研究人員可以注意到4個有趣的元件:
·一個SIM/USIM插槽(黃色);
· 一個3G調變解調器(藍色);
· 一個奇怪的介面(紅色);
PCB的重要組成部分
作為測試者,研究人員的第一反應是識別暴露在外的裝置。有許多方法來檢視這個裝置的用途,對於最常用的裝置,如路由器,一個無價的資源是利用/dev/ttys0的部落格。關於物聯網裝置,今年在法國SSTIC會議上Damien Cauquil 在 ofollow,noindex">攻擊藍芽低功耗的物聯網裝置時也提出了他的反饋意見 ,以及可以用來識別裝置PCB上有趣元件的技術。
在做任何事情之前,研究人員需要識別MCU系列及其版本,本文的是Microchip – PIC24FJ128 – GA006。
然後,根據該資訊,研究人員必須尋找這個特定MCU的使用說明,可以在下面的PIC24FJ128GA010系列資料表中找到。
目標介面有6個引腳,乍一看,研究人員可能認為它是一個JTAG介面,但用萬用表進行的連續性測試則顛覆了這一初始認知。實際上,這個介面連線的是以下引腳(與預期的JTAG完全不同):
PGC1 (pin 25);PGD1 (pin 16);Vdd (pin 38);/MCLR (pin 7);AVss (pin 19)。
PIC24FG128GA006 MCU的引腳
MCU資料表告訴研究人員這些引腳是用於“電路偵錯程式和ICSP程式設計時鐘”。要在此埠上進行通訊,可以使用PICKit 3電路偵錯程式。
然後將PICKit 3連線到對講除錯和程式設計介面,如下圖所示。
PICKit 3連線到的對講程式程式設計介面
設定現在已經完成,研究人員可以轉儲韌體了。
轉儲和分析韌體
PICKit 3電路偵錯程式可以與IDE軟體“MPLAB X”一起使用,用以除錯、程式設計和讀取/轉儲儲存器(韌體)。
該軟體可在 http://www.microchip.com/mplab/mplab-x-ide 免費下載到。
使用此軟體,研究人員可以讀取記憶體,並將其匯出到一個檔案,研究人員可以將其命名為IntercomFirmware.hex並獲取Intel Hex格式的資料,如下所示。
$ cat IntercomFirmware.hex :020000040000FA :100000000A40040001000000344001000A0400001E [...]
可以使用objdump讀取節的內容:
$ objdump -s IntercomFirmware.hex IntercomFirmware.hex:file format ihex Contents of section .sec1: 0000 0a400400 01000000 34400100 [email protected]@...... 0010 3a040000 6a040000 9a040000 34400100:...j.......4@.. 0020 34400100 34400100 ca040000 [email protected]@.......... 0030 2a050000 5a050000 34400100 8a050000*...Z...4@...... [...]
但也用objcopy匯出:
$ objcopy -I ihex IntercomFirmware.hex -O binary Intercom.bin
通過快速查詢二進位制檔案中的字串,研究人員可以看到MCU傳送到3G調變解調器的有趣的AT命令。
0001ab0002 00 78 00 00 80 fa 0000 00 06 00 41 54 00 00|..x.........AT..| 0001ab102b 4e 00 00 45 54 00 0043 4c 00 00 4f 53 00 00|+N..ET..CL..OS..| 0001ab2045 0d 00 00 00 2b 00 0043 4c 00 00 49 50 00 00|E....+..CL..IP..| 0001ab303a 20 00 00 22 1b 00 00df 22 00 00 2c 1b 00 00|: .."...."..,...| 0001ab40ef 00 00 00 45 52 00 0052 4f 00 00 52 00 00 00|....ER..RO..R...| 0001ab5041 54 00 00 2b 43 00 004f 50 00 00 53 3d 00 00|AT..+C..OP..S=..| 0001ab6033 2c 00 00 32 0d 00 0000 41 00 00 54 2b 00 00|3,..2....A..T+..| 0001ab7043 4f 00 00 50 53 00 003f 0d 00 00 00 2b 00 00|CO..PS..?....+..| 0001ab8043 4f 00 00 50 53 00 003a 20 00 00 1b ef 00 00|CO..PS..: ......| 0001ab902c 1b 00 00 ef 2c 00 0022 1b 00 00 df 22 00 00|,....,.."...."..| 0001aba02c 1b 00 00 ef 00 00 002b 43 00 00 4f 50 00 00|,.......+C..OP..| 0001abb053 3a 00 00 20 30 00 0000 41 00 00 54 2b 00 00|S:.. 0...A..T+..| 0001abc043 4f 00 00 50 53 00 003d 34 00 00 2c 32 00 00|CO..PS..=4..,2..| 0001abd02c 1b 00 00 eb 2c 00 0032 0d 00 00 00 41 00 00|,....,..2....A..| 0001abe054 2b 00 00 43 53 00 0051 0d 00 00 00 2b 00 00|T+..CS..Q....+..| 0001abf043 53 00 00 51 3a 00 0020 1b 00 00 ef 2c 00 00|CS..Q:.. ....,..| 0001ac001b ef 00 00 00 41 00 0054 2b 00 00 43 52 00 00|.....A..T+..CR..| 0001ac1045 47 00 00 3f 0d 00 0000 2b 00 00 43 52 00 00|EG..?....+..CR..| 0001ac2045 47 00 00 3a 20 00 001b ef 00 00 2c 1b 00 00|EG..: ......,...| [...]
blob中存在的AT命令:
1.PLMN選擇(PLMN selection):AT+COPS;
2.網路註冊(Network registration):AT+CREG;
此外,研究人員還可以注意到另一個有趣的Blob 物件:
0001b3e0ef 3a 00 00 1b ef 00 0000 41 00 00 54 41 00 00|.:.......A..TA..| 0001b3f00d 00 00 00 41 54 00 002b 43 00 00 52 45 00 00|....AT..+C..RE..| 0001b40047 3d 00 00 30 0d 00 0000 41 00 00 54 2b 00 00|G=..0....A..T+..| 0001b4104e 45 00 00 54 4f 00 0050 45 00 00 4e 3d 00 00|NE..TO..PE..N=..| 0001b42022 54 00 00 43 50 00 0022 2c 00 00 38 30 00 00|"T..CP..",..80..| 0001b4300d 00 00 00 61 6c 00 0072 65 00 00 61 64 00 00|....al..re..ad..| 0001b44079 20 00 00 6f 70 00 0065 6e 00 00 65 64 00 00|y ..op..en..ed..| 0001b45000 41 00 00 54 2b 00 0049 50 00 00 41 44 00 00|.A..T+..IP..AD..| 0001b46044 52 00 00 0d 00 00 0041 54 00 00 2b 54 00 00|DR......AT..+T..| 0001b47043 50 00 00 43 4f 00 004e 4e 00 00 45 43 00 00|CP..CO..NN..EC..| 0001b48054 3d 00 00 22 67 00 0073 6d 00 00 2e XX 00 00|T=.."g..sm...X..| 0001b490XX XX 00 00 XX XX 00 00XX XX 00 00 XX XX 00 00|XX..XX..XX..XX..| 0001b4a02e 69 00 00 6e 66 00 006f 22 00 00 2c 36 00 00|.i..nf..o"..,6..| 0001b4b030 30 00 00 30 31 00 000d 00 00 00 41 54 00 00|00..01......AT..| 0001b4c02b 54 00 00 43 50 00 0043 4f 00 00 4e 4e 00 00|+T..CP..CO..NN..| 0001b4d045 43 00 00 54 3d 00 0022 67 00 00 73 6d 00 00|EC..T=.."g..sm..| 0001b4e02e XX 00 00 XX XX 00 00XX XX 00 00 XX XX 00 00|.X..XX..XX..XX..| 0001b4f06e 65 00 00 2e 69 00 006e 66 00 00 6f 22 00 00|XX...i..nf..o"..| 0001b5002c 35 00 00 35 35 00 0035 1b 00 00 ff 0d 00 00|,5..55..5.......| 0001b51000 43 00 00 4f 4e 00 004e 45 00 00 43 54 00 00|.C..ON..NE..CT..| 0001b52020 46 00 00 41 49 00 004c 00 00 00 41 54 00 00| F..AI..L...AT..| 0001b5302b 54 00 00 43 50 00 0043 4f 00 00 4e 4e 00 00|+T..CP..CO..NN..| 0001b54045 43 00 00 54 3d 00 0022 39 00 00 31 2e 00 00|EC..T=.."9..1...| 0001b55031 32 00 00 31 2e 00 00XX XX 00 00 XX XX 00 00|12..1...XX...X..| 0001b56037 22 00 00 2c 35 00 0035 35 00 00 35 1b 00 00|7"..,5..55..5...| [...]
這就揭示了研究人員正在關注的終端:
·AT+TCPCONNECT="gsm.XXXXXXXXX.info",60001;
· AT+TCPCONNECT="gsm.XXXXXXXXX.info",5555 (最後一個數字“6”丟失);
· AT+TCPCONNECT="91.121.XX.XX",5555 (最後一個數字“6”丟失);
即使遇到一些困難,研究人員也能認出對講機號碼XX4015:
00017d8015 40 XX 00 80 4a 78 0063 00 60 00 66 40 78 00|[email protected].`.f@x.|
在這一步中,研究人員可以得到一些有趣的資訊,研究人員已經能夠獲得他們用來開始測試的有趣資訊。但是,與攔截技術相比,仍然缺少一些內容,比如查詢時的有效載荷。
為了更進一步的以及,研究人員可以嘗試分析彙編程式碼。
分析彙編程式碼
不幸的是,嘗試用IDA、metasm、RetDec或radare2來分解程式碼並不能得到滿意的結果。實際上,IDA支援PIC 12XX、PIC 14XX、PIC 16XXX以及PIC 16XX系列的16位微控制器,但不識別任何PIC 24XX系列。radare2( radare2是一款用於建立一個完整、行動式和多架構的逆向工程的工具鏈。它是由一個十六進位制編輯器組成,支援本地/遠端檔案的多個後端)以支援奇異的架構而聞名,但它只支援PIC 14XX和PIC 16XX。另一方面,Metasm(Metasm是用純Ruby寫的一個支援多CPU架構的彙編器,反彙編器,編譯器,聯結器及偵錯程式。著名的安全漏洞檢測工具Metasploit Framework也使用了Metasm)似乎只支援PIC 16XX,同時Miasm2甚至不知道PIC是什麼。而開源化機器碼反編譯器RetDec只支援像PIC32這樣的32位架構,但是仍然不支援PIC24。
在花了很多時間尋找所有可能的逆向工程工具之後,研究人員發現似乎MAPLAB X IDE是唯一能夠在不需要花費太多時間寫IDA,miasm,metasm等等引擎的情況下,讀取該韌體元件的軟體。
因此,使用官方版的IDE,研究人員能夠讀取對講機的記憶體通訊資訊,並解碼其彙編程式碼,如下所示。
MAPLAB X IDE中韌體的反彙編程式碼
順便說一下,也可以獲得MCU的ConfigurationBits設定,此資訊有助於在攻擊測試或配置測試期間檢查安全配置特性。
MCU的ConfigurationBits設定
可以看到,JTAG被明顯禁用,但是沒有啟用程式碼或防寫,這也解釋了為什麼研究人員能夠轉儲MCU的記憶體。但是在IDE中讀取程式碼並不很舒服,幸運的是MAPLAB X IDE允許將反彙編的內容匯出到文字檔案中。
將ASM程式碼匯出到文字檔案中
這樣你就可以在你最喜歡的文字編輯器中開啟匯出的檔案:
LineAddressPSV AddressDataOpcodeLabelDisAssy 100000--------04400AGOTO 0x1400A 200002--------000001NOP 300004--------014034GOTO W4 400006--------00040ANOP 500008--------00043ANOP 60000A--------00046ANOP 70000C--------00049ANOP [...]
看看第一個指令,建議研究人員到地址0x1400A並找出NOP指令和GOTO W4指令,程式可能從這裡開始0x1400A:
409661400A--------20850FMOV #0x850, W15 409671400C--------225AA1MOV #0x25AA, W1 409681400E--------880101MOV W1, SPLIM 4096914010--------A94044BCLR CORCON, #2 4097014012--------202B81MOV #0x2B8, W1 4097114014--------E00001CP0 W1 4097214016--------320003BRA Z, 0x1401E 4097314018--------200011MOV #0x1, W1 409741401A--------8801A1MOV W1, PSVPAG 409751401C--------A84044BSET CORCON, #2 409761401E--------200000MOV #0x0, W0 4097714020--------200001MOV #0x0, W1 4097814022--------700001IOR W0, W1, W0 4097914024--------320002BRA Z, 0x1402A 4098014026--------020000CALL 0x0 4098114028--------000000NOP 409821402A--------024036CALL 0x14036 [...]
如果再往下研究,則研究人員需要做一項重要的工作來解碼程式集,並識別用於加密先前捕獲的上傳有效載荷的密碼原語。
總結
研究人員可以利用兩種不同的技術(無線方式和硬體方式),幫助他們找到物聯網裝置使用的端點。這兩種方法可以是獨立的操作技術,也可以互補來使用。實際上,當需要理解一種非常奇特的體系結構的韌體時,以硬體為中心的攻擊會耗費大量時間,而目前可用的工具並不支援這種奇特結構。此外,對射頻技術的分析可以幫助識別我們韌體的其他有趣部分。本文提到的所有這些技術都可以用於分析行動網路中的其他裝置。