脆弱性評価は、悪意のあるアクター(行為者)によるエクスプロイトの可能性があるWebアプリケーションのセキュリティ脆弱性の重大度レベルを特定して割り当てるプロセスです。評価は手動で行い、市販またはオープンソースのスキャン・ツールで補完して最大限のカバレッジを確保します。この必須チェックリストは、Webアプリケーションのセキュリティの欠陥を包括的にテストする場合の定石です。
評価の前
- テスト準備のミーティングを行う。アプリケーションのデモのプレゼンテーションを行い、予定されているペネトレーション・テストのスコープを定め、テスト環境のセットアップについて話し合います。
- 脅威モデルを構築する。特定の領域を対象にして所定の期間内に重大度の高い脆弱性をなるべく多く見つけます。
- 開発チームへのインタビューを行う。アプリケーションに関する詳細な知識を入手します。
- テスト環境の詳細を確認する。URL、VPNのアクセス、資格情報などを確認します。
自動動的スキャン
- 自動スキャンの方法を選択する。アプリケーションのフレームワークに応じて適切な市販またはオープンソースのセキュリティ・スキャン・ツール(Burp Suite Pro、IBM Rational AppScan、HP Fortify On Demandなど)を選択し、最大限のカバレッジを確保します。
- アプリケーションをスキャンする。この種のテストで多くの一般的なセキュリティ脆弱性を明らかにします。
手動テスト
- インジェクションとXSSのテストを行う。SQL、JSON、XML、LDAPインジェクションなど、インジェクションの欠陥の存在をチェックします。アプリケーションのすべての入力点からのクロスサイト・スクリプティング(XSS)をテストします。フォームが改ざんされることなく安全に送信されるかどうかを確認します。
- 認証・認可テストを実施する。不十分な認証方法、不適切なアクセス制御定義、欠陥があるログイン・プロセスがないか検査します。
- セッション管理を監査する。セッションID/cookieのセキュリティをレビューします。クロスサイト・リクエスト・フォージェリ(CSRF)のインスタンスを検索します。
- 重要情報の露出を調査する。NPIデータの不適切な保存、エラー処理の欠陥、非セキュアな直接オブジェクト参照、ソースコードのコメントによる重要情報の露出がないことを確認します。
- セキュアなコンフィグレーションであるかを検査する。セキュリティ・コンフィグレーションがデフォルト設定で定義およびデプロイされていないことを保証します。
- トランスポート層のセキュリティ・テストを実施する。暗号アルゴリズムに欠陥がないこと、および通信チャネルが暗号でセキュリティ保護されていることを確認します。
- アプリケーションのスパイダリングを実行する。セキュリティ・コントロールをバイパスするためにアプリケーションが通常と異なる方法を用いていないかを検査します。
テスト中
- 結果をトリアージ(優先順位付け)する。スキャン結果を手動でスキャンしてトゥルー・ポジティブと誤検知を区別します。
- 証拠を集める。適切なスクリーンショットを撮るなどしてエクスプロイトを再現する手順を記録し、概念実証の証拠を正確に作成します。
テスト後
- 詳細なレポートを作成する。標準テンプレートを使用し、リスク格付けに従ってすべてのテスト結果のレポートを作成します。
- ステークホルダーとコミュニケーションをとる。さまざまなステークホルダーが各テスト結果に関連するリスクを理解し、根拠付けるためのサポートをテスト・チームが行えるようにします。
これまで見てきたように、総合的なアプリケーション・セキュリティ・プログラムには各種のセキュアなプロセスとプラクティスが含まれます。プロジェクトのスコープを定めたら、チーム・メンバーはアプリケーションの中で脆弱性の重要度が高い領域を把握する必要があります。では、プロジェクトをどのように開始すればよいでしょうか? 次回の脆弱性評価は脅威モデルから始めて、セキュリティ脆弱性を克服しましょう。