Практическое руководство. Аудит событий безопасности Windows Communication Foundation
Windows Communication Foundation (WCF) позволяет записывать события безопасности в журнал событий Windows, который можно просмотреть с помощью Windows Просмотр событий. В этом разделе описано, как настроить приложение, чтобы события безопасности регистрировались в журнале. Дополнительные сведения о аудите WCF см. в разделе "Аудит".
Аудит событий безопасности в коде
Укажите расположение журнала аудита. Для этого присвойте свойству AuditLogLocation класса ServiceSecurityAuditBehavior одно из значений перечисления AuditLogLocation, как показано в следующем примере кода.
// Create a new auditing behavior and set the log location. ServiceSecurityAuditBehavior newAudit = new ServiceSecurityAuditBehavior(); newAudit.AuditLogLocation = AuditLogLocation.Application;
' Create a new auditing behavior and set the log location. Dim newAudit As New ServiceSecurityAuditBehavior() newAudit.AuditLogLocation = AuditLogLocation.Application
Перечисление AuditLogLocation имеет три значения:
Application
,Security
илиDefault
. Эти значения определяют один журналов, доступных в средстве "Просмотр событий" - журнал безопасности или журнал приложения. Если установлено значениеDefault
, выбор журнала будет зависеть от параметров операционной системы, в которой выполняется приложение. Если аудит включен, а расположение журнала аудита не задано, по умолчанию для платформ, поддерживающих ведение журнала безопасности, используется значениеSecurity
; в противном случае используется значениеApplication
. Только Windows Server 2003 и Windows Vista поддерживают запись в журнал безопасности по умолчанию.Настройте типы событий для аудита. Возможен одновременный аудит событий уровня службы и событий авторизации уровня сообщений. Для этого присвойте свойству ServiceAuthorizationAuditLevel или свойству MessageAuthenticationAuditLevel одно из значений перечисления AuditLevel, как показано в следующем примере кода.
// 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.MessageAuthenticationAuditLevel = _ AuditLevel.SuccessOrFailure newAudit.ServiceAuthorizationAuditLevel = _ AuditLevel.SuccessOrFailure
Укажите, нужно ли подавлять сбои приложения, связанные с событиями аудита. Задайте для свойства SuppressAuditFailure значение
true
или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;
newAudit.SuppressAuditFailure = False
По умолчанию свойство
SuppressAuditFailure
имеет значениеtrue
, т. е. сбои аудита не отражаются на приложении. В противном случае создается исключение. В случае успешного аудита записывается подробная трассировка. В случае неудачного аудита трассировка записывается на уровне ошибки.Удалите существующий объект ServiceSecurityAuditBehavior из коллекции поведений в описании ServiceHost. Коллекция поведений доступна по свойству Behaviors, которое в свою очередь доступно по свойству Description. После этого добавьте новое поведение ServiceSecurityAuditBehavior в ту же коллекцию, как показано в следующем примере кода.
// Remove the old behavior and add the new. serviceHost.Description. Behaviors.Remove<ServiceSecurityAuditBehavior>(); serviceHost.Description.Behaviors.Add(newAudit);
' Remove the old behavior and add the new. serviceHost.Description.Behaviors.Remove(Of ServiceSecurityAuditBehavior) serviceHost.Description.Behaviors.Add(newAudit)
Настройка аудита в файле конфигурации
Чтобы настроить аудит в конфигурации, добавьте <элемент< поведения в раздел поведения>> файла 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 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();
}
}
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
Безопасность .NET Framework
Если для свойства SuppressAuditFailure задать значение true
, все неудачные попытки создания аудита безопасности будут подавляться (если задано значение false
, будет создаваться исключение). Однако если включить следующее свойство параметра локальной безопасности Windows, то сбой при возникновении событий аудита приведет к немедленному закрытию Windows:
Аудит: немедленное завершение работы системы, если не удается записать аудит безопасности
Чтобы задать свойство, откройте диалоговое окно "Локальный Параметры безопасности". В разделе "Безопасность Параметры" щелкните "Локальные политики". Затем нажмите кнопку "Параметры безопасности".
AuditLogLocation Если свойству Security присвоено значение и доступ к объектам аудита не задан в локальной политике безопасности, события аудита не записываются в журнал безопасности. Обратите внимание, что ошибка не возвращается, а события аудита не регистрируются в журнале безопасности.