二是Flash芯片型号需要得到编程器的支持。那问题来了,如果这个编程器不支持我的Flash的型号呢?那就自己写个单片机程序把程序读出来吧。
一般,在大学本科修读电子信息工程、通信工程或自动化专业的,有独立硬件项目开发经验的同学,都可以独立实现。
防护措施
介绍了这么多提取固件的工具和方法,那现在有哪些方法能有效防止产品固件被提取出来呢?
针对单片机固件提取的防护:我们可以通过编程的方式,把内部Flash区域设置为读保护状态,这样只要不对MCU进行解封,利用显微镜对内部Flash的电平状态进行破坏,是很难篡改固件的,至于读取固件,基本上不可能。例如,我们对stm32单片机的RDP寄存器进行设置,使内存保护等级提升至level 2,或者把重要的程序和数据利用PCROP功能保护起来,防止读取。
对外挂的Flash内的固件,目前,就本人所知,只要能取下来,获得型号,就可以得到固件。
那问题就变成了:如何不让攻击者把Flash安全地取下来?我建议硬件设计工程师把PCB上的Flash芯片,依靠电路设计保护起来。例如:设计Flash芯片在线检测电路,一旦Flash芯片的引脚出现断线,则立刻发动强电压攻击,将Flash芯片破坏,防止攻击者读取出Flash芯片中的固件。 总结
我们通过分析固件提取的原理,介绍固件提取可用的方法和工具以及相应的防护措施,希望可以使更多的电子工程师、嵌入式软件工程师重视智能设备固件的保护。同时,我们希望这篇文章可以给物联网安全从业人员带来一些物联网设备的防护建议。希望在智能设备开发工程师和安全测评工程师的共同努力下,我们身边的智能设备变得越来越安全。 |