Rollback Mechanism of Nested Virtual Machines for Protocol Fuzz Testing

摘要

安全通信(HTTPS、SSH等)在当前的Internet服务中非常重要。安全协议的实现应该尽可能详尽地测试。需要对每个可达状态进行重复的协议模糊测试,并需要快照/回滚机制。然而,普通的快照工具只会返回进程或虚拟机的状态,而不会处理在一条连接上的数据包。此外,安全协议本质上依赖于计算环境(例如,随机数),并且使得重复相同的测试变得困难。为了方便和普遍地解决这些问题,我们提出了一种新的控制VM快照/回滚的协议,使用嵌套VM和代理的实现。嵌套VM的内部VM仿真整个硬件以进行协议处理的精确重复,外部VM和代理用于管理内部VM和一条连接上的包的状态。在当前的实现中,内部VM是指令模拟器QEMU,外部VM是使用虚拟化指令的KVM。在可行性研究中,我们验证了4个TLS 1.2服务器(OpenSSL、GnuTLS、CyaSSL和PolarSSL),发现CyaSSL中有2个bug,PolarSSL中有1个bug。

1.前言

首先,普通的快照工具只处理一个计算实例(即进程或虚拟机(VM))而一般不处理多个计算实例。此功能可能会导致服务器和客户端之间的不一致,因为它不处理一条连接上的数据包。其次,协议模糊测试需要在发送特定数据包之前获取快照。然而,大多数快照工具都是独立于数据包的,它们必须经过定制才能由特定的数据包触发。第三,一些安全协议本质上依赖于计算环境(如硬件生成的随机数、Intel Sandy Bridge的RDRAND指令、TPM(Trusted Platform Module)芯片中的随机生成器等)。随机数应该是完全可重复的,因为它们用于查找特定计算状态下的漏洞。这意味着用于安全协议测试的回滚方案必须处理整个计算环境。

本文提出了一种新的虚拟机快照/回滚控制协议。该协议封装了目标协议的数据包,便于控制。作为协议处理程序的实现,我们使用具有代理的嵌套VM。嵌套VM的内部VM仿真整个硬件以进行协议处理的精确重复,外部VM和代理用于管理内部VM和一条连接上的包的状态。该实现不仅容易,而且一般适用于其他VM,因为它利用标准虚拟机监视器(VMM)的现有快照/回滚函数,并且不需要对VMM进行任何定制。嵌套vm可能看起来过于规范,但是一些优化(减少内存使用和省略GUI)可以获得适当的性能。

2.协议模糊测试的难点

2.1服务器和客户端之间的一致性

为了恢复安全通信,必须保持服务器和客户端之间的一致性。然而,普通的快照工具在一侧(客户机或服务器)获取进程或VM实例的快照映像,而不在连接上处理数据包,这就是所谓的分布式快照问题。这并不意味着服务器和客户机上的同步快照,因为获取快照的时间通常比发送数据包的时间长,而且不容易保证分布式系统上的物理一致快照。关键是保持已创建数据包的逻辑一致性。

2.2包级粒度控制

安全协议的协议模糊测试要求对每个包重复测试。这意味着快照必须按包级别的粒度进行管理。快照命令必须在某个数据包之前发出。

不幸的是,当前的快照工具无法区分数据包,因为快照命令是独立于数据包发出的。为了解决这个问题,快照机制需要识别每个包。

此外,当在某个虚拟机上拍摄每个快照时,服务器和客户端之间的连接被切断。回滚方案需要在恢复状态时管理连接的重新建立。

作为解决方案,我们提出了控制快照和回滚的协议。测试目标协议由该协议在模糊数据包生成器中封装,并由快照工具在测试目标上解封。使用该协议,在安全通信流中的某个包之前拍摄快照。恢复快照时,协议处理程序必须重新建立网络连接,而不是虚拟机。

2.3计算环境回退

安全协议的许多实现依赖于计算环境。当计算环境改变时,安全通信的行为也随之改变。安全协议的实现不包括普通随机数生成器,因为随机数是由其计算环境提供的。一些随机数生成器依赖于硬件(例如英特尔Sandy Bridge的RDRAND指令),并且不可重复。这个证据表明协议测试应该包括它的计算环境。

对于协议模糊测试,计算环境的回滚应该是可重复的。这意味着所有的行为都应该准确地重复。如果回滚映像的行为不同,则很难验证实现。因此,当发生回滚时,随机数必须是可重复的。

为了包含可重复的随机数,我们需要使用模拟完整硬件的虚拟机。然而,虚拟机上可重复的随机数也给实际应用带来了另一个问题。可重复的随机数向攻击者提供提示。有些虚拟机有一种防止可重复随机数的机制。因此,我们必须选择一个重复相同随机数的虚拟机进行协议测试。

3.虚拟测试协议

封装现有协议并控制虚拟机的协议

在这里插入图片描述

VTP(虚拟测试协议)封装现有的安全协议,并控制VM快照和回滚。VTP在线路上维护安全的通信流。VTP主要由三个基本协议组成:

  • “胶囊”:安全通信包采用胶囊协议封装。当发出快照或回滚数据包时,将管理封装数据包的流。
  • “快照”:它获取VM快照映像。一条连接上的数据包必须通过某种方法进行管理。返回快照ID。
  • “回滚”:它恢复快照。如果VM断开通信,则重新建立网络连接。

fuzz packet generator 生成协议数据包被“胶囊”协议封装,数据包在内部代理处被解封装。每个封装的包被视为数据包。包有一个序列号,并且流是受控的。

take_snapshot数据包用于获取外部虚拟机的快照并返回快照ID。它还确认所有封装的数据包都已从线路中刷新。

每个rollback数据包都有snapshot ID,rollback数据包恢复外部虚拟机的相应快照映像。rollback数据包在不被安全通信识别的情况下管理dis-和re-connection。

4.嵌套虚拟机&代理

协议模糊测试要求协议处理的精确重复和快照的协议级控制。为了方便地实现这些需求,我们使用嵌套VM和代理。嵌套VM的内部VM仿真整个硬件和进行协议处理的精确报告,外部VM和代理用于管理内部VM和一条连接上的包的状态。外部VM不需要模拟整个硬件。外部VM需要对内部VM进行快速控制。

作为一个原型实现,嵌套VM由KVM和QEMU组成,分别是外部vmm和内部vmm。内部QEMU是一个软件仿真器,当它被外部KVM回滚时重复相同的硬件行为。外部KVM使用虚拟化指令(如Intel VT-d和AMD SVM)并取得良好的性能。

优化:移除了虚拟机都有一个模拟视频卡的默认GUI。

在这里插入图片描述

5.实现

TLS协议fuzz

6.讨论

快照和回滚的性能(时间和图像大小)取决于虚拟机中使用的内存大小。这是由于为快照获取整个内存映像所致。如果VMM可以使用只保存已更新内存页的差异快照机制,则开销时间将减少。在VM迁移中也使用了相同的技术,但尚未在VM快照中应用。特别是,模糊包生成器在很短的时间内为每个包拍摄快照,并且更新的内存页预计很少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值