4、固件漏洞挖掘:硬编码凭据搜索、后门账户检测、敏感信息泄露分析
固件里的漏洞,说白了就三种最常见:硬编码密码、后门账户、敏感信息乱放。我这些年挖过的固件,十有八九都能在这三个方向上找到点东西。今天咱们就把这三板斧练熟。
核心思路:固件是静态的,但漏洞是动态的。你只要把固件当成一个文件系统去翻,把字符串当线索去追,就能找到大量攻击面。
4.1 硬编码凭据搜索
硬编码凭据,就是厂商直接把用户名密码写死在代码里。我见过最离谱的,是某路由器固件里藏着 admin:admin,连加密都没做。
4.1.1 搜索策略
我个人习惯用 strings 配合 grep 先扫一遍。别小看这步,很多漏洞就是这么翻出来的。
# 基础搜索命令
strings firmware.bin | grep -iE '(password|passwd|pwd|secret|key|token|credential)'
# 搜索常见弱密码模式
strings firmware.bin | grep -iE '(admin|root|test|guest|default|123456|password)'
嗯,这里要注意:光搜字符串不够,还得看上下文。我遇到过 password 这个词出现在日志函数里,根本不是凭据。
4.1.2 常见硬编码位置
| 位置 | 典型文件 | 常见模式 |
|---|---|---|
| 配置文件 | *.conf, *.cfg, *.ini |
password=xxx, pass=xxx |
| Web 页面 | *.html, *.js, *.php |
var pwd = "xxx" |
| 二进制文件 | lib*.so, 可执行文件 |
硬编码字符串常量 |
| 脚本文件 | *.sh, *.py, *.lua |
export PASS=xxx |
小技巧:用 binwalk -Me firmware.bin 先解包,然后对整个文件系统递归搜索,效率高很多。
4.2 后门账户检测
后门账户比硬编码密码更隐蔽。厂商有时候会留一个调试账户,用于远程维护。但问题是,这个账户往往不会被公开,攻击者却能从固件里翻出来。
4.2.1 检测方法
我建议从三个层面入手:
- 影子文件分析:解包后找
/etc/shadow或/etc/passwd,看有没有异常账户。 - 哈希碰撞:把 shadow 里的哈希值拿去撞常见弱密码库。
- 代码审计:在二进制里搜
login、auth、verify等函数,看有没有硬编码的校验逻辑。
# 提取 shadow 文件
binwalk -Me firmware.bin
cat _firmware.bin.extracted/squashfs-root/etc/shadow
# 常见后门账户名
strings firmware.bin | grep -iE '(debug|backup|service|support|factory|test)'
警告:我曾经在某个 IoT 固件里发现一个叫 diag 的账户,密码是 diag123。这个账户在文档里完全没提过,但通过 SSH 能直接登录。这就是典型的后门账户。
4.2.2 后门账户特征
- UID 为 0:即 root 权限,但用户名不是 root。
- 密码哈希为空:或者使用弱哈希算法(如 DES)。
- 登录 shell 异常:比如
/bin/false被改成/bin/sh。 - 隐藏账户:用户名以
.开头,或者 UID 大于 65534。
4.3 敏感信息泄露分析
敏感信息泄露,说白了就是不该出现在固件里的东西出现了。比如私钥、证书、API Token、数据库连接串。我见过最夸张的,是某路由器固件里直接嵌了 AWS 的 Secret Key。
4.3.1 搜索模式
我个人习惯用正则表达式去匹配常见格式:
# 搜索私钥
strings firmware.bin | grep -E '-----BEGIN (RSA|DSA|EC|OPENSSH) PRIVATE KEY-----'
# 搜索 API Token
strings firmware.bin | grep -iE '(api[_-]?key|api[_-]?secret|token|bearer)'
# 搜索数据库连接串
strings firmware.bin | grep -iE '(jdbc:|mongodb://|mysql://|postgresql://|redis://)'
4.3.2 常见泄露类型
| 类型 | 示例 | 风险等级 |
|---|---|---|
| SSH 私钥 | id_rsa, id_dsa |
高 |
| SSL 证书 | *.pem, *.crt, *.key |
中 |
| 云服务凭证 | AWS Access Key, Azure Token | 极高 |
| 数据库密码 | db_password=xxx |
高 |
| 固件签名密钥 | signing_key.pem |
极高 |
避坑指南:我曾经在分析某摄像头固件时,发现一个 config.bin 文件。用 strings 一看,里面全是 Wi-Fi 密码和云平台 Token。厂商居然把这些明文存进了固件里。所以,别只盯着二进制文件,配置文件才是重灾区。
4.4 自动化工具链
手动搜太慢了。我建议用工具链批量处理:
- Firmwalker:自动扫描常见敏感文件和字符串。
- Binwalk + Entropy:先识别固件结构,再提取文件系统。
- 自定义脚本:用 Python 写个递归搜索,匹配正则模式。
# 使用 Firmwalker
git clone https://github.com/craigz28/firmwalker.git
cd firmwalker
./firmwalker.sh _firmware.bin.extracted/squashfs-root/
嗯,工具只是辅助。真正值钱的是你的分析思路。我见过有人用 Firmwalker 扫出一堆假阳性,结果错过了真正的后门。
4.5 知识体系图
下面这张图总结了本章的核心逻辑:从固件解包开始,沿着三条路径(硬编码凭据、后门账户、敏感信息)往下挖,最终汇总到漏洞报告。
这张图你看懂了吗?从固件解包开始,三条路径并行推进。每条路径都有对应的工具和方法。最终所有发现汇总到漏洞报告里。
最后说一句:固件漏洞挖掘,说白了就是跟厂商玩捉迷藏。他们藏得越深,你挖出来就越有价值。保持耐心,多用工具,但别迷信工具。我见过太多人只会跑脚本,结果漏掉了真正的后门。