セキュリティ イベントの監査

Windows Communication Foundation (WCF) で作成されたアプリケーションでは、監査機能を使用してセキュリティ イベント (成功、失敗、またはその両方) をログに記録できます。 これらのイベントは Windows システム イベント ログに書き込まれ、イベント ビューアーを使用して確認できます。

監査を使用すると、管理者は既に発生した攻撃や現在進行中の攻撃を検出できます。 また、開発者がセキュリティ関連の問題をデバッグする際にも役立ちます。 たとえば、認証またはポリシー チェックの構成エラーによって承認済みユーザーへのアクセスが拒否された場合、開発者は、イベント ログを検査することによって、このエラーの原因をすばやく発見し、取り出すことができます。

WCF セキュリティの詳細については、セキュリティの概要に関するページを参照してください。 WCF プログラミングの詳細については、「基本的な WCF プログラミング」を参照してください。

監査レベルと動作

セキュリティ監査には次の 2 つのレベルがあります。

  • 呼び出し元を承認するサービス承認レベル。

  • WCF がメッセージの有効性をチェックして呼び出し元を認証するメッセージ レベル。

どちらの監査レベルにおいても、監査の成功または失敗をチェックできます。これは "監査動作" と呼ばれます。

監査ログの場所

監査のレベルと動作を決定したら、ユーザー (または管理者) は監査ログの場所を指定できます。 監査ログの場所は、Default、Application、および Security の 3 つから選択できます。 Default を指定した場合、ログの実際の場所は、ユーザーが使用しているシステムと、セキュリティ ログへの書き込みがサポートされているかどうかによって決まります。 詳細については、このトピックで後述する「オペレーティング システム」を参照してください。

セキュリティ ログへの書き込みを行うには、SeAuditPrivilege が必要です。 既定では、この権限は Local System アカウントと Network Service アカウントだけに与えられています。 セキュリティ ログの read および delete 機能を管理するには、SeSecurityPrivilege が必要です。 既定では、この権限は管理者だけに与えられています。

これに対し、アプリケーション ログは認証済みユーザーが読み書きできます。 既定では、Windows XP は、監査イベントをアプリケーション ログに書き込みます。 すべての認証済みユーザーに表示される個人情報をログに格納することもできます。

監査エラーの抑制

監査中に監査エラーを表示しないように指定するオプションも用意されています。 既定では、監査エラーはアプリケーションに影響を与えません。 ただし、必要に応じて、このオプションを false に設定し、例外をスローすることもできます。

プログラミング監査

監査動作は、プログラムまたは構成を使用して指定できます。

監査クラス

監査動作をプログラムで指定するときに使用するクラスとプロパティを次の表で説明します。

クラス 説明
ServiceSecurityAuditBehavior サービス動作として監査を行うための設定オプションを有効にします。
AuditLogLocation 書き込み先のログを指定するための列挙体。 指定できる値は、Default、Application、および Security です。 Default を選択した場合、実際のログの場所はオペレーティング システムによって決定されます。 このトピックの「アプリケーションまたはセキュリティ イベント ログの選択」のセクションを参照してください。
MessageAuthenticationAuditLevel メッセージ レベルで監査されるメッセージ認証イベントの種類を指定します。 NoneFailureSuccess および SuccessOrFailure から選択できます。
ServiceAuthorizationAuditLevel サービス レベルで監査されるサービス承認イベントの種類を指定します。 NoneFailureSuccess および SuccessOrFailure から選択できます。
SuppressAuditFailure 監査が失敗した場合に、クライアント要求をどのように処理するかを指定します。 たとえば、SeAuditPrivilege を持たないサービスがセキュリティ ログへの書き込みを試行したとします。 この場合、既定値の true が設定されていると、エラーは無視され、クライアント要求は正常に処理されます。

監査イベントをログに記録するようにアプリケーションを設定する例については、「方法: セキュリティ イベントを監査する」を参照してください。

構成

<behaviors> の下に <serviceSecurityAudit> を追加すると、構成を使用して監査動作を指定することもできます。 この要素は、次のコードに示すように、<behavior> の下に指定する必要があります。

<configuration>  
  <system.serviceModel>  
    <behaviors>  
      <behavior>  
        <!-- auditLogLocation="Application" or "Security" -->  
        <serviceSecurityAudit  
                  auditLogLocation="Application"  
                  suppressAuditFailure="true"  
                  serviceAuthorizationAuditLevel="Failure"  
                  messageAuthenticationAuditLevel="SuccessOrFailure" />
      </behavior>  
    </behaviors>  
  </system.serviceModel>  
</configuration>  

監査が有効になっているが、auditLogLocation が指定されていない場合、セキュリティ ログへの書き込みをサポートしているプラットフォームでの既定のログ名は "セキュリティ" ログになります。それ以外の場合は、"アプリケーション" ログになります。 セキュリティ ログへの書き込みがサポートされているのは、Windows Server 2003 および Windows Vista オペレーティング システムのみです。 詳細については、このトピックで後述する「オペレーティング システム」を参照してください。

セキュリティに関する考慮事項

監査が有効になっていることが悪意のあるユーザーに知られた場合、そのユーザーは監査エントリの書き込みにつながる無効なメッセージを送信する可能性があります。 このような方法で監査ログに書き込みが行われると、監査システムに障害が発生します。 これを防ぐには、SuppressAuditFailure プロパティを true に設定し、イベント ビューアーのプロパティを使用して監査動作を制御します。

Windows XP のアプリケーション ログに書き込まれた監査イベントは、すべての認証済みユーザーに表示されます。

アプリケーションまたはセキュリティ イベント ログの選択

アプリケーション イベント ログとセキュリティ イベント ログのどちらにログを記録するかを選択するには、次の表の情報を参考にしてください。

オペレーティング システム

システム アプリケーション ログ Security log
Windows XP SP2 以降 サポートされています サポートされていません
Windows Server 2003 SP1 および Windows Vista サポートされています スレッド コンテキストが SeAuditPrivilege を持つ必要があります。

その他の要素

オペレーティング システム以外に、ログ記録の使用可能性を制御する設定を次の表に示します。

要素 アプリケーション ログ Security log
監査ポリシーの監査 適用不可。 セキュリティ ログは、構成だけでなく、ローカル セキュリティ機関 (LSA: Local Security Authority) ポリシーによっても制御されます。 [オブジェクト アクセスの監査] カテゴリも有効にする必要があります。
既定のユーザー エクスペリエンス すべての認証済みユーザーがアプリケーション ログに書き込むことができるため、アプリケーション プロセスでは追加のアクセス許可手順は必要ありません。 アプリケーション プロセス (コンテキスト) が SeAuditPrivilege を持つ必要があります。

関連項目