保护物联网设备可能永无止境

“爸爸妈妈,天空为什么是蓝色的?”

在您思索是为孩子讲解空气折射率的知识还是转移他的注意力时,您已经心知肚明,无论您怎样回答,孩子都会天真地继续追问

“为什么呢?”等问题

,直到您完全失去耐心。如果您有这种感受,那么欢迎来到保护物联网 (IoT) 的世界。这个世界里没有既定的标准,也没有绝对的错误。就像孩子提出的问题一样,我们可能只是闲聊或唤醒科学好奇心,至于何时停下来,则由作为系统设计师的您做主。就像上面的引导性问题一样,这个世界在很大程度上取决于问题的症结。

问题的症结

我们很快就会看到,保护物联网设备将可能成为一个需要投入无限成本,却又永无止境的问题(图 1)。不过,ARM* 物联网服务集团副总裁 Ian Ferguson 在最近的物联网设备安全峰会上表示,大多数物联网设备均有着非常严苛的成本目标。

1.即便多个安全层也可能无法为物联网终端设备提供全面保护。

Ferguson 曾警告:“经济学原理已经不再适用。安全的芯片不可能仅仅靠 1 美元就得到解决。”

因此,物联网安全领域的第一个问题就是“它对您有何价值?”这完全取决于问题的症结。

可惜这个问题并不简单,并不是一个可以根据设备的预期用途给出回答的问题。Ferguson 举了一个利用水族箱控制器中的漏洞攻击某赌场安全网络的例子。您必须要问的不是物联网设备应该做什么,而是它能够做什么。它可以使飞机上的副翼转向吗?它能够操作电厂的高压开关吗?它能够触发不必要的维护程序吗?它可以避开防火墙吗?

物联网设备安全的管理原则并不是使设备无懈可击,您做不到这一点。而是要让狡猾的攻击者明白,攻击付出的代价大于收益。作出这个决定不仅需要了解被攻击的设备能够带来哪些损害,也需要仔细研究物联网设备中的哪些部分需要保护以及如何保护。

要点

假设物联网设备中有四种对象:硬件、软件和固件、数据以及进出设备的消息。每当设备使用其中一个对象时,它会做出三个假设:

  • 对象来自可信来源
  • 对象没有被篡改
  • 对象将按照系统设计师的预期方式运行

每次使用时,设备可以信任这些假设,也可以测试它们。

也许举个例子很合适。假设我们有一个物联网设备管理高压交流电源开关上的一组传感器,并控制开关位置。根据这一功能描述,设备可能是一个非常简单的微控制器 (MCU)。现在我们有一个命令到达设备的网络端口,告诉控制器关闭开关。您希望控制器读取命令并为执行器供电,当开关闭合时,通过网络端口确认消息的新状态。

我们来回顾一下这个场景,从安全设计的角度来看看。首先,命令到达。您有一些选择:您是否相信这个命令是未经过修改的真实命令,或者说您是否对它进行了验证?您是否相信它的行为,或者您是否对它进行监控?

如果您认为这个命令是合法的,则表示您信任数据中心的远程应用(可能是公有云),并且互联网的所有部分恰好位于消息的传递路径上。有一些情形可以证明这种信任是正确的。一种情形可能是错误命令的结果无关紧要——当然不是对电源开关无关紧要,而可能是简单的消费玩具。另一种情形可能是设备没有直接联网,而是通过安全的连接连到可信中心。否则,您需要对命令进行验证。

幸运的是,有一种使用公钥加密进行验证的合理方法(图 2)。这种技术使用一对加密密钥,其中一个密钥只有持有者知晓,另一个密钥可供所有人使用。任何一个密钥的持有者都可以对使用匹配密钥加密的任何内容进行解密。因此对我们来说,服务器可以创建其打算发送的命令的散列,使用其私钥对其进行加密,然后将命令和加密的散列发送到您的设备。接下来您自己可以创建命令的散列,然后使用您的公钥对服务器的加密版本进行解密。然后您可以将自己创建的散列与解密的散列进行比较。如果这两者相同,那么您可以比较肯定的是:

  • 私钥的持有者发送了命令(因为您的公钥成功对其进行了解密)
  • 这个命令没有修改过,因为传输前的散列和接收后的散列匹配。

2.公钥加密可帮助设备验证消息

事实上,您不需要散列,您可以对整个命令进行加密和解密。但公钥算法需要大量计算资源,所以缺少硬件加密加速器和大量内存的设备会尽量缩短其必须处理的字符串的长度。除非常简短的命令之外,散列将比任何命令短很多。

您已经鉴定和验证了命令。您相信它是合法的。但为什么呢?您怎么知道自己使用的命令和公钥并非来自攻击者,而是来自您的服务器?因为有认证机构。认证机构是一个可信的第三方,已对公钥发起者的身份进行了验证。但您为何信任认证机构的证书呢?因为您使用相同的公钥算法(包含机构发给您的密钥)对证书进行了验证。但为什么…好了,您肯定明白了。除非您选择信任某方及其发给您的密钥,否则这个问题链将一直循环下去。这个问题有时可以归结为一个人将文件交给另一个人。

相信自己

到这里,偏执的人可能会认识到,我们仍然在做一些笼统的假设。如果有人篡改了您的加密应用代码或者操作系统,欺骗您接受这个命令呢?如果有人更改了您的公钥文件夹呢?或者更糟糕的情况,如果有人在您的硬件中置入了一个隐秘的后门呢?

如果风险很小,或者如果您不了解高价值系统曾遭遇过哪些攻击,那么上面这些问题听起来可能有点异想天开。毕竟,谁会对不值钱的消费类设备上的应用代码进行篡改?但确实有人攻击了成千上万台物联网婴儿监控器,创建了一个僵尸网络,然后用它发动了历史上最具破坏性的拒绝服务攻击之一。这并不是异想天开:即使您不是飞机控制系统或核电站的设计师,您也需要考虑这些问题。

第一次接收和验证对象时,验证软件和固件可以像按照您信任的散列检查对象阵列那样简单。更新必须按照针对我们命令的上述流程进行验证。每次加载操作系统和应用代码时,许多安全系统都会执行这一任务。但您为什么相信自己保存的散列呢?对于这个问题,您为什么相信自己的散列函数呢?最终,这种回归将我们引向了一个重要的概念:信任根。

解决方案根

现在,许多 CPU 架构都包含一种安全操作模式,在这种模式下,您可以确信代码的可信性、数据的正确性并且所有任务都得到适当授权。这种模式可让您对设备的加密和身份验证流程充满信心,并为您提供一种存储和保护密钥及证书的方法,使攻击者更难以更改它们。

实施信任根对 CPU 设计师而言并不是一件简单的工作:他们面临着与用户相同的无限回归问题。信任根必须从可信硬件着手,启动可信代码。现在的可信硬件是一个相对的术语。如果您在设计一些无害的东西,这可能意味着您从一家大型厂商购买了微控制器单元 (MCU)。如果您正在研究用于核武器的起爆装置,这可能意味着您使用严格的正规验证和功能安全标准来自己设计芯片,监督贵组织所控制或检查的国内工厂的芯片制造,并纳入到设计防篡改、旁路攻击防护和物理上不可克隆的功能 (PUF),从而为芯片提供不可复制的秘密 ID 号。然后您就可以信任硬件了。

安全启动可能同样具有挑战性。您必须确保启动代码是未经过修改的真实代码。我们当然可以使用与输入命令相同的解决方案:公钥解密和散列。我们如何在加载代码之前解密签名并计算散列值?

在大型系统中,答案是硬件安全模块 (HSM)。图 3 是一个受篡改和入侵检测保护的电路板或安全框,其中包含安全密钥存储和通常基于硬件的可信加密引擎。HSM 监督安全启动流程,在启用前对每个代码模块进行验证。

3.硬件安全模块包含在防篡改安全模块中进行身份验证和加密/解密所需的所有硬件和代码。

但在 MCU 中呢?行业仍在研究如何将盒级 HSM 简化为低成本芯片上的 IP 模块。Ferguson 认为这是不可能的。其他人则认为,对于大多数系统而言,较简单的措施(例如将开机密码和密码保存在片上非易失性内存中)就足够了。

无论您如何保护启动过程,都有一个信任根的第三个基本组件:内存保护。对于可信代码、密钥存储、系统软件和数据结构而言,必须只能从信任根内部进行读取或修改的内存区。这需要一个硬件内存保护单元,它本身只能在信任根内进行设置。显然,这个内存保护单元将不得不初始化为已启用安全启动的状态。

实际上,系统会以这种方式运行。在初始化时,安全启动进程将在内存中创建一个可信区域,并将其加载到可信的代码和数据中,包括加密例程、可信的轻量级管理程序、加密密钥和证书。接下来,这一管理程序将以加密形式加载操作系统和应用代码,为每个任务分配物理保护的内存区域,并在激活之前使用散列和公钥方法对每个代码块进行解密和验证。通过这种方式,您可以比较肯定设备中的所有活动代码都来自可信来源且未被污染。内存保护硬件可确保即使出现问题,任何任务都不能读取或写入其他任务的代码或数据。

最后一个功能还可以让您的设备运行您不信任的代码。内存保护功能可以保证即使恶意代码也无法从其指定的区域分支出来,破坏其邻居,或在未经管理程序同意的情况下执行 I/O 操作。

那么,合法应用如何执行 I/O 操作呢?当然是通过系统调用。但您还有其他选择。所有应用都经过了身份验证,可以让它们按照自己的方式执行系统 I/O 调用。或者,您可能需要 I/O 请求和任务间通信,以便进入管理程序进行审批。然后管理程序可以检查规则,以查看请求是否适合于请求任务。管理程序甚至可以向证书证明其有权提出请求的任务提出要求。

活动监控器

所有这些措施都是为了防止被篡改的代码、数据或命令进入设备,或防止它们在进入设备后执行非法操作。但在关键系统中,您可能还需要更高级别的安全性:主动监控设备行为。

这个概念很简单:可信源知晓设备应该执行和不应该执行的操作,并监控设备的行为。简单而言,这个监控器可能是一个代码块,甚至是一个在设备可信区域运行的硬件状态机。当您可以通过一组紧凑的规则定义正确的行为时,这种方法是有效的。内存保护实际上就是一个例子:一组规则决定哪些代码可以访问内存中的哪些地址,保护单元的硬件执行这些规则。

随着规则变得越来越复杂,通过在可信软件中评估的规则进行监控可能不再可行。或者系统行为可能过于复杂,无法成功捕捉一组规则。解决这个问题的一个建议是使用机器学习。原则上,您可以通过训练神经网络来识别优劣行为,而不必制定规则。然后网络可以不断评估系统的行为,并在看到不良行为时发出警报。

但深度学习网络也有自己的问题。在如今的就业市场中,具备所需设计和培训技能的人才很难找到。将监督式学习所需的成千上万个标记示例组合起来很难,甚至不可能。构建示例集的过程容易受到攻击:犯罪分子可能会导致您的示例集存在偏见,从而导致网络忽略特定攻击。最后,在推理模式下运行训练网络所需的计算和内存资源非常重要。这对于 1 美元的 MCU 来说是不可能的。

对于大多数关键系统而言,异构冗余是异乎寻常的一个步骤。在这种方法中,您有三个不同的系统(如果可以在运行期间暂停和禁用设备,则有两个系统),每个系统专为设备的执行而设计和编程。每个系统都使用不同的硬件,由使用不同算法和库的不同团队进行编程。

这三个系统并行运行,通过多数投票的方式来确定设备的行为。若要成功破解设备,攻击者必须同时攻击这两个完全不同的系统。这样煞费苦心的攻击可能听起来很荒唐,但一些军事和其他危险设备可能需要这样的冗余系统。

付款

我们已经看过,开发安全的物联网设备可能需要可信的硬件和符合功能安全要求的方法。这可能是指加密硬件加速、防篡改的密钥存储位置、可信操作模式、实时设备监视器,甚至是完全冗余。

但这些对于 1 美元的 MCU 没有任何意义。怎么办呢?

有些人会忽视这个问题或提供一些令牌,从而轻松击败安全攻击。其他人会将安全责任上报到物联网中心,为端点终端设备提供安全庇护,将物联网设计转化为边缘计算网络。随着潜在销量的增长以及人们对威胁现状的了解,仍有其他供应商会利用先进工艺节点的大量晶体管来解决问题。在 7 纳米时,带某种内部 HSM 的三冗余 MCU 是可行的。

但 ARM 的 Ferguson 的观点更激进一些。在设备安全峰会上,Ferguson 主张预先了解保护物联网设备的真实成本并改变行业的业务模式,以便将成本分摊到整个供应链。这可以通过评估与物联网设备通信的系统的版税或关税来完成。或者半导体厂商可以从已完成的物联网系统所带来的收入或成本节省优势中获益。也许更有可能的是,安全设备只需 25 美元(而非 1 美元),真正安全的系统将由垂直一体化公司部署,这些公司可以将设备成本并入到系统成本中,然后从服务合同、维护以及系统数据的价值中收回成本。

与旧的 MCU 商用半导体市场相比,这是一个全新的世界。但这个世界面临着更多威胁,迟早要认真对待。

 


CATEGORIES : IoT, 系统安全/ AUTHOR : Ron Wilson

Write a Reply or Comment

Your email address will not be published.