首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

提高嵌入式操作系统安全性的最优方法

提高嵌入式操作系统安全性的最优方法

关键字:嵌入式操作系统  安全性  RTOS  
作者:Bill Graham
产品营销经理
风河公司

本文讨论了在嵌入式系统设计中需要注意的一些最佳安全保护措施,特别是那些在任务中需要使用的实时嵌入式操作系统(RTOS)和常用于工业与医疗设备中的安全关键系统(SCS)。

在过去的一年里,安全性对嵌入式开发人员来说已经迅速提升到最重要的位置。虽然Stuxnet蠕虫病毒唤醒了嵌入式行业的安全意识,但从那以后仍然发生了其它许多值得注意的事件。例如,像在CBS新闻中报道的那样,攻击者能够获得对家用胰岛素泵的控制,并改变它的设置参数,从而可能严重危害病人的人身安全。

另据CNN最近报道,在南休斯顿一位攻击者获得了对控制水处理工厂部分设施的SCADA系统人机界面(HMI)的控制。在这个案例中,HMI安全性方面仅采用了一个很容易被人猜到的口令。

安全性现在已经成为嵌入式开发人员最优先考虑的方面,因为他们创建的系统能够并且很可能被用于一些重要的基础设施,而这些基础设施的自动化程度正越来越高,而且通常是联网工作的,在某些情况下还可能与外部世界相连。

某些类别的设备已经具有一定的安全性,因为从这些设备的初始概念开始安全性就是第一要求,比如政府和部队使用的通信设备。然而,大部分设备都具有潜在的不安全性。重要的是要认识到,没有设备是绝对安全的,开发人员需要通过良好的设计、编程和配置来努力提高安全性。

最佳安全措施

业界已经有许多基本规则和原则可以用来在开发产品过程中指导设计与开发决策(下表1)。首先也是最重要的是要认识到,安全性需要嵌入在里面而不是附加在外面。尽最大可能地改进现有和传统系统很重要,而新项目应该从一开始就要考虑安全性,这样做在项目的后续过程中会有很好的回报。


表1:安全推荐措施与最优方法之间的关系。

下面是应用于嵌入式开发的最佳安全措施清单:(来源:由Michael Howard和David LeBlanc编写安全代码,2004年)

* 尽量减小攻击面:减少进入系统的攻击向量数量。关闭对大多数用户来说不必要的功能、服务和访问。
* 最小权限:只给应用程序、任务或进程分配刚好够完成当前工作的权限。权限太高会发生不必要的访问或行为。
* 纵深防御:利用不止一个防护层,不要指望一层防护就能提供完整的保护。
* 多样性防御:使用不同类型的防护设备、软件或供应商。
* 保护最薄弱环节:保护最不安全的组件、接口或应用程序,这是最可能受到攻击的地方。因为任何系统的安全性水平只能以最薄弱的组件为准(木桶理论)。
* 错误保护状态:期待发现易受攻击点;时刻准备接受对系统的物理和远程攻击。
* 关于外部系统的假设:不要指望与你的产品连接的其它设备。你不能假设外部设备是安全的,并且要明白你的设备可能被连接到完全开放的网络。
* 默认安全性:将系统的默认配置和行为设置成尽可能安全。关闭对大多数用户来说不必要的功能、服务和访问。
* 简单性和可用性:使用更加简单的设计,这些设计具有可能更少的安全漏洞和易受攻击点,并且更加容易理解、检查和测试。

值得注意的是,没有系统是绝对安全的。然而,正如我们会在后文中看到的那样,遵循一些实用方法可以极大地提高嵌入式系统的安全性。在一些情况下,这些技术可以应用于现有系统;在其它情况下,它们可以成为未来系统设计的建议。

对您的嵌入式系统应用最优方法

(1) 实现更加安全的配置。尽管嵌入式安全性得到了大肆宣传,但许多基于这些系统的运行平台可以通过正确的配置实现更高的安全性。
安全缺陷很可能在新版操作系统中已经得到修复,而老版中可能仍然存在漏洞。

嵌入式操作系统的默认配置通常针对性能和内存容量做过调整,并且默认情况下有许多功能被关闭了。遵循制造商指南激活安全功能,包括:
激活授权和权限等级。任何访问必须得到授权。用户访问必须具有对所有服务来说必要的最低权限。

* 激活网络防火墙。现代实时操作系统(RTOS)都具有网络防火墙功能,而具有网络连接的任何设备在运行时都应启用防火墙。
* 禁用所有不重要的服务。只激活对设备工作来说基本的服务。
* 需要时激活或包括含强大的加密函式库。
* 通过内存管理单元(MMU)激活内存保护;利用实时进程(RTP)代替内核等级。
* 除非绝对必要,否则应以用户权限执行。
* 通过选择更加安全的配置,可以删除许多瞄向设备的攻击向量。最好是假设设备随时会受到攻击,并确保用户接收到的配置本身具有更高的安全性。

(2) 安全的网络通信。现有嵌入式系统的许多安全性问题源自通过开放给大众(企业网络)甚至直接与互联网相连接的网络和访问。

比较保守的观点是,设备的所有外部连接都是不安全的。设备在用户群中的不断普及将产生你无法想像到的用例。最佳方法是保护所有进出设备的通信。

* 激活并充分利用RTOS网络堆栈的通信安全功能。
* 激活网络防火墙;只允许通过指定的TCP/IP端口进行通信。
* 激活安全通信通道:IPsec,SSH,SSL或VPN访问。
* 禁止诸如Telnet等不安全的服务。
* 如果可能的话禁止调试服务。如果不能禁止,要确保这些服务是安全的。
* 设备到设备以及设备到控制的通信要尽量考虑使用基于VPN的基础设施。

(3) 划分系统进行保护。将系统中不同的主要组件划分为多个部分是一种有效的安全技术。在许多情况下,这些分割是物理性的。如今借助虚拟化技术还可以实现虚拟化分割,即在相同设备或处理器上通过软件进行分割。

这里有个例子是将微软的Windows或Linux等通用操作系统(GPOS)与实时操作系统(RTOS)整合在同一设备上,但每个系统都在它们自己的虚拟环境中运行。通过这种方式,GPOS上发生的安全性攻击和漏洞就不会影响到RTOS中执行的任务关键型控制功能。

同样,GUI和和对设备的远程访问可以划分在一起,把控制系统单独划分出来。这样,拒绝服务或破坏GUI部分的远程攻击就不会影响控制系统。这种系统组合的优势是非常显著的,因为它能极大地降低硬件复杂性和成本。

借助虚拟化技术和最新的多核处理器,这种组合现在已经非常实用,并且极具成本效益。另外,关键和非关键任务的分开有利于提高这些设备的安全和保险系数。下图1显示了划分成多个模块的嵌入式系统例子。


图1:针对安全性进行的系统划分。

攻击者也许能够访问或破坏GPOS,但无法影响到系统的其它部分。虚拟化层可以确保正确地共享处理器时间和对硬件资源的访问,从而防止受损部分影响到其它部分。

举例来说,如果GPOS遭到破坏或进入死循环,也不会使系统的关键部分停止运行。事实上,可以通过重启GPOS部分来恢复系统的正常工作。加固系统抵抗攻击

激活嵌入式操作系统的安全功能是第一步,但重要的是在整个开发过程中要对系统进行连续的测试。

如果可能的话,利用自动化工具测试现场产品也是合理的,这样可以发现在产品线中存在什么样的薄弱点。这类测试可以找出系统中的漏洞,然后可以通过缺陷修复和配置微调反馈到开发过程。根据适合设备的市场情况可以考虑使用第三方测试与认证。

在工业控制领域,Wurldtech Achilles认证可以确保设备通过了严格的安全性测试。在开发过程中使用这些测试可以不断地加固设备。全面和多样的安全性测试是提高嵌入式安全性的关键。

保护启动与执行过程

嵌入式系统在启动过程中非常容易受到攻击。事实上,经常见到业余爱好者重刷消费类硬件闪存,但对于重要基础设施一部分的系统来说,这不是应尽的义务。许多设备允许通过网络接口或其它远程访问方法进行升级,如果滥用这种功能的话就会产生严重的安全性威胁。

保护启动映像是保护设备的一个重要步骤。受信任的启动映像可以用标识符进行加密签名,硬件执行时应将这个标识符认作唯一可接受的签名。处理器硬件的支持使得这种方法非常容易普及。

受信任的执行方法可以随时确保只有接受到正确签名的应用程序/库/驱动程序才能在设备上运行。这样可以阻止恶意软件安装到设备上。

保护数据和数据存储器

不应对嵌入式系统中使用的数据的分类和隐私作出任何假设。传统意义上,设备数据不被认为具有隐私性,或第三方会感兴趣。但在卫生保健、能源系统、电网、水处理及污水控制应用中嵌入式系统的作用越来越大。

而外部威胁可能对这些设备携带的数据感兴趣。因此数据不应以明文的方式存储,并且要尽可能使用加密技术,特别是当数据存储在磁盘或闪存中时。特别要指出的是,不要以明文方式存储口令和密钥(这是很显然的,但这种情况仍时有发生)。

现在,嵌入式处理器对支持的加密算法都有硬件加速功能,因此对嵌入式设备来说完全可以做到复杂的加密算法,而不会明显加重CPU负担。
将建议映射到最优方法

这些建议可以映射回最佳安全措施。值得注意的是,表1前面的建议也许只能部分满足最优方法的意图,不能完全满足它们的要求。最优方法应该解读为持续的目标设计与开发,而不是一份检查清单。

提高嵌入式操作系统层面的安全性

对嵌入式开发人员来说安全意识应越来越强,情况确实是这样。安全性需要植入设备,从最初的概念到最终发布始终得到贯彻。然而,在现在以及未来项目中已经可以采取一些合理的措施来提高嵌入式操作系统层面的安全性。

遵循一些优秀的安全手段,例如使用安全默认值、停止不重要的服务以及保护数据等,可以显著提高嵌入式系统的安全性。没有系统是绝对安全的,但可以通过持续改进确保达到更好的状态。

Bill Graham是风河公司VxWorks平台的产品营销经理。他在软件行业拥有20多年的丰富经验,包括嵌入式和实时系统开发、UML建模以及面向对象的设计。在加入风河公司前,他在QNX、IBM Rational和Klocwork等公司担任过营销和产品管理等职务。在营销生涯之前,Bill曾在ObjecTime、Cross Keys和Lockheed Martin公司做过软件工程师。他拥有位于加拿大渥太华的卡尔顿大学电子工程专业学士和硕士学位。
返回列表