审核安全事件

使用 Windows Communication Foundation (WCF) 创建的应用程序可以利用审核功能来记录安全事件(成功、失败或两者)。这些事件被写入 Windows 系统事件日志,并且可以使用事件查看器进行检查。

审核为管理员提供了一种检测已经发生或正在发生的攻击的方式。此外,审核有助于开发人员调试与安全相关的问题。例如,如果授权或检查策略配置中的错误意外拒绝授权用户进行访问,开发人员可以通过检查事件日志迅速发现并隔离此错误的原因。

有关 WCF 安全的更多信息,请参见 安全性概述。有关 WCF 编程的更多信息,请参见基本 WCF 编程

审核级别和行为

存在两个安全审核级别:

  • 服务授权级别,在该级别对调用方进行授权。
  • 消息级别,WCF 在该级别检查消息的有效性,并对调用方进行身份验证。

您可以检查这两个审核级别是成功还是失败,这称为“审核行为”**。

审核日志位置

一旦确定审核级别和行为,您(或管理员)就可指定审核日志的位置。有以下三种选择:Default、Application 和 Security。当指定 Default 时,实际日志取决于所使用的系统以及该系统是否支持写入 Security 日志。有关更多信息,请参见 本主题后面的“操作系统”部分。

写入 Security 日志要求具有 SeAuditPrivilege。默认情况下,只有“本地系统”和“网络服务”帐户具有此特权。管理 Security 日志功能 readdelete 要求具有 SeSecurityPrivilege。默认情况下,只有管理员具有此特权。

相比之下,通过身份验证的用户可以读写 Application 日志。Windows XP 默认情况下将审核事件写入 Application 日志。该日志还包含对所有通过身份验证的用户可见的个人信息。

禁止显示审核失败

审核过程中的另一个选择为是否禁止显示任何审核失败。默认情况下,审核失败不会影响应用程序。但是,如若需要,可将此选项设置为 false,这将导致引发异常。

审核编程

可以通过编程或通过配置来指定审核行为。

审核类

下表描述了用于对审核行为进行编程的类和属性。

说明

ServiceSecurityAuditBehavior

将设置审核选项作为服务行为启用。

AuditLogLocation

枚举值,用于指定要写入的日志。可能的值为 Default、Application 和 Security。选择 Default 时,操作系统将确定实际日志位置。请参见本主题后面的“Application 或 Security 事件日志选择”部分。

MessageAuthenticationAuditLevel

指定在消息级别审核哪些类型的消息身份验证事件。选择包括 NoneFailureSuccessSuccessOrFailure

ServiceAuthorizationAuditLevel

指定在服务级别审核哪些类型的服务授权事件。选择包括 NoneFailureSuccessSuccessOrFailure

SuppressAuditFailure

指定在审核失败时如何处理客户端请求。例如,当服务尝试写入 Security 日志但不具有 SeAuditPrivilege 时。默认值 true 指示忽略失败,因此将正常处理客户端请求。

有关如何设置应用程序以记录审核事件的示例,请参见如何:审核 Windows Communication Foundation 安全事件

配置

您还可以使用配置来指定审核行为,方法是将一个 serviceSecurityAudit element添加到 Behaviors element下。必须如下面的代码所示将该元素添加到 Behavior element下。

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

如果启用了审核但未指定 auditLogLocation,则对于支持写入 Security 日志的平台来说,默认日志名称为“Security”日志;否则为“Application”日志。只有 Windows Server 2003 和 Windows Vista 操作系统支持写入 Security 日志。有关更多信息,请参见 本主题后面的“操作系统”部分。

安全注意事项

如果恶意用户了解到审核功能处于启用状态,攻击者可能会发送将导致写入审核项的无效消息。如果以这种方式填充审核日志,则审核系统会出现故障。为了缓解此问题,请将 SuppressAuditFailure 属性设置为 true,并使用事件查看器的属性来控制审核行为。有关更多信息,请参见 关于在 Windows XP 中使用事件查看器查看和管理事件日志的 Microsoft 支持文章,该文章位于 https://go.microsoft.com/fwlink/?LinkId=89150(可能为英文网页)。

在 Windows XP 上写入 Application 日志的审核事件对任何通过身份验证的用户都是可见的。

选择 Application 或 Security 事件日志

下表提供的信息有助于您选择是记录到 Application 事件日志中还是记录到 Security 事件日志中。

操作系统

系统 Application 日志 Security 日志

Windows XP SP2 或更高版本

支持

不支持

Windows Server 2003 SP1 以及Windows Vista

Supported

线程上下文必须具有 SeAuditPrivilege

其他因素

除操作系统以外,下表描述了其他用于控制是否启用日志记录的设置。

因素 Application 日志 Security 日志

审核策略管理

不适用。

除配置以外,Security 日志还受到本地安全机构 (LSA) 策略的控制。还必须启用“审核对象访问”类别。

默认用户体验

所有通过身份验证的用户都可以写入 Application 日志,因此对于应用程序进程,不需要执行其他权限步骤。

应用程序进程(上下文)必须具有 SeAuditPrivilege

另请参见

任务

如何:审核 Windows Communication Foundation 安全事件

参考

ServiceSecurityAuditBehavior
AuditLogLocation

概念

安全性概述

其他资源

基本 WCF 编程
serviceSecurityAudit element
Behaviors element