ASP.NET 構成の保護
更新 : 2007 年 11 月
ASP.NET 構成は、サーバー全体、ASP.NET アプリケーション、またはアプリケーション サブディレクトリ内の個々のページを構成するための機能を提供しています。認証モード、ページ キャッシュ、コンパイラ オプション、カスタム エラー、デバッグおよびトレース オプションなどの機能を構成できます。このトピックでは、ローカルまたはリモートの ASP.NET アプリケーションを構成する場合に、推奨手順を使用して構成機能のセキュリティを最適化する方法について説明します。ASP.NET の他の機能に対する保護の詳細については、「参照」を参照してください。
コーディングと構成に関する推奨手順に従うと、アプリケーションのセキュリティを改善できますが、Microsoft Windows や Microsoft Internet Information Services (IIS) の最新のセキュリティ更新プログラムと共に Microsoft SQL Server、またはその他のメンバシップ データ ソースの更新プログラムを使用して、アプリケーション サーバーを常に最新の状態に維持することが大切です。
安全なコードの記述とアプリケーションのセキュリティ保護のためのベスト プラクティスの詳細については、Michael Howard と David LeBlanc 共著『Writing Secure Code』、および「Microsoft Patterns and Practices」のガイダンスを参照してください。
重要 : |
---|
ASP.NET 構成システムは、ASP.NET のリソースと機能のみを構成します。IISの 構成機能を使用して、ASP.NET 以外のリソースを構成します。IIS の構成の詳細については、「Working with the Metabase (IIS 6.0)」および「IIS Metabase Property Reference」を参照してください。 |
構成ファイルのセキュリティ
次の表に、Machine.config ファイルおよびルート Web.config ファイル上で既定で設定されるアクセス制御リスト (ACL: Access Control List) を示します。Machine.config ファイルおよびルート Web.config ファイルは共に、%SystemRoot%\Microsoft.NET\Framework\version\CONFIG ディレクトリに位置します。これらの ACL はこのディレクトリ自身にも設定されますが、Power Users グループの変更アクセス許可を含みます。このディレクトリは読み取り専用です。
Windows アカウント |
アクセス許可 |
---|---|
管理者 |
フル コントロール |
ASP.NET コンピュータ アカウント (<server>\ASPNET) |
読み取りおよび実行 |
IIS_WPG (<server>\IIS_WPG) |
読み取りおよび実行 |
LOCAL SERVICE |
読み取りおよび実行 |
NETWORK SERVICE |
読み取りおよび実行 |
Power Users (<server>\Power Users) |
変更 |
SYSTEM |
フル コントロール |
Users (<server>\Users) |
読み取りおよび実行 |
次の表に、Web.config ファイル、および configSource 属性に示されたすべてのファイルに設定する必要がある ACL を示します。
Windows アカウント |
アクセス許可 |
---|---|
管理者 |
フル コントロール |
IIS_WPG (<server>\IIS_WPG) |
読み取りおよび実行 |
INTERACTIVE |
読み取り |
インターネット ゲスト アカウント (<server>\IUSR_<server>) |
読み取り |
NETWORK |
読み取り |
NETWORK SERVICE |
読み取り |
SYSTEM |
フル コントロール |
Users (<server>\Users) |
読み取りおよび実行 |
ASP.NET Web サイト管理ツール アカウント |
特別なアクセス許可 |
ASP.NET 構成システムは、構成設定をどのように編集した場合でも、構成ファイルに設定された ACL を優先します。詳細については、「ASP.NET 構成ファイルの編集」を参照してください。
構成値の保護
アプリケーションの構成ファイル内に機密情報を格納する場合は、プロテクト構成を使用して機密情報を暗号化する必要があります。特に慎重を要する情報としては、machineKey 構成要素に格納される暗号キーや、connectionStrings 構成要素に格納されるデータ ソース接続文字列などがあります。詳細については、「保護された構成を使用した構成情報の暗号化」を参照してください。
構成暗号化キー コンテナの保護
暗号化キーを使用する際の重要な事項として、キーが格納されるファイル (コンテナとも呼ばれます) の保護があります。このとき、コンテナに関連付けられる保護レベルに注意する必要があります。コンテナは標準のオペレーティング システム ファイルに格納されるので、暗号化キーへのアクセスは、そのファイルの ACL によって制限されます。ACL は、そのファイルが作成されたフォルダから継承されます。ローカル マシン スコープのキー コンテナ (useMachineContainer"true") は %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys にある非表示フォルダに格納されます。
既定では、キー コンテナを作成したユーザーがそのキーへの完全なアクセス権を持ちます。他のユーザー (Administrators グループのユーザーも含めて) は、コンテナに設定されている ACL によって、コンテナにアクセスできたりできなかったりします。ASP.NET IIS 登録ツール (ASP.NET IIS 登録ツール (Aspnet_regiis.exe)) の –pa スイッチを使用して、他のユーザーにもコンテナへのアクセス権を付与できます。指定のキーで暗号化または復号化をしようとするユーザーは、そのキー コンテナにアクセスするためのアクセス許可を持っている必要があります。
場合によっては、管理者特権を持っていないユーザーでも暗号化キーを作成できることがあります。これは、キーが存在していないときにアプリケーションが構成暗号化を要求する場合です。コンテナが存在していない場合、コンテナが作成され、暗号化操作が実行されます。
この場合、.NET Framework は必要なキーと、現在のユーザーの ACL に関連するコンテナを作成します。ここで問題になるのは、管理者特権を持つユーザーが暗号化キー コンテナへのアクセスを拒否される可能性があることです。管理者は、上記のフォルダ上の物理ファイルの所有権を取得することによって、キーへのアクセス権を取得できます。ガイドラインとして、管理者特権を持つユーザーが、必要なキーをそれらが使用される前に作成し、暗号化時にキーが作成されないようにすることをお勧めします。
共有ホスト環境での構成のセキュリティ保護
共有ホスト環境では、悪意のあるユーザーが構成ファイルを直接変更したり、構成 API やその他の管理ツールまたは構成ツールを通じた変更を構成設定に加えたりする可能性があります。アプリケーション構成の変更は、構成セクションをロックすることによって防止できます。このためには、Machine.config ファイル、または制限する構成ファイルよりも階層内で上位にあるいずれかの構成ファイルに location 要素を追加します。location 要素は、子構成ファイルの設定の変更を防止する目的で使用されます。詳細については、「方法 : ASP.NET 構成設定をロックする」および「方法 : Location の設定を使用して特定のディレクトリを構成する」を参照してください。
リモート構成
既定では、リモート構成は無効になっています。これを有効にすると、ユーザーが DCOM レベルで承認されます。また、ローカル管理者のみが構成データの読み取りまたは書き込みを許可されます。詳細については、「ASP.NET リモート構成ファイルの編集」を参照してください。
カスタム構成プロバイダ
カスタム セクション ハンドラ コードは、現在のユーザーのセキュリティ トークンにかかわらず、ホスト プロセス アカウントの資格情報を使用して実行されます。Web のシナリオの場合、これは Windows 2000 および Windows XP 上の <server>\ASPNET アカウント、Windows Server 2003 上の NETWORK SERVICE アカウント、または明示的に構成されたユーザー アカウントです。クライアントのシナリオの場合、これは現在実行中のプロセスの ID です。
構成システムは、カスタム構成セクション ハンドラを呼び出す前にアクセス許可を設定します。また、.NET Framework はこの呼び出しを信頼しません。この呼び出しは、アプリケーションの信頼されているアクセス許可を伴って実行されます。ASP.NET 構成システムは、%SystemRoot%\Microsoft.NET\Framework\version\CONFIG ディレクトリを信頼しますが、その階層内の下位に位置するディレクトリは信頼しません。
カスタム構成セクション ハンドラは、コード アクセス セキュリティ (CAS: Code Access Security) 要求属性を設定してアクセス許可を取得する必要があります。詳細については、「ASP.NET コード アクセス セキュリティ」または「コード アクセス セキュリティの基礎」を参照してください。
構成ファイルのファイルロックの保持
構成ファイルを保存する試行またはファイル ハンドルを開く試行が複数回実行された場合に限り、構成ファイルがロックされる可能性があります。悪意のあるユーザーが Machine.config ファイルまたはルート Web.config ファイルのロックを試みることがありますが、そのためには完全な信頼が必要であり、ASP.NET では既定で完全な信頼は無効になっています。
構成 API による任意のファイルの読み取り
構成 API のクラスは、アプリケーション ドメインの一部分ではないディレクトリ、またはファイル名の拡張子として .config を持たないファイルを読み取ることができません。
ASP.NET 要求に適用される IIS メタベース設定
IIS が ASP.NET アプリケーションへの要求を受信すると、そのアプリケーションの ASP.NET 構成設定にかかわらず、IIS メタベース設定が ASP.NET アプリケーションに適用されます。この制約により、ユーザーが ASP.NET アプリケーションにアクセスできない場合や、ASP.NET アプリケーションのセキュリティ設定の制限が緩くなる場合があります。
たとえば、Web.config ファイル内のセキュリティ設定ではサイトへの匿名アクセスが許可されているのに、IIS メタベース内のセキュリティ設定では認証されたユーザーにのみサイト アクセスを許可するように設定されていると、匿名ユーザーのサイトへのアクセスは拒否されます。これを解決するには、IIS マネージャで匿名ユーザーを許可するように Web アプリケーションを構成します。
IIS 機能の保護の詳細については、「Security in IIS 6.0」を参照してください。
エラー メッセージとイベント
次のセクションでは、予期しないエラー メッセージやイベントによって公開されるセキュリティ上のリスクを軽減する方法について説明します。
例外
機密情報が望ましくないソースに公開されることを防ぐために、詳細なエラー情報を表示しないようにするか、またはクライアントが Web サーバーそのものであるときだけ詳細なエラー メッセージ情報を表示するように、アプリケーションを構成する必要があります。詳細については、「customErrors 要素 (ASP.NET 設定スキーマ)」を参照してください。
[イベント ログ]
サーバーが Windows Server 2003 を実行している場合、イベント ログをセキュリティ保護したり、イベント ログのサイズや保持期間などのパラメータを設定したりすることによってアプリケーションのセキュリティを強化し、間接的なサービス拒否攻撃を防ぐことができます。イベント ログの構成の詳細については、を参照してください。Windows の [ヘルプとサポート] で「イベント ビューア」を検索してください。
Health Monitoring
ASP.NET の状態監視機能を使用すると、成功したログオン試行と失敗したログオン試行が記録されます。既定の構成では、ログオン試行が失敗すると、ユーザー名とその他の診断情報が [アプリケーション] イベント ログに記録されます。イベント ログへのアクセスは、この情報の機密性を確保するために制限します。