Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
log-horizon — Microsoft Sentinel SIEM Logquellen-Analyzer | Kitploit
Tools/GitHubGitHub/lnfernux/log-horizon
Cloud-Infrastruktur-SicherheitKonfigurationsprüfungCloud-SicherheitDevSecOpsBedrohungsanalyseIncident ResponseLog-Analyse
GitHublnfernux/log-horizon

log-horizon

Microsoft Sentinel SIEM Logquellen-Analyzer

Repository anzeigen
283vor 19h 7mVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Webseite
Teilen

Microsoft Sentinel SIEM Log Source Analyzer

PowerShell 7+ Module Version


Ich musste die Frage "Was bekommen wir eigentlich aus diesen Logs heraus?" oder "Was sind die empfohlenen Logs für Microsoft Sentinel?" öfter beantworten, als ich zählen kann. Die Antwort hängt immer von so vielen Dingen ab, aber wir können generisch sein. Also habe ich dieses Ding hier gebaut.

Log Horizon verbindet sich mit Ihrem Microsoft Sentinel-Arbeitsbereich (und optional Defender XDR), geht jede Log-Tabelle durch, die Sie erfassen, und sagt Ihnen, ob Sie daraus einen Sicherheitswert ziehen oder nur Geld verbrennen. Es klassifiziert Tabellen, bewertet sie gegen Ihre Erkennungsregeln und gibt Ihnen konkrete Empfehlungen mit Kosteneinsparungsschätzungen.

Wichtig: Dies ist ein generischer Ansatz. Wenn Sie wissen, dass eine Log-Quelle für Ihre Umgebung wichtig ist, hat dieser Kontext immer Vorrang vor dem, was dieses Tool Ihnen sagt. Die Klassifizierungen sind ein Ausgangspunkt, kein Evangelium.

Möchten Sie mehr lesen? Ich habe einige Beiträge über Log Horizon auf meinem Blog:

  1. Tool Release: Log Horizon
  2. Update: Log Horizon v0.5.0
  3. Building a practical log baseline and how Log Horizon helps you do that
  4. How to use Log Horizon

Funktionen

Tool herunterladen
FunktionBeschreibung
Klassifizierungs-EngineWissensdatenbank mit 481 Einträgen, die 240+ Connectors und 22 Kategorien abdeckt, mit Lebenszyklusstatus (veraltet/legacy plus Ersatztabellen) und automatischem heuristischem Fallback für unbekannte Tabellen
Kosten-Wert-BewertungMatrix aus Kostenstufe pro Tabelle vs. Erkennungsstufe mit kombinierter Bewertung (Hoher Wert bis Niedriger Wert), bepreist pro beobachtetem Plan (Analytics, Basic, Data Lake)
Empfehlungen13 priorisierte Aktionstypen: Data-Lake- oder Basic-Kandidaten, Tabellen ohne Erkennung, XDR-Streaming-Verschwendung, Filterung bei der Erfassung, Split-Kandidaten, Plannutzung, veraltete Quellen, Aufbewahrungsdefizite, XDR-Checker- und Detection-Analyzer-Ergebnisse, jeweils mit Kosteneinsparungsschätzungen
ErkennungszuordnungOrdnet Analyse-Regeln, Hunting-Abfragen und XDR-Erkennungen jeder Tabelle zu, um Abdeckungslücken zu erkennen
Korrelations-TagsErkennt #DONT_CORR# / #INC_CORR#-Tags in Regelbeschreibungen und kennzeichnet Regeln, die von der Defender-Korrelation ausgeschlossen sind
AufbewahrungskonformitätVergleicht die tatsächliche Aufbewahrung mit empfohlenen Mindestwerten basierend auf Industriestandards und Sicherheits-Best-Practices
SOC-OptimierungRuft Microsofts eigene SOC-Verbesserungsempfehlungen aus der Security Insights API ab
Keyword-LückenanalyseKennzeichnet Tabellen, die Sie erfassen sollten, es aber nicht tun, basierend auf Anbieter-/Produkt-Keywords
Transform-ErkennungEntdeckt Data Collection Rules (DCRs), die auf den Arbeitsbereich abzielen (Abonnementliste gefiltert nach Ziel, der Arbeitsbereichs-Transformations-DCR und Arbeitsbereichs-Zuordnungen), parst Inline- und mehrstufige Transforms und beschriftet jede Operation (Filter, Projektion, Spaltenentfernung, Anreicherung, Aggregation)
Split-Tabellen-ErkennungIdentifiziert _SPLT_CL-Split-Tabellen und verknüpft sie zurück zu den übergeordneten Tabellen in der Klassifizierungs-Engine
Split-KQL-GeneratorGeneriert portalbereites Split-KQL aus einer kuratierten Wissensdatenbank, Live-Regelanalyse und Community-Feldhäufigkeitsstatistiken -- Nur-Bedingungs-Format, das direkt in den Sentinel-Split-Regeleditor eingefügt werden kann. Feldlisten werden mit dem Live-Schema der Tabelle abgeglichen; alles, was nicht vorhanden ist, wird als verworfen gemeldet

Haftungsausschluss

[!CAUTION] Haftungsausschluss

Dieses Tool wird mit Hilfe von KI entwickelt und gepflegt. Bitte seien Sie vorsichtig bei der Verwendung dieser Lösung und verstehen Sie immer, was Sie ausführen, bevor Sie es in der Produktion ausführen. Der Entwickler übernimmt keine Haftung für Schwachstellen oder Probleme.

Durch das Herunterladen, Installieren oder Verwenden dieses Tools bestätigen Sie, dass Sie diese Bedingungen gelesen, verstanden und ihnen zugestimmt haben.

Voraussetzungen

Was Sie benötigenVersion
PowerShell7.0+
Az-ModuleAz.Accounts
Andere ModulePwshSpectreConsole 2.6.3+
OptionalMicrosoft.Graph.Authentication (für -IncludeDefenderXDR als angemeldeter Benutzer)

Endpunkte folgen der Azure-Umgebung der aktuellen Connect-AzAccount-Sitzung, sodass Azure-Government- und Azure-China-Arbeitsbereiche ohne zusätzliche Parameter funktionieren. Die Public-Cloud-Werte werden verwendet, wenn keine Umgebung verfügbar ist.

Wenn Sie noch nicht bei Azure angemeldet sind, startet das Modul Connect-AzAccount für Sie. Wenn Sie angemeldet sind, macht es einfach weiter.

Berechtigungen: Log Analytics Reader und Microsoft Sentinel Reader auf dem Arbeitsbereich decken die Analyse ab. Die Transform-Erkennung benötigt außerdem Microsoft.Insights/dataCollectionRules/read (Monitoring Reader) auf dem Abonnement oder der Ressourcengruppe; ohne diese wird die Ausführung fortgesetzt und eine Warnung mit der fehlenden Berechtigung ausgegeben. -IncludeDefenderXDR verwendet Microsoft Graph mit CustomDetection.Read.All, was für einen angemeldeten Benutzer das optionale Modul Microsoft.Graph.Authentication bedeutet.

Erste Schritte

Ziemlich einfach:```powershell

Grab the dependencies

Install-Module -Name Az.Accounts -Scope CurrentUser Install-Module -Name PwshSpectreConsole -Scope CurrentUser

Clone and import

git clone https://github.com/lnfernux/log-horizon Import-Module ./log-horizon/LogHorizon.psd1

root@kitploit:~
## Verwendung

### Die Grundlagen

Beginnen Sie damit, eine Verbindung zu Azure herzustellen und stellen Sie sicher, dass Sie das richtige Konto und Abonnement auswählen:```powershell
Connect-AzAccount

Dann können wir das Tool aufrufen:```powershell Invoke-LogHorizon -SubscriptionId '00000000-0000-0000-0000-000000000000' -ResourceGroup 'rg-sentinel' -WorkspaceName 'my-sentinel-ws'

root@kitploit:~
<img width="860" height="842" alt="{F4FFA929-B24F-490C-BD3D-F75E214BCD93}" src="https://assets.kitploit.com/production/public/readmes/13110/ff9d1da85043d02a216df72913ecf63520310b8d820b1bd1278b8e4aca718494.png" />

Außerdem gibt es ein Menü, um tiefer in andere Ausgaben einzusteigen:

<img width="395" height="223" alt="{83CE9E6E-F373-49CD-BE05-182DB69F36BE}" src="https://assets.kitploit.com/production/public/readmes/13110/0606a575b10640bd13ebb87b930f74b2438167b5578cb843b412b4fcf273fc26.png" />


### Keyword-Lücken + Defender XDR

Möchtest du wissen, ob dir Tabellen zu bestimmten Anbietern fehlen? Gib ein paar Keywords ein. Füge `-IncludeDefenderXDR` hinzu, wenn du auch die XDR-Analyse möchtest.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Keywords 'CrowdStrike','AWS','Okta' -IncludeDefenderXDR

Detection Analyzer

Aktivieren Sie die Regelqualitäts-/Rausch-Analyse basierend auf Vorfällen und Automatisierungsregeln:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -IncludeDetectionAnalyzer -DetectionLookbackDays 90

root@kitploit:~
### Einen Bericht exportieren```powershell
# JSON
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output json -OutputPath ./report.json

# Markdown
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output markdown -OutputPath ./report.md

# Static HTML (self-contained, no JS, works offline)
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output html -OutputPath ./report.html

# Auto-generate timestamped filename by pointing at a directory
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output html -OutputPath ./reports/

Tabellenaufbewahrung und -typ verwalten

Sie können die Tabellenaufbewahrung und den Tabellentyp jetzt direkt über die interaktive TUI aktualisieren:

  • Öffnen Sie Invoke-LogHorizon normal und wählen Sie dann Tabellenaufbewahrung und -typ verwalten aus dem Hauptmenü für Massenaktualisierungen von Aufbewahrung oder Typ.
  • Öffnen Sie Log Tuning / Transforms > Bestimmte Tabelle auswerten und wählen Sie Aufbewahrung/Typ für diese Tabelle verwalten für eine Änderung an einer einzelnen Tabelle.

Für Skripterstellung oder Automatisierung verwenden Sie den dedizierten öffentlichen Befehl:```powershell

Preview a single-table change (prints a Table / Plan / Interactive / Total / Status / Reason table, applies nothing)

Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -TotalRetentionInDays 365 -WhatIf

Switch tables to Basic and set total retention

Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'AzureDiagnostics','VMConnection' -TargetPlan Basic -TotalRetentionInDays 730

Use -1 for inherit/default semantics

RetentionInDays = inherit workspace default

TotalRetentionInDays = remove long-term retention

Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -RetentionInDays -1 -TotalRetentionInDays -1

root@kitploit:~
### Nicht-interaktiver / CI-Modus

Überspringen Sie die interaktive TUI und exportieren Sie direkt in eine Datei – nützlich für Pipelines oder geplante Ausführungen:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/

Wenn Sie -Output weglassen, wird das Analyseobjekt an die Pipeline zurückgegeben, sodass Sie es in Ihre eigene Logik weiterleiten können.

Sammlungs-Cache

Die Datenerfassungsphase (Nutzung, Regeln, Vorfälle, Tabellen, DCRs) ist standardmäßig zwischengespeichert, sodass eine erneute Ausführung gegen denselben Arbeitsbereich – beispielsweise zum Exportieren eines zweiten Formats oder zum erneuten Öffnen der TUI – Sekunden statt Minuten dauert. Der Cache befindet sich unter $env:LOCALAPPDATA\LogHorizon\cache (überschreibbar mit -CachePath), eine Datei pro Kombination aus Abonnement, Ressourcengruppe, Arbeitsbereich, -DaysBack, -DetectionLookbackDays, -IncludeDefenderXDR, -IncludeDetectionAnalyzer, den drei Preiskennzahlen und der Modulversion. Einträge, die älter als -CacheMaxAgeMinutes (Standard: 60) sind, werden ignoriert, und bei jedem Speichern werden abgelaufene Einträge gelöscht, sodass der Ordner keine Dateien aus anderen Parametersätzen oder älteren Versionen ansammelt. Token werden niemals in den Cache geschrieben; die Authentifizierung wird bei jedem Aufruf ausgeführt, sodass der Aufbewahrungsassistent immer über aktuelle Anmeldeinformationen verfügt.

Die Cachedatei ist Klartext-Clixml. Mit -IncludeDetectionAnalyzer enthält sie Vorfalltitel, -nummern, -status und -klassifizierung aus Ihrem Arbeitsbereich; Vorfallbesitzer, Regelautoren und Identitäten zugewiesener Besitzer werden nicht erfasst. Verwenden Sie -NoCache auf gemeinsam genutzten Maschinen oder richten Sie -CachePath auf einen Speicherort mit der von Ihnen benötigten Zugriffskontrolle.```powershell

Force a fresh collection and refresh the cache

Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -RefreshCache

Never read or write the cache

Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NoCache

Accept cached data for up to a day

Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -CacheMaxAgeMinutes 1440

root@kitploit:~
### Protokoll-Tuning und Split-KQL

Die interaktive TUI enthält ein Menü für **Protokoll-Tuning / Transforms** mit Live-Tuning-Vorschlägen (Feldnutzung aus Ihren bereitgestellten Regeln und Hunting-Abfragen), Wissensdatenbank-Split-KQL sowie einem Evaluator pro Tabelle. Jeder KQL-Block ist nur eine Bedingung und lässt sich direkt in den Sentinel-Split-Regeleditor einfügen, mit Quellenangabe (Wissensdatenbank, Regelanalyse oder kombiniert).

### Benutzerdefinierte Preisgestaltung

Standardpreise sind Westeuropa Simplified PAYG in USD: 5,59 $/GB Analytics, 1,15 $/GB Basic, 0,20 $/GB Data Lake (0,07 Erfassung + 0,13 Verarbeitung). Jede Tabelle wird nach dem in der `Usage`-Tabelle beobachteten Plan bepreist, und der kostenlose Status stammt aus `Usage.IsBillable`. Volumina verwenden Abrechnungs-GB (1000 MB). Falls Ihre Verpflichtungsstufe abweicht:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61 -BasicPricePerGB 1.15 -LakePricePerGB 0.20

Alle Parameter

ParameterTypErforderlichStandardBeschreibung
-SubscriptionIdstringJa-Azure-Abonnement-ID
-ResourceGroupstringJa-Ressourcengruppe, die den Sentinel-Arbeitsbereich enthält
-WorkspaceNamestringJa-Name des Log-Analytics-Arbeitsbereichs
-WorkspaceIdstringNein-Arbeitsbereichs-ID (wird automatisch aufgelöst, wenn ausgelassen)
-OutputstringNein-Exportformat: json, markdown / md oder html (Alias -o)
-OutputPathstringNein-Datei- oder Verzeichnispfad für den Export. Ein vorhandenes Verzeichnis oder ein abschließendes Trennzeichen erhält einen Zeitstempel-Dateinamen; ein Dateiname ohne Erweiterung erhält die Erweiterung des Formats; fehlende Verzeichnisse werden erstellt
-Keywordsstring[]Nein-Schlüsselwörter für die Gap-Analyse (z. B. 'AWS','CrowdStrike', Alias -kw)
-IncludeDefenderXDRswitchNein-Defender-XDR-Analyse benutzerdefinierter Erkennungen einbeziehen
-IncludeDetectionAnalyzerswitchNein-Analyse verrauschter Erkennungen pro Regel anhand von Incidents und Automatisierungsregeln einbeziehen
-DetectionLookbackDaysintNein90Abfragefenster für die Erkennungsanalyse auf Incident-/Automatisierungsbasis (1–365 Tage)
-DaysBackintNein90Abfragefenster für Nutzungsdaten (1–365 Tage)
-PricePerGBdecimalNein5.59

Unter der Haube

Es gibt also vier Phasen.

1. Datenerfassung

Das Modul verbindet sich mit Azure und zieht Daten aus den Log-Analytics-, Security-Insights-, Azure-Monitor- und Microsoft-Graph-APIs. Jeder Aufruf durchläuft einen Retry-Wrapper (429, 5xx und Transportfehler) und, sofern -NoCache nicht gesetzt ist, werden die gesammelten Daten für den nächsten Lauf lokal zwischengespeichert.

DatenquelleAPIWas wir abgreifen
TabellennutzungUsage-Tabelle (KQL)Erfassungsvolumen, Plan und abrechenbares Flag pro Tabelle über Ihr Abfragefenster
AnalyseregelnSecurity Insights RESTAktive Erkennungsregeln + welche Tabellen sie treffen + Korrelations-Tags, plus implizite Tabellenkonsumenten für Nicht-KQL-Regelarten
Hunting-AbfragenLog-Analytics-gespeicherte-Suchen-RESTGespeicherte Hunting-Abfragen + referenzierte Tabellen
DatenconnectorsSecurity Insights RESTInventar installierter Connectors
SOC-OptimierungSecurity Insights REST (Vorschau)Integrierte SOC-Empfehlungen von Microsoft
TabellenaufbewahrungLog-Analytics-Tabellen-RESTAufbewahrung, Archiv, Plan (Analytics/Basic/Auxiliary), geerbte Standard-Flags und Schema-Spalten pro Tabelle
DatenerfassungsregelnAzure Monitor RESTDCRs, die auf den Arbeitsbereich abzielen (Abonnementliste, Arbeitsbereichs-Transformations-DCR, Zuordnungen) und deren Transformationen
Defender XDRMicrosoft GraphXDR-Regeln für benutzerdefinierte Erkennungen (optional; delegiertes CustomDetection.Read.All oder ein Az-Graph-Token)
IncidentsSecurity Insights RESTIncident-Ergebnisse (Status/Klassifizierung), Zeitablauf und Regelverknüpfungshinweise für die Regelqualitätsbewertung
AutomatisierungsregelnSecurity Insights RESTRegelbezogene Aktionen zum Schließen von Incidents und Bedingungen für Titelabgleich zur Zuordnung automatischer Schließungen
SentinelHealthLog Analytics KQLAusführungsereignisse von Automatisierungsregeln mit Incident-Nummern für die eindeutige Zuordnung automatischer Schließungen (optional, erfordert Health-Monitoring)

2. Klassifizierung

Jede Tabelle wird in zwei Durchgängen klassifiziert:

Zuerst eine direkte Suche in der Wissensdatenbank mit 481 Einträgen in Data/log-classifications.json. Jeder Eintrag enthält den Connector-Namen, primäre/sekundäre Klassifizierung, Sicherheitskategorie, MITRE-Datenquellen-Zuordnungen, einen empfohlenen Preistarif und Aufbewahrungsdauer sowie optionale Lebenszyklus-Flags (veraltet/legacy mit Ersatztabellen, XDR-Streaming-Fähigkeit, Plattform).

Wenn es keine Übereinstimmung gibt, greifen heuristische Regeln in dieser Reihenfolge:

  • Name enthält ein Sicherheits-Token wie Alert, Incident, Threat, Signin, Logon, Audit, Risk, Detection (abgeglichen an PascalCase-Wortanfängen) -> primär
  • Name sieht nach Infra-Telemetrie aus: Flow, Metric, Diagnostic, Perf, Heartbeat, Health, Inventory, Usage -> sekundär
  • Aktive Analyseregeln zeigen auf die Tabelle -> primär
  • Integrierte Tabelle mit Microsoft-Präfix (AAD, Microsoft, Azure, Defender, Purview, Entra, Sentinel, Office, Intune, Windows ...) -> primär, zur Überprüfung und Ergänzung in der Datenbank markiert
  • Generischer *Log/*Logs-Name -> sekundär
  • Hohes Volumen (>10 GB/Monat) ohne Erkennung -> sekundär
  • Keines der oben genannten -> unbekannt

3. Kosten-Nutzen-Bewertung

Jede Tabelle wird in mehreren Dimensionen bewertet:

  • Kostentarif: Kostenlos / Niedrig (<1 GB) / Mittel (1–10 GB) / Hoch (10–50 GB) / Sehr hoch (>50 GB)
  • Erkennungstarif: Keine / Niedrig (1–2 Regeln) / Mittel (3–9 Regeln) / Hoch (10+ Regeln)
  • Bewertung: Hoher Wert / Guter Wert / Fehlende Abdeckung / Optimieren / Geringer Wert / Untergenutzt / Kostenloser Tarif / Plattform
  • Abdeckung %: Prozentsatz der Tabellen, auf die mindestens eine Analyseregel oder Hunting-Abfrage verweist, berechnet als TabellenMitRegeln / Gesamttabellen * 100. Die Abdeckung pro Tabelle summiert Analyseregeln + Hunting-Abfragen, die durch Parsen von KQL nach Tabellennamen gefunden wurden.
  • Implizite Abdeckung: Regelarten ohne KQL verbrauchen dennoch Tabellen. Data/implicit-consumers.json ordnet sie zu (Threat-Intelligence-Abgleich -> ThreatIntelIndicators/ThreatIntelObjects, Fusion -> SecurityAlert/Anomalies, UEBA -> BehaviorAnalytics/UserPeerAnalytics/IdentityInfo, Microsoft-Incident-Erstellung -> SecurityAlert). Aktivierte Regeln dieser Arten zählen zur effektiven Abdeckung, und jede Tabelle meldet eine CoverageSource von kql, xdr, implicit, platform oder none. Plattformtabellen, die Sentinel selbst schreibt (SecurityIncident, SentinelHealth, Watchlist, Usage ...), werden nie als fehlende Abdeckung markiert und erhalten die Bewertung Plattform.
  • Nur aktivierte Analyseregeln und aktivierte Defender-Benutzerdefinierte-Erkennungen zählen zur Abdeckung.

Anschließend generiert das Modul Empfehlungen (13 Typen):

TypWann er ausgelöst wirdWas zu tun ist
Data LakeSekundär + hohe Kosten + wenige Erkennungen, und die Tabelle unterstützt den Auxiliary-Plan (fällt auf einen Basic-Plan-Vorschlag zurück, wenn nur Basic unterstützt wird)In den Auxiliary-/Data-Lake-Tarif verschieben; Einsparungen sind aktuelle Kosten minus dasselbe Volumen zum Lake- (oder Basic-)Satz
Geringer WertHohe Kosten + null ErkennungenRegeln hinzufügen, filtern oder in den Data Lake verschieben
XDR-OptimierungXDR-gestreamt + 0 Sentinel-Regeln + XDR-Regeln vorhandenStreaming stoppen, stattdessen das einheitliche XDR-Portal verwenden
Fehlende AbdeckungPrimär + null Erkennungen (keine Plattformtabellen)Analyseregeln schreiben, um Wert aus den Daten zu ziehen
Erfassungszeit-FilterPrimär + >20 GB + <=3 ErkennungenErfassungszeit-Transformation anwenden, um das Volumen zu reduzieren
Split-KandidatPrimär + hohes Volumen + Erkennungen + keine vorhandene TransformationTabelle aufteilen, sodass hochwertige Zeilen auf Analytics bleiben und der Rest in den Data Lake geht
PlannutzungNutzungszeilen zeigen mehr als einen Plan, oder der konfigurierte Plan weicht von dem ab, was die Nutzung beobachtet hatPrüfen, ob der Plantarifwechsel erwartet war
Veraltete QuelleEine in der Datenbank als veraltet oder legacy markierte Tabelle erfasst weiterhin DatenErkennungen auf die Ersatztabellen migrieren, dann den alten Connector ausmustern. Nur informativ: Es werden keine Einsparungen beansprucht, da die Erfassung verschoben statt verschwindet
AufbewahrungsdefizitArbeitsbereichs- oder Tabellenaufbewahrung unter der 90-Tage-BaselineGesamt-/Archivaufbewahrung erhöhen, um regulatorischen Vorgaben zu entsprechen
AufbewahrungsverbesserungBezahlte, nicht-Plattform-Tabelle erfüllt 90 Tage, liegt aber unter der KategorieempfehlungLängere Gesamtaufbewahrung in Betracht ziehen
Interaktiv unter BaselineAnalytics-Tabelle mit interaktiver (Hot-)Aufbewahrung unter 90 TagenInteraktive Aufbewahrung auf die 90 Tage erhöhen, die Sentinel enthält, sofern das kurze Hot-Fenster nicht beabsichtigt ist
XDR-Checker

Empfehlungen werden einmal sortiert, Hoch > Mittel > Niedrig und dann nach geschätzten Einsparungen, und jede Ausgabe (JSON, Markdown, HTML, TUI) behält diese Reihenfolge bei.

4. Erkennungsanalysator (Verrauschtheits-Bewertung)

Wenn Sie -IncludeDetectionAnalyzer übergeben, ruft das Modul aktuelle Incidents und Automatisierungsregeln ab und bewertet dann jede aktivierte Analyseregel auf potenzielle Verrauschtheit.

Metriken pro Regel (aus Incident-Daten berechnet):

MetrikWie sie berechnet wird
Incidents gesamtAnzahl der mit der Regel verknüpften Incidents
AutoClose-VerhältnisIncidents, die durch Automatisierungsregeln geschlossen wurden ÷ Gesamt-Incidents. Primärquelle: SentinelHealth-Tabelle (Automatisierungsregel-Ausführungen durch aktivierte Close-Incident- oder Playbook-Regeln, abgeglichen über Incident-Nummer). Fallback: Bedingungsabgleich von Automatisierungsregeln (Analyseregeln-ID, Titel- und Schweregradbedingungen, UND-verknüpft wie bei Sentinel). Regeln, deren Bedingungen nur Status/Taktiken/Entitäten sind, werden so behandelt, als würden sie auf jeden Incident zutreffen.
FalsePositive-VerhältnisIncidents, die als falsch positiv klassifiziert wurden ÷ Gesamt-Incidents

Verrauschtheits-Score-Formel:

Jede Metrik wird in einen Perzentil-Rang über alle Regeln mit mindestens einem Incident umgewandelt. Der zusammengesetzte Score ist eine gewichtete Mischung:``` Score = (Volume_percentile × 0.35) + (AutoClose_percentile × 0.40) + (FalsePositive_percentile × 0.25)

root@kitploit:~
- **Volumen-Perzentil (35 %)**: Wie viele Vorfälle eine Regel im Vergleich zu anderen Regeln erzeugt.
- **AutoClose-Perzentil (40 %)**: Wie oft Vorfälle automatisch durch Automatisierungsregeln geschlossen werden (höchste Gewichtung, da automatisches Schließen das stärkste Signal für Alarme mit geringem Wert ist).
- **FalsePositive-Perzentil (25 %)**: Wie oft Analysten das Ergebnis als Fehlalarm einstufen.

**Score-Schwellenwerte**:

| Score | Kennzeichnung | Bedeutung |
|---|---|---|
| ≥ 70 | Laut | Regel benötigt wahrscheinlich Feintuning oder Deaktivierung |
| ≥ 50 | Beobachten | Regel zeigt frühe Anzeichen von Lautstärke |
| < 50 | Gesund | Regel liegt im normalen Bereich |
| N/A | - | Regel hat keine zugehörigen Vorfälle, oder weniger als 3 Regeln haben Vorfälle, sodass es nichts zum Vergleichen gibt |

Vorfälle werden nach der analytischen Regel-ID gruppiert (mit Rückfall auf Regelname, dann Titel), sodass zwei Regeln mit demselben Anzeigenamen separat bewertet werden.

Regeln mit einem Score ≥ 70 und mindestens 5 Vorfällen werden automatisch als **Empfehlungen mit hoher Priorität** in der Ansicht „Empfehlungen“ angezeigt.

### 5. Interaktives Dashboard

Das Hauptmenü bietet diese Ansichten:

- **Dashboard**: Übersichtsstatistiken, Top-10 der teuersten Tabellen (veraltete und Legacy-Quellen tragen ein Abzeichen), Abdeckungsbalken, Aufbewahrungs-Compliance-Zusammenfassung, Hinweis zu Korrelationsausschlüssen
- **Empfehlungen anzeigen**: Priorisierte Maßnahmen mit geschätzten monatlichen Einsparungen, erweiterbar zur Anzeige der vollständigen Liste, wenn mehr als 10 vorhanden sind
- **Erkennungsbewertung anzeigen**: Kosten-Wert-Matrix-Zusammenfassung, Regel- und Hunting-Abfrageabdeckung pro Tabelle, Primär-/Sekundär-Drilldown, Liste der von Korrelation ausgeschlossenen Regeln
- **Erkennungsanalysator anzeigen**: Perzentilbasierte Rangliste lauter Regeln mit Schließungsqualitätsindikatoren (wenn Sie `-IncludeDetectionAnalyzer` verwendet haben), durchsuchbarer Regelbrowser
- **SOC-Optimierung anzeigen**: Microsofts eigene Verbesserungsvorschläge mit Drilldown
- **Aufbewahrungsbewertung anzeigen**: Tabellen unter den empfohlenen Mindestwerten mit aktueller vs. empfohlener Aufbewahrung, Plantyp und Fehlbetrag, plus XDR-Hinweiszeilen
- **Datentransformationen anzeigen**: DCR-Transformationsinventar mit Klassifizierung des Transformationstyps und vollständigem KQL pro Tabelle
- **Protokoll-Tuning / Transformationen**: Live-Tuning-Vorschläge, Wissensbasis-Split-KQL und ein Bewerter pro Tabelle mit einer Aufbewahrungs-/Typänderung für eine einzelne Tabelle
- **Alle Tabellen anzeigen**: Die vollständige Liste mit Klassifizierung, Plänen, Kosten, Regeln, Aufbewahrung (farbcodiert) und Bewertung; wählen Sie eine Tabelle für ein Detailpanel aus (Abdeckungsquellen, Planunterstützung, Aufbewahrung, Status, deren Empfehlungen)
- **Aufbewahrung und Typ von Tabellen verwalten**: Massenaufbewahrungs- und Plan-Assistent mit Vorschau und Anwenden
- **Wörterbuch**: Jeder Begriff, den das Tool verwendet (Klassifizierung, Kosten- und Erkennungsstufen, Bewertungen, Abdeckungsquellen, die 13 Empfehlungstypen, Metriken und Score-Kennzeichnungen des Erkennungsanalysators, Tabellenpläne, Lebenszyklusstatus, XDR-Zustände, Transformationstypen) mit denselben Definitionen wie in dieser README, bereitgestellt aus `Data/dictionary.json`
- **Bericht exportieren**: Wählen Sie ein Format, dann einen Pfad (Verzeichnis für eine Datei mit Zeitstempel oder einen Dateinamen; Eingabetaste behält das aktuelle Verzeichnis) und schreiben Sie JSON, Markdown oder HTML direkt aus dem Menü
- **XDR-Analyse** erscheint auf dem Dashboard, wenn Sie `-IncludeDefenderXDR` verwendet haben

---

## Die Klassifizierungsdatenbank

Befindet sich unter `Data/log-classifications.json`. **481 Einträge**, **243 Connectors**, **22 Kategorien**.

### Was in jedem Eintrag enthalten ist

| Feld | Was es enthält |
|---|---|
| `tableName` | Log-Analytics-Tabellenname (`SecurityEvent`, `SigninLogs` usw.) |
| `connector` | Welcher Datenconnector diese Tabelle erzeugt |
| `classification` | `primary` (Sicherheitswert) oder `secondary` (unterstützende Telemetrie) |
| `category` | Sicherheitskategorie: Identität & Zugriff, Netzwerksicherheit usw. |
| `description` | Verständliche Zusammenfassung dessen, was in der Tabelle enthalten ist |
| `keywords` | Begriffe für den Keyword-Lückenanalyse-Abgleich |
| `mitreSources` | MITRE-ATT&CK-Datenquellenzuordnungen |
| `recommendedTier` | `analytics` (Hot-Tier) oder `datalake` (Kandidat für Hilfsspeicher) |
| `recommendedRetentionDays` | Mindestempfehlung für die gesamte Aufbewahrungsdauer in Tagen (regulatorische Richtlinien) |
| `isFree` | Ob Microsoft diese Tabelle kostenlos erfasst (die Laufzeit verwendet zuerst `Usage.IsBillable`) |
| `status` | Optional. `deprecated` (Connector eingestellt oder Erfassung gestoppt) oder `legacy` (älterer Erfassungspfad mit dokumentiertem Nachfolger) |
| `replacedBy` | Optional. Tabellennamen für die Migration; vorhanden, wann immer `status` gesetzt ist (kann leer sein) |
| `xdrStreamable` | Optional, nur Defender-Tabellen. `true` für die 21 Tabellen, die der Defender-XDR-Connector streamt; `false` für Nur-Portal- und TVM-Tabellen |
| `platform` | Optional. `true` für Tabellen, die Sentinel selbst verbraucht (`SecurityIncident`, `Usage`, `Watchlist`, ...), die niemals Analyseregeln benötigen |

Tabellen mit einem `status` zeigen ein Abzeichen in der TUI und in den Berichten, und alle, die weiterhin Daten erfassen, erzeugen eine `DeprecatedSource`-Empfehlung, die den Ersatz benennt. Tabellen mit `xdrStreamable: false` werden vom XDR-Checker niemals als XDR-Streaming-Kandidaten behandelt.

### Primäre vs. sekundäre Sicherheitsdaten

**Primär** (278 Einträge): Die Tabellen, auf denen Sie tatsächlich Erkennungen aufbauen. Anmelde-Protokolle, Sicherheitswarnungen, Bedrohungsdaten, Audit-Trails, Schwachstellenbefunde, Firewall-Treffer, EDR-Telemetrie.

**Sekundär** (203 Einträge): Unterstützendes Material. Leistungsmetriken, Infrastrukturdiagnosen, Netzwerkflussvolumina, Inventarschnappschüsse, Konfigurations-Baselines, Health-Checks.

### Kategorien auf einen Blick

| Kategorie | Anzahl | Beispiele |
|---|---|---|
| Identität & Zugriff | 51 | `SigninLogs`, `MicrosoftServicePrincipalSignInLogs`, `OktaSSO` |
| Netzwerksicherheit | 49 | `AZFWNetworkRule`, `NSPAccessLogs`, `DarktraceModelAlerts_CL` |
| Cloud-Control-Plane | 37 | `AzureActivity`, `AZKVAuditLogs`, `GoogleWorkspaceReports` |
| Netzwerkfluss | 36 | `NTANetAnalytics`, `CommonSecurityLog`, `AZFWFatFlow` |
| Endpunkterkennung | 33 | `DeviceProcessEvents`, `CrowdStrikeAuditEvents`, `SentinelOneAlertsV2_CL` |
| Anwendungsprotokolle | 32 | `AppServiceHTTPLogs`, `AppServiceAuditLogs`, `DynatraceAttacksV2_CL` |
| E-Mail-Sicherheit | 29 | `EmailEvents`, `CampaignInfo`, `Ttp_Url_CL` |
| Sicherheitswarnungen | 29 | `SecurityAlert`, `SentinelBehaviorInfo`, `DisruptionAndResponseEvents` |
| Schwachstellenverwaltung | 23 | `DeviceTvmSoftwareVulnerabilities`, `Rapid7InsightVMCloudVulnerabilities` |
| Cloud-Sicherheit | 20 | `EnrichedMicrosoft365AuditLogs`, `OAuthAppInfo`, `PowerAppsActivity` |
| Endpunkttelemetrie | 18 | `DeviceInfo`, `Windows365NetworkLogs`, `SentinelOneAgents_CL` |
| Posture-Management | 17 | `ExposureGraphNodes`, `SecurityNestedRecommendation`, `ZTSMetadata` |
| Datensicherheit | 16 | `PurviewDataSensitivityLogs`, `DataSecurityEvents`, `PowerPlatformDlpActivity` |
| Datenplattform | 16 | `SQLSecurityAuditEvents`, `CDBControlPlaneRequests`, `SnowflakeLogin_CL` |
| Plattform-Health | 14 | `SentinelHealth`, `Usage`, `SecurityCaseEvent` |
| Container & K8s | 13 | `AKSAudit`, `CloudProcessEvents`, `GKEAudit` |
| Infrastrukturdiagnose | 13 | `AzureMetrics`, `AGWPerformanceLogs`, `ContainerAppSystemLogs` |
| Bedrohungsdaten | 10 | `ThreatIntelIndicators`, `ThreatIntelObjects`, `CybleVisionAlerts_CL` |
| Konfigurationsverwaltung | 8 | `ConfigurationData`, `AVNMRuleCollectionChange` |
| SAP-Sicherheit | 7 | `ABAPAuditLog`, `SAPBTPAuditLog_CL`, `Onapsis_Defend_CL` |
| Speicherzugriff | 6 | `StorageBlobLogs`, `CloudStorageAggregatedEvents`, `AWSS3ServerAccess` |
| IoT/OT-Sicherheit | 4 | `RadiflowEvent`, `DragosAlerts_CL`, `Phosphorus_CL` |

### Tabellenplanunterstützung

`Data/basic-plan-tables.json` und `Data/auxiliary-plan-tables.json` listen die integrierten Tabellen auf, die die [Azure Monitor-Tabellenfunktionsmatrix](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/tables-features) als Unterstützung der Basic- und Auxiliary- (Data Lake) Pläne kennzeichnet. Der Aufbewahrungs-Assistent verwendet die Basic-Liste zur Validierung von Planwechseln, und die `DataLake`-Empfehlung schlägt die Lake-Stufe nur für Tabellen vor, die diese unterstützen, mit Rückfall auf einen Basic-Plan-Vorschlag, wo dies die niedrigste unterstützte Stufe ist. DCR-basierte benutzerdefinierte Tabellen unterstützen beide Pläne; klassische benutzerdefinierte Tabellen unterstützen keinen von beiden. Beide Dateien werden für jede Version aus dieser Matrix neu generiert.

### Benutzerdefinierte Klassifizierungen

Sie können eine eigene Klassifizierungsdatei bereitstellen, um Einträge für Tabellen **hinzuzufügen**, die nicht in der integrierten Datenbank enthalten sind, oder vorhandene Einträge zu **überschreiben**, wenn die Standardwerte nicht zu Ihrer Umgebung passen. Benutzerdefinierte Einträge haben Vorrang vor integrierten, wenn derselbe `tableName` in beiden vorkommt.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' `
    -CustomClassificationPath './my-classifications.json'

Das benutzerdefinierte Schema der Datei entspricht dem von Data/log-classifications.json, einem Array von Objekten:```json [ { "tableName": "MyCustomApp_CL", "connector": "Custom Logs (DCR)", "classification": "primary", "category": "Application Logs", "description": "Security-relevant audit events from an internal application", "keywords": ["custom", "internal", "audit"], "mitreSources": [], "recommendedTier": "analytics", "isFree": false }, { "tableName": "AzureMetrics", "connector": "Azure Monitor", "classification": "primary", "category": "Infrastructure Diag", "description": "Override: promoted to primary because we detect on Azure resource metrics in this environment", "keywords": ["metrics", "azure", "infrastructure", "monitoring"], "mitreSources": [], "recommendedTier": "analytics", "isFree": false } ]

root@kitploit:~
Siehe `Data/custom-classifications-example.json` für eine einsatzbereite Vorlage.

### Wie die Klassifizierungen erstellt wurden

Die Primär-/Sekundärbewertung wurde teilweise vom Autor durchgeführt und anschließend durch Einspeisung von Microsofts Datenkonnektor- und Tabellendefinitionen in KI mit einer menschlichen Bewertungsbasis erstellt, wobei Microsoft-Best Practices und Industriestandards als Klassifizierungskriterien dienten. Falls etwas für Ihre Umgebung unpassend erscheint, vertrauen Sie Ihrem eigenen Kontext mehr als dem Tool – KI kann Fehler machen, und Kontext ist entscheidend.

Die Klassifizierungskriterien stammen aus den folgenden Quellen:

**ACSC (Australian Signals Directorate, Australian Cyber Security Centre)**
- [ACSC: Best practices for event logging and threat detection (Aug 2024)](https://www.cyber.gov.au/sites/default/files/2024-08/best-practices-for-event-logging-and-threat-detection.pdf)
- [ACSC: Priority logs for SIEM ingestion - Practitioner guidance (May 2025)](https://www.cyber.gov.au/business-government/detecting-responding-to-threats/event-logging/implementing-siem-soar-platforms/priority-logs-for-siem-ingestion-practitioner-guidance)

**CISA (Cybersecurity and Infrastructure Security Agency)**
- [CISA: Guidance for Implementing M-21-31: Improving the Federal Government's Investigative and Remediation Capabilities](https://www.cisa.gov/sites/default/files/2023-02/TLP%20CLEAR%20-%20Guidance%20for%20Implementing%20M-21-31_Improving%20the%20Federal%20Governments%20Investigative%20and%20Remediation%20Capabilities_.pdf)
- [CISA: Microsoft Expanded Cloud Logs Implementation Playbook (2025)](https://www.cisa.gov/sites/default/files/2025-01/microsoft-expanded-cloud-logs-implementation-playbook-508c.pdf)

**Microsoft**
- [Microsoft Sentinel data connectors reference](https://learn.microsoft.com/en-us/azure/sentinel/data-connectors-reference)
- [Microsoft Sentinel tables & connectors reference](https://learn.microsoft.com/en-us/azure/sentinel/sentinel-tables-connectors-reference)
- [Azure-Sentinel GitHub repo](https://github.com/Azure/Azure-Sentinel) (Community-Analyseregeln, Konnektordefinitionen, Lösungsvorlagen)
- [Microsoft Sentinel billing](https://learn.microsoft.com/azure/sentinel/billing)
- [Microsoft Sentinel data tier management](https://learn.microsoft.com/azure/sentinel/manage-data-overview)

**MITRE**
- [MITRE ATT&CK Data Sources](https://attack.mitre.org/datasources/)

**NIST (National Institute of Standards and Technology)**
- [NIST SP 800-92: Guide to Computer Security Log Management](https://csrc.nist.gov/pubs/sp/800/92/final)

**NSA (National Security Agency)**
- NSA Cyber Event Forwarding Guidance

**NCSC-UK (National Cyber Security Centre - United Kingdom)**
- NCSC-UKs "What exactly should we be logging?"

**Google Cloud**
- [Google Cloud Audit Logs overview](https://docs.cloud.google.com/logging/docs/audit)
- [Google Cloud Audit Logs best practices](https://docs.cloud.google.com/logging/docs/audit/best-practices)


Es wurden auch andere Quellen verwendet, zusammen mit der „Expertise" des Autors, falls man sie als solche bezeichnen kann.
---

## Projektstruktur```
LogHorizon.psd1              Module manifest (v0.9.0)
LogHorizon.psm1              Module loader
Public/
  Invoke-LogHorizon.ps1              Entry point, the main orchestrator
  Set-LogHorizonTableRetention.ps1   Scriptable table retention and plan changes
Private/
  Connect-Sentinel.ps1       Azure auth + workspace resolution
  Get-TableUsage.ps1         KQL query for ingestion volumes
  Get-AnalyticsRules.ps1     Analytics rules + table/field extraction + correlation tags
  Get-HuntingQueries.ps1     Hunting queries + table extraction
  Get-DataConnectors.ps1     Data connector inventory
  Get-DataTransforms.ps1     DCR transform discovery, split KQL generation
  Get-DefenderXDR.ps1        Defender XDR analysis (optional)
  Get-Incidents.ps1          Incident fetch + SentinelHealth auto-close attribution
  Get-AutomationRules.ps1    Automation rule inventory + close-logic attribution
  Get-SocOptimization.ps1    SOC improvement recommendations
  Get-TableRetention.ps1     Per-table retention, archive, and plan type
  Get-CollectionCache.ps1    Collection cache (key, path, read, write)
  Get-LogHorizonEndpoint.ps1 ARM / Log Analytics / Graph endpoints for the signed-in Azure environment
  Get-LogHorizonDictionary.ps1 Loads the term dictionary shown by the Dictionary menu
  Invoke-AzRestWithRetry.ps1 REST wrapper: retry on 429/5xx/transport errors, async operation polling
  Invoke-Classification.ps1  Static DB + heuristic classification + _SPLT_CL detection + custom file validation
  Invoke-Analysis.ps1        Cost-value matrix + recommendations + Detection Analyzer + XDR Checker + split suggestions
  Set-TableRetention.ps1     Retention change set, preview, Tables API apply engine, plan support lookups
  Write-Report.ps1           Spectre.Console TUI rendering
  Export-Report.ps1          JSON / Markdown / static HTML export with shared section renderer
Data/
  log-classifications.json              481-entry classification knowledge base
  basic-plan-tables.json                Built-in tables that support the Basic plan (from the Azure Monitor feature matrix)
  auxiliary-plan-tables.json            Built-in tables that support the Auxiliary / Data Lake plan
  implicit-consumers.json               Non-KQL rule kinds to tables, plus platform tables
  dictionary.json                       Term definitions for the Dictionary menu (kept 1:1 with this README, enforced by tests)
  high-value-fields.json                Split KQL knowledge base: 165 tables with curated fields and split hints
  field-frequency-stats.json            Community field frequency stats mined from the Azure-Sentinel rule corpus
  custom-classifications-example.json   Example custom classification override file
  ReportTemplate.html                   Static HTML report template (pure-CSS tabs, zero JS, CSP meta)
Tests/
  LogHorizon.Tests.ps1       437 Pester v5 unit tests

Wie die Wissensdatenbanken erzeugt werden

Die aufgeteilten KQL-Wissensdatenbanken high-value-fields.json und field-frequency-stats.json werden offline aus dem öffentlichen Azure/Azure-Sentinel-Repository erstellt (Solutions/, Detections/, Hunting Queries/, etwa 3.800 YAML-Regeldateien). Jede Abfrage wird mit denselben Get-TablesFromKql- und Get-FieldsFromKql-Funktionen ausgeführt, die das Modul zur Laufzeit verwendet, um Feldhäufigkeitszählungen pro Tabelle zu erstellen, aus denen drei Ebenen von Fallback-Feldern abgeleitet werden:

  • Universelle Felder: Felder, die in mehr als 50 % aller Tabellen vorkommen (z. B. TimeGenerated)
  • Kategorie-Standardwerte: Felder, die in mehr als 40 % der Tabellen innerhalb einer Klassifikationskategorie vorkommen
  • Pro-Tabellen-Statistiken: Rohe Feldhäufigkeitszählungen für Tabellen mit mindestens 3 referenzierenden Regeln

Die abgebauten Felder werden in die kuratierte high-value-fields.json zusammengeführt (kuratierte Einträge bleiben erhalten, neu entdeckte Tabellen mit mindestens 3 Regeln und 3 aussagekräftigen Feldern werden hinzugefügt).

Zur Laufzeit verwendet Get-SplitKql eine Fallback-Hierarchie: kuratierter KB-Eintrag -> Live-Regel-/Hunting-Feldanalyse -> Community-Pro-Tabellen-Statistiken -> Kategorie-Standardwerte -> universelle Felder. Die Häufigkeit von Feldern ist keine perfekte Methode, aber es ist nützlich, sie zu kennen.

Tests

437 Pester-v5-Tests, keine Azure-Konnektivität erforderlich. Führen Sie sie aus einer normalen PowerShell-Sitzung aus, nicht aus dem integrierten VS-Code-Terminal:```powershell Invoke-Pester ./Tests/LogHorizon.Tests.ps1 -Output Detailed

root@kitploit:~
## Lizenz

GPL-3.0. Siehe [LICENSE](https://github.com/lnfernux/log-horizon/blob/main/LICENSE).

## Versionshistorie

| Version | Datum | Änderungen |
|---|---|---|
| 0.9.0 | 2026-09-06 | Remediation-Release aus einer vollständigen Code- und Datenprüfung. Korrektheit: planbewusste Preisgestaltung über `Usage.Plan` und `Usage.IsBillable` mit Basic- und Data-Lake-Tarifen sowie Abrechnungs-GB (1000 MB), Detection-Analyzer-Auto-Close-Zuordnung beschränkt auf aktivierte Close/Playbook-Regeln (`triggeringLogic.isEnabled`), Incidents über `2025-09-01` mit `$top=1000`, implizite Abdeckung für Nicht-KQL-Regelarten und Plattformtabellen (`implicit-consumers.json`), interaktiver Aufbewahrungs-Baseline-Check, einzelne Empfehlungssortierung. Transforms: DCR-Erkennung auf Abonnementebene, gefiltert auf den Ziel-Workspace, plus der Workspace-Transformations-DCR und -Zuordnungen, mit sichtbarem Status und Warnung bei fehlender Berechtigung; Workspace- und mehrstufiges Transform-Parsing; Split-KQL überschnitten mit dem Live-Tabellenschema. Robustheit: Sammlungs-Cache standardmäßig aktiviert (`-NoCache`, `-RefreshCache`, `-CacheMaxAgeMinutes`, `-CachePath`), Authentifizierung vor dem Spinner mit danach ausgegebenen Warnungen, maskierte TUI- und Markdown-Ausgabe, Exportpfadauflösung, die Verzeichnisse erstellt und den geschriebenen Pfad zurückgibt, CSP-Meta in HTML, REST-Wiederholungen bei Übertragungsfehlern und Location-artiger asynchroner Abschluss, Workspace-Auflösung über REST (`Az.Resources` entfernt), Validierung benutzerdefinierter Klassifikationen, PascalCase-bewusste Heuristiken mit Microsoft-First-Party-Fallback, Regex-Timeouts. Endpunkte folgen der angemeldeten Azure-Umgebung (Government, China) und API-Versionen wurden auf SecurityInsights `2025-09-01`, OperationalInsights `2025-07-01`, Empfehlungen `2025-10-01-preview` verschoben. Daten: Klassifikationsdatenbank 345 -> 481 Einträge mit `status`/`replacedBy`/`xdrStreamable`/`platform`-Schlüsseln, 80+ First-Party- und 35 Nachfolgetabellen, Korrekturen von Connector-Labels, `isFree`-Korrekturen; `basic-plan-tables.json` neu generiert und neue `auxiliary-plan-tables.json` aus der Azure-Monitor-Tabellen-Feature-Matrix; `DeprecatedSource`-Empfehlung, planbewusste Data-Lake-Empfehlung mit Basic-Fallback, XDR-Checker berücksichtigt Streamability, Lebenszyklus-Badges in TUI und Exporten. Prüfungsdurchlauf: Cache-Schlüssel deckt Preisgestaltung und Modulversion ab, benutzerdefinierte Klassifikations-Booleans und -Stufen werden geparst statt gecastet, schwerwiegendkeitsbewusste Auto-Close-Zuordnung, Split-KQL-Prädikate gegen das Live-Schema geprüft, XDR-Abrufstatus wird angezeigt statt eines stillen `$null`, Ausgabepfade ohne Erweiterung sind Dateien, Incident-Owner-Identitäten werden nicht mehr erfasst. Wörterbuchmenü in der TUI mit jedem vom Tool verwendeten Begriff, unterstützt durch `Data/dictionary.json` und durch Tests am Code verankert. Automatisierungsregel- und Defender-Custom-Detection-Objekte werden auf die verbrauchten Felder projiziert, sodass Autoridentitäten (createdBy, lastModifiedBy, zugewiesene Besitzer) nie den Cache oder die Exporte erreichen. GPL-3.0-Lizenz. 437 Tests |
| 0.8.0 | 2026-05-26 | Interaktive Tabellen-Aufbewahrungsverwaltung hinzugefügt mit neuem Bulk-TUI-Flow und Einzeltabellen-Update-Einstiegspunkt, plus dem öffentlichen Befehl `Set-LogHorizonTableRetention`. Tables-API-PATCH-Anwendungsmodul mit Validierung, Azure-Async-Operation-Polling und zweistufigem Fallback (kombiniertes PATCH, dann nur Plan plus nur Aufbewahrung) für robuste Aufbewahrungsupdates hinzugefügt. Fokussierte Pester-Abdeckung für Validierung, Payload-Form, Fallback und öffentliches Befehlsmapping hinzugefügt. Behebt außerdem einen Randfall/Bug, bei dem Benutzer Empfehlungen erhielten, Data-Lake-Tabellen auf die Data-Lake-Stufe umzustellen, obwohl noch Analysedaten in Sentinel vorhanden waren |
| 0.7.1 | 2026-05-15 | Planbewusstheit über `Usage.Plan` hinzugefügt, ohne den konfigurierten Tabellenplan zu ersetzen: Die Analyse verfolgt nun die beobachtete Planhistorie, kennzeichnet Multi-Plan-Nutzung und Konfiguriert-vs-Beobachtet-Abweichungen und zeigt Plandaten im Dashboard, Tabellen-Drilldown, View All Tables, Aufbewahrungsbewertung und Exporten an. Detection-Analyzer-Auto-Close-Zuordnung korrigiert, sodass die Timing-Heuristik nur angewendet wird, wenn keine aktivierten Automatisierungsregeln existieren. 203 Tests bestanden |
| 0.7.0 | 2026-04-16 | Detection Assessment mit Kosten-Wert-Matrix-Zusammenfassungstabelle aktualisiert (Primär/Sekundär x7 Bewertungskategorien mit Farbcodierung), Drilldown-Untermenü für Primär-/Sekundärtabellen mit Kosten-/Detection-Stufen-Spalten. Detection Analyzer mit GB-gewichteten Volumenabdeckungsbalken aktualisiert (Detection/Hunting/kombinierte GB als Prozentsatz der Gesamtaufnahme neben den vorhandenen Tabellenzahl-Balken). Adaptive Anzeigeverbesserungen für Detection Analyzer (dynamische Balkenbreite, Regelnamenskürzung, bedingtes Ausblenden von Spalten basierend auf Konsolenbreite). 193 Tests bestanden |
| 0.6.3 | 2026-04-11 | Kleines Update für PSGallery |
| 0.6.2 | 2026-04-11 | Log-Tuning-/Transforms-Menü: Live-Daten-Tuning-Analyse (Feldnutzung pro Tabelle aus bereitgestellten Regeln/Hunting-Abfragen, Filter/Projekt/kombinierte KQL-Generierung, Einsparungsschätzungen), Schema-Spaltenextraktion aus der Tables-API, `Get-SplitKql`-Fallback-Hierarchie (Community-Statistiken → Kategorie-Standardwerte → universelle Felder), umfassender Tabellenbewerter mit Feldnutzungsmatrix, vereinheitlichte KB- + Live-Tuning-Exportabschnitte, `Build-FieldKnowledgeBase.ps1`-Mining-Skript für den Azure-Sentinel-GitHub-Regelkorpus. Detection Analyzer: SentinelHealth-basierte Auto-Close-Zuordnung (primär) mit operatorbewusstem Regelabgleich-Fallback, Boolean-Bedingungs-Wrapper-Parsing, Resolved-Status-Erkennung, GUID-Endabgleich für ARM-Ressourcen-IDs. Abdeckung jetzt tabellenzahlbasiert über alle Tabellen (einschließlich Free-Tier). Bewertungs-Haftungsausschluss zu TUI und Exporten hinzugefügt. 174 Tests |
| 0.6.1 | 2026-04-10 | Fehlerbehebungen: `$kqlKeywords`-Filterung jetzt auf Dateiebene gemeinsam genutzt (war in `Get-TablesFromKql` undefiniert), `[CmdletBinding()]` zu allen Hilfsfunktionen hinzugefügt, Defender-vereinheitlichter Check vereinfacht, Geister-`-RuleCount`-Testparameter entfernt. Robustheit: `Get-HuntingQueries`-Paginierung, `Invoke-AzRestWithRetry`-Wiederholungswrapper mit exponentiellem Backoff für 429/5xx, `PricePerGB`-Validierung, `Write-Verbose` in Schlüsselfunktionen. Dokumentation: Versionsbadge, DB-Anzahl, Voraussetzungen mit Manifest abgeglichen |
| 0.6.0 | 2026-04-10 | Dynamische XDR-Streaming-Erkennung mit 21 `KnownXDRTables` (vorher hartcodiert 18), `XDRState` pro Tabelle (`NotStreaming`/`Analytics`/`Basic`/`Auxiliary`), Auxiliary als Data-Lake-Stufe erkannt, nicht gestreamte XDR-Tabellen als Information/Low-Empfehlungen mit `NotStreamedCount` angezeigt, Aufbewahrungsanalysator zeigt nicht gestreamte XDR-Tabellen als „XDR only (30d)“, Übersichts-Stufenaufschlüsselung (Analytics/Basic/Data Lake + nicht gestreamt), Export-Report Auxiliary→„data lake“-Labels, Klassifikationsdatenbank auf 345 Einträge aktualisiert (+`DeviceNetworkInfo`, `DeviceInfo`→Sekundär/Data Lake, `DeviceImageLoadEvents` und `IdentityQueryEvents`→Data-Lake-Stufe), 15 neue Pester-Tests (insgesamt 121) |
| 0.5.0 | 2026-04-03 | Statischer HTML-Export mit reinen CSS-Tabs (null JS, kein CDN, vollständig eigenständig), vereinheitlichter MD/HTML-Abschnitts-Renderer, vollständige JSON-Datenerfassung (dataTransforms, correlationExcluded/Included, streamingTables), `-NonInteractive`-Schalter für CI/Pipeline-Nutzung, `md`-Format-Alias, datetime-gestempelte automatische Dateinamen, vollständige KQL-Anzeige in DCR-Transforms (keine Kürzung), mehrzeilige KQL-Behandlung in Markdown-Tabellen, korrigierte Regex-`$`-Backreference-Beschädigung beim HTML-Token-Ersetzen, interne Helfer umbenannt, um PowerShell-Alias-Konflikte zu vermeiden (`h`→`hEnc`, `md`→`mdEsc`), 33 neue Pester-Tests (insgesamt 106) |
| 0.4.1 | 2026-04-03 | Sicherheits- und Stabilitätskorrekturen – Token-Speicherbereinigung, Ausgabepfadvalidierung und XSS-Schutz, REST-API-Paginierungslimits, Behebung der Modullader-Fehlermaskierung und Auflösung von PSScriptAnalyzer-Warnungen hinzugefügt |
| 0.4.0 | 2026-04-02 | Transform-Erkennung (DCR-Auflistung + Transform-Typ-Klassifikation), Split-Tabellen-Erkennung (`_SPLT_CL`), Split-KQL-Helfer mit 15-Tabellen-Wissensbasis (`high-value-fields.json`) + Regelanalyse-Fallback, portalfertige nur-Bedingungs-KQL-Ausgabe, erweiterbare Empfehlungsliste, Split-KQL-Vorschlags-TUI-Menü |
| 0.3.0 | 2026-04-02 | Log-Aufbewahrungs-Compliance-Analyse (CISA M-21-31, NIST SP 800-92, NCSC-UK, ASD ACSC, NSA), Korrelations-Tag-Erkennung (`#DONT_CORR#`/`#INC_CORR#`), Aufbewahrungsbewertungs-Menüansicht, Aufbewahrungsspalte in All Tables, `recommendedRetentionDays` im Klassifikationsschema |
| 0.2.2 | 2026-04-02 | SOC-Optimierungstabelle blendet Detail-Spalte auf schmalen Konsolen aus |
| 0.2.1 | 2026-04-02 | Unterstützung benutzerdefinierter Klassifikation (`-CustomClassificationPath`), angereicherte SOC-Optimierungsempfehlungen mit API-Vorschlägen/Drilldown, nur-aktive-Standardansicht, Unterdrückung der UTF-8-Kodierungswarnung |
| 0.2.0 | - | Erste öffentliche Veröffentlichung mit Klassifikationsmodul, Kosten-Wert-Bewertung, Spectre.Console-TUI, Export nach JSON/Markdown |
| 0.1.0 | - | Interne Version für die Entwicklung |

## Bekannte Probleme

### PwshSpectreConsole-UTF-8-Kodierungswarnung

Um die UTF-8-Ausgabe in Ihrem Terminal zu aktivieren, fügen Sie die folgende Zeile am Anfang Ihrer PowerShell-`$PROFILE`-Datei hinzu und starten Sie das Terminal neu:```powershell
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

Das Modul setzt dies beim Import automatisch, aber je nach Sitzung kann die Warnung trotzdem erscheinen. Sie ist rein kosmetisch und beeinträchtigt die Funktionalität nicht.

Mitwirken

Wenn du Probleme hast oder einen Beitrag leisten möchtest, erstelle einen Pull Request.

Gefällt dir das Tool?


Kauf mir einen Kaffee bei ko-fi.com

Detection AnalyzerBewertet Analyse-Regeln auf potenzielle Lautstärke anhand von Incident-Ergebnissen (Auto-Close-Verhältnis, False-Positive-Verhältnis und Incident-Volumen-Perzentile)
XDR-CheckerFügt eine XDR-fokussierte Beratungsebene hinzu: Streaming-Abdeckungsprüfungen und einjährige Data-Lake-Aufbewahrungsempfehlungen für XDR-bezogene Telemetrie
Benutzerdefinierte KlassifizierungenStellen Sie Ihr eigenes JSON bereit, um die integrierte Klassifizierungsdatenbank zu ergänzen oder zu überschreiben
Sammlungs-CacheGesammelte Arbeitsbereichsdaten werden lokal zwischengespeichert (Standard 60 Minuten), sodass erneute Ausführungen und Re-Exports Sekunden dauern; mit -NoCache deaktivierbar
Sovereign CloudsARM-, Log-Analytics- und Graph-Endpunkte folgen der angemeldeten Azure-Umgebung (Public, US Government, China)
Interaktive TUISpectre.Console-Dashboard mit Menüs, farbcodierten Tabellen, Drill-Downs, Aufbewahrungsassistent und ASCII-Art
ExportJSON-, Markdown- oder statischer HTML-Bericht zum Teilen mit dem Team
Sentinel-Analytics-Tarif: Erfassungspreis pro GB (Alias -ppgb)
-BasicPricePerGBdecimalNein1.15Basic-Logs-Preis pro GB
-LakePricePerGBdecimalNein0.20Auxiliary-/Data-Lake-Tarif: Preis pro GB (Erfassung + Verarbeitung)
-NonInteractiveswitchNein-TUI-Dashboard überspringen und direkt exportieren (oder Daten an die Pipeline zurückgeben, wenn -Output ausgelassen wird)
-CustomClassificationPathstringNein-Pfad zu einer benutzerdefinierten JSON-Datei zum Hinzufügen oder Überschreiben von Klassifizierungen (Alias -clf)
-NoCacheswitchNein-Sammelcache weder lesen noch schreiben
-RefreshCacheswitchNein-Frische Daten sammeln und den Cache-Eintrag überschreiben
-CacheMaxAgeMinutesintNein60Maximales Alter eines Cache-Eintrags zur Wiederverwendung (1–10080)
-CachePathstringNein$env:LOCALAPPDATA\LogHorizon\cacheVerzeichnis für Cache-Dateien
Bekannte Defender-XDR-Tabelle nicht gestreamt, ohne Abdeckung gestreamt, nicht an den Data Lake weitergeleitet oder unter der Ein-Jahres-Empfehlung
Streaming und Aufbewahrung für XDR-Telemetrie überprüfen
ErkennungsanalysatorRegel-Score >= 70 mit mindestens 5 Incidents (mit -IncludeDetectionAnalyzer)Die verrauschte Regel abstimmen oder deaktivieren