使用安全元件的3大固件验证用例

描述

在当今的市场中,嵌入式电子系统种类繁多,并且需要获得越来越多的认证,例如工业应用的IEC62443安全标准,或者有时法规取决于其操作的关键性质。然而,安全性不仅仅是法规,而是关于实施基本和负责任的实践,今天我们将讨论小型和受限嵌入式系统的固件验证。每个嵌入式系统都基于其执行的代码(固件、软件、RTL 等)运行。在本系列的第一部分中,我们将研究如果固件受到攻击,连接的起搏器、工业网关、物联网婴儿监视器甚至工业机器中的电机会发生什么。

产品代码是公司许多知识产权(IP)所在的位置。连接起搏器的代码,控制着人类的生命,变得极其关键。同样的心脏起搏器也需要认证。在工业泵中,代码是使电机性能更好的原因,因为它比竞争对手更好地处理速度和扭矩调节。工业网关代码旨在以市场上最好的速度处理复杂的智能工厂网络中非常大的有效载荷,但该网关背后是包含机器和操作员的工业网络。现在,如果要改变机器操作,这很快就会成为工厂中个人的安全问题。物联网婴儿监视器代码可确保与网络的牢固连接,但也为父母提供有关新生儿的相关和私人信息。下面,我们分享了为什么公司的代码对其知识产权如此珍贵的四个原因。公司应考虑此处提到的各种现有标准中定义的威胁模型:

远程数字攻击:漏洞是否远程访问代码以影响目标或整个产品系列?

远程逻辑攻击:漏洞利用是否集中在代码中的错误上,该错误可以帮助黑客在网络上远程扩展攻击?

本地物理攻击:如果黑客可以物理访问产品,可以对代码执行哪些操作,而不一定是利用错误?

本地逻辑攻击:如果黑客对产品具有物理访问权限,代码错误中可以利用什么?

为了解决上述问题,近年来,政府和行业已开始制定物联网安全法规以创建标准。例如,在工业市场中,ISA/IEC62443标准记录了设计工业产品的安全实践。来自欧洲的EN303656遵循欧洲政府的安全法规和指南,在当地消费市场销售物联网产品。UL2900 最初非常注重软件安全实践,现在正被大公司视为消费者市场。在所有主要标准或法规中,您会发现建议验证代码是否真实的常见要求。

那么,可以做些什么来保护这段代码,需要权衡什么呢?

代码需要通过加密操作进行验证,以确保它是真实的。验证可以在嵌入式系统操作期间的不同时间点执行。

何时验证代码的真实性?

启动时:常见的技术术语是安全启动,它有多种方法可以使用对称密钥或非对称密钥实现,仅验证摘要、签名或整个代码映像。安全启动过程旨在确保在目标嵌入式设计上仅执行正版代码。

在运行时:这里更通用的术语是 IP 保护。固件工程师可以决定在系统运行期间的任何相关点实施代码验证,除了安全启动和无线 (OTA) 更新之外,以确保它没有被篡改。

OTA更新后:在物联网世界中,一旦通过网络“无线”推送新代码图像以替换现有代码图像,该新代码必须在运行之前验证为真实代码。

上述三个嵌入式安全功能总体上与代码验证实践相关。

现在,让我们看一下实现技术,然后我们将回顾它们的权衡。从根本上说,代码需要在企业环境中进行“签名”,这是理想情况下安全的,然后在嵌入式系统中进行“验证”。这些“签名”和“验证”操作由加密算法和对称或非对称密钥集执行。有四个主要步骤,如下图所示。第一个是查看制造过程中发生的情况以及如何处理代码加密和签名。第二个是代码如何加载到嵌入式系统(安全加载器)中。第三步涉及如何将代码下载到嵌入式系统中。第四步侧重于嵌入式系统制造后内部发生的情况,以确保在目标应用程序上运行的代码确实是真实的。

使用对称密钥在制造过程中对操作进行签名

对称加密基于共享密钥体系结构,换句话说,一对完全相同的两个密钥(对称密钥或也称为共享密钥)。主要的缺点是,如果有人访问一个密钥,另一个共享密钥是相同的,并且系统很容易被击败。此外,基本实践要求为每个设备使用不同的对称密钥,这会产生一个逻辑悖论:如何将唯一的对称密钥配置到整个设备队列中。因此,由于易于实施和项目进度限制,开发人员对整个设备群使用相同的对称密钥,因此对这些密钥的暴露变得更糟。但是让我们来看看它。第一步发生在您的公司环境中。

作为原始最终制造商 (OEM),您的代码将通过“哈希”函数传递。我们在这里使用 SHA256 作为示例。此哈希的输出是代码图像的 32 字节摘要。

该哈希是使用对称密钥(签名 OEM 密钥)执行的。

输出是“MAC”或消息身份验证代码。

MAC 提供给合同制造商 (CM),后者将在生产现场刷新主控制器。在此阶段,MAC 和对称密钥都由 CM 加载。

请注意,这是供应链漏洞发生的地方,因为密钥永远不应该暴露,当然不应该在制造过程中或微控制器内暴露。此时此刻,密钥将暴露给工厂内的操作员以及如果 OEM 尚未完成将执行 MAC 的设备。

电机

图 1:OEM 站点的对称签名

使用非对称密钥在制造期间对操作进行签名

更可靠且可扩展的方法包括利用非对称密钥而不是对称密钥。非对称密钥是两个密钥不同但通过加密算法在数学上相关的密钥对。例如,我们将使用ECC-P256,这是嵌入式系统中最常用和最有效的算法之一。私钥将对代码进行签名,公钥(根据私钥计算)将验证签名和/或摘要。

电机

图 2:OEM 站点的非对称代码签名

问问自己,在您的制造过程中,谁可以访问您的密钥?

无论您选择对称还是非对称架构,都有几个重要问题要问自己。由于您需要在嵌入式系统中加载加密密钥以验证映像,因此请问自己:

您能否信任您的合同制造商提供保护您签名代码的密钥?请记住,您的代码是您公司的 IP。如果他们有密钥,则可以访问您的代码。

您的 CM 是否有权访问签名密钥或用于验证的密钥?当您想要更改一个或多个合同制造商时,您的密钥会发生什么情况?

您是否因为拥有密钥而依赖您的合同制造商?

如果您雇用多个合同制造商,您如何管理各种密钥对集?

合同制造商如何保护密钥?安全审核结果是什么?

当涉及到制造中处理钥匙的物流时,也有很多供应链问题需要考虑。签名密钥始终是与所有可能的人隔离的最关键密钥,最好使用 HSM。但是现在您处于这样一种情况,即代码验证成为一个非常高的价值目标,因为它控制着您保护代码的程度(请记住,这是您公司的 IP)。密钥现在掌握在您的合同制造商手中,这是您的漏洞暴露增加的时候。您可能想问自己几个问题,包括:

您知道您的密钥是否安全存储或在员工之间共享吗?

由于制造设备网络保护不佳,您的密钥是否可以从工厂外部远程访问?

您的员工是否可以简单地使用USB记忆棒离开包含验证密钥的工厂,以及如何对其进行审核和信任?

如果负责钥匙的员工离开合同制造商的工作,钥匙会怎样?

您的嵌入式系统中的密钥在哪里?

如果您有公钥在传统微控制器闪存中验证固件,请三思而后行。然后,加密将成为代码的二进制映像的一部分。传统的工程师只需在微控制器或处理器的闪存中加载密钥(公共或对称)。让我们谈谈你应该问自己的问题和你应该思考的答案。

此密钥有多大价值,攻击者可以用它做什么?

截至今天,仍然有大量设备将密钥存储在闪存中。攻击者的一些基本策略是尝试使用各种技术访问设备的内存,例如缓冲区溢出(例如:Heartbleed)、HEX 文件提取或其他方法来访问位于内存中的密钥。这些都是非常真实的攻击,一些公司正在报告其系统中的此类漏洞。此时,所有赌注都已关闭,开始发起可扩展的攻击。如果每个密钥都可以像二进制映像中一样访问,那么它们就会变得可更改、可重现,并且远程访问大型队列变得越来越可能。如果我们还记得本文前面的内容,使用对称密钥并不是最可靠的代码签名策略。现在让我们假设验证代码的密钥位于控制器内的 OTP 内。OTP 方法是使您的系统更加健壮的合乎逻辑的第一步,因为现在密钥位于不可变的内存区域中。不可变并不意味着不可访问或不可读,它只是意味着不可更改。根据代码中的值或 IP 值,代码的值是应重视密钥的金额。因此,如果您的密钥是可访问的,则可以读取、复制和重复使用。现在,任何流氓用户都可以合法地使用该密钥来验证自己的代码。

如果是对称密钥,那将是最坏的情况,尤其是在系统连接云的情况下。当密钥被访问时,攻击者现在可以执行其流氓代码的MAC,并使用checkMAC轻松验证它,因为签名对称密钥与验证代码的对称密钥相同。更糟糕的是,如果没有使用密钥多样化,那么仔细考虑拥有整个设备组密钥的人员列表非常重要。您所有连接的婴儿监视器工业机器都可能被伪造,您的所有 OTA 更新都可能损坏,情况可能会变得更糟。

如果它是控制器闪存中的公钥,甚至是访问的 OTP,则流氓用户现在可以复制密钥并随意重复使用它以使用户授权合法化,然后安装恶意代码并在目标微控制器上运行它。

使用公钥基础结构与对称密钥体系结构要健壮得多,因为对代码进行签名的私钥是不同的,但在数学上与验证代码的公共相关。也就是说,访问公钥允许攻击者查看并触发代码的验证,还可以在执行之前进行解密。此时,问题就变成了,“现在我看到了代码,如果我更改代码并绕过公钥的验证怎么办?为了解决这个问题,除了适当的加密加速器(如Microchip安全元件的ECC-P256)之外,还需要微控制器或处理器内部的BootROM功能。BootROM 将确保控制器发出验证命令的内存区域也是不可变的,并且无法绕过。然而,访问公钥仍然是一个基本问题。

使用对称密钥与非对称密钥进行固件验证的优缺点是什么?

钥匙 缺点
对称 少:
简单加密
基本实现
好多:
被盗时很容易复制密钥
可扩展攻击的风险更高
难以部署 管理唯一密钥队列
非 对称 好多:
强大的加密技术
可扩展的关键基础架构
使用 ECC 密钥优化内存占用
一些:
固件验证没有缺点
ECDSA比SHA256更长的时间

在第 1 部分中,我们详细讨论了在应用程序中实现固件验证的重要性。您的应用程序代码需要使用加密操作进行验证,以确保它是真实的。验证可以在嵌入式系统操作期间的不同时间点执行,例如在启动时、运行时和安全固件升级期间。有许多技术可以使用非对称和对称加密算法实现固件验证。这些技术中的每一种都有自己的优势和权衡。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分