Vorgehensweise: Überwachen von Windows Communication Foundation-Sicherheitsereignissen
Windows Communication Foundation (WCF) ermöglicht das Protokollieren von Sicherheitsereignissen im Ereignisprotokoll von Windows. Dieses kann mithilfe der Windows-Ereignisanzeige angezeigt werden. In diesem Thema wird erläutert, wie eine Anwendung so eingerichtet werden kann, dass Sicherheitsereignisse protokolliert werden. Weitere Informationen über über die Überwachung in WCF finden Sie unter Überwachen von Sicherheitsereignissen.
So überwachen Sie Sicherheitsereignisse im Code
Geben Sie den Speicherort des Überwachungsprotokolls an. Legen Sie hierzu die AuditLogLocation-Eigenschaft der ServiceSecurityAuditBehavior-Klasse auf einen der AuditLogLocation-Enumerationswerte fest, wie im folgenden Code gezeigt:
' Create a new auditing behavior and set the log location. Dim newAudit As New ServiceSecurityAuditBehavior() newAudit.AuditLogLocation = AuditLogLocation.Application
// Create a new auditing behavior and set the log location. ServiceSecurityAuditBehavior newAudit = new ServiceSecurityAuditBehavior(); newAudit.AuditLogLocation = AuditLogLocation.Application;
Die AuditLogLocation-Enumeration besitzt drei Werte: Application, Security oder Default. Mithilfe des Werts wird eines der in der Ereignisanzeige angezeigten Protokolle angegeben: entweder das Sicherheits- oder das Anwendungsprotokoll. Bei Verwendung des Default-Werts ist das tatsächliche Protokoll vom Betriebssystem abhängig, unter dem die Anwendung ausgeführt wird. 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. Standardmäßig wird das Schreiben in das Sicherheitsprotokoll nur von Windows Server 2003 und Windows Vista unterstützt.
Richten Sie die zu überwachenden Ereignistypen ein. Ereignisse auf Dienstebene sowie Autorisierungsereignisse auf Nachrichtenebene können gleichzeitig überwacht werden. Legen Sie hierzu die ServiceAuthorizationAuditLevel-Eigenschaft oder die MessageAuthenticationAuditLevel-Eigenschaft auf einen der AuditLevel-Enumerationswerte fest, wie im folgenden Code gezeigt:
newAudit.MessageAuthenticationAuditLevel = _ AuditLevel.SuccessOrFailure newAudit.ServiceAuthorizationAuditLevel = _ AuditLevel.SuccessOrFailure
// 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;
Geben Sie an, ob Fehler bei Protokollüberwachungsereignissen unterdrückt oder für die Anwendung verfügbar gemacht werden sollen. Legen Sie die SuppressAuditFailure-Eigenschaft entweder auf true oder auf false fest, wie im folgenden Code gezeigt:
newAudit.SuppressAuditFailure = 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;
Die standardmäßige SuppressAuditFailure-Eigenschaft ist true. Die Anwendung wird also durch einen Fehler bei der Überwachung nicht beeinträchtigt. Andernfalls wird eine Ausnahme ausgelöst. Für jede erfolgreiche Überwachung wird eine ausführliche Ablaufverfolgung geschrieben. Für jeden Überwachungsfehler wird eine Ablaufverfolgung auf Fehlerebene geschrieben.
Löschen Sie das vorhandene ServiceSecurityAuditBehavior aus der Verhaltensauflistung, die sich in der Beschreibung eines ServiceHost befindet. Der Zugriff auf die Verhaltensauflistung erfolgt über die Behaviors-Eigenschaft, auf die wiederum über die Description-Eigenschaft zugegriffen wird. Fügen Sie der gleichen Auflistung anschließend das neue ServiceSecurityAuditBehavior hinzu, wie im folgenden Code gezeigt:
' Remove the old behavior and add the new. serviceHost.Description.Behaviors.Remove(Of ServiceSecurityAuditBehavior) serviceHost.Description.Behaviors.Add(newAudit)
// Remove the old behavior and add the new. serviceHost.Description. Behaviors.Remove<ServiceSecurityAuditBehavior>(); serviceHost.Description.Behaviors.Add(newAudit);
So richten Sie die Überwachung in der Konfiguration ein
Fügen Sie zum Einrichten der Überwachung in der Konfiguration dem Behaviors element-Abschnitt der web.config-Datei ein <behavior>-Element hinzu. Fügen Sie anschließend ein serviceSecurityAudit-Element hinzu, und legen Sie die verschiedenen Attribute fest, wie im folgenden Beispiel gezeigt:
<behaviors> <behavior name="myAuditBehavior"> <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" serviceAuthorizationAuditLevel="None" messageAuthenticationAuditLevel="SuccessOrFailure" /> </behavior> </behaviors>
Geben Sie das Verhalten für den Dienst an, wie im folgenden Beispiel gezeigt:
<services> <service type="WCS.Samples.Service.Echo" behaviorConfiguration=" myAuditBehavior"> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="CertificateDefault" contract="WCS.Samples.Service.IEcho" /> </service> </services>
Beispiel
Mithilfe des folgenden Codes wird eine Instanz der ServiceHost-Klasse erstellt, und der Verhaltensauflistung wird ein neues ServiceSecurityAuditBehavior hinzugefügt.
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
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();
}
}
Sicherheit
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). Wird jedoch für Lokale Sicherheitseinstellung die folgende Windows-Eigenschaft aktiviert, führt ein Fehler beim Generieren von Überwachungsereignissen dazu, dass Windows umgehend heruntergefahren wird:
Überwachung: System sofort herunterfahren, wenn Sicherheitsüberprüfungen nicht protokolliert werden können
Öffnen Sie zum Festlegen der Eigenschaft das Dialogfeld Lokale Sicherheitseinstellungen. Klicken Sie unter Sicherheitseinstellungen auf Lokale Richtlinien. Klicken Sie anschließend auf Sicherheitsoptionen.
Wenn die AuditLogLocation-Eigenschaft auf Security festgelegt und für Lokale Sicherheitsrichtlinie nicht die Einstellung Objektzugriffsversuche überwachen aktiviert ist, werden Überwachungsereignisse nicht in das Sicherheitsprotokoll geschrieben. Es wird zwar kein Fehler zurückgegeben, doch die Überwachungseinträge werden nicht in das Sicherheitsprotokoll geschrieben.
Siehe auch
Verweis
AuditLogLocation
ServiceSecurityAuditBehavior
AuditLogLocation