論文メモ

RESTler: Stateful REST API Fuzzing

January 11, 2021

著者/所属機関

VaggelisAtlidakis (Columbia University) et al. (残り二人の著者はマイクロソフト)

出典

ICSE 2019 (https://patricegodefroid.github.io/public_psfiles/icse2019.pdf)

目的

  • REST APIの効率的なFuzzing

問題

  • 既存のREST APIツールは有効性が分かっていない

解法

  • ステートフルなFuzzingツールの実現
    • Swaggerの仕様で宣言されたリクエストタイプ間の関係(例えばAPI1のレスポンスをAPI2で使う=API1→API2の順で実行するという関係)を自動推論してテスト
    • テスト生成に過去のテスト実行結果からのフィードバックを使う(例えばAPI1→API3でAPI3が拒否されるなら以後のテストでこの組み合わせを使わない)
  • API呼び出しのシーケンスを、1ずつ長くしながら生成していく、此のときに上記をつかって現実的なシーケンスを残すようにする
    • シーケンス生成時の探索手法はいくつか考えられる(BFS, BFS-Fast, RandomWalk)ので評価実験し比較

結果

RQ1 API間依存推定とテスト結果動的フィードバックがFuzzingを効率的にするか?

  • サンプルのブログアプリで実験
  • 両方使う手法が最も高いカバレッジを出し、また最も早く500エラーを発見し、400エラーの数も少なかった

RQ2 RESTlerが生成したテストは、リクエスト列が長いほど深くサーバサイドのロジックを探索できるのか?

  • GitLabで実験
  • リクエスト列が長くなるほど、サーバサイドのRubyコードのカバレッジは一貫して増えた
  • ただし単純なBFSだとシーケンスの数が膨大になり頭打ちが見える

RQ3 3つの探索手法を様々なAPIに試した場合の違いはなにか?

  • GitLabで実験
  • BFS-Fastは、APIの種類の多いカテゴリだと高速にカバレッジ拡大、種類の少ない場合は単純BFSの方がカバレッジ高い
  • RandomWalkはリクエスト列をかなり長くして探索でき、いくつかのグループで最高のカバレッジ
  • バグ発見の観点ではRandomWalkが最も多くのバツを見つけた

その他

Tagged: #API #REST API #RESTler