Verwenden von stats, eventstats & streamstats für die Bedrohungssuche (2024)

Wenn ihr schon einmal Suchen in Splunk durchgeführt habt, dann habt ihr ziemlich sicher mindestens eine Suche mit dem Befehl stats durchgeführt. Lasst es mich kurz machen: stats ist ein entscheidender Befehl beim Threat Hunting, und es wäre eine Schande, in dieser Blog-Reihe nicht darüber zu sprechen.

Verwenden von stats, eventstats & streamstats für die Bedrohungssuche (1)

Wenn man den Fokus auf Datensets von Interesse legt, kann man mit dem Befehl stats ganz leicht Berechnungen mit jedem der zurückgegebenen Feldwerte durchführen, um zusätzliche Informationen zu erhalten. Und wenn ich stats sage, spreche ich eigentlich von drei Befehlen:

  • stats
  • eventstats
  • streamstats

Wie viele Splunk-Befehle sind diese drei Befehle transformativ, d.h. sie verwenden eine Ergebnismenge und führen Funktionen mit den Daten durch.

Am besten sehen wir uns stats näher an.

(Im Rahmen unserer Reihe „Threat Hunting mit Splunk“ wurde dieser Artikel ursprünglich von John Stoner geschrieben. Wir haben ihn vor kurzem überarbeitet, um seinen Nutzen zu maximieren.)

Verwendung des Befehls stats für die Bedrohungssuche

Der Befehl stats ist ein Grundbefehl von Splunk. Er führt beliebig viele statistische Funktionen für ein Feld durch, bei denen es sich um einfache count- oder average-Funktionen oder komplexere Funktionen wie die Berechnung eines Perzentils oder der Standardabweichung handeln kann.

Wenn man im Befehl stats das Schlüsselwort by angibt, kann man die Statistikberechnung anhand eines oder mehrerer angegebener Felder gruppieren.

Es folgt ein gutes Beispiel für die Verwendung des Befehls stats beim Threat Hunting. Ich stelle hier jetzt die Hypothese auf, dass die source/destination-Wertpaare mit der höchsten Zahl von Verbindungen, die in einem bestimmten Netzwerkbereich beginnen, genauer untersucht werden sollten.

sourcetype=fgt_traffic src=192.168.225.* NOT (dest=192.168.* OR dest=10.* OR dest=8.8.4.4 OR dest=8.8.8.8 OR dest=224.*)| stats count by src dest| where count > 1| sort – count

Verwenden von stats, eventstats & streamstats für die Bedrohungssuche (2)

Durchsucht werden die Firewall-Daten, die aus dem Netzwerkbereich 192.168.225.0/24 stammen und zu Zielen führen, die nicht intern oder DNS sind. Der Befehl stats ermittelt die Anzahl (count) gruppiert nach Quell- und Zieladresse (src und dest). Sobald die Anzahl ermittelt wurde, kann die Ausgabe bearbeitet werden, um einzelne Events herauszufiltern, und kann anschließend vom höchsten zum kleinsten Wert sortiert werden.

Der Befehl stats kann auch zum Summieren von Werten verwendet werden. Man könnte die Hypothese aufstellen, dass man den Firewall-Traffic untersucht, um zu verstehen, wer am meisten mit externen Hosts kommuniziert, und zwar nicht im Hinblick auf die Zahl der Verbindungen, sondern im Hinblick auf die Anzahl der Bytes. Mit dem Befehl stats können mehrere Felder berechnet, umbenannt und gruppiert werden.

sourcetype=fgt_traffic src=192.168.225.* NOT (dest=192.168.* OR dest=10.* OR dest=8.8.4.4 OR dest=8.8.8.8 OR dest=224.*) | stats sum(bytes_in) as total_bytes_in sum(bytes_out) as total_bytes_out by src dest | table src dest total_bytes_in total_bytes_out | sort – total_bytes_out

Verwenden von stats, eventstats & streamstats für die Bedrohungssuche (3)

In diesem Beispiel werden dieselben Datensets verwendet, doch dieses Mal wird der Befehl stats eingesetzt, um die Felder bytes_in und bytes_out zu summieren. Wenn ich die Sortierreihenfolge ändere, kann ich problemlos zwischen verschiedenen Werten wechseln, um Folgendes zu untersuchen:

  • Die höchste Zahl eingehender Bytes
  • Die wenig kommunizierenden Quellen mit der geringsten Byte-Zahl (auch hierzu ließe sich wieder eine eigene Hypothese aufstellen)

Kurze Randnotiz hierzu: Angesichts der obigen Ergebnisse könnte ich mich fragen, warum ich viele Hosts aus demselben Subnetz sehe, die alle mit derselben Ziel-IP kommunizieren, und dabei identische Byte-Zahlen aufweisen, sowohl bei der eingehenden als auch der ausgehenden Kommunikation. Der Punkt ist, dass es zahlreiche Möglichkeiten gibt, stats zu verwenden.

Der Befehl eventstats

Nachdem wir diese Grundlagen jetzt geklärt haben, wenden wir diese Konzepte nun auf eventstats an. Ich betrachte eventstats als eine Methode zur Berechnung von „Gesamtsummen“ innerhalb einer Ergebnismenge, die dann zum Manipulieren dieser Summen verwendet werden können, um das Datenset weiter zu untersuchen.

Im Rahmen einer weiteren Hypothese möchte ich nun die Systeme mit den größten, aus dem Netzwerk ausgehenden Byte-Zahlen identifizieren und untersuchen. Für eine effektive Bedrohungssuche sollte ich zwei wichtige Dinge kennen:

  • Alle externen Hosts, mit denen sich mein System verbindet
  • Die an jeden Host ausgehende Datenmenge

Wir verwenden dieselben grundlegenden Suchkriterien wie bei der früheren Suche. Diese erweitern wir etwas, um sicherzustellen, dass alle bytes_out nicht Null sind, damit die Ergebnismenge weniger irrelevante Ergebnisse enthält. Eventstats berechnet die Summe der bytes_out, benennt sie in total_bytes_out um und gruppiert sie nach Quell-IP-Adresse. Diese Ausgabe kann dann als Feldwert behandelt und mit zusätzlichen Splunk-Befehlen ausgegeben werden.

sourcetype=fgt_traffic src=192.168.225.* NOT (dest=192.168.* OR dest=10.* OR dest=8.8.4.4 OR dest=8.8.8.8 OR dest=224.*) bytes_out>0| eventstats sum(bytes_out) AS total_bytes_out by src| table src dest bytes_out total_bytes_out| sort src – bytes_out

Verwenden von stats, eventstats & streamstats für die Bedrohungssuche (4)

Die rot markierten Zeilen zeigen die Quell-IP-Adressen mit summierten bytes_out-Werten und der zugehörigen total_bytes_out-Gesamtsumme

Zur Prüfung einer weiteren Hypothese könnte ich eventstats jetzt verwenden, um nach Systemen zu suchen, bei denen mehr als 60% des Daten-Traffics an ein einziges Ziel gehen. Wenn ein System fast ausschließlich mit einem einzigen externen Host kommuniziert, könnte dies bedenklich sein oder zumindest Anlass zu weiteren Untersuchungen geben.

Dazu könnten wir zum vorherigen Beispiel zurückkehren, bei dem wir große bytes_out-Werte nach Quell- und Ziel-IP-Adressen gesucht haben, und dieses etwas verändern: Wir verwenden eventstats, um den bytes_out-Wert nach Quelle als Prozentwert der Byte-Gesamtmenge zu untersuchen, die an ein bestimmtes Ziel geht.

sourcetype=fgt_traffic src=192.168.225.* NOT (dest=192.168.* OR dest=10.* OR dest=8.8.4.4 OR dest=8.8.8.8 OR dest=224.*)| eventstats sum(bytes_out) AS total_bytes_out by src| eval percent_bytes_out = bytes_out/total_bytes_out * 100| table src dest bytes_in bytes_out total_bytes_out percent_bytes_out| where percent_bytes_out > 60| sort - percent_bytes_out dest

Verwenden von stats, eventstats & streamstats für die Bedrohungssuche (5)

Auf der Basis der vorherigen Suchkriterien berechne ich eventstats, indem ich die nach Quell-IP-Adresse gruppierten bytes_out-Werte summiere, um die „Gesamtsumme“ zu erhalten.

Nun wandle ich diese Daten mit Hilfe des Befehls stats um, wie ich es schon zuvor getan habe, und gruppiere sie nach Quell- und Ziel-IP. An diesem Punkt habe ich als Ergebnisse die Summen von bytes_in und bytes_out, die total_bytes_out und die Quell- und Ziel-IP.

Das ist schon recht gut! Ich muss aber noch nach den Ausreißern filtern, die ich zur Klärung meiner Hypothese benötige.

Mit dem Befehl eval kann ich anhand von bytes_out und total_bytes_out einen Prozentsatz des Gesamt-Traffics berechnen. An diesem Punkt formatiere ich die Daten mit dem Befehl table, filtere dann nach Prozentwerten größer 60 und sortiere die Ausgabe.

Als Ergebnis erhalte ich nun eine Gruppe von Quell-IP-Adressen, die ich in dem Wissen weiter untersuchen kann, dass ein großer Prozentsatz der Daten an ein einzelnes Ziel geht. Und tatsächlich bringt meine Ausgabe eine interessante Erkenntnis: Die ersten 14 Quelladressen in meiner Tabelle kommunizieren alle mit derselben externen IP-Adresse.

Das allein könnte eine weitere Untersuchung wert sein. Es könnte sich aber auch um ein Ziel handeln, das mit einem Lookup auf die Whitelist gesetzt werden sollte. Dieser Ansatz ermöglicht mir jedoch, meine Suche weiter zu verfeinern und meine Hypothese zu bestärken oder zu widerlegen.

Der Befehl streamstats

Weiter geht's mit streamstats. Der Befehl streamstats basiert auf den Grundlagen von stats, bietet jedoch eine Möglichkeit, Statistiken beim Auftreten eines Events zu erstellen. Dies kann sehr nützlich sein, um z.B. laufende Summen zu berechnen oder Durchschnittswerte zu ermitteln, während Daten zur Ergebnismenge hinzukommen.

Anhand der Ergebnisse unserer früheren Suche könnte ich nun die Hypothese aufstellen, dass die von meinem Host ausgehende Kommunikation in Schüben erfolgt. Dies könnte ich dann mithilfe von streamstats visualisieren, um diese Hypothese zu prüfen.

sourcetype=fgt_traffic src=192.168.225.* NOT (dest=192.168.* OR dest=10.* OR dest=8.8.4.4 OR dest=8.8.8.8 OR dest=224.*) bytes_out>0| sort date| streamstats sum(bytes_out) as total_bytes_out by src| table date bytes_out total_bytes_out

Verwenden von stats, eventstats & streamstats für die Bedrohungssuche (6)

Das vorherige Beispiel zeigt, dass 77% des Daten-Traffics der Quell-IP-Adresse 192.168.225.80 an ein bestimmtes Ziel gingen. Wir könnten dies nun weiter untersuchen und uns das Datenvolumen über die Zeit ansehen, das von dieser Adresse stammt.

Ich beginne dazu mit einer Suche, die bis auf eine Ausnahme mit den grundlegenden Suchen aus den anderen Beispielen identisch ist: Die Quelle ist nicht mehr ein Adressenbereich, sondern eine bestimmte Adresse.

Da ich die Informationen pro Tag aggregieren möchte, sortiere ich nach dem Datum. Dann verwende ich streamstats, um die Summe von bytes_out, umbenannt in total_bytes_out und nach Quell-IP-Adresse sortiert, zu ermitteln. Abschließend stellen wir die Ausgabe als Tabelle dar, mit Daten für Datum, bytes_out und total_bytes_out.

Die Ausgabe kann in Tabellenformat angezeigt oder visualisiert werden (vorzugsweise als Linien- bzw. Flächendiagramm). Wie ihr der Ausgabe entnehmen könnt, ergibt die Summe der täglichen bytes_out-Wert und der total_bytes_out-Werte des Vortags den heutigen total_bytes_out-Wert.

Weitere Verwendungen von stats, eventstats und streamstats

Stats, eventstats und streamstats sind sehr leistungsstarke Tools, mit denen die Ergebnismenge verfeinert werden kann, um Ausreißer innerhalb der Umgebung zu identifizieren. Bei diesem Blog haben wir uns auf den Netzwerk-Traffic konzentriert und Summen und Zähler verwendet. Es spricht jedoch nichts dagegen, diese Befehle auch für hostbasierte Analysen zu verwenden sowie Statistiken wie Standardabweichungen, Mediane und Perzentile zu nutzen.

Viel Spaß beim Threat Hunting!

Verwenden von stats, eventstats & streamstats für die Bedrohungssuche (2024)

FAQs

What is the difference between stats eventstats and streamstats? ›

eventstats adds the desired stats function result to the event, derived from the entire set of events. Streamstats adds the desired stats function result to the event, derived from the point in time of the current event in the stream. An example is a moving average.

What is Streamstats in Splunk stats? ›

The SPL2 streamstats command adds a cumulative statistical value to each search result as each result is processed. For example, you can calculate the running total for a particular field, or compare a value in a search result with a the cumulative value, such as a running average.

What is the eventstats command in Splunk? ›

The SPL2 eventstats command generates summary statistics from fields in your events and saves those statistics into a new field. The eventstats command places the generated statistics in new field that is added to the original raw events.

What are stats in a Splunk query? ›

The SPL2 stats command calculates aggregate statistics, such as average, count, and sum, over the incoming search results set. This is similar to SQL aggregation. If the stats command is used without a BY clause, only one row is returned, which is the aggregation over the entire incoming result set.

What is StreamStats used for? ›

StreamStats provides estimates of various streamflow statistics for user-selected sites by solving equations that were developed through a process known as regionalization.

How do StreamStats estimate flood frequencies? ›

After StreamStats measures the drainage-basin characteristics for a selected site, the values are sent to the National Streamflow Statistics (NSS) Services, which contain all of the USGS-developed equations for estimating flood-frequency statistics in the Nation.

What are the 4 types of searches in Splunk by performance? ›

How search types affect Splunk Enterprise performance
Search typeRef. indexer throughputPerformance impact
DenseUp to 50,000 matching events per second.CPU-bound
SparseUp to 5,000 matching events per second.CPU-bound
Super-sparseUp to 2 seconds per index bucket.I/O bound
RareFrom 10 to 50 index buckets per second.I/O bound

What does Splunk track? ›

Splunk can monitor the performance of all your servers, containers, and apps in real-time with Splunk Infrastructure Monitoring.

How does Splunk stream work? ›

Stream collects network data and forwards it to Splunk Enterprise or Splunk Cloud. Stream does not analyze logs. If you can use a UF to send logs to Splunk then you don't need Stream.

What is the 50000 limit in Splunk stats? ›

The limit you're talking about is the one where, if your base search is just returning raw event rows, Splunk only keeps 50,000 events in the search result. This means that later when you run your postprocess there can be misleading results.

What is the limit of eventstats? ›

By default, eventstats can aggregate up to 50,000 events at a time. You can change this limit with the MaxNoOfa*ggregatedEvents parameter.

What are the three types of Splunk authentication? ›

Splunk internal authentication with role-based user access. Lightweight directory access protocol (LDAP) A scripted authentication API for use with an external authentication system, such as privileged access management (PAM) or remote authentication dial-in user server (RADIUS) Multifactor authentication.

What are streamstats in Splunk? ›

Streamstats builds upon the basics of the stats command but it provides a way for statistics to be generated as each event is seen. This can be very useful for things like running totals or looking for averages as data is coming into the result set.

What is the difference between stats and eventstats? ›

Eventstats calculates a statistical result same as stats command only difference is it does not create statistical results, it aggregates them to the original raw data. Streamstats command uses events before the current event to compute the aggregate statistics that are applied to each event.

What is the difference between stats and chart in Splunk? ›

Use the stats command when you want to create results tables that show granular statistical calculations. Use the stats command when you want to specify 3 or more fields in the BY clause. Use the chart command when you want to create results tables that show consolidated and summarized calculations.

What is the difference between stats and statsmodels? ›

stats has all of the probability distributions and some statistical tests. It's more like library code in the vein of numpy and scipy. Statsmodels on the other hand provides statistical models with a formula framework similar to R and it works with pandas DataFrames.

What is the difference between stats Ttest_ind and stats Ttest_rel? ›

ttest_rel is for related samples and stats. ttest_ind is for independent samples. Since you have two different values for the size they are two independent samples. They may be coming from the same population but they are different so you need to use stats.

What is the difference between statistics Stdev and statistics Pstdev? ›

stdev() function only calculates standard deviation from a sample of data, rather than an entire population. To calculate standard deviation of an entire population, another function known as pstdev() is used. Standard Deviation is a measure of spread in Statistics.

What is the difference between statistics and official statistics? ›

Official statistics are statistics produced within a national statistical system. National statistical systems include statistical organisations and units within a country that jointly collect, process and disseminate official statistics on behalf of the national government.

Top Articles
Latest Posts
Article information

Author: Errol Quitzon

Last Updated:

Views: 5859

Rating: 4.9 / 5 (59 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Errol Quitzon

Birthday: 1993-04-02

Address: 70604 Haley Lane, Port Weldonside, TN 99233-0942

Phone: +9665282866296

Job: Product Retail Agent

Hobby: Computer programming, Horseback riding, Hooping, Dance, Ice skating, Backpacking, Rafting

Introduction: My name is Errol Quitzon, I am a fair, cute, fancy, clean, attractive, sparkling, kind person who loves writing and wants to share my knowledge and understanding with you.