还在担心安全问题?Zephyr物联网操作系统将有内存保护功能了

[摘要]Zephyr项目是一个开源项目—一款针对低端物联网设备的操作系统。它能在小型微控制器和更高端的微控制器上运行,也能够在某些应用程序中为虚拟机或者容器提供物联网功能。该项目与Linux基金会相关联,并且受更加宽容的Apache 2 0许可证的保护。
Zephyr项目是一个开源项目—一款针对低端物联网设备的操作系统。它能在小型微控制器和更高端的微控制器上运行,也能够在某些应用程序中为虚拟机或者容器提供物联网功能。该项目与Linux基金会相关联,并且受更加宽容的Apache 2.0许可证的保护。

Zephyr 操作系统的v1.11已经发布,它使开发者可以充分利用MPU和MMU支持。英特尔的Andrew Boie在波特兰举行的嵌入式Linux大会和OpenIoT峰会上对这个功能进行了很好的介绍。会议赞助商包括Zephyr项目和其它物联网操作系统平台,例如:Apache的myNewt,该系统获得了来自Runtime的商业支持,将myNewt整合到基于云的物联网平台中。这些平台加入了商业化产品,例如:针对物联网应用的Express Logic的ThreadX 和 Micrium的µC/OS系列紧凑型操作系统,以及像亚马逊FreeRTOS这样的开源操作系统。

Zephyr v1.11也推出了对Thread Group的线程协议支持,以及采用OpenThread来实现。这利用了现有的802.15.4驱动程序。新的操作系统还包括开始对PS352(实时控制器产品标准)配置文件的IEEE POSIX支持。

Zephyr进行广泛的参数检查以确保数据被正确引用

另外,它包括使用蓝牙低功耗支持空中设备固件升级(OTA DFU)。该集成包括对MCUmgr以及通用MCUBoot引导加载程序的支持,允许Zephyr图像通过蓝牙连接进行发射和编程。管理层也支持远程访问系统文件并检索内核统计信息。

但是回到内存保护

原来的Zephyr操作系统不支持内存保护。应用程序连接到操作系统,并且此静态包裹中的所有代码可以访问所有内存和I/O。错误和恶意代码很容易引起系统崩溃,因为大部分代码都是用C语言编写,系统不提供额外的保护。有些微控制器仍然缺乏内存保护支持。如果没有更先进的虚拟内存支持,Zephyr可能会工作良好,但是大部分流行的微控制器平台和所有的微处理器平台都有内存保护。Zephyr v1.11可以利用这些优势,并为堆栈溢出等错误以及存储隔离提供高级错误检测。

Boie指出,Zephyr实施的窍门是将内存保护改为原本不支持它的API。由于资源被指针而不是参数掌控使问题变得复杂。缺乏间接性意味着系统需要额外的有效检查,以防止垃圾数据发生意外操作。

内存保护支持设计用于处理Arm Cortex-M系列中的内存保护单元。MPU通常设有限制访问或者读/写操作的固定区域。使用Cortex-A和x86平台的内存管理单元(MMU)提供虚拟内存支持,这比MPU更强大。Zephyr支持在上述任意平台都可以采用,但是不能利用比MMU所能够提供的更高级的功能。目前,v.11支持ARM、ARC和x86架构。

这种方式允许环境被分成系统管理员和用户应用程序。后者可以与其他用户应用程序隔离或者共享内存。整个系统为嵌入式系统中常用的静态配置而设计。由于MPU/MMU配置已经创建,所以它最大限度地缩短了启动时间--只需在启动时将其拷贝到硬件中就可以。这降低了在运行后第三方可能干扰系统的可能性。

Zephyr采用了分层的方式保护内存。第1层是启动时MMU/MPU硬件设置。它能保护代码,解决无意义的地址,并且捕捉空指针引用。第2层提供管理员模式堆栈溢出检测。这使用页面来捕获堆栈溢出引用。第3层解决用户模式线程。用户线程以需要系统调用的非特权模式运行。这是一些魔法所在。第4层是面向未来的,将解决虚拟内存支持和更动态的内存管理问题。

这种方式假设所有管理员模式代码(包括内核和设备驱动程序)都可以完全访问系统。工具链标题和内核的部分源代码假定可信任。由于Zephyr没有线程优先级老化等功能,系统不会阻止由于线程CPU不足而导致的拒绝服务问题。当系统API调用处理时,Zephyr的魔力发生了(见图)。

在实现代码运行前,系统调用会执行多次检查。除非系统已经以管理员模式运行,否则它会整理来自系统调用的数据。在这种情况下,这些都会被绕过。 部分魔法由C宏处理,这些宏与系统调用和结构一起使用。

此构建支持通过用于构建系统的脚本进行了扩展,从而允许创建系统配置,以便在引导时将其复制到硬件内存管理系统。该方法允许轻松添加新的系统调用。

总的来说,内存管理增强是优雅的和高效的。它增加了一个急需的功能,并且可以在其它从头设计的操作系统中找到支持MPU的功能。这仍然是一项正在进行中的工作。需要动态内存管理的应用程序和资源创建以及管理仍然需要等待未来的增强。

关于Zephyr

Zephyr 项目是一款小型且可扩展的操作系统,尤其适用于资源受限的硬件系统,可支持多种架构;该系统高度开源,对于开发人员社区完全开放,开发人员可根据需要对该系统进行二次开发,以支持最新硬件、工具和设备驱动程序;该系统高度模块化平台,可轻松集成任何架构的第三方库和嵌入式设备。




免责声明:

本站系本网编辑转载,会尽可能注明出处,但不排除无法注明来源的情况,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系, 来信: liujun@soft6.com 我们将在收到邮件后第一时间删除内容!

[声明]本站文章版权归原作者所有,内容为作者个人观点,不代表本网站的观点和对其真实性负责,本站拥有对此声明的最终解释权。