[論文レビュー] foREST: A Tree-based Approach for Fuzzing RESTful APIs
本稿では、エンドポイントの階層構造をモデル化することで依存関係モデリングの効率を向上させる、RESTful API向けの新しいツリー基盤のファズィング手法foRESTを提案する。OpenAPI/Swagger仕様からAPIツリーを構築し、前順走査によって走査することで、依存関係の複雑さを二次関数的から一次関数的へと低減し、EvoMaster や RESTler よりもコードカバレッジを11.5%から82.5%まで向上させるとともに、実サービスで11件の新たなバグを発見した。
Representational state transfer (REST) is a widely employed architecture by web applications and cloud. Users can invoke such services according to the specification of their application interfaces, namely RESTful APIs. Existing approaches for fuzzing RESTful APIs are generally based on classic API-dependency graphs. However, such dependencies are inefficient for REST services due to the explosion of dependencies among APIs. In this paper, we propose a novel tree-based approach that can better capture the essential dependencies and largely improve the efficiency of RESTful API fuzzing. In particular, the hierarchical information of the endpoints across multiple APIs enables us to construct an API tree, and the relationships of tree nodes can indicate the priority of resource dependencies, extit{e.g.,} it's more likely that a node depends on its parent node rather than its offspring or siblings. In the evaluation part, we first confirm that such a tree-based approach is more efficient than traditional graph-based approaches. We then apply our tool to fuzz two real-world RESTful services and compare the performance with two state-of-the-art tools, EvoMaster and RESTler. Our results show that foREST can improve the code coverage in all experiments, ranging from 11.5\% to 82.5\%. Besides, our tool finds 11 new bugs previously unknown.
研究の動機と目的
- REST APIファズィングにおけるグラフ基盤の依存関係モデリングの非効率性、特にAPI依存関係の指数関数的増加を是正すること。
- APIエンドポイント間の階層的関係をモデル化することで、有効で多様なテストケースの生成の正確性と効率を向上させること。
- グラフにおけるO(n²)の依存関係走査の複雑さをツリーにおけるO(n)へ低減させ、より高速でスケーラブルなファズィングを実現すること。
- ツリー走査と動的依存関係評価を通じてリソース管理とリクエストシーケンス生成を強化すること。
- 実サービスを対象に本手法の評価を行い、RESTler や EvoMaster などの最先端ツールと比較すること。
提案手法
- OpenAPI/Swagger仕様を解析してエンドポイントURLを抽出し、'/'デリミタでURLを分割することで階層的ツリーを構築する。
- 各URLセグメントをツリーのノードとして表現し、ルートからリーフノードまでのパスをエッジで結ぶことで、エンドポイントの階層を捉える。
- 各ノードにサポートされるHTTPメソッドの属性を割り当てるとともに、状態保持テストを可能にするためにリソースを格納するバッファを維持する。
- テンプレートベースのリクエスト順序戦略を適用:最初にGETを実行し、次に複数のPOSTを実行し、その後PUTとDELETEを実行することで、子孫ノードのリソースを保持する。
- 動的依存ペア評価を適用し、兄弟ノードや子孫ノードよりも親ノードの依存関係を優先することで、生成されたリクエストの妥当性を向上させる。
- 複数のエンドポイント階層を扱うために、サービス内のすべてのツリーを反復的に走査し、API数に対して線形時間計算量を維持する。
実験結果
リサーチクエスチョン
- RQ1従来のグラフ基盤手法と比較して、ツリー基盤モデルはAPI依存関係モデリングの複雑さを低減できるか?
- RQ2エンドポイントの階層関係をモデル化することで、REST APIファズィングにおけるテストケース生成の効率性と妥当性は向上するか?
- RQ3コードカバレッジとバグ検出の観点から、ツリー基盤手法はグラフ基盤手法をどの程度上回るか?
- RQ4実世界のファズィングシナリオにおいて、foRESTはRESTler や EvoMaster などの最先端ツールと比較してどのように差をつけるか?
- RQ5複雑で多層的なREST API構造を扱う場合に、ツリー基盤手法は高いコードカバレッジを維持できるか?
主な発見
- ツリー基盤手法により、グラフにおけるO(n²)の依存関係複雑さがO(n)に大幅に低減され、走査効率が向上した。
- foRESTは全実験においてEvoMasterおよびRESTlerを上回るコードカバレッジを達成し、改善率は11.5%から82.5%まで変動した。
- WordPressおよびGitLabのファズィングにおいて、foRESTは11件の以前未知のバグを発見し、実サービスにおける脆弱性検出の有効性を示した。
- 親ノードの依存関係を優先する前順走査戦略により、有効で状態保持可能なテストシーケンスの生成確率が向上した。
- foRESTのプロトタイプ実装は、複数のエンドポイントツリーを正常に処理し、API数に対して線形スケーラビリティを維持した。
- グラフ基盤手法と比較して、ツリー基盤モデルはより正確な依存関係関係を生成し、無効または重複するリクエストパスの発生を低減した。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。