Como auditar eventos de segurança do Windows Communication Foundation

O Windows Communication Foundation (WCF) permite que você registre eventos de segurança no log de eventos do Windows, que pode ser exibido usando o Visualizador de Eventos do Windows. Este tópico explica como configurar um aplicativo para que ele registre eventos de segurança. Para obter mais informações sobre auditoria WCF, consulte Auditoria.

Para auditar eventos de segurança no código

  1. Especifique o local do log de auditoria. Para fazer isso, defina a AuditLogLocationServiceSecurityAuditBehavior propriedade da classe para um dos valores de AuditLogLocation enumeração, conforme mostrado no código a seguir.

    // 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
    

    A AuditLogLocation enumeração tem três valores: Application, Security, ou Default. O valor especifica um dos logs visíveis no Visualizador de Eventos, o log de Segurança ou o log do Aplicativo. Se você usar o Default valor, o log real dependerá do sistema operacional em que o aplicativo está sendo executado. Se a auditoria estiver habilitada e o local do log não for especificado, o padrão será o Security log para plataformas que suportam a gravação no log de segurança, caso contrário, ele gravará no Application log. Por predefinição, apenas o Windows Server 2003 e o Windows Vista suportam a escrita no registo de segurança.

  2. Configure os tipos de eventos a serem auditados. Você pode auditar simultaneamente eventos de nível de serviço ou eventos de autorização de nível de mensagem. Para fazer isso, defina a ServiceAuthorizationAuditLevel propriedade ou a MessageAuthenticationAuditLevel propriedade para um dos valores de AuditLevel enumeração, conforme mostrado no código a seguir.

    // 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
    
  3. Especifique se deseja suprimir ou expor falhas ao aplicativo em relação a eventos de auditoria de log. Defina a SuppressAuditFailure propriedade como ou truefalse, conforme mostrado no código a seguir.

    // 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
    

    A propriedade padrão SuppressAuditFailure é true, para que a falha na auditoria não afete o aplicativo. Caso contrário, uma exceção é lançada. Para qualquer auditoria bem-sucedida, um rastreamento detalhado é escrito. Para qualquer falha na auditoria, o rastreamento é gravado no nível de erro.

  4. Exclua o existente ServiceSecurityAuditBehavior da coleção de comportamentos encontrados na descrição de um ServiceHostarquivo . A coleção de comportamento é acessada pela propriedade, que por sua vez é acessada Behaviors a partir da Description propriedade. Em seguida, adicione o novo ServiceSecurityAuditBehavior à mesma coleção, conforme mostrado no código a seguir.

    // 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)
    

Para configurar a auditoria na configuração

  1. Para configurar a auditoria na configuração, adicione um <elemento de comportamento> à< seção de comportamentos> do arquivo web.config. Em seguida, adicione um <elemento serviceSecurityAudit> e defina os vários atributos, conforme mostrado no exemplo a seguir.

    <behaviors>  
       <behavior name="myAuditBehavior">  
          <serviceSecurityAudit auditLogLocation="Application"  
                suppressAuditFailure="false"
                serviceAuthorizationAuditLevel="None"
                messageAuthenticationAuditLevel="SuccessOrFailure" />  
          </behavior>  
    </behaviors>  
    
  2. Você deve especificar o comportamento para o serviço, conforme mostrado no exemplo a seguir.

    <services>  
        <service type="WCS.Samples.Service.Echo"
        behaviorConfiguration=" myAuditBehavior">  
           <endpoint address=""  
                    binding="wsHttpBinding"  
                    bindingConfiguration="CertificateDefault"
                    contract="WCS.Samples.Service.IEcho" />  
        </service>  
    </services>  
    

Exemplo

O código a seguir cria uma instância da ServiceHost classe e adiciona uma nova ServiceSecurityAuditBehavior à sua coleção de comportamentos.

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

Segurança do .NET Framework

Definir a SuppressAuditFailure propriedade como true, suprime qualquer falha na geração de auditorias de segurança (se definido como false, uma exceção é lançada). No entanto, se você habilitar a seguinte propriedade Configuração de Segurança Local do Windows, uma falha na geração de eventos de auditoria fará com que o Windows seja desligado imediatamente:

Auditoria: Desligue o sistema imediatamente se não for possível registrar auditorias de segurança

Para definir a propriedade, abra a caixa de diálogo Configurações de Segurança Local. Em Configurações de Segurança, clique em Diretivas Locais. Em seguida, clique em Opções de Segurança.

Se a AuditLogLocation propriedade estiver definida como Security e o Acesso a Objetos de Auditoria não estiver definido na Diretiva de Segurança Local, os eventos de auditoria não serão gravados no log de Segurança. Observe que nenhuma falha é retornada, mas as entradas de auditoria não são gravadas no log de segurança.

Consulte também