Compartilhar via


Como fazer auditoria de eventos de segurança do Windows Communication Foundation

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

Para auditar eventos de segurança no código

  1. Especifique o local do log de auditoria. Para fazer isso, defina a propriedade AuditLogLocation da classe ServiceSecurityAuditBehavior como um dos valores de enumeração AuditLogLocation, 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 enumeração AuditLogLocation tem três valores: Application, Security e 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 valor Default, o log real dependerá do sistema operacional no qual o aplicativo está sendo executado. Se a auditoria estiver habilitada e o local do log não for especificado, o padrão será o log Security para plataformas que dão suporte à gravação no log de segurança. Caso contrário, ele fará a gravação no log Application. Somente o Windows Server 2003 e o Windows Vista dão suporte à gravação no log de segurança por padrão.

  2. Configure os tipos de eventos para auditoria. Você pode auditar simultaneamente eventos no nível do serviço ou eventos de autorização no nível da mensagem. Para fazer isso, defina a propriedade ServiceAuthorizationAuditLevel ou a propriedade MessageAuthenticationAuditLevel como um dos valores de enumeração AuditLevel, 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 aos eventos de auditoria de log. Defina a propriedade SuppressAuditFailure como true ou false, 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 SuppressAuditFailure padrão é true, ou seja, a falha na auditoria não afeta o aplicativo. Caso contrário, uma exceção será gerada. Para qualquer auditoria bem-sucedida, um rastreamento detalhado é gravado. Para qualquer falha na auditoria, o rastreamento é gravado no nível de erro.

  4. Exclua o ServiceSecurityAuditBehavior existente da coleção de comportamentos encontrados na descrição de um ServiceHost. A coleção de comportamento é acessada pela propriedade Behaviors, que, por sua vez, é acessada por meio da propriedade Description. 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 <behavior> à seção <behaviors> 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ê precisa especificar o comportamento do 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 classe ServiceHost e adiciona uma nova ServiceSecurityAuditBehavior à 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

A definição da propriedade SuppressAuditFailure como true suprime qualquer falha na geração de auditorias de segurança (se ela for definida como false, uma exceção será gerada). 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: Desligar 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 Políticas Locais. Em seguida, clique em Opções de Segurança.

Se a propriedade AuditLogLocation estiver definida como Security e Acesso ao Objeto de Auditoria não estiver definido em Política 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.

Confira também