microsoft/restler-fuzzer
GitHub: microsoft/restler-fuzzer
RESTler 是微软研究院开发的首款有状态 REST API 模糊测试工具,能够利用 OpenAPI 规范自动测试云服务并发现深层的安全性与可靠性缺陷。
Stars: 2893 | Forks: 324
# RESTler
## 什么是 RESTler?
RESTler 是*首个有状态的 REST API 模糊测试工具*,用于通过 REST API 自动测试云服务,并在这些服务中发现安全性和可靠性缺陷。对于具有 OpenAPI(前身为 Swagger)规范的给定云服务,RESTler 会分析其整个规范,然后生成并执行通过其 REST API 对该服务进行测试的测试用例。RESTler 从 OpenAPI 定义中智能地推断请求类型之间的生产者-消费者依赖关系。在测试期间,它会检查特定的错误类别,并从先前的服务响应中动态学习服务的行为。这种智能使 RESTler 能够探索更深层的服务状态——这些状态只能通过特定的请求序列到达——并发现更多缺陷。
以下论文对 RESTler 进行了描述:
1. [RESTler: Stateful REST API Fuzzing](https://patricegodefroid.github.io/public_psfiles/icse2019.pdf) (ICSE'2019)
2. [Checking Security Properties of Cloud Service REST APIs](https://patricegodefroid.github.io/public_psfiles/icst2020.pdf) (ICST'2020)
3. [Differential Regression Testing for REST APIs](https://patricegodefroid.github.io/public_psfiles/issta2020.pdf) (ISSTA'2020)
4. [Intelligent REST API Data Fuzzing](https://patricegodefroid.github.io/public_psfiles/fse2020.pdf) (FSE'2020)
如果您在研究中使用 RESTler,请引用(默认的)ICSE'2019 论文 ([BibTeX](./docs/user-guide/icse2019.bib))。
RESTler 包含多种测试生成策略。为了获得关于 (i) 效率(即 RESTler 发现崩溃的速度有多快)和 (ii) 有效性(即 RESTler 在给定时间内能发现多少崩溃)的全面比较视角,我们建议与所有记录的 `fuzzing_mode(s)` 进行比较,因为每一种都在状态空间探索的广度和深度之间提供了不同的权衡。我们还建议在进行任何模糊测试之前运行 `test` 模式,如下所述,以便在模糊测试之前发现并修复设置问题(例如,将所需的先决条件参数值添加到字典中)。
RESTler 由 Microsoft Research 创建,目前仍在积极开发中。
有关如何开始的概述和演示,请参阅 [Webinar - Fuzzing to Improve the Security and Reliability of Cloud Services](https://www.youtube.com/watch?v=FYmiPoRwEbE)。

## 构建状态
[](https://dev.azure.com/ms/restler-fuzzer/_build/latest?definitionId=422&branchName=main)
## 设置 RESTler
RESTler 旨在运行在配置 Windows 或 Linux 的 64 位机器上。还启用了对 macOS 的实验性支持。
### **构建说明**
#### Docker
在此仓库的根目录中,运行
```
docker build -t restler .
```
生成的 docker 容器将在目录 `/RESTler/restler` 中提供 RESTler,其中包含主二进制文件 `Restler`。
然后,您可以以此 docker 镜像为基础,添加被测应用程序,以便在隔离的 docker 容器内执行模糊测试。
#### 本地
先决条件:为您的相应操作系统安装 [Python 3.12.8](https://www.python.org/downloads/) 和 [.NET 8.0](https://dotnet.microsoft.com/download/dotnet-core?utm_source=getdotnetcorecli&utm_medium=referral)。
创建一个您希望放置 RESTler 二进制文件的目录:
```mkdir restler_bin```
切换到仓库根目录并运行以下 Python 脚本:
```python ./build-restler.py --dest_dir <上面 restler_bin 的完整路径>```
注意:如果在构建时遇到 nuget 错误 NU1403,一个快速的解决方法是使用以下命令清除缓存
```dotnet nuget locals all --clear```
## 使用 RESTler
RESTler 按 4 种主要模式(按顺序)运行:
1. **Compile(编译):** 从 OpenAPI JSON 或 YAML 定义(以及可选的示例)生成 RESTler 语法。请参阅 [Compiling](./docs/user-guide/Compiling.md)。
2. **Test(测试):** 针对编译后的 RESTler 语法,快速执行所有 端点+方法 (endpoint+method),以调试测试设置并计算覆盖了 OpenAPI 定义的哪些部分。此模式也称为*冒烟测试*。
请参阅 [Testing](./docs/user-guide/Testing.md)。要使用自定义测试引擎设置,请参阅 [Test Engine Settings](./docs/user-guide/SettingsFile.md)。
3. **Fuzz-lean(精简模糊测试):** 使用默认的检查器集合,针对编译后的 RESTler 语法中的每个 端点+方法 执行一次,以查看是否可以快速发现缺陷。请参阅 [Fuzzing](./docs/user-guide/Fuzzing.md)。
4. **Fuzz(模糊测试):** 缺陷搜寻——在智能广度优先搜索模式(更深的搜索模式)下探索 RESTler 模糊测试语法,以发现更多缺陷。
**警告:** 这种类型的模糊测试更为激进,如果被测服务实现不当(例如,模糊测试可能会导致资源泄漏、性能下降、后端损坏等),可能会造成服务中断。
请参阅 [Fuzzing](./docs/user-guide/Fuzzing.md)。
## 快速开始
有关包含简单示例的快速介绍,请参阅此 [Tutorial](./docs/user-guide/TutorialDemoServer.md)。
若要在您的 API 上快速试用 RESTler,请参阅 [Quick Start](./docs/user-guide/QuickStart.md)。
## RESTler 发现的缺陷
RESTler 目前发现两类缺陷。
- **Error code(错误代码):** 目前,每当接收到状态码为 ```500```(“内部服务器错误”)的响应时,就会报告一个缺陷。
- **Checkers(检查器):** 每个检查器尝试通过在模糊测试期间的某些点(由上下文确定)执行针对特定目标的额外请求或请求序列来触发特定的缺陷。有些检查器试图查找额外的 500 错误,而其他检查器则试图查找特定的逻辑缺陷,例如资源泄漏或层级违规。有关检查器的完整描述,请参阅 [Checkers](./docs/user-guide/Checkers.md)。
当发现缺陷时,RESTler 会报告归类在缺陷存储桶 中的缺陷,并提供可用于重现该缺陷的重放日志(请参阅 [Replay](./docs/user-guide/Replay.md))。
## 高级主题
有关有效使用 RESTler 的提示,请参阅 [Best Practices](./docs/user-guide/BestPractices.md) 和 [Improving API Coverage](./docs/user-guide/ImprovingCoverage.md)。
另请参阅这些 [Frequently Asked Questions](./docs/user-guide/FAQ.md)。
如果您有兴趣大规模使用 RESTler 作为 CI/CD 流水线的一部分,请查看 [REST API Fuzz Testing self-hosted service](https://github.com/microsoft/rest-api-fuzz-testing)。
## 问题
如果您有请求/建议/问题,请提出 issue。
有关说明,请参阅 [Contributing.md](./docs/contributor-guide/Contributing.md)。
## 商标
本项目可能包含项目、产品或服务的商标或徽标。经授权使用 Microsoft 商标或徽标须遵守并遵循 Microsoft 的商标与品牌指南。在本项目的修改版本中使用 Microsoft 商标或徽标不得引起混淆,也不得暗示 Microsoft 的赞助。任何使用第三方商标或徽标的行为均须遵守该第三方的政策。
## 数据收集
该软件可能会收集有关您和您使用该软件的信息,并将其发送给 Microsoft。Microsoft 可以使用这些信息来提供服务并改进我们的产品和服务。您可以按照仓库中的说明关闭遥测功能。软件中还有一些功能可能允许您和 Microsoft 从您的应用程序用户那里收集数据。如果您使用这些功能,您必须遵守适用法律,包括向您的应用程序用户提供适当的通知以及 Microsoft 隐私声明的副本。我们的隐私声明位于 https://go.microsoft.com/fwlink/?LinkID=824704。您可以在帮助文档和我们的隐私声明中了解有关数据收集和使用的更多信息。您使用该软件即表示您同意这些做法。
有关更多信息,请参阅 [Telemetry.md](./docs/user-guide/Telemetry.md)。
## 报告安全问题
安全问题和缺陷应通过电子邮件私下报告给 Microsoft 安全响应中心 (MSRC),邮箱为 [secure@microsoft.com](mailto:secure@microsoft.com)。您应在 24 小时内收到回复。如果由于某种原因您没有收到,请通过电子邮件跟进,以确保我们收到了您的原始消息。更多信息,包括 [MSRC PGP](https://technet.microsoft.com/en-us/security/dn606155) 密钥,可以在 [Security TechCenter](https://technet.microsoft.com/en-us/security/default) 中找到。
有关其他详细信息,请参阅 [Security.md](SECURITY.md)。
# 隐私与 Cookie
https://go.microsoft.com/fwlink/?LinkId=521839
标签:API 安全, API 测试, Fuzzing, LNA, OpenAPI, pocsuite3, REST API, Swagger, 云服务, 代码生成, 代码覆盖率, 可靠性测试, 多人体追踪, 安全测试, 攻击性安全, 有状态模糊测试, 杀毒引擎, 渗透测试工具, 状态感知, 缺陷检测, 请求拦截, 软件测试, 逆向工具