[HOWTO] ファスト トラック – ガイダンスの実践方法
公開日: 2004年9月7日 | 最終更新日: 2004年9月7日
トピック
モジュールの内容
目的
適用対象
モジュールの使用方法
達成目標と対象範囲
総合的な手法
ネットワークをセキュリティで保護する
ホストをセキュリティで保護する
アプリケーションをセキュリティで保護する
脅威を特定する
ガイダンスを製品のライフ サイクルに適用する
ガイダンスを実装する
各担当者の役割
要約
モジュールの内容
このモジュールでは、セキュリティ ガイド「Web アプリケーション セキュリティ強化: 脅威とその対策」に記載されている手法について説明します。その目的は、ハッキングに対して抵抗力のある Web アプリケーションの設計、開発を支援することです。アプリケーションをこの手法によってセキュリティ保護することで、攻撃が成功する可能性を低下させ、仮に攻撃を受けた場合でも、その損害の度合いを低減できます。
ここでは、Web アプリケーションのセキュリティに対する取り組みを複数のアプリケーション層にわたり、かつネットワーク層、ホスト層、アプリケーション層という複数の層で行うような総合的な手法が奨励されます。核となるセキュリティ概念についての説明、およびタスクベースのセキュリティ チェックリストもあります。
モジュールの最後には、RACI についての説明があります。RACI は、プロジェクトのライフ サイクルの間存在していることが求められるセキュリティのタスクと役割を特徴付けるための、ユーザーが親しみやすい実践的なソリューションを提供します (RACI は Responsible (責任)、Accountable (責任)、Consulted (助言)、および keep Informed (情報所有) を表します)。
目的
このモジュールの目的は次のとおりです。
-
Web アプリケーションのセキュリティについて、ネットワーク、ホスト、およびアプリケーションの各層を一貫してセキュリティで保護する総合的な手法を学習する。
-
脅威モデルの作成プロセスについて理解する。
-
ガイドで提供されるガイダンスを製品のライフ サイクルにわたり適用する方法を理解する。
-
ガイドで提供されるガイダンスを各役割に適用する方法を理解する。
-
ガイドで提供されるガイダンスを実践する方法について学習する。
適用対象
このモジュールは、「Web アプリケーション セキュリティ強化: 脅威とその対策」セキュリティ ガイドのコンテキストと構造に基づいていますが、セキュリティで保護された Web アプリケーションの開発に関心があるすべての人に関係する方法論を含んでいます。
モジュールの使用方法
セキュリティで保護された Web アプリケーションを開発および実装するための戦略と方法論の作成を可能にする、核となるセキュリティ概念を理解するのにこのモジュールを使用してください。
達成目標と対象範囲
このガイドは、ハッキングに対して抵抗力のある Web アプリケーションの設計、構築、および構成を支援します。アプリケーションをこの手法によってセキュリティ保護することで、攻撃が成功する可能性を低下させ、仮に攻撃を受けた場合でも、その損害の度合いを低減できます。図 1 は、このガイドが対象とする範囲と、このガイドで説明する ネットワーク、ホスト、およびアプリケーションをセキュリティで保護する 3 層構成の手法を示しています。
.jpg)
図 1
このガイドが対象とする範囲
このガイドでは、図 1 に示された 3 つの物理層にわたってセキュリティに取り組みます。その物理層には、Web サーバー、リモート アプリケーション サーバー、データベース サーバーが含まれます。各物理層において、ネットワーク、ホスト、およびアプリケーションの各層でセキュリティに取り組みます。図 1 は、ガイドで使われる構成のカテゴリとアプリケーション脆弱性のカテゴリも示しています。構成のカテゴリは、ホストおよびネットワークに適用されるさまざまなセキュリティ構成設定を分類するのに使用され、脆弱性のカテゴリは、アプリケーションのセキュリティに関する問題を分類するのに使用されます。
総合的な手法
Web アプリケーションのセキュリティは、すべてのアプリケーション物理層にわたって、かつ複数の層で取り組む必要があります。攻撃者は、どの層においても弱点を見いだすことができます。そのため、ガイドではアプリケーションのセキュリティに対して総合的な手法を採用し、それを 3 つの層すべてに適用します。このセキュリティに対する総合的な手法を図 2 に示します。
.jpg)
図 2
セキュリティに対する総合的な手法
図 2 は、ガイドが対象とする、ネットワーク、ホスト、アプリケーションを含む複数の層を示しています。ホスト層には、オペレーティング システム、プラットフォーム サービスとコンポーネント、およびランタイム サービスとコンポーネントが含まれます。プラットフォーム サービスとコンポーネントには、Microsoft® SQL Server 2000 と Enterprise Services が含まれます。ランタイム サービスとコンポーネントには特に、ASP.NET および .NET コード アクセス セキュリティが含まれます。
ネットワークをセキュリティで保護する
セキュリティで保護されたネットワークの主要な 3 要素は、ルーター、ファイアウォール、およびスイッチです。ガイドでは、この 3 要素をすべて扱います。表 1 に、各要素の簡単な説明を示します。
表 1: ネットワーク セキュリティの要素
| 要素 | 説明 |
| ルーター | ルーターは最も外側にあるネットワーク リングです。ルーターは、用意されているアプリケーションが使用するポートとプロトコルに向けてパケットを送出します。セキュリティで保護されていない TCP/IP プロトコルはこのリングで阻止されます。 |
| ファイアウォール | ファイアウォールは、アプリケーションで使用されないプロトコルとポートを阻止します。さらに、ファイアウォールは、アプリケーション固有のフィルタ機能を備えており、セキュリティで保護されたネットワーク トラフィックを強要し、悪意のある通信を阻止します。 |
| スイッチ | スイッチは、ネットワーク セグメントを分離するために使用されます。スイッチはしばしば、問題の対象として見過ごされ、過剰に信頼されます。 |
ホストをセキュリティで保護する
ホストには、オペレーティング システムと .NET Framework、およびそれに関連するサービスとコンポーネントが含まれます。ホストが、IIS を実行する Web サーバーであるか、Enterprise Services を実行するアプリケーション サーバーであるか、または SQL Server を実行するデータベース サーバーであるかによらず、ガイドでは、サーバーのさまざまな役割や種類にわたって共通である、一般的なセキュリティの方法論に従います。
このガイドでは、実行する必要のある予防策および構成する必要のある設定をカテゴリに編成します。これらの構成のカテゴリを使用することで、セキュリティで保護する過程を上方から下方に向かって体系的にひととおり見ることができ、また、特定のカテゴリに限定して具体的な手順を実行できます。
図 3 は、ネットワーク、ホスト、およびアプリケーションをセキュリティで保護する方法を説明するこのガイドのモジュールで使用される構成のカテゴリを示しています。
.jpg)
図 3
ホスト セキュリティのカテゴリ
アプリケーションをセキュリティで保護する
このガイドでは、セキュリティで保護された Web アプリケーションの設計と構築、および既存アプリケーションのセキュリティの評価を支援する目的で、アプリケーション脆弱性のカテゴリの集合を定義します。それらは、多層化されたアーキテクチャにおける複数の技術およびコンポーネントに共通のカテゴリです。これらのカテゴリは、このガイドの設計、構築、およびセキュリティ評価の各モジュールのすべてにおいて、説明の中心となっています。
表 2: アプリケーション脆弱性のカテゴリ
| カテゴリ | 説明 |
| 入力検証 | アプリケーションが受信した入力が適切で安全であることの確認方法。入力検証は、アプリケーションが他の処理に先立って入力のフィルタリング、スクラブ、および拒否を行う方法についてのカテゴリです。 |
| 認証 | ユーザーの確認。認証は、あるエンティティが別のエンティティを認識するプロセスです。通常は、ユーザー名とパスワードのような資格情報が使われます。 |
| 承認 | ユーザーが実行可能な操作。承認は、リソースへのアクセスや操作を制御するためにアプリケーションによって使用されるプロセスです。 |
| 構成管理 | アプリケーションを実行するユーザー、接続するデータベース、アプリケーションの管理方法、これらの設定をセキュリティで保護する方法。構成管理は、アプリケーションでこれらの運用上の問題を処理する方法についてのカテゴリです。 |
| 機密性の高いデータ | 機密性の高いデータは、メモリ、ネットワーク、または永続ストア上にある、保護する必要のある情報です。アプリケーションには、機密性の高いデータを処理するプロセスが存在する必要があります。 |
| セッション管理 | セッションとは、ユーザーと Web アプリケーション間の関連する一連の対話のことです。セッション管理は、アプリケーションがこれらの対話を処理および保護する方法についてのカテゴリです。 |
| 暗号化 | 機密情報を保護する方法 (機密性)、データまたはライブラリの不正操作を阻止する方法 (完全性)、暗号化を強固にする乱数値用のシードを提供する方法。暗号化は、アプリケーションが機密性と完全性を強要する方法についてのカテゴリです。 |
| パラメータ改ざん | フォーム フィールド、クエリ文字列引数、および Cookie 値がアプリケーション用のパラメータとしてしばしば使用されます。パラメータ改ざんは、アプリケーションがそれらの値を改ざんから保護する方法と、アプリケーションが入力パラメータを処理する方法の両方についてのカテゴリです。 |
| 例外管理 | メソッド呼び出しに失敗した場合のアプリケーションの対処、アプリケーションが障害の状態を明らかにする方法、エンド ユーザーに分かりやすいエラー情報を返す方法、価値のある例外情報を呼び出し元に戻す方法、アプリケーションがエラー時に適切に終了するかどうか。 |
| 監査とログ記録 | だれがいつ、何をしたかについての調査。監査とログ記録は、アプリケーションがセキュリティに関連するイベントを記録する方法についてのカテゴリです。 |
脅威を特定する
セキュリティについての方策の適用を成功させるには、脅威について認識する必要があります。脅威はインターネット上の攻撃者のように外部に存在する場合と、不満を持つ従業員や管理者のように内部に存在する場合があります。このガイドでは、次に示す 2 つの方法で脅威の特定を支援します。
このガイドで取り扱う脅威モデルの作成プロセスの概略を図 4 に示します。
.jpg)
図 4
脅威モデルの作成プロセス
次に、図 4 に示されている手順を説明します。
-
資産を特定する:
システムで保護する必要のある資産の価値を特定します。
-
アーキテクチャの概要を作成する:
簡単なダイアグラムと表を使用して、サブシステム、信頼性境界、データ フローなどを含む、アプリケーションのアーキテクチャを文書化します。
-
アプリケーションを分解する:
アプリケーションのアーキテクチャを分解して、アプリケーションのセキュリティ プロファイルを作成します。基底にあるネットワーク、ホスト インフラストラクチャも対象にします。セキュリティ プロファイルの目的は、アプリケーションの設計、実装、展開構成における脆弱性を明らかにすることです。
-
脅威を特定する:
攻撃者の目標を意識し、アプリケーションのアーキテクチャと脆弱性を認識したうえで、アプリケーションに影響を与える可能性のある脅威を特定します。
-
脅威を文書化する:
各脅威に対して捕獲対象とする属性の主要なセットを定義する共通の脅威テンプレートを使用して、各脅威を文書化します。
-
脅威を評価する:
脅威に優先順位を付け、最も重要な脅威に最初に取り組むために、脅威を評価します。これらの脅威は、危険度が最も高いものです。評価の過程では、脅威が発生する可能性を脅威が発生した場合に受ける損害に重み付けします。脅威によってもたらされる危険とそれへの対処に必要なコストとを比較した結果、ある脅威に対して何のアクションも保証されないことが判明する場合があります。
ガイダンスを製品のライフ サイクルに適用する
ガイドのさまざまな部分が、製品開発ライフ サイクルのさまざまな段階に適用されます。ガイド内のモジュールの順番は、一般的なライフ サイクルの段階を反映しています。モジュールと役割との関係を図 5 に示します。
.jpg)
図 5
モジュールと製品ライフ サイクルとの関係
注: 脅威モデルの作成とセキュリティ評価 (特にコード レビューと展開レビューのモジュール) は、Web アプリケーションを構築する場合や既存のアプリケーションをレビューする場合に適用します。
ガイダンスを実装する
ガイド全体においてガイダンスはタスクベースでモジュール化されていて、各モジュールは製品ライフ サイクルのさまざまな段階、およびそれに伴うさまざまな役割に関連付けられています。これらの役割には、設計、開発、システム管理、およびセキュリティの専門家が含まれます。特定のモジュールに限定して特定のタスクを実行することも、製品開発ライフ サイクルの段階に対応する一連のモジュールを使用することもできます。
表 3 に示すチェックリストは、ネットワーク、ホスト、およびアプリケーションをセキュリティで保護するのに必要となる、このガイドで扱う領域を示しています。
表 3: セキュリティ チェックリスト
| チェック | 説明 |
| .gif) | ネットワーク、ホスト、およびアプリケーションの層に影響を与える脅威について、チームを教育する。一般的な脆弱性および攻撃を特定して、対応策を学習します。詳細については、モジュール 2 の「脅威とその対策」を参照してください。
|
| .gif) | Web アプリケーションの脅威モデルを作成する。詳細については、モジュール 3 の「脅威モデルを作成する」を参照してください。
|
| .gif) | 企業のセキュリティ ポリシーをレビューして実施する。セキュリティ ポリシーが存在しない場合、作成します。セキュリティ ポリシー作成の詳細については、SANS Info Sec Reading Room の「Security Policy Issues」(英語) (http://www.sans.org/rr/catindex.php?cat_id=50) を参照してください。
|
| .gif) | ネットワーク セキュリティのレビューを行う。詳細については、モジュール 15 の「ネットワークをセキュリティ保護する」を参照してください。
|
| .gif) | サーバーに修正プログラムを適用し、アップデートする。サーバーのセキュリティ設定をレビューして、セキュリティで保護されたサーバーのスナップショットと比較する。詳細については、モジュール 16 の「Web サーバーをセキュリティ保護する」を参照してください。
|
| .gif) | Web アプリケーションにおけるセキュリティ設計のガイドラインと方針について、設計者と開発者を教育する。詳細については、モジュール 4 の「セキュリティ保護された Web アプリケーションの設計ガイドライン」を参照してください。
|
| .gif) | セキュリティで保護されたマネージ コードを記述することについて、設計者と開発者を教育する。詳細については、モジュール 7「セキュリティ保護されたアセンブリを構築する」およびモジュール 8「コード アクセス セキュリティの実践」を参照してください。
|
| .gif) | 開発者のワークステーションをセキュリティで保護する。詳細については、このガイドの [HOWTO] セクションにある「[HOWTO] 開発者のワークステーションのセキュリティを確保する方法」を参照してください。 |
| .gif) | 新しい Web アプリケーションと既存のアプリケーションの設計をレビューする。詳細については、モジュール 5 の「セキュリティのためのアーキテクチャと設計レビュー」を参照してください。
|
| .gif) | コード レビューを行う方法について、開発者を教育する。開発中のアプリケーションのコード レビューを行います。詳細については、モジュール 21 の「コード レビュー」を参照してください。
|
| .gif) | アプリケーションの展開レビューを行い、潜在するセキュリティについての脆弱性を認識する。詳細については、モジュール 22 の「展開レビュー」を参照してください。
|
各担当者の役割
セキュリティで保護されたアプリケーションの設計と開発は、複数の役割が関わりあう共同作業です。このガイドは各役割、およびその役割に関連する、役割ごとに検討されるセキュリティ要素に取り組むように構成されています。カテゴリ分けと検討課題の概略を次に示します。
RACI チャート
RACI の各文字には次の意味があります。
-
Responsible (責任: タスクの実行に責任のある役割)
-
Accountable (責任: タスクに関するすべてのことに対して責任がある役割)
-
Consulted (助言: 助言を与えることでタスクの実行を支援する役割)
-
Keep Informed (情報所有: 情報を与えられる権利を持つ役割)
セキュリティに関連する主要なタスク、および各タスクを実行する役割を特定するために、プロジェクトの開始時に RACI チャートを使用できます。
表 4 は、このガイドのための簡単な RACI チャートを示しています (見出し行には役割、そして最初の列にはタスクがリストされ、残りの列には役割に応じた、各タスクにおける責任のレベルが示されています)。
表 4: RACI チャート
| タスク | 設計者 | システム管理者 | 開発者 | テスト担当者 | セキュリティの専門家 |
| セキュリティ ポリシー | | R | | I | A |
| 脅威モデルの作成 | A | | I | I | R |
| セキュリティ設計方針 | A | I | I | | C |
| セキュリティ アーキテクチャ | A | C | | | R |
| アーキテクチャと設計レビュー | R | | | | A |
| コード開発 | | | A | | R |
| テクノロジ固有の脅威 | | | A | | R |
| コード レビュー | | | R | I | A |
| セキュリティ テスト | C | | I | A | C |
| ネットワークのセキュリティ | C | R | | | A |
| ホストのセキュリティ | C | A | I | | R |
| アプリケーションのセキュリティ | C | I | A | | R |
| 展開レビュー | C | R | I | I | R |
要約
このファスト トラックは、ハッキングに対して抵抗力のある Web アプリケーションの設計と構築、および既存アプリケーションのセキュリティの評価を支援するため、ガイドに採用されている基本的な手法を明確にしています。プロジェクトのライフ サイクル内での特定の役割に応じたガイダンスの適用方法についても示しています。