导语:上一篇​文章中,我介绍了寻找物联网设备连接端点的无线分析技术,今天接着介绍硬件分析技术。

上一篇,我介绍了寻找物联网设备连接端点的无线分析技术,今天接着介绍硬件分析技术。

收集和分析GPRS数据

一旦目标被研究人员部署在网络中的工具捕获到,那他们就能够捕获该目标与其他服务器交换的数据。通过使用上述3中隔离方法中的一种,研究人员能够在外部网络中捕获设备,并拦截其通信内容。例如,研究人员可以观察到他们模拟的移动网络将一个临时移动用户标识(TMSI)与目标国际移动用户标识(IMSI)相关联:

nipc list registered
IMSI            MSISDN
--------------- ---------------
20801XXXXXXXXXXXX   69691320681

研究人员还可以在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如下。

15.png

捕获GSMTAP接口上的APN

通过在为SGSN创建的tun接口上使用Wireshark捕获流量,研究人员创建了名为sgsntun的虚拟网络接口,可以拦截部通信和外部互联网上服务器之间交换的消息。

16.png

捕获对讲机和服务器之间的交换消息

在捕获中,可以注意到只有两个不同的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呈现),如下所示。

18.jpg

查询中使用的设备的ID

所以研究人员的假设是,只有用这个数字才能识别出其他设备,但是对于这种特殊的服务,模拟对讲机并不很好用。

查看捕获的信息,研究人员可以看到端口55556/tcp也在同一个远程服务器上运行服务。使用这种对讲机,为55556/tcp服务发送的有效载荷与研究人员前面提到的60001/tcp进行通信。但是在最后一个端口上,必须对管理web面板进行更改,以便与对讲机进行通信。可能会生成更新此内部通信的数据,但是,此服务发送的数据并不是很清楚。

19.png

查询中使用的设备的ID

使用ent命令快速分析有效载荷,可以发现,服务器发送的有效载荷似乎是加密的。

$ ent payload.hex
Entropy = 7.371044 bits per byte.
[...]

由于获取加密的有效载荷并不是本次研究的目的,研究人员可以求助于硬件来理解那些二进制文件。研究人员希望通过对其固件的分析,能够识别出所使用的算法和密钥。但是对于这一部分,研究人员采用的方法是目标设备拦截查询和响应。

如前所述,在设备及其控制服务器之间的GPRS上捕获的数据可能包括许多有趣的东西,包括凭证或服务的身份验证令牌等。此外,像伪造服务器这样的网络攻击对于客户端攻击也很有意义。

在某些情况下,还可以执行网络扫描来发现目标设备中正在运行的服务。但据研究人员所调查,最后一种情况非常少见,需要目标设备更加复杂,功能更加丰富,并使用更强大的架构。

这就是使用恶意GPRS基站寻找移动端点的方法,现在让研究人员看看如何在不使用恶意BTS的情况下对硬件攻击做同样的事情。

硬件的方式

识别目标

通过查看对讲机的印刷电路板(PCB),研究人员可以注意到4个有趣的组件:

· 一个SIM/USIM插槽(黄色);

· 一个3G调制解调器(蓝色);

· 一个嵌入式微控制器(MCU)(绿色);

· 一个奇怪的接口(红色);

微信截图_20181022194208.png

PCB的重要组成部分

作为测试者,研究人员的第一反应是识别暴露在外的设备。有许多方法来查看这个设备的用途,对于最常用的设备,如路由器,一个无价的资源是利用/dev/ttys0的博客。关于物联网设备,今年在法国SSTIC会议上Damien Cauquil 在攻击蓝牙低功耗的物联网设备时也提出了他的反馈意见,以及可以用来识别设备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)。

22.png

PIC24FG128GA006 MCU的引脚

MCU数据表告诉研究人员这些引脚是用于“电路调试器和ICSP编程时钟”。要在此端口上进行通信,可以使用PICKit 3电路调试器。

然后将PICKit 3连接到对讲调试和编程接口,如下图所示。

23.jpg

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 0a040000  [email protected]@......
 0010 3a040000 6a040000 9a040000 34400100  :[email protected]
 0020 34400100 34400100 ca040000 fa040000  [email protected]@..........
 0030 2a050000 5a050000 34400100 8a050000  *[email protected]
[...]

但也用objcopy导出:

$ objcopy -I ihex IntercomFirmware.hex -O binary Intercom.bin

通过快速查找二进制文件中的字符串,研究人员可以看到MCU发送到3G调制解调器的有趣的AT命令。

0001ab00  02 00 78 00 00 80 fa 00  00 00 06 00 41 54 00 00  |..x.........AT..|
0001ab10  2b 4e 00 00 45 54 00 00  43 4c 00 00 4f 53 00 00  |+N..ET..CL..OS..|
0001ab20  45 0d 00 00 00 2b 00 00  43 4c 00 00 49 50 00 00  |E....+..CL..IP..|
0001ab30  3a 20 00 00 22 1b 00 00  df 22 00 00 2c 1b 00 00  |: .."...."..,...|
0001ab40  ef 00 00 00 45 52 00 00  52 4f 00 00 52 00 00 00  |....ER..RO..R...|
0001ab50  41 54 00 00 2b 43 00 00  4f 50 00 00 53 3d 00 00  |AT..+C..OP..S=..|
0001ab60  33 2c 00 00 32 0d 00 00  00 41 00 00 54 2b 00 00  |3,..2....A..T+..|
0001ab70  43 4f 00 00 50 53 00 00  3f 0d 00 00 00 2b 00 00  |CO..PS..?....+..|
0001ab80  43 4f 00 00 50 53 00 00  3a 20 00 00 1b ef 00 00  |CO..PS..: ......|
0001ab90  2c 1b 00 00 ef 2c 00 00  22 1b 00 00 df 22 00 00  |,....,.."...."..|
0001aba0  2c 1b 00 00 ef 00 00 00  2b 43 00 00 4f 50 00 00  |,.......+C..OP..|
0001abb0  53 3a 00 00 20 30 00 00  00 41 00 00 54 2b 00 00  |S:.. 0...A..T+..|
0001abc0  43 4f 00 00 50 53 00 00  3d 34 00 00 2c 32 00 00  |CO..PS..=4..,2..|
0001abd0  2c 1b 00 00 eb 2c 00 00  32 0d 00 00 00 41 00 00  |,....,..2....A..|
0001abe0  54 2b 00 00 43 53 00 00  51 0d 00 00 00 2b 00 00  |T+..CS..Q....+..|
0001abf0  43 53 00 00 51 3a 00 00  20 1b 00 00 ef 2c 00 00  |CS..Q:.. ....,..|
0001ac00  1b ef 00 00 00 41 00 00  54 2b 00 00 43 52 00 00  |.....A..T+..CR..|
0001ac10  45 47 00 00 3f 0d 00 00  00 2b 00 00 43 52 00 00  |EG..?....+..CR..|
0001ac20  45 47 00 00 3a 20 00 00  1b ef 00 00 2c 1b 00 00  |EG..: ......,...|
[...]

blob中存在的AT命令:

1.PLMN选择(PLMN selection):AT+COPS;

2.网络注册(Network registration):AT+CREG;

此外,研究人员还可以注意到另一个有趣的Blob 对象:

0001b3e0  ef 3a 00 00 1b ef 00 00  00 41 00 00 54 41 00 00  |.:.......A..TA..|    
    0001b3f0  0d 00 00 00 41 54 00 00  2b 43 00 00 52 45 00 00  |....AT..+C..RE..|
    0001b400  47 3d 00 00 30 0d 00 00  00 41 00 00 54 2b 00 00  |G=..0....A..T+..|
    0001b410  4e 45 00 00 54 4f 00 00  50 45 00 00 4e 3d 00 00  |NE..TO..PE..N=..|
    0001b420  22 54 00 00 43 50 00 00  22 2c 00 00 38 30 00 00  |"T..CP..",..80..|
    0001b430  0d 00 00 00 61 6c 00 00  72 65 00 00 61 64 00 00  |....al..re..ad..|
    0001b440  79 20 00 00 6f 70 00 00  65 6e 00 00 65 64 00 00  |y ..op..en..ed..|
    0001b450  00 41 00 00 54 2b 00 00  49 50 00 00 41 44 00 00  |.A..T+..IP..AD..|
    0001b460  44 52 00 00 0d 00 00 00  41 54 00 00 2b 54 00 00  |DR......AT..+T..|
    0001b470  43 50 00 00 43 4f 00 00  4e 4e 00 00 45 43 00 00  |CP..CO..NN..EC..|
    0001b480  54 3d 00 00 22 67 00 00  73 6d 00 00 2e XX 00 00  |T=.."g..sm...X..|
    0001b490  XX XX 00 00 XX XX 00 00  XX XX 00 00 XX XX 00 00  |XX..XX..XX..XX..|
    0001b4a0  2e 69 00 00 6e 66 00 00  6f 22 00 00 2c 36 00 00  |.i..nf..o"..,6..|
    0001b4b0  30 30 00 00 30 31 00 00  0d 00 00 00 41 54 00 00  |00..01......AT..|
    0001b4c0  2b 54 00 00 43 50 00 00  43 4f 00 00 4e 4e 00 00  |+T..CP..CO..NN..|
    0001b4d0  45 43 00 00 54 3d 00 00  22 67 00 00 73 6d 00 00  |EC..T=.."g..sm..|
    0001b4e0  2e XX 00 00 XX XX 00 00  XX XX 00 00 XX XX 00 00  |.X..XX..XX..XX..|
    0001b4f0  6e 65 00 00 2e 69 00 00  6e 66 00 00 6f 22 00 00  |XX...i..nf..o"..|
    0001b500  2c 35 00 00 35 35 00 00  35 1b 00 00 ff 0d 00 00  |,5..55..5.......|
    0001b510  00 43 00 00 4f 4e 00 00  4e 45 00 00 43 54 00 00  |.C..ON..NE..CT..|
    0001b520  20 46 00 00 41 49 00 00  4c 00 00 00 41 54 00 00  | F..AI..L...AT..|
    0001b530  2b 54 00 00 43 50 00 00  43 4f 00 00 4e 4e 00 00  |+T..CP..CO..NN..|
    0001b540  45 43 00 00 54 3d 00 00  22 39 00 00 31 2e 00 00  |EC..T=.."9..1...|
    0001b550  31 32 00 00 31 2e 00 00  XX XX 00 00 XX XX 00 00  |12..1...XX...X..|
    0001b560  37 22 00 00 2c 35 00 00  35 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:

00017d80  15 40 XX 00 80 4a 78 00  63 00 60 00 66 40 78 00  |[email protected]`[email protected]|

在这一步中,研究人员可以得到一些有趣的信息,研究人员已经能够获得他们用来开始测试的有趣信息。但是,与拦截技术相比,仍然缺少一些内容,比如查询时的有效载荷。

为了更进一步的以及,研究人员可以尝试分析汇编代码。

分析汇编代码

不幸的是,尝试用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,研究人员能够读取对讲机的内存通信信息,并解码其汇编代码,如下所示。

30.png

MAPLAB X IDE中固件的反汇编代码

顺便说一下,也可以获得MCU的ConfigurationBits设置,此信息有助于在攻击测试或配置测试期间检查安全配置特性。

31.png

MCU的ConfigurationBits设置

可以看到,JTAG被明显禁用,但是没有激活代码或写保护,这也解释了为什么研究人员能够转储MCU的内存。但是在IDE中读取代码并不很舒服,幸运的是MAPLAB X IDE允许将反汇编的内容导出到文本文件中。

32.png

将ASM代码导出到文本文件中

这样你就可以在你最喜欢的文本编辑器中打开导出的文件:

     Line    Address    PSV Address      Data   Opcode  Label      DisAssy     
      1       00000       ----           ----   04400A            GOTO 0x1400A       
      2       00002       ----           ----   000001            NOP            
      3       00004       ----           ----   014034            GOTO W4          
      4       00006       ----           ----   00040A            NOP            
      5       00008       ----           ----   00043A            NOP            
      6       0000A       ----           ----   00046A            NOP            
      7       0000C       ----           ----   00049A            NOP   
[...]

看看第一个指令,建议研究人员到地址0x1400A并找出NOP指令和GOTO W4指令,程序可能从这里开始0x1400A:

    40966    1400A      ----        ----  20850F         MOV #0x850, W15   
    40967    1400C      ----        ----  225AA1         MOV #0x25AA, W1   
    40968    1400E      ----        ----  880101         MOV W1, SPLIM     
    40969    14010      ----        ----  A94044         BCLR CORCON, #2   
    40970    14012      ----        ----  202B81         MOV #0x2B8, W1    
    40971    14014      ----        ----  E00001         CP0 W1      
    40972    14016      ----        ----  320003         BRA Z, 0x1401E    
    40973    14018      ----        ----  200011         MOV #0x1, W1      
    40974    1401A      ----        ----  8801A1         MOV W1, PSVPAG    
    40975    1401C      ----        ----  A84044         BSET CORCON, #2   
    40976    1401E      ----        ----  200000         MOV #0x0, W0      
    40977    14020      ----        ----  200001         MOV #0x0, W1      
    40978    14022      ----        ----  700001         IOR W0, W1, W0    
    40979    14024      ----        ----  320002         BRA Z, 0x1402A    
    40980    14026      ----        ----  020000         CALL 0x0       
    40981    14028      ----        ----  000000         NOP         
    40982    1402A      ----        ----  024036         CALL 0x14036 
[...]

如果再往下研究,则研究人员需要做一项重要的工作来解码程序集,并识别用于加密先前捕获的上传有效载荷的密码原语。

总结

研究人员可以利用两种不同的技术(无线方式和硬件方式),帮助他们找到物联网设备使用的端点。这两种方法可以是独立的操作技术,也可以互补来使用。实际上,当需要理解一种非常奇特的体系结构的固件时,以硬件为中心的攻击会耗费大量时间,而目前可用的工具并不支持这种奇特结构。此外,对射频技术的分析可以帮助识别我们固件的其他有趣部分。本文提到的所有这些技术都可以用于分析移动网络中的其他设备。

源链接

Hacking more

...