《固件安全升级实战演练》
第2章 固件基础
2、固件基础:固件结构解析与文件系统类型
嵌入式固件是设备运行的灵魂,通常由 Bootloader(引导加载程序)、Kernel(操作系统内核) 和 Rootfs(根文件系统) 三大部分组成。不同的文件系统类型(如 SquashFS、JFFS2、YAFFS2)决定了固件的存储方式、压缩效率与读写特性。理解这些结构是进行安全升级、漏洞分析与固件逆向的基础。
2.1 固件三大核心结构
| 组件 | 功能描述 | 安全关注点 |
|---|---|---|
| Bootloader | 初始化硬件、加载内核到内存、传递启动参数(如 U-Boot、Barebox) | 签名验证、回滚保护、安全启动链 |
| Kernel | 操作系统核心,管理进程、内存、驱动(如 Linux Kernel) | 内核模块签名、地址空间布局随机化(KASLR) |
| 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。
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
✅ 掌握固件结构与文件系统类型,是进行安全升级、漏洞挖掘、固件逆向与定制化开发的关键第一步。
专注课程资料整理