《固件安全升级实战演练》
第2章 固件基础

2、固件基础:固件结构解析与文件系统类型

嵌入式固件是设备运行的灵魂,通常由 Bootloader(引导加载程序)、Kernel(操作系统内核) 和 Rootfs(根文件系统) 三大部分组成。不同的文件系统类型(如 SquashFS、JFFS2、YAFFS2)决定了固件的存储方式、压缩效率与读写特性。理解这些结构是进行安全升级、漏洞分析与固件逆向的基础。

2.1 固件三大核心结构

组件 功能描述 安全关注点
Bootloader 初始化硬件、加载内核到内存、传递启动参数(如 U-Boot、Barebox) 签名验证、回滚保护、安全启动链
Kernel 操作系统核心,管理进程、内存、驱动(如 Linux Kernel) 内核模块签名、地址空间布局随机化(KASLR)
Rootfs 包含系统工具、库、配置文件、应用程序的根文件系统 文件完整性校验、敏感信息泄露、权限管控
固件三大核心结构分层示意 Bootloader(引导加载程序) Kernel(操作系统内核) Rootfs(根文件系统) 硬件 驱动 应用

▲ 固件启动流程:Bootloader → Kernel → Rootfs 逐级加载

2.2 常见固件文件系统类型

  • 🔹 SquashFS — 只读、高压缩比的闪存文件系统。广泛用于固件 Rootfs,支持 zlib/lzma 压缩,适合存储不常修改的系统文件。
  • 🔹 JFFS2 — 日志结构闪存文件系统(Journaling Flash File System v2)。支持磨损均衡、掉电恢复,适用于 NOR/NAND Flash。
  • 🔹 YAFFS2 — 专为 NAND Flash 设计的文件系统(Yet Another Flash File System v2)。速度快、内存占用低,支持大页 NAND。
文件系统类型特性对比 SquashFS 只读 · 高压缩 zlib/lzma 适合系统分区 JFFS2 日志结构 · 可写 磨损均衡 NOR/NAND 通用 YAFFS2 专为 NAND 优化 低内存占用 大页支持 选择依据:读写需求、闪存类型、压缩率、可靠性要求

2.3 固件结构解析实战示例

使用 binwalk 工具解析典型固件镜像,查看各分区偏移与文件系统类型:

$ binwalk firmware.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             U-Boot bootloader, version 2020.04
262144        0x40000         Linux kernel ARM boot executable zImage (little-endian)
1572864       0x180000        SquashFS filesystem, little endian, version 4.0, compression:lzma
4194304       0x400000        JFFS2 filesystem, little endian, clean markers, size: 0x400000
6291456       0x600000        YAFFS2 filesystem, little endian, type: yaffs2

💡 通过偏移地址可提取各分区,进一步分析 Bootloader 配置、内核模块及文件系统内容。

典型固件 Flash 分区布局(地址空间示意) Bootloader Kernel SquashFS JFFS2 YAFFS2 0x0 0x40000 0x180000 0x400000 0x600000 0x800000

▲ 固件镜像中各分区按地址顺序排列,不同文件系统共存于同一 Flash

✅ 掌握固件结构与文件系统类型,是进行安全升级、漏洞挖掘、固件逆向与定制化开发的关键第一步。

专注课程资料整理