Vorgehensweise: Überwachen von Windows Communication Foundation-SicherheitsereignissenHow to: Audit Windows Communication Foundation Security Events

Windows Communication Foundation (WCF) können Sie Sicherheitsereignisse in das Windows-Ereignisprotokoll protokollieren, die mit der Windows-Ereignisanzeige angezeigt werden kann.Windows Communication Foundation (WCF) allows you to log security events to the Windows event log, which can be viewed using the Windows Event Viewer. In diesem Thema wird erläutert, wie eine Anwendung so eingerichtet werden kann, dass Sicherheitsereignisse protokolliert werden.This topic explains how to set up an application so that it logs security events. Weitere Informationen zur Überwachung von WCF finden Sie unter Überwachung.For more information about WCF auditing, see Auditing.

So überwachen Sie Sicherheitsereignisse im CodeTo audit security events in code

  1. Geben Sie den Speicherort des Überwachungsprotokolls an.Specify the audit log location. Legen Sie hierzu die AuditLogLocation-Eigenschaft der ServiceSecurityAuditBehavior-Klasse auf einen der AuditLogLocation-Enumerationswerte fest, wie im folgenden Code gezeigt:To do this, set the AuditLogLocation property of the ServiceSecurityAuditBehavior class to one of the AuditLogLocation enumeration values, as shown in the following code.

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

    Die AuditLogLocation -Enumeration besitzt drei Werte: Application, Security, oder Default.The AuditLogLocation enumeration has three values: Application, Security, or Default. Mithilfe des Werts wird eines der in der Ereignisanzeige angezeigten Protokolle angegeben: entweder das Sicherheits- oder das Anwendungsprotokoll.The value specifies one of the logs visible in the Event Viewer, either the Security log or the Application log. Bei Verwendung des Default-Werts ist das tatsächliche Protokoll vom Betriebssystem abhängig, unter dem die Anwendung ausgeführt wird.If you use the Default value, the actual log will depend on the operating system the application is running on. Ist bei aktivierter Überwachung kein Protokollspeicherort angegeben, wird für Plattformen, von denen das Schreiben in das Sicherheitsprotokoll unterstützt wird, standardmäßig das Security-Protokoll verwendet. Andernfalls wird das Application-Protokoll verwendet.If auditing is enabled and the log location is not specified, the default is the Security log for platforms that support writing to the Security log; otherwise, it will write to the Application log. Standardmäßig wird das Schreiben in das Sicherheitsprotokoll nur von Windows Server 2003Windows Server 2003 und Windows VistaWindows Vista unterstützt.Only Windows Server 2003Windows Server 2003 and Windows VistaWindows Vista support writing to the Security log by default.

  2. Richten Sie die zu überwachenden Ereignistypen ein.Set up the types of events to audit. Ereignisse auf Dienstebene sowie Autorisierungsereignisse auf Nachrichtenebene können gleichzeitig überwacht werden.You can simultaneously audit service-level events or message-level authorization events. Legen Sie hierzu die ServiceAuthorizationAuditLevel-Eigenschaft oder die MessageAuthenticationAuditLevel-Eigenschaft auf einen der AuditLevel-Enumerationswerte fest, wie im folgenden Code gezeigt:To do this, set the ServiceAuthorizationAuditLevel property or the MessageAuthenticationAuditLevel property to one of the AuditLevel enumeration values, as shown in the following code.

    // 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. Geben Sie an, ob Fehler bei Protokollüberwachungsereignissen unterdrückt oder für die Anwendung verfügbar gemacht werden sollen.Specify whether to suppress or expose failures to the application regarding log audit events. Legen Sie die SuppressAuditFailure-Eigenschaft entweder auf true oder auf false fest, wie im folgenden Code gezeigt:Set the SuppressAuditFailure property to either true or false, as shown in the following code.

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

    Die standardmäßige SuppressAuditFailure-Eigenschaft ist true. Die Anwendung wird also durch einen Fehler bei der Überwachung nicht beeinträchtigt.The default SuppressAuditFailure property is true, so that the failure to audit does not affect the application. Andernfalls wird eine Ausnahme ausgelöst.Otherwise, an exception is thrown. Für jede erfolgreiche Überwachung wird eine ausführliche Ablaufverfolgung geschrieben.For any successful audit, a verbose trace is written. Für jeden Überwachungsfehler wird eine Ablaufverfolgung auf Fehlerebene geschrieben.For any failure to audit, the trace is written at the Error level.

  4. Löschen Sie das vorhandene ServiceSecurityAuditBehavior aus der Verhaltensauflistung, die sich in der Beschreibung eines ServiceHost befindet.Delete the existing ServiceSecurityAuditBehavior from the collection of behaviors found in the description of a ServiceHost. Der Zugriff auf die Verhaltensauflistung erfolgt über die Behaviors-Eigenschaft, auf die wiederum über die Description-Eigenschaft zugegriffen wird.The behavior collection is accessed by the Behaviors property, which in turn is accessed from the Description property. Fügen Sie der gleichen Auflistung anschließend das neue ServiceSecurityAuditBehavior hinzu, wie im folgenden Code gezeigt:Then add the new ServiceSecurityAuditBehavior to the same collection, as shown in the following code.

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

So richten Sie die Überwachung in der Konfiguration einTo set up auditing in configuration

  1. Fügen Sie zum Einrichten der Überwachung in der Konfiguration ein <Verhalten > Element der <Verhalten > Abschnitt der Datei "Web.config".To set up auditing in configuration, add a <behavior> element to the <behaviors> section of the web.config file. Fügen Sie dann eine <ServiceSecurityAudit > Element, und legen Sie die verschiedenen Attribute, wie im folgenden Beispiel gezeigt.Then add a <serviceSecurityAudit> element and set the various attributes, as shown in the following example.

    <behaviors>  
       <behavior name="myAuditBehavior">  
          <serviceSecurityAudit auditLogLocation="Application"  
                suppressAuditFailure="false"   
                serviceAuthorizationAuditLevel="None"   
                messageAuthenticationAuditLevel="SuccessOrFailure" />  
          </behavior>  
    </behaviors>  
    
  2. Geben Sie das Verhalten für den Dienst an, wie im folgenden Beispiel gezeigt:You must specify the behavior for the service, as shown in the following example.

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

BeispielExample

Mithilfe des folgenden Codes wird eine Instanz der ServiceHost-Klasse erstellt, und der Verhaltensauflistung wird ein neues ServiceSecurityAuditBehavior hinzugefügt.The following code creates an instance of the ServiceHost class and adds a new ServiceSecurityAuditBehavior to its collection of behaviors.

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-Sicherheit.NET Framework Security

Durch Festlegen der SuppressAuditFailure-Eigenschaft auf true werden Fehler beim Generieren von Sicherheitsüberwachungen unterdrückt. (Bei Verwendung von false wird eine Ausnahme ausgelöst).Setting the SuppressAuditFailure property to true, suppresses any failure to generate security audits (if set to false, an exception is thrown). Jedoch, wenn Sie die folgenden Windows aktivieren lokale Sicherheitseinstellung-Eigenschaft, ein Fehler beim Generieren von Überwachungsereignissen führt dazu, dass Windows umgehend heruntergefahren:However, if you enable the following Windows Local Security Settingproperty, a failure to generate audit events will cause Windows to shut down immediately:

Überwachung: Herunterfahren der System sofort, wenn sicherheitsüberprüfungen Anmeldung ist nicht möglichAudit: Shut down system immediately if unable to log security audits

Öffnen Sie zum Festlegen der Eigenschaft der lokale Sicherheitseinstellungen (Dialogfeld).To set the property, open the Local Security Settings dialog box. Klicken Sie unter Sicherheitseinstellungen, klicken Sie auf lokale Richtlinien.Under Security Settings, click Local Policies. Klicken Sie dann auf Sicherheitsoptionen.Then click Security Options.

Wenn die AuditLogLocation -Eigenschaftensatz auf Security und Objektzugriffsversuche nicht festgelegt ist, der lokale Sicherheitsrichtlinie, Überwachungsereignisse werden nicht in das Sicherheitsprotokoll geschrieben.If the AuditLogLocation property is set to Security and Audit Object Access is not set in the Local Security Policy, audit events will not be written to the Security log. Es wird zwar kein Fehler zurückgegeben, doch die Überwachungseinträge werden nicht in das Sicherheitsprotokoll geschrieben.Note that no failure is returned, but audit entries are not written to the Security log.

Siehe auchSee Also

AuditLogLocation
ServiceSecurityAuditBehavior
AuditLogLocation
ÜberwachungAuditing