分享

嵌入式系统常见的安全问题

Jay 2023-8-31 14:48:02 发表于 信创资讯 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 649
嵌入式系统是一种包含微处理器和软件的电子产品,广泛应用于工业生产、医疗电子、汽车电子、网络通信、军事航天等领域。嵌入式系统一般都包含相对固定的组件,如芯片、闪存、固件等。组件组成主要包括硬件和软件部分,其中软件部分直接与硬件交互,因此对于其安全性和可靠性有着更高的要求。近20年来,有关嵌入式软件的零日(0Day)漏洞层出不穷,而分析其中大多数漏洞成因往往是较为低级的错误导致的。如果能在软件的开发阶段或应用验证阶段通过一系列测试方法及流程,将可能引发的安全问题尽可能规避掉,将大大提高软件的安全性。这一需求在无法经常更新迭代的嵌入式环境下显得尤为重要。本文将针对C/C++环境的嵌入式系统中常见的软件安全问题进行讨论。
1. 缓冲区溢出漏洞缓冲区溢出是各类软件中十分普遍的安全问题,不仅在嵌入式软件中存在,在其他应用软件和操作系统中也十分常见。从国家信息安全漏洞库(CNNVD)收录的2022年6月漏洞类型统计表中可以看出,缓冲区错误类型漏洞占比高达8.4%。缓冲区溢出问题的根本原因在于过于信任输入,而没有正确检查动态空间的边界,开发者将长于目标的数据进行拷贝,因此覆盖了与目标相邻的区域。缓冲区溢出的问题十分严重,可能导致目标系统宕机、命令执行等后果。实践得出,缓冲区溢出可以发生在堆、栈、bss等存放变量的任何区域,攻击者可以通过事先计算好的长度构造payload来修改函数的返回地址,或替换成恶意代码的起始地址,以完成攻击。
2. 内存泄漏内存泄漏是指程序中已被动态分配的堆区内存由于编程人员或者其他原因而未进行释放,造成的系统内存浪费,内存泄漏问题并没有泄漏大小之分,无论内存泄漏多么轻微,都会导致程序运行性能降低,最终将会在有限的时间内消耗掉全部内存,导致系统的崩溃。内存泄漏问题在嵌入式系统下显得格外重要,嵌入式系统的内存资源通常比其他平台要小得多,如果存在内存泄漏问题,将在更短的时间内造成严重后果。
3. 空指针引用空指针引用顾名思义就是使用了一个没有指向合法地址空间的指针,通常是由这个指针没有被初始化、正确赋值或原本指针指向的内存空间已经被释放等原因导致的。如果编程人员在使用一个指针之前没有对其进行非空判断,都有可能造成空指针引用,原因是在C/C++环境中即使使用了malloc/new内存分配函数对其赋值,如果不对返回结果进行检查,也无法确保此时的内存分配是成功的。空指针引用问题比内存泄漏问题更为严重,因为前者可能导致系统直接崩溃。
4. 格式化字符串漏洞格式化字符串漏洞主要利用C语言中print系列的函数,如printf、sprintf、fprinf等C库函数。格式化是为了控制显示文本的样式,如%d是以整数的形式输出,%p打印指针地址等,在使用此类函数前,如果能给定预料之内的参数,并不会有任何安全问题。但是若对输入格式不进行控制,支持用户任意输入,将会造成严重的安全问题。其攻击原理可以泄露特定寄存器和栈上的值,从而给攻击者创造了发挥的空间,造成系统内存信息泄露、控制代码执行逻辑、远程命令执行(RCE)等严重后果。(摘自《保密科学技术》2023年2月刊)

版权说明:论坛帖子主题均由合作第三方提供并上传,若内容存在侵权,请进行举报

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系在线客服