为互联系统中的安全和安保设计

好的嵌入式软件一直是为安全和安保而设计的。然而,连接性在医疗、自动驾驶汽车和物联网 (IoT) 设备等安全关键应用中引入了无法容忍的安全漏洞。

安全与安保的紧密结合,加上威胁级别的升高,要求开发人员充分了解安全与安保之间的区别;此外,应用行业最佳实践以确保从一开始就将两者设计到产品中(图 1)。

图 1. 过滤缺陷:良好的软件和硬件设计要求在整个设计过程中采用多层质量保证、保障和保护(来源:Barr Group)
糟糕设计的影响
有了物联网,系统现在很容易受到“远距离行动”的影响。最近的一起案件涉及索尼联网安全摄像头,这些摄像头被发现有后门帐户。[1] 黑客可以使用这些端口来用僵尸网络恶意软件感染系统并发起更多攻击。索尼此后开发了一个固件补丁,用户可以下载该补丁来关闭后门,但许多编码或设计错误的实例是不可恢复的,并且可能是灾难性的。

为了证明这一点,两名安全研究人员在汽车行驶时对其进行了黑客攻击,接管了仪表板功能、转向、传动和刹车。 [2] 黑客并非恶意,而是在驱动程序的许可下进行的,让研究人员证明破解网络运营商的连接是多么容易。尽管如此,这次黑客攻击导致 140 万辆汽车被召回。

当然,系统不一定要连接到 Internet 才容易受到攻击和变得不安全:编写不当的嵌入式代码和设计决策已经造成了损失。以 Therac-25 为例,这是一种于 1983 年推出的用于治疗癌症的放射治疗机。 [3] 现在,这是一个公认的案例研究,说明 在系统设计方面不应该做什么。软件错误、缺乏硬件联锁以及通常糟糕的设计决策的组合导致了致命的辐射剂量。

发现 Therac-25 案件的罪魁祸首包括:

不成熟和不充分的软件开发过程(“不可测试的软件”)。
不完整的可靠性建模和故障模式分析。
没有(独立)审查关键软件。
旧型号的软件重用不当。
主要故障模式之一涉及经常溢出的测试例程中的 1 字节计数器。如果操作员在溢出时向机器提供手动输入,则系统使用的基于软件的互锁将失效。

1996 年 6 月,阿丽亚娜 5 号航班 501 偏离其预定的飞行计划并自毁,因为为了效率而省略了溢出检查。当一个变量保持水平速度溢出时,没有办法检测到它并做出适当的反应。

尽管如此,关键代码和安全漏洞仍未得到检查。事实上,Barr Group 的2017 年嵌入式系统安全和安全调查 显示,在从事连接到 Internet 并且如果被黑客攻击可能会导致死亡的项目的工程师中:

22% 没有将安全性作为设计要求。
其中 19% 不遵循编码标准。
42% 只进行偶尔的代码审查或根本不进行。
48% 的人不屑于加密他们在 Internet 上的通信。
超过 33% 的企业不执行静态分析。
了解安全和保障的真正含义是纠正这种情况的良好开端。

定义安全和保障 安全和保障
这两个术语经常混淆。一些开发人员错误地认为,如果他们编写好的代码,那么它就会既安全又可靠。然而,情况显然并非如此。

“安全”系统是指在正常操作期间,本身不会对用户或其他任何人造成伤害的系统。“安全关键”系统是指在发生故障时可能导致人员伤亡的系统。设计人员的目标是尽可能确保系统不会出现故障或故障。

另一方面,安全性主要与产品向授权 用户提供其资产的能力有关,同时也防止未经授权的访问,例如黑客。这些资产包括流入或动态数据、代码和知识产权 (IP)、处理器和系统控制中心、通信端口、内存和静态数据存储。

现在应该开始清楚了,虽然一个系统可以是安全的,但它并不是自动安全的:一个设计危险的系统可以和一个安全设计的系统一样安全。然而,不安全的系统总是不安全的,因为即使它一开始在功能上是安全的,其易受未经授权访问的影响意味着它可能在任何时候变得不安全。

为安全而设计
当谈到安全设计时,有许多因素需要考虑,如 Therac-25 示例所示。但是,设计人员只能控制他们的设计方面,本文的重点是固件。

关键任务应用的一个很好的例子是现代汽车。这些可能有超过 1 亿行的代码,但却被置于经常缺乏训练或分心的用户(司机)手中。为了补偿这些用户,以摄像头和传感器以及车辆对基础设施 (V2I) 和车辆对车辆 (V2V) 通信的形式添加了更多安全功能和代码。代码量不断增加。呈指数级增长。

虽然大量的代码使得编码和调试这样的系统变得更加困难,但如果遵循一些核心原则,则可以消除大部分调试时间,例如:

考虑实时性能、成本、可升级性、安全性、可靠性和安全性的硬件/软件分区。
故障控制区域的实现。
避免单点故障(图 2)[4]。
处理由代码错误、程序本身、内存管理或虚假中断引起的异常。
包括溢出检查(被 Therac-25 和 Ariane 火箭省略)。
净化来自外部世界的受污染数据(使用范围检查和 CRC)。
各个级别的测试(单元测试、集成测试、系统测试、模糊测试、验证和验证等)

图 2. 安全关键系统避免单点故障。(来源:Phil Koopman 教授[4])
为了安全起见,设计人员或开发人员需要熟悉用户和设备身份验证、公钥基础设施 (PKI) 和数据加密的复杂性。除了向授权用户提供资产并保护他们免遭未经授权的访问之外,安全还意味着系统在面临攻击或故障时不会做意外或不安全的事情。

当然,攻击有多种形式,包括基本拒绝服务 (DoS) 和分布式 DoS (DDoS)。虽然开发人员无法控制攻击系统的内容,但他们可以控制系统对攻击的反应,并且必须在整个系统范围内应用对如何反应的认识。系统的安全性取决于其最薄弱的链接,假设攻击者会找到该链接是明智之举。

一个示例目标薄弱环节是固件更新,启用了设备的远程固件更新 (RFU) 功能。这很容易受到攻击,因此最好制定一项策略,例如: 让用户选择禁用 RFU 或加载需要对后续图像进行数字签名的更新。

这似乎违反直觉,但密码学很少是最薄弱的环节。相反,攻击者可以在别处寻找由于实施、协议安全、API、使用和侧信道攻击而易受攻击的攻击面。

在这些领域投入多少精力、时间和资源取决于安全威胁的类型,每个领域都有特定的防御措施。开发人员可以采取的一些降低产品漏洞的一般措施如下:

使用没有外部存储器的微控制器。
禁用 JTAG 接口。
实施安全启动。
使用主密钥生成每个单元的特定于设备的密钥。
使用目标代码混淆。
实施开机自检 (POST) 和内置自检 (BIST)。
说到“混淆”,有一种思想流派教授“通过默默无闻来确保安全”。如果仅仅 依赖这种想法,它实际上可能是致命的,因为每个秘密都会造成潜在的失败点。 [5] 无论是通过社会工程、心怀不满的员工,还是通过倾销和逆向工程等技术,秘密迟早都会逃脱。当然,默默无闻也有其作用,例如将加密密钥保密。

确保安全和保障
虽然有许多技术和技术可以帮助开发人员和设计人员实现高水平的安全和保障,但有一些基本步骤可以确保尽可能合理地优化系统。首先,按照既定的编码、功能安全以及行业和应用特定标准进行设计。其中包括 MISRA 和 MISRA-C、ISO 26262、汽车开放系统架构 (Autosar)、IEC 60335 和 IEC 60730。

采用像 MISRA 这样的编码标准不仅有助于防止错误,还可以使代码更具可读性、一致性和可移植性(图 3)。

图 3. 采用 MISRA 等编码标准的好处不仅仅是有助于防止错误:它还使代码更具可读性、一致性和可移植性(来源:Barr Group)
其次,使用静态分析(图 4)。这涉及在不执行程序的情况下分析软件。这是一个象征性的执行,所以它本质上是一个模拟。相比之下,动态分析会在目标平台上实际代码的运行时执行期间发现缺陷。

图 4. 静态分析工具运行源文件的“模拟”,分析语法和逻辑,并输出警告而不是目标文件(来源:Barr Group)
虽然静态分析不是灵丹妙药,但它确实增加了另一层保证,因为它非常擅长检测潜在的错误,例如使用未初始化的变量、可能的整数溢出/下溢以及有符号和无符号数据类型的混合。此外,静态分析工具也在不断改进。

通常,静态分析意味着使用专用工具,例如 PC-Lint 或 Coverity,但开发人员也应考虑重新分析自己的代码。

第三,进行代码审查。这将提高代码的正确性,同时也有助于可维护性和可扩展性。代码审查也有助于召回/保修维修和产品责任索赔。

第四,进行威胁建模。从使用攻击树开始。这需要开发人员像攻击者一样思考并执行以下操作:

确定攻击目标:
每次攻击都有一个单独的树。
对于每棵树(目标):
确定不同的攻击。
确定每次攻击的步骤和选项
请注意,这种类型的分析从多个角度受益匪浅。

但是谁有时间做对呢?
尽管执行上述四个基本步骤以最大程度地减少错误并增强安全性和保障性似乎很简单,但它们确实需要时间,因此开发人员必须相应地进行预算。虽然项目规模各不相同,但尽可能切合实际很重要。

例如,为代码审查增加 15% 到 50% 的设计时间。有些系统需要完整的代码审查;有些没有。静态分析工具的初始设置可能需要十到数百个小时,但一旦成为开发过程的一部分,就不会为产品开发增加额外的时间,它们最终会通过更好的系统来收回成本。

连接性为嵌入式系统设计增加了一个新的关注点,需要格外重视安全性和安全性。对这两个概念的充分理解,再加上在设计周期早期正确应用最佳实践,可以显着提高产品的整体安全性。这些最佳实践包括:采用编码标准、使用静态分析工具、代码审查和威胁建模。
相关实战:https://www.yunduoketang.com/article/tags/4856.html
https://www.yunduoketang.com/article/tags/4857.html
https://www.yunduoketang.com/article/tags/4858.html
https://www.yunduoketang.com/article/tags/4859.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值