【论文精读】MINER:A Hybrid Data-Driven Approach for REST API Fuzzing

Introduction

早期的工作利用先前捕获的API流量和手动定义的规则来生成测试请求。最近,为了更好地自动推断请求类型之间的依赖关系并构造请求序列,提出了REST API模糊测试来测试云服务。通常

  1. REST API fuzzer的生成策略处理两个主要问题,即如何构造序列模板以及如何在模板中生成每个请求。生成后,fuzzer发送ready-to-use请求序列来测试目标云服务;
  2. 对于序列中的每个请求,云服务首先检查请求是否符合语法和语义。如果不是,它返回一个40x范围的响应。相反,云服务根据请求执行行为,例如,云服务在收到DELETE请求时删除资源。如果云服务行为正常,例如,它根据请求成功地删除了指定的资源,它将返回一个20x Range的响应。否则,云服务行为异常,例如,它试图删除不存在的资源并导致错误状态。然后,它返回一个50x范围的响应;
  3. fuzzer分析对每个请求的响应,推断云服务的触发状态;
  4. fuzzer收集触发错误状态的唯一请求序列,例如响应在50x范围内或违反安全规则的序列。按照上述步骤,REST API模糊器将使用生成的请求序列探索可访问的云服务状态。

现有工作的不足:

  1. 现有的fuzzers通常无法扩展请求序列模板。它们的序列扩展过程经常放弃已构建的序列模板,从空模板开始,这给构建更大长度的序列带来了挑战;
  2. 当在序列模板中生成请求时,现有的fuzzers随机选择请求参数的值。它们无法确定应该更改哪个参数或应该分配什么参数值,即请求上的键更改。

本文工作的内容:

  1. 面向长度的序列构建:MINER利用历史数据指导序列生成。具体来说,MINER收集在过去的模糊处理过程中已成功生成请求并通过云服务检查的序列模板,作为序列扩展过程的初始模板。然后,MINER利用概率函数在扩展过程中为长度较大的序列模板分配更多的选择次数;
  2. 基于注意模型的请求生成:为了提高请求生成质量,对于每一个通过检查的有效请求,MINER首先收集其参数和使用值作为关键突变。其次,MINER构建了一个注意力模型,该模型是最先进的神经网络模型之一,用于学习关键突变之间的隐含关系。然后,MINER利用该模型生成更多样化的所需键突变组合,从而构建高质量的请求以通过检查,并探索云服务的不同状态;
  3. 请求参数违例检查:MINER实现了一个额外的安全规则检查器来捕获不正确的参数使用错误。通过使用这个检查器,MINER生成一个带有未定义参数的新请求来测试云服务。例如,MINER可以构造一个包含未定义参数的PUT请求,该参数来自POST请求。如果请求得到的响应在50x范围内,MINER推断触发了不正确的参数使用错误,并在本地记录使用的请求,以便进一步分析。