
RESTlerは、クラウドサービスのREST APIを自動的にテストし、セキュリティや信頼性のバグを発見するための、初のステートフルREST APIファジングツールです。
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はMicrosoft Researchで作成され、現在も活発に開発が続けられています。
概要と開始方法のデモについては、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コンテナ内でファジングを実行できます。
前提条件: 適切なOS用に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つの主要モード(順番に)で実行されます。
簡単な例を使ったクイックイントロダクションについては、このTutorialを参照してください。
APIでRESTlerをすぐに試すには、Quick Startを参照してください。
現在、RESTlerによって発見されたバグには2つのカテゴリがあります。
500("Internal Server Error")のレスポンスが受信されるたびに、バグが報告されます。バグが発見されると、RESTlerはバグバケットにトリアージされたバグを報告し、バグを再現するために使用できるリプレイログを提供します(Replayを参照)。
RESTlerを効果的に使用するためのヒントについては、Best PracticesとImproving API Coverageを参照してください。
Frequently Asked Questionsも参照してください。
CI/CDパイプラインの一部としてRESTlerを大規模に使用することに興味がある場合は、REST API Fuzz Testing self-hosted serviceをチェックしてください。
リクエスト/提案/質問がある場合は、issueを提出してください。 手順についてはContributing.mdを参照してください。
このプロジェクトでは、貢献と提案を歓迎します。ほとんどの貢献には、あなたが貢献を使用する権利を持ち、実際に私たちにその権利を付与することを宣言するContributor License Agreement(CLA)に同意する必要があります。詳細については、https://cla.microsoft.comをご覧ください。
プルリクエストを送信すると、CLAボットが自動的にCLAを提供する必要があるかどうかを判断し、PRに適切にラベルを付けたりコメントを追加したりします。ボットの指示に従ってください。この操作は、CLAを使用するすべてのリポジトリで一度だけ行う必要があります。
このプロジェクトはMicrosoft Open Source Code of Conductを採用しています。詳細については、Code of Conduct FAQを参照するか、追加の質問やコメントについては[email protected]までお問い合わせください。
詳細については、Contributing.mdを参照してください。
このプロジェクトには、プロジェクト、製品、またはサービスの商標またはロゴが含まれている場合があります。Microsoftの商標またはロゴの許可された使用は、Microsoftの商標およびブランドガイドラインに従う必要があります。このプロジェクトの修正バージョンでのMicrosoftの商標またはロゴの使用は、混乱を引き起こしたり、Microsoftの後援を暗示したりしてはなりません。第三者商標またはロゴの使用は、当該第三者のポリシーに従うものとします。
本ソフトウェアは、お客様およびお客様の本ソフトウェアの使用に関する情報を収集し、Microsoftに送信する場合があります。Microsoftはこの情報を使用してサービスを提供し、製品およびサービスを改善することができます。リポジトリに記載されているように、テレメトリをオフにすることができます。また、本ソフトウェアには、お客様がアプリケーションのユーザーからデータを収集することを可能にする機能が含まれている場合があります。これらの機能を使用する場合は、適用される法律を遵守し、Microsoftのプライバシーに関する声明のコピーとともにアプリケーションのユーザーに適切な通知を提供する必要があります。Microsoftのプライバシーに関する声明は https://go.microsoft.com/fwlink/?LinkID=824704 にあります。データの収集と使用の詳細については、ヘルプドキュメントとプライバシーに関する声明をご覧ください。本ソフトウェアの使用は、これらの慣行に同意したものとみなされます。
詳細については、Telemetry.mdを参照してください。
セキュリティの問題とバグは、電子メールでMicrosoft Security Response Center (MSRC) に私的に報告してください。 [email protected]。24時間以内に返信が届くはずです。何らかの理由で返信がない場合は、元のメッセージが確実に届いたことを確認するために電子メールでフォローアップしてください。詳細情報(MSRC PGPキーを含む)は、Security TechCenterにあります。
詳細については、Security.mdを参照してください。