有趣的闪存:通过实践分析意外内存泄漏
字数 1285 2025-08-18 11:37:12
闪存分析与意外内存泄漏实践教学文档
1. 研究背景与目标
本教学文档基于对Netcomm N300路由器闪存芯片的安全分析实践,目标是探索通过修改闪存读操作从未认证Web接口获取内存数据的技术方法。
2. 硬件分析
2.1 目标设备
- 设备型号:Netcomm N300路由器
- 闪存芯片:Macronix MX15L12835FMI (16针脚SOP封装)
2.2 闪存特性
- 使用Single API模式
- 常规读取命令以
05 FF开头,用于读取寄存器状态信息 - 主要使用场景:设备启动/加载操作系统时、使用Web管理面板时
3. 技术原理
3.1 攻击基础
- SPI命令与时钟信号同步
- 数据只在时钟信号的下降沿发生变化
- 通过控制特定针脚(15号)的接地时机可修改读取命令
3.2 关键发现
- 通过记录时钟上升沿信号数量
- 在特定时钟周期将闪存芯片15号针脚接地
- 使读取指令地址失效,从而修改读取操作
4. 实验步骤
4.1 准备工作
- 进入设备串行控制台
- 使用命令触发闪存读取:
cat /dev/mtdblock0 # 原始状态 cat /dev/mtdblock2 # 用于对比
4.2 硬件连接
- 连接晶体管和FPGA
- FPGA功能:读取时钟信号并控制晶体管开关
- 接地15号针脚,等待特定时钟周期
- 使其中一个读取指令地址失效
4.3 脚本编写
- 编写脚本实现:
- 等待特定时钟周期
- 修改闪存读取操作
- 通过示波器监控命令执行情况
4.4 验证攻击
- 运行
cat /dev/mtdblock2验证 - 成功表现:
/dev/mtdblock2的第一个数据块与/dev/mtdblock0相同
5. Web服务器攻击
5.1 攻击方法
- 使硬盘中某个资源加载失败
- 强制读取任意指定内容
- 目标:通过Web请求获取固件文件等敏感信息
5.2 遇到的问题
- 从物理闪存读取任意区块时数据可能无法正确解压
- Web服务器部分功能异常(如图片无法加载)
5.3 内存泄漏发现
- 对
/wireless_1.gif的请求返回无效GIF文件 - 分析表明这是Web服务器的内存数据或磁盘数据块
- 重要特征:相同请求返回的GIF文件内容会变化
- 确认存在内存用后释放漏洞
6. 攻击影响
- 无需系统级访问控制权限即可读取闪存数据
- 可导致内存泄漏,暴露敏感信息
- 虽然对物联网设备效果有限,但潜在影响显著
7. 防御建议
- 闪存访问权限严格控制
- 实现完整的内存清理机制
- Web接口输入验证和过滤
- 关键资源加载失败时的安全处理
- SPI通信加密和完整性验证
8. 实验设备与工具
- 示波器:用于监控闪存命令执行情况
- FPGA:读取时钟信号并控制晶体管
- 晶体管:控制特定针脚接地
- 串行控制台:与设备交互
- Burp Suite:分析Web请求和响应
9. 扩展思考
- 该方法在其他SPI设备上的适用性
- 结合其他漏洞提升攻击效果的可能性
- 自动化攻击脚本的开发
- 防御措施的绕过技术
10. 总结
本实验展示了通过物理层面干扰闪存读取操作,结合Web接口实现内存泄漏的技术路径。关键点在于精确控制时钟周期和针脚状态,以及利用设备对异常情况的处理缺陷。这种攻击方式虽然需要物理接触设备,但揭示了嵌入式设备在内存管理和接口安全方面的常见弱点。