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
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
eDefault
. 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 valorDefault
, 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 logSecurity
para plataformas que dão suporte à gravação no log de segurança. Caso contrário, ele fará a gravação no logApplication
. Somente o Windows Server 2003 e o Windows Vista dão suporte à gravação no log de segurança por padrão.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
Especifique se deseja suprimir ou expor falhas ao aplicativo em relação aos eventos de auditoria de log. Defina a propriedade SuppressAuditFailure como
true
oufalse
, 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.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
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>
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.