NETGEAR R2000路由器固件封装技术的分析与实现

中国新通信 / 2018年09月15日 20:07

新闻

美国网件(NETGEAR) R2000N300M 无线路由器参考价格:$199-...

程军

【摘要】 针对NETGEAR R2000的安全审计问题,首先逆向分析澄清了固件升级包的封装格式、压缩算法和校验机制,其次工程实现了升级固件的完整封装过程,为进一步安全审计提供技术支持。

【关键词】 路由器 固件升级 安全审计 漏洞挖掘

Analysis and Implementation of Firmware Encapsulation Scheme for NETGEAR R2000 Router CHENG Jun (Novel Horizon Technology Co. Ltd, Jinan Shandong 250100, China)

Abstract: Aiming at security audit of NETGEAR R2000 router, reverse-analysis is performed to clarify the firmware update packet encapsulation formats, compression algorithm and verifying mechanism firstly, then implements the complete encapsulation process of upgrade firmware in detail. The work effectively support further security audit.

Keywords: router; firmware upgrade; security audit; vulnerability digging

一、引言

R2000及其他系列型号路由器是美国固件(NETGEAR)公司[1]生产的接入路由器产品,市场占有率较高,深受用户青睐。与此同时,不断曝出的安全漏洞使R2000等系列型号路由器的安全性受到质疑。因此,加强R2000等型号路由器的安全审计工作刻不容缓,对及时发现和修补漏洞从而确保网络安全具有重要意义。而安全审计的前提是澄清固件格式和提取还原文件系统。本文重点分析了R2000路由器的固件升级包封装规范,实现了固件升级包的拆封和重装,完成了文件系统的提取还原,为进一步安全审计提供技术支持。

二、R2000升级固件格式分析

2.1分析环境介绍

整个升级固件的分析及封装实现都是在Linux Ubuntu14.0操作系统下进行。安装了路由器固件分析相关的工具软件,包括Binwalk[2]、Squashfs[3] 文件解压缩工具、Mkimage[4] 镜像文件生成工具、IDA 反汇编工具[5],具体安装过程可参见相关文档[2-5]。另,分析过程常用到的Linux shell命令包括:file、strings、hexdump、dd,具体用法参见Linux相关文献[6]。

2.2 逆向分析过程

(1)使用strings命令进行字符串搜索

利用strings命令显示固件文件中的可打印字符。据此可了解掌握一些重要信息,包括是否进行加密或编码处理、嵌入式操作系统类型及版本号、固件生成工具名及版本号、所实现功能及函数名称、Web管理页面编程语言、重要函数代码及其他典型特征信息。在对NETGEAR R2000的固件升级文件分析过程中可了解到如下信息:升級文件未进行加密或编码处理、操作系统为Linux,固件生成工具为OpenWRT,设备型号为R2000,版本号为V1.0.0.34,设备ID为29764648+4+0+32+2x2+0。

(2)使用Binwalk进行固件升级文件扫描

利用Binwalk对固件升级文件进行识别,可大体掌握固件文件的组成、封装格式、压缩算法、文件系统类型、指令集等。具体过程如下:

执行命令 binwalk,获知固件文件由四部分组成:操作系统镜像头、操作系统镜像文件、文件系统镜像头、文件系统,判明固件封装格式为uImage,压缩类型为lzma,文件系统类型为squashfs,字节顺序为小端,CPU架构MIPS,操作系统为Linux。

执行命令 binwalk -A ,可识别固件文件的指令集,据此可判断和佐证CPU的架构类型。

执行命令binwalk–Me,可递归提取解压还原固件文件中的压缩数据块。实际测试比较发现binwalk对squashfs文件系统的还原不够完整,因此下面利用squashfs专用工具还原文件系统。

(3)Squashfs文件系统还原

首先,根据binwalk分析结果界定文件系统的位置及大小,并利用dd命令抽取;然后利用squashfs工具包的unsquashfs命令进行文件系统的解压和还原,特别指出的是,命令运行过程需要指定压缩算法选项为lzma。

(4)固件升级过程分析

研究技术手册得知R2000有2种固件升级方式,一种为自动定期访问FTP站点并检测下载最新版本固件,通过选项设置可关闭该功能,另一种为先将升级固件文件下载到本机,再通过WEB管理页面选择上传升级文件,路由器将自动完成固件校验与Flash写入。采用网络嗅探的方法,重点分析了后一种升级方式,分析结果如下:

路由器上的uhttpd服务完成web访问的管理,固件升级过程也由其控制;

固件文件上传通过TCP协议80端口进行,依次读取并传送固件升级文件数据块;

路由器对登陆用户名和口令字进行Base64编码,解码后可还原登陆路由器的用户名和口令字。

(5)web服务程序反汇编分析

利用IDA工具反汇编分析web服务uhttpd程序,重点研究澄清升级固件的处理过程和校验算法,如图1所示,分析结果如下:

路由器对固件升级文件的处理大体分为两步,先校验完整性,后写Flash芯片;

校验过程是必备重要环节,首先读取固件升级文件头部128字节数据,解析获取设备型号、hw_id、版本号等信息,并与路由器中存储的上述信息进行比对,然后计算整个固件升级文件的校验和;

将通过校验的固件升级文件写入Flash芯片,其中主要利用了Flash写函数“/sbin/run-ramfs”。

其中,校验和计算过程如下:对镜像文件以字节为单位依次读取和相加,截取求和结果的低8位(1字节),若结果为0xFF则校验正确,否则表明镜像文件内容有变动。

2.3 分析结果

与磁盘的分区管理类似,R2000等路由器存储固件的Flash芯片被格式化为多个分区,通常情况下分成4个区块,分别用于存储bootloader、kernel、fielsystem和nvram配置文件[7]。升级镜像文件是整个固件的一部分。固件升级只是对Flash芯片的kernel和filesystem的文件存储扇区进行擦除和重写,而不会破坏bootloader和参数配置信息。

NETGEAR R2000的固件升级文件总体上分为128字节标识头、变长操作系统内核镜像、变长filesystem镜像、变长取整补充数据块和1字节校验域等5部分,如图2所示。其中128字节定长标识头包含设备型号、hw_id、版本号等信息;变长取整补充数据块用于文件补0填充为4k字节的整数倍,以便于Flash芯片的快速定位与读写;kernel镜像和filesystem镜像都又分为Uimage头和镜像文件本身,其中镜像文件进行了lzma压缩;1字节校验域用于存放前四部分数据校验和的异或值。

三、R2000升级固件封装过程实现

3.1文件系统压缩

对操作系统内核和文件系统进行压缩,压缩算法为lzma。压缩命令为squashfs ./r2000 r42file_modify.img –comp lzma,其中./r2000为文件系统所在目录,r42file_modify.img为压缩后的文件名,-comp lzma指定压缩算法为lzma。

3.2文件系统镜像文件生成

将压缩后的文件系统按照镜像文件格式封装,包括镜像头的生成和添加,利用的工具为mkimage,具体操作命令为mkimage –A mips –O linux –T kernel –C none –a 0x80002000 –e 0x801f68f0 –n “mips OpenWRT linux2.6.31”–d r42file_modify.img uImage,各选项参数中–A mips指定CPU架构为MIPS,–O linux指定操作系统为linux,–T kernel指定镜像类型为kernel,–a 0x80002000指定程序访问点,–e 0x801F68F0指定程序进入点,–d r42file_modify.img指定文件系统名。

3.3固件升级镜像文件組装

将 厂家所提供升级镜像文件的文件头、操作系统镜像与上述步骤3生成的文件系统镜像组装在一起,具体操作命令为cat r42_forehead.img uImag >r42full_create.img。

3.4校验和计算与填充

对上述步骤3生成的镜像文件进行校验和计算并追加至文件末尾。编程实现了下列校验和计算过程:对镜像文件以字节为单位依次读取和二进制相加,截取求和结果的低8位(1字节)并取反。校验和计算结束后,将1字节校验值追加至文件末尾。至此,完成整个固件的封装过程。

四、结束语

本文围绕美国固件公司R2000路由器的安全审计问题,逆向分析澄清了其升级固件的封装格式,重点分析了数据完整校验算法,在此基础上工程实现了升级固件的完整封装过程。下一步,我们将对所提取还原的文件系统开展安全审计,力求发现安全漏洞并向厂家反馈修补意见,从而确保网络可靠安全。

参 考 文 献

[1] NETGEAR. N300 WIFI router[EB/OL]. http://www.netgear.com.cn/home/products

/networking/wifi-routers/R2000.aspx?cid=wmt_netgear_organic.

[2] Binwalk. Firmware analyze tool[EB/OL]. https://github.com/devttys0/binwalk.

[3] Squashfs. Squashfs file system[EB/OL]. http://squashfs.sourceforge.net/.

[4] Die.Net. Mkimage-Linux man page[EB/OL].https://linux.die.net/man/1/mkimage.

[5] Chris Eagle. IDA Pro权威指南(第2版)[M]. 石华耀 段桂菊译. 北京:人民邮电出版社,2012.

[6] 布鲁姆 布雷斯纳汉. Linux命令行与shell脚本编程大全(第3版)[M]. 门佳 武海峰译. 北京:人民邮电出版社,2016.

[7] 吴少华等.揭秘家用路由器0day漏洞挖掘技术[M].北京:电子工业出版社,2015.

1.环球科技网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.环球科技网的原创文章,请转载时务必注明文章作者和"来源:环球科技网",不尊重原创的行为环球科技网或将追究责任;3.作者投稿可能会经环球科技网编辑修改或补充。