2023年的第一篇论文推荐是来自复旦大学系统软件与安全实验室与犹他大学徐军老师研究组,共同投稿发表于IEEE S&P 2023的一篇关于漏洞可利用性评估的论文:AEM: Facilitating Cross-Version Exploitability Assessment of Linux Kernel Vulnerabilities。
漏洞危害性是下游厂商在安全维护方面一个重要的参考指标,例如厂商可以通过漏洞危害程度设计补丁开发和部署方案。其中一个重要的维度是理解漏洞的可利用性,而到目前为止,理解漏洞可利用性的主要方法是针对漏洞手动构造漏洞利用程序。手动构造的漏洞利用程序的一个常见问题是它们通常只能应用在特定软件的特定版本上,无法用于判断漏洞在其他同样受影响的版本上是否可以被利用。
以Linux 内核为例,Linux 内核有数千个主版本和定制版本。然而,根据文章对过去五年公开的Linux内核漏洞利用程序的初步调研,有大约80%的漏洞利用程序是仅针对一个特定版本开发的。这种缺少跨版本的漏洞可利用性评估的能力可能会导致许多安全问题。例如,对于一个定制化的内核,如果无法证明相关漏洞在该内核上的可利用性,下游厂商可能会忽略或者推迟对相应漏洞的修补。受到这些观察的启发,文章工作关注于对Linux内核漏洞的跨版本可利用性评估:对于一个漏洞,给定一个针对特定内核版本的利用程序,如何理解该漏洞在其他版本的可利用性?
文章作者进一步利用五年内公开的漏洞利用程序对跨版本可利用性评估所面临的挑战进行了详细的分析和研究。通过观察作者发现,由于不同内核版本间与内核漏洞利用相关的代码以及数据发生变动,导致已有漏洞利用程序无法直接成功运行在不同内核版本上。
同时,现有漏洞利用程序自动生成方案由于两点原因也无法有效应用在跨版本的漏洞可利用性评估。首先,现有方案通常由漏洞验证程序开始生成漏洞利用程序,这会引入非常复杂的操作、产生极大的开销。其次,现有方案由于其模板驱动的特性使得其也无法适配不同内核版本间引入的变动。
文章提出了一个全新的思路来解决跨版本漏洞可利用性评估问题:自动化漏洞利用程序迁移。其中,作者最核心的理念在于可以成功运行的漏洞利用程序使用的漏洞利用策略通常适用于不同版本的内核。因此,以成功的漏洞利用过程作为参考,针对不同版本的内核调整漏洞利用程序,使得其满足成功的漏洞利用所需的执行上下文,从而最终触发漏洞利用原语,实现漏洞利用程序在不同版本内核间的迁移。
漏洞利用程序通过系统调用与内核进行交互从而完成漏洞利用过程。所以,在本项工作中,作者从系统调用以及调用参数的角度调整漏洞利用程序。然而,从系统调用角度出发调整漏洞利用程序,仍旧存在下述两个基础性挑战:
如何知道调整哪一个系统调用?真实世界的内核漏洞利用程序通常会使用大量的系统调用。考虑调整所有的系统调用和相关参数会引入巨大的搜索空间从而产生极高的计算复杂度。
如何调整一个系统调用?内核漏洞利用通常需要结合精准的内存布局和代码执行上下文。因此,盲目地尝试修改一个系统调用的参数难以保证漏洞利用程序的正确生成。
针对上述两个问题,作者提出的方法基于两个关键技术:
以原语为中心的内存抽象。由于漏洞原语的触发是一系列内存操作的累积结果,因此作者通过利用内存操作对漏洞利用过程进行抽象,定位到漏洞利用过程中的关键步骤,在后续调整过程中仅需关注调整关键内存操作依赖的系统调用即可。
以对齐为导向的漏洞利用程序调整。通过以成功执行的漏洞利用流程作为参考,作者在目标内核上重新运行漏洞利用程序,并再次收集和对齐失败的关键内存操作实现漏洞利用程序的迁移。在对齐过程中,作者避免使用内核的底层执行信息,而选择使用内核执行上下文信息实现内存操作的对齐。
为了提高准确性,作者同时考虑了内存操作的代码上下文(如,源码位置)和数据上下文(如,访问数据的类型)。
最终,作者利用针对22个漏洞的28个漏洞利用程序和13个Linux内核对系统进行了评估。结果如图所示。相较于传统工作,该系统可以有效解决不同内核版本间代码以及数据差异对评估带来的影响,准确实现漏洞利用程序的迁移并对内核漏洞的跨版本可利用性进行评估。
还没有评论,来说两句吧...