当前位置: 代码迷 >> 综合 >> USENIX2021-Static Detection of Unsafe DMA Accesses in Device Drivers
  详细解决方案

USENIX2021-Static Detection of Unsafe DMA Accesses in Device Drivers

热度:54   发布时间:2023-12-14 02:35:13.0

设备驱动程序中不安全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访问。

  相关解决方案