新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > STM32F103RB的 Bootloader软件安全设计方案

STM32F103RB的 Bootloader软件安全设计方案

作者:时间:2009-10-19来源:网络收藏

通过实验,验证了当部分应用程序内容被修改时,可以正常进入运行模式,在放置的跳转指针尝试至应用程序函数入口地址时,程序可以跳转至非法读取程序执行读取命令,得到程序和被部分修改的应用程序代码。复制到新的芯片中后运行启动升级模式,将升级程序下载升级程序包覆盖应用程序区域,就得到了完整的Bootloader程序和应用程序代码。


3 双重完整性检验与验证
实际应用中,Bootloader引导应用程序结构的芯片上使用时,厂商可以通过改进Boot-loader的,最大程度地避免这种篡改应用程序方式带来的代码被抄袭的风险。由于芯片读保护有效时,前3片区的自动写保护可以保证中断向量表不被篡改,从而Bootloader在Flash地址启动时首先执行。
在更新应用程序的过程中,除了升级程序包采用加密、方式由Bootloader在升级模式下将内容解密后写入应用程序区域外,Bootloader运行模式下确认Flash中的内容为完整的合法程序和阻止非法程序的运行是的出发点。下面介绍的是采用双重完整性检验的提高代码性的方法:
①由于芯片的Falsh的写操作需要对片区擦除后进行,可以在各片区的特定地址内依次放置厂商设定的1~2字节伪随机码,组成密码序列。在非法读取程序或跳转指针写入时,对片区擦除过程将破坏伪随机码而不能重新写回,导致密码序列的破坏。
②CRC检验是较为常见的一种数据传输检错方式,随着技术的发展,已经出现了能够适用于嵌入式系统有限资源的快速算法。将应用程序代码区域的CRC检验值在升级程序时保存在Flash中的约定位置。对应用程序代码的非法修改将使CRC检验值改变。
加入了双重完整性检验方案的Bootloader功能模块流程如图4所示。

方案的设计可以使芯片上电复位后,自Flash起始地址运行的Bootloader及时发现篡改攻击造成的改变,并防止非法代码得到执行机会。在安全设计方案验证实验中,设计Bootloader在运行模式下验证密码序列的完整性,并将应用程序区域的CRC检验值与保存在约定位置中初始检验值比较,从而验证Flash内容未被篡改。在验证失败时,输出验证失败信息和当前的CRC检验值后进入死循环,而不再启动应用程序。
对方案的验证实验采用在应用程序片区的末尾写入伪随机码序列和32位CRC检验算法,依次对Flash的4~128 片区单独进行擦除后写入非法代码进行验证,均得到图5所示的验证失败信息。

实际测试中,对不同片区的篡改操作得到不同的CRC检验值与合法应用程序CRC检验值互不相同。双重完整性检验方案在芯片上运行带来的时间开销约为80ms,也能够被产品启动过程所接受。在厂商进行产品开发时,可以进一步设计Bootloader验证失败时进入自毁程序,通过修改读保护状态使芯片被整片擦除,从而销毁所有代码,提高代码的安全性。


结 语
嵌入式系统是硬件与高度结合的技术应用,通过对STM32F103RB芯片上进行Bootloader引导应用程序结构开发时的篡改攻击风险验证,可以看到嵌入式产品被抄袭风险的严峻性。在实际应用中,嵌入式系统设计应当结合软件结构的特点和硬件提供的保护特性,灵活使用不同的保护方式,有效地提高程序的安全性,达到最大程度地对厂商代码和知识产权的保护。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭