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

本文详细介绍了如何通过UART接口对Linksys路由器进行硬件破解,包括识别串行端口、使用JTAGulator工具定位TX/RX引脚、通过Attify Badge获取root shell以及提取固件的完整技术流程。

如何通过UART破解硬件设备

Raymond Felch //

前言:
几周前我开始探索固件逆向工程(参见《JTAG – 微控制器调试》),虽然在目标板(三星S3C4510 CPU的Linksys BEFSR41路由器)上成功找到并识别了JTAG引脚,但在使用OpenOCD和多种JTAG适配器(包括自制树莓派Pi3作为JTAG/SWD适配器)提取固件时遇到了问题。尽管有时能从闪存设备转储内存,但binwalk工具解析的数据混乱不可读,可能是时序问题或内存读取前未正确暂停目标设备。此外,厂商可能通过拉高复位引脚或生产测试后熔断关键JTAG路径来保护专有信息。

OpenOCD(开源片上调试器)的理解与实施本身极具挑战。该工具支持ARM和MIPS系统的片上调试、在线编程和边界扫描测试,通过TCP/IP端口(Telnet 4444或GDB 3333)提供远程交互接口。

选择新路由器与新方法
经历多次挫折后,我决定暂缓该项目并尝试另一种类似方法:选用一台全新Linksys E2500 v3路由器。拆卸过程简单,仅需移除底部三颗螺丝并用塑料撬片分离外壳。

定位UART接口
仿照JTAG方法,我检查电路板上可能提供串行访问(TX/RX/GND)的引脚组,发现标记为JD6的5针接口可能为串行端口,于是焊接了5针排针以便连接。尽管也找到了标记清晰的JTAG接口(TDI/TDO/TCK/TMS),但其焊盘尺寸过小无法连接,进一步凸显串行方法的优势。

使用JTAGulator工具
通过万用表连续性测试确定JD6-5为GND引脚后,我将剩余4针连接到JTAGulator的0-3通道,并共接地线。通电后启动PICOCOM,通过H命令调出帮助菜单,使用V命令设置目标I/O电压,再通过U命令扫描TX/RX引脚。JTAGulator自动尝试多种波特率,最终确定115200波特率下通道3(DJ6针2)为TX、通道2(DJ6针3)为RX。

进入透传模式(P命令)后,成功与Broadcom Radio芯片(BCM43236)交互,获取其专用wl驱动命令列表。尝试wlhist命令导致栈转储并重启,rpcdump命令仅显示Dongle信息。参考Quarkslab的博客尝试通过PySerial脚本执行md命令转储内存时,芯片会在获取2K数据后重启阻断操作,仅能获取1K大小的无用bin文件。

发现第二UART接口
意识到当前接口功能有限后,我继续寻找连接Broadcom CPU的串行访问点。根据固件下载论坛的提示,E2500路由器确实存在两个串口(其中DJ6接口无效),最终找到标记为DJ2的5针接口并焊接排针。

使用Attify Badge获取Root权限
改用支持UART/SPI/I2C协议的Attify Badge替代JTAGulator(兼顾成本与安全性),将D0/D1/D8分别连接TX/RX/GND。通过DJ2接口通电后,立即获得BusyBox的root shell。输入help查看命令列表,尝试admin:adminadmin:password登录失败后,通过Ctrl-C最终进入#提示符的root环境。

执行ls -la遍历目录结构,检查配置文件、日志文件,运行psnetstat等命令,确认已进入Linux shell环境。测试Telnet(23端口)和SSH(22端口)均被拒绝,表明路由器网络安全性良好,但无需凭证的root访问存在重大风险。

总结
本次探索证明了除JTAG外,UART是访问硬件设备的有效替代方案。通过JTAGulator定位引脚和Attify Badge建立连接,成功获取固件访问权限,为后续逆向工程分析奠定了基础。


Ready to learn more? Level up your skills with affordable classes from Antisyphon!
Pay-Forward-What-You-Can Training Available live/virtual and on-demand

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