托管和非托管C:增加嵌入式应用程序的安全性和可靠性
安全性和可靠性都是任何值得信赖的系统中的重要组成部分。构建嵌入式应用程序既安全可靠是困难的,因为它可能是用C或c++语言编写。即使在这么多年之后,C和c++仍然为嵌入式软件开发的首选语言。C或c++程序执行被称为“托管”,这意味着并不是由任何运行时执行。
通常情况下,在“管理”的世界里,一个环境通常被称为“运行时”负责将代码编译成机器码,然后执行它。此外,运行时还提供了一些重要的服务,如自动内存管理,安全界限,类型安全,等等。但这样的保护仅用于高级程序设计语言,例如。net框架及其运行时,CLR。
相比之下,非托管代码执行的操作系统和底层硬件上直接运行。一切,从内存管理安全考虑,是程序员的负担。
如何提高嵌入式应用程序的安全吗?
安全风险来自对手积极地试图利用系统漏洞。在设计安全时,它必须是认为敌人可能试图让事情在任何时候出错。这里是关键元素:
- 简单的设计
保持系统设计尽可能简单是最好的方法来提高系统的安全性。一个更简单的设计减少了攻击表面,减少潜在的未预料到的系统交互。
- 安全启动
安全的引导功能,系统验证设备只使用启动软件可信的设备制造商。它利用一个设备提供的签名信任锚,公共部分公钥基础设施(PKI)的根用于签名设备代码。在嵌入式系统启动时,启动映像将使用这个公钥验证和相应的信任链,确保引导时软件没有被篡改。
- HSM的使用
硬件安全模块(HSM)处理加密和解密任务以及嵌入操作系统和应用程序管理。传统上这些模块在系统级芯片的形式或插件卡直接附加到嵌入式系统。在制造业,可以爱游戏捕鱼游戏生成私钥芯片或注入每个芯片作为根的信任。当私有密钥认证公钥基础设施PKI,安全设备标识符可以成为一个受信任的设备连接的基本组成部分。
如何提高嵌入式应用程序的可靠性?
主要的可靠性风险不是恶意在大自然的例子中,一个物理设备失败。为可靠性设计时,必须假定事情可能出错在某个时间点上。有很多技术,程序员可以适应嵌入式应用可靠:
- 实现故障保险
在嵌入式编码,几乎所有的程序员负责。因此,重要的是要实现一个适当的安全机制对所有可能的系统故障在发生错误时避免非理性行为。
- 检查数据完整性
重要的是要检查的完整性至关重要的变量和数据结构在较长时间运行。这可以通过保持CRC校验和或内存和定期验证状态。
- 避免动态内存分配
典型的嵌入式系统没有足够的带宽来承受支离破碎的记忆。动态分配的内存等资源受限的嵌入式系统可能导致内存泄漏,因此应该避免。
- 使用的内存保护单位
内存保护单元,通常被称为微控制器,是一个可选组件出现在许多基于arm微控制器。微控制器用于在内存中通过设置单独的部分地方权限和属性。这种机制有几个使用在真实的场景中,比如防止访问内存时,CPU运行在用户模式或阻止抓取代码来执行可写的位置在RAM中。当启用了微处理机,它执行的规则触发一个内存异常中断时这些都是违反了。
- 使用监督
大多数现代微处理器支持一个看门狗定时器提供能够从某些类型的恢复系统挂起。它可以识别软件冻结在几毫秒,重置系统适当,防止进一步的系统故障。
安全性和可靠性有很多common-both固有属性的信息系统是容易牺牲最初但昂贵的修理后。尽管开发人员的希望和乐观,嵌入式系统对微控制器可以动摇他们的信心。每一位和字节需要维护和细致的奉献,以确保正确地随着时间的推移,软件运行和安全相关的硬件。这些方法可能不足以对安全性和可靠性设计;基于临界安全性和可靠性,必须选择适当的方法。
关于作者
有12年经验的专家在汽车软件应用程序和中间件开发的软件定义车辆,汽车照明、智能数字仪表集群、车载信息娱乐和导航系统。
让我们知道你想过这篇文章。
把你下面的评论。