保护和控制存储在闪存中的软件

描述

  许多系统使用外部标准闪存芯片来存储不包括嵌入式非易失性程序存储的处理器的操作程序。这很棒,因为它允许轻松的闪存扩展和软件修改,也许在生产线上作为客户下载或在维护操作期间。缺点是OEM失去了对闪存内容的控制,可能允许未经授权的复制或修改。

  然而,这不仅仅是需要担心的收入损失。如果将恶意软件下载到系统中,OEM 的声誉可能会受到影响。对于医疗设备等系统,OEM甚至可能面临责任问题。

  夺回安全性

  硬件安全芯片可以帮助将控制权带回 OEM。可编程、高度安全的智能卡处理器已经存在了一段时间,但需要写入额外的固件,并且可能会给系统增加不可接受的成本。另一方面,硬件认证芯片是交钥匙设备,不需要内部编程或详细的加密算法知识,价格适中。

  这些芯片的工作方式非常简单。系统微处理器向芯片发送质询,然后芯片使用加密算法将质询与安全存储在非易失性存储器中的密钥相结合。然后将响应发送回系统。芯片内部实现的算法的选择方式是,观察总线的观察者可以看到挑战和响应,无法确定秘密的价值。根据芯片存储密钥的安全性,复制这样的个性化芯片可能非常困难。

  虽然这些芯片可以以各种方式用于增加系统的安全性,但有两个软件保护功能特别令人感兴趣。第一种安全启动提供了一种方法来确保仅执行真实的程序,同时仍允许进行升级。第二种是反克隆,可防止未经授权的系统构建或设计的直接复制。

  安全启动

  片上系统(SoC)器件通常包括一个小型引导ROM,其中包含用于在执行外部闪存内容之前初始化芯片操作的程序。该引导ROM可以很容易地重新编程,以与外部认证芯片配合使用。

  在系统发货之前,OEM 会将验证值与程序一起存储在闪存中。这是通过将程序摘要与密钥相结合来计算的,其副本存储在身份验证芯片中。哈希算法(如安全哈希算法 1 (SHA-1) 或 SHA-2)用于生成程序摘要。黑客可能能够更改闪存的内容,但在不知道秘密的情况下,无法生成新的验证值。

  在引导ROM中执行代码期间,微处理器实时生成存储在闪存中的可执行程序的摘要。然后,此摘要作为质询发送到身份验证芯片。芯片将摘要与其内部存储的机密相结合,响应可以被视为一种程序签名。如果响应与闪存中存储的验证值匹配,则允许继续执行闪存内容;如果没有,微处理器可以循环到下载器,等待加载有效的闪存映像。

 如果黑客可以将修改后的软件发送到身份验证芯片,使用逻辑分析仪读取响应,然后将此验证值与修改后的代码一起存储在闪存中,则此方案可能存在安全漏洞。但是,有几种方法可以解决此问题。

  最好的解决方案是使用身份验证芯片,该芯片不返回预期的验证值,而是在输入时获取该值并返回真/假以指示匹配。摘要通常太大,芯片太慢,攻击者无法猜测修改代码的正确验证值。为了获得更高的安全性,安全芯片可以加密方式将随机质询(或者可能是当前时间或处理器序列号)与真/假相结合,并将其返回给处理器。这样,一种简单的开关电路修改就不能用来欺骗处理器。

  另一种方法是机械地防止访问安全芯片的引脚。对于ASIC SoC,安全芯片可以芯片形式购买,并以多芯片封装集成到主封装中。另一种方法是购买类似于BGA封装的安全芯片,这不允许探测,因为焊盘是完全隐藏的。或者,电路板上的安全芯片可以保形涂上环氧树脂,以防止进入。

  在某些情况下,系统可能能够使用引导ROM中的软件计算闪存程序的摘要。但是,在启动时验证整个内存阵列可能过于耗时,特别是对于具有较大闪存的系统。有两种方法可以解决此问题:增量验证或硬件加速。

  使用增量验证方案时,仅使用引导ROM代码验证存储在闪存中的模块加载器。在加载每个新模块以执行之前,模块加载程序使用身份验证芯片在该模块上执行相同的验证过程。这些模块还可以在空闲时间提前验证,以提高事件响应性能。

  现代处理器并不总是包括硬件哈希引擎,但高级加密标准(AES)或三重数据加密标准(3DES)引擎非常普遍。通过将加密引擎配置为在基于密码的消息身份验证代码 (CMAC) 模式下运行,可以轻松使用这些加密算法以硬件速度生成程序摘要。

  反克隆

  大多数 OEM 现在使用分包商来构建其设备。因此,系统有时会被过度构建,以便在本地销售或可能在灰色市场上销售。或者,竞争对手或黑客可能会克隆系统并以较低的成本出售,因为他们不必投资软件开发。如果系统仅使用现成的组件,则可以降低制造成本,但这会使未经授权的系统更容易构建。

  使用硬件安全芯片可以结束这些克隆,而不会显著增加系统的大小或成本。编译到嵌入式软件中有许多测试,以确保是否存在正确编程的硬件安全芯片。OEM控制编程到芯片中的秘密,并控制编程芯片到分包商的分配。作为另一种选择,芯片供应商可以为 OEM 管理芯片的个性化。

  有几种方法可以实现这些软件测试。一种简单的方法是在软件中编译挑战和预期响应。如果安全芯片丢失或具有错误的机密,则响应不匹配,并且可以禁用系统或返回下载模式以获取更正的文件。在程序中的许多地方添加这些检查,黑客可能很难删除它们,特别是当代码在初始加载时由ROM验证时。

  这些软件测试的其他选项包括将质询生成和响应检查分布在程序的各个部分。来自安全芯片的响应可用作动态软件模块解密的密钥。响应可以使用单独的常量进行 XOR‘d,然后用作跳转向量。如果安全芯片支持它,则可以从代码的不同部分发送多个质询并组合以生成单个响应。

  在典型的实现中,芯片中包含许多不同类型的测试,因此即使一种机制被击败,其他机制仍然可以完成其工作。理想情况下,这些测试依赖于安全芯片中存储的多个密钥,确保即使泄露一个密钥值,也能保持整体系统安全性。

  秘密安全

  如果很容易从身份验证芯片中获取秘密,那么所有这些都无关紧要。在这种情况下,黑客可以创建正确的软件验证值,或者系统克隆者可以使用简单的微处理器对安全芯片进行建模。认证芯片至少以两种方式保护机密:使用强大的加密算法和使用特殊的硬件芯片设计技术来防止对芯片的直接或间接攻击。

  过去,某种形式的线性反馈移位寄存器(LFSR),也称为循环冗余校验(CRC),被用作哈希算法。由于实施成本低,这些算法很常见,但是对于现代高速PC,这些算法通常可以在短时间内进行分析和破解。

  如果密钥大小太小,LFSR / CRC算法尤其弱,因为使用相对简单的软件可以进行暴力攻击。对于大小是否足够大,没有通用规则,但大多数现代系统使用 128 位或更长的机密。

  目前,SHA 算法是安全启动和反克隆的最佳选择。SHA-1今天已经足够安全,但它有一些已知的弱点,并且已经被SHA-2系列(包括SHA-256和SHA-512等)所取代。由于大多数嵌入式系统的使用寿命以年为单位,因此使用最新算法将确保系统的安全性,即使在其使用寿命结束时也是如此。

  也可以购买使用公钥(非对称)算法的身份验证芯片,这些芯片通常更慢且更复杂。系统端的软件也可能要复杂得多。与使用哈希算法的身份验证芯片相比,它们可以提高安全启动方案的安全性,同时对软件克隆提供很少或根本没有额外的好处。

  但一个强大的算法是不够的。如今,微探针很容易在eBay上购买,因此对于芯片来说,防止攻击者入侵是很重要的,攻击者可能会蚀刻封装并微探针一些内部节点来获取这些秘密。现代芯片通过在整个芯片上安装有源内部屏蔽,超过三层窄宽度金属,内部模块上的额外加密以及没有暴露的测试垫来防止这种情况。

  黑客还可能尝试高或低电压或过高的时钟频率,以使身份验证芯片泄露其秘密。这些攻击可以通过内部篡改检测器来防御,如果尝试在正常工作范围之外进行操作,则会关闭芯片。这些是常见的安全块,大多数芯片制造商在通常的篡改块之外添加其他专有安全组件。

  嵌入式实施

  嵌入式系统中的认证芯片可以检测对存储在闪存中的系统软件的未经授权的修改或复制。此外,它们还可以以各种其他方式用于交换会话加密密钥,向远程服务器提供节点身份验证,验证序列号存储,安全地存储制造和/或维护历史记录以及各种其他与安全相关的功能。

  高安全性认证芯片不需要设计人员具备任何特殊的加密知识,并且可以集成到嵌入式系统中,而不会影响上市时间。它们通常采用小型封装,甚至适用于对空间最敏感的应用。其中一款芯片是阿特梅尔 AT88SA102S。它将SHA-256算法与256位密钥长度和易于使用的单线接口相结合,与所有微处理器兼容。该设计包括一个覆盖整个电路的有源屏蔽、篡改检测器和加密的内部存储器。

  审核编辑:郭婷

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

全部0条评论

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

×
20
完善资料,
赚取积分