Um Zugriffe auf Dateien und Ordner auf einem File-Server nachvollziehen zu können, kann auf den betreffenden Servern das Auditing aktiviert werden. In dieser Anleitung geht es im Speziellen darum Lösch-Aktivitäten aufzuzeichnen.
Auditing über Gruppenrichtlinie aktivieren
Im ersten Schritt muss das Auditing grundsätzlich aktiviert werden. Navigieren Sie dazu zum Richtlinien-Objekt Computerkonfiguration
→ Windows-Einstellungen
→ Sicherheitseinstellungen
→ Erweiterte Überwachungsrichtlinienkonfiguration
→ Systemüberwachungsrichtlinien
→ Objektzugriff
und aktivieren Sie die Richtlinienobjekte Dateisystem überwachen
und Handleänderung überwachen
, jeweils mit Erfolg und Fehler
:
System Access Control List definieren
Im zweiten Schritt wird eine SACL
(System Access Control List) definiert, welche die genauen Vorgänge definiert, die protokolliert werden sollen. Navigieren Sie dazu zu einem Ordner, von dem aus abwärts die Protokollierung stattfinden soll, zu den Eigenschaften
→ Register: Sicherheit
→ Erweitert
→ Register: Überwachung
→ Weiter
→ Hinzufügen
→ Prinzipal auswählen: Jeder
→ Typ: Alles
→ Anwenden auf: Diesen Ordner, Unterordner und Dateien
.
Klicken Sie auf den Link Erweiterte Berechtigungen anzeigen
und auf Alle löschen
und aktivieren Sie daraufhin jeweils die Checkbox bei Unterordner und Dateien löschen
und Löschen
Nach dem Verlassen und Speichern des Dialogs wird die SACL
auf die Objekte im ausgewählten Verzeichnis angewendet, was uU ein paar Minuten dauern kann.
Ereignisanzeige analysieren
In der Ereignisanzeige
→ Windows-Protokolle
→ Sicherheit
werden nun im Event 4663
Quelle: File System
die Zugriffe protokolliert.
Das Motiv ein Löschprotokoll zu führen liegt vermutlich darin, festzustellen wer und wann eine bestimmte Datei oder Verzeichnis gelöscht hat. Die GUI der Ereignisanzeige
ist leider nicht hilfreich beim Durchsuchen großer Protokolldateien. Man kann zwar eine Benutzerdefinierte Ansicht erstellen
und die Protokolle nach bestimmten Kriterien wie zB die Ereignis-ID
filtern oder/und nur einen bestimmten Zeitraum definieren, aus denen man die Protokolle haben möchte aber man kann keine Volltextsuche
zB nach Datei- oder Ordner-Namen durchführen.
Mit dem Powershell Cmdlet Get-EventLog
kann jedoch eine Volltextsuche in den Ereignissen durchgeführt werden. Da ggf. eine sehr große Datenmenge durchsucht werden muss, ist es hilfreich den Zeitraum von Interesse einzugrenzen. Im folgenden Beispiel wird nach dem Verzeichnis VIP-Folder
gesucht:
PS C:\Windows\system32> Get-EventLog -LogName Security -Message "*VIP-Folder*" -After 11.12.2022 -InstanceId 4663 | Select EventID, TimeGenerated, Message | fl
EventID : 4663 TimeGenerated : 12.12.2022 11:44:42 Message : Es wurde versucht, auf ein Objekt zuzugreifen. Antragsteller: Sicherheits-ID: S-1-5-21-873888264-1138833615-1381041810-1001 Kontoname: dude Kontodomäne: DOMAIN Anmelde-ID: 0x1460a6f0 Objekt: Objektserver: Security Objekttyp: File Objektname: E:\IMPORTANT\VIP-Folder Handle-ID: 0x7768 Ressourcenattribute: S:AI Prozessinformationen: Prozess-ID: 0x4 Prozessname: Zugriffsanforderungsinformationen: Zugriffe: %%1537 Zugriffsmaske: 0x10000
Die Zeile TimeGenerated
(2) zeigt das Datum und die Zeile Kontoname
(7) zeigt den Benutzer an, der das angegebene Objekt in der Zeile Objektname
(14) gelöscht hat. In der Zeile Zugriffe
(23) wird ein Schema-Wert %%1537
angezeigt, was übersetzt DELETE
bedeutet.
Geplante Aufgabe um Ereignisse in separate Logdatei zu speichern
In der Regel ist in der Windows Ereignisanzeige eine Umlaufprotokollierung
aktiviert. Das bedeutet, dass nach Erreichen einer bestimmten Größe der Protokolldatei ältere Einträge überschrieben werden. Dadurch ergibt sich nur ein sehr eingeschränktes Zeitfenster um eventuellen Ereignissen nachzugehen. Um die Ereignisse einen längeren Zeitraum verfügbar zu machen, kann zB jede Nacht ein Powershell-Skript
ausgeführt werden, welche die in Event ID 4663
protokollierten Ereignisse in eine Textdatei exportiert, wo sie quasi unbegrenzt aufbewahrt werden können.
Folgendes Skript erledigt diese Aufgabe nach folgenden Kriterien:
- Es wird für jeden Tag eine Textdatei erzeugt. (
Outfile
) - Es werden nur Ereignisse des aktuellen Tages protokolliert. (
$today
) - Der Pfad des gelöschten Elements wird protokolliert. (
$File
) - Datum und Uhrzeit der Löschung wird protokolliert. (
$Time
) - Der Benutzer der das Element gelöscht hat wird protokolliert. (
$User
)
Outfile = "C:\orgfiles\logs\$(Get-Date -f yyyyMMdd)_Deleted-file-history-log.txt" $today = get-date -DisplayHint date -UFormat %Y-%m-%d Get-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach { $event = [xml]$_.ToXml() if($event) { $Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S" $File = $event.Event.EventData.Data[6]."#text" $User = $event.Event.EventData.Data[1]."#text" $strLog = $Computer + " " + $File + " " + $Time + " " + $User $strLog | out-file $Outfile –append } }
Erstellen Sie eine geplante Aufgabe, die jede Nacht kurz vor Mitternacht ausgeführt wird.
Allgemeine Hinweise
Die oben konfigurierten Einstellung produzieren sehr viele Einträge in der Ereignisanzeige. Die Standardgröße von 1 GB kann auf stark frequentierten Servern schon recht knapp sein, um wenigstens die Ereignisse eines Tages zu erfassen. Eine Überprüfung des Setups welche Größe der Logdatei angemessen ist sollte in den ersten Tagen stattfinden. Es sollten wenigstens Daten von 24 Stunden erfasst werden, wenn Sie die Daten täglich in eine Textdatei exportieren wollen.
Die Einstellungen können in den Eigenschaften des betreffenden Protokolls überprüft bzw. vorgenommen werden: