1、安全启动概述:内窥镜设备面临的威胁模型、安全启动的核心目标与原理、信任根(RoT)的概念
大家好,我是老张。做嵌入式安全这块有些年头了,尤其在医疗内窥镜领域摸爬滚打了好几个项目。今天咱们开始聊安全启动,这是整个系统安全的地基。地基没打好,上层建筑再漂亮也白搭。
1.1 内窥镜设备面临的威胁模型
先说说咱们的设备到底在防谁。你想想看,一台内窥镜从出厂到临床使用,中间要经过多少环节?生产、运输、仓储、临床使用、维修返厂……每个环节都可能被动手脚。
我遇到过最典型的场景:某医院的内窥镜在维修后,发现启动速度变慢了。拆开一看,Bootloader被人换过,里面塞了个挖矿程序。嗯,你没听错,连医疗设备都有人盯上了。
具体来说,威胁主要来自这几个方面:
- 固件篡改:攻击者替换掉合法的固件镜像,植入恶意代码。比如在图像处理算法里加个后门,偷偷把患者影像传出去。
- 启动链劫持:从Bootloader到操作系统,再到应用程序,任何一个环节被篡改,整个信任链就断了。
- 物理攻击:通过JTAG/SWD接口直接读取Flash内容,或者用电压毛刺、电磁注入干扰启动过程。
- 回滚攻击:把固件降级到有已知漏洞的旧版本。我见过一个案例,攻击者把内窥镜固件从v3.2回滚到v1.0,利用旧版本里的缓冲区溢出漏洞拿到了系统权限。
- 供应链攻击:在芯片生产或运输过程中植入硬件木马。这个比较高端,但确实存在。
核心观点:内窥镜设备一旦被攻破,后果不只是数据泄露那么简单。它直接关系到患者安全。试想一下,手术过程中内窥镜画面被篡改或者系统突然重启……所以安全启动不是可选项,是必选项。
1.2 安全启动的核心目标与原理
安全启动说白了就干三件事:验身份、保完整、防篡改。它的核心目标是确保设备上运行的每一行代码,都是经过授权的、没有被改过的。
原理其实不复杂,我尽量用大白话讲清楚。整个启动过程就像一场接力赛:
- 第一棒:BootROM。芯片上电后,最先执行的是固化在ROM里的代码。这段代码是只读的,改不了。它负责验证下一级Bootloader的签名。
- 第二棒:Bootloader。验证通过后,Bootloader被加载执行。它接着验证操作系统内核的签名。
- 第三棒:操作系统。内核启动后,验证文件系统和应用程序的签名。
- 第四棒:应用程序。最后,应用程序启动,整个信任链建立完成。
每一棒都要验证下一棒的合法性。只要有一环验证失败,系统就拒绝启动。这就是所谓的信任链。
个人经验:我在做第一个安全启动项目时,犯过一个低级错误——把公钥存在了可写的Flash里。结果攻击者直接替换了公钥,用自己的私钥签了个恶意固件,安全启动形同虚设。后来我学乖了,公钥要么熔丝烧死,要么放在一次性OTP里。
验证过程通常使用非对称加密:
- 固件发布时,用私钥对固件哈希值签名。
- 设备启动时,用公钥验证签名是否匹配。
- 匹配则启动,不匹配则停止。
这里有个细节要注意:验证的是签名,不是加密。很多人搞混这两个概念。签名是为了防篡改,加密是为了防泄露。安全启动只关心代码有没有被改过,不关心代码内容是否保密。
1.3 信任根(RoT)的概念
信任根,英文叫Root of Trust,简称RoT。它是整个安全体系的起点。你想想看,如果第一棒都不靠谱,后面的验证还有什么意义?
信任根必须满足三个条件:
| 特性 | 说明 | 实现方式 |
|---|---|---|
| 不可篡改 | 信任根本身不能被修改 | 固化在ROM或一次性可编程存储器中 |
| 不可绕过 | 系统启动必须经过信任根 | 硬件强制启动流程,无法跳过 |
| 可验证 | 信任根的行为可以被外部验证 | 提供测量值,支持远程证明 |
在实际的内窥镜系统中,信任根通常由以下几部分组成:
- BootROM:芯片内部固化的只读代码,是信任根的物理载体。
- 公钥:用于验证签名的公钥,存储在一次性可编程存储器(OTP)中。
- 硬件安全模块:比如独立的Secure Element或者芯片内置的HSM,提供密钥存储和密码运算。
避坑指南:我曾经在一个项目里,为了省成本,把信任根的公钥存在了外部SPI Flash里。结果呢?生产线上被人用编程器读出来,换上了自己的公钥。那批设备全部召回,损失惨重。记住:信任根必须放在芯片内部,而且必须是只读的。
说到信任根,不得不提硬件信任根和软件信任根的区别。硬件信任根依赖芯片内部的物理保护机制,比如熔丝、OTP、安全区等。软件信任根则完全靠代码逻辑来保证。我个人强烈建议用硬件信任根,因为软件信任根太容易被攻破了。你想想看,如果攻击者能修改你的验证代码,那信任根还有什么意义?
最后说一句,信任根不是选配,是标配。没有信任根的安全启动,就像没有地基的房子,看着挺高,风一吹就倒。
好了,这一章就到这里。下一章咱们聊聊具体的硬件实现——如何在内窥镜主控芯片上搭建安全启动的硬件基础。