我经常被问到如何入门物联网渗透测试或硬件破解。我的常规建议是直接拿一个设备,拆开它,然后深入研究!最近,我在东南亚旅行时获得了一个有趣的安防摄像头:VStarcam CB73。我认为这个摄像头是一个非常适合逆向工程和寻找安全漏洞的目标。
从下图可以看到,这是一个非常小的摄像头,尺寸大约为1平方英寸。
The VStarcam CB73 - an extremely 小型WiFi安防摄像头
该设备通过WiFi连接互联网,并通过一个移动应用程序与摄像头进行交互。事实上,我之所以选择这个设备作为目标,其中一个原因是它的宣传资料中声称可以通过移动应用随时随地查看摄像头的视频画面并接收警报。这表明设备会与某个云服务器进行通信。作为一名黑客,我非常喜欢设备具有复杂性。设备越复杂,其攻击面就越大,我发现有趣漏洞的可能性也就越高。
设备分析
对任何物联网设备进行分析的第一步就是拆开它,取出所有的印刷电路板(PCB)以及其他连接组件。拧下几颗螺丝并撬开外壳后,我们可以取出主电路板和电池。
Vstarcam CB73的内部构造
在设备电路板的顶部,我们可以看到一个Micro USB接口、两个开关(一个用于电源,一个用于WiFi)、一个标有“Ingenic T31”的芯片隐藏在摄像头后面,以及一组标有“G”、“R”、“T”、“N”的4个测试点。在电路板这一侧,最引起我兴趣的两样东西是T31芯片和这4个带标签的测试点。
标注好的UART测试点
通过在互联网上进行一些搜索,我们可以了解到Ingenic T31芯片是一个集成了MIPS CPU、板载内存和视频编码功能的模块,所有功能都封装在一个单一芯片中。
然而,PCB顶部最有趣的部分是这些标注好的测试点。对于一个经验丰富的物联网黑客来说,这些测试点显然是UART接口。UART是一种串行通信协议,通常用于Linux物联网设备上,供开发人员访问设备控制台以进行调试。我们稍后会回到这个UART接口。
在设备电路板的底部,我们可以看到WiFi模块、一个SD卡插槽,以及一个8引脚的SPI闪存芯片。在这一侧,最有趣的显然是标有“25QH64CHIQ”的闪存芯片。这很可能就是设备固件的存储位置。
固件提取
既然我们已经确认了SPI闪存芯片的存在,接下来我们将从PCB上取下这个芯片,并读取其中的固件,以便分析其中的安全问题。
为了移除SPI闪存芯片,我们将使用热风重工台。
我的热风重工台
我通常将热风台的温度设置为465摄氏度(869华氏度),风速设置在中等范围。然后用热风吹向闪存芯片,并保持耐心!我们不希望过快地将芯片拔下,以免把连接芯片与PCB的焊盘一起撕下来。
从PCB上拆下后的XMC 25QH64C SPI闪存芯片
芯片拆下后,我们将其放入XGecu T56通用编程器中,使用匹配尺寸的插槽进行读取。
SPI闪存芯片已放入XGecu T56通用编程器
现在将SPI闪存芯片放入XGecu T56之后,我们需要运行其仅支持Windows的Xgpro软件。我们可以直接在Windows上运行它,或者在Linux中借助Wine运行。在Wine中,我们需要使用radiomanV的TL866 GitHub项目中提供的特殊DLL。
首先,在“Search Device”(搜索设备)菜单中查找我们的闪存芯片。
在XGpro中选择25QH64C设备
然后我们执行“读取”(READ)操作。
在XGpro中执行读取操作
最后,我们将文件保存为“cb73fw.bin”。
将固件保存到文件中
在成功读取闪存芯片的内容后,我们使用热风重工台将这个8引脚的SPI闪存芯片重新焊接回设备的PCB上。
UART控制台
现在我们将注意力重新转向PCB顶部4个测试点中发现的UART接口。
首先,在设备通电的状态下,我们使用万用表测量电压,将黑色探针接触GND测试点(标为“G”),红色探针接触TX测试点(标为“T”)或VCC测试点(标为“N”)。我们测得的电压为3.3伏,这是Linux物联网设备中最常见的UART电压。我们将使用FTDI TTL-232R-3V3线缆将其连接到我们的PC。
通过查看 TTL-232R-3V3 数据手册,我们找到了该线缆的引脚排列,如下所示。
3.3伏UART转USB线缆引脚排列
需要注意的一点是,将目标设备的TX和RX线连接到线缆时,信号需要交叉连接。也就是说,设备的TX需要连接到线缆的RX,反之亦然。这样我们的线缆连接如下:
Device Pad
UART Cable Pin
UART Cable Color
TX
RX
Yellow
RX
TX
Orange
GND
GND
Black
现在的问题是:我们如何将这三根线连接到那些微小的测试点上?首先,我们不必非得连接到GND测试点,可以在电路板上找到更方便的地方接地。就我们而言,我们选择将鳄鱼夹夹在WiFi天线上。
鳄鱼夹连接到WiFi天线
这样我们只剩下两个测试点需要连接到我们的UART适配器。一种方法是将细小的焊线焊接到测试点上。这需要我们具备一定的焊接设备,并且小心不要把测试点从PCB上撕下来。对此任务,我们将使用PCBite探针。这些探针末端有一个带弹簧的小针头,使我们能够小心地将探针放置在测试点上。
PCBite探针连接到微小的测试点
现在,将我们的UART适配器插入Linux电脑后,我们运行以下命令:
picocom -b 115200 /dev/ttyUSB0
Picocom是一款终端仿真器,允许我们通过UART线缆发送和接收串行数据。115200是物联网设备上最常见的波特率(每秒传输的比特数)。在本例中,我们的猜测是正确的。“/dev