论文部分内容阅读
随着Linux操作系统所占市场份额的扩大以及受众用户的增加,该系统的安全性和容错处理能力变得越来越受关注。内核作为整个操作系统的核心,影响着整个系统的稳定与安全,其中设备驱动程序代码占内核源码的70%以上,成为内核漏洞的主要来源。特别地,设备驱动程序在遇到系统故障时往往有可能因无法处理某些错误情况而陷入严重困境。为了保证系统的安全可靠,使系统能够提供高质量的容错处理,人们需要通过各种工具或技术来进行故障模拟,用以测试设备驱动模块潜藏缺陷的负面影响。故障注入技术通过人为地向设备驱动引入故障来观察设备驱动发生故障时的行为,可用于评估驱动的可靠性和容错处理能力。因此开展Linux设备驱动故障注入方法的研究工作是十分必要的,这对提高系统的安全性和可靠性具有重要的应用价值和现实意义。本文以Linux设备驱动程序为研究对象,在分析现有各类故障注入方法的基础上,提出了一种灵活可控的基于加载时函数调用指令检测替换及运行时自动恢复与交互式再触发相结合的设备驱动故障注入模型。其间,本文首先分析了设备驱动程序对内核的依赖接口,提取出故障注入目标函数的列表。接着本文构建了故障注入核心机制,其包括利用内核通知链实现的目标模块状态监测机制,采用调用拦截技术实现的内核函数调用指令检测替换机制以及通过debugfs伪文件系统实现的故障再触发机制。其中内核函数调用指令检测替换过程中实现的运行时故障自动恢复是本文的主要创新,设计的劫持者函数模板使本文原型具有良好的可扩充性。同时,本文故障再触发操作只针对一个文件实施,是本文与KEDR工具相比的一个主要改进。此外,本文还提供了一个半自动化的故障场景构建器来为故障注入核心机制进行注入前环境的检查、确认和准备,并实现故障注入目标模块名与故障注入函数列表的传入设置。针对有关设备驱动开展各种不同种类的故障注入测试的实验结果表明,本文方法可以简单方便地实现设备驱动所调用内核函数的故障注入,并能发现某些设备驱动潜藏的代码设计缺陷。与现有其他故障注入工具相比,本文工具能够一次注入多种故障和实现故障的自动恢复。此外,本文工具生成原型的时间和存储开销小,与交互式故障再触发机制结合可以最大限度地提高测试效率和流畅性,从而进行更为高效的设备驱动安全性和可靠性的测试验证。