Logfiles mit Grok interpretieren

Logfiles mit Grok interpretieren

Rocco Gagliardi
von Rocco Gagliardi
Lesezeit: 6 Minuten

Es gibt BSM Audit Logs, iptable Logs, Apache, smbd_audit Logs und andere. Wie können wir diese normalisieren und dann gewünschte Inromationen extrahieren und korrelieren? Ein kleines bisschen Software hilft uns dabei ungemein: Grok.

Das Problem

Eine Logfile zu interpretieren bedeutet immer, dass wir Information extrahieren. Daher ignorieren wir alles andere.

Für Daten, die via syslog transferiert wurden, hat das Feld data kein vordefiniertes Format und kann daher Daten jeden Typs in einer beliebigen Sortierung enthalten.

Die Anzahl der existierenden Logformate liegt bei etwa 800. Jede Applikation loggt ihre eigenen Informationen in eigenen Formaten und manchmal benutzt eine Anwendung sogar mehrere Logformate für verschiedene Funktionen und Ereignisse.

Pure Regular Expressions

Mit Regular Expressions lassen sich alle möglichen Char-Sequenzen parsen. Ein Resultat damit zu kriegen ist nur eine Frage der Übung und der Zeit (um das ganze zu testen), aber das Prozedere kann schnell zum Alptraum werden.

Zum Beispiel beim parsen einer ganz gewöhnlichen IPv4-Adresse: 192.168.1.2

Auf den ersten Blick können wir ein einfaches regexp schreiben:

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b;

Grept diese regexp alle IP-Adressen? Ja, aber sie grept auch eine Menge Zahlen, die keine IPs sind: Zahlen über 255.255.255.255.

Wir können den Gedanken aber weiterziehen und eine komplexere regexp schreiben, die nur echte IPs ausliest. Im spezifischen sollte die regexp die folgenden validen Sequenzen auslesen:

Eigentlich ganz simpel. In Codeform sieht das aber so aus:

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

Und das ist nur für eine IP-Adresse.

Der Unterhalt und das Debugging eines solchen Monsters einer Regular Expression kann dazu führen, dass wir eine Menge Zeit verschwenden.

Die Nutzung von Grok

Grok ist ein nettes, kleines Tool das die Handhabung von Regular Expressions vereinfacht und dabei hilft, unstrukturierte Log- und Eventdaten in strukturierte Daten zu verwandeln. User können beliebig viele komplexe Muster aus beliebigen Inputs (Prozessen und Dateien) kombinieren und so massgeschneiderte Resultate erhalten.

Wir können Grok als eine Art Vorlagen-Generator mit einer Menge vodefinierten und getesteten Regular Expression ansehen. Dieser Generator ist einfach zugänglich mittels eines Alias. In der Grok regexp Datenbank finden wir jede Menge dieser Regular Expressions, mit denen wir die meisten unserer Logs formattieren können.

Mit Grok können wir gültige IP Adressen mit dem kurzen Befehl %{IP}; auslesen. Grok sucht in der eigenen Bibliothek nach einem IP Alias und übersetzt die folgende Monster-regexp.

(?<![0-9])(??:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])

Als Beispiel soll die folgende Log-Line dienen:

Nov  1 21:14:23 scorn kernel: pid 84558 (expect), uid 30206: exited on signal 3

Nun wollen wir timestamp, pid, program-name, uid und exit-signal auslesen. Wir wollen exited on signal ignorieren, genau wie auch alle anderen Zeichen, die Menschen helfen, wie pidund uid.

In Grok sieht das dann so aus:

%{SYSLOGBASE} pid %{NUMBERid} \(%{WORDrogram}\), uid %{NUMBER:uid}:exited on signal %{NUMBER:signal}

Simpel, vom Menschen einfach lesbar, effizient.

Fazit

Ich bin dank Logstash auf Grok gestossen und es war so etwas wie Liebe auf den ersten Blick. Das Schreiben von Filtern ist so einfach wie das tippen von normalem Text. Debugging war noch nie so einfahc. Es ist möglich, Grok in mehreren Sprachen und Tools zu verwenden. Und: Grok kann ganz einfach zu einem generischen Parsing-Tool ausgebaut werden.

Über den Autor

Rocco Gagliardi

Rocco Gagliardi ist seit den 1980er Jahren im Bereich der Informationstechnologie tätig. In den 1990er Jahren hat er sich ganz der Informationssicherheit verschrieben. Die Schwerpunkte seiner Arbeit liegen im Bereich Security Frameworks, Routing, Firewalling und Log Management.

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

×
Übergang zu OpenSearch

Übergang zu OpenSearch

Rocco Gagliardi

Graylog v5

Graylog v5

Rocco Gagliardi

auditd

auditd

Rocco Gagliardi

Security Frameworks

Security Frameworks

Rocco Gagliardi

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv