-
-
[原创]硬件安全相关基础工具介绍------硬件篇
-
2021-5-18 23:26 12662
-
硬件逆向的入口
狭义上来说一个硬件设备至少由一块PCB+一个MCU+多个外部设备构成
这里以一个wifi版插座温湿度计二合一IoT设备为例,向大家讲解一点思路:
下面是我绘制的草图(注意:实际项目中并不会这样设计,这样设计浪费资源,只是为了给大家讲解)
代码层
提取代码
1、代码或者重要数据在芯片内部Flash中
在未设置熔断保险的情况下使用“调试器”并配合上位机软件(例如ST-Link调试器配合STM32 ST-LINK Utility软件)即可读出代码,若代码未加密,即可通过IDA之类的软件进行反汇编获得汇编代码和伪C代码。
注意:为了能快速说清楚思路,这里都以最简单的情况来做假设,实际情况会比这复杂得多。
2、部分代码或者重要数据在外部EEPROM中
EEPROM常用I2C协议,这时就可以利用"逻辑分析仪",采集芯片运行时和EEPROM使用IIC协议通信的数据即可得到。
在代码中插入一些恶意数据
这里提供一种思路,ARM架构的部分芯片Cortex-M3/M4,提供了一个成为FBP(Flash Patch and Breakpoint Unit)的硬件调试组件,我们在使用Keil之类的软件进行打断点调试其实就是它的功劳,问题就出在这里:
首先来说一下打断点调试的原理:
1 2 3 4 5 6 7 | void main() { int i = 0 ; i = 1 ; / / 这里打断点 printf( "i = %d\r\n" , i); while ( 1 ); } |
例如我们给i++;这条语句打断点来调试,本质上调试器利用FBP提供的接口将i=1;这条指令替换为一条能产生中断的语句(bkpt指令),当我们点击run按钮时,执行到这里时就会触发一个中断,使得程序停在这里。
看到这里有没有什么想法?
假如我想使i被打印出来的值为4,应该怎么做?
聪明!可以利用该特性将i=1;替换为i=4;
但是....最多只能替换4个字节,
传输层
看到上图中的stm32f103和各种外部设备之间的红线了吗?
这条红线代表信号线的连接。
列举一下常用的通讯协议:
wifi模组 Uart
温湿度传感器 1-wire(单总线协议)
EEPROM I2C
根据不同的协议我们可以选择不同的硬件工具配合软件来进行分析获得数据包甚至伪造数据。
硬件工具可分为
调试器
ST-Link 推荐
J-Link
OpenOCD
逻辑分析仪
可以读取并自动显示为十六进制等格式,例如I2C 1-wire SPI UART等协议的数据。
USB-TTL
使用UART读取或发送数据
示波器
只要带宽和频率能跟上什么数据都能看,不过成本太高了,不推荐!
求个正式会员,感谢!
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。