Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
log-horizon — Analizzatore di sorgenti di log per Microsoft Sentinel SIEM | Kitploit
Strumenti/GitHubGitHub/lnfernux/log-horizon
Sicurezza dell'Infrastruttura CloudAudit di ConfigurazioneSicurezza CloudDevSecOpsThreat IntelligenceRisposta agli IncidentiAnalisi dei Log
GitHublnfernux/log-horizon

log-horizon

Analizzatore di sorgenti di log per Microsoft Sentinel SIEM

Vedi Repository
28319h 7m faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Sito web
Condividi

Microsoft Sentinel SIEM Log Source Analyzer

PowerShell 7+ Module Version


Ho dovuto rispondere a "cosa stiamo ottenendo davvero da questi log?" o "quali sono i log consigliati per Microsoft Sentinel" più volte di quante riesca a contare. La risposta dipende sempre da così tante cose, ma possiamo essere generici. Quindi ho costruito questo coso proprio qui.

Log Horizon si connette al tuo workspace Microsoft Sentinel (e opzionalmente a Defender XDR), esamina ogni tabella di log che stai ingerendo e ti dice se stai ottenendo valore di sicurezza o stai solo bruciando denaro. Classifica le tabelle, le valuta rispetto alle tue regole di rilevamento e ti fornisce raccomandazioni concrete con stime di risparmio.

Importante: Questo è un approccio generico. Se sai che una fonte di log è importante per il tuo ambiente, quel contesto ha sempre la precedenza su ciò che questo strumento ti dice. Le classificazioni sono un punto di partenza, non un verbo sacro.

Vuoi leggere altro? Ho alcuni articoli su Log Horizon sul mio 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

Funzionalità

Scarica lo strumento
FunzionalitàDescrizione
Motore di classificazioneKnowledge base di 481 voci che copre 240+ connettori, 22 categorie, con stato del ciclo di vita (deprecato/legacy più tabelle di sostituzione) e fallback euristico automatico per tabelle sconosciute
Valutazione costo-valoreMatrice per tabella tra fascia di costo e fascia di rilevamento con valutazione combinata (da Alto Valore a Basso Valore), prezzata in base al piano osservato (Analytics, Basic, Data Lake)
Raccomandazioni13 tipi di azioni prioritizzate: candidati per data lake o Basic, tabelle con zero rilevamenti, spreco di streaming XDR, filtraggio in fase di ingesto, candidati per split, utilizzo del piano, fonti deprecate, carenze di retention, risultati di XDR Checker e Detection Analyzer, ciascuno con stime di risparmio
Mappatura dei rilevamentiMappa le regole di analisi, le query di hunting e i rilevamenti XDR su ciascuna tabella per individuare lacune di copertura
Tag di correlazioneRileva i tag #DONT_CORR# / #INC_CORR# nelle descrizioni delle regole e segnala le regole escluse dalla correlazione Defender
Conformità retentionConfronta la retention effettiva con i minimi raccomandati in base a standard di settore e best practice di sicurezza
Ottimizzazione SOCRecupera le raccomandazioni di miglioramento SOC di Microsoft dall'API Security Insights
Analisi lacune per parole chiaveSegnala le tabelle che dovresti ingerire ma non stai ingerendo, in base a parole chiave di vendor/prodotto
Scoperta trasformazioniScopre le Data Collection Rules (DCR) che puntano al workspace (lista di sottoscrizioni filtrata sulla destinazione, la DCR di trasformazione del workspace e le associazioni del workspace), analizza le trasformazioni inline e multi-stadio e etichetta ogni operazione (filtro, proiezione, rimozione colonna, arricchimento, aggregazione)
Rilevamento tabelle splitIdentifica le tabelle split _SPLT_CL e le collega alle tabelle padre nel motore di classificazione
Generatore KQL splitGenera KQL split pronto per il portale da una knowledge base curata, analisi live delle regole e statistiche di frequenza dei campi della community -- formato solo-condizione che si incolla direttamente nell'editor delle regole split di Sentinel. Le liste di campi vengono intersecate con lo schema live della tabella; qualsiasi cosa non presente viene segnalata come scartata

Disclaimer

[!CAUTION] Disclaimer

Questo strumento è sviluppato e mantenuto con l'aiuto dell'IA. Si prega di prestare attenzione quando si utilizza questa soluzione e di comprendere sempre cosa si sta eseguendo prima di eseguirlo in produzione. Lo sviluppatore non si assume alcuna responsabilità per vulnerabilità o problemi.

Scaricando, installando o utilizzando questo strumento, riconosci di aver letto, compreso e accettato questi termini.

Prerequisiti

Cosa ti serveVersione
PowerShell7.0+
Moduli AzAz.Accounts
Altri moduliPwshSpectreConsole 2.6.3+
OpzionaleMicrosoft.Graph.Authentication (per -IncludeDefenderXDR come utente con accesso effettuato)

Gli endpoint seguono l'ambiente Azure della sessione corrente di Connect-AzAccount, quindi i workspace Azure Government e Azure China funzionano senza parametri aggiuntivi. I valori del cloud pubblico vengono utilizzati quando non è disponibile alcun ambiente.

Se non hai già effettuato l'accesso ad Azure, il modulo avvierà Connect-AzAccount per te. Se invece sei già connesso, continuerà semplicemente.

Autorizzazioni: Log Analytics Reader e Microsoft Sentinel Reader sul workspace coprono l'analisi. La scoperta delle trasformazioni richiede anche Microsoft.Insights/dataCollectionRules/read (Monitoring Reader) sulla sottoscrizione o sul resource group; senza di essa l'esecuzione continua e stampa un avviso che indica l'autorizzazione mancante. -IncludeDefenderXDR utilizza Microsoft Graph con CustomDetection.Read.All, che per un utente con accesso effettuato significa il modulo opzionale Microsoft.Graph.Authentication.

Per iniziare

Abbastanza semplice:```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:~
## Utilizzo

### Le basi

Inizia connettendoti ad Azure e assicurandoti di selezionare l'account e la sottoscrizione corretti:```powershell
Connect-AzAccount

Allora possiamo invocare lo strumento:```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" />

Dispone inoltre di un menu per approfondire altri output:

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


### Lacune nelle parole chiave + Defender XDR

Vuoi sapere se ti mancano tabelle relative a vendor specifici? Inserisci alcune parole chiave. Aggiungi `-IncludeDefenderXDR` se desideri anche l'analisi XDR.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Keywords 'CrowdStrike','AWS','Okta' -IncludeDefenderXDR

Detection Analyzer

Abilita l'analisi della qualità/rumore delle regole basata su incidenti e regole di automazione:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -IncludeDetectionAnalyzer -DetectionLookbackDays 90

root@kitploit:~
### Esporta un report```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/

Gestisci conservazione e tipo delle tabelle

Ora puoi aggiornare la conservazione e il tipo delle tabelle direttamente dalla TUI interattiva:

  • Apri Invoke-LogHorizon normalmente, poi scegli Gestisci conservazione e tipo delle tabelle dal menu principale per aggiornamenti in blocco di conservazione o tipo.
  • Apri Log Tuning / Transforms > Valuta tabella specifica e scegli Gestisci conservazione/tipo per questa tabella per una modifica su singola tabella.

Per scripting o automazione, usa il comando pubblico dedicato:```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:~
### Modalità non interattiva / CI

Salta la TUI interattiva ed esporta direttamente in un file, utile per pipeline o esecuzioni pianificate:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/

Se ometti -Output, l'oggetto di analisi viene restituito alla pipeline così puoi passarlo alla tua logica.

Cache di raccolta

La fase di raccolta dati (utilizzo, regole, incidenti, tabelle, DCR) è memorizzata nella cache per impostazione predefinita, così rieseguire l'analisi sulla stessa area di lavoro, ad esempio per esportare un secondo formato o per riaprire la TUI, richiede secondi invece di minuti. La cache si trova in $env:LOCALAPPDATA\LogHorizon\cache (sostituibile con -CachePath), un file per ogni combinazione di sottoscrizione, gruppo di risorse, area di lavoro, -DaysBack, -DetectionLookbackDays, -IncludeDefenderXDR, -IncludeDetectionAnalyzer, i tre parametri di prezzo e la versione del modulo. Le voci più vecchie di -CacheMaxAgeMinutes (predefinito 60) vengono ignorate e ogni salvataggio elimina le voci scadute, così la cartella non accumula file di altri set di parametri o versioni precedenti. I token non vengono mai scritti nella cache; l'autenticazione viene eseguita a ogni chiamata, quindi la procedura guidata di conservazione ha sempre credenziali attive.

Il file di cache è Clixml in testo semplice. Con -IncludeDetectionAnalyzer contiene titoli, numeri, stato e classificazione degli incidenti dalla tua area di lavoro; i proprietari degli incidenti, gli autori delle regole e le identità dei proprietari assegnati non vengono raccolti. Usa -NoCache su macchine condivise o punta -CachePath a una posizione con il controllo degli accessi di cui hai bisogno.```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:~
### Ottimizzazione dei log e KQL di suddivisione

La TUI interattiva include un menu **Log Tuning / Transforms** con suggerimenti di ottimizzazione in tempo reale (utilizzo dei campi dalle regole distribuite e dalle query di caccia), KQL di suddivisione basato sulla knowledge base e un valutatore per singola tabella. Ogni blocco KQL è solo condizione e si incolla direttamente nell'editor di regole di suddivisione di Sentinel, con attribuzione della fonte (knowledge base, analisi delle regole o combinata).

### Prezzi personalizzati

I prezzi predefiniti sono West Europe Simplified PAYG in USD: 5,59 $/GB Analytics, 1,15 $/GB Basic, 0,20 $/GB Data Lake (0,07 ingestione + 0,13 elaborazione). Ogni tabella è prezzata in base al piano osservato nella tabella `Usage`, e lo stato gratuito deriva da `Usage.IsBillable`. I volumi utilizzano GB di fatturazione (1000 MB). Se il tuo livello di impegno è diverso:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61 -BasicPricePerGB 1.15 -LakePricePerGB 0.20

Tutti i parametri

ParametroTipoObbligatorioPredefinitoDescrizione
-SubscriptionIdstringSì-ID della sottoscrizione Azure
-ResourceGroupstringSì-Gruppo di risorse che contiene l'area di lavoro Sentinel
-WorkspaceNamestringSì-Nome dell'area di lavoro Log Analytics
-WorkspaceIdstringNo-ID dell'area di lavoro (risolto automaticamente se omesso)
-OutputstringNo-Formato di esportazione: json, markdown / md, o html (alias -o)
-OutputPathstringNo-Percorso di file o directory per l'esportazione. Una directory esistente o un separatore finale genera un nome file con timestamp; un nome file senza estensione riceve l'estensione del formato; le directory mancanti vengono create
-Keywordsstring[]No-Parole chiave per l'analisi delle lacune (es. 'AWS','CrowdStrike', alias -kw)
-IncludeDefenderXDRswitchNo-Include l'analisi delle rilevazioni personalizzate Defender XDR
-IncludeDetectionAnalyzerswitchNo-Include l'analisi delle rilevazioni rumorose per regola utilizzando incidenti e regole di automazione
-DetectionLookbackDaysintNo90Finestra di query per l'analisi delle rilevazioni basata su incidenti/automazione (1-365 giorni)
-DaysBackintNo90Finestra di query per i dati di utilizzo (1-365 giorni)
-PricePerGBdecimalNo5.59

Sotto il cofano

Quindi ci sono quattro fasi.

1. Raccolta dati

Il modulo si connette ad Azure e recupera dati dalle API Log Analytics, Security Insights, Azure Monitor e Microsoft Graph. Ogni chiamata passa attraverso un wrapper di retry (errori 429, 5xx e di trasporto) e, a meno che non sia impostato -NoCache, i dati raccolti vengono memorizzati nella cache localmente per l'esecuzione successiva.

Origine datiAPICosa recuperiamo
Utilizzo tabelleTabella Usage (KQL)Volume di inserimento, piano e flag fatturabile per tabella nella finestra di query
Regole di analisiREST Security InsightsRegole di rilevamento attive + tabelle che toccano + tag di correlazione, più consumatori impliciti di tabelle per tipi di regole non KQL
Query di cacciaREST ricerche salvate Log AnalyticsQuery di caccia salvate + tabelle referenziate
Connettori datiREST Security InsightsInventario dei connettori installati
Ottimizzazione SOCREST Security Insights (anteprima)Raccomandazioni SOC integrate di Microsoft
Conservazione tabelleREST Tabelle Log AnalyticsConservazione per tabella, archivio, piano (Analytics/Basic/Auxiliary), flag ereditati-predefiniti e colonne dello schema
Regole di raccolta datiREST Azure MonitorDCR che puntano all'area di lavoro (elenco sottoscrizioni, DCR di trasformazione dell'area di lavoro, associazioni) e le loro trasformazioni
Defender XDRMicrosoft GraphRegole di rilevamento personalizzate XDR (opzionale; CustomDetection.Read.All delegato o token Az Graph)
IncidentiREST Security InsightsEsiti degli incidenti (stato/classificazione), tempistiche e suggerimenti di collegamento alle regole per la valutazione della qualità delle regole
Regole di automazioneREST Security InsightsAzioni di chiusura incidenti a livello di regola e condizioni di corrispondenza del titolo per l'attribuzione della chiusura automatica
SentinelHealthKQL Log AnalyticsEventi di esecuzione delle regole di automazione con numeri di incidente per l'attribuzione definitiva della chiusura automatica (opzionale, richiede il monitoraggio dell'integrità)

2. Classificazione

Ogni tabella viene classificata attraverso due passaggi:

Primo, una ricerca diretta nella knowledge base di 481 voci in Data/log-classifications.json. Ogni voce contiene il nome del connettore, classificazione primaria/secondaria, categoria di sicurezza, mapping delle origini dati MITRE, livello di prezzo e conservazione raccomandati, e flag opzionali del ciclo di vita (deprecato/legacy con tabelle di sostituzione, trasmissibilità XDR, piattaforma).

Se non c'è corrispondenza, entrano in gioco le regole euristiche, in questo ordine:

  • Il nome contiene un token di sicurezza come Alert, Incident, Threat, Signin, Logon, Audit, Risk, Detection (corrispondenza all'inizio delle parole PascalCase) -> primaria
  • Il nome sembra telemetria infrastrutturale: Flow, Metric, Diagnostic, Perf, Heartbeat, Health, Inventory, Usage -> secondaria
  • Ha regole di analisi attive che puntano ad essa -> primaria
  • Tabella integrata con prefisso Microsoft (AAD, Microsoft, Azure, Defender, Purview, Entra, Sentinel, Office, Intune, Windows ...) -> primaria, contrassegnata per revisione e aggiunta al database
  • Nome generico *Log/*Logs -> secondaria
  • Volume elevato (>10 GB/mese) senza rilevamenti su di essa -> secondaria
  • Nessuno dei precedenti -> sconosciuta

3. Valutazione costo-valore

Ogni tabella viene valutata su alcune dimensioni:

  • Livello di costo: Gratuito / Basso (<1 GB) / Medio (1-10 GB) / Alto (10-50 GB) / Molto alto (>50 GB)
  • Livello di rilevamento: Nessuno / Basso (1-2 regole) / Medio (3-9 regole) / Alto (10+ regole)
  • Valutazione: Alto valore / Buon valore / Copertura mancante / Ottimizza / Basso valore / Sottoutilizzata / Livello gratuito / Piattaforma
  • % di copertura: Percentuale di tabelle con almeno una regola di analisi o query di caccia che le referenzia, calcolata come tablesWithRules / totalTables * 100. La copertura per tabella somma le regole di analisi + le query di caccia trovate analizzando KQL per i nomi delle tabelle.
  • Copertura implicita: I tipi di regole senza KQL consumano comunque tabelle. Data/implicit-consumers.json le mappa (corrispondenza Threat Intelligence -> ThreatIntelIndicators/ThreatIntelObjects, Fusion -> SecurityAlert/Anomalies, UEBA -> BehaviorAnalytics/UserPeerAnalytics/IdentityInfo, creazione incidenti Microsoft -> SecurityAlert). Le regole abilitate di questi tipi contano per la copertura effettiva, e ogni tabella riporta una CoverageSource di kql, xdr, implicit, platform o none. Le tabelle di piattaforma che Sentinel scrive per sé (SecurityIncident, SentinelHealth, Watchlist, Usage ...) non vengono mai contrassegnate come copertura mancante e ricevono la valutazione Platform.
  • Solo le regole di analisi abilitate e le rilevazioni personalizzate Defender abilitate contano per la copertura.

Poi il modulo genera raccomandazioni (13 tipi):

TipoQuando si attivaCosa fare
Data LakeSecondaria + costo elevato + pochi rilevamenti, e la tabella supporta il piano Auxiliary (ricade su una proposta di piano Basic quando è supportato solo Basic)Spostare al livello Auxiliary/Data Lake; i risparmi sono il costo attuale meno lo stesso volume al tasso del lake (o Basic)
Basso valoreCosto elevato + zero rilevamentiAggiungere regole, filtrare o spostare al data lake
Ottimizza XDRTrasmessa XDR + 0 regole Sentinel + esistono regole XDRInterrompere la trasmissione, usare invece il portale XDR unificato
Copertura mancantePrimaria + zero rilevamenti (non tabelle di piattaforma)Scrivere regole di analisi per ottenere valore dai dati
Filtro all'inserimentoPrimaria + >20 GB + <=3 rilevamentiApplicare una trasformazione all'inserimento per ridurre il volume
Candidato alla suddivisionePrimaria + volume elevato + rilevamenti + nessuna trasformazione esistenteSuddividere la tabella così che le righe ad alto valore restino su Analytics e il resto vada al Data Lake
Uso del pianoLe righe di utilizzo mostrano più di un piano, o il piano configurato differisce da quanto osservato da UsageVerificare se la transizione di piano era prevista
Origine deprecataUna tabella contrassegnata come deprecata o legacy nel database sta ancora inserendo datiMigrare i rilevamenti alle tabelle di sostituzione, poi ritirare il vecchio connettore. Informativo: non vengono dichiarati risparmi perché l'inserimento si sposta piuttosto che scomparire
Carenza di conservazioneConservazione dell'area di lavoro o della tabella inferiore alla baseline di 90 giorniAumentare la conservazione totale/archivio per soddisfare le linee guida normative
Miglioramento conservazioneTabella a pagamento, non di piattaforma, che soddisfa i 90 giorni ma resta sotto la raccomandazione di categoriaConsiderare una conservazione totale più lunga
Sotto la baseline interattivaTabella Analytics con conservazione interattiva (hot) sotto i 90 giorniAlzare la conservazione interattiva ai 90 giorni inclusi da Sentinel, a meno che la finestra hot breve non sia intenzionale

Le raccomandazioni vengono ordinate una volta, Alta > Media > Bassa e poi per risparmi stimati, e ogni output (JSON, Markdown, HTML, TUI) mantiene quell'ordine.

4. Analizzatore di rilevamenti (valutazione della rumorosità)

Quando passi -IncludeDetectionAnalyzer, il modulo recupera gli incidenti recenti e le regole di automazione, poi valuta ogni regola di analisi abilitata per la potenziale rumorosità.

Metriche per regola (calcolate dai dati degli incidenti):

MetricaCome viene calcolata
Incidenti totaliConteggio degli incidenti collegati alla regola
Rapporto AutoCloseIncidenti chiusi dalle regole di automazione ÷ incidenti totali. Fonte primaria: tabella SentinelHealth (esecuzioni di regole di automazione per regole di chiusura incidenti o playbook abilitate, abbinate sul numero di incidente). Fallback: corrispondenza delle condizioni delle regole di automazione (id della regola analitica, condizioni di titolo e gravità, combinate con AND come fa Sentinel). Le regole le cui condizioni sono solo stato/tattiche/entità vengono trattate come applicabili a ogni incidente.
Rapporto falsi positiviIncidenti classificati come falsi positivi ÷ incidenti totali

Formula del punteggio di rumorosità:

Ogni metrica viene convertita in un rango percentile tra tutte le regole che hanno almeno un incidente. Il punteggio composito è una combinazione ponderata:``` Score = (Volume_percentile × 0.35) + (AutoClose_percentile × 0.40) + (FalsePositive_percentile × 0.25)

root@kitploit:~
- **Percentile di volume (35%)**: quanti incidenti genera una regola rispetto alle altre regole.
- **Percentile di AutoClose (40%)**: quanto spesso gli incidenti vengono chiusi automaticamente dalle regole di automazione (peso maggiore perché la chiusura automatica è il segnale più forte di avvisi a basso valore).
- **Percentile di falsi positivi (25%)**: quanto spesso gli analisti classificano l'esito come falso positivo.

**Soglie di punteggio**:

| Punteggio | Etichetta | Significato |
|---|---|---|
| ≥ 70 | Rumorosa | La regola probabilmente necessita di ottimizzazione o disattivazione |
| ≥ 50 | Da monitorare | La regola mostra i primi segni di rumorosità |
| < 50 | Sana | La regola rientra nell'intervallo normale |
| N/D | - | La regola non ha incidenti correlati, o meno di 3 regole hanno incidenti, quindi non c'è nulla con cui confrontarsi |

Gli incidenti vengono raggruppati per ID della regola analitica (con fallback al nome della regola, poi al titolo), quindi due regole che condividono un nome visualizzato vengono valutate separatamente.

Le regole con un punteggio ≥ 70 e almeno 5 incidenti vengono automaticamente segnalate come **raccomandazioni ad alta priorità** nella vista Raccomandazioni.

### 5. Dashboard interattiva

Il menu principale offre queste viste:

- **Dashboard**: statistiche generali, top 10 delle tabelle più costose (le origini deprecate e legacy mostrano un badge), barra di copertura, riepilogo conformità conservazione, avviso esclusioni correlazione
- **Visualizza raccomandazioni**: azioni prioritarie con risparmio mensile stimato, espandibili per mostrare l'elenco completo quando ci sono più di 10 elementi
- **Visualizza valutazione rilevamento**: riepilogo matrice costo-valore, copertura per tabella di regole e query di caccia, drill-down primario/secondario, elenco regole escluse dalla correlazione
- **Visualizza analizzatore rilevamento**: classifica delle regole rumorose basata su percentili con indicatori di qualità di chiusura (quando hai usato `-IncludeDetectionAnalyzer`), browser regole ricercabile
- **Visualizza ottimizzazione SOC**: suggerimenti di miglioramento di Microsoft con drill-down
- **Visualizza valutazione conservazione**: tabelle al di sotto dei minimi raccomandati con conservazione attuale vs raccomandata, tipo di piano e carenza, più righe informative XDR
- **Visualizza trasformazioni dati**: inventario trasformazioni DCR con classificazione del tipo di trasformazione e KQL completo per tabella
- **Ottimizzazione log / Trasformazioni**: suggerimenti di ottimizzazione in tempo reale, KQL suddiviso per knowledge-base e valutatore per tabella con modifica di conservazione/tipo per singola tabella
- **Visualizza tutte le tabelle**: elenco completo con classificazione, piani, costo, regole, conservazione (codificata a colori) e valutazione; seleziona una tabella per un pannello di dettaglio (fonti di copertura, supporto piano, conservazione, stato, relative raccomandazioni)
- **Gestisci conservazione e tipo tabella**: procedura guidata per conservazione e piano in blocco con anteprima e applicazione
- **Dizionario**: ogni termine usato dallo strumento (classificazione, livelli di costo e rilevamento, valutazioni, fonti di copertura, i 13 tipi di raccomandazione, metriche e etichette di punteggio dell'Analizzatore rilevamento, piani tabella, stato del ciclo di vita, stati XDR, tipi di trasformazione) con le stesse definizioni di questo README, servito da `Data/dictionary.json`
- **Esporta report**: scegli un formato, poi un percorso (directory per un file con timestamp, o un nome file; Invio mantiene la directory corrente) e scrivi JSON, Markdown o HTML direttamente dal menu
- **Analisi XDR** appare nella dashboard quando hai usato `-IncludeDefenderXDR`

---

## Il database di classificazione

Situato in `Data/log-classifications.json`. **481 voci**, **243 connettori**, **22 categorie**.

### Cosa contiene ogni voce

| Campo | Cosa contiene |
|---|---|
| `tableName` | Nome della tabella Log Analytics (`SecurityEvent`, `SigninLogs`, ecc.) |
| `connector` | Quale connettore dati produce questa tabella |
| `classification` | `primary` (valore di sicurezza) o `secondary` (telemetria di supporto) |
| `category` | Categoria di sicurezza: Identity & Access, Network Security, ecc. |
| `description` | Riepilogo in linguaggio semplice di cosa contiene la tabella |
| `keywords` | Termini per l'analisi delle lacune tramite parole chiave |
| `mitreSources` | Mappature delle fonti dati MITRE ATT&CK |
| `recommendedTier` | `analytics` (livello hot) o `datalake` (candidato ausiliario) |
| `recommendedRetentionDays` | Conservazione totale minima raccomandata in giorni (linee guida normative) |
| `isFree` | Se Microsoft acquisisce questa tabella gratuitamente (il runtime usa prima `Usage.IsBillable`) |
| `status` | Opzionale. `deprecated` (connettore ritirato o acquisizione interrotta) o `legacy` (percorso di raccolta più vecchio con successore documentato) |
| `replacedBy` | Opzionale. Nomi delle tabelle verso cui migrare; presente ogni volta che `status` è impostato (può essere vuoto) |
| `xdrStreamable` | Opzionale, solo tabelle Defender. `true` per le 21 tabelle trasmesse dal connettore Defender XDR; `false` per tabelle solo-portale e TVM |
| `platform` | Opzionale. `true` per le tabelle che Sentinel stesso consuma (`SecurityIncident`, `Usage`, `Watchlist`, ...) che non necessitano mai di regole analitiche |

Le tabelle con uno `status` mostrano un badge nella TUI e nei report, e qualsiasi tabella che acquisisce ancora dati genera una raccomandazione `DeprecatedSource` che indica la sostituzione. Le tabelle con `xdrStreamable: false` non vengono mai trattate come candidate allo streaming XDR dal Controllo XDR.

### Dati di sicurezza primari vs secondari

**Primari** (278 voci): le tabelle su cui costruisci effettivamente i rilevamenti. Log di accesso, avvisi di sicurezza, threat intelligence, tracce di audit, risultati di vulnerabilità, hit firewall, telemetria EDR.

**Secondari** (203 voci): materiale di supporto. Metriche prestazionali, diagnostica infrastruttura, volumi di flusso di rete, snapshot di inventario, baseline di configurazione, controlli di integrità.

### Categorie a colpo d'occhio

| Categoria | Conteggio | Esempi |
|---|---|---|
| Identity & Access | 51 | `SigninLogs`, `MicrosoftServicePrincipalSignInLogs`, `OktaSSO` |
| Network Security | 49 | `AZFWNetworkRule`, `NSPAccessLogs`, `DarktraceModelAlerts_CL` |
| Cloud Control Plane | 37 | `AzureActivity`, `AZKVAuditLogs`, `GoogleWorkspaceReports` |
| Network Flow | 36 | `NTANetAnalytics`, `CommonSecurityLog`, `AZFWFatFlow` |
| Endpoint Detection | 33 | `DeviceProcessEvents`, `CrowdStrikeAuditEvents`, `SentinelOneAlertsV2_CL` |
| Application Logs | 32 | `AppServiceHTTPLogs`, `AppServiceAuditLogs`, `DynatraceAttacksV2_CL` |
| Email Security | 29 | `EmailEvents`, `CampaignInfo`, `Ttp_Url_CL` |
| Security Alerts | 29 | `SecurityAlert`, `SentinelBehaviorInfo`, `DisruptionAndResponseEvents` |
| Vulnerability Mgmt | 23 | `DeviceTvmSoftwareVulnerabilities`, `Rapid7InsightVMCloudVulnerabilities` |
| Cloud Security | 20 | `EnrichedMicrosoft365AuditLogs`, `OAuthAppInfo`, `PowerAppsActivity` |
| Endpoint Telemetry | 18 | `DeviceInfo`, `Windows365NetworkLogs`, `SentinelOneAgents_CL` |
| Posture Management | 17 | `ExposureGraphNodes`, `SecurityNestedRecommendation`, `ZTSMetadata` |
| Data Security | 16 | `PurviewDataSensitivityLogs`, `DataSecurityEvents`, `PowerPlatformDlpActivity` |
| Data Platform | 16 | `SQLSecurityAuditEvents`, `CDBControlPlaneRequests`, `SnowflakeLogin_CL` |
| Platform Health | 14 | `SentinelHealth`, `Usage`, `SecurityCaseEvent` |
| Container & K8s | 13 | `AKSAudit`, `CloudProcessEvents`, `GKEAudit` |
| Infrastructure Diag | 13 | `AzureMetrics`, `AGWPerformanceLogs`, `ContainerAppSystemLogs` |
| Threat Intelligence | 10 | `ThreatIntelIndicators`, `ThreatIntelObjects`, `CybleVisionAlerts_CL` |
| Configuration Mgmt | 8 | `ConfigurationData`, `AVNMRuleCollectionChange` |
| SAP Security | 7 | `ABAPAuditLog`, `SAPBTPAuditLog_CL`, `Onapsis_Defend_CL` |
| Storage Access | 6 | `StorageBlobLogs`, `CloudStorageAggregatedEvents`, `AWSS3ServerAccess` |
| IoT/OT Security | 4 | `RadiflowEvent`, `DragosAlerts_CL`, `Phosphorus_CL` |

### Supporto piani tabella

`Data/basic-plan-tables.json` e `Data/auxiliary-plan-tables.json` elencano le tabelle integrate che la [matrice delle funzionalità delle tabelle di Azure Monitor](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/tables-features) indica come supportanti i piani Basic e Auxiliary (Data Lake). La procedura guidata di conservazione usa l'elenco Basic per validare i cambi di piano, e la raccomandazione `DataLake` propone il livello lake solo per le tabelle che lo supportano, ripiegando su un suggerimento di piano Basic dove quello è il livello più basso supportato. Le tabelle personalizzate basate su DCR supportano entrambi i piani; le tabelle personalizzate Classic non ne supportano nessuno. Entrambi i file vengono rigenerati da quella matrice a ogni release.

### Classificazioni personalizzate

Puoi fornire un tuo file di classificazione per **aggiungere** voci per tabelle non presenti nel database integrato, o **sovrascrivere** voci esistenti quando i valori predefiniti non corrispondono al tuo ambiente. Le voci personalizzate hanno precedenza su quelle integrate quando lo stesso `tableName` appare in entrambi.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' `
    -CustomClassificationPath './my-classifications.json'

Il file personalizzato utilizza lo stesso schema di Data/log-classifications.json, un array di oggetti:```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:~
Vedi `Data/custom-classifications-example.json` per un modello pronto all'uso.

### Come sono state costruite le classificazioni

La classificazione primaria/secondaria è stata realizzata in parte dall'autore e poi alimentando i connettori dati e le definizioni delle tabelle di Microsoft in un'IA con una baseline di valutazione umana, utilizzando le best practice Microsoft e gli standard di settore come criteri di classificazione. Se qualcosa non ti sembra corretto per il tuo ambiente, affidati al tuo contesto piuttosto che allo strumento: l'IA può commettere errori, e il contesto è fondamentale.

I criteri di classificazione sono stati tratti dalle seguenti fonti:

**ACSC (Australian Signals Directorate, Australian Cyber Security Centre)**
- [ACSC: Best practices for event logging and threat detection (ago 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 (mag 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**
- [Riferimento ai connettori dati di Microsoft Sentinel](https://learn.microsoft.com/en-us/azure/sentinel/data-connectors-reference)
- [Riferimento a tabelle e connettori di Microsoft Sentinel](https://learn.microsoft.com/en-us/azure/sentinel/sentinel-tables-connectors-reference)
- [Repository GitHub Azure-Sentinel](https://github.com/Azure/Azure-Sentinel) (regole di analisi della community, definizioni dei connettori, modelli di soluzione)
- [Fatturazione di Microsoft Sentinel](https://learn.microsoft.com/azure/sentinel/billing)
- [Gestione dei livelli dati di Microsoft Sentinel](https://learn.microsoft.com/azure/sentinel/manage-data-overview)

**MITRE**
- [Fonti dati di MITRE ATT&CK](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 - Regno Unito)**
- "What exactly should we be logging?" di NCSC-UK

**Google Cloud**
- [Panoramica dei log di controllo di Google Cloud](https://docs.cloud.google.com/logging/docs/audit)
- [Best practice per i log di controllo di Google Cloud](https://docs.cloud.google.com/logging/docs/audit/best-practices)


Sono state utilizzate anche altre fonti, insieme alla "competenza" degli autori, se così si può definire.
---

## Struttura del progetto```
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

Come vengono generate le knowledge base

Le knowledge base KQL suddivise, high-value-fields.json e field-frequency-stats.json, vengono costruite offline dal repository pubblico Azure/Azure-Sentinel (Solutions/, Detections/, Hunting Queries/, circa 3.800 file di regole YAML). Ogni query viene eseguita tramite gli stessi Get-TablesFromKql e Get-FieldsFromKql che il modulo utilizza in fase di esecuzione per costruire i conteggi di frequenza dei campi per tabella, da cui vengono derivati tre livelli di campi di fallback:

  • Campi universali: campi presenti in più del 50% di tutte le tabelle (ad esempio TimeGenerated)
  • Default di categoria: campi presenti in più del 40% delle tabelle all'interno di una categoria di classificazione
  • Statistiche per tabella: conteggi grezzi di frequenza dei campi per tabelle con almeno 3 regole di riferimento

I campi estratti vengono uniti nel file curato high-value-fields.json (le voci curate vengono mantenute, le tabelle appena scoperte con almeno 3 regole e 3 campi significativi vengono aggiunte).

In fase di esecuzione, Get-SplitKql utilizza una gerarchia di fallback: voce KB curata -> analisi live dei campi di regole/hunting -> statistiche community per tabella -> default di categoria -> campi universali. La frequenza dei campi non è un metodo perfetto, ma è utile da conoscere.

Test

437 test Pester v5, nessuna connettività Azure richiesta. Eseguiteli da una sessione PowerShell semplice piuttosto che dal terminale integrato di VS Code:```powershell Invoke-Pester ./Tests/LogHorizon.Tests.ps1 -Output Detailed

root@kitploit:~
## Licenza

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

## Cronologia versioni

| Versione | Data | Modifiche |
|---|---|---|
| 0.9.0 | 2026-09-06 | Release di remediation da una revisione completa di codice e dati. Correttezza: prezzi basati sul piano da `Usage.Plan` e `Usage.IsBillable` con tariffe Basic e Data Lake e GB di fatturazione (1000 MB), attribuzione di auto-chiusura del Detection Analyzer limitata alle regole di chiusura/playbook abilitate (`triggeringLogic.isEnabled`), incidenti tramite `2025-09-01` con `$top=1000`, copertura implicita per tipi di regole non-KQL e tabelle di piattaforma (`implicit-consumers.json`), controllo di base della retention interattiva, ordinamento singolo delle raccomandazioni. Trasformazioni: individuazione DCR a livello di sottoscrizione filtrata sulla workspace di destinazione più la DCR di trasformazione della workspace e le associazioni, con stato visibile e avviso quando manca un'autorizzazione; parsing di trasformazioni workspace e multi-stage; KQL suddiviso intersecato con lo schema live delle tabelle. Robustezza: cache di raccolta attiva per impostazione predefinita (`-NoCache`, `-RefreshCache`, `-CacheMaxAgeMinutes`, `-CachePath`), autenticazione prima dello spinner con avvisi stampati successivamente, output TUI e Markdown con escape, risoluzione del percorso di esportazione che crea le directory e restituisce il percorso scritto, meta CSP in HTML, nuovi tentativi REST su errori di trasporto e completamento asincrono in stile Location, risoluzione della workspace tramite REST (`Az.Resources` rimosso), validazione della classificazione personalizzata, euristiche sensibili a PascalCase con fallback di prima parte Microsoft, timeout regex. Gli endpoint seguono l'ambiente Azure connesso (Government, China) e le versioni API sono state spostate a SecurityInsights `2025-09-01`, OperationalInsights `2025-07-01`, raccomandazioni `2025-10-01-preview`. Dati: database di classificazione 345 -> 481 voci con chiavi `status`/`replacedBy`/`xdrStreamable`/`platform`, 80+ tabelle di prima parte e 35 successori, correzioni delle etichette dei connettori, correzioni `isFree`; rigenerati `basic-plan-tables.json` e nuovo `auxiliary-plan-tables.json` dalla matrice delle funzionalità delle tabelle di Azure Monitor; raccomandazione `DeprecatedSource`, raccomandazione Data Lake basata sul piano con fallback Basic, XDR Checker rispetta la streamability, badge del ciclo di vita in TUI ed esportazioni. Passaggio di revisione: la chiave della cache copre prezzi e versione del modulo, booleani e livelli di classificazione personalizzata analizzati anziché convertiti, attribuzione di auto-chiusura sensibile alla gravità, predicati KQL suddivisi verificati contro lo schema live, stato di fetch XDR mostrato anziché un `$null` silenzioso, percorsi di output senza estensione sono file, identità dei proprietari degli incidenti non più raccolte. Menu dizionario nella TUI con ogni termine usato dallo strumento, supportato da `Data/dictionary.json` e ancorato al codice tramite test. Gli oggetti di automazione delle regole e di rilevamento personalizzato Defender sono proiettati sui campi consumati, quindi le identità degli autori (createdBy, lastModifiedBy, proprietari assegnati) non raggiungono mai la cache o le esportazioni. Licenza GPL-3.0. 437 test |
| 0.8.0 | 2026-05-26 | Aggiunta gestione interattiva della retention delle tabelle con un nuovo flusso TUI bulk e punto di ingresso per l'aggiornamento di singole tabelle, più il comando pubblico `Set-LogHorizonTableRetention`. Aggiunto motore di applicazione PATCH dell'API Tables con validazione, polling delle operazioni asincrone di Azure e fallback in due passaggi (PATCH combinato, poi solo piano più solo retention) per aggiornamenti di retention resilienti. Aggiunta copertura Pester mirata per validazione, forma del payload, fallback e mapping dei comandi pubblici. Corregge anche un caso limite/bug in cui gli utenti ricevevano raccomandazioni di cambiare tabelle data lake al livello data lake se avevano ancora dati di analisi in Sentinel |
| 0.7.1 | 2026-05-15 | Aggiunta consapevolezza del piano da `Usage.Plan` senza sostituire il piano configurato delle tabelle: l'analisi ora traccia la cronologia dei piani osservati, segnala l'uso multi-piano e le discrepanze configurato-vs-osservato, e mostra i dati del piano nel dashboard, nel drill-down delle tabelle, in View All Tables, nella valutazione della retention e nelle esportazioni. Corretta l'attribuzione di auto-chiusura del Detection Analyzer così che l'euristica temporale si applichi solo quando non esistono regole di automazione abilitate. 203 test superati |
| 0.7.0 | 2026-04-16 | Valutazione del rilevamento aggiornata con tabella riepilogativa della matrice costo-valore (categorie di valutazione Primario/Secondario x7 con codifica colore), sottomenu di drill-down per tabelle primarie/secondarie con colonne di livello costo/rilevamento. Detection Analyzer aggiornato con barre di copertura del volume ponderate in GB (GB di rilevamento/hunting/combinati come percentuale dell'ingestione totale accanto alle barre esistenti del conteggio tabelle). Miglioramenti del display adattivo per Detection Analyzer (larghezza dinamica delle barre, troncamento dei nomi delle regole, occultamento condizionale delle colonne in base alla larghezza della console). 193 test superati |
| 0.6.3 | 2026-04-11 | Aggiornamento minore per PSGallery |
| 0.6.2 | 2026-04-11 | Menu Log Tuning / Transforms: analisi live del tuning dei dati (uso dei campi per tabella dalle regole/query di hunting distribuite, generazione KQL filter/project/combinato, stime di risparmio), estrazione delle colonne dello schema dall'API Tables, gerarchia di fallback `Get-SplitKql` (statistiche community → impostazioni predefinite per categoria → campi universali), valutatore completo delle tabelle con matrice di uso dei campi, sezioni di esportazione unificate KB + tuning live, script di mining `Build-FieldKnowledgeBase.ps1` per il corpus di regole GitHub di Azure-Sentinel. Detection Analyzer: attribuzione di auto-chiusura basata su SentinelHealth (primaria) con fallback di corrispondenza regole sensibile all'operatore, parsing del wrapper delle condizioni booleane, rilevamento dello stato Resolved, corrispondenza della coda GUID per ID risorsa ARM. La copertura ora è basata sul conteggio delle tabelle su tutte le tabelle (incluso il livello gratuito). Nota di non responsabilità sul punteggio aggiunta a TUI ed esportazioni. 174 test |
| 0.6.1 | 2026-04-10 | Correzioni di bug: il filtro `$kqlKeywords` ora è condiviso a livello di file (era indefinito in `Get-TablesFromKql`), `[CmdletBinding()]` aggiunto a tutte le funzioni helper, controllo unificato Defender semplificato, rimosso il parametro di test fantasma `-RuleCount`. Robustezza: paginazione di `Get-HuntingQueries`, wrapper di nuovo tentativo `Invoke-AzRestWithRetry` con backoff esponenziale per 429/5xx, validazione di `PricePerGB`, `Write-Verbose` nelle funzioni chiave. Documentazione: badge della versione, conteggio DB, prerequisiti allineati al manifest |
| 0.6.0 | 2026-04-10 | Rilevamento dinamico dello streaming XDR con 21 `KnownXDRTables` (era hardcoded 18), `XDRState` per tabella (`NotStreaming`/`Analytics`/`Basic`/`Auxiliary`), Auxiliary riconosciuto come livello data lake, tabelle XDR non in streaming mostrate come raccomandazioni Information/Low con `NotStreamedCount`, analizzatore di retention mostra le tabelle XDR non in streaming come "XDR only (30d)", ripartizione dei livelli nella panoramica (analytics/basic/data lake + non in streaming), etichette Export-Report Auxiliary→"data lake", database di classificazione aggiornato a 345 voci (+`DeviceNetworkInfo`, `DeviceInfo`→secondario/data lake, `DeviceImageLoadEvents` e `IdentityQueryEvents`→livello data lake), 15 nuovi test Pester (121 totali) |
| 0.5.0 | 2026-04-03 | Esportazione HTML statica con schede CSS pure (zero JS, nessun CDN, completamente autonoma), renderer unificato delle sezioni MD/HTML, acquisizione completa dei dati JSON (dataTransforms, correlationExcluded/Included, streamingTables), interruttore `-NonInteractive` per uso CI/pipeline, alias di formato `md`, nomi file automatici con timestamp, visualizzazione KQL completa nelle trasformazioni DCR (nessun troncamento), gestione KQL multilinea nelle tabelle markdown, corrotto il backreference regex `$` nella sostituzione dei token HTML, helper interni rinominati per evitare conflitti di alias PowerShell (`h`→`hEnc`, `md`→`mdEsc`), 33 nuovi test Pester (106 totali) |
| 0.4.1 | 2026-04-03 | Correzioni di sicurezza e stabilità - aggiunta sanificazione della memoria dei token, validazione dei percorsi di output e protezione XSS, limiti di paginazione dell'API REST, corretto il mascheramento degli errori del caricatore di moduli e risolti gli avvisi PSScriptAnalyzer |
| 0.4.0 | 2026-04-02 | Individuazione delle trasformazioni (elenco DCR + classificazione dei tipi di trasformazione), rilevamento delle tabelle suddivise (`_SPLT_CL`), helper KQL suddiviso con knowledge base di 15 tabelle (`high-value-fields.json`) + fallback di analisi delle regole, output KQL solo-condizione pronto per il portale, elenco espandibile delle raccomandazioni, menu TUI dei suggerimenti KQL suddivisi |
| 0.3.0 | 2026-04-02 | Analisi di conformità della retention dei log (CISA M-21-31, NIST SP 800-92, NCSC-UK, ASD ACSC, NSA), rilevamento dei tag di correlazione (`#DONT_CORR#`/`#INC_CORR#`), vista menu di valutazione della retention, colonna retention in All Tables, `recommendedRetentionDays` nello schema di classificazione |
| 0.2.2 | 2026-04-02 | La tabella di ottimizzazione SOC nasconde la colonna Detail su console strette |
| 0.2.1 | 2026-04-02 | Supporto classificazione personalizzata (`-CustomClassificationPath`), raccomandazioni di ottimizzazione SOC arricchite con suggerimenti API/drill-down, vista predefinita solo-attivi, soppressione dell'avviso di codifica UTF-8 |
| 0.2.0 | - | Prima release pubblica con motore di classificazione, punteggio costo-valore, TUI Spectre.Console, esportazione in JSON/Markdown |
| 0.1.0 | - | Versione interna per lo sviluppo |

## Problemi noti

### Avviso di codifica UTF-8 PwshSpectreConsole

Per abilitare l'output UTF-8 nel tuo terminale, aggiungi la seguente riga all'inizio del tuo file `$PROFILE` di PowerShell e riavvia il terminale:```powershell
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

Il modulo lo imposta automaticamente all'importazione, ma a seconda della sessione l'avviso potrebbe comunque apparire. È solo estetico e non influisce sulla funzionalità.

Contribuire

Se hai problemi o vuoi contribuire, crea una PR.

Ti piace lo strumento?


Offrimi un caffè su ko-fi.com

Detection AnalyzerValuta le regole analitiche per potenziale rumorosità usando gli esiti degli incidenti (rapporto di auto-chiusura, rapporto di falsi positivi e percentili del volume di incidenti)
XDR CheckerAggiunge un livello consultivo incentrato su XDR: controlli di copertura dello streaming e indicazioni di retention di un anno su Data Lake per la telemetria correlata a XDR
Classificazioni personalizzateFornisci il tuo JSON per aggiungere o sovrascrivere il database di classificazione integrato
Cache di raccoltaI dati raccolti dal workspace vengono memorizzati in cache localmente (default 60 minuti) così che le riesecuzioni e le riesportazioni richiedano secondi; disattivabile con -NoCache
Cloud sovraniGli endpoint ARM, Log Analytics e Graph seguono l'ambiente Azure in cui si è effettuato l'accesso (pubblico, US Government, Cina)
TUI interattivaDashboard Spectre.Console con menu, tabelle codificate a colori, drill-down, procedura guidata per la retention e arte ASCII
EsportazioneReport JSON, Markdown o HTML statico per la condivisione con il team
Prezzo di inserimento per GB del livello Analytics di Sentinel (alias -ppgb)
-BasicPricePerGBdecimalNo1.15Prezzo per GB dei log Basic
-LakePricePerGBdecimalNo0.20Prezzo per GB del livello Auxiliary / Data Lake (inserimento + elaborazione)
-NonInteractiveswitchNo-Salta la dashboard TUI ed esporta direttamente (o restituisce i dati alla pipeline se -Output è omesso)
-CustomClassificationPathstringNo-Percorso di un file JSON personalizzato per aggiungere o sovrascrivere le classificazioni (alias -clf)
-NoCacheswitchNo-Non leggere né scrivere la cache di raccolta
-RefreshCacheswitchNo-Raccogli dati aggiornati e sovrascrivi la voce della cache
-CacheMaxAgeMinutesintNo60Età massima di una voce della cache da riutilizzare (1-10080)
-CachePathstringNo$env:LOCALAPPDATA\LogHorizon\cacheDirectory per i file della cache
Controllo XDR
Tabella Defender XDR nota non trasmessa, trasmessa senza copertura, non inoltrata al Data Lake, o sotto l'anno di consulenza
Rivedere trasmissione e conservazione per la telemetria XDR
Analizzatore di rilevamentiPunteggi regola >= 70 con almeno 5 incidenti (con -IncludeDetectionAnalyzer)Ottimizzare o disabilitare la regola rumorosa