审核安全事件

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

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

有关 WCF 安全的详细信息,请参阅安全性概述。 有关编程 WCF 的详细信息,请参阅基本 WCF 编程

审核级别和行为

存在两个安全审核级别:

  • 服务授权级别,在该级别对调用方进行授权。

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

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

审核日志位置

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

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

与此相反,经过身份验证的用户可以读取和写入应用程序日志。 默认情况下,Windows XP 将审核事件写入应用程序日志。 该日志还包含对所有通过身份验证的用户可见的个人信息。

禁止显示审核失败

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

审核编程

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

审核类

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

说明
ServiceSecurityAuditBehavior 将设置审核选项作为服务行为启用。
AuditLogLocation 枚举值,用于指定要写入的日志。 可能的值为 Default、Application 和 Security。 选择 Default 时,操作系统将确定实际日志位置。 请参见本主题后面的“Application 或 Security 事件日志选择”部分。
MessageAuthenticationAuditLevel 指定在消息级别审核哪些类型的消息身份验证事件。 选择包括 NoneFailureSuccessSuccessOrFailure
ServiceAuthorizationAuditLevel 指定在服务级别审核哪些类型的服务授权事件。 选择包括 NoneFailureSuccessSuccessOrFailure
SuppressAuditFailure 指定在审核失败时如何处理客户端请求。 例如,当服务尝试写入 Security 日志但不具有 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,则对于支持写入 Security 日志的平台来说,默认日志名称为“Security”日志;否则为“Application”日志。 只有 Windows Server 2003 和 Windows Vista 操作系统才支持写入安全日志。 有关详细信息,请参阅本主题后面的“操作系统”一节。

安全注意事项

如果恶意用户了解到审核功能处于启用状态,攻击者可能会发送将导致写入审核项的无效消息。 如果以这种方式填充审核日志,则审核系统会出现故障。 为了缓解此问题,请将 SuppressAuditFailure 属性设置为 true,然后使用事件查看器的属性来控制审核行为。

在 Windows XP 上,写入应用程序日志的审核事件对任何经过身份验证的用户都可见。

选择 Application 或 Security 事件日志

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

操作系统

系统 应用程序日志 安全日志
Windows XP SP2 或更高版本 支持 不支持
Windows Server 2003 SP1 和 Windows Vista 支持 线程上下文必须具有 SeAuditPrivilege

其他因素

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

因子 应用程序日志 安全日志
审核策略管理 不适用。 除配置以外,Security 日志还受到本地安全机构 (LSA) 策略的控制。 还必须启用“审核对象访问”类别。
默认用户体验 所有通过身份验证的用户都可以写入 Application 日志,因此对于应用程序进程,不需要执行其他权限步骤。 应用程序进程(上下文)必须具有 SeAuditPrivilege

另请参阅