0x00 网络设备固件是什么?

我理解的固件就是操作系统,比如以前刷机的时候的手机固件包,这个所谓的固件包就是手机的操作系统;再比如mp4、mp3、usb以及车载系统等,都肯定要有自己的操作系统,这个操作系统打包之后就是一个固件。
网络设备的固件就是网络设备的操作系统。

0x01 网络设备固件结构

网络设备的固件本质上是软件,是网络设备正常工作的一系列系统软件集合,它存在与网络设备的只读内存ROM之中,以二进制映像的形式存在,储存设备正常运行所需的各个组成部分。固件镜像架构如图:

固件头是偏移量为0的一段二进制数据,主要指明了设备的版本、编号、操作系统、压缩格式、文件系统信息、处理器架构及型号等软硬件信息,根据网络设备的不同固件头所包含的信息有所不同。BSP(Board Support Packet)是板级支持包的意思,是为了使操作系统正常运行而执行的程序包,主要对硬件进行初始化,如初始化CPU、各种控制器、堆栈等。引导程序是为了使操作系统正常运行而执行的一段程序代码,用于进行硬件设备的初始化、初始化内存空间以及与内核建立通信通道等工作,为下一阶段内核的启动做必要的准备。引导程序与BSP有一定的相似之处,都是为了是操作系统正常运行而进行必要的操作以提供必要的软硬件环境,但是引导程序与BSP并不完全相同,当操作系统启动完成后,引导程序便消失不见,而BSP则继续存在。内核是网络设备操作系统的核心,主要负责执行内存管理、进程调度及其通信、IO操作调度以及为应用程序的运行提供相关系统调用等功能。应用程序是设备的一些具体功能的实现。网络设备根文件系统是网络设备中进行的数据组织、存储和处理等操作的组织,文件系统中既包含着应用程序等上层应用又包含有操作系统正常运行所需要的系统库等数据文件。

0x02 网络设备固件的多样化

由于没有同一的标准,不同的厂商有不同的实现方式,这导致类网络设备固件的多样化,也增大了网络设备固件逆向分析的难度。

CPU

不同的网络设备从CPU、根文件系统、 操作系统、压缩格式等各个方面均有较大差异。每种类型的设备根据其主要使用场景采用不同的配置,在大型网络中的网络设备会搭载性能较高的网络设备,而对个人用户来说,网络任务相对负载较低,系统的稳定运行是首要目标,而系统的性能相对较低。
在中低端网络设备中,CPU主要负责交换路由信息、路由表网络地址查询以及在不同子网、不同网络节点之间转发数据包,进行数据分发。在高端网络设备中主流的CPU类型有x86、MIPS、PowerPC、ARM,其中PowerPC、MIPS、ARM都采用精简指令集,x86采用复杂指令集,所以,x86性能较为全面,PowerPC、MIPS、ARM则耗能较低。具体如下图:

根文件系统

在根文件系统方面,常见文件系统有YAFFS、JFFS2、SquashFS、CramFS、ROMMFS、xFAT等,对于大部分网络设备而言,其操作系统可以支持多种不同类型的根文件系统,但是有一部分网络设备的操作系统只能支持特定的根文件系统,而无法识别其余类型的文件系统,如VxWorks类型的操作系统只支持TFFS类型的根文件系统,该根文件系统是基于flash实现的。常用的根文件系统类型参考下表。

对于每种不同类型的根文件系统,都有自己的特性,表现在各个方面,如资料安全性、占用资源、读写速度、掉电保护。这些特性是基于每种根文件系统的内部的,由其内部逻辑决定。下表是不同类型根文件系统的相关特性和优势:

压缩方式

网络设备固件镜像的压缩格式也有多种多样的,不同的网络设备采用的压缩格式不同,常见的压缩格式如CPIO、Ar、Tar、GZip、LZMA、RPM/DEB等 ,每种压缩格式的网络设备在数据的处理方面采用的策略不同,在解析的时候需要采用不同的策略来处理固件镜像才能得到所需结果。

0x03总结

这里大概说了网络设备固件相关的内容,虽然不同厂商的网络设备有着不同的CPU架构、不同的文件系统、不同的压缩方式。但同时它们也具有一定的共性,比如网络设备底层操作系统都是基于Linux的。国内或者国外对网络设备安全重视度远不及服务器、PC,而网络设备的设计却又相对于服务器或PC简单。这一点值得深思呀!!

参考文献:
基于特征值的网络设备镜像自动分析技术研究_岳奇