実録:なぜ「正常に動作する」アプリがハッキングされるのか?
人事管理システムのWebプロジェクトをリリースしたばかりで、すべての機能がスムーズに動作していたため、私は自信を持って納品しました。しかし、わずか48時間後、クライアントから悲報が届きました。2,000人分もの全従業員データがアンダーグラウンドのフォーラムで販売されているというのです。さらに追い打ちをかけるように、ハッカーは管理者権限までも乗っ取り、システム構成を変更していました。
その時、私は手痛い教訓を得ました。機能通りにコードを書くことは、あくまで最低条件に過ぎないということです。ハッカーは、コードが美しいかどうかなど気にしません。彼らが注目するのは、フォームやURLから「異常な」データを受け取ったときにサーバーがどう反応するかです。ブラウザだけでテストしているなら、水面下で実際に起きていることの90%を見逃していることになります。
原因分析:脆弱性はどこから生まれるのか?
SQLインジェクション、XSS、IDORといった脆弱性の多くは、共通の根本原因を持っています。それは、「ユーザーからのデータを盲信すること」です。
- SQLインジェクション (SQLi): ユーザー入力をクエリに直接連結した際に発生します。
'や--といった文字だけで、ハッカーはデータベースからパスワードテーブル全体を「吐き出させる」ことができます。 - クロスサイトスクリプティング (XSS): ユーザーデータをサニタイズ(無害化)せずに表示すると、ハッカーは悪意のあるJavaScriptを埋め込みます。主な目的は、Cookieを盗んでセッションを即座に乗っ取ることです。
- IDOR: これは権限管理のロジックエラーです。例えば、プロフィール閲覧のURLが
/api/user/100だとします。もし100を1に書き換えて上司の情報が見えてしまうなら、それは深刻なIDORの脆弱性です。
通常のブラウザでは、氷山の一角しか見ることができません。データを真にコントロールするには、サーバーに送信される前のリクエストを遮断し、精査し、加工するための「中間ツール」が必要です。
現在のセキュリティチェック手法
多くの開発者は、Burp Suiteを知る前に次のような方法で苦労しています:
- 手動コードレビュー:
mysql_real_escape_stringのような関数を探します。これは非常に手間がかかり、複雑なケースを見落としやすいです。 - 自動スキャンツールの使用: ブラウザ拡張機能やOWASP ZAPは便利です。しかし、誤検知(False Positive)が多かったり、深いビジネスロジックのエラーを見逃したりすることがよくあります。
- 要素の検証 (F12): 最も初歩的な方法です。ここでは
User-AgentやRefererといった隠れたヘッダーを柔軟に編集することはできません。
最良の方法: Burp Suite Community Editionの活用
効率的に脆弱性を見つけるために、私は常に Burp Suite Community Edition を使用しています。プロのセキュリティエンジニアなら誰もが知っておくべき業界標準のツールです。
1. 5分でできる環境構築
インストール後、ブラウザのトラフィックをBurp経由にする設定が必要です。複雑なシステムプロキシの設定ではなく、ChromeやFirefoxの拡張機能 FoxyProxy を使いましょう。
デフォルト設定は通常以下の通りです:
IP: 127.0.0.1
Port: 8080
HTTPSトラフィックをキャプチャするために、BurpのCA証明書のインストールも忘れずに行ってください。プロキシをオンにした状態で http://burp にアクセスし、証明書をダウンロードしてブラウザにインポートするだけで完了です。
2. RepeaterでSQLインジェクションを狩る
Repeater 機能 (Ctrl + R) を使うと、作業時間を大幅に短縮できます。ページをリロードすることなく、リクエストを編集して何度も繰り返し送信できます。
例えば、商品検索のリクエストをキャプチャしたとします:
GET /search.php?id=15 HTTP/1.1
シングルクォートを追加して id=15' と入力してみましょう。もしサーバーが500エラーコードを返したり、“SQL syntax error” というメッセージを表示したりすれば、それはサーバーに隙がある兆候です。その場合、次のような強力なペイロードを試すことができます:
id=15' OR 1=1 --
id=15' UNION SELECT 1,username,password FROM admin --
3. Intercept機能によるXSSチェック
XSSのチェックには、Proxyタブ의 Intercept is on を有効にします。フォームの「送信」ボタンを押すと、Burpがリクエストを途中で保持します。ここで、コメントの内容を以下のスクリプトコードに書き換えてみましょう:
<script>alert('Hacked by ItFromZero')</script>
Forward を押して送信します。画面にポップアップが表示されれば、アプリにXSSの脆弱性があることになります。侮ってはいけません。ハッカーは document.cookie を使って、そのコメントを閲覧した全ユーザーのアクセス権限を奪うことができます。
4. IDORの検出 – 非常に一般的なロジックエラー
自動スキャンツールはIDORに弱いことが多いです。この脆弱性をチェックするには、2つのアカウント(ユーザーAとユーザーB)が必要です。
- ユーザーAで情報閲覧のリクエストを取得します:
GET /profile?id=500 - 右クリックして Send to Repeater を選択します。
id=500をid=1(管理者やユーザーBのID)に変更します。- ユーザーAのトークンを使っているにもかかわらず、サーバーが他人のデータを返してきたら、IDORを発見したことになります。
コードの修正に加えて、インフラのセキュリティも重要です。私はよく toolcraft.app/ja/tools/security/password-generator のパスワード生成ツールを使用しています。このツールは100%クライアント側で動作するため、サーバー管理者の皆さんにとって非常に安全です。
5. プロフェッショナルなワークフロー
数千のリクエストに混乱しないよう、以下のワークフローを適用しましょう:
- Target Scope: プロジェクトのドメインだけに集中し、FacebookやGoogleからの不要なトラフィックを拾わないようにします。
- HTTP History: Webサイトの全機能をブラウジングし、Burpにその痕跡を記録させます。
- Repeater & Intruder: パスワード変更や決済といった機密性の高いリクエストを絞り込み、詳細にテストします。
ITの仕事は「作る」ことだけでなく、自分の成果物を守る術を学ぶことも含まれます。ぜひBurp Suiteをインストールして、DVWAやWebGoatなどのラボで練習してみてください。設定で困ったことがあれば、下のコメント欄で教えてください。サポートさせていただきます。

