はじめに
この章では、本ドキュメントの目的と読み方をわかりやすく説明します。Webアプリケーションのセキュリティ診断に不安を感じている方や、初めて診断を担当する方に向けた導入です。
目的
本書は、診断の基本から実践までを順序立てて解説します。例として、ログイン画面の挙動確認や、入力欄に意図しない文字を入れたときの反応、ファイルアップロードのチェックなど、現場でよくあるポイントを取り上げます。
対象読者
- 開発者や運用担当者
- セキュリティ担当の初心者
- 小規模なサイト運営者
専門用語は最小限にし、具体例で理解を助けます。難しい説明は避け、実務に役立つ知識を優先します。
本書の使い方
各章は独立して読めますが、順に読むことで理解が深まります。診断を行う前に本章で示した目的と対象を確認してから進めてください。
Webアプリケーション診断とは
概要
Webアプリケーション診断とは、Webサイトやアプリに潜むセキュリティの弱点(脆弱性)を見つけ、実際に攻撃を受けた場合のリスクを検証する作業です。たとえば、会員制サイトのログイン機能やECサイトのカート処理など、ユーザーが操作する部分を中心に調べます。
診断対象の例
- ログイン/認証機能
- 入力フォーム(問い合わせ、検索、注文など)
- 管理画面やAPI
実際の例を挙げると、問い合わせフォームへの不正な入力でデータが漏れるケースや、管理画面に不正アクセスされるケースがあります。
主な診断手法(概要)
- コードや設定を精査する「レビュー」:設定ミスや安易な実装を発見します。
- 疑似的な攻撃を行う「侵入検査(ペネトレーションテスト)」:外部からの攻撃を想定して実際に試します。
両方を組み合わせると、より確実に問題を見つけられます。
診断で得られるもの
- 発見した脆弱性の一覧と再現手順
- 脆弱性が悪用された場合に起きる被害の説明
- 優先度(修正の緊急度)と推奨対策
注意点
診断は実際にシステムに影響を与えることがあります。テスト範囲や実施時間、バックアップなどを事前に取り決め、業務に支障が出ないように進めます。
診断対象となる主要な脆弱性項目
以下は、Webアプリケーション診断で重点的にチェックする代表的な脆弱性項目です。具体例を交えて分かりやすく説明します。
SQLインジェクション(SQLi)
入力欄に悪意のあるSQL文が入ると、データベースから不正に情報を取得・改ざんされます。例:ログイン画面で「’ OR ‘1’=’1」を入れると認証をすり抜ける可能性があります。
OSコマンドインジェクション
アプリがシステムコマンドを組み立てる際に未検証の入力を渡すと、サーバーで任意のコマンドが実行されます。例:ファイル名に「; rm -rf /」のような文字列が入るケース。
クロスサイトスクリプティング(XSS)
攻撃者がページに不正なスクリプトを挿入すると、他の利用者のブラウザで実行されます。例:コメント欄にを入れてセッション情報を盗む手口。
クロスサイトリクエストフォージェリ(CSRF)
利用者の意図しない操作を第三者が行わせる攻撃です。例:ログインしたままの状態で別サイトの画像タグにリクエストを仕込む。
認証・認可の問題
パスワードの平文保存や弱いログイン制御、不適切な権限設定を検査します。例:他ユーザーの情報に直接アクセスできるID指定。
入力値検証と出力時の注意
数値や日付など想定外の値が入っても安全か、出力時に適切にエスケープされるかを確認します。例:半角・全角の混在で処理が破綻する場合。
ファイルアップロードと直接オブジェクト参照
アップロードされたファイルの種類・サイズ検査や、オブジェクト参照でのアクセス制御を確認します。例:画像に偽装したスクリプトのアップロード。
セッション管理と機密情報の扱い
セッションIDの固定化やトークンの漏えい、通信の暗号化状態をチェックします。例:HTTPS未使用でセッションが盗まれるリスク。
セキュリティ設定の不備
不要なサービスの有効化やデフォルト設定の放置、エラーメッセージに過度な情報が出るかを確認します。例:詳細なスタックトレースがそのまま表示される。
これらの項目は、実際の診断で組み合わせて検査します。具体的な検査方法は次章で詳しく説明します。
診断方法:手動診断とツール診断
概要
Webアプリ診断には手動診断とツール診断の二つがあります。手動は専門家が挙動や文脈を確認し、ツールは自動で既知の問題を検出します。目的に応じて使い分けや組み合わせが重要です。
手動診断(ヒューマンチェック)
- 何をするか:担当者がブラウザやプロキシを使い、入力や画面遷移で不正な動きを試します。実際の攻撃者の視点で確認します。
- メリット:複雑なロジック不具合や誤った判定を見つけやすいです。たとえば認可の抜けやビジネスロジックの欠陥を発見できます。
- デメリット:時間と経験が必要です。カバレッジに限界があり、人的ミスも起こります。
ツール診断(自動スキャン)
- 何をするか:脆弱性スキャナが自動で多数のリクエストを送って既知の脆弱性を検出します。
- メリット:短時間で広範囲をチェックできます。例:クロスサイトスクリプティング(XSS)やSQLインジェクションの既知パターン検出。
- デメリット:誤検知や検出漏れがあります。ビジネス固有の問題は見つけにくいです。
組み合わせ方と注意点
- 実務ではまずツールで広く洗い出し、手動で深掘りする流れが効率的です。外部に依頼する場合も両方を含めると安心です。
- テスト前にスコープと影響範囲を明確にし、本番データやサービス停止のリスクを避けてください。ログ取得と再現手順の記録を忘れないでください。
診断の実施プロセス
診断計画
診断の目的、範囲、対象URLや機能、テスト項目、スケジュールを明確にします。関係者の承認やテスト用アカウント、許可証を事前にそろえます。例:ログインが必要な機能は専用のテストアカウントを準備します。
事前調査と準備
対象の正常動作を確認し、仕様書や画面遷移を把握します。実運用環境で行う場合はバックアップと通知を徹底します。テスト環境が使えるなら、まずそちらで実施します。
診断の実施(検査手順)
手動検査とツールを組み合わせて検査します。入力項目の操作、パラメータ改ざん、セッションの挙動確認などで脆弱性を探します。操作と結果は逐一ログやスクリーンショットで記録します。
脆弱性の検出と検証
脆弱性を見つけたら再現手順を明確にします。誤検知を避けるため別の手法でも検証し、影響範囲(対象ページ、ユーザー種別)を特定します。例:XSSは異なるブラウザで確認します。
診断結果の分析・評価
発見した問題を、発現しやすさと影響度で評価し優先度を決めます。修正の難易度や代替策も記載します。ビジネス影響を考慮して優先順位を付けます。
報告書作成と報告
技術者向けの詳細(再現手順、証拠)と、管理者向けの要約(リスクと優先対応)を用意します。修正案と期限の目安、緊急対応が必要な項目は明示します。
フォローアップ(再検査)
修正後に再検査して問題が解消されたか確認します。残存リスクがあれば追加対策を提案し、定期診断のスケジュールを勧めます。
診断アプローチ:動的検査と静的検査
Webアプリ診断では、動的検査(DAST)と静的検査(SAST)の両方を使うと効果的です。
動的検査(DAST)
実際にアプリを動かして外部から攻撃を試みる方法です。ログイン画面に不正な入力を投げてSQLインジェクションやクロスサイトスクリプティング(XSS)を検出します。メリットは実際の挙動を確認できる点で、欠点はソースコードの内部問題(例:未使用だが危険なライブラリ)を見つけにくい点です。
具体例:検索フォームに “‘ OR ‘1’=’1” を送って、意図しないデータが返るか確認します。
静的検査(SAST)
ソースコードやバイナリを解析して潜在的な脆弱性を見つけます。ハードコードされたパスワードや未検証の入力を伝播する箇所を洗い出します。メリットは早期検出が可能で、開発段階で修正しやすい点です。欠点は誤検知(false positive)が出やすく、人手での精査が必要な点です。
具体例:入力値をチェックせずにデータベースに渡す箇所を静的解析で検出します。
効率的な運用法
両者を組み合わせて使います。開発段階でSASTをCIに組み込み、本番近くでDASTを実行します。自動ツールで検出した結果は必ず手動で確認し、優先度をつけて対応します。こうすることで、見落としを減らし、修正コストを下げられます。
セキュリティ対策の実施方法
優先順位を決める
リスクの高い部分から対策します。会員登録・ログイン・決済など、影響が大きい機能を最優先にしてください。まずは脆弱性の深刻度と影響範囲で分類し、短期で修正する項目と中長期の改善に分けます。
具体的な対策例
- 入力値検証とプレースホルダの使用:SQLインジェクション対策にはプリペアドステートメント(パラメータ化クエリ)を使います。入力はサーバー側で必ず検証します。
- 出力のエスケープ:XSS対策には画面表示時に適切なエスケープを行います。テンプレートエンジンの自動エスケープ機能を利用すると効果的です。
- 認証・セッション強化:多要素認証や強力なパスワードルール、セッションの有効期限短縮、Secure/HttpOnly/SameSite属性を付与したクッキーを設定します。
- ソフトウェア更新と依存関係管理:プラグインやライブラリは最新の安定版へ更新し、脆弱性情報を定期確認します。
- ネットワーク防御:WAFの導入やTLSの適切な設定で通信を保護します。
検証と再診断
修正後は必ず再度診断を行い、修正漏れや新たな問題がないか確認します。広範囲はツールで網羅し、重要機能は手動で精査する組み合わせが有効です。
運用と継続改善
定期的な脆弱性診断とペネトレーションテストを組み込み、修正対応のトラッキングとインシデント対応手順を整備します。これにより、再発防止と早期検出が可能になります。












