USENIX2021-Static Detection of Unsafe DMA Accesses in Device Drivers

SADA是一种静态分析方法,用于检测设备驱动程序中不安全的DMA访问,包括不一致和不受限制的访问。通过基于字段的别名分析、流敏感和模式分析以及SMT解算器验证,SADA能够自动检测284个真正的不安全访问,其中121可能导致缓冲区溢出,36可能导致无效指针访问。
摘要由CSDN通过智能技术生成

设备驱动程序中不安全DMA访问的静态检测

摘要

直接内存访问(DMA)是一种常用的提高硬件I/O性能的机制,已经被许多现有的设备驱动程序广泛使用。然而,从两个方面来看,DMA访问可能是不安全的。不一致DMA访问:首先,如果DMA缓冲区与硬件寄存器和CPU缓存没有正确同步,CPU缓存和硬件寄存器中存储的缓冲区数据可能不一致,这可能会导致意外的硬件行为。其次,不受限制的DMA访问:出现故障或不受信任的硬件设备可能会将坏数据写入系统内存,如果驱动程序在未正确验证的情况下使用数据,则会触发安全漏洞(如缓冲区溢出和无效指针访问)。要检测不安全的DMA访问,需要解决一些关键挑战。例如,由于每个DMA访问在驱动程序代码中实现为常规变量访问,因此很难识别DMA访问。
在本文中,我们提出了一种称为SADA的静态分析方法,用于自动准确地检测设备驱动程序中的不安全DMA访问。SADA包括三个基本步骤。首先,根据DMA缓冲区创建的信息,使用基于字段的别名分析来识别DMA访问。其次,SADA使用流敏感和基于模式的分析来检查每个DMA访问的安全性,以检测可能的不安全DMA访问。最后,使用SMT解算器验证每个可能的不安全DMA访问的代码路径条件,以消除误报。我们已经评估了Linux 5.6的驱动程序代码,并发现了284个真正的不安全DMA访问。其中,我们强调121可以触发缓冲区溢出错误,36可以触发无效指针访问,导致任意读取或写入。我们已经向Linux驱动程序开发人员报告了这些不安全的DMA访问,其中105个已经确认。

主要内容
目前还没有系统的静态方法来检测不安全的DMA访问。
在本文中,我们提出了一种称为SADA(静态分析DMA访问)的静态分析方法,以自动准确地检测设备驱动程序中不安全的DMA访问。总的来说,SADA包括三个基本步骤。
首先,考虑到DMA访问和DMA映射创建可能在不同的驱动程序功能中执行,SADA使用基于字段的别名分析,根据DMA映射创建的信息识别DMA访问,因为我们对Linux驱动程序代码的研究发现,大约87%创建的DMA缓冲区存储在驱动程序代码的数据结构字段中。
其次,SADA使用流敏感和基于模式的分析来检查每个DMA访问的安全性,以检测可能的不安全DMA访问。具体地说,为了检测不一致的DMA访问,SADA通过分析代码上下文来检查每个DMA访问是否在DMA缓冲区正确同步的情况下执行。要检测未经检查的DMA访问ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值