针对Linux中double fetch漏洞的研究
主讲:王鹏飞 国防科学技术大学计算机学院博士
近年来,并行程序随着多核CPU硬件的普及而被越来越广泛的使用。而并行程序中普遍存在数据竞争的情况,并能导致多种并发错误。当竞争情况发生在内核与用户线程之间时,就会触发double fetch漏洞。我们提出了一种静态方法来系统检测Linux内核中存在的潜在double fetch情况。所提方法基于特定模式分析,总共从Linux内核中识别了90个double fetch情况,其中57个发生在驱动程序中。所提方法有效填补了之前广泛使用的动态检测方法因为依赖特定硬件所以不适用于驱动程序检测的不足。在进一步人工分析的基础上,我们归纳了3种内核中容易引发double fetch的典型场景,并进行案例分析。我们所提方法基于Coccinelle引擎,能有效检测引起内核漏洞的double fetch问题。我们将此方法应用于Linux,FreeBSD 和Android内核并发现了6个之前未知的double fetch缺陷,其中4个在驱动程序中,3个是可利用的double fetch漏洞。所有已发现的缺陷和漏洞都已经被内核开发团队确认并打上补丁。我们的方法已经被Coccinelle团队采用并集成到Linux内核补丁审计中。基于以上研究,我们还提出了实用性方法来预防double fetch 缺陷和漏洞。我们还提出了一种自动为检测到的double fetch缺陷打补丁的方法。
Part1 What is a double fetch?