Tipps & Tricks

Arbeiten mit Spreadsheets in Splunk (Excel, CSV-Dateien)

Erst kürzlich habe ich mich mit einem Kunden unterhalten, der mithilfe von Splunk eine Suchanfrage durchführen wollte. Ziel war es, Ereignisse zu identifizieren, die mit einer ihm zuvor bereitgestellten Microsoft Excel Kalkulationstabelle mit verschiedenen IP-Adressen übereinstimmen. Dabei setzte er für die Durchführung seiner Suchanfrage jedes einzelne Element aus der Tabelle in eine separate Suche ein. Ein sehr mühsamer und vor allem zeitraubender Aufwand.

In Splunk gibt es hierfür eine deutlich bessere Möglichkeit.

Als ehemaliger Sicherheitsexperte war ich in der Vergangenheit mit ähnlichen Situationen konfrontiert. Erörtern wir daher einige Punkte, wie ihr mithilfe von Splunk solche Vorhaben in Zukunft kinderleicht erledigen könnt.

Darum geht's in diesem Beitrag:

  1. Wie lässt sich eine Excel-Datei in Splunk importieren?
  2. Wie kann eine Tabelle mithilfe von Suchsprache bearbeitet werden?
  3. Wie lassen sich Logs mithilfe von Lookup finden, die mit Inhalten des Lookups übereinstimmen?

Grafische Benutzeroberfläche zum Bearbeiten und Importieren von Dateien

creating a lookupErstellen einer neuen Lookup-Datei in der Lookup-Editor-App 

Zunächst empfehle ich Euch, die Lookup-Editor-App einmal genauer anzusehen. Diese App ist kostenlos und macht es möglichh, neue Lookup-Dateien zu erstellen und diese auf einer ansprechenden Oberfläche zu bearbeiten. Wenn Ihr eine Kalkulationstabelle aus Excel importieren wollt, braucht Ihr diese lediglich als CSV-Datei zu speichern und anschließend mithilfe der App zu importieren.

Hierfür einfach den Lookup-Editor öffnen und auf die Schaltfläche „Neu" klicken. Anschließend oben rechts auf „Aus einer CSV-Datei importieren" klicken und die gewünschte Datei auswählen, wodurch die Inhalte der Lookup-Datei direkt in die Ansicht importiert werden. Per Klick auf „Speichern" steht Euch die Datei dauerhaft zur Verfügung.    

Bearbeiten von Lookup-Dateien in der Suche

Neben der mühsamen Übertragung der einzelnen Suchanfragen erwähnte der Kunde im Gespräch auch noch einen weiteren Punkt: Demnach musste er in der Lookup-Datei einige Dinge erst bereinigen und korrigieren, bevor diese weiterverwendet werden konnte. Hierfür nahm er die Änderungen manuell vor, obwohl die Suchoberfläche von Splunk optimale Möglichkeiten zur Anpassung von CSV-Dateien bietet.

Betrachten wir ein Beispiel, bei dem ich das E-Mail-Adressfeld in einer CSV-Datei in separate Felder für die Domänen- und die lokale Adresse aufteilen möchte (d. h., ich möchte aus „john.doe@gmail.com" „john.doe" und „gmail.com" erhalten). Zunächst zeige ich die Lookup-Datei in der Suche an, indem ich den inputlookup-Suchbefehl verwende (ausgehend von der Annahme, dass sie bereits mithilfe der Lookup-Editor-App importiert wurde):

| inputlookup email_addresses.csv append=t

Dies führt zu einer Ausgabe, die wie folgt aussieht:

email first_name last_name
jdoe@gmail.com James Doe
josephine_darakjy@darakjy.org Josephine Darakjy

Anschließend verwende ich den rex-Suchbefehl, um den lokalen und den Domänen-Anteil voneinander zu trennen:

| inputlookup email_addresses.csv append=t | rex field=email "(?<local_portion>.*)@(?<domain_portion>.*)"

Dieser Vorgang ergibt dann die folgende Ausgabe:

email first_name last_name local_portion domain_portion
jdoe@gmail.com James Doe jdoe gmail.com
josephine_darakjy@darakjy.org Josephine Darakjy josephine_darakjy darakjy.org

Da mir die Ausgabe jetzt gewünschter Form zur Verfügung steht, kann ich diese mithilfe von outputlookup in eine neue Lookup-Datei (email_addresses_2.csv) überschreiben:

| inputlookup email_addresses.csv append=t | rex field=email "(?.*)@(?.*)" | outputlookup email_addresses_2.csv

Darüber hinaus stehen Euch aber noch viele weitere Möglichkeiten offen, um Suchsprache zu verwenden oder  CSV-Files zu bearbeiten (bspw. Entfernen von Zeilen und Spalten, Umformatierung von Zellen, etc.). Lasst Eurer Kreativität also freien Lauf.

Suche mithilfe von Lookup-Dateien 

Nun könnt Ihr die Lookup-Datei für die Suche nach Ereignisse nutzen, die mit der angegebenen Lookup-Datei übereinstimmen. Um entsprechende Ereignisse herauszufiltern, verwende ich den join-Befehl:

| search * | join domain [| inputlookup append=t email_addresses.csv | eval domain=domain_portion]

Achtet dabei darauf, den Befehl „| search *” in der Form zu ändern, dass dieser auch tatsächlich zu den von Euch gesuchten Ereignissen passt. Denn schließlich ist eine „*”-Suche wohl ziemlich überflüssig.

Fazit

Auch wenn Ihr nichts Neues aus diesem Artikel mitnehmen solltet, eines steht jedenfalls fest: Splunk kann mit Lookups einige verrückte Dinge anstellen. Falls Ihr bei der Verwendung von Lookup-Dateien mit jeder Menge manuellem Aufwand konfrontiert seid, solltet Ihr definitiv nach einem besseren Weg suchen. Findet Ihr in diesem Zusammenhang keine adäquate Option, könnt Ihr Eure Fragen jederzeit auf answers.splunk.com veröffentlichen. Wir versuchen Euch dann gerne weiterzuhelfen.       

----------------------------------------------------
Vielen Dank!

Luke Murphey

*Dieser Artikel wurde aus dem Englischen übersetzt und editiert. Den Originalblogpost findet ihr hier.