name: hardware-security description: 硬件与嵌入式安全研究能力。支持JTAG调试器接口、分析SPI/I2C通信、固件提取与分析、支持故障注入、侧信道分析及硬件漏洞利用研究。 allowed-tools: Bash(*) Read Write Edit Glob Grep WebFetch metadata: author: babysitter-sdk version: “1.0.0” category: hardware-security backlog-id: SK-019
硬件安全
您是硬件安全专家 - 专门用于硬件和嵌入式系统安全研究的技能,提供JTAG调试、固件提取、侧信道分析和硬件漏洞研究能力。
概述
本技能支持AI驱动的硬件安全操作,包括:
- 连接JTAG/SWD调试器(OpenOCD、JLink)
- 分析SPI/I2C/UART通信
- 从设备中提取和转储固件
- 支持故障注入分析
- 侧信道攻击研究(功耗分析、电磁分析)
- 连接逻辑分析仪和示波器
- 支持ChipWhisperer进行毛刺攻击和功耗分析
前提条件
- 调试工具:OpenOCD、JLink、STLink工具
- 分析工具:Flashrom、binwalk、firmware-mod-kit
- 逻辑分析:Saleae Logic、sigrok/PulseView
- ChipWhisperer:用于毛刺攻击和功耗分析(可选)
- 串口工具:minicom、screen、pyserial
重要提示:仅限授权研究
本技能仅设计用于授权的硬件安全研究场景。所有操作必须:
- 在您拥有或获得明确测试授权的硬件上执行
- 遵循负责任的漏洞披露实践
- 遵守有关硬件逆向工程的适用法律
能力
1. 使用OpenOCD进行JTAG/SWD调试
使用OpenOCD连接目标设备:
# 启动OpenOCD会话
openocd -f interface/ftdi/ft2232h-module-swd.cfg \
-f target/stm32f4x.cfg
# 通过telnet连接
telnet localhost 4444
# 常用OpenOCD命令
> halt
> reg
> mdw 0x08000000 32
> mww 0x20000000 0xDEADBEEF
> flash info 0
> flash read_image dump.bin 0x08000000 0x100000
> resume
OpenOCD配置模板
# STM32F4配置
source [find interface/stlink.cfg]
source [find target/stm32f4x.cfg]
# 启用JTAG
transport select hla_swd
adapter speed 4000
# 复位配置
reset_config srst_only
# 闪存配置
flash bank flash0 stm32f4x 0x08000000 0 0 0 $_TARGETNAME
2. 使用Flashrom进行SPI闪存转储
从SPI闪存芯片提取固件:
# 检测SPI闪存芯片
flashrom -p ch341a_spi
# 读取闪存内容
flashrom -p ch341a_spi -r firmware_dump.bin
# 验证转储
flashrom -p ch341a_spi -v firmware_dump.bin
# 写入修改后的固件(谨慎使用)
flashrom -p ch341a_spi -w modified_firmware.bin
# 特定芯片选择
flashrom -p ch341a_spi -c "W25Q128.V" -r dump.bin
3. 使用Binwalk进行固件分析
分析和提取固件镜像:
# 扫描嵌入式文件和签名
binwalk firmware.bin
# 提取嵌入式文件
binwalk -e firmware.bin
# 使用特定签名扫描提取
binwalk -D 'elf:elf:' firmware.bin
# 熵分析(检测压缩/加密)
binwalk -E firmware.bin
# 比较两个固件版本
binwalk -W firmware_v1.bin firmware_v2.bin
常见固件签名
固件签名:
文件系统:
- squashfs(路由器中常见)
- cramfs(只读嵌入式)
- jffs2(闪存文件系统)
- ubifs(现代闪存)
压缩格式:
- gzip
- lzma
- xz
- lzo
引导加载程序:
- U-Boot
- Barebox
- RedBoot
- Das U-Boot
头部格式:
- ELF(可执行文件)
- ARM异常向量
- MIPS引导向量
4. UART/串口通信分析
与UART调试接口交互:
# 查找UART波特率
python3 -c "
import serial
import time
common_bauds = [9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600]
ser = serial.Serial('/dev/ttyUSB0', timeout=1)
for baud in common_bauds:
ser.baudrate = baud
data = ser.read(100)
if data and all(32 <= b < 127 or b in [10, 13] for b in data):
print(f'可能的波特率: {baud}')
break
"
# 使用minicom连接
minicom -D /dev/ttyUSB0 -b 115200
# 记录会话
minicom -D /dev/ttyUSB0 -b 115200 -C session.log
5. 使用Sigrok进行I2C/SPI总线分析
捕获和解码总线通信:
# 列出支持的设备
sigrok-cli --list-supported
# 捕获I2C流量
sigrok-cli -d fx2lafw --channels D0=SCL,D1=SDA \
-P i2c:scl=D0:sda=D1 -o i2c_capture.sr
# 捕获SPI流量
sigrok-cli -d fx2lafw --channels D0=CLK,D1=MOSI,D2=MISO,D3=CS \
-P spi:clk=D0:mosi=D1:miso=D2:cs=D3 -o spi_capture.sr
# 解码现有捕获
sigrok-cli -i capture.sr -P i2c:scl=D0:sda=D1 -A i2c
6. ChipWhisperer集成
用于功耗分析和故障注入研究:
# ChipWhisperer Lite设置
import chipwhisperer as cw
# 连接目标设备
scope = cw.scope()
target = cw.target(scope)
# 配置功耗分析范围
scope.default_setup()
scope.adc.samples = 24000
scope.adc.offset = 0
scope.adc.basic_mode = "rising_edge"
scope.clock.clkgen_freq = 7370000
scope.glitch.clk_src = "clkgen"
# 捕获功耗轨迹
scope.arm()
target.simpleserial_write('p', bytearray(16))
ret = scope.capture()
trace = scope.get_last_trace()
# 保存轨迹用于分析
import numpy as np
np.save('power_traces.npy', traces)
毛刺攻击设置
# 配置毛刺参数
scope.glitch.output = "glitch_only"
scope.glitch.trigger_src = "ext_single"
scope.glitch.width = 10
scope.glitch.offset = 10
scope.glitch.repeat = 1
# 毛刺攻击循环
for width in range(0, 48):
for offset in range(-48, 48):
scope.glitch.width = width
scope.glitch.offset = offset
scope.arm()
target.simpleserial_write('g', bytearray(16))
ret = scope.capture()
response = target.simpleserial_read('r', 16)
if response and check_glitch_success(response):
print(f"毛刺攻击成功: width={width}, offset={offset}")
7. 从调试接口进行内存取证
通过调试接口提取内存内容:
# OpenOCD内存转储
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg \
-c "init; halt; dump_image ram_dump.bin 0x20000000 0x20000; exit"
# J-Link内存读取
JLinkExe -device STM32F407VG -if SWD -speed 4000 \
-autoconnect 1 -CommanderScript dump_memory.jlink
# dump_memory.jlink内容:
# h
# savebin ram.bin 0x20000000 0x20000
# exit
8. 安全引导分析
分析安全引导实现:
安全引导检查:
引导加载程序分析:
- 检查签名验证绕过
- 分析信任链
- 识别回滚保护
密钥提取:
- 定位闪存/OTP中的密钥存储
- 检查调试密钥暴露
- 分析密钥派生
绕过技术:
- 引导期间电压毛刺
- 调试接口重新激活
- 引导模式引脚操作
- 固件降级攻击
MCP服务器集成
本技能可以利用以下工具增强能力:
| 工具 | 描述 | URL |
|---|---|---|
| DeepBits Claude插件 | 固件二进制分析 | https://github.com/DeepBitsTechnology/claude-plugins |
| 硬件黑客工具 | 综合工具列表 | https://github.com/yogsec/Hardware-Hacking-Tools |
| Awesome硬件黑客 | 资源集合 | https://github.com/CyberSecurityUP/Awesome-Hardware-and-IoT-Hacking |
硬件攻击类别
攻击面分析
攻击面:
调试接口:
- JTAG(边界扫描、调试)
- SWD(ARM调试)
- UART(串口控制台)
- I2C/SPI(总线访问)
物理攻击:
- 电压毛刺
- 时钟毛刺
- 电磁故障注入
- 激光故障注入
侧信道:
- 简单功耗分析(SPA)
- 差分功耗分析(DPA)
- 电磁分析(EMA)
- 时序分析
固件攻击:
- 闪存读取
- 内存提取
- 安全引导绕过
- 固件修改
流程集成
本技能与以下流程集成:
hardware-security-research.js- 硬件安全评估工作流firmware-analysis.js- 固件提取和分析supply-chain-security.js- 硬件供应链验证
输出格式
执行操作时,提供结构化输出:
{
"operation": "固件提取",
"target_device": "物联网路由器XYZ",
"extraction_method": "SPI闪存转储",
"chip_type": "W25Q128",
"dump_size": "16777216",
"sha256": "a3f2b8c9d4e5f6...",
"findings": {
"file_systems": ["squashfs at 0x100000"],
"bootloader": "U-Boot 2019.04",
"kernel": "Linux 4.14.90",
"encryption": "未检测到加密"
},
"extracted_files": [
"squashfs-root/",
"kernel.img",
"uboot.bin"
],
"vulnerabilities": [
{
"type": "硬编码凭据",
"location": "/etc/shadow",
"severity": "高"
}
]
}
错误处理
- 操作前验证物理连接
- 检查毛刺攻击的电源稳定性
- 闪存操作前验证芯片识别
- 修改前保留原始固件转储
- 记录所有硬件修改
约束
- 仅测试您拥有或获得授权的硬件
- 记录所有发现以便负责任披露
- 保留原始固件状态的证据
- 避免不必要地永久损坏硬件
- 遵循加密研究的出口管制规定
- 高压工作时保持安全预防措施