RESTler 是首个有状态的 REST API 模糊测试工具,用于通过 REST API 自动测试云服务,并发现这些服务中的安全性和可靠性错误。对于具有 OpenAPI(原名 Swagger)规范的云服务,RESTler 分析其完整规范,然后生成并执行通过 REST API 对服务进行测试的测试用例。
RESTler 智能地从 OpenAPI 定义中推断出请求类型之间的生产者-消费者依赖关系。在测试过程中,它会检查特定类别的错误,并根据先前的服务响应动态学习服务的行为方式。这种智能使 RESTler 能够探索只有通过特定请求序列才能到达的更深入服务状态,并发现更多错误。
RESTler 在以下同行评审的研究论文中有描述:
如果您在研究中使用 RESTler,请引用(默认的)ICSE'2019 论文(BibTeX)。
RESTler 包含多种测试生成策略。为了获得关于(i)效率(即 RESTler 能多快发现崩溃)和(ii)有效性(即在给定时间范围内 RESTler 能发现多少崩溃)的全面比较视图,我们建议对所有记录的 fuzzing_mode(s) 进行比较,因为每种模式在状态空间探索的广度与深度之间提供了不同的权衡。我们还建议在进行任何模糊测试之前先运行 test 模式,如下所述,以发现并修复设置问题(例如,在模糊测试之前向字典添加必需的先决条件参数值)。
RESTler 创建于微软研究院,目前仍在积极开发中。
有关概述和入门演示,请参阅 Webinar - Fuzzing to Improve the Security and Reliability of Cloud Services。

RESTler 设计在运行 Windows 或 Linux 的 64 位机器上运行。实验性支持 macOS。
在此仓库的根目录中,运行
docker build -t restler .
生成的 Docker 容器将在目录 /RESTler/restler 中提供 RESTler,主二进制文件为 Restler。
然后,您可以使用此 Docker 镜像作为基础,添加被测应用程序,以便在隔离的 Docker 容器中执行模糊测试。
先决条件:安装 Python 3.12.8 和 .NET 8.0,适用于您的操作系统。
创建一个希望放置 RESTler 二进制文件的目录:
mkdir restler_bin
切换到仓库根目录,运行以下 Python 脚本:
python ./build-restler.py --dest_dir <上面 restler_bin 的完整路径>
注意:如果在构建时遇到 nuget 错误 NU1403,一种快速解决方法是使用以下命令清除缓存:
dotnet nuget locals all --clear
RESTler 按顺序运行在 4 种主要模式下:
有关带有简单示例的快速介绍,请参阅此教程。
要快速在您的 API 上试用 RESTler,请参见 快速入门。
目前有两个类别的错误由 RESTler 发现。
500(“内部服务器错误”)的响应,就会报告一个错误。当发现错误时,RESTler 会报告已分类到错误桶中的错误,并提供可用于重现错误的重放日志(参见 重放)。
有关有效使用 RESTler 的技巧,请参见 最佳实践 和 提高 API 覆盖率。
另请参阅这些常见问题解答。
如果您有兴趣在 CI/CD 管道中大规模使用 RESTler,请查看 REST API Fuzz Testing 自托管服务。
如果您有请求/建议/问题,请提交一个 issue。 参见 Contributing.md 获取说明。
本项目欢迎贡献和建议。大多数贡献要求您同意一份贡献者许可协议(CLA),声明您有权并且确实授予我们使用您贡献的权利。详情请访问 https://cla.microsoft.com。
当您提交拉取请求时,CLA 机器人会自动判断您是否需要提供 CLA,并适当装饰 PR(例如标签、评论)。只需按照机器人提供的说明操作。您只需在所有使用我们 CLA 的仓库中执行一次此操作。
本项目采用了 Microsoft Open Source Code of Conduct。 有关更多信息,请参阅 行为准则常见问题解答 或联系 [email protected] 提出任何其他问题或评论。
有关更多信息,请参见 Contributing.md。
本项目可能包含项目、产品或服务的商标或徽标。授权使用微软商标或徽标必须遵守并遵循微软的商标和品牌指南。在本项目修改版本中使用微软商标或徽标不得引起混淆或暗示微软赞助。任何第三方商标或徽标的使用均须遵守该第三方的政策。
本软件可能会收集有关您和您使用本软件的信息,并将其发送给微软。微软可能使用此信息来提供服务并改进我们的产品和服务。您可以根据仓库中的说明关闭遥测。本软件中的某些功能还可能使您和微软能够从您的应用程序的用户那里收集数据。如果您使用这些功能,您必须遵守适用法律,包括向您的应用程序用户提供适当的通知以及微软隐私声明的副本。我们的隐私声明位于 https://go.microsoft.com/fwlink/?LinkID=824704。您可以在帮助文档和隐私声明中了解有关数据收集和使用的更多信息。您对本软件的使用即表示您同意这些做法。
有关更多信息,请参见 Telemetry.md。
安全问题和错误应通过电子邮件私下报告给微软安全响应中心 (MSRC),邮箱地址为 [email protected]。您应该在 24 小时内收到回复。如果由于某些原因未收到回复,请通过电子邮件跟进以确保我们收到了您的原始消息。更多信息,包括 MSRC PGP 密钥,可以在 安全 TechCenter 中找到。
有关更多详细信息,请参见 Security.md。