2. PLC固件提取与静态安全分析

PLC固件提取与静态安全分析 学习卡片

固件镜像的获取与预处理

对西门子 S7-1200 进行固件静态分析,第一步是拿到可分析的镜像。S7-1200 的固件通常以 .upd 升级包形式发布,内部封装了引导加载程序、固件分区和文件系统。若从设备侧提取,可通过调试接口(如 XMODEM 或 JTAG)读取 Flash 内容;若从官方升级包获取,则需先解包再分析。

拿到镜像后,先做基础识别,确认文件类型和结构,再决定后续提取策略:

# 识别镜像类型
file s7_1200_fw.upd
# 查看十六进制头部,确认魔数和分区表
xxd -l 256 s7_1200_fw.upd
# 计算哈希,建立分析基线
sha256sum s7_1200_fw.upd

西门子升级包常见结构为:头部元数据 + 压缩固件分区 + 校验区。部分版本使用私有封装格式,需要先剥离外层容器才能进入 binwalk 分析。

使用 binwalk 提取文件系统

binwalk 是固件分析的核心工具,通过签名扫描识别镜像中的嵌套文件系统、压缩流和可执行代码。对 S7-1200 固件,重点关注 SquashFS、CramFS、JFFS2 等嵌入式文件系统,以及 gzip、lzma 压缩段。

# 签名扫描,识别镜像中的文件系统与压缩段
binwalk s7_1200_fw.bin

# 自动提取所有可识别内容
binwalk -e s7_1200_fw.bin

# 对提取出的文件系统进一步递归分析
binwalk -Me s7_1200_fw.bin

# 查看提取结果目录结构
ls -la _s7_1200_fw.bin.extracted/

提取后通常得到 squashfs-root/ 目录,包含 /bin、/etc、/lib、/www 等标准嵌入式 Linux 目录。若 binwalk 无法自动识别,可尝试手动定位文件系统魔数:SquashFS 为 hsqs,CramFS 为 0x28cd3d45,JFFS2 为 0x1985。

strings 定位硬编码凭据与调试接口

文件系统提取完成后,用 strings 扫描二进制文件和配置文件,寻找硬编码凭据、调试接口路径和未文档化命令。这一步的关键是结合上下文过滤噪声,而不是盲目搜索。

# 扫描所有可打印字符串,输出到文件
strings -a -n 6 squashfs-root/bin/* > all_strings.txt

# 搜索凭据相关关键词
grep -iE "password|passwd|pwd|secret|token|key" all_strings.txt

# 搜索调试接口与未文档化命令
grep -iE "debug|diag|shell|telnet|ssh|backdoor|hidden" all_strings.txt

# 搜索 Web 接口中的认证逻辑
strings -a squashfs-root/www/cgi-bin/* | grep -iE "auth|login|admin"

典型发现包括:/etc/passwd 中的默认账户、Web CGI 中的硬编码 API Key、调试串口配置中的 console=ttyS0、以及未在文档中公开的 diag 或 debug 命令。对每个命中项,需回溯到原始文件确认上下文,避免误报。

strings 扫描时建议使用 -n 6 以上长度,减少短字符串噪声;对关键命中项用 grep -B2 -A2 查看前后文,判断是否真实凭据。

静态分析结果整理与验证

将提取到的文件系统、凭据线索和调试接口整理成结构化清单,便于后续验证。对每条线索,记录来源文件、偏移地址、原始字符串和初步判断。硬编码凭据需在隔离环境中验证是否仍有效;调试接口需确认是否在量产固件中开放。

发现类型来源文件关键内容风险判断
硬编码凭据/etc/passwdadmin:$1$xxx:0:0:...默认账户可登录
调试接口/etc/inittabttyS0::respawn:/bin/sh串口 shell 未禁用
未文档化命令/bin/diag_tool"diag --dump-config"可导出配置
Web API Key/www/cgi-bin/api.cgiAPI_KEY="S7-1200-DEFAULT"接口鉴权可绕过
S7-1200 固件提取与静态分析流程 镜像获取 .upd 升级包 / Flash 读取 预处理与识别 file / xxd / sha256sum binwalk 提取 -e / -Me 递归解包 文件系统 squashfs-root/ strings 静态扫描 strings -a -n 6 → grep 凭据 / 调试 / 未文档化命令 password | debug | shell | auth | token | backdoor 硬编码凭据 /etc/passwd Web API Key 调试接口 ttyS0 shell JTAG / XMODEM 未文档化命令 diag --dump-config debug 模式入口 验证与记录 隔离环境验证 结构化清单 关键工具链:file → xxd → sha256sum → binwalk -Me → strings -a -n 6 → grep -iE 分析原则:先识别后提取,先扫描后过滤,每条线索回溯原始文件确认上下文,避免误报
静态分析发现的凭据和接口需在隔离实验环境中验证,禁止直接对生产设备操作。部分 S7-1200 固件启用了签名校验,修改后的镜像可能无法刷入,分析时以只读提取为主。