https://www.cyberark.com/resources/threat-research-blog/an-introduction-to-hardware-hacking
随着市场上越来越多的物联网和嵌入式设备的推出,黑客开始发现:通过利用固件,能够更加方便地访问网络并接管机器。同时,其中许多物联网设备并没有提供开箱即用的安全机制,更有甚者,竟然包含后门(比如提供简单的shell),或包含一些其他漏洞,而攻击者可以将这些漏洞作为进入其他网络的跳板。
同时,本文也是讲解如何转储和分析嵌入式设备的固件的系列文章的第一篇。在本文中,我们将为读者详细访问固件以及分析其漏洞的各种方法,以便帮大家检测身边的连接设备是否真的安全可靠。
我们要研究的第一个设备是一个会议徽章,我的想法来自于BSides Rochester活动中的徽章挑战(图1)。徽章挑战,通常是在安全会议上进行的一个活动,为此,会向与会者提供一个电子徽章,并且,这些徽章通常会存放敏感数据,而挑战就是围绕着它来寻找漏洞和数据,以烘托会议的整体“夺旗”氛围。
如果您从来没有参加过BSides会议,不妨就近参与一次(http://www.securitybsides.com/w/page/12194156/FrontPage)。
图1 徽章
在分析一个嵌入式设备(比如这个徽章)时,我们需要做的第一件事就是识别电路板上的芯片。一般来说,我们要找的是某种存储固件数据的芯片。你可以把它看作是一种硬盘驱动器。通常这是一个闪存芯片或MCU(微控制器单元)。这个芯片用于存储数据,通常包含设备的启动程序、内核和文件系统。如果我们找到了闪存芯片,就可以访问它,并转储其内容和固件了。
幸运的是,这款设备让事情变得非常简单,因为这款设备的电路板上只有1个芯片(其他都是LED)。
接下来我们要做的,就是识别芯片类型。所有的芯片上面都会有文字,用以标识芯片的品牌和型号。不过,这些文字往往肉眼难以辨认,不过,我们可以使用手机的摄像头和变焦功能或者放大镜来解决这个问题。
我们可以看到,这个芯片上带有“Atmel 10v Tiny 85V”的字样(图2),这意味着我们面对的是一个MCU。通过谷歌搜索,我们得到了芯片的相关数据:https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf,我们可以藉此确定需要连接的引脚(图3)。
图2 徽章背面
图3 atiny85图
在这里,我们可以看到每个引脚相对于Atmel芯片的作用。芯片左上方的小圆圈标识了方向,告诉我们1号引脚在哪里。现在是时候将我们的Bus Pirate连接到Atmel芯片了。我将使用SOIC夹来简化连接过程。
要连接SOIC夹,请确保带红线的那一侧位于芯片左上方有圆圈的那一侧。这将使SOIC夹上的1-8与引脚完美地对齐。此外,要确保夹子上的金属触点与引脚上的金属触点相接触。如果操作正确,我们可以通过观察尾部的数字来识别夹子上的引脚。
图4 连接到SOIC夹上的扬声器徽章
图5 Soic夹
现在SOIC夹已经连接好了,我们只需要把Bus Pirate连接到SOIC夹上,并把数据转储到芯片上。我们可以根据下表连接引脚。
Atmel Bus Pirate
Reset CS
GND GND
VCC 3.3v
SCK CLK
MISO MISO
MOSI MOSI
下面是连接引脚后的样子:
图6 Soic夹(带标记)
图7 Bus Pirate电缆
现在,我们将Bus Pirate连接到机器上,并使用avrdude软件转储固件。注意,这里的每条电缆的颜色都各不不同,以便于区分。图6是展示的SOIC夹的连接情况,图7展示的是连接到Bus Pirate的情形。在实际转储过程中,我个人喜欢使用Ubuntu和Attify(https://github.com/adi0x90/attifyos)虚拟机来完成相关工作。即使Ubuntu虚拟机出现故障,Attify虚拟机通常也可以继续工作,反之亦然。
以下命令将列出avrdude支持的所有芯片:“avrdude -p ?”。
在命令的输出结果中,我们可以寻找我们的芯片,特别注意查看其是否支持Tiny85,就这里来说,它确实支持。
T45 = ATiny45
T461 = ATiny461
T5 = ATiny5
T84 = ATiny84
T85 = ATiny85
T861 = ATiny861
T88 = ATiny88
T9 = ATiny9
X128a1 = ATxmega128A1
使用最后这条命令,我们可以将固件转储到文件flash.bin中:“sudo avrdude -p attiny85 -c buspirate -P /dev/ttyUSB0 -U flash:r:flash.bin:r”。
我在重新创建屏幕快照时遇到了麻烦:Bus Pirate上的CS和MISO引脚被烧毁了,因此,在我的新设备到来之前,我无法继续进行转储。这里的教训是,请谨慎使用转储设备,尤其是像Jtagulator这样较昂贵的设备。如果您未正确插入设备的话,则会面临设备被烧毁的风险。
为了测试旧的Bus Pirate,我们将5v引脚连接到VPU引脚,3.3v引脚连接到ADC引脚(图8)。
图8 Bus Pirate电缆测试
然后,我们把Bus Pirate连接到机器上,并用下面的命令进行连接:“sudo picocom -b 115200 -r -l /dev/ttyUSB0”。
您可以通过输入“~”,然后按空格键开始测试。然后,如果测试失败,说明设备可能有问题。我尝试了几个不同的固件,看看是否能解决任何问题,但是,实际上,我使用这个设备时并不是很仔细,因为它很便宜,所以,它很可能会烧坏引脚。如你所见,我的CS和MISO引脚都出现了故障:
HiZ>~
Disconnect any devices
Connect (Vpu to +5V) and (ADC to +3.3V)
Space to continue
Ctrl
AUX OK
MODE LED OK
PULLUP H OK
PULLUP L OK
VREG OK
ADC and supply
5V(4.92) OK
VPU(4.93) OK
3.3V(3.28) OK
ADC(3.28) OK
Bus high
MOSI OK
CLK OK
MISO FAIL
CS OK
Bus Hi-Z 0
MOSI OK
CLK OK
MISO OK
CS FAIL
Bus Hi-Z 1
MOSI OK
CLK OK
MISO FAIL
CS OK
MODE and VREG LEDs should be on!
Any key to exit
Found 3 errors.
如果固件转储失败,但Bus Pirate自检显示一切正常,有可能是跳线的长度所致:可能太长了,这将导致连接问题。之后,使用Jtagulator附带的跳线进行测试,似乎一切正常。
幸运的是,在我的Bus Pirate烧坏之前,我设法抢到了一些成功转储的截图,具体如下所示:
图9 avrdude转储
图10 avrdude标志
这就是我们找到的旗帜,至此,徽章挑战(图10)就算完成了。
现在需要注意的是,在这种情况下,我们之所以能够用avrdude转储,是因为Atmel芯片本身没有被锁定。在对芯片进行编程后,通过设置所谓的“锁定位”来锁定一个Atmel芯片是很简单的。当锁定位被设置后,当有人试图转储芯片时,它会阻止未经授权的访问,并且不会产生任何有效的固件数据。
在本文中,我们通过一个徽章挑战,为读者详细介绍了如何转储的固件,在接下来的文章中,我们将继续为读者演示如何转储更复杂的电路板。
本文作者:mssp299
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/150573.html