20199130 2019-2020-2 《网络攻防实践》综合大实践
Posted 20199130yzf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20199130 2019-2020-2 《网络攻防实践》综合大实践相关的知识,希望对你有一定的参考价值。
20199130 2019-2020-2 《网络攻防实践》综合大实践
kAFL: Hardware-Assisted Feedback Fuzzing for OS Kernels
一、论文信息
1.1 论文相关信息
作者:Sergej Schumilo, Cornelius Aschermann, and Robert Gawlik, Ruhr-Universit?t Bochum;
Sebastian Schinzel, Münster University of Applied Sciences;
Thorsten Holz, Ruhr-Universit?t Bochum
论文链接:https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/schumilo
This paper is included in the Proceedings of the 26th USENIX Security SymposiumAugust 16–18, 2017 ? Vancouver, BC, Canada
本文包括在第26届USENIX安全研讨会的会议记录,2017年8月16日至18日·温哥华,加拿大
1.2 研究背景及内容
Fuzz在漏洞挖掘中是一个重要的过程,也是研究的重点。用户态的Fuzz被讨论的比较多,相关工具也比较多。但是内核的Fuzz难度较大,工具相较来说比较少。之前大部分的工具模拟效率低,对闭源操作系统支持较差。这篇论文就是实现了一个内核的Fuzz工具,利用了两个硬件特性来提高Fuzz的效率,最终完成了一个高效的内核Fuzz工具。这两个硬件特性都是Intel CPU提供的,一个是VT-x虚拟化技术,另一个是PT-Trace追踪功能。第一种是用于提高虚拟化效率的技术,相较于传统的模拟化,这种虚拟化使得VMM操作和控制VM时,将更加快速、可靠和安全。第二种PT追踪技术,让CPU可以搜集指令运行的部分上下文信息,这些信息对于推测Fuzz输入来说十分重要。作者结合了两种技术,并借鉴了著名Fuzz工具AFL的设计思路,完成了kAFL。经过测试,这款工具再发现能力和效率上都比较理想,带来的系统开销也几乎可以忽略不计,解决了目前内核Fuzz中存在的一些问题。
二. 系统概述
提供了一个高级别的概述,设计一个独立于操作系统和硬件辅助反馈引信,系统分为三个部分:
(1)模糊逻辑:在主机操作系统上作为环3进程运行,这种逻辑也称为kAFL
(2)VM基础设施:由环3组件(QE MU-PT)和环0组件(KVM-PT)组成,这有助于其他两个组件之间的通信,并使IntelPT跟踪数据可用于模糊逻辑。
(3)用户模式代理
一般情况下,客人只通过hypercall,然后主机可以读取和写入来宾内存,并在请求被处理后继续VM。系统架构如下:
Fuzzing运行通信过程如图:
2.1 Fuzzing Logic模糊逻辑
在大多数方面,它是基于AFL使用的算法。与AFL类似,使用位图来存储基本块转换,通过一个接口从VM中收集AFL位图到QE MU-PT,并决定哪些输入触发红色有趣的行为。模糊逻辑还协调并行生成的VM的数量。与AFL相比,更大的设计差异之一是kAFL广泛使用多处理和并行性。
2.2 User Mode Agent用户模式代理
在实践中,我们使用两个不同的组件:第一个程序是加载程序组件,它的工作是通过超调用接口接受任意二进制文件,此二进制文件表示用户模式代理并由加载程序组件执行。此外,加载程序组件将检查代理是否已崩溃(这在系统引信的情况下经常发生)且必要时重新启动。这个设置的优点是,我们可以将任何二进制文件传递给VM,并为不同的模糊组件重用VM快照。
2.3 Virtualization Infrastructure虚拟化基础设施
使用QE MU-PT与KVMPT交互以生成目标VM,此组件在CPU切换到来宾执行之前,在各自的逻辑CPU上配置和启用IntelPT,并在VM-Exit转换期间禁用跟踪。QE MUPT用于与KVM-PT接口交互,从用户空间配置和切换IntelPT,并访问输出缓冲区来解码跟踪数据。解码的跟踪数据直接转换为执行的条件分支指令的地址流。此外,QE MU-PT还根据先前对非确定性基本块的了解对已执行地址流进行过滤,以防止假阳性模糊结果,并将这些地址提供给用户模糊逻辑作为AFL兼容的位图。
2.4 Stateful and Non-Deterministic Code
跟踪操作系统会导致大量的不确定性,使用两种技术来应对这些挑战:
(1)过滤掉中断和处理中断时引起的转换
(2)将非确定性发生的任何基本块列入黑名单
2.5 Hypercalls
Hypercalls是虚拟化引入的一个特性
三、KAFL模块设计
3.1 KVM-PT
因为没有任何可公开使用的驱动程序能够在很长一段时间内跟踪单个vCPU的客人执行情况,为了解决这些缺点,我们开发了KVMPT。它允许我们在不确定的时间内跟踪vCPU,而不会产生任何调度副作用或由于溢出输出而丢失跟踪数据区域。扩展为KVMv CPU提供了快速可靠的跟踪机制。此外,这个扩展也像KVM一样公开了一个广泛的用户模式接口来访问这个跟踪功能我的用户空间。QE MU-PT利用这种新的接口与KVM-PT交互,并访问生成的跟踪数据。
3.1 QEMU-PT
为了使用KVM扩展KVM-PT,需要一个用户空间对应程序。QEMU-PT是QE MU的扩展,为KVM-PT的用户空间接口提供了充分的支持。该接口提供了在运行时启用、禁用和配置Intel PT的机制,以及定期对PA状态进行检查以避免超支。KVMPT可通过ioctl()命令和mmap()interfac从用户模式访问。除了作为KVM-PT的用户域接口之外,QE MU-PT还包括一个组件,该组件将跟踪数据解码为更适合于模糊逻辑的表单:我们解码IntelPT数据包并将它们转换变成一个类似AFL的位图。
3.3 AFL Fuzzing Logic
AFL的模糊部分用来执行调度和突变的逻辑与AFL的逻辑密切相关,AFL最重要的方面是用于跟踪遇到的基本块转换的位图。每个基本块都有一个随机分配的ID,从基本块A到另一个基本块B的每个转换都被分配到位图中
位图绘制公式:(id(A)/2⊕id(B)) % SIZE_OF_BITMAP
在完成模糊迭代后,位图的每个条目都是圆角的,这样只剩下最高的位。然后将位图与全局静态位图进行比较,看看是否找到了任何新位。如果有新的位置发现,它被添加到全局位图中,触发新位的输入被添加到队列中。当发现一个新的有趣的输入时,将执行一个确定性阶段,试图单独改变每个字节。
四、 Evaluation
4.1 Detected Vulnerabilities
在评估期间,kAFL发现了一千多个独特的崩溃。我们手动评估了一些,并在所有测试的操作系统中发现了多个安全漏洞,如Linux、Windows和MacOS。到目前为止,有8个bug被报告,其中3个被维护人员确认。
4.2 Fuzzing Performance
如图,在每次运行期间,我们将JSON解析器模糊30分钟,平均和四舍五入的结果如表1所示。正如我们所看到的,kAFL的性能在不同的系统中非常相似
从图中可以明显看出,kAFL发现了大量很难找到的路径到达三力AFL。在10-15分钟的标记周围,kAFL大多停止寻找新的路径,因为目标驱动程序只是不包含任何更多要被发现的路径
显示了kAFL在这个破坏阶段与TriforceAFL相比的原始执行性能。与TriforceAFL的QE MU CPU仿真相比,KAFL提供了高达54倍的性能。 在单进程执行中,性能提升略低(速度快48倍)
上图说明了与没有KVM-PT的KVM执行相比的相对开销。我们进行了三个实验来确定不同组件的开销,在每个实验中,我们测量了三种不同的开销:壁钟时间、用户和内核。在第一次实验中,痕迹被丢弃,无需进一步分析(KVM-PT)。在第二个实验(KVM-PT&toPA检查)中,我们启用了对toPA缓冲区的重复检查和清除。在最后的实验(KVM-PT&PT解码器)中,我们测试了整个管道,包括我们自己的解码器和转换到AFL位图。在我们的基准期间,1%-4%之间的开销是经验性测量的。由于由此产生的开销很小,我们不期望它对整个引信性能有重大影响。
上图说明了与ptxed相比,我们的PT解码器的测量速度,图还显示,我们的PT解码器很容易优于Intel解码器实现,即使PT解码器第一次处理数据。当我们解码越来越多相同的跟踪副本时,可以看出我们的解码器变得越来越快(只使用56倍的时间来解码250倍的数据量),缓存方法优于Intel的实现速度高达25到30倍。
五、 设计与实现
在功能设计上,KAFL采用了模块化的设计,扩展性好,修改更加灵活。整体设计分为VMM部分和VM部分。
VMM中可以分为3个模块KVM,QEMU-PT和kAFL。VM又能分为Target Kernel和Agent。
- KVM中实现了PT追踪功能,负责收集目标内核的运行信息。
- QEMU-PT除了作为KVM和kAFL交互的中间件之外,还有一个很重要的功能就是作为PT data的decoder。
- kAFL就是Fuzz工具的逻辑部分了,整体设计实现上都借鉴了AFL的思路。会根据反馈结果更高效的生成下一次输入。
- Target Kernel就是目标Kernel了,该工具对主流的操作系统都做了支持。
- Agent同样也作为一个交互的中间件,主要和目标Kernel做一些交互操作,如挂载镜像。
以上是关于20199130 2019-2020-2 《网络攻防实践》综合大实践的主要内容,如果未能解决你的问题,请参考以下文章
2019-2020-2 20175228 李玥琛《网络对抗技术》Exp9 Web安全基础
2019-2020-2 网络对抗技术 20175208 Exp7 网络欺诈防范
2019-2020-2 网络对抗技术 20175208 Exp7 网络欺诈防范
2019-2020-2 20175216 《网络对抗技术》Exp7 网络欺诈防范