4、固件二进制分析:字符串分析、硬编码凭据搜索、敏感信息泄露检测
各位同学,咱们今天聊点实在的。拿到一个支付终端的固件,你第一件事会做什么?
我个人习惯,不是急着反汇编,也不是跑动态调试。我会先做一件事——字符串分析。说白了,就是拿binwalk或者strings工具,把固件里所有可见的字符串扒出来,先扫一遍。这步看起来简单,但往往能挖出大问题。
4.1 字符串分析:从“明文”中找线索
固件本质上就是个二进制大包。里面藏着各种调试信息、路径、版本号、甚至注释。这些信息,对攻击者来说,就是一张“藏宝图”。
我记得有一次,我分析某款POS机的固件。用strings一跑,直接看到了这么一行:
/home/developer/payment_app/debug/config.ini
嗯,开发者把调试配置文件的路径留在了固件里。顺着这个路径,我找到了一个硬编码的测试密钥。你说这危不危险?
所以,字符串分析的核心目标有三个:
- 识别敏感路径:比如配置文件、日志文件、数据库路径。
- 发现调试信息:比如“DEBUG: transaction approved”、“TEST MODE”等。
- 定位关键函数:比如加密函数、认证函数的名称。
strings -n 6 firmware.bin 来提取长度至少6个字符的字符串。太短的字符串噪音太多,比如“OK”、“NO”这种,基本没用。
4.2 硬编码凭据搜索:最怕的就是“写死”
你想想看,支付终端里最怕什么?最怕的就是密钥、密码、Token被“写死”在固件里。一旦被提取出来,整个支付链路的安全性就崩塌了。
硬编码凭据的搜索,说白了就是一场“找茬”游戏。我们需要在二进制数据中,找到那些本不该出现的明文凭据。
常见的硬编码凭据包括:
- 对称密钥:AES、DES密钥,通常是16字节或32字节的随机数据。
- 私钥:RSA私钥,通常以“-----BEGIN RSA PRIVATE KEY-----”开头。
- 密码/口令:比如数据库密码、SSH密码、API密钥。
- Token/会话ID:用于身份认证的临时凭据。
怎么搜?我一般用两种方法:
- 正则表达式搜索:比如搜索
[A-Za-z0-9+/]{32,}来匹配Base64编码的密钥。 - 熵值分析:高熵值的数据块,很可能是加密密钥或压缩数据。
这里我给大家一个简单的Python脚本,用于在固件中搜索常见的硬编码凭据模式:
import re
import sys
def search_hardcoded_credentials(file_path):
with open(file_path, 'rb') as f:
data = f.read()
# 搜索RSA私钥
rsa_pattern = rb'-----BEGIN RSA PRIVATE KEY-----'
if re.search(rsa_pattern, data):
print("[!] 发现RSA私钥!")
# 搜索AES密钥(16字节随机数据,熵值较高)
# 这里简化处理,实际需要更复杂的熵值计算
# 搜索类似 "key=" 或 "secret=" 的字符串
key_patterns = [rb'key\s*=\s*([A-Za-z0-9+/=]{16,})',
rb'secret\s*=\s*([A-Za-z0-9+/=]{16,})']
for pattern in key_patterns:
matches = re.findall(pattern, data, re.IGNORECASE)
for match in matches:
print(f"[!] 发现疑似密钥: {match.decode('utf-8', errors='ignore')}")
if __name__ == "__main__":
search_hardcoded_credentials(sys.argv[1])
4.3 敏感信息泄露检测:不止是凭据
硬编码凭据只是冰山一角。敏感信息泄露的范围其实更广。你想想看,固件里还可能藏着什么?
- 内部IP地址:比如数据库服务器、管理后台的IP。
- 域名/URL:比如API接口地址、更新服务器地址。
- 版本信息:比如OpenSSL版本、Linux内核版本,这些信息可以帮助攻击者找到已知漏洞。
- 调试日志:比如打印了完整的交易数据、持卡人信息。
我遇到过最夸张的一次,是在一个固件里直接找到了一个完整的SQL查询语句:
SELECT * FROM transactions WHERE card_number = '4111111111111111'
嗯,测试卡号就这么明晃晃地躺在那里。你说这要是被恶意软件提取了,后果不堪设想。
所以,敏感信息泄露检测,我建议你建立一个“关键词黑名单”。比如:
| 类别 | 关键词示例 |
|---|---|
| IP地址 | 192.168., 10.0., 172.16. |
| 域名 | .com, .cn, .local, api., admin. |
| 版本信息 | OpenSSL 1.0.1, Linux 2.6.32 |
| 调试信息 | DEBUG, LOG, TRACE, TEST |
| 卡号模式 | 4[0-9]{12,15}, 5[1-5][0-9]{14} |
4.4 本章知识体系
为了让大家更直观地理解这三者之间的关系,我画了一张图:
从这张图你可以看到,固件二进制分析不是孤立的一步。它从固件文件出发,经过三个维度的分析,最终汇总成一份安全风险报告。这份报告里,要明确标出风险等级、具体位置(偏移地址),以及修复建议。
好了,关于固件二进制分析中的字符串分析、硬编码凭据搜索和敏感信息泄露检测,我就讲到这里。记住,这些技术看起来简单,但实战中非常有效。下次你拿到一个固件,不妨先按这个流程走一遍,说不定会有惊喜。
公众号:蓝海资料掘金营,微信deep3321