游戏开发|嵌入式开发:保护嵌入式系统的要素4——安全引导加载程序

游戏开发|嵌入式开发:保护嵌入式系统的要素4——安全引导加载程序

引导加载程序是嵌入式系统中一个特别有趣的组件 , 引导加载程序经常被嵌入式开发团队忽视并在最后一刻开发 , 尽管它们通常很难实现并为系统创建关键功能 。
什么是安全引导加载程序?
安全引导加载程序不同于标准的普通引导加载程序 , 因为引导加载程序通常是:
信任链的一部分
验证新的软件映像
验证软件映像的完整性
需要访问加密算法和加速器
非安全引导加载程序通常只使用校验和来确保软件映像是完整的 , 但在接受并尝试运行映像之前几乎没有做任何其他事情 , 从安全角度来看这是非常危险的 。
安全引导加载程序试图解决四个主要问题:
防止固件逆向工程
防止未经授权的固件修改
加载未经授权的固件
在未经授权的设备上加载固件
安全引导加载程序的行为方式有很多种 , 让我们快速、高层次地看一下整个过程是如何工作的 。

引导加载过程
在嵌入式开发中 , 当准备好部署新的固件映像时 , 公司将生成一个固件签名 , 该签名将伴随将在现场部署的固件 。 为新固件生成hash , 然后使用公司私钥对其进行加密以生成签名 。 然后通过引导加载程序将签名和固件(加密或未加密)发送到嵌入式系统 。 如果你查看微控制器供应商提供的许多安全引导加载程序示例 , 你通常会发现安全引导加载程序将接受加密的固件映像 , 但也可能会发送未加密的映像 , 具体取决于引导加载程序的配置方式 。 即使安全引导加载程序确实接受加密映像 , 该映像通常在运行中未加密 , 然后将其本地存储在闪存中的某个地方(可能是内部或外部) 。
【游戏开发|嵌入式开发:保护嵌入式系统的要素4——安全引导加载程序】引导加载程序收到映像后 , 将使用存储在系统中的公钥解密签名以获得固件的原始hash 。 然后 , 引导加载程序可以散列接收到的未加密图像 , 并比较两者是否相等 。 如果它们相等 , 则引导加载程序已验证固件映像是真实的(来自签名)并且其完整性没有受到损害(来自哈希) 。 此时 , 引导加载程序可以完成更新固件和引导新软件映像的过程 。
如果黑客决定尝试将自己的图像放置在设备上 , 他们将需要拥有公司的私钥才能生成适当的证书 。 如果他们以某种方式可以访问固件并想要进行更改 , 他们将再次需要能够通过签名对新hash进行身份验证 , 而这是他们无法做到的 。 如果他们试图向设备发送新固件 , 引导加载程序将能够检测到它不是有效的固件 , 然后会丢弃映像并继续运行它已经运行的应用程序代码 。
微控制器需要硬件支持什么?
开发安全的引导加载程序可能具有挑战性 。 根据安全级别和所需功能 , 并非每个微控制器都适用 。 嵌入式开发人员通常需要支持以下功能的微控制器:
硬件隔离
硬件加密引擎
内存保护单元(MPU)
真随机数生成器(TRNG)
使引导加载程序不可变的闪存位
安全存储密钥的地方
这些只是微控制器实现安全引导加载程序解决方案所需的一些功能 。 你可以想象 , 成功在于细节 , 并且需要对硬件和安全引导加载程序解决方案有专业的了解 。 因此 , 致力于安全嵌入式产品的团队应该尽早开始他们的安全引导加载程序解决方案 , 而不是等到最后一刻才尝试实施它!
结论
安全引导加载程序比传统的引导加载程序实施涉及更多 。 他们将更新和运行新应用程序映像的能力与验证和验证新映像完整性的需要结合在一起 。 这要求引导加载程序实现加密服务 。 嵌入式开发人员可以利用特定于微控制器的安全引导加载程序解决方案 , 从而降低团队实施安全引导加载程序解决方案所需的安全知识 。 如果这些解决方案还不够 , 团队必须尽快启动他们的安全引导加载程序解决方案 , 因为成功构建、测试和验证它需要几个月的时间 。