OPENLOGIの大島です
OPENLOGI Advent Calendar 2017の9日目の記事です。
弊社のサービス開発では品質をより向上させるため、日々QA(Quality Assurance)が行われています。ただQAとかテストって結構めんどくさかったり難しかったりして完全に実施するのは難しいものです
その1つにフロント側でバリデーション(入力チェック)がかかっている部分は通常の操作ではサーバ側の挙動を確認できないというのがあります。
今回はその解決策として、Burp Suiteというツールを用いたサーバ側の処理のQA方法を紹介します。
Burp Suiteとは
ローカルプロキシツールです。HTTPリクエストやレスポンスを中継して、中身を確認したり自由にいじれたりできます。普通はWeb脆弱性診断などに使われるんですが、今回はもっと広い意味での動作確認に使ってみます。
一応注意事項
改変リクエストは攻撃として扱われるため、許可なく他人のサイトに送信すると不正アクセス禁止法にひっかかります。おやめください また自分が管理するサイトでもAWSなど外部サーバーに対して実施する場合はあらかじめ申請が必要です。
というわけで、基本的には自身のローカル開発環境に対して実施するようにしましょう。
導入
ここからBurp Suiteをダウンロード&インストールします。
https://portswigger.net/burp
開くとProject設定とか聞かれますが、TemporaryでOKです。
設定
ブラウザとサーバ間に挟むようにプロキシを設定します。ブラウザ⇔Burp
と Burp⇔サーバ
の2つの設定をします。
ブラウザ⇔Burp
今回は127.0.0.1:8888
を指定します。これがBurpが待受しているIP/Port番号になります。
ブラウザ側でプロキシ設定をします。Firefoxだと about:preferences#general
にアクセスしてネットワークプロキシ
タブです。
ここにBurpのListener
の値を指定します。
Burp⇔サーバ
スコープの設定をします。スコープで指定した対象のみにリクエストが送信されます。これをしないと予期しないところへリクエストを送ってしまうかもしれないので、設定しておきましょう。
基本の使い方
Proxyタブ→Interceptタブを見ると以下のように表示されています。
- 図の状態は、ブラウザが送ろうとしているリクエストをBurpが中断している状態です。ブラウザ上では通信中になっています。ボタンの機能は下記の通りです
-
Forward
: このリクエストを送信します -
Drop
: このリクエストを削除します -
Intercept is on
: リクエストを中断している状態を示しています。ボタンを押すとoffになり、溜まっている全てのリクエストが送信されます -
Action
: このリクエストを他のタブ(機能)へコピーして使えるようにします
-
- リクエストの中身が見えていますが、書き換えて送信ができます
通常はIntercept
をOffにしてブラウザを操作し、確認したいリクエストを送る直前でOnにします
例えば入力フォームで日時指定する項目があったとして、ここで書き換えて送信することで、本来はフロントの入力チェックで制限がかかっているような値でも自由に書き換えることができます。サーバ側で正しくエラーとして処理してくれることが確認できればOKです。
応用編
いちいちこんなことするのめんどくせえ!と思われたかもしれません。僕もそう思います
Burpには繰り返しテストしたいときに便利な機能があります。今回はRepeater
とIntruder
を紹介します。
HTTP History
その前にHTTP Historyについて紹介です。リクエストとレスポンスの履歴が全部確認できます。
数が多いので目的のものを探すのが大変なのですが、例えばParams
カラムにチェックがあるものはパラメーターがあるリクエストを示していたり、Edited
は改変したものを示していたりするので、うまく見つけましょう。
適当な行で右クリックすると、そのリクエストに対してアクションができます。今回はさっきのPOSTリクエストをRepeater
の機能で使用できるように、Send to Repeater
で送っておきます。
Repeater
指定したリクエストを繰り返し送信できる機能です。Go
を押すたびに左に書いてあるリクエストが送信されます。
先程のSend To Repeater
により指定したリクエストが左側に表示されているかと思いますが、ここからちょっとずつ値を書き換えながら繰り返し送信してみることができます。ちなみにレスポンスは右側に表示されるだけで、ブラウザには反映されません。
Intruder
リクエストの複数のパラメータを複数の好きな内容に改変して、それぞれリクエストを送ってくれるすごいやつです。
Positions
タブ
§
で囲まれている、色付けされた部分が指定した値に改変されます。改変される場所は自由に設定可能です。
Payloads
タブ
Payload Optionsで指定した値が代入されます。
下記の設定では指定した値を1つ1つのパラメータに順番に代入してリクエストを送ってくれます。
右上のStart attack
を押すとリクエストの送信が始まり、以下のように結果を一覧で確認できます。
このへんはだいぶセキュリティテストめいてきますが使いたくなる場面もあるかも・・ないかもしれません。
まとめ
ローカルプロキシツールBurp Suiteで動作確認を行う方法を紹介しました。Webセキュリティ関連で使われることが多い本ツールですが、うまく使えば開発者の動作確認の手段としても有効です。みなさんも良かったら使ってみてください