Server Logs in SQL Datenbank importieren

#security, #sql edit this page

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.

image

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

image

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:

image

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. 

 
image 

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

image

 

Viel Spaß beim importieren und auswerten, dn

- Vielen Dank an Robert van den Berg, der in seinem Blog das Thema bereits ähnlich behandelt hat -