アプリケーションレベルの攻撃の最も一般的な標的がWebであることをご存知でしたか?しかも、何らかの理由でWebアプリケーションのセキュリティに関わる作業に携わった経験がある方は、その実現が容易でないこともご存知でしょう。アプリケーションセキュリティを実現するには、戦略的アプローチをとることが重要です。このWebアプリケーション・セキュリティ・テスト・チェックリストは、テスト手順を理解し、テストの主要な要素を把握して見落としを防ぐためのガイドです。
以下の6つのステップに従ってアプローチをカスタマイズし、最大限に効果的、効率的、かつ迅速なテスト方式を実現しましょう。
アプリケーションの計画およびテストを適切に行うためにそれに適した質問をします。
これにはユーザーがコンテンツを追加、変更、削除できる部分が含まれます。これに該当する箇所では、入力のサニタイジングと出力のエンコーディングを検証する必要があります。
例:ブログの投稿のようにユーザーが大量のデータを入力できるアプリケーションの場合(特にHTMLエディタを利用する場合)、適切な予防メカニズムを設けないとインジェクション攻撃のリスクが高くなります。
これはバイパス、エスカレーション、重要データの漏えいの手法に特化して手動テストが必要な部分などが対象になります。ビジネスロジック・フローは、データフローごとに、またアプリケーションに対して一意となるように定義することができます。この種の機能は自動解析では見落とされることが多くあります。
例:承認ワークフローや特権アカウントによるアクセスを伴う機能を含めることができます。テスト担当者は以下のことを確認する必要があります。
この手順は、ロックアウトや複数のチームメンバーがアクセスする場合に必要です。
テスト方式を文書化し、各評価担当者に作業内容とテスト関連の作業に当てることができる期間を確実に周知します。
認証を行うアプリケーションの場合、以下のチェック項目が当てはまります(これに限られません)。
専門に応じて、機能または脆弱性のタイプ別にチームメンバー間でアプリケーションを分割することをお勧めします。
コンフィグレーションとスキャンの担当者を割り当てます。
この時点で報告書を作成することをお勧めします。
内部の状況報告ミーティングは週2回行い、テスト担当者とプロジェクト/顧客担当マネージャーを参加させます。外部の状況報告ミーティングは週1回行い、内部チームと顧客を参加させます。可能であれば、プロジェクトマネージャーがチームの状況をひととおり説明してからチームメンバーに詳細の報告を引き継ぎます。
この作業は顧客からの依頼があった場合にのみ行います。
契約条件に規定されている場合。この作業は実施フェーズで役立ち、調整が必要になった場合にスコープに関する詳細情報を得ることができます。
テストを行って脆弱性を検出します(存在する場合)。
自動化ツールは慎重に選んでください(最低でも一般的なOWASP Top 10脆弱性に対応していること)。自動テストを利用することにより、テスト担当者は手動解析が必要なビジネスロジックとデータフローにスキルを集中できます。自動テストは、ライセンスを取得して利用している、または内製したツールに応じて組織ごとに若干異なります。
手動テストは、一般に自動テストでは見落とされているビジネスロジックやデータフローに対応します。手動テストの例を次に示します。
ほとんどのツールでは、同じページに複数の要求を送信して異なる応答が返ってくるかどうかを確認します。また、多くのツールでは、HTTP 500エラーが返された場合には脆弱性が存在するとされます。要求とエラーメッセージを確認して脆弱性が実際に生じているかどうかを判断するのはテスト担当者の責任です。
脆弱性が見つからなかった場合でも、顧客からテスト結果の提出を依頼されることがあります。
結果をすべて文書化し、顧客に報告します。
これには説明、インスタンス(影響するURL)、ロール、証拠、再現手順、可能性、影響、対策を含める必要があります。
これにより一貫性、体裁、テクニカルライティングに不備がないことを確認します。
(顧客から依頼された場合)結果をレビューし、話し合いに基づいて適宜調整を行います。
テストで検出された脆弱性に対処します。
具体的な対策作業を開発者に割り当てるのはアプリケーション所有者の役割です。コードのすべての類似箇所に修正を適用することが重要です。ブラックボックス・テストは網羅的なものではなく、同様の問題が存在する可能性があります。
テストで見つかった脆弱性が解決され、修正を回避できないようになっていることを確認します。
以前に発見された具体的な問題を探します。
XSSフィルタ回避手法を実行し、さまざまなロールでエスカレーション攻撃を試行し、別のURLへのリダイレクトを行います。