导语:上一篇文章中,我介绍了寻找物联网设备连接端点的无线分析技术,今天接着介绍硬件分析技术。
上一篇,我介绍了寻找物联网设备连接端点的无线分析技术,今天接着介绍硬件分析技术。
收集和分析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如下。
捕获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调制解调器(蓝色);
· 一个嵌入式微控制器(MCU)(绿色);
· 一个奇怪的接口(红色);
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)。
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 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,研究人员能够读取对讲机的内存通信信息,并解码其汇编代码,如下所示。
MAPLAB X IDE中固件的反汇编代码
顺便说一下,也可以获得MCU的ConfigurationBits设置,此信息有助于在攻击测试或配置测试期间检查安全配置特性。
MCU的ConfigurationBits设置
可以看到,JTAG被明显禁用,但是没有激活代码或写保护,这也解释了为什么研究人员能够转储MCU的内存。但是在IDE中读取代码并不很舒服,幸运的是MAPLAB X IDE允许将反汇编的内容导出到文本文件中。
将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 [...]
如果再往下研究,则研究人员需要做一项重要的工作来解码程序集,并识别用于加密先前捕获的上传有效载荷的密码原语。
总结
研究人员可以利用两种不同的技术(无线方式和硬件方式),帮助他们找到物联网设备使用的端点。这两种方法可以是独立的操作技术,也可以互补来使用。实际上,当需要理解一种非常奇特的体系结构的固件时,以硬件为中心的攻击会耗费大量时间,而目前可用的工具并不支持这种奇特结构。此外,对射频技术的分析可以帮助识别我们固件的其他有趣部分。本文提到的所有这些技术都可以用于分析移动网络中的其他设备。