
Analyseur de sources de logs SIEM Microsoft Sentinel
J'ai dû répondre à "qu'est-ce que nous tirons réellement de ces journaux ?" ou "quels sont les journaux recommandés pour Microsoft Sentinel ?" plus de fois que je ne peux compter. La réponse dépend toujours de tellement de choses, mais nous pouvons être génériques. Alors j'ai construit ce petit outil ici.
Log Horizon se connecte à votre espace de travail Microsoft Sentinel (et optionnellement à Defender XDR), parcourt chaque table de journaux que vous ingérez, et vous indique si vous en tirez une valeur de sécurité ou si vous brûlez simplement de l'argent. Il classifie les tables, les note par rapport à vos règles de détection, et vous donne des recommandations concrètes avec des estimations d'économies.
Important : Il s'agit d'une approche générique. Si vous savez qu'une source de journal est importante pour votre environnement, ce contexte prévaut toujours sur ce que cet outil vous dit. Les classifications sont un point de départ, pas une vérité absolue.
Vous voulez en savoir plus ? J'ai quelques articles sur Log Horizon sur mon blog :
[!CAUTION] Avertissement
Cet outil est développé et maintenu avec l'aide de l'IA. Veuillez faire preuve de prudence lors de l'utilisation de cette solution et assurez-vous toujours de comprendre ce que vous exécutez avant de l'utiliser en production. Le développeur décline toute responsabilité en cas de vulnérabilités ou de problèmes.
En téléchargeant, installant ou utilisant cet outil, vous reconnaissez avoir lu, compris et accepté ces conditions.
| Ce dont vous avez besoin | Version |
|---|---|
| PowerShell | 7.0+ |
| Modules Az | Az.Accounts, Az.Resources |
| Autres modules | PwshSpectreConsole 2.6.3+ |
Si vous n'êtes pas déjà connecté à Azure, le module lancera Connect-AzAccount pour vous. Si vous l'êtes, il continuera simplement.
Assez simple :```powershell
Install-Module -Name Az.Accounts, Az.Resources -Scope CurrentUser Install-Module -Name PwshSpectreConsole -Scope CurrentUser
git clone https://github.com/lnfernux/log-horizon Import-Module ./log-horizon/LogHorizon.psd1
## Utilisation
### Les bases
Commencez par vous connecter à Azure et assurez-vous de sélectionner le bon compte et le bon abonnement :```powershell
Connect-AzAccount
Ensuite, nous pouvons invoquer l'outil :```powershell Invoke-LogHorizon -SubscriptionId '00000000-0000-0000-0000-000000000000' -ResourceGroup 'rg-sentinel' -WorkspaceName 'my-sentinel-ws'
<img width="860" height="842" alt="{F4FFA929-B24F-490C-BD3D-F75E214BCD93}" src="https://assets.kitploit.com/production/public/readmes/13110/ff9d1da85043d02a216df72913ecf63520310b8d820b1bd1278b8e4aca718494.png" />
Il dispose également d'un menu pour approfondir les autres résultats :
<img width="395" height="223" alt="{83CE9E6E-F373-49CD-BE05-182DB69F36BE}" src="https://assets.kitploit.com/production/public/readmes/13110/0606a575b10640bd13ebb87b930f74b2438167b5578cb843b412b4fcf273fc26.png" />
### Lacunes de mots-clés + Defender XDR
Vous voulez savoir s'il vous manque des tables liées à des fournisseurs spécifiques ? Insérez quelques mots-clés. Ajoutez `-IncludeDefenderXDR` si vous souhaitez également l'analyse XDR.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Keywords 'CrowdStrike','AWS','Okta' -IncludeDefenderXDR
Activer l'analyse de la qualité/bruit des règles basée sur les incidents et les règles d'automatisation :```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -IncludeDetectionAnalyzer -DetectionLookbackDays 90
### Exporter un rapport```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/
Vous pouvez désormais mettre à jour la rétention et le type de table directement depuis le TUI interactif :
Invoke-LogHorizon, puis choisissez Manage table retention and type dans le menu principal pour les mises à jour en masse de la rétention ou du type.Pour les scripts ou l'automatisation, utilisez la commande publique dédiée :```powershell
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -TotalRetentionInDays 365 -WhatIf
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'AzureDiagnostics','VMConnection' -TargetPlan Basic -TotalRetentionInDays 730
Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -RetentionInDays -1 -TotalRetentionInDays -1
### Mode non interactif / CI
Ignorez le TUI interactif et exportez directement vers un fichier — utile pour les pipelines ou les exécutions planifiées :```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/
Si vous omettez -Output, l'objet d'analyse est renvoyé au pipeline afin que vous puissiez le rediriger vers votre propre logique.
Le TUI interactif inclut un menu Suggestions de KQL divisé qui génère du KQL divisé prêt pour le portail pour les tables qui sont de bonnes candidates au fractionnement. Il affiche du KQL par table que vous pouvez coller directement dans l'éditeur de règles de fractionnement Sentinel, avec attribution de source (base de connaissances, analyse de règles ou combiné).
Le prix par défaut est de 5,59 $/GB (West Europe Simplified PAYG). Si votre niveau d'engagement est différent :```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61
### Tous les paramètres
| Paramètre | Type | Requis | Défaut | Description |
|---|---|---|---|---|
| `-SubscriptionId` | string | Oui | - | ID de l’abonnement Azure |
| `-ResourceGroup` | string | Oui | - | Groupe de ressources contenant l’espace de travail Sentinel |
| `-WorkspaceName` | string | Oui | - | Nom de l’espace de travail Log Analytics |
| `-WorkspaceId` | string | Non | - | ID de l’espace de travail (résolu automatiquement si omis) |
| `-Output` | string | Non | - | Format d’exportation : `json`, `markdown` / `md`, ou `html` |
| `-OutputPath` | string | Non | - | Chemin du fichier ou du répertoire pour l’exportation (génère automatiquement un nom de fichier horodaté lorsqu’il s’agit d’un répertoire) |
| `-Keywords` | string[] | Non | - | Mots‑clés pour l’analyse des lacunes (p. ex. `'AWS','CrowdStrike'`) |
| `-IncludeDefenderXDR` | switch | Non | - | Inclure l’analyse des détections personnalisées Defender XDR |
| `-IncludeDetectionAnalyzer` | switch | Non | - | Inclure l’analyse de bruit par règle utilisant les incidents et les règles d’automatisation |
| `-DetectionLookbackDays` | int | Non | 90 | Fenêtre de requête pour l’analyse de détection basée sur les incidents/automatisations (1‑365 jours) |
| `-DaysBack` | int | Non | 90 | Fenêtre de requête pour les données d’utilisation (1‑365 jours) |
| `-PricePerGB` | decimal | Non | 5.59 | Prix d’ingestion Sentinel par Go |
| `-NonInteractive` | switch | Non | - | Ignorer le tableau de bord TUI et exporter directement (ou renvoyer les données au pipeline si `-Output` est omis) |
| `-CustomClassificationPath` | string | Non | - | Chemin vers un fichier JSON personnalisé pour ajouter ou remplacer des classifications |
---
## Sous le capot
Il y a donc quatre phases.
### 1. Collecte des données
Le module se connecte à Azure et récupère les données des API Log Analytics et Security Insights :
| Source de données | API | Ce qu’on récupère |
|---|---|---|
| Utilisation des tables | Table `Usage` (KQL) | Volume d’ingestion par table sur votre fenêtre de requête |
| Règles d’analyse | REST Security Insights | Règles de détection actives + les tables qu’elles ciblent + les balises de corrélation |
| Requêtes de chasse | REST Security Insights | Requêtes de chasse enregistrées + tables référencées |
| Connecteurs de données | REST Security Insights | Inventaire des connecteurs installés |
| Optimisation SOC | REST Security Insights | Recommandations SOC intégrées de Microsoft |
| Rétention des tables | REST Azure Tables | Rétention, archivage et plan (Analytics/Basic) par table |
| Defender XDR | REST Security Insights | Détections personnalisées XDR et configuration de streaming (optionnel) |
| Incidents | REST Security Insights | Résultats des incidents (statut/classification), timing et indices de liaison aux règles pour le score de qualité des règles |
| Règles d’automatisation | REST Security Insights | Actions de fermeture d’incident au niveau des règles et conditions de correspondance de titre pour l’attribution de fermeture automatique |
| SentinelHealth | Log Analytics KQL | Événements d’exécution des règles d’automatisation avec les numéros d’incident pour une attribution définitive de fermeture automatique (optionnel, nécessite la supervision de l’état de santé) |
### 2. Classification
Chaque table est classée en deux passes :
**D’abord**, une recherche directe dans la base de connaissances de 345 entrées dans `Data/log-classifications.json`. Chaque entrée contient le nom du connecteur, la classification primaire/secondaire, la catégorie de sécurité, les correspondances de sources de données MITRE et un niveau de tarification recommandé.
**S’il n’y a pas de correspondance**, les règles heuristiques s’activent :
- Le nom contient des motifs de sécurité comme `Alert`, `Incident`, `Threat`, `Signin`, `Audit`, `Risk` -> **primaire**
- Le nom ressemble à de la télémétrie d’infrastructure : `Flow`, `Metric`, `Diagnostic`, `Perf`, `Heartbeat` -> **secondaire**
- Des règles d’analyse actives pointent vers elle -> **primaire**
- Volume élevé (>10 Go/mois) sans détection -> **secondaire**
- Aucun des cas ci-dessus -> **inconnue**
### 3. Score coût‑valeur
Chaque table reçoit un score sur plusieurs dimensions :
- **Niveau de coût** : Gratuit / Faible (<1 Go) / Moyen (1‑10 Go) / Élevé (10‑50 Go) / Très élevé (>50 Go)
- **Niveau de détection** : Aucune / Faible (1‑2 règles) / Moyen (3‑9 règles) / Élevé (10+ règles)
- **Évaluation** : Haute valeur / Bonne valeur / Couverture manquante / Révision nécessaire / Candidat pour le lac de données / Niveau gratuit
- **% de couverture** : Pourcentage de tables ayant au moins une règle d’analyse ou une requête de chasse les référençant, calculé comme `tablesAvecRegles / totalTables * 100`. La couverture par table additionne les règles d’analyse + les requêtes de chasse trouvées en analysant le KQL pour les noms de tables.
Ensuite, le module génère des recommandations :
| Type | Quand il se déclenche | Que faire |
|---|---|---|
| **Lac de données** | Secondaire + coût élevé + peu de détections | Déplacer vers le niveau Auxiliaire/Lac de données (~95 % d’économies) |
| **Faible valeur** | Coût élevé + zéro détections | Ajouter des règles, filtrer ou déplacer vers le lac de données |
| **Optimiser XDR** | Diffusé par XDR + 0 règle Sentinel + règles XDR existantes | Arrêter le streaming, utiliser le portail XDR unifié à la place |
| **Couverture manquante** | Primaire + zéro détections | Écrire des règles d’analyse pour tirer la valeur des données |
| **Filtrage à l’ingestion** | Primaire + >20 Go + <=3 détections | Appliquer une transformation à l’ingestion pour réduire le volume |
| **Candidat à la scission** | Primaire + volume élevé + détections + aucune transformation existante | Scinder la table — les lignes à haute valeur restent dans Analytics, le reste va dans le lac de données |
| **Rétention insuffisante** | Rétention de la table inférieure au minimum recommandé | Augmenter la rétention totale/d’archivage pour respecter les directives réglementaires |
### 4. Analyseur de détection (score de bruit)
Lorsque vous passez `-IncludeDetectionAnalyzer`, le module récupère les incidents récents et les règles d’automatisation, puis score chaque règle d’analyse activée pour son potentiel de bruit.
**Mesures par règle** (calculées à partir des données d’incidents) :
| Mesure | Comment c’est calculé |
|---|---|
| Total incidents | Nombre d’incidents liés à la règle |
| Ratio FermetureAuto | Incidents fermés par des règles d’automatisation ÷ total des incidents. Source principale : table SentinelHealth (correspondance définitive via le numéro d’incident). Solution de repli : correspondance de titre sensible à l’opérateur avec les conditions des règles d’automatisation. |
| Ratio FauxPositif | Incidents classés comme faux positifs ÷ total des incidents |
**Formule du score de bruit** :
Chaque mesure est convertie en rang percentile parmi toutes les règles ayant au moins un incident. Le score composite est un mélange pondéré :```
Score = (Volume_percentile × 0.35) + (AutoClose_percentile × 0.40) + (FalsePositive_percentile × 0.25)
Seuils de score :
Les règles avec un score ≥ 70 et au moins 5 incidents sont automatiquement présentées comme recommandations haute priorité dans la vue Recommandations.
-IncludeDefenderXDR)-IncludeDetectionAnalyzer)Située dans Data/log-classifications.json. 345 entrées, 190 connecteurs, 21 catégories.
Primaires (211 entrées) : les tables sur lesquelles vous construisez réellement des détections. Journaux de connexion, alertes de sécurité, renseignements sur les menaces, pistes d'audit, résultats de vulnérabilités, hits de pare-feu, télémétrie EDR.
Secondaires (133 entrées) : éléments de support. Métriques de performance, diagnostics d'infrastructure, volumes de flux réseau, instantanés d'inventaire, lignes de base de configuration, contrôles de santé.
Vous pouvez fournir votre propre fichier de classification pour ajouter des entrées pour des tables qui ne sont pas dans la base de données intégrée, ou remplacer des entrées existantes lorsque les valeurs par défaut ne correspondent pas à votre environnement. Les entrées personnalisées ont priorité sur les entrées intégrées lorsque le même tableName apparaît dans les deux.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' `
-CustomClassificationPath './my-classifications.json'
Le fichier personnalisé utilise le même schéma que `Data/log-classifications.json` — un tableau d'objets :```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
}
]
Voir Data/custom-classifications-example.json pour un modèle prêt à l'emploi.
La classification primaire/secondaire a été réalisée en partie par l'auteur, puis en introduisant les définitions des connecteurs de données et des tables de Microsoft dans une IA, avec une base de classification humaine, en utilisant les meilleures pratiques Microsoft et les normes du secteur comme critères de classification. Si quelque chose vous semble inadapté à votre environnement, faites confiance à votre propre contexte plutôt qu'à l'outil — l'IA peut commettre des erreurs, et le contexte est roi.
Les critères de classification ont été tirés des sources suivantes :
ACSC (Direction australienne des signaux, Centre australien de cybersécurité)
CISA (Agence de cybersécurité et de sécurité des infrastructures)
Microsoft
MITRE
NIST (Institut national des normes et de la technologie)
NSA (Agence de sécurité nationale)
NCSC-UK (Centre national de cybersécurité du Royaume-Uni)
Google Cloud
LogHorizon.psd1 Module manifest (v0.6.2) LogHorizon.psm1 Module loader Public/ Invoke-LogHorizon.ps1 Entry point, the main orchestrator 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 Invoke-AzRestWithRetry.ps1 REST retry wrapper with exponential backoff for 429/5xx Invoke-Classification.ps1 Static DB + heuristic classification + _SPLT_CL detection Invoke-Analysis.ps1 Cost-value matrix + recommendations + split suggestions Write-Report.ps1 Spectre.Console TUI rendering Export-Report.ps1 JSON / Markdown / static HTML export with shared section renderer Data/ log-classifications.json 345-entry classification knowledge base high-value-fields.json 15-table split KQL knowledge base with curated fields and split hints field-frequency-stats.json Community field frequency stats (generated by Build-FieldKnowledgeBase.ps1) custom-classifications-example.json Example custom classification override file ReportTemplate.html Static HTML report template (pure-CSS tabs, zero JS) Tests/ LogHorizon.Tests.ps1 Pester v5 unit tests
### Génération de la base de connaissances
Les bases de connaissances KQL divisées -- `high-value-fields.json` et `field-frequency-stats.json` -- sont générées hors ligne par `Build-FieldKnowledgeBase.ps1`. Le script :
1. Clone superficiellement le dépôt GitHub [Azure/Azure-Sentinel](https://github.com/Azure/Azure-Sentinel) (checkout sparse de `Solutions/`, `Detections/`, `Hunting Queries/`)
2. Analyse environ 3 800 fichiers de règles YAML et extrait les requêtes KQL via des expressions régulières
3. Exécute `Get-TablesFromKql` et `Get-FieldsFromKql` sur chaque requête pour construire des comptages de fréquence de champs par table
4. Calcule trois niveaux de champs de repli :
- **Champs universels** -- champs apparaissant dans >50% de toutes les tables (ex. `TimeGenerated`)
- **Valeurs par défaut par catégorie** -- champs apparaissant dans >40% des tables d'une catégorie de classification
- **Statistiques par table** -- comptages bruts de fréquence de champs pour les tables avec >= 3 règles référencées
5. Fusionne les champs extraits dans le fichier `high-value-fields.json` existant (reporte les entrées organisées, ajoute les tables nouvellement découvertes avec >= 3 règles et >= 3 champs significatifs)
6. Produit les deux fichiers dans `Data/`
À l'exécution, `Get-SplitKql` utilise une hiérarchie de repli : entrée de base de connaissances organisée -> analyse des champs de règles/hunting en direct -> statistiques communautaires par table -> valeurs par défaut par catégorie -> champs universels. La fréquence des champs n'est pas une méthode parfaite, mais elle est utile à connaître.
## Tests```powershell
Invoke-Pester ./Tests/LogHorizon.Tests.ps1 -Output Detailed
MIT
Pour activer la sortie UTF-8 dans votre terminal, ajoutez la ligne suivante en haut de votre fichier $PROFILE PowerShell et redémarrez le terminal :```powershell
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
Le module définit cela automatiquement lors de l'importation, mais selon votre session, l'avertissement peut toujours apparaître. C'est cosmétique et n'affecte pas le fonctionnement.
## Contribuer
Si vous rencontrez des problèmes ou souhaitez contribuer, créez une PR.
## Vous aimez l'outil ?
</br>
<a href='https://ko-fi.com/B0B61XGLO7' target='_blank'><img height='36' style='border:0px;height:36px;' src="https://assets.kitploit.com/production/public/readmes/13110/85ecfd7542830b8c7e246d37aec7c2b7397da003291ec4c56074631499f4829a.webp" border='0' alt='Offrez-moi un café sur ko-fi.com' /></a>
</br>
| Fonctionnalité | Description |
|---|
| Moteur de classification | Base de connaissances de 345 entrées couvrant 190+ connecteurs, 21 catégories, avec repli heuristique automatique pour les tables inconnues |
| Score coût-valeur | Matrice par table de niveau de coût vs niveau de détection avec évaluation combinée (Haute Valeur → Faible Valeur) |
| Recommandations | Actions priorisées : candidats pour le lac de données, tables sans détection, gaspillage de streaming XDR, filtrage à l'ingestion, insuffisance de rétention |
| Cartographie des détections | Mappe les règles analytiques, les requêtes de chasse et les détections XDR vers chaque table pour repérer les lacunes de couverture |
| Étiquettes de corrélation | Détecte les balises #DONT_CORR# / #INC_CORR# dans les descriptions de règles et signale les règles exclues de la corrélation Defender |
| Conformité de rétention | Compare la rétention réelle par rapport aux minimums recommandés basés sur les standards de l'industrie et les meilleures pratiques de sécurité |
| Optimisation SOC | Récupère les propres recommandations d'amélioration SOC de Microsoft depuis l'API Security Insights |
| Analyse des écarts par mots-clés | Signale les tables que vous devriez ingérer mais que vous n'ingérez pas, basé sur les mots-clés fournisseur/produit |
| Découverte des transformations | Découvre les règles de collecte de données (DCR) et classifie les transformations à l'ingestion (filtre, projection, enrichissement, agrégation) |
| Détection des tables fractionnées | Identifie les tables fractionnées _SPLT_CL et les relie aux tables parentes dans le moteur de classification |
| Générateur KQL fractionné | Génère du KQL prêt pour le portail à partir d'une base de connaissances organisée, d'une analyse de règles en direct et de statistiques de fréquence de champs communautaires -- format condition uniquement qui se colle directement dans l'éditeur de règles fractionnées Sentinel |
| Analyseur de détection | Note les règles analytiques pour leur potentiel de bruit en utilisant les résultats d'incidents (ratio de fermeture automatique, ratio de faux positifs et percentiles de volume d'incidents) |
| Vérificateur XDR | Ajoute une couche consultative XDR : vérifications de couverture de streaming et recommandations de rétention d'un an dans le lac de données pour les données télémétriques liées à XDR |
| Classifications personnalisées | Fournissez votre propre JSON pour ajouter ou remplacer la base de classification intégrée |
| TUI interactif | Tableau de bord Spectre.Console avec menus, tableaux colorés, explorations détaillées et art ASCII |
| Export | Rapport JSON, Markdown ou HTML statique pour partager avec l'équipe |
| Score | Étiquette | Signification |
|---|
| ≥ 70 | Bruyant | La règle nécessite probablement un réglage ou une désactivation |
| ≥ 50 | Surveillance | La règle montre des signes précoces de bruit |
| < 50 | Sain | La règle est dans la plage normale |
| N/D | — | La règle n'a pas d'incidents corrélés (aucun score possible) |
| Champ | Ce qu'il contient |
|---|
tableName | Nom de la table Log Analytics (SecurityEvent, SigninLogs, etc.) |
connector | Quel connecteur de données produit cette table |
classification | primary (valeur de sécurité) ou secondary (télémétrie de support) |
category | Catégorie de sécurité : Identity & Access, Network Security, etc. |
description | Résumé en anglais simple de ce que contient la table |
keywords | Termes pour la correspondance d'analyse d'écart par mots-clés |
mitreSources | Mappages de sources de données MITRE ATT&CK |
recommendedTier | analytics (niveau chaud) ou datalake (candidat auxiliaire) |
recommendedRetentionDays | Rétention totale minimale recommandée en jours (directive réglementaire) |
isFree | Si Microsoft ingère celle-ci gratuitement |
| Catégorie | Nombre | Exemples |
|---|
| Identité et accès | 33 | SigninLogs, OktaSSO, CyberArk_AuditEvents_CL |
| Sécurité réseau | 29 | AZFWNetworkRule, Cloudflare_CL, darktrace_model_alerts_CL |
| Alertes de sécurité | 26 | SecurityAlert, SecurityIncident, SentinelOneAlerts_CL |
| Détection des points de terminaison | 22 | DeviceProcessEvents, DeviceFileEvents, SentinelOne_CL |
| Plan de contrôle cloud | 22 | AzureActivity, OfficeActivity, GoogleWorkspaceReports |
| Flux réseau | 23 | AzureNetworkAnalytics_CL, CommonSecurityLog, AZFWFatFlow |
| Sécurité cloud | 13 | McasShadowItReporting, PaloAltoPrismaCloudAlertV2_CL |
| Sécurité des e-mails | 20 | EmailEvents, ProofPointTAPMessagesBlockedV2_CL, MimecastSIEM_CL |
| Télémétrie des points de terminaison | 14 | DeviceInfo, SentinelOneAgents_CL, jamfprotecttelemetryv2_CL |
| Gestion des vulnérabilités | 11 | DeviceTvmSoftwareVulnerabilities, QualysHostDetectionV3_CL |
| Sécurité des données | 12 | PurviewDataSensitivityLogs, VaronisAlerts_CL, MimecastDLP_CL |
| Journaux d'application | 22 | AppServiceHTTPLogs, FunctionAppLogs, DynatraceAttacks_CL |
| Renseignement sur les menaces | 8 | ThreatIntelligenceIndicator, CybleVisionAlerts_CL |
| Sécurité SAP | 7 | ABAPAuditLog, SAPBTPAuditLog_CL, Onapsis_Defend_CL |
| Sécurité IoT/OT | 4 | RadiflowEvent, DragosAlerts_CL, Phosphorus_CL |
| Plateforme de données | 13 | AzureDiagnostics, SnowflakeLogin_CL, MongoDBAudit_CL |
| Conteneurs et K8s | 7 | ContainerLog, KubeEvents, GKEAudit, AWSEKSLogs_CL |
| Santé de la plateforme | 6 | SentinelHealth, Watchlist, SOCPrimeAuditLogs_CL |
| Diagnostics d'infrastructure | 7 | AzureMetrics, GCPComputeEngine, GCPMonitoring |
| Gestion de la posture | 7 | DeviceTvmSecureConfigurationAssessment, CortexXpanseAlerts_CL |
| Gestion de la configuration | 6 | ConfigurationData, ESIExchangeOnlineConfig_CL |
| Accès au stockage | 5 | StorageBlobLogs, StorageFileLogs, AWSS3ServerAccess |
| Version | Date | Modifications |
|---|
| 0.8.0 | 2026-05-26 | Ajout de la gestion interactive de la rétention des tables avec un nouveau flux TUI en masse et un point d’entrée de mise à jour de table unique, ainsi que la commande publique Set-LogHorizonTableRetention. Ajout du moteur d’application PATCH de l’API Tables avec validation, sondage d’opération asynchrone Azure et repli en deux étapes (PATCH combiné, puis plan uniquement plus rétention uniquement) pour des mises à jour de rétention résilientes. Ajout de la couverture Pester ciblée pour la validation, la forme des charges utiles, le repli et le mappage des commandes publiques. Correction également d’un cas limite/bogue où les utilisateurs recevaient des recommandations de changer les tables Data Lake en niveau Data Lake s’ils avaient encore des données d’analyse dans Sentinel |
| 0.7.1 | 2026-05-15 | Ajout de la connaissance du plan à partir de Usage.Plan sans remplacer le plan de table configuré : l’analyse suit désormais l’historique des plans observés, signale les utilisations multi-plans et les écarts configurés vs observés, et affiche les données de plan dans le tableau de bord, l’exploration des tables, l’affichage de toutes les tables, l’évaluation de la rétention et les exportations. Correction de l’attribution de fermeture automatique du Détecteur d’analyse afin que l’heuristique de temporisation ne s’applique que lorsqu’aucune règle d’automatisation activée n’existe. 203 tests réussis |
| 0.7.0 | 2026-04-16 | Mise à jour de l’évaluation de la détection avec un tableau récapitulatif de la matrice coût-valeur (7 catégories d’évaluation Primaire/Secondaire avec code couleur), sous-menu d’exploration pour les tables primaires/secondaires avec colonnes de niveau coût/détection. Mise à jour de l’analyseur de détection avec des barres de couverture volumique pondérées en Go (Go de détection/chasse/combiné en pourcentage de l’ingestion totale en plus des barres existantes par nombre de tables). Améliorations de l’affichage adaptatif pour l’analyseur de détection (largeur de barre dynamique, troncature des noms de règles, masquage conditionnel des colonnes en fonction de la largeur de la console). 193 tests réussis |
| 0.6.3 | 2026-04-11 | Mise à jour mineure pour PSGallery |
| 0.6.2 | 2026-04-11 | Menu Réglage des journaux / Transformations : analyse de réglage des données en direct (utilisation des champs par table à partir des règles déployées/requêtes de chasse, génération de KQL filtre/projet/combiné, estimations d’économies), extraction des colonnes de schéma depuis l’API Tables, hiérarchie de repli Get-SplitKql (statistiques communautaires → valeurs par défaut des catégories → champs universels), évaluateur de table complet avec matrice d’utilisation des champs, sections d’exportation unifiées KB + réglage en direct, script d’extraction Build-FieldKnowledgeBase.ps1 pour le corpus de règles GitHub Azure-Sentinel. Analyseur de détection : attribution de fermeture automatique basée sur SentinelHealth (primaire) avec repli de correspondance de règles tenant compte des opérateurs, analyse des wrappers de conditions booléennes, détection de l’état Résolu, correspondance de fin de GUID pour les ID de ressources ARM. La couverture est désormais basée sur le nombre de tables pour toutes les tables (y compris le niveau gratuit). Avis de notation ajouté à la TUI et aux exportations. 174 tests |
| 0.6.1 | 2026-04-10 | Corrections de bogues : le filtrage $kqlKeywords est maintenant partagé au niveau du fichier (n’était pas défini dans Get-TablesFromKql), ajout de [CmdletBinding()] à toutes les fonctions d’assistance, simplification de la vérification unifiée Defender, suppression du paramètre de test fantôme -RuleCount. Robustesse : pagination de Get-HuntingQueries, wrapper de nouvelle tentative Invoke-AzRestWithRetry avec backoff exponentiel pour 429/5xx, validation de PricePerGB, Write-Verbose dans les fonctions clés. Docs : badge de version, nombre de bases de données, prérequis alignés sur le manifeste |
| 0.6.0 | 2026-04-10 | Détection de streaming XDR dynamique avec 21 KnownXDRTables (auparavant 18 codés en dur), XDRState par table (NotStreaming/Analytics/Basic/Auxiliary), Auxiliary reconnu comme niveau Data Lake, tables XDR non streamées remontées sous forme de recommandations Information/Faible avec NotStreamedCount, l’analyseur de rétention affiche les tables XDR non streamées comme « XDR only (30d) », répartition des niveaux dans l’aperçu (analytics/basic/data lake + non streamé), étiquettes Export-Report Auxiliary→« data lake », base de données de classification mise à jour à 345 entrées (+DeviceNetworkInfo, DeviceInfo→secondary/datalake, DeviceImageLoadEvents et IdentityQueryEvents→niveau datalake), 15 nouveaux tests Pester (121 au total) |
| 0.5.0 | 2026-04-03 | Export HTML statique avec onglets CSS purs (zéro JS, sans CDN, entièrement autonome), moteur de rendu de section unifié MD/HTML, capture complète des données JSON (dataTransforms, correlationExcluded/Included, streamingTables), commutateur -NonInteractive pour utilisation en CI/pipeline, alias de format md, noms de fichiers automatiques avec horodatage, affichage complet du KQL dans les transformations DCR (sans troncature), gestion du KQL multiligne dans les tableaux markdown, correction de la corruption des backreferences $ dans le remplacement des jetons HTML, renommage des aides internes pour éviter les conflits d’alias PowerShell (h→hEnc, md→mdEsc), 33 nouveaux tests Pester (106 au total) |
| 0.4.1 | 2026-04-03 | Corrections de sécurité et de stabilité – ajout de l’assainissement de la mémoire des jetons, validation des chemins de sortie et protection XSS, limites de pagination de l’API REST, correction du masquage des erreurs du chargeur de modules, résolution des avertissements PSScriptAnalyzer |
| 0.4.0 | 2026-04-02 | Découverte des transformations (liste des DCR + classification du type de transformation), détection des tables divisées (_SPLT_CL), aide KQL divisée avec une base de connaissances de 15 tables (high-value-fields.json) + repli d’analyse de règles, sortie KQL prête pour le portail avec condition uniquement, liste de recommandations extensible, menu TUI des suggestions KQL divisées |
| 0.3.0 | 2026-04-02 | Analyse de conformité de la rétention des journaux (CISA M-21-31, NIST SP 800-92, NCSC-UK, ASD ACSC, NSA), détection des balises de corrélation (#DONT_CORR#/#INC_CORR#), vue du menu d’évaluation de la rétention, colonne de rétention dans Toutes les tables, recommendedRetentionDays dans le schéma de classification |
| 0.2.2 | 2026-04-02 | La table d’optimisation SOC masque la colonne Détail sur les consoles étroites |
| 0.2.1 | 2026-04-02 | Prise en charge de la classification personnalisée (-CustomClassificationPath), enrichissement des recommandations d’optimisation SOC avec les suggestions de l’API/exploration, vue active par défaut, suppression des avertissements d’encodage UTF-8 |
| 0.2.0 | - | Première version publique avec moteur de classification, notation coût-valeur, TUI Spectre.Console, export en JSON/Markdown |
| 0.1.0 | - | Version interne pour le développement |