SST連載・解説記事

  1. HOMEHOME
  2. SSTコラムSSTコラム
  3. SSTなるほど!コーナー
  4. 03 いろいろなWebブラウザでHTTPプロキシを使ってみよう!

(2015年7月24日公開, 2018年4月2日更新)

いろいろなWebブラウザでHTTPプロキシを使ってみよう!

 HTTPプロキシ, HTTP通信, HTTPS通信, Burp, 証明書, インポート, リクエスト, 改ざん, Chrome, Firefox, SNI, HTTP, レスポンス, 文字化け

はじめに

前回はInternet Explorerを用いてBurp Suite Free Edition (原稿執筆時点でv1.6.01:以下、Burp)をローカルHTTPプロキシに設定し、HTTPおよびHTTPS通信の内容を確認できるようになりました。またHTTP通信のリクエストの改ざん方法を学び、Web脆弱性診断の報告書の内容を、実際に手元で再現することが可能になりました。

今回はChrome(バージョン 43)とFirefox(バージョン 59)でのプロキシ設定方法を紹介します。(Chromeのバージョンは原稿執筆時点のもの)また、最近利用が広まってきているSNI(Server Name Indication)に対応したWebサーバに接続する場合のハウツーや、細かいTipsについて紹介します。

2018-04-02更新 : Firefoxについてバージョン 59用の説明や画像に更新しました。

Windows版Chromeのプロキシ設定方法

Chromeの設定画面を開き、「詳細設定を表示」をクリック

「ネットワーク」の「プロキシ設定の変更」ボタンをクリック

Chromeプロキシ設定イメージ図01

「接続」タブ

「LANの設定」ボタンを順にクリック

「ローカル エリア ネットワーク(LAN)の設定」ダイアログボックスが表示されたら、
第一回の「Internet ExplorerでHTTPプロキシを設定する」と同様にBurpのアドレスとポートを設定。

Chromeプロキシ設定イメージ図02

Windows版Chromeの証明書インポート方法

Windows版ChromeはWindowsの証明書ストアを使います。前回の「Burpの証明書をインポートする」でWindowsの証明書ストアにBurpの証明書を正しくインポートできていれば、Chromeでも問題ありません。

macOS(Safari, macOS版Chrome)のプロキシ設定方法

2018-04-02追記 : macOS High Sierra (バージョン 10.13.3) にて確認した手順です。

macOSの「システム環境設定」→「ネットワーク」を開く

使用中のネットワークをクリック(以下の例ではWi-Fiをクリック)

「詳細」をクリック

macOS_プロキシ設定イメージ図01

「プロキシ」を選択

「Webプロキシ (HTTP)」を選択してチェックを入れ、「Webプロキシサーバ」にBurpのアドレスとポート番号を設定。
(ローカルのBurpを使う場合は、IPv4アドレスの127.0.0.1の使用を推奨)

「保護されたWebプロキシ (HTTPS)」を選択してチェックを入れ、同様にBurpのアドレスとポート番号を設定。
(ローカルのBurpを使う場合は、IPv4アドレスの127.0.0.1の使用を推奨)

macOS_プロキシ設定イメージ図02

「OK」ボタンをクリックして設定を完了します。

macOS(Safari, macOS版Chrome)の証明書インポート方法

2018-04-02追記 : macOS High Sierra (バージョン 10.13.3) にて確認した手順です。

前回の「Burpの証明書をインポートする」と同様の手順で、まずBurpの証明書をダウンロードします。
その後、「キーチェーンアクセス」を起動します。


キーチェーンアクセス_イメージ図01

「ログイン」→「証明書」と選択し、→「+」をクリックします。


キーチェーンアクセス_イメージ図02

ファイル選択のダイアログボックスが表示されるので、ダウンロードしておいたBurpの証明書(以下の例では cacert.der)を選択し、「開く」をクリックします。


キーチェーンアクセス_イメージ図03

「キーチェーンアクセス」に戻ると、信頼されていない状態でPortSwigger CA証明書がインポートされているので、「PortSwigger CA」を選択してダブルクリックします。


キーチェーンアクセス_イメージ図04

証明書の詳細ウインドウが表示されます。「信頼」をクリックして表示を広げ、「この証明書を使用するとき」のプルダウンから「常に信頼」を選択します。


キーチェーンアクセス_イメージ図05


証明書の詳細ウインドウを閉じます。この時にパスワードや指紋認証が求められる場合があります。
「キーチェーンアクセス」に戻ると、PortSwigger CA証明書が信頼された状態になっています。


キーチェーンアクセス_イメージ図06

Firefoxのプロキシ設定方法

Firefoxのブラウザウィンドウの上部右端のメニューアイコンをクリック

「オプション」をクリック

「一般」をクリック

「ネットワークプロキシ」までスクロールし、「接続設定」ボタンをクリック


Firefoxプロキシ設定イメージ図01

「インターネット接続」画面で「手動でプロキシを設定する」を選択

「HTTP プロキシ」と「ポート」にBurpのアドレスとポート番号を設定。
また、「すべてのプロトコルでこのプロキシを使用する」にチェックを入れます。

Firefoxプロキシ設定イメージ図02

「OK」ボタンをクリックして設定を完了します。

Firefoxの証明書インポート方法

Firefoxに証明書をインポートするには、
ブラウザウィンドウの上部右端メニューアイコンをクリック

「オプション」をクリック

「プライバシーとセキュリティ」をクリック

「証明書」までスクロールし、「証明書を表示」をクリック

Firefox証明書インポートイメージ図01

「証明書マネージャ」が表示される

「認証局証明書」タブを開く

「インポート」をクリック

Firefox証明書インポートイメージ図02

「認証局証明書を含むファイルを選択してください」が表示される

ダウンロードしておいたBurpの証明書(以下の例では cacert.der)を選択し、「開く」をクリック

Firefox証明書インポートイメージ図03

「証明書のインポート」画面が表示される

「この認証局による Web サイトの識別を信頼する」にチェックを入れる。

「OK」ボタンをクリック

Firefox証明書インポートイメージ図04

SNI(Server Name Indication)への対応について(handshake alert: unrecognized_name 発生時)

2017-07-03追記: 2017年7月時点では、特にクラウドサービスにおいてSNI必須のサーバが増えつつあります。そのため、SNIが有効なデフォルト設定の方がトラブルになる可能性が低くなりました。
もし2017年現在、SNIを無効にして正常に接続できないサーバがあった場合、"-Djsse.enableSNIExtension=false" を付けずに普通にBurpを起動(=SNI有効)し、正常に接続できるか試してみてください。
また、Burp 1.7系では "User options" → "SSL" の "Disable Java SNI extension (requires restart)" のチェックボックスからSNI拡張の有効/無効を切り替えられますので、そちらでの設定も試してみてください。

SNI(Server Name Indication)は、SSL/TLSの拡張仕様の一つです。この仕様ができる前は、SSL/TLSのクライアント(Webブラウザなど)とサーバは、一つのサーバにつき一つの証明書でしか暗号化通信を確立することは出来ませんでした。そのため、複数のサイトを一つのサーバ上で公開する場合、それぞれのホスト名ごとの証明書を登録して使い分けるような運用が行えない制限がありました。
SNIに対応したクライアントとサーバでは、どのホスト名に接続するのか、最初にクライアントがサーバに通知します。サーバはそれを受けて、対応する証明書を提示し、SSL/TLS通信を確立していきます。これにより、複数のサイトを一つのサーバ上で公開する場合でも、それぞれのホスト名ごとに適切な証明書を提示し、HTTPS通信を行うことが可能となります。

ただしSNIを使うにはクライアントとサーバの双方が対応している必要があります。クライアント側がSNIに対応していて、サーバ側が未対応の場合、クライアントからの最初のSNIでのホスト名のリクエストに応えられず、結果としてクライアント側で通信エラーとなる場合があります。

BurpはJavaで動作するアプリケーションであり、JavaではデフォルトでSNIが有効となっています。このためBurpが接続しようとしているWebサーバがSNIに対応していないと、Burpの「Alert」タブに「handshake alert: unrecognized_name」というメッセージが表示され、接続に失敗する場合があります。

そのような場合は、JavaのSNI機能を無効化してみると、正常に接続できることがあります。コマンドプロンプトを開き、以下のコマンドを実行します。

>java -Djsse.enableSNIExtension=false -jar C:\(…Burp Suite インストール先フォルダ…)\burpsuite_free_v1.6.01.jar

これによりSNIが無効化されてBurpが起動します。問題が発生したWebサーバに接続し、「Alert」タブに「handshake alert: unrecognized_name」というメッセージが表示されないか確認してください。

HTTPのレスポンスが文字化けするときは

日本語などマルチバイト文字を使ったWebサイトとのHTTP通信内容をBurpの「HTTP history」で表示すると、マルチバイト文字の部分が□等になってしまい、正常に表示されません。


Burpイメージ図01

Burpの「Options」タブを開く

「Display」タブを開く

「HTTP Message Display」の「Change font …」ボタンをクリック

Burpイメージ図02

「Select font」ダイアログボックスで、「MS ゴシック」などそのWebサイトに適した等幅フォントを選択し、「OK」ボタンをクリックします。

Burpイメージ図03

これにより、以下のようにマルチバイト文字が正常に表示されるようになります。(一部の文字で文字化けが残る場合もあります)


Burpイメージ図04

画像ファイルやJavaScriptファイルへのアクセスが「HTTP history」に表示されないときは

画像ファイルやJavaScriptファイルにアクセスしている筈なのに、「HTTP history」タブで表示されない場合、フィルタ機能により非表示になっている可能性があります。「HTTP history」タブの下の、「Filter: …」と表示されている領域に、現在のフィルタ設定が表示されますので、そこをクリックします。


Burpイメージ図05

Filterの設定画面が表示されますので、HTTPの通信内容を表示したい条件に絞り込めます。この条件にマッチしないHTTP通信も、表示されなくなるだけで記録はされているため、Filterの条件を変えれば表示できます。画像だけ表示されない、などであれば「Filter by MIME type」の欄でチェックが入っていないか確認し、表示したいMIMEタイプにチェックを入れてください。


Burp設定イメージ図06

まとめ

今回説明した内容は以下の5つになります。ChromeやFirefoxでもBurpをHTTPプロキシに設定できるようになり、SNIに対応していないWebサーバにも接続できるようになりました。また日本語のレスポンスや画像など静的コンテンツについても通信内容を確認できるようになりました。

・ChromeでのHTTPプロキシの設定方法
・FirefoxでのHTTPプロキシの設定方法
・SNIを無効化してBurp Suiteを起動する方法
・フォントの設定方法
・「HTTP history」のフィルタ設定

ここまではPC向けのWebブラウザでのHTTPプロキシの設定方法を紹介してきました。しかし近年はスマートフォンやタブレット向けのアプリケーション(スマホアプリ)の開発が増え、スマホアプリからWebサーバにリクエストを送信するAPI通信も多く使われるようになりました。診断案件としても、スマホアプリからのHTTP/HTTPS通信の検査は増えています。
そこで次回は、AndroidとiOSでのHTTPプロキシの設定方法を紹介します。スマホアプリの開発時に実際のHTTP/HTTPS通信を確認することができるようになりますので、開発やデバッグ作業の効率アップにも大きな効果を期待できます。次回もよろしくお願いいたします。

今までのコラム

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

Page Top