0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >技术信息 > 嵌入式编程语言中的内存安全

嵌入式编程语言中的内存安全

来源: embedded
2022-12-02
类别:技术信息
eye 5
文章创建人 拍明芯城

原标题:嵌入式编程语言中的内存安全

  随着如此多的嵌入式设备联网,安全性已成为几乎每个设备的主要组成部分。在过去几年中,我们看到了支持安全性的硬件技术的改进,例如Arm TrustZone和多核微控制器。不幸的是,许多安全漏洞是不良编程实践的结果。在某种程度上,部分问题源于传统的嵌入式编程语言,如C和C++没有内置内存安全。因此,开发人员必须管理内存安全;因此,不良做法会导致安全漏洞。

  近年来,软件行业对转向内存安全编程语言的兴趣日益浓厚。11月10日千2022年,美国国家安全局发布 有关如何防范软件内存安全问题的指南 这是系统中大多数可利用的漏洞。NSA建议使用内存安全语言,如C#,Go,Java®,Ruby™,Rust®和Swift®。从基于微控制器的系统的角度来看,该列表中唯一适合的语言是 Rust。但是,切换语言并非易事。在我们了解各种嵌入式编程语言中的内存安全细节之前,让我们探讨一些导致嵌入式系统漏洞的内存安全问题。

  内存安全风险

  最常见的漏洞之一是缓冲区溢出。当读取或更常见的写入数组边界之外的数据时,会发生缓冲区溢出。缓冲区溢出将导致内存损坏,如果操作正确,则允许攻击者注入可执行代码。使用注入的代码,攻击者可以使程序崩溃,收集用户,网络数据,并使系统做任何他们想做的事情。

  另一个经常被利用的漏洞与内存的分配和解分配方式有关。例如,应用程序可能会分配内存,但从不释放内存,从而导致内存泄漏。此外,应用程序可能会尝试访问已解除分配的内存,这可能会导致崩溃和利用系统的机会。

  争用条件也可能是漏洞的来源。例如,如果两个任务或一个中断,并且主程序正在写入和读取内存位置,则可能会出现争用条件。从内存位置读取时,另一个可能会尝试写入该位置。如果编写器可以中断读取,则可能会在争用条件期间损坏读取值,从而导致崩溃或意外的系统行为。

  内存安全语言与不安全语言

  使用内存安全编程语言并不是保证所有内存安全漏洞消失的灵丹妙药。但是,如果使用得当,内存安全语言可以显著降低应用程序中出现内存漏洞的机会。内存安全语言背后的想法是,开发人员不必做任何特殊的事情来保护内存。例如,如果你在 Rust 中编写了一个覆盖缓冲区边界的程序,你可能会看到如下所示的运行时错误:

  

定义


  作为一名程序员,我没有做任何特别的事情来检测我试图在数组之外读取内存。Rust 自动检测到我正在访问边界之外的内存。在这种情况下,应用程序被设置为停止执行并警告我我的错误。如果我用 C 或 C++ 编写相同的代码,我的应用程序就会默默地向前移动,而我不知道我的代码有问题。

  最近,我正在开发一个使用RTOS的C应用程序。客户在产品版本之间切换了实时操作系统。他们的应用程序似乎工作正常,然后突然间,它会崩溃。经过一番摸索,我发现两个RTOS之间的消息队列机制不同。在实现中,每当将数据放入一个消息队列时,队列都会将消息数据写入预期的内存边界之外并损坏周围的内存。团队认为消息队列正在按字节传输,但它是由单词传输的!

  内存安全结论

  如果您在连接的设备上工作,则软件中的内存安全是必要的。内存安全语言可以帮助开发人员更好、更快地找到潜在的内存漏洞。真正的问题变成了将平台或产品线从现有语言过渡到新语言。切换语言可能对您有意义,也可能没有意义。

  虽然我们已经探讨了一些内存安全问题,但不一定需要使用内存安全语言。可以通过遵循语言最佳做法来提高应用程序的内存安全性。例如,有一些使用 C 和 C++维护内存安全的最佳做法。但是,C、C++ 和 Rust 中的内存安全技术是不同的。

  在接下来的几篇文章中,我们将探讨 C、C++ 和 Rust 中的内存安全问题,并了解如何在每种语言中处理它们。

  


  雅各布·贝宁戈 是一名嵌入式软件顾问,专门研究基于微控制器的实时系统。他通过大量文章、博客和网络研讨会积极推广软件最佳实践,主题包括软件架构设计、嵌入式 DevOps 和实施技术。Jacob 在该领域拥有 20 年的经验,拥有三个学位,包括密歇根大学的工程硕士学位。


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯