はじめに
この記事の対象読者
この記事は、以下のような方を対象としています。
- Webアプリケーションのセキュリティに興味がある方
- 脆弱性診断ツールを使ってみたい初心者の方
- 開発したアプリケーションの安全性を確認したい方
セキュリティの専門知識がなくても大丈夫です。基本的なWebの知識があれば理解できる内容になっています。
OWASP ZAPとは何か
OWASP ZAP(Zed Attack Proxy)は、Webアプリケーションの脆弱性を検出するためのツールです。OWASPという非営利団体が開発・提供しており、完全無料で使用できます。
ZAPは「プロキシ」として動作し、ブラウザとWebサーバーの間に入って通信を監視・分析します。これにより、セキュリティ上の問題を自動的に見つけ出してくれます。
なぜ脆弱性診断が必要なのか
Webアプリケーションに脆弱性があると、以下のような被害が発生する可能性があります。
- 個人情報の漏洩
- データベースの不正アクセス
- サイトの改ざん
- サービスの停止
これらを防ぐために、開発段階や運用段階で定期的に脆弱性診断を行うことが重要です。
OWASP ZAPの特徴
オープンソースで無料
OWASP ZAPは完全に無料で使用できます。商用の脆弱性診断ツールは数十万円から数百万円することもありますが、ZAPなら費用をかけずに本格的な診断が可能です。
初心者にも使いやすいGUI
グラフィカルなユーザーインターフェースを備えており、マウス操作だけで基本的な診断ができます。コマンドラインの知識は不要です。
できること・できないこと
できること
- Webアプリケーションの自動脆弱性診断
- HTTPリクエスト・レスポンスの確認と改ざん
- 脆弱性レポートの自動生成
- REST APIの診断
できないこと
- モバイルアプリのネイティブコードの診断
- バイナリファイルの解析
- ソースコードの静的解析
ZAPはあくまでWebアプリケーションの動的診断に特化したツールです。
環境構築
ダウンロードとインストール
公式サイトからダウンロードします。
- OWASP ZAP公式サイトにアクセス
- 「Download」ボタンをクリック
- 使用しているOS(Windows/Mac/Linux)に応じたインストーラーを選択
- ダウンロードしたファイルを実行してインストール
インストール時のポイント
- Windowsの場合:管理者権限で実行
- Macの場合:セキュリティ設定で許可が必要な場合あり
- Javaが必要ですが、最新版はJavaが同梱されているため別途インストール不要
初回起動時の設定
ZAPを初めて起動すると、セッション管理の設定画面が表示されます。
初心者の方は「No, I do not want to persist this session」を選択しましょう。これにより、ZAPを終了すると診断データが削除されます。
ブラウザのプロキシ設定
ZAPを使うには、ブラウザの通信をZAP経由にする必要があります。
設定の流れ
Firefox の場合の設定例
- Firefoxの設定を開く
- 「ネットワーク設定」で「接続設定」をクリック
- 「手動でプロキシを設定する」を選択
- HTTPプロキシに
localhost、ポートに8080を入力 - 「このプロキシをHTTPSにも使用する」にチェック
証明書のインストール
HTTPS通信を診断するには、ZAPの証明書をブラウザにインストールする必要があります。
- ZAPで「Tools」→「Options」→「Dynamic SSL Certificates」を開く
- 「Save」ボタンで証明書を保存
- ブラウザの証明書設定から、保存した証明書をインポート
基本的な3つの診断機能
OWASP ZAPには主に3つの診断機能があります。それぞれの特徴を理解しましょう。
スパイダー:サイト全体を自動巡回
スパイダーは、Webサイト内のリンクを辿って自動的にページを収集する機能です。
動作イメージ
- トップページから開始
- ページ内のすべてのリンクを抽出
- 見つけたリンク先を順番に訪問
- これを繰り返してサイト全体を把握
使いどころ
診断対象のサイト構造を把握するために、最初に実行します。手動でページを巡回する手間が省けます。
パッシブスキャン:通信を監視して脆弱性を検出
パッシブスキャンは、通信内容を観察するだけで脆弱性を検出する機能です。
特徴
- サーバーに負荷をかけない
- 攻撃的な操作を行わない
- 自動的にバックグラウンドで実行される
検出できる脆弱性の例
- セキュリティヘッダーの不足
- cookieの設定不備
- 機密情報の平文送信
アクティブスキャン:実際に攻撃を試みて検出
アクティブスキャンは、実際に攻撃パターンを送信して脆弱性を検出する機能です。
特徴
- より多くの脆弱性を検出可能
- サーバーに負荷がかかる
- 実行には時間がかかる(数分〜数時間)
検出できる脆弱性の例
- SQLインジェクション
- クロスサイトスクリプティング
- パストラバーサル
注意点
アクティブスキャンは攻撃的な操作を行うため、必ず許可を得てから実行してください。
はじめての脆弱性診断(実践)
実際にZAPを使って脆弱性診断をやってみましょう。
診断の流れ
簡単な診断を実際にやってみる
ステップ1:URLの入力
- ZAPのメイン画面上部にある「URLを攻撃」欄に診断したいURLを入力
- 例:
http://example.com
ステップ2:自動スキャンの実行
- 「攻撃」ボタンをクリック
- スパイダーとアクティブスキャンが自動的に開始されます
ステップ3:スキャンの進行確認
画面下部のタブで進行状況を確認できます。
- 「Spider」タブ:巡回の進捗
- 「Active Scan」タブ:診断の進捗
ステップ4:完了を待つ
サイトの規模にもよりますが、小規模なサイトなら数分で完了します。
結果の見方と解釈
診断が完了すると、左側のサイトツリーにアラートアイコンが表示されます。
アラートの重要度
ZAPは検出した脆弱性を4段階で分類します。
- 赤(High):重大な脆弱性、早急な対応が必要
- オレンジ(Medium):中程度の脆弱性、対応を推奨
- 黄(Low):軽微な脆弱性、余裕があれば対応
- 青(Informational):情報提供、脆弱性ではない
アラートの詳細確認
- 画面下部の「Alerts」タブをクリック
- アラートを選択すると詳細情報が表示されます
- 脆弱性の説明
- 影響範囲
- 対策方法
- 参考URL
よく検出される脆弱性
初心者の方でも理解しやすいように、代表的な脆弱性を解説します。
SQLインジェクション(データベースへの不正アクセス)
どんな脆弱性か
ユーザーが入力した値がそのままSQL文に組み込まれることで、データベースを不正に操作できてしまう脆弱性です。
具体例
ログイン画面で以下のような入力をすると、認証を突破できてしまう場合があります。
ユーザー名: admin' --
パスワード: (任意)
影響
- データベース内の全データの閲覧
- データの改ざんや削除
- 管理者権限の奪取
対策
- プリペアドステートメントの使用
- 入力値のバリデーション
- エスケープ処理
XSS(悪意あるスクリプトの埋め込み)
どんな脆弱性か
クロスサイトスクリプティングの略称です。Webページに悪意あるJavaScriptコードを埋め込める脆弱性です。
具体例
掲示板のコメント欄に以下のようなスクリプトを投稿できてしまう場合があります。
<script>alert('XSS')</script>
影響
- cookieの盗聴
- フィッシングサイトへの誘導
- ページ内容の改ざん
対策
- 出力時のHTMLエスケープ
- Content Security Policyの設定
- 入力値の検証
その他の代表的な脆弱性
CSRF(クロスサイトリクエストフォージェリ)
ユーザーの意図しない操作を強制的に実行させる攻撃です。
- 影響:勝手にパスワード変更、商品購入など
- 対策:CSRFトークンの実装
ディレクトリトラバーサル
ファイルパスを操作して、本来アクセスできないファイルを閲覧できる脆弱性です。
- 影響:設定ファイルやソースコードの漏洩
- 対策:ファイルパスのサニタイズ
セキュリティヘッダーの不足
HTTPレスポンスヘッダーに必要なセキュリティ設定がない状態です。
- 影響:各種攻撃のリスク増加
- 対策:適切なヘッダーの設定
診断結果を活用する
診断結果を開発チームに共有し、脆弱性を修正していきましょう。
レポートの出力方法
ZAPは診断結果をレポートとして出力できます。
出力手順
- メニューから「Report」→「Generate HTML Report」を選択
- 保存先とファイル名を指定
- レポートが自動生成されます
レポートに含まれる情報
- 検出された脆弱性の一覧
- 各脆弱性の詳細説明
- 影響度と対策方法
- 該当するURL
優先度の付け方
すべての脆弱性を同時に修正するのは困難です。以下の基準で優先順位を付けましょう。
修正の優先順位
判断基準
- 個人情報を扱うページの脆弱性は優先度高
- 認証・認可に関わる脆弱性は優先度高
- 外部に公開されていない管理画面は優先度を下げることも可能
開発チームへの共有方法
効果的な共有のポイント
- HTMLレポートをそのまま共有
- 特に重要な脆弱性はスクリーンショット付きで説明
- 再現手順を明確に記載
- 具体的な修正方法の提案
コミュニケーションの注意点
- 脆弱性の指摘は、開発者を責めるためではなく、サービスを改善するため
- 攻撃的な表現は避ける
- 修正の実現可能性も考慮する
必ず守るべき注意事項
OWASP ZAPは強力なツールですが、使い方を誤ると法律違反になる可能性があります。
許可なく他人のサイトを診断しない(違法行為)
絶対にやってはいけないこと
- 自分が管理していないWebサイトの診断
- 許可を得ていない他社のサイトの診断
- 興味本位での診断
これらは不正アクセス禁止法違反となり、刑事罰の対象になります。
法律上の問題
日本では「不正アクセス行為の禁止等に関する法律」により、許可なく他人のシステムに侵入する行為は犯罪です。脆弱性診断も攻撃的な操作を含むため、許可なく実行すると違法になる可能性があります。
練習用の環境を使う
安全に学ぶ方法
診断の練習をしたい場合は、以下のような環境を使用しましょう。
- OWASP WebGoat:意図的に脆弱性を含んだ学習用アプリ
- DVWA(Damn Vulnerable Web Application):脆弱性診断の練習用アプリ
- 自分で構築したローカル環境
これらは脆弱性診断の練習を目的として作られているため、安心して使用できます。
本番環境での診断時の注意点
実際のサービスで診断を行う場合は、以下に注意してください。
事前準備
- サービスオーナーから書面での許可を取得
- 診断の日時を事前に通知
- 緊急連絡先を確認
実行時の注意
- アクセスが集中する時間帯を避ける
- スキャンの強度を調整(負荷を抑える)
- 異常を検知したらすぐに中断
事後対応
- 診断結果を適切に管理(機密情報として扱う)
- 検出した脆弱性を責任を持って報告
- 診断データを安全に削除
まとめ
OWASP ZAPでできるようになったこと
この記事を通じて、以下のことができるようになりました。
- OWASP ZAPのインストールと基本設定
- Webアプリケーションの脆弱性診断の実施
- 診断結果の確認と解釈
- レポートの出力と共有