Als ich letztens die Überwachungsrichtlinien der Domäne überarbeitet habe, sind mir mehrfach fehlgeschlagene “Objektzugriffe” von Clients aufgefallen, die versuchten in Bereiche einzudringen, für die sie keine Berechtigung haben. Da das EventLog am Server jedoch kein dauerhafter Speicher für Log Files und für Auswertungen relativ umständlich ist, schreibe ich die Logs in eine SQL Datenbank. Anschließend werden die Daten so bereinigt, dass nur noch Ereignisse des Typs “Objektzugriff” enthalten sind.
Wie ich dabei vorgegangen bin erklärt dieser Beitrag
Schritt 1 – SQL Server installieren
Als erstes habe ich mir einen neuen Server auf meiner Hyper-V Umgebung bereitgestellt und auf diesen dann Microsoft SQL Server 2008 installiert.
Schritt 2 – Tabellen erstellen
Um meine EventLogs zu speichern habe ich 2 gleiche Tabelle erstellt. Eine für das temporäre Speichern der EventLogs (“tblTMPLog”) und eine für das dauerhafte Speichern (“tblSecurityObject”). Die temporäre Tabelle wird deshalb verwendet, da die Daten vor dem eigentlichen Speichern noch bereinigt werden.
Schritt 3 – EventLogs exportieren
Um die Event Logs vom Server zu exportieren hilft uns das Tool “DUMPEVT”. Es exportiert Logs vom Server und schreibt sie in ein File. Die Logs werden dabei vom Server nicht gelöscht. Auch merkt sich das Tool welche Logs vom Server schon exportiert wurden, sodass ein Mehrfach-Export nicht passieren kann.
DUMPEVT habe ich heruntergeladen, und unter C:\DUMPEVT entpackt.
Nun kann man sich schon von der Befehlszeile Logs vom Server holen
“C:\DUMPEVT\DUMPEVT.exe /logfile=sec /outfile=C:\DUMPEVT\evtlog.csv
/computer=localhost
Die Logs werden wie angegeben in die Datei evtlog.csv geschrieben
Es ist auch möglich DUMPEVT vom SQL Server aus zu steuern. Dafür muss als erstes das Feature “xp_cmdshell” aktiviert werden (sofern nicht nicht geschehen).
Mit den folgenden Code kann man sich dann die Logs holen
master..xp_cmdshell 'C:\DUMPEVT\DUMPEVT.exe /logfile=sec /outfile=C:\DUMPEVT\evtlog.csv
/computer=localhost'
Schritt 4 – Logs in die SQL Datenbank importieren
Um die Logs in SQL zu importieren wird zunächst die temporäre Tabelle gelöscht und dann über den BULK INSERT Befehl eingelesen.
DELETE FROM tblTMPLog
BULK INSERT tblTMPLog FROM 'c:\dumpevt\evtlog.csv'
WITH (FIELDTERMINATOR = ',')
Schritt 5 – Tabelle bereinigen
Wenn ich jetzt ein SELECT * FROM tblTMPLog ausführe, erhalte ich folgende Ausgabe:
Um die Daten zu bereinigen, entferne ich alle Ereignisse, die nicht die Kategorie “Objektzugriff”, ID “560” aufweisen. Im Field Data werden Sonderzeichen entfernt, die vom Export des Logs entstanden sind.
DELETE FROM tblTMPLog WHERE NOT Category = 'Objektzugriff'
DELETE FROM tblTMPLog WHERE NOT EventID = '560'
Update tblTMPLog Set Data = Replace(Data, ' ', '')
Update tblTMPLog Set Data = Replace(Data, '^', '')
Update tblTMPLog Set Data = Replace(Data, '`', '')
Schritt 6 – Temporäre Tabelle übertragen
Nachdem die Daten bereinigt wurden, kann die temporäre Tabelle in die fixe Tabelle übertragen werden. Wenn nötig, kann man sich an dieser Stelle die Daten noch ein wenig zurechtrücken.
Bsp: Nur die Information “Objektname” wird für das Field Data übertragen.
UPDATE tblSecurityObject
SET Data = SUBSTRING(Data,CHARINDEX('Objektname:', Data)+12,CHARINDEX('Handlekennung:', Data) - CHARINDEX('Objektname:', Data)-12)
WHERE CHARINDEX('Objektname:', Data) > 0
Schritt 7 – Auswertung
Nachdem die Daten sich auf dem SQL Server befinden, kann man diese entsprechend sauber auswerten und speichern.
Bsp: Programm in C# um die SQL Daten anzuzeigen
Viel Spaß beim importieren und auswerten, dn
- Vielen Dank an Robert van den Berg, der in seinem Blog das Thema bereits ähnlich behandelt hat -