利用UART技术破解硬件设备实战指南

本文详细介绍了如何通过UART接口对Linksys路由器进行硬件级渗透测试,包括JTAGulator工具使用、串行端口识别、固件提取技术以及获得root shell的全过程,为硬件安全研究提供实用方法。

如何通过UART破解硬件设备 - Black Hills信息安全公司

Raymond Felch

前言

几周前我开始探索固件逆向工程(参见"JTAG - 微控制器调试"),虽然在目标板(三星S3C4510 CPU的Linksys BEFSR41路由器)上发现并识别JTAG引脚方面取得了显著进展,但遇到了复杂问题。在使用OpenOCD和多个JTAG适配器(包括使用自制的树莓派Pi3作为JTAG和SWD适配器)尝试提取固件时遇到了多个问题。

在某些情况下,我能够从闪存设备转储内存,但使用binwalk工具时数据混乱且无法识别。这可能是时序相关问题,或者在读取内存前未能使目标进入正确的暂停状态。我也意识到供应商有时会通过将复位引脚拉高或在生产测试后故意熔断关键JTAG路径来保护专有信息。

选择新路由器和新方法

经历多次挫折后,我决定暂时中断这个项目,尝试另一种(但类似的)获取固件访问权限的方法。我选择了一个全新的Linksys E2500 v3路由器作为起点。

拆解这个路由器相当简单:卸下底部的三颗螺丝,使用塑料撬片即可轻松分离外壳。

寻找UART接入点

如同JTAG方法一样,我检查电路板上可能提供串行访问(TX RX GND)的引脚组。立即发现了一个标有JD6的5针点,可能是串行端口接入点。为了方便,我焊接了一个5针排针。

值得一提的是,我确实找到了板上的JTAG接入点(明确标记为TDI、TDO、TCK和TMS),但由于焊盘尺寸过小无法连接,这使得串行方法更具吸引力。

JTAGulator工具的使用

使用万用表快速找到GND引脚(DJ6-5)后,我使用最爱的硬件工具JTAGulator将剩余4个引脚连接到通道0-3。连接完成后,给目标板和JTAGulator供电,启动PICOCOM后立即获得提示。

通过U命令找到TX和RX引脚:通道3对应TX(DJ6引脚2),通道2对应RX(DJ6引脚3),波特率为115200。进入透传模式后,能够与芯片实际通信并获得可用命令列表。

发现第二个UART接入点

意识到第一个串行端口的命令有限且芯片安全性较高后,我继续寻找另一个可能直接连接到Broadcom CPU的串行接入点。最终发现了另一组标记为DJ2的5针点,同样焊接了排针。

这次使用Attify Badge作为UART接口,其D0和D1分别对应TX和RX,D8对应GND。通过新的TAP接入点DJ2和Attify badge启动目标板后,立即获得了BusyBox的root shell。

通过帮助命令获得更多命令后,成功进入系统并开始探索目录结构、查看配置文件和日志文件,执行各种系统命令。这表明已经进入固件的核心Linux shell,实现了最初的目标。

总结

这次探索证明了除了JTAG之外还有其他访问硬件的方法。发现两个UART串行端口并使用新设备(Attify badge、JTAGulator)连接它们被证明是非常有效的替代解决方案。

虽然路由器在端口23和22分别拒绝了Telnet和SSH连接,但从安全角度看这是好事,但允许无凭证的root访问在安全设计上存在缺陷。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计