狗汪汪玩转嵌入式——I2C 协议分析
字数 1707 2025-08-22 18:37:21
I2C协议分析与实战破解教学文档
0x00 I2C协议基础
基本概念
- I2C全称:Inter-Integrated Circuit(集成电路总线)
- 开发者:飞利浦公司设计
- 协议类型:多主从架构的串口通讯协议
物理特性
- 数据线数量:仅需2条数据总线
- SCL:时钟线(Clock)
- SDA:数据线(Data)
- 外加Ground(地线)
架构特点
- 通常采用1个主设备和多个从设备的架构
- 支持多主控模式(多个主设备)
通讯速度
- 标准速度:100kHz
- 快速模式:400kHz
- 高速模式:1MHz
- 超高速模式:3.2MHz
应用场景
- 对速度要求不高的设备间通讯
- PC风扇温度监控
- 电池电压数据采集
- EEPROM芯片通讯(如存储BIOS密码的EEPROM)
寻址方式
- 每个I2C设备都有独立的读/写地址
- 必须知道设备的读写地址才能进行通讯
0x01 工具准备 - BusPirate
工具简介
- 名称:BusPirate
- 开发者:Dangerous prototypes
- 定位:硬件hacking瑞士军刀
核心功能
- 支持多种常见协议
- I2C
- SPI
- UART
- JTAG
- 1-Wire
- 其他
- 跨平台支持:Windows/Linux/MAC
- 丰富文档支持
主要用途
- I2C协议嗅探(Sniffing)
- I2C设备读写
- AVR等芯片编程
连接方式
- 使用minicom或其他串口工具
- 波特率:115200
- 通过USB接口连接
接口示意图
BusPirate引脚 <-> 目标设备
GND <-> GND
+5V <-> VCC (可选)
SCL <-> SCL
SDA <-> SDA
常用命令
m:选择协议模式i:显示当前模式信息[:开始I2C嗅探]:停止I2C嗅探(1):显示宏命令帮助
0x02 实战案例 - YL99数字密码锁破解
目标设备分析
- 型号:YL99数字密码锁
- 认证方式:完全依赖用户设置的数字密码
- 账户类型:
- Master账户:用于管理用户密码(默认0123#)
- 普通账户:存储普通用户密码
设备安全功能
- 防窥功能:
- 输入格式:起始码(0) + 掩盖数字 + 正确密码 + #(确认)
- 目的:防止旁观者获取真实密码
物理安全缺陷
- 键盘部分可被分离,暴露内部PCB主板
- 主板可见关键组件:
- MCU:em78p156e
- EEPROM:24C02(存储密码信息)
初级破解方法
- 复位操作:
- 短接Reset复位触点和Ground
- 效果:密码恢复出厂设置
- 缺点:
- 需要物理拆卸
- 容易被发现(恢复出厂设置)
高级破解方法 - I2C协议分析
准备工作
-
查阅24C02 datasheet:
- 确认使用I2C协议
- 识别管脚功能:
- SCL:时钟频率
- SDA:数据总线
-
硬件连接:
- 将24C02的I2C管脚连接至BusPirate对应接口
密码传输分析
-
密码输入流程:
- 起始码(0) + 正确密码 + 结束确认(#)
-
关键发现:
- 按下#后,MCU向24C02发送密码验证请求
- EEPROM以明文方式返回正确密码给MCU
- 使用小端格式(little endian)存储密码
BusPirate嗅探结果
- 示例密码:
- 密码"123"显示为反序
- 密码"456"显示为反序
- 数据格式:
[I2C Sniffer] Address | Data 0xA0 | 0x32 0x31 0x30 // 反序显示密码"012"
0x03 安全建议
设计层面
-
物理防护:
- 防止设备被轻易拆解
- 关键芯片应做封装保护
-
通信安全:
- 避免明文传输敏感数据
- 实现加密通信协议
- 使用哈希值验证而非明文密码
-
存储安全:
- 密码应加密存储
- 使用安全存储芯片
开发层面
-
安全审计:
- 对硬件通信协议进行安全评估
- 检查敏感数据传输方式
-
固件更新:
- 设计可更新的固件机制
- 预留安全补丁接口
0x04 总结
攻击路径
- 物理拆解暴露内部电路
- 识别关键通信协议(I2C)
- 使用BusPirate嗅探通信数据
- 发现明文传输密码的安全缺陷
核心问题
- 过度依赖"防窥功能"的表面安全
- 忽视硬件通信协议的安全设计
- 缺乏对存储芯片的防护措施
学习要点
- I2C协议的基本原理和安全隐患
- BusPirate工具的使用方法
- 硬件安全审计的基本流程
- 嵌入式系统安全设计的核心原则