推荐的防火墙配置
综合前面的例子和分析,为最大化安全考虑,我们推荐使用防火墙 时使用以下典型配置。 它配置了三个保护段, Flash 中的
代码和数据, SRAM1 中数据; SRAM1 中数据配置成不可共享且不可执行。 同时要注意修改编译器链接文件将三块受保护的
代码和数据分别放置到相应的下列定义的区域(Region)里。 链接文件, 对 IAR 是.icf 文件, 对 MDK 是.sct 文件。- /* Protected code segment start address and length */
- fw_init.CodeSegmentStartAddress = FW_CODE_START_ADDRESS;
- fw_init.CodeSegmentLength = FW_CODE_LENGTH;
- /* Protected non-volatile data segment (in FLASH memory) start address and length */
- fw_init.NonVDataSegmentStartAddress = FW_DATA_START_ADDRESS;
- fw_init.NonVDataSegmentLength = FW_DATA_LENGTH;
- /* Protected volatile data segment (in SRAM1 memory) start address and length */
- fw_init.VDataSegmentStartAddress = FW_VDATA_START_ADDRESS;
- fw_init.VDataSegmentLength = FW_VDATA_LENGTH;
- /* The protected volatile data segment can't be executed */
- fw_init.VolatileDataExecution = FIREWALL_VOLATILEDATA_NOT_EXECUTABLE;
- /* The protected volatile data segment is not shared with non-protected
- application code */
- fw_init.VolatileDataShared = FIREWALL_VOLATILEDATA_NOT_SHARED;
因为控制寄存器 FW_CR,包括 Prearm 位、 共享执行、 设置,只能在防火墙打开时才能修改, 因此在推荐配置下, 典型的调
用门代码执行序列应如下:
清除 Prearm 位 ( FPA)
执行安全算法
清除所有中间数据
清除 CPU 寄存器信息
设置 Prearm 位 (FPA)
退出保护区域
结论
本文根据 STM32 参考手册, 提出了一个 STM32 防火墙的安全配置, 可在实际 STM32 防火墙的案例中直接应用。也可以利
用本文加深对 STM32 防火墙功能的理解。
|