SLL #18|Burp Suiteで通信を止めて書き換えてみた

SLL #18 Burp Suiteで通信を止めて書き換えてみた のアイキャッチ画像。ブラウザとサーバーの間の通信矢印を一時停止アイコンが止め、鉛筆アイコンで書き換えている図解。「Phase6「Security」」のラベル付き。 Docker

個人学習プロジェクト 「Security Learning Lab(SLL)」 の学習記録です。

今回は、脆弱性診断ツールBurp Suiteを導入し、ブラウザとサーバーの通信を記録・停止・書き換えするところまでを実践した内容についてまとめます。

学習時間

約2時間

今日やったこと

  • Burp Suite Community Edition(無料版)をMacにインストールし、一時プロジェクトで起動
  • 内蔵ブラウザで自分のNginxコンテナにアクセスしようとしたが、接続がリセットされて失敗
  • サーバー、Burpのプロキシ、Macのネットワークを順に切り分け、原因が内蔵ブラウザ側に限られることを確認
  • 内蔵ブラウザの代わりに、SLL用に作成したChromeプロファイルへFoxyProxyを導入し、Burp経由でアクセスできる環境を構築
  • HTTP historyで、ブラウザが送ったリクエストとサーバーのレスポンスを確認
  • Interceptをオンにしてリクエストを停止し、User-Agentを書き換えて送信
  • Nginxコンテナのアクセスログで、書き換えた値がサーバーに届いたことを確認

学習内容

Burp SuiteとZAPの違い

ZAPはクローラーがサイトを巡回して自動で診断するツール。Burp Suiteは、人がブラウザを操作し、その通信を横で記録・停止・書き換えしながら確かめるツールで、手動診断の中心になる。無料版は記録をメモリ上にしか持たないため、Burpを閉じると履歴は消える。

HTTP historyで見える「生の会話」

HTTP historyでは、ブラウザが送ったリクエストとサーバーが返したレスポンスを1往復ずつ確認できる。リクエストには、宛先(Host)、ブラウザの自己紹介(User-Agent)、希望する言語(Accept-Language)などが含まれる。レスポンスには、前回ZAP対策で追加したセキュリティヘッダがそのまま並んでいた。自分で何も操作していないのに、Chromeがネット接続確認のためにGoogleへ送っている通信も記録されていた。

再読み込み時のキャッシュ確認

再読み込みしたときのリクエストには、前回受け取ったページの版番号(ETag)や更新日時を添えて「変わっていますか」と確認する行が追加されていた。変更がなければ、サーバーは本文を送らずに「304 Not Modified」だけを返す。通信量を節約するための仕組み。

Interceptで通信を止めて書き換える

Interceptをオンにすると、ブラウザのリクエストはBurpの手元で止まり、「Forward」を押すまでサーバーに届かない。止めている間はリクエストの中身を自由に書き換えられる。今回はUser-Agentを別の文字列に書き換えて送信し、Nginxのアクセスログに書き換え後の値が記録されていることを確認した。

クライアントから来る値は信用しない

サーバーは、届いた値がブラウザが送ったものか、途中で書き換えられたものかを区別できない。User-Agentに限らず、フォームの入力値やCookieも同じ。そのため「クライアントから来る値は信用しない」ことが、多くの脆弱性対策の出発点になっている。

困ったこと・つまずいたこと

内蔵ブラウザからアクセスできなかった

  • 何に困ったか:Burpの内蔵ブラウザで対象にアクセスすると「接続がリセットされました」と表示され、Burpの履歴にも何も記録されなかった
  • どう解決したか:サーバーの稼働、Mac からの直接アクセス、curl によるBurp経由のアクセス、ポートの使用状況、ウイルス対策ソフトのWeb保護を順に確認し、問題が内蔵ブラウザに限られることまで絞り込んだ。根本原因は特定できなかったため、SLL用のChromeプロファイルにFoxyProxyを入れてBurp経由にする方法に切り替えて解決した

今日の学び・気づき

  • 原因を一つずつ消していく切り分けの進め方を体験した。「サーバーは正常」「Burpも正常」と確認済みの範囲を広げていくことで、問題の場所を内蔵ブラウザまで絞り込めた
  • 根本原因にこだわりすぎず、目的(通信をBurpに通すこと)を達成できる別ルートに切り替える判断も大事だと感じた
  • 仕事で診断担当の方がプロキシで値を書き換えているのは、まさに「サーバーがクライアントの値を信用していないか」を確かめる作業なのだと、自分で書き換えてみて実感した
  • ログに書き換えた値がそのまま残っているのを見て、サーバー側からは本物か偽物か見分けられないという事実が腑に落ちた

今日の達成

First Intercept
Burp Suiteでブラウザの通信を止めて書き換え、改ざんした値がサーバーに届くことを確認した。

次回やること

  • Burpの証明書をSLL用ブラウザに導入し、HTTPS通信もBurp経由で確認できるようにする
  • Repeaterでリクエストを繰り返し書き換えて送る練習をする

今日のひとこと

Burpの内臓ブラウザからのアクセスが正常に行えず、かなり手こずった。最終的には、FoxyProxyを用いて解決。これは普段の仕事の経験が活きた。少しずつセキュリティの実作業を学んでいこう。

タイトルとURLをコピーしました