论文部分内容阅读
当今安卓系统已经成为移动端的主流系统,占据了绝大部份市场份额,却有着极大的安全风险。特别是安卓内核漏洞,一旦被利用,攻击者就有可能获得系统的所有权限,因此比用户态漏洞有着更严重的危害。随着人们对安全的逐渐重视,现有的内核漏洞检测工具能力越来越强。许多存在于代码浅层的漏洞已被发现,因此研究人员开始探索隐藏在代码更深处的内核漏洞,而传统的基于随机系统调用的内核模糊测试(fuzzing)方式已无法满足这种需求。针对内核的被动fuzzing技术具有系统调用顺序自然,更容易触发深层次漏洞的特点,是寻找新的攻击面,发现新漏洞的高效技术,但是这种方法在触发漏洞之后不会生成具体的测试用例;而面向内核的主动fuzzing技术利用事先变异好的参数,主动地执行对应的系统调用来进行测试,一旦发现漏洞就可以得到相应的测试用例,但是所有调用都依赖专家知识来配置,不容易触及到深层次代码。为了实现更高效的内核fuzzing,本文提出主被动结合的fuzzing方法。一方面,该方法利用被动fuzzing过程中所运行应用程序的系统调用日志来推理出系统调用模型,通过用主动fuzzing执行该系统调用模型来保留被动fuzzing的调用序列,使主动fuzzing也可以触及到更深层次的代码。另一方面,该方法用被动fuzzing崩溃后的系统调用序列引导主动fuzzing过程,使主动fuzzing尽可能覆盖更多序列中的调用,直至触发调用序列对应的漏洞,从而为被动fuzzing生成对应的测试用例。本文基于AFL和主被动结合的fuzzing方法实现了面向安卓内核的fuzzing工具X-AFL,它包含被动fuzzing,模型推理和主动fuzzing三个模块。本文对三个模块分别进行了实验评估,实验结果表明,被动fuzzing模块能够有效地触发较多内核错误;而且X-AFL使用推理模型比随机系统调用能获得更高的系统调用执行效率;结合了推理模型和序列引导技术的X-AFL是一个有效的安卓内核fuzzing工具。