历史上的今天
返回首页

历史上的今天

今天是:2026年02月28日(星期六)

正在发生

2023年02月28日 | 安全启动 - STM32防内外攻击技术

2023-02-28 来源:zhihu

在 STM32 系列里,STM32L0、STM32L4,提供了 Firewall 硬件。Firewall 硬件提供了调用门 Callgate 技术。也就是说,对于安全敏感的代码与操作,只有一个入口。任何不通过这个接口,而对受保护的代码与数据进行访问,则会导致系统重启。如同字面意思,Firewall 形成了一个围墙,形成了一个城堡,同时提供一个入口,来提供运行时内部的保密、完整、可靠、可用特性。

通过 Firewall 单一入口的功能,可以形成对外的简单接口。该接口简单,所以安全敏感的操作细节就不会对外泄露。因为外界只能通过接口访问,那么在内部操作之中所使用到的密钥也不会泄露。

STM32 Firewall 通过启动代码激活后,就不能再关闭,该功能可以保证安全敏感的代码和数据在上电周期内不会被非法访问。这不同于 MPU。MPU 一定要配合特权模式与用户模式的分离机制,否则设置会被修改。

Firewall 的缺点是中断处理。中断处理需要读取中断向量表。如果中断向量表放在防火墙之外,则会造成防火墙之外的读操作。那么根据防火墙的保护机制,则系统会重启。如果放在防火墙之内,则中断处理函数需要继续调用其它函数,那么所有其它函数都要放入防火墙内。考虑到实际系统要处理的中断情形复杂,在实现中,一般在进入防火墙之前,会将中断关闭。

同样的,作为一个动态保护技术,Firewall 不能单独存在,必须结合防外部攻击的 RDP 一起使用。

STM32 SBSFU 在 STM32L4 上利用了防火墙增强安全。使用 STM32L4 SBSFU 需要考虑中断带来的影响。


既防外又防内

STM32 也提供了不少内存保护技术,既可以防护内部攻击,例如恶意代码注入,也可以在 RDP 为0的时候起到一定程度的对外防护作用。


PCROP

我们先来看几个场景:

① 设想某一个公司,它有一个非常好的算法。所以它不希望普通权限的员工了解它。但是这个算法又要在开发中被其他模块或者说其他员工使用。源代码肯定不能提供。提供二进制代码,也面临被复制的风向。那到底怎么办?

② 设想某公司有一个模块,需要提供给其他公司在此基础上做二次开发。需要对模块进行保密。源代码肯定不能提供。提供二进制代码,也面临被复制的风险。不提供的话,其他公司又没有办法进行二次开发? 那到底怎么办?

③ 安全启动包括校验流程与密钥。为了安全,自然并不希望其他人用任何手段来了解。


这几个问题本质上都是同一个问题,也就是希望能够保护一段代码既不能被外部 JTAG 读出来,也不能被后续软件访问。此时,PCROP 就可以发挥作用了。


很多 STM32 系列都有的专有代码读出保护 PCROP,即使是默认的 RDP 级别,也就是 RDP 为0,一旦对某段区域设置了 PCROP 保护,这段代码也无法读出来。这可以用来解决这个问题。

PCROP 是将一段区域设置成可以执行,那么任何代码向该区域进行读写操作,都会引起系统重启。PCROP 在很多 STM32 系列都得到了支持,例如 STM32F4、STM32F7、 STM32L0、STM32L1、 STM32L4、STM32H7、STM32G0 等。不同的 STM32 系列 PCROP 配置, 可能会有所不同。有的是按大小设置,有的是按 Sector 扇区设置。

PCROP 具有较强的既防内又防外的功能,适合保护算法。同时 PCROP 配合 RDP 以及其他动态保护技术像 Firewall 以及 MPU,可以用来构造保密区域来保护密钥。

PCROP 的硬件机制只允许指令读取。这就意味着,需要 PCROP 保护的代码,常量要移到保护区域之外,或者要将常量变成代码。同时,在编译时,要让编译器不要生成文字库。对于文字库编译选项,不同的编译器,名称会有不同。对于Keil 现在叫Execute-only,对于 IAR 则是 no data read in code memory 没有在代码区的数据读取。用户在生成受 PCROP 保护的代码,需要根据不同的编译器,勾选不同的选项。

PCROP 所保护的区域只允许执行,也就意味着无法对它单独擦除。如果需要更新,则需要在 RDP 从1到 0 进行整片擦除后,才能重新配置。整片擦除时,也可以选择保留 PCROP 所保护的区域,不做改变。

STM32 SBSFU 使用了 PCROP 来保护密钥。


Secure User Memory

安全启动构造了一个信任链,它是一级一级来检查,一级一级的传递信任。尽管我们使用加解密技术验证了后续环节,后续的环节应该是可靠的。但是请记住没有绝对的安全。我们不知道,是否有其他的攻击手段,让恶意的代码还是混进来了。

所以,对于安全链条的起点,信任根,我们有一个保密的需求。为了安全,我们不希望信任链条后续的环节,来访问这个最初的安全启动代码。即如果我们有办法,将安全最敏感的部分,也就是这个信任根,与后续的环节隔离开来,那我们的系统就会安全很多。

我们前面介绍的一些技术,例如,动态保护技术 MPU 结合特权模式与用户模式,可以用来构造这样的一个隔离防护。当然使用 MPU,特权模式与用户模式需要细心的管理。

再例如 Firewall,可以用来构造一个隔离防护。当然,使用 Firewall 需要小心处理中断。

如果除此之外,还有没有一种简单的设置,让安全启动的代码与后续代码彼此分离呢?这个时候,Secure User Memory 就可以发挥作用了。

在最新的多个 STM32 系列提供了一个被称之为安全用户存储的功能。这些 STM32 系列有H7、G0、STM32WB 以及 STM32L5。安全用户存储的功能名称,在不同的 STM32 系列可能有细微的差异, 同时功能也会有细微的差别。

Secure User Memory 该功能通过选项字节设置,属于静态防护。Secure User Memory 一个最主要的功能在将启动与后续代码隔离开来。也就是放在 Secure User memory 的 Flash 里的代码,在执行完自身之后,可以通过一个服务调用或者一个寄存器设置,让后续其它非可信代码无法感知安全启动代码的存在。也就是后续代码再也无法访问之前的代码。这个功能可以用来提供安全启动代码的保密性。同时可以防止恶意代码去修改安全启动增强完整可靠性。

目前我将 Secure User Memory 功能归类为既能防内,又能防外,是因为:


◎ 在某些 STM32 系列上,一旦设置了 Secure User Memory 所保护的内容就再也不能被 JTAG 访问。

◎ 在另外的一些 STM32 系列上,我们也观察到,一旦设置 Secure User Memory 大小以及 UBE 被设置,即使 RDP 还是1,JTAG 再也无法连接上去,相当于达到 RDP2 的效果。


在使用 Secure User Memory 时,请务必参考实际所选用型号的用户手册,或者参考我们的 SBSFU 的实现。STM32 SBSFU 使用了 Secure User memory 来进行安全启动代码与用户代码的隔离。


WRP

WRP 可以将某段区域或者空白区域设置不可写,那么代码通过协议栈错误擦除软件或者写入到空白 Flash 就不可能发生。所有的 STM32 系列都具有 WRP 这个功能。WRP 是个静态设置,直接通过选项字节进行设置。WRP 既可以防内被程序误写,也可以防外,防止JTAG 擦除。然而,WRP 的选项,在 RDP 不为2的情况下,是可以被修改的。所以如果希望 WRP 设置一次就达到一个 Read-Only 的效果,需要配合 RDP 为2使用。


系统监控

如果攻击已经发生,最重要的事情是能够监测到。对此,STM32 提供了多项安全监控技术。

IWDG: 独立看门狗。如果外界攻击发生,导致系统不能及时喂狗,则系统会重启。

Anti-tamper: 可通过将 MCU 防攥改管脚连接到设备外表面,若设备被强行打开,则会触发相应操作。

Clock Security System: 可监控外部时钟。若外部时钟紊乱,则自动切换到内部时钟。

设备温度:可通过内部温度传感器监测温度异常 。

供电电压监控:如果电压降低到某个水平,则系统不再响应。

STM32 SBSFU 目前实现了防攥改的软件功能。用户可根据需要加入其他硬件功能。


推荐阅读

史海拾趣

功得(CONQUER)公司的发展小趣事

在市场竞争日益激烈的环境下,功得公司意识到仅仅依靠创新是不够的,还需要有高品质的产品来赢得客户的信任。因此,公司开始注重产品质量管理,建立了完善的质量控制体系。功得公司严格把控原材料采购、生产工艺和成品检验等环节,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使得功得公司的产品在市场上赢得了良好的口碑,品牌知名度也逐渐提升。

DEVCON公司的发展小趣事

在竞争激烈的电子行业中,提供优质的服务是赢得客户信任的关键。DEVCON公司深知这一点,因此不断创新服务模式,提升服务质量。公司建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。同时,公司还积极开展培训活动,提升员工的技能水平和服务意识。这些创新举措赢得了客户的广泛赞誉和信赖,为DEVCON公司的稳定发展提供了有力保障。

EasySync公司的发展小趣事

EasySync公司一直秉承环保理念和社会责任。公司在生产过程中注重节能减排和资源循环利用,努力降低对环境的影响。此外,公司还积极参与公益事业和社会活动,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

请注意,以上故事均为虚构内容,仅供参考。如果您对EasySync公司的实际发展历程感兴趣,建议您查阅相关官方资料或新闻报道。

Advanced Monolythic Ceramics公司的发展小趣事

为了进一步提升竞争力,EasySync公司积极寻求与行业领先企业的战略合作。通过与这些企业的合作,公司不仅获得了更多的技术支持和市场资源,还共同研发出了一系列创新产品。这些产品不仅丰富了公司的产品线,还进一步巩固了公司在同步技术领域的领先地位。

安森德(Ascend)公司的发展小趣事

安森德公司自创立之初,便以技术创新为核心竞争力。在半导体工艺领域,公司研发团队不断攻坚克难,成功研发出具有自主知识产权的超结MOSFET技术。这一技术的导通损耗和开关损耗均达到行业领先水平,为电源设备带来了更高的效率和更低的能源消耗。凭借这一技术突破,安森德的产品迅速在市场上获得认可,为公司的快速发展奠定了坚实基础。

Codeco Corporation Of Vermont公司的发展小趣事

在电子行业的浪潮中,Codeco Corporation Of Vermont(以下简称Codeco)由几位热衷于科技创新的工程师创立。他们看到了电子产品日益普及的趋势,决定投身这个充满机遇的领域。初创时期,资金短缺、市场竞争激烈,Codeco面临着巨大的挑战。然而,凭借着对技术的执着追求和对市场的敏锐洞察,他们成功开发出了一款具有创新性的电子产品,迅速在市场上占得一席之地。

问答坊 | AI 解惑

汽车防盗器

.遇盗报警,反应迅速:仅需几秒 可在全球范围内短信通知车主警情,车主可在全球范围内查询车辆状态,  进行远程控制断油断电等操作; 2.  可选兼容原车防盗器或独立设防方式; 3.  移动MGPS定位,随时掌握车辆方位; 4. ...…

查看全部问答>

高频功率管驱动问题

E型的高频功率放大电路中,高频管gate极驱动用同频率的正弦信号与方波信号驱动对匹配电路谐振有影响吗? 丙类放大是功率管工作在强饱和非线性状态,也就是说在开关状态吧…

查看全部问答>

网上看到一个msp430基础时钟问题 希望有高手能解决

硬件环境:MSP430F149 LF/XT1振荡器:32768HZ XT2振荡器:8MHZ 内部DCO: //**********实验目的***************************** //用MSP430F149的P5.4(48脚),P5.5(49脚),P5.6(50脚) //分别输出MCLK,SMCLK,ACLK时钟信号 //************* ...…

查看全部问答>

GERBER软件问题

大家都用什么GERBER软件阿?有供应商推荐VISUAL CAM NW这款GERBER TOOL, 不是很清楚, 有谁知道的给解释以下, 谢谢…

查看全部问答>

华为Quartus 指南

好资料,无条件为坛友共享!…

查看全部问答>

关于wince数据库打不开的原因?

昨天尝试着在一个应用程序里用wince数据库,结果数据库创建成功了,却打不开数据库,郁闷之极。代码如下: //1、挂载数据库卷,如果存在则打开,不存在,就新建一个         if (!CeMountDBVol(&m_ceGuid,DBFILENAME,OPEN_ALWA ...…

查看全部问答>

wince如何支持SOCK_RAW

我的是wince5.0,应该支持才对,但是实际上编程的时候 socket( AF_INET , SOCK_RAW , IPPROTO_IP ) ; 得到10044的错误。 该加什么让其支持的?…

查看全部问答>

想买一个开发板自己搞点东西,帮忙介绍一个好一点得!!

作很多项目(嵌入式linux、vxworks、symbian等),但总觉得还缺点什么,功力稍欠火候!!想买一个开发板自己搞点东西,帮忙支支招。多谢!! 注:最好能跑linux、vxworks、wince。…

查看全部问答>

PFC中的磁性元件的设计

通过上篇文章对比分析,适合Boost储能电感的磁心材料有MnZn铁氧体材料、非晶材料、金属磁粉心材料。MnZn铁 氧体材料具有高频损耗小、价格低的优势,但是饱和磁通密度 Bs低,易饱和,非晶材料虽然 Bs高,磁导率高,但 是价格较高,同时两者需要开 ...…

查看全部问答>

CC2500应用技巧注意事项

SPI 接口时序注意事项:     CC2500通过4线SPI兼容接口(SI,SO,SCLK和CSn)配置。这个接口同时用作写和读缓存数据。SPI接口上所有的地址和数据转换被最先在重要的位上处理。    SPI接口上所有的处理都同一个包 ...…

查看全部问答>