玩IoT安全的小伙伴必不可少的一项技能就是查datasheet,配合IDA等调试器的分析,本文以STM32F405BootLoader为例,简单的介绍了相关的分析流程。
分析STM32F405的BootLoader,需要datasheet,stm32的datasheet通过搜索引擎就可以轻松找到。
在datasheet中可以看到如下描述
说BootLoader位于systemmemory。那么systemmemory在哪呢
从上图可以知道systemmemory在0x1fff0000。所以,我们把0x1fff000到0x1fff77ff的内存里的数据都dump到stm32f405.bin中,然后可以做些检查了。比如使用strings
输出的很多字符串都没有意义,或许可以试试其他编码,在strings手册可以看到
所以使用-el再次运行,这次得到的结果就一目了然了
我们还可以检查代码是为哪种架构编译的,以及是大端序还是小端序等,可以使用binwalk检查。
从结果中可以看到,从offset0开始,引擎可以将字段读取为有效的小端Thumb指令,至少有1079个有效的指令。有了这些信息后我们接下来就可以通过IDA分析了。
打开IDA,可以看到如下窗口,我们需要设置如下
如果想只使用Thumb,而不是ARM的话,可以点击processoroption-》ARMspecific options
点击上图的红框
在上图窗口中将ARMinstructions设置为no。ThumbInstruction还是默认。一路点击ok。然后IDA再次弹窗,这次要求我们设置memory
我们已经知道BootLoader的地址是从0x1fff000开始的。我们我们在ROMstart address输入该值。在Loadingaddress也同样输入。
点击ok
然后会有小窗提示我们可以使用alt+G在ARM和Thumb指令集之间切换
二进制文件被加载后,点击一个地址,然后Alt+G,然后就会跳出如下窗口
Value0x1意味着在0x1fff0000后的代码会被作为Thumb来处理。其实这是反应ARM处理器的状态寄存器中的T标志位,如果T为1则表示正在执行Thumb,T为0表示正在执行ARM
当IDA出现下面的提示时
我们就需要手动找entrypoint了。一般通过查看中断向量表来查找。
我们只需要知道表中的哪个条目是Reset向量,因为Reset向量是我们的入口点。Reset向量是CPU将开始执行代码的地址。
STM32F405是Cortex-M4内核,所以查找Cortex-M4的向量表。
在Cortex-M4的用户手册中可以看到
在上表中,我们可以知道:在偏移0x0出的指针是初始栈指针的位置,在0x4是Reset向量,在0x8是NMI,NMI即Non-MaskableInterrupt,不可屏蔽中断。Reset是处理器启动时开始执行代码的地址。
在IDA中,我们可以将0x0,0x4,0x8等处的数据定义为“doublewords”(32位宽)。在0x1fff0000右键,选中doubleword即可
对0x4,0x8进行同样的操作,然后对应前面给出的表格添加注释
0x0偏移处的初始堆栈指针值指向我们SRAM的一块memory,所以这是有意义的。
0x4偏移处的Reset向量0x1FFF3DA1,也有自己的意义,选中就右键,选择jumpto operand
前面提到的Cortex-M4手册中已经说明,Restet的最低有效位增加了1,因此,实际的Reset向量是 Reset向量-1
熟悉IDA的师傅们一看IDA顶部的颜色是完全的灰黄色,这就说明到现在为止文件中还没有任何东西被定义
我们在Reset向量-1的位置单击,按下C,IDA就开始反汇编了
在上图中可以IDA顶部有些蓝色了,说明已经定义了很多子程序。针对向量表中其他的指针继续这么操作,可以得到进一步的结果
然后就可以开始研究固件内部复杂的工作机理了
在上图中,我们看到0x40023c04加载到r0中,然后值0x45670123和0xCDEF89AB依次写入0x40023C04的memory,红色底色显示的地址是将要访问的memory,其尚未映射到IDA文件中。也就是说,目前IDA文件中映射的0x40023c04没有memory。我们可以在STM32F4的datasheet中查找它的用途。
如下图所示,可以看到0x40023c04指的是Flash接口寄存器内存段中的某个地址。
如下图所示,还能知道:从0x40023c00基址偏移0x4是Flashkey regiter
第二个红框中是两个key值,它们是后续解锁flashcontrol register的关键。
本文通过strings,binwalk等工具进行准备工作,然后通过IDA分析IoT固件,并找到了后续针对解锁flashcontrolregister工作的两个关键key。这一切工作都离不开datasheet,文末还是要强调datasheet的重要性,对了,datasheet千千万,一定要对号入座,看准型号再找datasheet,而且datasheet基本没有通用性可言,切记切记~
另提一下可以得到datasheet的途径:
Google
去芯片制造商的官网
Yandex.ru
Emm,没错,是俄语的,相当于战斗民族的百度
在youtube上看iot安全的视频时,俄语出现的评率远大于英语
4. 淘宝。淘宝上很多芯片都有卖,问问店家,一般都会给数据手册。在此感谢马云爸爸,这是我们安全研究人员的福报~
5. 其他途径,包括去细分领域的研究论坛,读源码等等,反正我碰到这种情况基本就放弃了Orz
参考:
https://www.pvsm.ru/stm32/163608
http://www.linfo.org/strings.html
https://www.pentestpartners.com/security-blog/
《idapro权威指南》
相关操作学习
IDA教程系列:学习IDA的使用方法和对程序分析的相关技巧。点击前往 合天网安实验室 开始操作!