嵌入式C代码释放后重用缺陷检测
2021-01-29王亚昕李孝庆伍高飞唐士建朱亚杰
西安电子科技大学学报 2021年1期
王亚昕,李孝庆 ,伍高飞,唐士建,朱亚杰,董 婷
(1.北京空间机电研究所,北京,100094;2.西安电子科技大学 网络与信息安全学院,陕西 西安 710071)
C语言是一种面向过程的通用程序设计语言。编译系统的交叉编译能力使得C语言能够适用于ARM、C51等多种嵌入式体系架构。由C语言编写的嵌入式代码广泛应用于操作系统内核及驱动、应用程序及代码库、单片机软件等,其使用场景包括移动终端、IoT设备[1]、工控设施、航空航天系统[2]等。这对其安全性和可靠性提出了很高的要求。
因此,针对嵌入式C代码中的缺陷进行及时检测和修复极为重要。C代码中的释放后重用 (Use-after-Free,UaF) 缺陷极为常见且危害严重。虽然不同嵌入式平台使用的动态内存管理函数各不相同,但是UaF缺陷的成因是相同的,即C代码在内存释放之后未将内存指针清零,导致“野指针”留存,并在后续代码执行中继续被用来进行相应操作。Android手机所使用的嵌入式内核驱动[3]就曾因一个UaF缺陷导致了华为、三星等诸多厂商的智能手机面临极为严重的安全风险,恶意应用可获得手机的完全控制权。这一案例充分证明了嵌入式C代码中UaF缺陷的危害性。
现有的嵌入式代码缺陷检测工作未能有效支持UaF缺陷,在一般计算机系统中较为成熟的自动化UaF检测工具又不能支持复杂多样的嵌入式平台。因此,笔者设计了一套支持不同嵌入式平台的静态代码分析工具,实现了对于C代码UaF缺陷的自动化检测。主要贡献如下:
(1) 实现了基于内存指向的、支持数据结构操作的、上下文和路径约束敏感的过程间数据流分析。……
登录APP查看全文
