Практическое руководство. Аудит событий безопасности Windows Communication Foundation
Windows Communication Foundation (WCF) позволяет регистрировать события безопасности в журнале событий Windows, которые можно просматривать с помощью средства "Просмотр событий" Windows. В этом разделе описано, как настроить приложение, чтобы события безопасности регистрировались в журнале. Дополнительные сведения WCF аудите см. в разделе Аудит событий безопасности.
Аудит событий безопасности в коде
Укажите расположение журнала аудита. Для этого присвойте свойству AuditLogLocation класса ServiceSecurityAuditBehavior одно из значений перечисления AuditLogLocation, как показано в следующем примере кода.
' Create a new auditing behavior and set the log location. Dim newAudit As New ServiceSecurityAuditBehavior() newAudit.AuditLogLocation = AuditLogLocation.Application
// Create a new auditing behavior and set the log location. ServiceSecurityAuditBehavior newAudit = new ServiceSecurityAuditBehavior(); newAudit.AuditLogLocation = AuditLogLocation.Application;
У перечисления AuditLogLocation имеется три значения: Application, Security и Default. Эти значения определяют один журналов, доступных в средстве "Просмотр событий" — журнал безопасности или журнал приложения. Если установлено значение Default, выбор журнала будет зависеть от параметров операционной системы, в которой выполняется приложение. Если аудит включен, а расположение журнала аудита не задано, по умолчанию для платформ, поддерживающих ведение журнала безопасности, используется значение Security; в противном случае используется значение Application. Только операционные системы Windows Server 2003 и Windows Vista по умолчанию поддерживают ведение журнала безопасности.
Настройте типы событий для аудита. Возможен одновременный аудит событий уровня службы и событий авторизации уровня сообщений. Для этого присвойте свойству ServiceAuthorizationAuditLevel или свойству MessageAuthenticationAuditLevel одно из значений перечисления AuditLevel, как показано в следующем примере кода.
newAudit.MessageAuthenticationAuditLevel = _ AuditLevel.SuccessOrFailure newAudit.ServiceAuthorizationAuditLevel = _ AuditLevel.SuccessOrFailure
// Create a new auditing behavior and set the log location. ServiceSecurityAuditBehavior newAudit = new ServiceSecurityAuditBehavior(); newAudit.AuditLogLocation = AuditLogLocation.Application; newAudit.MessageAuthenticationAuditLevel = AuditLevel.SuccessOrFailure; newAudit.ServiceAuthorizationAuditLevel = AuditLevel.SuccessOrFailure;
Укажите, нужно ли подавлять сбои приложения, связанные с событиями аудита. Задайте для свойства SuppressAuditFailure значение true или false, как показано в следующем примере кода.
newAudit.SuppressAuditFailure = False
// Create a new auditing behavior and set the log location. ServiceSecurityAuditBehavior newAudit = new ServiceSecurityAuditBehavior(); newAudit.AuditLogLocation = AuditLogLocation.Application; newAudit.MessageAuthenticationAuditLevel = AuditLevel.SuccessOrFailure; newAudit.ServiceAuthorizationAuditLevel = AuditLevel.SuccessOrFailure; newAudit.SuppressAuditFailure = false;
По умолчанию свойство SuppressAuditFailure имеет значение true, т. е. сбои аудита не отражаются на приложении. В противном случае создается исключение. В случае успешного аудита записывается подробная трассировка. В случае неудачного аудита трассировка записывается на уровне ошибки.
Удалите существующий объект ServiceSecurityAuditBehavior из коллекции поведений в описании ServiceHost. Коллекция поведений доступна по свойству Behaviors, которое в свою очередь доступно по свойству Description. После этого добавьте новое поведение ServiceSecurityAuditBehavior в ту же коллекцию, как показано в следующем примере кода.
' Remove the old behavior and add the new. serviceHost.Description.Behaviors.Remove(Of ServiceSecurityAuditBehavior) serviceHost.Description.Behaviors.Add(newAudit)
// Remove the old behavior and add the new. serviceHost.Description. Behaviors.Remove<ServiceSecurityAuditBehavior>(); serviceHost.Description.Behaviors.Add(newAudit);
Настройка аудита в файле конфигурации
Чтобы настроить аудит в файле конфигурации, добавьте элемент <behavior> в раздел Behaviors element файла web.config. После этого добавьте элемент serviceSecurityAudit и задайте атрибуты, как показано в следующем примере.
<behaviors> <behavior name="myAuditBehavior"> <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" serviceAuthorizationAuditLevel="None" messageAuthenticationAuditLevel="SuccessOrFailure" /> </behavior> </behaviors>
Необходимо задать поведение службы, как показано в следующем примере.
<services> <service type="WCS.Samples.Service.Echo" behaviorConfiguration=" myAuditBehavior"> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="CertificateDefault" contract="WCS.Samples.Service.IEcho" /> </service> </services>
Пример
В следующем примере кода показано, как создать экземпляр класса ServiceHost и добавить новый ServiceSecurityAuditBehavior в его коллекцию поведений.
Public Shared Sub Main()
' Get base address from appsettings in configuration.
Dim baseAddress As New Uri(ConfigurationManager.AppSettings("baseAddress"))
' Create a ServiceHost for the CalculatorService type
' and provide the base address.
Dim serviceHost As New ServiceHost(GetType(CalculatorService), baseAddress)
Try
' Create a new auditing behavior and set the log location.
Dim newAudit As New ServiceSecurityAuditBehavior()
newAudit.AuditLogLocation = AuditLogLocation.Application
newAudit.MessageAuthenticationAuditLevel = _
AuditLevel.SuccessOrFailure
newAudit.ServiceAuthorizationAuditLevel = _
AuditLevel.SuccessOrFailure
newAudit.SuppressAuditFailure = False
' Remove the old behavior and add the new.
serviceHost.Description.Behaviors.Remove(Of ServiceSecurityAuditBehavior)
serviceHost.Description.Behaviors.Add(newAudit)
' Open the ServiceHostBase to create listeners
' and start listening for messages.
serviceHost.Open()
' The service can now be accessed.
Console.WriteLine("The service is ready.")
Console.WriteLine("Press <ENTER> to terminate service.")
Console.WriteLine()
Console.ReadLine()
' Close the ServiceHostBase to shutdown the service.
serviceHost.Close()
Finally
End Try
End Sub
public static void Main()
{
// Get base address from appsettings in configuration.
Uri baseAddress = new Uri(ConfigurationManager.
AppSettings["baseAddress"]);
// Create a ServiceHost for the CalculatorService type
// and provide the base address.
using (ServiceHost serviceHost = new
ServiceHost(typeof(CalculatorService), baseAddress))
{
// Create a new auditing behavior and set the log location.
ServiceSecurityAuditBehavior newAudit =
new ServiceSecurityAuditBehavior();
newAudit.AuditLogLocation =
AuditLogLocation.Application;
newAudit.MessageAuthenticationAuditLevel =
AuditLevel.SuccessOrFailure;
newAudit.ServiceAuthorizationAuditLevel =
AuditLevel.SuccessOrFailure;
newAudit.SuppressAuditFailure = false;
// Remove the old behavior and add the new.
serviceHost.Description.
Behaviors.Remove<ServiceSecurityAuditBehavior>();
serviceHost.Description.Behaviors.Add(newAudit);
// Open the ServiceHostBase to create listeners
// and start listening for messages.
serviceHost.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
serviceHost.Close();
}
}
Безопасность
Если для свойства SuppressAuditFailure задать значение true, все неудачные попытки создания аудита безопасности будут подавляться (если задано значение false, будет создаваться исключение). Если же включить следующее свойство Windows Параметр локальной безопасности, сбой создания событий вызовет немедленное завершение работы Windows:
Аудит: немедленное отключение системы, если невозможно внести в журнал записи об аудите безопасности
Чтобы задать это свойство, откройте диалоговое окно Локальные параметры безопасности. В разделе Параметры безопасности выберите Локальные политики. Затем щелкните Параметры безопасности.
Если свойство AuditLogLocation имеет значение Security, а для параметра Аудит доступа к объектам не задано значение Локальная политика безопасности, события аудита не будут регистрироваться в журнале безопасности. Обратите внимание, что ошибка не возвращается, а события аудита не регистрируются в журнале безопасности.
См. также
Справочник
AuditLogLocation
ServiceSecurityAuditBehavior
AuditLogLocation