SST連載・解説記事

  1. HOMEHOME
  2. SSTコラムSSTコラム
  3. SSTなるほど!コーナー
  4. 07 Fiddler の少し便利な使い方

(2016年8月30日公開)

07 Fiddler の少し便利な使い方

なるほど!コラム_関連キーワード Fiddler , HTTP通信 , 通信のキャプチャ  , 使い方

はじめに

今回の執筆者プロフィール

長谷川 洋介(はせがわ ようすけ)

株式会社セキュアスカイ・テクノロジー
取締役CTO はせがわようすけ
Facebook

技術革新の速いWebセキュリティに関連する研究において長期にわたり最先端で活躍。国内、海外でのカンファレンスでの講演や記事執筆も多数。2015年7月より株式会社セキュアスカイ・テクノロジーの常勤技術顧問に就任。同社にて2017年1月よりCTOを務める。2018年3月より取締役CTOに就任。


Fiddlerは、元マイクロソフトでInternet Explorerの開発にも深く関わっていたEric Lawrence氏が開発したHTTPに特化したキャプチャツール(HTTPプロキシ)で、WebアプリケーションだけでなくHTTPで通信する様々なアプリケーションの開発のためにも広く利用されています。
.NET Framework上で動作しますので、原則としてWindows上で動作することになります。(Linux向けの.NET環境であるmono上で動作するバージョンもアルファ版として提供されていますが、あくまでもアルファ版でありこの2年ほどは更新されていません。)

同種のHTTPプロキシツールとしては、Fiddlerの他にもBurp SuiteOWASP ZAPといったものがありますが、BurpやZAPが脆弱性診断ツールという位置づけであるのに対し、Fiddlerはデバッグのためのツールといった側面が強いものとなっています。

本稿では、Fiddlerの基本から知っておくと便利に使えるテクニックまで、Fiddlerを使いこなす様々な方法をご紹介します。 なお、本稿ではFiddler v2.6.2.26757をもとに執筆しています。

HTTP通信のキャプチャ

Fiddlerを起動すると、Fiddler自身がWindowsのシステムプロキシとして動作し始めるためInternet Explorerなどの通信は自動的にFiddlerにてキャプチャされるようになります。 ブラウザを含むほとんどのプログラムはWindowsのシステムプロキシを利用するため、ブラウザ上で明示的にプロキシ設定を変更する必要は通常はありません。

Fiddlerは図1のように画面左半分にセッション(リクエストとレスポンスのペア)の一覧、右半分はタブで様々な情報を切り替えて表示するようになっています。
多くの場合は ①の「Inspectors」タブを選び、画面右半分の上下にそれぞれリクエストとレスポンスの詳細を表示するという使い方が基本 になるでしょう。

Fiddler画面
図1

「Inspectors」タブではさらに リクエスト、レスポンスごとに様々な表示方法が②で選択 できます。
実際に切り替えてみてどのように表示されるかを確認してみるといいでしょう。

また、レスポンスでは③のように時々「Response body is encoded.Click to decode.」と黄色いバーが表示されていることがあります。
これは、サーバからのレスポンスにて Content-Encodingにgzipやdeflateが指定されている場合にこのように表示されますので、 ③の黄色いバーをクリックするとデコードされた状態でレスポンスが表示 されるようになります。

gzipエンコードされたレスポンスを都度デコードするのが面倒という場合は、ツールバー上の ④の「Decode」ボタンを押しておくと、レスポンスをすべて自動でデコードする ようになります。

HTTPSの通信をキャプチャする

FiddlerでもBurpと同様にブラウザ側にFiddlerが生成した証明書をインストールすることで、HTTPS通信もキャプチャして表示させることができます。
ただし、Fiddlerで生成される証明書は1024ビットのため、ブラウザによっては証明書のエラーが出ることがあります。

FiddlerでHTTPSもキャプチャするには

  1. 「Tools」メニューの「Telerik Fiddler Options」を選び図2の①「HTTPS」タブを開きます。
  2. Fiddler操作方法_HTTPSタブ 図2
  3. HTTPSタブ内の②「Capture HTTPS CONNECTs」および③「Decrypt HTTPS traffic」にチェックを入れます。
    このとき、図3のように「Fiddlerの生成するルート証明書を信頼するか」を問う確認ダイアログが表示されますので内容を確認して「Yes」をクリックします。
  4. Fiddler操作方法_ダイアログ1
    図3
  5. 続けて、ルート証明書をWindowsにインストールするためのセキュリティ警告ダイアログ(図4)が表示されますので、これも内容を確認して「はい」をクリックします。
  6. Fiddler操作方法_ダイアログ2
    図4

これで、Windowsの証明書ストアにFiddlerの生成したルート証明書がインストールされ、FiddlerでHTTPSのキャプチャができるようになります。

FirefoxのようにWindowsの証明書ストアを使わないブラウザのHTTPS通信をキャプチャするには、Fiddlerにて証明書ファイルを明示的にエクスポートしブラウザ側でそれをインポートする必要があります。
図2の「Telerik Fiddler Options」ダイアログの「HTTPS」タブ内の④「Actions」ボタンを押すとメニューが開くので、そのなかにある「Export Root Certificate to Desktop」を選ぶとデスクトップ上に FiddlerRoot.cer というルート証明書のファイルが作成されますので、それぞれのブラウザにその証明書を組み込んでください(本稿では具体的な手順の説明は省略します)。

リクエストの内容を書き換える

Fiddlerでは、ブラウザから送信される内容をFiddlerで受け取り、それを書き換えた上でサーバに送るということができます。

  1. 図5-1①の「Filters」タブを開き②の「Use Filters」にチェックを入れます。
  2. Fiddler操作方法_Filtersタブ1
    図5-1
  3. 図5-2の③の「Breakpoints」の各項目にチェックを入れることで、ブラウザからのリクエストをFiddlerが受け取ったときにいったんサーバへの送信を止めることができるようになります。
  4. Fiddler操作方法_Filtersタブ2
    図5-2

    ③の「Breakpoints」の各項目の意味は以下の通りです。

    Break request on POST - ブラウザからPOSTされたときに止まります
    Break request on GET with query string - クエリストリング付きのGETリクエストの発行時に止まります
    Break on XMLHttpRequest - ブラウザからのリクエストヘッダに X-Requested-With: XMLHttpRequest が含まれているときに止まります
    Break response on Content-Type - サーバからのレスポンスが指定されたContent-Typeであった場合に止まります

    最後の「Break response on Content-Type」のみ、リクエストではなくレスポンス時に止まることになります。
  5. ここでは例としてブラウザからのGETリクエストにおいてFiddler上でパラメータを書き換えて送るというケースを取り上げます。
    まずはFiddler上で先ほどの図5-1②の「Use Filters」と図5-2③の「Breakpoints」の「Break request on GET with query string」にチェックを入れます。
  6. この状態でブラウザのアドレスバーに http://example.com/?q=123 と入力すると、Fiddlerでは図6-1①のようにセッション一覧に一時停止マークがついた状態となり、Fiddlerからサーバへのリクエストが停止された状態となります。
  7. Fiddler操作方法_セッション一覧
    図6-1
  8. ここで図6-2②の「Inspectors」タブ内の「WebForms」を選択すると、ブラウザから発行された該当リクエストがパラメータをデコードした状態で表示されますので、③の箇所のパラメータqに対する値を123からabcなどに書き換えます。
  9. Fiddler操作方法_Inspectorsタブ1
    図6-2
    Fiddler操作方法_Inspectorsタブ2
    図6-3
  10. その後、図6-3④の「Run to Completion」をクリックすると、Fiddlerからサーバへはパラメータを書き換えた内容でリクエストが発行され、その結果のレスポンスがブラウザに渡されることになります。

リクエストを編集して再送する

Webアプリケーションをデバッグしていると、特定のリクエストのパラメータだけを書き換えて何度もサーバへ送信したいという場面が多々あるかと思います。 こういった場面で便利なのがFiddlerの「Composer」機能です。

  1. 図7のようにFiddler画面の左側のセッション一覧から再送したいリクエストを選び右クリックし①の「Replay」から②「Reissue from Composer」を選択します。
  2. Fiddler操作方法_Replay_Reissue from Composer
    図7
  3. すると、Fiddlerの画面右側では図8のように「Composer」タブが開かれ、元となるリクエストの内容が送信する内容として入力されている状態となります。
  4. Fiddler操作方法_Composerタブ
    図8
  5. ここで図8①のHTTPメソッドや②URL、③HTTPリクエストヘッダ、POSTの場合は④リクエストボディなどを自由に書き換え⑤のExecuteを押すと、入力した内容のHTTPリクエストがサーバへと発行されます。

特定のブラウザからの通信だけをキャプチャする

Fiddlerを通常通り起動しHTTP通信のキャプチャを開始すると、FiddlerがWindowsのシステムプロキシとして動作するためにWindows上のほぼすべてのアプリケーションからのHTTP通信がFiddlerによってキャプチャされてしまいます。

特に、近年ではブラウザではないプログラムであっても、例えばクラウド上のサーバとのデータの同期などのためにバックグラウンドでHTTPを使って通信しているものも多くあり、それらもFiddlerによるキャプチャの対象となってしまいます。
そのため、本来デバッグすべき対象の通信が様々なプログラムからの多量のHTTP通信に紛れてしまい、デバッグの効率が下がってしまうことがあります。

そこで、デバッグしたいWebアプリケーションと通信しているブラウザのみに限定して通信をキャプチャするようFiddler側で設定することで、余計なHTTPをキャプチャしないようにすることができます。


Fiddlerで特定のブラウザのHTTP通信だけをキャプチャする方法はいくつかありますが、不要な通信のキャプチャを避けるという観点からもっとも効果的なのは、Fiddlerをシステムプロキシとして動作させるのをやめ、通信をキャプチャしたいブラウザのみ個別にFiddlerをプロキシとして指定するという方法です。

Capturing
図9
具体的には、図9のようにFiddlerの左下にある「Capturing」をクリックしてキャプチャを停止し(「Capturing」の表示が消えればキャプチャが停止しています)、その後ブラウザのプロキシ設定を手動で変更しFiddlerのアドレス(localhost)およびポート番号(8888)を設定します。

各ブラウザにおけるプロキシの設定方法は過去の連載記事「HTTP通信の中身を覗いてみよう!Burp Suite Free Edition 1.6編【前編】」および「いろいろなWebブラウザでHTTPプロキシを使ってみよう!」を参照してください。
なお、ポート番号がBurpでは8080ですがFiddlerでは8888であることに注意してください。

この状態でブラウザ上で通信を行うと、Fiddlerでは明示的にキャプチャを開始していない状態でありながら指定されたブラウザの通信のみはキャプチャすることができます(Fiddler上でキャプチャを開始させる必要はありません)。
これによりFiddler内にキャプチャ対象としたブラウザ以外の通信が紛れ込むことがなくなるので、キャプチャ対象のWebアプリケーションの通信にのみ注力して効率的にデバッグを進めていくことができます。

Fiddlerは起動するとデフォルトでシステムプロキシとしてキャプチャを開始しますが、都度これを停止するのが面倒という場合は、以下の操作を行ってください。(図10参照)

「Tools」メニューから「Telerik Fiddler Options」を選択

「Connections」タブの「Act as system proxy on startup」のチェックを外す。
Fiddler操作方法_Connectionsタブ
図10

これで、次回以降Fiddlerを起動したときにはシステムプロキシとして自動的にHTTPキャプチャを開始することはなくなります。

スマートフォンの通信をキャプチャする

以下の手順で、自マシン以外からもFiddlerをプロキシとして利用することができます。(図11参照)

「Tools」メニューから「Telerik Fiddler Options」を選択。

「Connections」タブ内の「Allow remote computers to connect」にチェックを入れる。
Fiddler操作方法_Connectionsタブ2
図11

このオプションにチェックを入れると、「外部からこのPCを経由してネットワークに接続される」ということを警告ダイアログが表示されますので、内容を確認してOKを押しFiddlerを再起動します。
この状態で、Fiddlerの動いているPCのIPアドレスおよびポート番号(8888)をスマートフォンのプロキシとして指定することで、スマートフォンからの通信をFiddlerでキャプチャすることができるようになります。

スマートフォンのプロキシの設定方法については過去の連載記事「AndroidでHTTPプロキシを使ってみよう!」および「iOSでHTTPプロキシを使ってみよう!」を参照してください。
なお、ポート番号がBurpでは8080ですがFiddlerでは8888であることに注意してください。

このようにFiddlerを設定することで、Burpを使う場合と同様に、Fiddlerでも簡単にスマートフォンの通信をキャプチャすることができます。

まとめ

今回はFiddlerを使ってHTTP通信をキャプチャするにあたり、効率的に使うための方法をいくつか紹介しました。 Fiddlerでは、少し設定を変えたり工夫したりすることで様々な局面により便利に対応できるようになります。

Fiddlerの使い方で「もっとこういうことができればいい」「こういう場合にはどうすればいいのか」といった疑問などがありましたら、ぜひお気軽にinfo@securesky-tech.comへご連絡ください。

今までのコラム

Webセキュリティをざっくり理解するための3つのMAP

Page Top