Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Sentinel-Queries — Sammlung von KQL-Abfragen | Kitploit
Tools/GitHubGitHub/reprise99/sentinel-queries
DefensivwerkzeugeBedrohungsanalyseLernen & BildungKuratierte RessourcenAnomalieerkennungLog-Analyse
GitHubreprise99/sentinel-queries

Sentinel-Queries

Sammlung von KQL-Abfragen

Repository anzeigen
1.6k38235vor 8 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

KQL für Microsoft Sentinel

Einige Tipps, Tricks und Beispiele für die Verwendung von KQL mit Microsoft Sentinel.

  1. Einleitung
  2. Die Anatomie einer KQL-Abfrage
  3. Die Grundlagen
    1. Zeit-Grundlagen
    2. Where-Grundlagen
    3. Project-Grundlagen
    4. Summarize-Grundlagen
    5. Render-Grundlagen
    6. Parse- und Split-Grundlagen

Einleitung

Kusto Query Language ist die Sprache, die in Azure Monitor, Azure Data Explorer und Azure Log Analytics verwendet wird (was Microsoft Sentinel unter der Haube nutzt). Ich habe diese Visualisierung zu KQL schon immer nützlich gefunden -

KQL visualisiert

Wir wollen KQL verwenden, um genaue und effiziente Abfragen zu erstellen, um Bedrohungen, Erkennungen, Muster und Anomalien in unserem größeren Datensatz zu finden.

Die Anatomie einer KQL-Abfrage

Nehmen Sie die folgende Abfrage als Beispiel```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName == "[email protected]" | where ResultType == "0" | where AppDisplayName == "Microsoft Teams" | project TimeGenerated, Location, IPAddress, UserAgent

Wenn wir eine Abfrage wie diese ausführen, teilt uns die erste Zeile mit, in welcher Tabelle Microsoft Sentinel nach Daten suchen soll. In diesem Fall möchten wir also die Tabelle `SigninLogs` durchsuchen, in die die Azure-AD-Anmeldedaten geschrieben werden. Eine Liste der Tabellen findest du [hier](https://docs.microsoft.com/en-us/azure/sentinel/data-source-schema-reference).

Microsoft Sentinel führt deine Abfrage dann sequenziell aus, d. h. jede Zeile wird nacheinander verarbeitet, bis das Ende erreicht ist oder ein Fehler auftritt. Schauen wir uns unsere Abfrage also Zeile für Zeile an.```kql
SigninLogs

Also zuerst haben wir unsere SigninLogs-Tabelle ausgewählt.```kql SigninLogs | where TimeGenerated > ago(14d)

Als Nächstes weisen wir Sentinel an, die Daten der letzten 14 Tage in dieser Tabelle zu betrachten.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName == "[email protected]"

Als Nächstes fordern wir Sentinel auf, nur Protokolle zu finden, bei denen UserPrincipalName gleich "[email protected]" ist.```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName == "[email protected]" | where ResultType == "0"

Dann suchen wir nur nach Protokollen, bei denen der ResultType == 0 ist, was eine erfolgreiche Anmeldung bei Azure AD darstellt.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName == "[email protected]"
| where ResultType == "0"
| where AppDisplayName == "Microsoft Teams"

Als Nächstes suchen wir nur nach Anmeldungen bei Microsoft Teams.```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName == "[email protected]" | where ResultType == "0" | where AppDisplayName == "Microsoft Teams" | project TimeGenerated, Location, IPAddress, UserAgent

Unsere letzte Zeile verwendet den project-Operator, um nur 4 Felder aus unseren Protokollen zurückzugeben, sodass wir aus unseren SigninLogs-Daten nur TimeGenerated, Location, IPAddress und UserAgent sehen.

So baust du Abfragen auf, jetzt zu den Grundlagen.

## Die Grundlagen

### Zeitliche Grundlagen

Microsoft Sentinel und KQL sind stark für Zeitfilter optimiert. Wenn du also den Zeitraum der Daten kennst, die du durchsuchen möchtest, solltest du den Zeitbereich sofort filtern: die letzten 14 Tage an Protokollen abrufen und dann nach einem Benutzernamen suchen, wie in der folgenden Abfrage -```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName == "[email protected]"

Ist viel effizienter, als zuerst nach einem Benutzernamen und dann nach dem Zeitraum zu suchen, etwa so -```kql SigninLogs | where UserPrincipalName == "[email protected]" | where TimeGenerated > ago(14d)

KQL bietet viele Optionen zum Abfragen bestimmter Zeiträume.```kql
SigninLogs
| where TimeGenerated > ago(14d)

Wie im ersten Beispiel sucht dies nach den letzten 14 Tagen.```kql SigninLogs | where TimeGenerated > ago(14h)

Du kannst auch Stunden angeben.```kql
SigninLogs
| where TimeGenerated > ago(14m)

Und Minuten.

KQL unterstützt auch Abfragen zwischen Zeitbereichen -```kql SigninLogs | where TimeGenerated between (ago(14d) .. ago(7d))

Dadurch werden SigninLogs-Daten zwischen vor 14 Tagen und vor 7 Tagen gefunden.```kql
SigninLogs
| where TimeGenerated between (ago(14h) .. ago(7h))

Zwischen vor 14 Stunden und vor 7 Stunden.```kql SigninLogs | where TimeGenerated between (ago(14m) .. ago(7m))

Und zwischen vor 14 Minuten und vor 7 Minuten.

### Where-Grundlagen

Where ist ein Operator, den Sie in praktisch jeder Abfrage verwenden werden. So teilen Sie Microsoft Sentinel mit, nach bestimmten Daten zu suchen. Die Syntax ist beim where-Operator sehr wichtig. Wenn wir unser gleiches Beispiel verwenden.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName == "[email protected]"

Dadurch wird in unserer SigninLogs-Tabelle über die letzten 14 Tage nach exakten Übereinstimmungen gesucht, bei denen unser UserPrincipalName gleich [email protected] ist. In KQL ist == case-sensitive. Wenn du also nach [email protected] suchst und der Benutzername tatsächlich [email protected] lautet, erhältst du keine Ergebnisse. Das nicht case-sensitive Gegenstück ist =```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName = "[email protected]"

Dies findet alle Übereinstimmungen für [email protected] unabhängig von der Groß-/Kleinschreibung.

Statt equals können wir auch contains verwenden.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where UserPrincipalName contains "reprise_99"

Dies findet alle Protokolleinträge, bei denen der UserPrincipalName reprise_99 enthält. Wenn Sie Daten für [email protected] und [email protected] hätten, würde es beide finden. Der contains-Operator ist nicht case-sensitiv, aber Sie können contains_cs verwenden, um ihn case-sensitiv zu machen.

Sie können entweder startswith oder endswith verwenden, wenn Sie nach bestimmten Mustern suchen.```kql SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName startswith "reprise_99"

SigninLogs | where TimeGenerated > ago(14d) | where UserPrincipalName endswith "testdomain.com"

Sowohl startswith als auch endswith unterscheiden nicht zwischen Groß- und Kleinschreibung, aber Sie können startswith_cs oder endswith_cs verwenden, um sie case-sensitiv zu machen.

Wenn Sie nach vollständigen Wörtern suchen (mehr als vier Zeichen), können Sie in KQL den has-Operator verwenden. Die Verwendung von 'has' ist effizienter als 'contains', da die Daten für Sie indiziert sind.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where AppDisplayName has "Teams"

Dadurch werden alle SigninLogs gefunden, bei denen der Anzeigename der Anwendung das Wort Teams enthält. Das kann „Microsoft Teams" und „Microsoft Teams Web Client" einschließen, die beide die Abfrage erfüllen.

Wenn Sie nach mehreren Wörtern suchen, können Sie has_any oder has_all verwenden.```kql SigninLogs | where TimeGenerated > ago(14d) | where AppDisplayName has_any ("Teams","Outlook")

Dies gibt Ergebnisse zurück, bei denen der Anzeigename der Anwendung entweder "Teams" oder "Outlook" enthält.```kql
SigninLogs
| where TimeGenerated > ago(14d)
| where AppDisplayName has_all ("Teams","Outlook")

Dies wird Ergebnisse liefern, bei denen der Anzeigename der Anwendung "Teams" und "Outlook" enthält.

Tool herunterladen