Tenda n301路由器固件分析

今天收到客户寄来的一个腾达路由器,发现使用其出现流量异常,怀疑被植入第三方程序,让我们协助分析。让我们一起开始分析之旅。

一、   固件提取

这台腾达路由器是n301版本,2013年发布的产品。要对路由器进行分析,首先要做的就是提取固件。

拆开机器,发现该路由的flash芯片为2m容量的25Q16。直接使用芯片脚夹,结果各种不顺,可能是接触不良,或者Flash芯片IO电压被拉低拉高,一直无法读取芯片数据。

最终我们使用热风枪将flash 芯片吹下来,再使用芯片底座读取。这种方法最有效,但是得有良好的焊接技术,否则芯片焊不回去,设备就变成砖了,还好技术过关,提取完固件后,将芯片焊了回去,路由器正常工作。

二、   系统提取

拿到固件后,将提出的固件用Binwalk分析,固件包含两部分CFE、ECOS系统;

CFE:A7A4,博通公司基于MIPS芯片的bootloader

ECOS:2001C,ecos操作系统模块,路由器核心代码也在其中

使用binwalk 对2001C进行近一步分析,我们可以发现更多的信息 固件采用MIPS的小端格式。

使用IDA对系统进行分析,选择MIPS小端的方式,打开固件2001C。

IDA加载固件后,发现不能正确识别函数。经过分析,这是因为没有设置对ROM的起始地址。通常在路由启动的时候,引导固件的程序会打印出这些有用的信息,而要查看这些信息,需要找到UART通过TTL连接到电脑。

三、   UART识别

该路由的主板上未见到标明的UART接口。这种情况可通过查找主芯片的DataSheet,找到对应的UART引脚,或者测量端口电压方式(《揭秘家用路由器0day漏洞挖掘技术》一书中有详细介绍),然后观察电路图,再飞线焊出接口。这个板子所使用的芯片为BCM5357,通过搜索后未发现公开的DataSheet。猜测主板标的几个TPN接口很可能就是它的调试接口,UART只需要三个接口,GND、TXD、RXD只要找正确GND和TXD就会有输出显示。

第一步找到GND,这个最容易,用万用表测试,和天线连通的点就是GND,或者直接从天线上飞一根线出去也可以。

第二步找到TXD,用万用表电压测量方法可以很容易可以找到TXD,下面介绍没有万用的情况怎么猜。路由启动的时候会有信息打印出来(做了输出屏蔽的可能无信息),观察路由主板,标记TPN的几个点最可疑,拿出TTL开始测试,用一根公母头的杜邦线,母头接在TTL的RXD,主板的GND接TTL的GND。将杜邦线公头接触到其中的一个点,打开路由器电源,在开机时,串口有数据输出的就是TXD。这里发现TP2为TXD,输出乱码,调整波特率为115200,输出正确。

第三步找到RXD,方法和找TXD基本一样,不同的是RXD为输入端口,测试的时候输入有回显的是RXD,测试发现RXD为TP1。

接口找到了 剩下的就是焊接飞线连接了。

启动路由器,查看打印的引导信息,发现固件开始执行的地址为0×80001000。

四、   IDA函数识别修复

IDA打开固件,将ROM的起始地址设置为0×80001000。

IDA7.0打开后未识别到函数,在起始位置按P,成功解析出函数,但是并不完整,在未识别的地方仍然需要手动解析。后面测试发现用IDA6.8打开能够正确的识别,可以用6.8打开后保存一份IDB文件,然后再用IDA7.0打开。

剩下的工作就开始就是分析代码了,这里不做介绍了。

五、   后记

经过分析此路由未被植入第三方程序,流量异常应该是其他原因导致,比如更高层的流量劫持。

Written by