使用 Windows Communication Foundation(WCF)创建的应用程序可以使用审核功能记录安全事件(成功、失败或两者兼有)。 事件将写入 Windows 系统事件日志,可以使用事件查看器进行检查。
审核为管理员提供了一种检测已经发生或正在发生的攻击的方式。 此外,审核有助于开发人员调试与安全相关的问题。 例如,如果授权或检查策略配置中的错误意外拒绝授权用户进行访问,开发人员可以通过检查事件日志迅速发现并隔离此错误的原因。
有关 WCF 安全性的详细信息,请参阅 安全概述。 有关 WCF 编程的详细信息,请参阅 基本 WCF 编程。
审核级别和行为
存在两个级别的安全审核:
服务授权级别,在该级别对调用方进行授权。
消息级别,其中 WCF 检查消息有效性并验证调用方。
可以检查两个审核级别,了解成功或失败,这称为 审核行为。
审核日志位置
确定审核级别和行为后,(或管理员)可以指定审核日志的位置。 这三个选项包括:默认、应用程序和安全性。 指定默认值时,实际日志取决于所使用的系统以及系统是否支持写入安全日志。 有关详细信息,请参阅本主题中稍后的“操作系统”部分。
写入 Security 日志要求具有 SeAuditPrivilege
。 默认情况下,只有本地系统和网络服务帐户具有此权限。 若要管理安全日志函数read
和delete
,需要SeSecurityPrivilege
。 默认情况下,只有管理员才具有此权限。
相比之下,经过身份验证的用户可以读取和写入应用程序日志。 默认情况下,Windows XP 会将审核事件写入应用程序日志。 该日志还可以包含对所有经过身份验证的用户可见的个人信息。
禁止显示审核失败
审核期间的另一个选项是是否取消任何审核失败。 默认情况下,审核失败不会影响应用程序。 但是,如若需要,可将此选项设置为 false
,这将导致引发异常。
编程审核
可以通过编程方式或通过配置指定审核行为。
审计课程
下表描述了用于对审核行为进行编程的类和属性。
班级 | DESCRIPTION |
---|---|
ServiceSecurityAuditBehavior | 将设置审核选项作为服务行为启用。 |
AuditLogLocation | 枚举值,用于指定要写入的日志。 可能的值为 Default、Application 和 Security。 当您选择“默认”时,操作系统将会确定实际的日志位置。 请参阅本主题后面的“应用程序或安全事件日志选择”部分。 |
MessageAuthenticationAuditLevel | 指定在消息级别审核哪些类型的消息身份验证事件。 选择是None ,Failure Success 和SuccessOrFailure 。 |
ServiceAuthorizationAuditLevel | 指定在服务级别审核哪些类型的服务授权事件。 选择是None ,Failure Success 和SuccessOrFailure 。 |
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
,则对于支持写入安全日志的平台,默认日志名称为“安全”日志;否则为“应用程序”日志。 只有 Windows Server 2003 和 Windows Vista作系统支持写入安全日志。 有关详细信息,请参阅本主题中稍后的“操作系统”部分。
安全注意事项
如果恶意用户知道已启用审核,攻击者可能会发送无效消息,导致写入审核条目。 如果以这种方式填充了审核日志,则审核系统将失败。 若要缓解此问题,请将 SuppressAuditFailure 属性 true
设置为事件查看器的属性,并使用事件查看器的属性来控制审核行为。
任何经过身份验证的用户都可以看到写入 Windows XP 上的应用程序日志的审核事件。
在应用程序和安全事件日志之间进行选择
下表提供了有助于选择是登录到应用程序还是安全事件日志的信息。
操作系统
系统 | 应用程序日志 | 安全日志 |
---|---|---|
Windows XP SP2 或更高版本 | 已支持 | 不支持 |
Windows Server 2003 SP1 和 Windows Vista | 已支持 | 线程上下文必须包含 SeAuditPrivilege |
其他因素
除了操作系统,下表还介绍了控制启用日志记录功能的其他设置。
因子 | 应用程序日志 | 安全日志 |
---|---|---|
审核策略管理 | 不適用。 | 除了配置,安全日志还由本地安全机构 (LSA) 策略控制。 还必须启用“审核对象访问”类别。 |
默认用户体验 | 所有经过身份验证的用户都可以写入应用程序日志,因此应用程序进程无需执行其他权限步骤。 | 应用程序进程(上下文)必须具有 SeAuditPrivilege 。 |