SST連載・解説記事

  1. HOMEHOME
  2. SSTコラムSSTコラム
  3. SSTなるほど!コーナー
  4. 02 HTTP通信の中身を覗いてみよう!Burp Suite Free Edition 1.6編【後編】

(2015年5月27日公開)

HTTP通信の中身を覗いてみよう!Burp Suite Free Edition 1.6編【後編】

キーワード HTTPプロキシ, HTTP通信, HTTPS通信, Burp, 証明書, インポート, リクエスト, 改ざん,

はじめに

前編では平文のHTTP通信の確認方法を紹介してきました。セキュリティ検査で使われているHTTPプロキシは、暗号化されたHTTPS通信の中も確認することができます。Burpでも可能ですが、追加の手順が必要です。後編では追加の手順や、実際に手元でリクエストを改ざんする方法を説明します。また、追加の手順について説明する前に、予備知識としてHTTPS通信の仕組みについて簡単に説明します。

HTTPS通信の仕組み~認証局と証明書

HTTPS通信は、SSLまたはTLSというプロトコルを使いHTTP通信を暗号化する仕組みです。安全に暗号化通信を行うためには、「認証局」と「証明書」という2つの要素が重要です。暗号化通信において、単に通信データを暗号化するだけでは送信先が本当に正しい相手なのか、確認することができません。もしかしたら、本物とそっくりに作った偽物のWebサイトかもしれません。

そこで、相手の身元を証明する仕組みとして「認証局」と「証明書」が出てきます。Webサイトの運営者は、「認証局」に「このWebサイトは所有者本人のものです」と証明してもらう「証明書」を発行してもらいます。その中に、暗号化通信に必要な鍵情報も含まれます。Webサイトの運営者は発行してもらった「証明書」をHTTPSに対応したWebサーバに登録しておきます。WebブラウザがHTTPSのサイトにアクセスすると、Webサーバは登録されている証明書をWebブラウザに返します。WebブラウザはWebサーバが返してきた証明書が「認証局」により確認された正規の証明書であるかチェックし、正規の証明書である場合に限り、その後の暗号化されたHTTPS通信を続けます。

詳しくは証明書を発行する認証局のWebサイトなどをご覧ください。

https://www.sslcerts.jp/
https://jp.globalsign.com/service/ssl/knowledge/about-sslcerts.html
https://www.geotrust.co.jp/ssl_guideline/ssl_beginners/

ではここで、BurpをHTTPプロキシとして設定したInternet Explorerで、HTTPSのサイトにアクセスするとどうなるか確認してみましょう。以下のURLにアクセスしてみます。

https://www.google.co.jp/

すると、以下のような画面が表示されてしまいました。今回は自分で意図的にBurpをHTTPプロキシに設定した状態ですので、「このサイトの閲覧を続行する(推奨されません)。」をクリックしてください。


Brupイメージ図09

すると、以下のようにアドレスバーに「証明書のエラー」が赤く表示された状態で、Googleのトップページが表示されます。


Brupイメージ図10

Burpの「HTTP history」を確認すると、暗号化されているはずのHTTPS通信の中身を平文で確認できます。


Brupイメージ図11

BurpでHTTPS通信を見ることができる仕組み

暗号化しているはずのHTTPS通信の中身が見えてしまう理由と、Webブラウザで証明書のエラーが表示される理由は、以下のような仕組みです。


Brupイメージ図12

WebブラウザにHTTPプロキシを設定すると、HTTP通信についてはBurp内でそのまま通信内容が保存されるとともに、本来のWebサーバに送信されます。HTTPS通信でHTTPプロキシが設定されている場合は、まずどのWebサーバ宛の通信かという情報が特殊なHTTPリクエストでWebブラウザから送信されます。Burpはその情報を見て、HTTPSであれば自分が内部で起動したHTTPSサーバに切り替えます。Burp自身がHTTPSに対応したWebサーバとなるため、暗号化が解除されたHTTP通信を取得することが可能です。これが通信ログに保存され、本来のWebサーバとはHTTPSで通信します。

しかし、Burpが内部で起動したHTTPSサーバは、本来のWebサーバの証明書は持っていません。Burpが独自に生成した証明書となり、認証局から発行された証明書ではないため、Webブラウザから見ると不正な証明書が提示され、証明書のエラーが発生します。以上が、暗号化しているはずのHTTPS通信の中身が見える仕組みと、Webブラウザで証明書のエラーが表示される理由です。

Burpの証明書をインポートする

Burpを使うときに毎回、HTTPSのエラー画面で「このサイトの閲覧を続行する(推奨されません)。」をクリックするのは手間です。Burp自身の証明書をブラウザにインポートすることで、Burpを認証局として信頼し、証明書のエラー画面が表示されなくなります。

なお本記事で紹介する以下の手順は、Windowsの証明書ストアにBurpの証明書をインポートする手順となっています。そのためWindowsの証明書ストアを使うブラウザやアプリケーションであれば、Internet Explorer以外でも同様に証明書エラーの問題が解決すると思われます。実際に Windows10 において Microsoft Edge 41 および Chrome 65 で証明書エラーの問題が解決することを確認しています(2018-04-02時点)。

Burpを起動したら、まだプロキシを設定していないブラウザで、以下のURLにアクセスしてください。以下のような画面が表示されます。

http://localhost:(Burpのプロキシポート番号)


Brupイメージ図13

「CA Certificate」クリック

BurpがHTTPSプロキシで使っている証明書をダウンロードして保存

保存されたファイル(デフォルトでは「cacert.der」というファイル名)をエクスプローラからダブルクリック

証明書の情報が表示されたら、「証明書のインストール」ボタンをクリック


Brupイメージ図14

次に「証明書のインポート ウィザード」画面が表示されます。

保存場所を聞かれてきた場合、特に理由が無ければ「現在のユーザー」を選択

「証明書ストア」の画面に進んだら、「証明書をすべて次のストアに配置する」を選択

「参照」ボタンをクリック

「証明書ストアの選択」画面で「信頼されたルート証明機関」を選択

「OK」ボタンをクリック

「証明書のインポート ウィザードの完了」画面が表示され、「信頼されたルート証明機関」が選択されていることを確認したら、「完了」ボタンをクリック


Brupイメージ図15

この後、ブラウザウィンドウを一旦全て閉じた後開き直し、プロキシにBurpを設定し、HTTPSのURLにアクセスします。証明書のエラーが表示されずに、以下のようにアドレスバーが表示されれば、証明書のインポートは成功です。


Brupイメージ図16

もし証明書のエラーが表示されてしまう場合は、OSを再起動した後、もう一度試してみてください。


インポートした証明書を確認するには、Internet Explorerの「インターネット オプション」メニューを選択し、「コンテンツ」タブから「証明書」をクリック

「証明書」画面が表示されたら「信頼されたルート証明機関」タブをクリック

一覧の中に発行先と発行者が「PortSwigger CA」と表示されていれば正常です。


Brupイメージ図17

インポートした証明書を削除したい場合は、「PortSwigger CA」のものであることをよく確認した上で、「削除」ボタンをクリックして削除できます。

リクエストを改ざんしてみる

それではいよいよリクエストを改ざんしてみましょう!

※注意※

HTTP通信(リクエストとレスポンスの両方)を改ざんするのは、自分の管理下にあるサーバだけにしてください。また、改ざんする内容によってはサーバ上のデータを破壊してしまうこともあり得ますので、実験する時は予めバックアップをとっておくなどしてください。
(診断ではデータが破壊されないよう細心の注意を払って改ざんしています。)

1.リクエストを送信する画面までWebブラウザ上で遷移したら、Burpの「Proxy」タブ→「Intercept」タブで「Intercept is on」のボタンをクリック(凹んだ状態)

これで、HTTPリクエストがWebサーバに送信される前に、Burpの画面上で編集することができます。その後、Webブラウザで送信ボタンやリンクをクリックするなどして、リクエストを発生させます。以下のように、「Proxy」タブ→「Intercept」タブにて、リクエストが編集可能になります。以下は、社内ネットワーク上に構築したXSSの脆弱性があるテスト用のサイトへのリクエストです。


Brupイメージ図18

※想定と異なるURLへのリクエストが表示された場合は、「Forward」ボタンをクリックしてみてください。最近のブラウザによっては、実際にリクエストを送る前に外部のセキュリティ評価サイトのAPIを叩いてフィッシングサイトでないか確認したり、ブラウザ自身が定期的にブラウザのアップデートがないか確認しています。あるいは、Ajaxを多用したWebサイトですと非同期にいろいろなAjaxリクエストが送信され、このようなHTTPリクエストもInterceptで表示されます。「Forward」ボタンを何回かクリックしていくと、本来改ざんしたかったリクエストが表示されるはずです。

2.実際にリクエストを改ざんしてみます。
「name%5B%5D」というパラメータ名を以下のようにscriptタグを埋め込んだ値に改ざんします。

※報告書がお手元にある方は、報告書で説明されている改ざんした値に書き換えることで、報告書の内容を再現できます。


Brupイメージ図19

「Intercept is on」をクリック

Intercept機能をOFFにするか、「Forward」ボタンで改ざんしたリクエストを送信

その結果、脆弱性のあるテストサイトでscriptタグが適切にエスケープされずに出力されたため、以下のようにalert()が実行されました。


Brupイメージ図20

まとめ

前編と後編の2回に分けて説明した内容は以下の5つになります。これらができるようになれば、報告書で説明されている再現方法で、HTTP通信の改ざんが必要な場合に、手元で実際に確かめることが可能となります。

・Burp Suite Free Editionのインストール
・Internet ExplorerでのHTTPプロキシの設定方法
・HTTPプロキシを設定した状態でのHTTPS通信について
・BurpでHTTP通信を確認する
・BurpでHTTPリクエストを改ざんする

次回はInternet Explorer以外のWebブラウザとしてGoogle ChromeとFirefoxでのHTTPプロキシの設定方法を紹介します。また、最近になり広まってきているSNI(Server Name Indication)に対応したWebサーバと通信する場合のハウツーや、細かいTipsについても紹介します。

今までのコラム

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

Page Top