为什么端到端安全对嵌入式系统很重要?

发表于2021年8月19日
由Secure Code Warrior
案例研究

为什么端到端安全对嵌入式系统很重要?

发表于2021年8月19日
由Secure Code Warrior
查看资源
查看资源

嵌入式系统帮助提供了很多现代技术。从你的汽车上的自适应巡航控制,到你的智能冰箱上的Wifi。随着网络攻击的增加,确保这些系统的安全已成为关键。

嵌入式设备是黑客攻击的主要目标,因为一个成功的攻击可以让入侵者获得由它们产生、接收和处理的数据。这往往会对由嵌入式设备驱动的更大系统产生严重影响。例如,关闭F-15战斗机中收集各种相机和传感器数据的嵌入式设备,会大大影响飞机的防御能力。

我们写这篇文章是为了涵盖你开始开发安全嵌入式系统所需要的一切。下面是包括的内容。 

  • 什么是嵌入式安全?
  • 实施嵌入式安全时面临的挑战。
  • 是什么让一个嵌入式系统变得 "安全"?
  • 为什么端到端安全在嵌入式生态系统中很重要。
  • 一些嵌入式安全工具。
  • 典型的嵌入式解决方案缺少什么?
  • 嵌入式安全的未来。

什么是嵌入式安全?

嵌入式安全提供工具、流程和最佳实践,以确保嵌入式设备的软件和硬件安全。 

由于嵌入式系统的硬件模块很小,它们有各种内存和存储限制。因此,将安全措施纳入其中成为一个巨大的设计挑战。然而,尽管这可能是个挑战,但这是个时代的需要。

很多由嵌入式设备驱动的小工具和机器也与互联网相连。这意味着,黑客可以未经授权访问它们,并运行任何恶意代码。 

嵌入式设备中的黑客往往可以蔓延到其他连接的组件,和/或使整个系统瘫痪。例如,我们假设一个攻击者能够获得对一个允许司机将他们的汽车置于自动驾驶状态的嵌入式设备的控制。然后,黑客可以引导汽车离开公路,或进入交通,可能会造成很大的损失。

关键的嵌入式系统安全挑战

嵌入式系统安全并没有得到应有的重视。这里有几个原因。

  1. 缺乏开发人员的意识。

开发人员通常不知道开发安全嵌入式设备的最佳实践。这一方面是因为第2点,另一方面是因为嵌入式应用比传统的软件应用要复杂得多。了解它们的安全含义,并为所有的用例编写安全、高性能的代码,而且是在一个受限的微机环境中,这可能是一个挑战。 

  1. 缺乏标准化。

目前缺乏嵌入式系统的网络安全标准。尽管汽车行业正在慢慢尝试改变这种状况。在过去的几年里,研究人员已经发布了相当多的出版物,涉及智能汽车的网络安全考虑。几个值得注意的是SAE J3061,"网络物理车辆系统的网络安全指南:"UNECE WP.29关于网络安全和软件更新过程的规定

  1. 使用第三方组件

很多嵌入式设备需要第三方的硬件和软件组件来运作。通常情况下,这些组件的使用没有经过任何安全缺陷和漏洞的测试。 

  1. 过时的软件

过时的固件通常充满了错误和潜在的可利用漏洞。尽管在一个小型的嵌入式设备上定期更新固件可能特别困难,但这并不是可以忽视的事情。

  1. 直接互联网连接

许多嵌入式系统和设备都直接连接到互联网。这意味着它们没有企业防火墙的保护,而企业防火墙可以检测和防止网络攻击。由于资源有限,在这样一个受限的环境中实施严格的安全级别变得非常困难。

  1. 规模化的攻击

嵌入式设备通常是大规模生产的。这意味着一个单一的漏洞或缺陷可能会影响到数以百万计的设备,有时甚至是全世界的设备。因此,遏制嵌入式系统攻击的影响可能是一个巨大的挑战。

是什么让嵌入式系统变得安全?

在下面的章节中,我们将研究安全嵌入式系统的一些软件和硬件特征。

硬件安全最佳实践

一个安全的嵌入式系统具有。

  • 一个可信的执行环境

可信执行环境(TEE)允许对安全关键操作进行硬件级隔离。例如,用户认证可以在一个隔离的区域执行,这可以更好地保护敏感信息。

  • 适当划分的硬件资源

不同的硬件组件,如处理器、缓存、内存和网络接口等,应该被适当地隔离,尽可能独立地提供其功能。这有助于防止一个组件的错误传播到其他组件。

  • 可执行空间保护(ESP

可执行空间保护,即ESP,是将某些内存区域标记为不可执行的做法。如果有人试图在这些被标记的区域内执行任何代码,就会抛出一个异常。

软件安全最佳实践

在构建嵌入式软件时,应牢记以下最佳实践。

  • 使用安全启动。

当一个嵌入式设备启动时,启动图像会使用加密算法进行验证。这确保了启动顺序是正确的,并且软件(固件和任何其他相关数据)没有被篡改。 

  • 使用微内核操作系统

微内核操作系统要比传统的操作系统小得多,包含了其功能的一个子集。内核空间很小,大量的用户服务(如文件系统管理等)被保存在一个单独的空间里,称为用户空间。 由于在内核空间中运行的代码和操作较少,攻击面大大减少。

  • 使用正确包装的软件应用程序

任何和所有的软件应用程序都应该是自成一体的,并进行适当的包装。例如,如果一个应用程序需要一个第三方的依赖,它不应该被全盘安装在操作系统上。相反,它应该是应用程序包/容器的一部分。

  • 验证所有的输入

从外部和/或不可信任的来源收到的任何和所有数据,在传递到关键的软件和/或硬件组件之前,应进行适当的净化和验证。 

如果一个应用程序从外部API集成中获取数据,并在此基础上切换一些设置,那么在改变设置之前,应严格验证收到的数据。

  • 保护静止的数据。

所有存储在嵌入式设备上的敏感软件、数据、配置文件、安全密钥和密码等都应该得到保护。这通常是通过加密来实现的。用于加密数据的私人密钥必须存储在专用的、特制的安全硬件中。

安全金字塔--嵌入式系统的端到端安全

安全曾经是一个事后的想法的日子已经一去不复返了。一个非功能性的要求。今天,安全需要是内在的。设备在设计上需要安全。为此,在嵌入式环境中实施端到端的安全要求是至关重要的。这意味着:在选择你的硬件时,在定义你的系统架构时,在设计你的系统时,当然还有在编写代码时,都要考虑安全问题。

从硬件开始

无论你的软件安全多么强大,如果你的硬件缺乏,你将很容易受到攻击。片上安全技术可以实现安全启动,以及对加密功能和机密的有效管理。一些硬件组件还可以使操作系统提供各种安全功能,如系统呼叫异常检测、文件系统加密和访问控制策略。

一个容错的系统

架构一个容错系统有很多理由,避免差分故障分析攻击只是其中之一。在这种攻击中,潜在的黑客可以使用故障注入技术,试图在嵌入式设备中产生错误。然而,有几种可能的方法来检测和防范这种故障。

  • 复制最关键的操作,以便在任何时候都可以比较不同的输出,以检测故障的注入。
  • 默认失败。当处理多个条件时(在If条件或switch块中),总是在默认情况下失败,即当没有其他匹配时。
  • 引入随机行为。在关键操作前添加小的、随机的延迟,确保它们的时间永远无法预测。这是入侵检测的关键,因为它使黑客很难确定操作的模式,并进行定时攻击。
  • 保护性的防护罩。制造商应使用防护罩来覆盖最关键的部件,保护它们不受外部操纵。
  • 检测异常波动。感知电压、电流或其他数值的异常波动,并相应地提出异常。

确保你的应用程序和操作系统的安全

在应用层面建立你的设备的防御涉及到。

  • 选择经过测试、信誉良好的第三方软件和硬件组件,可以定期更新。
  • 向开发人员提供有关嵌入式系统安全的最佳做法的培训。
  • 使用微内核操作系统,以确保在内核空间执行最低数量的操作。
  • 监测和保护软件攻击,包括病毒、特洛伊木马和恶意软件。
  • 删除任何和所有不必要的服务。你的固件应该只拥有你绝对需要的东西。例如,你可能不需要传输文件,或捕捉数据包,所以你可以禁用文件传输协议和网络包,如telnet。
  • 使用安全协议,如SFTP、IPsec、SSL、TLS、SSH和DNSSEC。

嵌入式系统安全的工具

这里有一个不完全的清单,列出了可以帮助确保嵌入式系统安全的工具。

  • 总线爆破器。一个高速调试平台,可以与硬件调试端口互动。
  • 萨拉。解码各种协议,如串行、SPI和I2C等。你可以使用社区建立的协议分析器,也可以建立你自己的。
  • Hydrabus。开源的多工具硬件,可用于嵌入式硬件的调试、黑客攻击和/或渗透测试。
  • Exploit。一个开源的物联网(IoT)安全测试和利用框架。
  • FACT(固件分析和比较工具)。用于自动化固件安全分析的框架。
  • Routersploit。 一个用于嵌入式设备的开源开发框架。
  • Firmadyne:基于Linux的嵌入式固件仿真和动态分析的开源系统。

现代嵌入式安全解决方案的不足之处是什么?

即使有各种解决方案可用于调试、利用和笔测试嵌入式解决方案,但它们并没有被轻易使用。一个很大的重点仍然是保护设备的物理安全,但在保护与软件有关的攻击方面却做得不够。即使是最简单和容易避免的应用安全风险和漏洞,在现代嵌入式设备中仍然很常见。  

其中一个很大的原因是开发人员缺乏对嵌入式安全的认识。根据Tripwire进行的一项调查,68%的IT专业人士认为他们的员工对潜在的漏洞没有足够的认识。

开发人员不知道的是:应该选择哪些安全协议,避免哪些框架,隔离哪些硬件组件,如何处理敏感数据,以及如何确定哪种加密算法是最安全的。这种普遍的知识匮乏和对最佳实践的漠视,使运行在嵌入式设备上的应用程序很容易受到损害。

嵌入式安全的未来

嵌入式安全市场正在进行大量的工作。专家认为,在2021-2026年期间,该市场的复合年增长率(CAGR)可以达到5.5%的数字。随着越来越多的物联网设备被推出,我们可以预期新的嵌入式安全标准将被建立。

可穿戴医疗设备的采用越来越多,这也将增加对可靠的嵌入式安全解决方案的需求。对于包含和处理敏感医疗数据的设备,它们需要通过某些安全检查表,我们希望这将使供应商和工程师更加关注安全问题。

在未来,我们也可能有解决方案,允许对嵌入式设备中的主要软件和硬件组件进行远程可视性、监测和控制。这将真正成为嵌入式系统安全领域的一个游戏规则的改变者。

在一天结束时,数字签名、加密数据、添加防火墙、实施访问控制和随机化操作只能让你走到这一步。为了建立真正安全的设备,开发人员需要接受培训来编写安全代码。识别潜在的安全风险,并在应用程序设计阶段缓解这些风险,对于使系统的本质安全有很大的帮助。

Secure Code Warrior 可以如何帮助

Secure Code Warrior'的旗舰产品 -learning platform - 有许多互动挑战,courses ,和评估,可以帮助培训开发人员编写安全的C/C++代码。该平台上的内容是针对框架的,而且非常吸引人。我们的C/C++:嵌入编码挑战从MISRA C、AUTOSAR C++(MISRA C++)和IEC中获得灵感。

开发人员可以踏上个性化的学习之旅,在这里他们可以识别C/C++特有的漏洞,更重要的是学会修复这些错误。在这个过程中,开发人员可以跟踪他们的进展,以确定他们的弱点,甚至可以与他们的同行享受友好的编码比赛。了解更多关于我们如何用我们的解决方案帮助汽车和运输行业

想知道我们的挑战是如何互动和注重嵌入的吗?今天就在learning platform ,尝试一些C/C++:嵌入的挑战吧!

查看资源
查看资源

作者

Secure Code Warrior

Secure Code Warrior 通过向开发人员传授安全代码编写的技能,建立以安全为导向的开发人员文化。我们的旗舰产品敏捷Learning Platform 为开发人员提供了基于技能的相关途径、动手实践missions 以及上下文工具,帮助他们快速学习、构建和应用技能,从而快速编写安全代码。

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

为什么端到端安全对嵌入式系统很重要?

发表于2021年8月19日
通过Secure Code Warrior

嵌入式系统帮助提供了很多现代技术。从你的汽车上的自适应巡航控制,到你的智能冰箱上的Wifi。随着网络攻击的增加,确保这些系统的安全已成为关键。

嵌入式设备是黑客攻击的主要目标,因为一个成功的攻击可以让入侵者获得由它们产生、接收和处理的数据。这往往会对由嵌入式设备驱动的更大系统产生严重影响。例如,关闭F-15战斗机中收集各种相机和传感器数据的嵌入式设备,会大大影响飞机的防御能力。

我们写这篇文章是为了涵盖你开始开发安全嵌入式系统所需要的一切。下面是包括的内容。 

  • 什么是嵌入式安全?
  • 实施嵌入式安全时面临的挑战。
  • 是什么让一个嵌入式系统变得 "安全"?
  • 为什么端到端安全在嵌入式生态系统中很重要。
  • 一些嵌入式安全工具。
  • 典型的嵌入式解决方案缺少什么?
  • 嵌入式安全的未来。

什么是嵌入式安全?

嵌入式安全提供工具、流程和最佳实践,以确保嵌入式设备的软件和硬件安全。 

由于嵌入式系统的硬件模块很小,它们有各种内存和存储限制。因此,将安全措施纳入其中成为一个巨大的设计挑战。然而,尽管这可能是个挑战,但这是个时代的需要。

很多由嵌入式设备驱动的小工具和机器也与互联网相连。这意味着,黑客可以未经授权访问它们,并运行任何恶意代码。 

嵌入式设备中的黑客往往可以蔓延到其他连接的组件,和/或使整个系统瘫痪。例如,我们假设一个攻击者能够获得对一个允许司机将他们的汽车置于自动驾驶状态的嵌入式设备的控制。然后,黑客可以引导汽车离开公路,或进入交通,可能会造成很大的损失。

关键的嵌入式系统安全挑战

嵌入式系统安全并没有得到应有的重视。这里有几个原因。

  1. 缺乏开发人员的意识。

开发人员通常不知道开发安全嵌入式设备的最佳实践。这一方面是因为第2点,另一方面是因为嵌入式应用比传统的软件应用要复杂得多。了解它们的安全含义,并为所有的用例编写安全、高性能的代码,而且是在一个受限的微机环境中,这可能是一个挑战。 

  1. 缺乏标准化。

目前缺乏嵌入式系统的网络安全标准。尽管汽车行业正在慢慢尝试改变这种状况。在过去的几年里,研究人员已经发布了相当多的出版物,涉及智能汽车的网络安全考虑。几个值得注意的是SAE J3061,"网络物理车辆系统的网络安全指南:"UNECE WP.29关于网络安全和软件更新过程的规定

  1. 使用第三方组件

很多嵌入式设备需要第三方的硬件和软件组件来运作。通常情况下,这些组件的使用没有经过任何安全缺陷和漏洞的测试。 

  1. 过时的软件

过时的固件通常充满了错误和潜在的可利用漏洞。尽管在一个小型的嵌入式设备上定期更新固件可能特别困难,但这并不是可以忽视的事情。

  1. 直接互联网连接

许多嵌入式系统和设备都直接连接到互联网。这意味着它们没有企业防火墙的保护,而企业防火墙可以检测和防止网络攻击。由于资源有限,在这样一个受限的环境中实施严格的安全级别变得非常困难。

  1. 规模化的攻击

嵌入式设备通常是大规模生产的。这意味着一个单一的漏洞或缺陷可能会影响到数以百万计的设备,有时甚至是全世界的设备。因此,遏制嵌入式系统攻击的影响可能是一个巨大的挑战。

是什么让嵌入式系统变得安全?

在下面的章节中,我们将研究安全嵌入式系统的一些软件和硬件特征。

硬件安全最佳实践

一个安全的嵌入式系统具有。

  • 一个可信的执行环境

可信执行环境(TEE)允许对安全关键操作进行硬件级隔离。例如,用户认证可以在一个隔离的区域执行,这可以更好地保护敏感信息。

  • 适当划分的硬件资源

不同的硬件组件,如处理器、缓存、内存和网络接口等,应该被适当地隔离,尽可能独立地提供其功能。这有助于防止一个组件的错误传播到其他组件。

  • 可执行空间保护(ESP

可执行空间保护,即ESP,是将某些内存区域标记为不可执行的做法。如果有人试图在这些被标记的区域内执行任何代码,就会抛出一个异常。

软件安全最佳实践

在构建嵌入式软件时,应牢记以下最佳实践。

  • 使用安全启动。

当一个嵌入式设备启动时,启动图像会使用加密算法进行验证。这确保了启动顺序是正确的,并且软件(固件和任何其他相关数据)没有被篡改。 

  • 使用微内核操作系统

微内核操作系统要比传统的操作系统小得多,包含了其功能的一个子集。内核空间很小,大量的用户服务(如文件系统管理等)被保存在一个单独的空间里,称为用户空间。 由于在内核空间中运行的代码和操作较少,攻击面大大减少。

  • 使用正确包装的软件应用程序

任何和所有的软件应用程序都应该是自成一体的,并进行适当的包装。例如,如果一个应用程序需要一个第三方的依赖,它不应该被全盘安装在操作系统上。相反,它应该是应用程序包/容器的一部分。

  • 验证所有的输入

从外部和/或不可信任的来源收到的任何和所有数据,在传递到关键的软件和/或硬件组件之前,应进行适当的净化和验证。 

如果一个应用程序从外部API集成中获取数据,并在此基础上切换一些设置,那么在改变设置之前,应严格验证收到的数据。

  • 保护静止的数据。

所有存储在嵌入式设备上的敏感软件、数据、配置文件、安全密钥和密码等都应该得到保护。这通常是通过加密来实现的。用于加密数据的私人密钥必须存储在专用的、特制的安全硬件中。

安全金字塔--嵌入式系统的端到端安全

安全曾经是一个事后的想法的日子已经一去不复返了。一个非功能性的要求。今天,安全需要是内在的。设备在设计上需要安全。为此,在嵌入式环境中实施端到端的安全要求是至关重要的。这意味着:在选择你的硬件时,在定义你的系统架构时,在设计你的系统时,当然还有在编写代码时,都要考虑安全问题。

从硬件开始

无论你的软件安全多么强大,如果你的硬件缺乏,你将很容易受到攻击。片上安全技术可以实现安全启动,以及对加密功能和机密的有效管理。一些硬件组件还可以使操作系统提供各种安全功能,如系统呼叫异常检测、文件系统加密和访问控制策略。

一个容错的系统

架构一个容错系统有很多理由,避免差分故障分析攻击只是其中之一。在这种攻击中,潜在的黑客可以使用故障注入技术,试图在嵌入式设备中产生错误。然而,有几种可能的方法来检测和防范这种故障。

  • 复制最关键的操作,以便在任何时候都可以比较不同的输出,以检测故障的注入。
  • 默认失败。当处理多个条件时(在If条件或switch块中),总是在默认情况下失败,即当没有其他匹配时。
  • 引入随机行为。在关键操作前添加小的、随机的延迟,确保它们的时间永远无法预测。这是入侵检测的关键,因为它使黑客很难确定操作的模式,并进行定时攻击。
  • 保护性的防护罩。制造商应使用防护罩来覆盖最关键的部件,保护它们不受外部操纵。
  • 检测异常波动。感知电压、电流或其他数值的异常波动,并相应地提出异常。

确保你的应用程序和操作系统的安全

在应用层面建立你的设备的防御涉及到。

  • 选择经过测试、信誉良好的第三方软件和硬件组件,可以定期更新。
  • 向开发人员提供有关嵌入式系统安全的最佳做法的培训。
  • 使用微内核操作系统,以确保在内核空间执行最低数量的操作。
  • 监测和保护软件攻击,包括病毒、特洛伊木马和恶意软件。
  • 删除任何和所有不必要的服务。你的固件应该只拥有你绝对需要的东西。例如,你可能不需要传输文件,或捕捉数据包,所以你可以禁用文件传输协议和网络包,如telnet。
  • 使用安全协议,如SFTP、IPsec、SSL、TLS、SSH和DNSSEC。

嵌入式系统安全的工具

这里有一个不完全的清单,列出了可以帮助确保嵌入式系统安全的工具。

  • 总线爆破器。一个高速调试平台,可以与硬件调试端口互动。
  • 萨拉。解码各种协议,如串行、SPI和I2C等。你可以使用社区建立的协议分析器,也可以建立你自己的。
  • Hydrabus。开源的多工具硬件,可用于嵌入式硬件的调试、黑客攻击和/或渗透测试。
  • Exploit。一个开源的物联网(IoT)安全测试和利用框架。
  • FACT(固件分析和比较工具)。用于自动化固件安全分析的框架。
  • Routersploit。 一个用于嵌入式设备的开源开发框架。
  • Firmadyne:基于Linux的嵌入式固件仿真和动态分析的开源系统。

现代嵌入式安全解决方案的不足之处是什么?

即使有各种解决方案可用于调试、利用和笔测试嵌入式解决方案,但它们并没有被轻易使用。一个很大的重点仍然是保护设备的物理安全,但在保护与软件有关的攻击方面却做得不够。即使是最简单和容易避免的应用安全风险和漏洞,在现代嵌入式设备中仍然很常见。  

其中一个很大的原因是开发人员缺乏对嵌入式安全的认识。根据Tripwire进行的一项调查,68%的IT专业人士认为他们的员工对潜在的漏洞没有足够的认识。

开发人员不知道的是:应该选择哪些安全协议,避免哪些框架,隔离哪些硬件组件,如何处理敏感数据,以及如何确定哪种加密算法是最安全的。这种普遍的知识匮乏和对最佳实践的漠视,使运行在嵌入式设备上的应用程序很容易受到损害。

嵌入式安全的未来

嵌入式安全市场正在进行大量的工作。专家认为,在2021-2026年期间,该市场的复合年增长率(CAGR)可以达到5.5%的数字。随着越来越多的物联网设备被推出,我们可以预期新的嵌入式安全标准将被建立。

可穿戴医疗设备的采用越来越多,这也将增加对可靠的嵌入式安全解决方案的需求。对于包含和处理敏感医疗数据的设备,它们需要通过某些安全检查表,我们希望这将使供应商和工程师更加关注安全问题。

在未来,我们也可能有解决方案,允许对嵌入式设备中的主要软件和硬件组件进行远程可视性、监测和控制。这将真正成为嵌入式系统安全领域的一个游戏规则的改变者。

在一天结束时,数字签名、加密数据、添加防火墙、实施访问控制和随机化操作只能让你走到这一步。为了建立真正安全的设备,开发人员需要接受培训来编写安全代码。识别潜在的安全风险,并在应用程序设计阶段缓解这些风险,对于使系统的本质安全有很大的帮助。

Secure Code Warrior 可以如何帮助

Secure Code Warrior'的旗舰产品 -learning platform - 有许多互动挑战,courses ,和评估,可以帮助培训开发人员编写安全的C/C++代码。该平台上的内容是针对框架的,而且非常吸引人。我们的C/C++:嵌入编码挑战从MISRA C、AUTOSAR C++(MISRA C++)和IEC中获得灵感。

开发人员可以踏上个性化的学习之旅,在这里他们可以识别C/C++特有的漏洞,更重要的是学会修复这些错误。在这个过程中,开发人员可以跟踪他们的进展,以确定他们的弱点,甚至可以与他们的同行享受友好的编码比赛。了解更多关于我们如何用我们的解决方案帮助汽车和运输行业

想知道我们的挑战是如何互动和注重嵌入的吗?今天就在learning platform ,尝试一些C/C++:嵌入的挑战吧!

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。