论文部分内容阅读
Spectre漏洞(幽灵漏洞)于2017年被发现,并于2018年被正式公布。该安全漏洞影响广泛,含有预测执行功能的现代微处理器均受其影响,比如Intel、AMD和ARM处理器。Spectre漏洞存在多种变体,主要分为两大类:Spectre变种1和Spectre变种2。目前Spectre变种2已经有成熟的防御方法,而Spectre变种1由于其漏洞的复杂性,仍然对系统的安全性带来严重威胁。现有的对Spectre变种1的研究存在很大的不足,需要进一步对Spectre变种1进行研究和探索。因此,本文的主要目的是找到程序中存在的Spectre变种1的安全漏洞。本文的主要贡献如下:第一,Spectre变种1漏洞的检测模式设计。通过测试分析现有的漏洞检测机制,发现现有的漏洞检测机制存在很大的漏报率和误报率。对Spectre变种1检测的难点是该漏洞本身存在很多变型,需要编写合理的检测规则来覆盖这些安全漏洞。所以本文通过分析Spectre变种1的攻击原理,提出相应的漏洞检测模式。该模式能够覆盖更全的安全漏洞,且误报率更低。第二,设计并实现了基于LLVM静态分析的Spectre漏洞检测机制。本文利用LLVM IR(Intermediate Representation)平台无关、代码无关和静态一次性赋值的好处,提出基于LLVM IR层面的静态分析方法。首先使用污点分析技术找到程序中能够被攻击者控制的不可靠数据,然后利用本设计提出的Spectre漏洞模式,检测出程序中的Spectre变种1的安全漏洞。第三,提出并实现了自底向上的分析方法。为了支持对大型程序的检测,本文提出并实现了提升分析性能的优化措施。本设计通过预先绘制程序中的函数关系调用图,提炼出需要分析的函数。并使用自底向上的分析方法进行检测,从而提升分析性能。测试表明,本设计比Microsoft编译器提供的/Qspectre检测机制更加准确。对于该攻击的15个测试实例,Microsoft编译器只能检测出其中的4种,而本设计能够全部检测出来。同时,也和现有的漏洞检测机制Smatch进行比较,发现本设计漏洞检测更加准确。最后通过对Linux内核进行分析,检测出20个安全漏洞,其中7个安全漏洞是已经被证实的安全漏洞。在这7个被证实的安全漏洞中,有两个是本设计新发现的安全漏洞,并向Linux社区提交了修复补丁,为Linux开源社区作出了一定贡献。