
Analisador de Fontes de Log do SIEM Microsoft Sentinel
Já tive que responder "o que estamos realmente obtendo desses logs?" ou "quais são os logs recomendados para o Microsoft Sentinel" mais vezes do que consigo contar. A resposta sempre depende de muitas coisas, mas podemos ser genéricos. Então construí essa ferramenta aqui.
Log Horizon conecta-se ao seu workspace do Microsoft Sentinel (e opcionalmente ao Defender XDR), percorre cada tabela de logs que você está ingerindo e informa se você está obtendo valor de segurança com isso ou apenas queimando dinheiro. Ele classifica tabelas, pontua-as em relação às suas regras de detecção e fornece recomendações concretas com estimativas de economia.
Importante: Esta é uma abordagem genérica. Se você sabe que uma fonte de log é importante para o seu ambiente, esse contexto sempre tem precedência sobre o que esta ferramenta informa. As classificações são um ponto de partida, não uma verdade absoluta.
Quer ler mais? Tenho algumas postagens sobre o Log Horizon no meu blog:
| Recurso | Descrição |
|---|---|
| Mecanismo de Classificação | Base de conhecimento com 481 entradas cobrindo mais de 240 conectores, 22 categorias, com status de ciclo de vida (descontinuado/legado além de tabelas de substituição) e fallback heurístico automático para tabelas desconhecidas |
| Pontuação Custo-Valor | Matriz de nível de custo por tabela versus nível de detecção com avaliação combinada (Alto Valor a Baixo Valor), precificada por plano observado (Analytics, Basic, Data Lake) |
| Recomendações | 13 tipos de ação priorizados: candidatos a data lake ou Basic, tabelas sem detecção, desperdício de streaming XDR, filtragem no momento da ingestão, candidatos a divisão, uso de plano, fontes descontinuadas, deficiências de retenção, descobertas do XDR Checker e do Detection Analyzer, cada um com estimativas de economia |
| Mapeamento de Detecções | Mapeia regras de análise, consultas de hunting e detecções XDR para cada tabela para identificar lacunas de cobertura |
| Tags de Correlação | Detecta tags #DONT_CORR# / #INC_CORR# em descrições de regras e sinaliza regras excluídas da correlação do Defender |
| Conformidade de Retenção | Compara a retenção real com os mínimos recomendados com base em padrões do setor e melhores práticas de segurança |
| Otimização do SOC | Obtém as próprias recomendações de melhoria do SOC da Microsoft a partir da API Security Insights |
| Análise de Lacunas por Palavras-Chave | Sinaliza tabelas que você deveria estar ingerindo, mas não está, com base em palavras-chave de fornecedor/produto |
| Descoberta de Transformações | Descobre Data Collection Rules (DCRs) direcionadas ao workspace (lista de assinaturas filtrada por destino, o DCR de transformação do workspace e associações de workspace), analisa transformações inline e em vários estágios e rotula cada operação (filtro, projeção, remoção de coluna, enriquecimento, agregação) |
| Detecção de Tabelas Divididas | Identifica tabelas divididas _SPLT_CL e as vincula de volta às tabelas pai no mecanismo de classificação |
| Gerador de KQL de Divisão | Gera KQL de divisão pronto para o portal a partir de uma base de conhecimento selecionada, análise de regras em tempo real e estatísticas de frequência de campos da comunidade — formato somente de condição que é colado diretamente no editor de regras de divisão do Sentinel. As listas de campos são cruzadas com o esquema ativo da tabela; qualquer coisa não presente é relatada como descartada |
[!CAUTION] Aviso Legal
Esta ferramenta é desenvolvida e mantida com a ajuda de IA. Tenha cautela ao usar esta solução e sempre entenda o que você está executando antes de executá-la em produção. O desenvolvedor não assume nenhuma responsabilidade por vulnerabilidades ou problemas.
Ao baixar, instalar ou usar esta ferramenta, você reconhece que leu, entendeu e concorda com estes termos.
| O que você precisa | Versão |
|---|---|
| PowerShell | 7.0+ |
| Módulos Az | Az.Accounts |
| Outros módulos | PwshSpectreConsole 2.6.3+ |
| Opcional | Microsoft.Graph.Authentication (para -IncludeDefenderXDR como usuário conectado) |
Os endpoints seguem o ambiente do Azure da sessão atual do Connect-AzAccount, portanto, workspaces do Azure Government e do Azure China funcionam sem parâmetros extras. Os valores da nuvem pública são usados quando nenhum ambiente está disponível.
Se você ainda não estiver conectado ao Azure, o módulo iniciará o Connect-AzAccount para você. Se já estiver, ele simplesmente continuará.
Permissões: Log Analytics Reader e Microsoft Sentinel Reader no workspace cobrem a análise. A descoberta de transformações também precisa de Microsoft.Insights/dataCollectionRules/read (Monitoring Reader) na assinatura ou no grupo de recursos; sem isso, a execução continua e imprime um aviso nomeando a permissão ausente. -IncludeDefenderXDR usa o Microsoft Graph com CustomDetection.Read.All, o que, para um usuário conectado, significa o módulo opcional Microsoft.Graph.Authentication.
Bem direto:```powershell
Install-Module -Name Az.Accounts -Scope CurrentUser Install-Module -Name PwshSpectreConsole -Scope CurrentUser
git clone https://github.com/lnfernux/log-horizon Import-Module ./log-horizon/LogHorizon.psd1
## Utilização
### Noções básicas
Comece por ligar ao Azure e certifique-se de que seleciona a conta e a subscrição corretas:```powershell
Connect-AzAccount
Então podemos invocar a ferramenta:```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" />
Também possui um menu para aprofundar em outras saídas:
<img width="395" height="223" alt="{83CE9E6E-F373-49CD-BE05-182DB69F36BE}" src="https://assets.kitploit.com/production/public/readmes/13110/0606a575b10640bd13ebb87b930f74b2438167b5578cb843b412b4fcf273fc26.png" />
### Lacunas de palavras-chave + Defender XDR
Quer saber se você está perdendo tabelas relacionadas a fornecedores específicos? Inclua algumas palavras-chave. Adicione `-IncludeDefenderXDR` se quiser também a análise do XDR.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Keywords 'CrowdStrike','AWS','Okta' -IncludeDefenderXDR
Ative a análise de qualidade/ruído de regras com base em incidentes e regras de automação:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -IncludeDetectionAnalyzer -DetectionLookbackDays 90
### Exportar um relatório```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/
Agora pode atualizar a retenção e o tipo de tabelas diretamente a partir da TUI interativa:
Invoke-LogHorizon normalmente e, em seguida, escolha Gerir a retenção e o tipo de tabelas no menu principal para atualizações em massa de retenção ou tipo.Para scripts ou automatização, utilize o comando público dedicado:```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
### Modo não interativo / CI
Ignore a TUI interativa e exporte diretamente para um arquivo, útil para pipelines ou execuções agendadas:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/
Se omitires -Output, o objeto de análise é retornado ao pipeline para que você possa encaminhá-lo para sua própria lógica.
A fase de coleta de dados (uso, regras, incidentes, tabelas, DCRs) é armazenada em cache por padrão, de modo que reexecutar contra o mesmo workspace, por exemplo, para exportar um segundo formato ou reabrir a TUI, leva segundos em vez de minutos. O cache fica em $env:LOCALAPPDATA\LogHorizon\cache (substituível com -CachePath), um arquivo por combinação de assinatura, grupo de recursos, workspace, -DaysBack, -DetectionLookbackDays, -IncludeDefenderXDR, -IncludeDetectionAnalyzer, os três parâmetros de preço e a versão do módulo. Entradas mais antigas que -CacheMaxAgeMinutes (padrão 60) são ignoradas, e cada salvamento exclui entradas expiradas para que a pasta não acumule arquivos de outros conjuntos de parâmetros ou versões mais antigas. Tokens nunca são gravados no cache; a autenticação é executada em toda invocação, de modo que o assistente de retenção sempre tenha credenciais ativas.
O arquivo de cache é Clixml em texto simples. Com -IncludeDetectionAnalyzer, ele contém títulos, números, status e classificação de incidentes do seu workspace; proprietários de incidentes, autores de regras e identidades de proprietário designado não são coletados. Use -NoCache em máquinas compartilhadas ou aponte -CachePath para um local com o controle de acesso que você precisar.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -RefreshCache
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NoCache
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -CacheMaxAgeMinutes 1440
### Ajuste de registos e KQL de divisão
A interface TUI interativa inclui um menu **Log Tuning / Transforms** com sugestões de ajuste em tempo real (utilização de campos das suas regras implementadas e consultas de hunting), KQL de divisão da base de conhecimento e um avaliador por tabela. Cada bloco KQL é apenas de condição e cola diretamente no editor de regras de divisão do Sentinel, com atribuição de origem (base de conhecimento, análise de regras ou combinada).
### Preços personalizados
Os preços predefinidos são West Europe Simplified PAYG em USD: 5,59 $/GB Analytics, 1,15 $/GB Basic, 0,20 $/GB Data Lake (0,07 ingestão + 0,13 processamento). Cada tabela é precificada pelo plano observado na tabela `Usage`, e o estado gratuito provém de `Usage.IsBillable`. Os volumes utilizam GB de faturação (1000 MB). Se o seu nível de compromisso for diferente:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61 -BasicPricePerGB 1.15 -LakePricePerGB 0.20
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
-SubscriptionId | string | Sim | - | ID da subscrição do Azure |
-ResourceGroup | string | Sim | - | Grupo de recursos que contém o workspace do Sentinel |
-WorkspaceName | string | Sim | - | Nome do workspace do Log Analytics |
-WorkspaceId | string | Não | - | ID do workspace (resolvido automaticamente se omitido) |
-Output | string | Não | - | Formato de exportação: json, markdown / md, ou html (alias -o) |
-OutputPath | string | Não | - | Caminho de ficheiro ou diretório para exportação. Um diretório existente ou um separador final gera um nome de ficheiro com timestamp; um nome de ficheiro sem extensão recebe a extensão do formato; diretórios em falta são criados |
-Keywords | string[] | Não | - | Palavras-chave para análise de lacunas (ex.: 'AWS','CrowdStrike', alias -kw) |
-IncludeDefenderXDR | switch | Não | - | Incluir análise de deteções personalizadas do Defender XDR |
-IncludeDetectionAnalyzer | switch | Não | - | Incluir análise de deteções ruidosas por regra, usando incidentes e regras de automação |
-DetectionLookbackDays | int | Não | 90 | Janela de consulta para análise de deteções baseada em incidentes/automação (1-365 dias) |
-DaysBack | int | Não | 90 | Janela de consulta para dados de utilização (1-365 dias) |
-PricePerGB | decimal | Não | 5.59 | Preço de ingestão por GB do nível Analytics do Sentinel (alias ) |
Portanto, há quatro fases.
O módulo liga-se ao Azure e extrai dados das APIs do Log Analytics, Security Insights, Azure Monitor e Microsoft Graph. Cada chamada passa por um wrapper de repetição (erros 429, 5xx e de transporte) e, a menos que -NoCache esteja definido, os dados recolhidos são armazenados em cache localmente para a próxima execução.
| Fonte de dados | API | O que recolhemos |
|---|---|---|
| Utilização de tabelas | Tabela Usage (KQL) | Volume de ingestão, plano e sinalizador de faturação por tabela ao longo da janela de consulta |
| Regras de análise | Security Insights REST | Regras de deteção ativas + quais tabelas atingem + etiquetas de correlação, além de consumidores implícitos de tabelas para tipos de regras não-KQL |
| Consultas de hunting | Pesquisas guardadas do Log Analytics REST | Consultas de hunting guardadas + tabelas referenciadas |
| Conectores de dados | Security Insights REST | Inventário de conectores instalados |
| Otimização do SOC | Security Insights REST (pré-visualização) | Recomendações SOC incorporadas da Microsoft |
| Retenção de tabelas | Log Analytics Tables REST | Retenção por tabela, arquivo, plano (Analytics/Basic/Auxiliary), sinalizadores de herança padrão e colunas de esquema |
| Regras de recolha de dados | Azure Monitor REST | DCRs direcionadas ao workspace (lista de subscrições, DCR de transformação do workspace, associações) e as suas transformações |
| Defender XDR | Microsoft Graph | Regras de deteção personalizadas do XDR (opcional; CustomDetection.Read.All delegado ou token do Az Graph) |
| Incidentes | Security Insights REST | Resultados de incidentes (estado/classificação), temporização e pistas de ligação a regras para pontuação de qualidade de regras |
| Regras de automação | Security Insights REST | Ações de fecho de incidentes ao nível da regra e condições de correspondência de títulos para atribuição de fecho automático |
| SentinelHealth | Log Analytics KQL | Eventos de execução de regras de automação com números de incidentes para atribuição definitiva de fecho automático (opcional, requer monitorização de saúde) |
Cada tabela é classificada em duas passagens:
Primeiro, uma consulta direta à base de conhecimento de 481 entradas em Data/log-classifications.json. Cada entrada contém o nome do conector, classificação primária/secundária, categoria de segurança, mapeamentos de fontes de dados MITRE, um nível de preço e retenção recomendados, e sinalizadores de ciclo de vida opcionais (preterido/legado com tabelas de substituição, capacidade de transmissão XDR, plataforma).
Se não houver correspondência, entram em ação regras heurísticas, nesta ordem:
Alert, Incident, Threat, Signin, Logon, Audit, Risk, Detection (correspondido no início de palavras PascalCase) -> primáriaFlow, Metric, Diagnostic, Perf, Heartbeat, Health, Inventory, Usage -> secundáriaAAD, Microsoft, Azure, Defender, Purview, Entra, Sentinel, Office, Intune, Windows ...) -> primária, sinalizada para revisão e adição à base de dados*Log/*Logs -> secundáriaCada tabela é pontuada em algumas dimensões:
tablesWithRules / totalTables * 100. A cobertura por tabela soma regras de análise + consultas de hunting encontradas ao analisar KQL para nomes de tabelas.Data/implicit-consumers.json mapeia-os (correspondência de Threat Intelligence -> ThreatIntelIndicators/ThreatIntelObjects, Fusion -> SecurityAlert/Anomalies, UEBA -> BehaviorAnalytics/UserPeerAnalytics/IdentityInfo, criação de incidentes da Microsoft -> SecurityAlert). Regras ativas desses tipos contam para a cobertura efetiva, e cada tabela reporta uma CoverageSource de kql, xdr, implicit, platform ou none. Tabelas de plataforma que o Sentinel escreve para si próprio (SecurityIncident, SentinelHealth, Watchlist, Usage ...) nunca são sinalizadas como cobertura em falta e recebem a avaliação Platform.Depois, o módulo gera recomendações (13 tipos):
| Tipo | Quando dispara | O que fazer |
|---|---|---|
| Data Lake | Secundária + custo elevado + poucas deteções, e a tabela suporta o plano Auxiliary (recorre a uma sugestão de plano Basic quando apenas Basic é suportado) | Mover para o nível Auxiliary/Data Lake; as poupanças são o custo atual menos o mesmo volume à taxa do lake (ou Basic) |
| Baixo Valor | Custo elevado + zero deteções | Adicionar regras, filtrar ou mover para o data lake |
| Otimizar XDR | Transmitida por XDR + 0 regras do Sentinel + regras XDR existem | Parar a transmissão, usar o portal XDR unificado em vez disso |
| Cobertura em Falta | Primária + zero deteções (não tabelas de plataforma) | Escrever regras de análise para obter valor dos dados |
| Filtro na Ingestão | Primária + >20 GB + <=3 deteções | Aplicar transformação na ingestão para reduzir volume |
| Candidata a Divisão | Primária + volume elevado + deteções + sem transformação existente | Dividir a tabela para que linhas de alto valor permaneçam no Analytics e o resto vá para o Data Lake |
| Utilização do Plano | Linhas de utilização mostram mais de um plano, ou o plano configurado difere do que a utilização observou | Rever se a transição de plano era esperada |
| Fonte Preterida | Uma tabela marcada como preterida ou legada na base de dados ainda está a ingerir | Migrar deteções para as tabelas de substituição e depois retirar o conector antigo. Informativo: não são reclamadas poupanças porque a ingestão move-se em vez de desaparecer |
| Falha de Retenção | Retenção do workspace ou da tabela abaixo da linha de base de 90 dias | Aumentar a retenção total/arquivo para cumprir a orientação regulamentar |
| Melhoria de Retenção | Tabela paga, não de plataforma, cumpre 90d mas fica abaixo da recomendação da categoria | Considerar retenção total mais longa |
| Abaixo da Linha de Base Interativa | Tabela Analytics com retenção interativa (quente) abaixo de 90 dias | Aumentar a retenção interativa para os 90 dias que o Sentinel inclui, a menos que a janela quente curta seja deliberada |
| Verificador XDR | Tabela conhecida do Defender XDR não transmitida, transmitida sem cobertura, não reencaminhada para o Data Lake, ou abaixo do aviso de um ano |
As recomendações são ordenadas uma vez, Alta > Média > Baixa e depois por poupanças estimadas, e cada saída (JSON, Markdown, HTML, TUI) mantém essa ordem.
Quando passa -IncludeDetectionAnalyzer, o módulo obtém incidentes recentes e regras de automação, e depois pontua cada regra de análise ativa quanto a potencial ruído.
Métricas por regra (calculadas a partir de dados de incidentes):
| Métrica | Como é calculada |
|---|---|
| Total de incidentes | Contagem de incidentes ligados à regra |
| Rácio de fecho automático | Incidentes fechados por regras de automação ÷ total de incidentes. Fonte primária: tabela SentinelHealth (execuções de regras de automação por regras ativas de fecho de incidentes ou playbooks, correspondidas por número de incidente). Recurso alternativo: correspondência de condições de regras de automação (id de regra analítica, condições de título e gravidade, combinadas com AND como o Sentinel faz). Regras cujas condições são apenas estado/táticas/entidades são tratadas como aplicáveis a todos os incidentes. |
| Rácio de falsos positivos | Incidentes classificados como falsos positivos ÷ total de incidentes |
Fórmula da pontuação de ruído:
Cada métrica é convertida numa classificação percentual entre todas as regras que têm pelo menos um incidente. A pontuação composta é uma mistura ponderada:``` Score = (Volume_percentile × 0.35) + (AutoClose_percentile × 0.40) + (FalsePositive_percentile × 0.25)
- **Percentil de volume (35%)**: quantos incidentes uma regra gera em relação a outras regras.
- **Percentil de AutoClose (40%)**: com que frequência os incidentes são fechados automaticamente por regras de automação (maior peso porque o fechamento automatizado é o sinal mais forte de alertas de baixo valor).
- **Percentil de falso positivo (25%)**: com que frequência os analistas classificam o resultado como falso positivo.
**Limiares de pontuação**:
| Pontuação | Rótulo | Significado |
|---|---|---|
| ≥ 70 | Ruidosa | A regra provavelmente precisa de ajuste ou desativação |
| ≥ 50 | Vigiar | A regra mostra sinais precoces de ruído |
| < 50 | Saudável | A regra está dentro da faixa normal |
| N/A | - | A regra não tem incidentes correlacionados, ou menos de 3 regras têm incidentes, então não há nada para classificar |
Os incidentes são agrupados por ID de regra analítica (recorrendo ao nome da regra e depois ao título), portanto, duas regras que compartilham um nome de exibição são pontuadas separadamente.
Regras com pontuação ≥ 70 e pelo menos 5 incidentes são automaticamente apresentadas como **recomendações de alta prioridade** na visualização de Recomendações.
### 5. Painel interativo
O menu principal oferece estas visualizações:
- **Painel**: estatísticas gerais, as 10 tabelas mais caras (fontes preteridas e legadas exibem um selo), barra de cobertura, resumo de conformidade de retenção, aviso de exclusão de correlação
- **Ver Recomendações**: ações priorizadas com economia mensal estimada, expansíveis para mostrar a lista completa quando há mais de 10
- **Ver Avaliação de Detecção**: resumo da matriz custo-valor, cobertura de regras e consultas de caça por tabela, detalhamento primário/secundário, listagem de regras excluídas por correlação
- **Ver Analisador de Detecção**: classificação de regras ruidosas baseada em percentil com indicadores de qualidade de fechamento (quando você usou `-IncludeDetectionAnalyzer`), navegador de regras pesquisável
- **Ver Otimização do SOC**: sugestões de melhoria da própria Microsoft com detalhamento
- **Ver Avaliação de Retenção**: tabelas abaixo dos mínimos recomendados com retenção atual vs. recomendada, tipo de plano e déficit, além de linhas de aviso do XDR
- **Ver Transformações de Dados**: inventário de transformações DCR com classificação de tipo de transformação e KQL completo por tabela
- **Ajuste de Log / Transformações**: sugestões de ajuste em tempo real, KQL dividido por base de conhecimento e um avaliador por tabela com alteração de retenção/tipo de tabela única
- **Ver Todas as Tabelas**: a lista completa com classificação, planos, custo, regras, retenção (codificada por cores) e avaliação; selecione uma tabela para um painel de detalhes (fontes de cobertura, suporte de plano, retenção, status, suas recomendações)
- **Gerenciar retenção e tipo de tabela**: assistente de retenção e plano em massa com pré-visualização e aplicação
- **Dicionário**: todos os termos que a ferramenta usa (classificação, níveis de custo e detecção, avaliações, fontes de cobertura, os 13 tipos de recomendação, métricas e rótulos de pontuação do Analisador de Detecção, planos de tabela, status de ciclo de vida, estados do XDR, tipos de transformação) com as mesmas definições deste README, servidos de `Data/dictionary.json`
- **Exportar Relatório**: escolha um formato e depois um caminho (diretório para um arquivo com carimbo de data/hora, ou um nome de arquivo; Enter mantém o diretório atual) e grave JSON, Markdown ou HTML diretamente do menu
- **Análise XDR** aparece no painel quando você usou `-IncludeDefenderXDR`
---
## O banco de dados de classificação
Localizado em `Data/log-classifications.json`. **481 entradas**, **243 conectores**, **22 categorias**.
### O que há em cada entrada
| Campo | O que contém |
|---|---|
| `tableName` | Nome da tabela do Log Analytics (`SecurityEvent`, `SigninLogs`, etc.) |
| `connector` | Qual conector de dados produz esta tabela |
| `classification` | `primary` (valor de segurança) ou `secondary` (telemetria de suporte) |
| `category` | Categoria de segurança: Identidade e Acesso, Segurança de Rede, etc. |
| `description` | Resumo em linguagem simples do que há na tabela |
| `keywords` | Termos para correspondência na análise de lacunas por palavras-chave |
| `mitreSources` | Mapeamentos de fontes de dados MITRE ATT&CK |
| `recommendedTier` | `analytics` (camada quente) ou `datalake` (candidato auxiliar) |
| `recommendedRetentionDays` | Retenção total mínima recomendada em dias (orientação regulatória) |
| `isFree` | Se a Microsoft ingere esta tabela gratuitamente (o runtime usa `Usage.IsBillable` primeiro) |
| `status` | Opcional. `deprecated` (conector aposentado ou ingestão interrompida) ou `legacy` (caminho de coleta mais antigo com sucessor documentado) |
| `replacedBy` | Opcional. Nomes de tabelas para migrar; presente sempre que `status` estiver definido (pode estar vazio) |
| `xdrStreamable` | Opcional, apenas tabelas Defender. `true` para as 21 tabelas que o conector Defender XDR transmite; `false` para tabelas somente de portal e TVM |
| `platform` | Opcional. `true` para tabelas que o próprio Sentinel consome (`SecurityIncident`, `Usage`, `Watchlist`, ...) que nunca precisam de regras analíticas |
Tabelas com `status` exibem um selo na TUI e nos relatórios, e qualquer uma que ainda ingere gera uma recomendação `DeprecatedSource` nomeando a substituição. Tabelas com `xdrStreamable: false` nunca são tratadas como candidatas a transmissão XDR pelo Verificador XDR.
### Dados de segurança primários vs. secundários
**Primários** (278 entradas): as tabelas nas quais você realmente constrói detecções. Logs de entrada, alertas de segurança, inteligência de ameaças, trilhas de auditoria, descobertas de vulnerabilidades, acionamentos de firewall, telemetria EDR.
**Secundários** (203 entradas): coisas de suporte. Métricas de desempenho, diagnósticos de infraestrutura, volumes de fluxo de rede, instantâneos de inventário, linhas de base de configuração, verificações de saúde.
### Categorias de relance
| Categoria | Contagem | Exemplos |
|---|---|---|
| Identidade e Acesso | 51 | `SigninLogs`, `MicrosoftServicePrincipalSignInLogs`, `OktaSSO` |
| Segurança de Rede | 49 | `AZFWNetworkRule`, `NSPAccessLogs`, `DarktraceModelAlerts_CL` |
| Plano de Controle de Nuvem | 37 | `AzureActivity`, `AZKVAuditLogs`, `GoogleWorkspaceReports` |
| Fluxo de Rede | 36 | `NTANetAnalytics`, `CommonSecurityLog`, `AZFWFatFlow` |
| Detecção de Endpoint | 33 | `DeviceProcessEvents`, `CrowdStrikeAuditEvents`, `SentinelOneAlertsV2_CL` |
| Logs de Aplicação | 32 | `AppServiceHTTPLogs`, `AppServiceAuditLogs`, `DynatraceAttacksV2_CL` |
| Segurança de E-mail | 29 | `EmailEvents`, `CampaignInfo`, `Ttp_Url_CL` |
| Alertas de Segurança | 29 | `SecurityAlert`, `SentinelBehaviorInfo`, `DisruptionAndResponseEvents` |
| Gerenciamento de Vulnerabilidades | 23 | `DeviceTvmSoftwareVulnerabilities`, `Rapid7InsightVMCloudVulnerabilities` |
| Segurança de Nuvem | 20 | `EnrichedMicrosoft365AuditLogs`, `OAuthAppInfo`, `PowerAppsActivity` |
| Telemetria de Endpoint | 18 | `DeviceInfo`, `Windows365NetworkLogs`, `SentinelOneAgents_CL` |
| Gerenciamento de Postura | 17 | `ExposureGraphNodes`, `SecurityNestedRecommendation`, `ZTSMetadata` |
| Segurança de Dados | 16 | `PurviewDataSensitivityLogs`, `DataSecurityEvents`, `PowerPlatformDlpActivity` |
| Plataforma de Dados | 16 | `SQLSecurityAuditEvents`, `CDBControlPlaneRequests`, `SnowflakeLogin_CL` |
| Saúde da Plataforma | 14 | `SentinelHealth`, `Usage`, `SecurityCaseEvent` |
| Contêiner e K8s | 13 | `AKSAudit`, `CloudProcessEvents`, `GKEAudit` |
| Diagnóstico de Infraestrutura | 13 | `AzureMetrics`, `AGWPerformanceLogs`, `ContainerAppSystemLogs` |
| Inteligência de Ameaças | 10 | `ThreatIntelIndicators`, `ThreatIntelObjects`, `CybleVisionAlerts_CL` |
| Gerenciamento de Configuração | 8 | `ConfigurationData`, `AVNMRuleCollectionChange` |
| Segurança SAP | 7 | `ABAPAuditLog`, `SAPBTPAuditLog_CL`, `Onapsis_Defend_CL` |
| Acesso a Armazenamento | 6 | `StorageBlobLogs`, `CloudStorageAggregatedEvents`, `AWSS3ServerAccess` |
| Segurança IoT/OT | 4 | `RadiflowEvent`, `DragosAlerts_CL`, `Phosphorus_CL` |
### Suporte a planos de tabela
`Data/basic-plan-tables.json` e `Data/auxiliary-plan-tables.json` listam as tabelas integradas que a [matriz de recursos de tabelas do Azure Monitor](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/tables-features) marca como suportando os planos Básico e Auxiliar (Data Lake). O assistente de retenção usa a lista Básica para validar trocas de plano, e a recomendação `DataLake` só propõe a camada de lake para tabelas que a suportam, recorrendo a uma sugestão de plano Básico onde esse é o nível mais baixo suportado. Tabelas personalizadas baseadas em DCR suportam ambos os planos; tabelas personalizadas Clássicas não suportam nenhum. Ambos os arquivos são regenerados a partir dessa matriz a cada versão.
### Classificações personalizadas
Você pode fornecer seu próprio arquivo de classificação para **adicionar** entradas para tabelas que não estão no banco de dados integrado, ou **substituir** entradas existentes quando os padrões não correspondem ao seu ambiente. Entradas personalizadas têm precedência sobre as integradas quando o mesmo `tableName` aparece em ambos.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' `
-CustomClassificationPath './my-classifications.json'
O ficheiro personalizado usa o mesmo esquema que Data/log-classifications.json, um array de objetos:```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
}
]
Consulte o `Data/custom-classifications-example.json` para um modelo pronto para uso.
### Como as classificações foram construídas
A classificação primária/secundária foi feita parcialmente pelo autor e depois alimentando o conector de dados e as definições de tabelas da Microsoft em IA com uma linha de base de classificação humana, usando as melhores práticas da Microsoft e padrões do setor como critérios de classificação. Se algo parecer estranho para o seu ambiente, confie no seu próprio contexto em vez da ferramenta — a IA pode cometer erros, e contexto é tudo.
Os critérios de classificação foram extraídos das seguintes fontes:
**ACSC (Diretoria de Sinais Australiana, Centro Australiano de Segurança Cibernética)**
- [ACSC: Melhores práticas para registro de eventos e detecção de ameaças (ago. 2024)](https://www.cyber.gov.au/sites/default/files/2024-08/best-practices-for-event-logging-and-threat-detection.pdf)
- [ACSC: Logs prioritários para ingestão em SIEM — Orientação para profissionais (mai. 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 (Agência de Segurança Cibernética e de Infraestrutura)**
- [CISA: Orientação para implementação do M-21-31: Melhorando as capacidades investigativas e de remediação do Governo Federal](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: Manual de implementação de logs expandidos em nuvem da Microsoft (2025)](https://www.cisa.gov/sites/default/files/2025-01/microsoft-expanded-cloud-logs-implementation-playbook-508c.pdf)
**Microsoft**
- [Referência de conectores de dados do Microsoft Sentinel](https://learn.microsoft.com/en-us/azure/sentinel/data-connectors-reference)
- [Referência de tabelas e conectores do Microsoft Sentinel](https://learn.microsoft.com/en-us/azure/sentinel/sentinel-tables-connectors-reference)
- [Repositório GitHub do Azure-Sentinel](https://github.com/Azure/Azure-Sentinel) (regras de análise da comunidade, definições de conectores, modelos de solução)
- [Cobrança do Microsoft Sentinel](https://learn.microsoft.com/azure/sentinel/billing)
- [Gerenciamento de camadas de dados do Microsoft Sentinel](https://learn.microsoft.com/azure/sentinel/manage-data-overview)
**MITRE**
- [Fontes de dados do MITRE ATT&CK](https://attack.mitre.org/datasources/)
**NIST (Instituto Nacional de Padrões e Tecnologia)**
- [NIST SP 800-92: Guia para gerenciamento de logs de segurança de computadores](https://csrc.nist.gov/pubs/sp/800/92/final)
**NSA (Agência de Segurança Nacional)**
- Orientação de encaminhamento de eventos cibernéticos da NSA
**NCSC-UK (Centro Nacional de Segurança Cibernética — Reino Unido)**
- "O que exatamente devemos registrar?" do NCSC-UK
**Google Cloud**
- [Visão geral dos logs de auditoria do Google Cloud](https://docs.cloud.google.com/logging/docs/audit)
- [Melhores práticas para logs de auditoria do Google Cloud](https://docs.cloud.google.com/logging/docs/audit/best-practices)
Outras fontes também foram usadas, junto com a "experiência" dos autores, se você puder categorizá-la como tal.
---
## Estrutura do projeto```
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
As bases de conhecimento KQL divididas, high-value-fields.json e field-frequency-stats.json, são construídas offline a partir do repositório público Azure/Azure-Sentinel (Solutions/, Detections/, Hunting Queries/, aproximadamente 3.800 arquivos de regras YAML). Cada consulta é executada pelos mesmos Get-TablesFromKql e Get-FieldsFromKql que o módulo usa em tempo de execução para construir contagens de frequência de campos por tabela, a partir das quais três níveis de campos de fallback são derivados:
TimeGenerated)Os campos minerados são mesclados no high-value-fields.json curado (entradas curadas são mantidas, tabelas recém-descobertas com pelo menos 3 regras e 3 campos significativos são adicionadas).
Em tempo de execução, Get-SplitKql usa uma hierarquia de fallback: entrada curada da KB -> análise de campos de regras/hunting ao vivo -> estatísticas por tabela da comunidade -> padrões por categoria -> campos universais. A frequência de campos não é um método perfeito, mas é útil saber.
437 testes Pester v5, sem necessidade de conectividade com o Azure. Execute-os a partir de uma sessão comum do PowerShell, em vez do terminal integrado do VS Code:```powershell Invoke-Pester ./Tests/LogHorizon.Tests.ps1 -Output Detailed
## Licença
GPL-3.0. Consulte [LICENSE](https://github.com/lnfernux/log-horizon/blob/main/LICENSE).
## Histórico de versões
| Versão | Data | Alterações |
|---|---|---|
| 0.9.0 | 2026-09-06 | Versão de correção resultante de uma revisão completa de código e dados. Correção: precificação ciente do plano a partir de `Usage.Plan` e `Usage.IsBillable` com tarifas Basic e Data Lake e GB de faturamento (1000 MB), atribuição de fechamento automático do Detection Analyzer restrita a regras de fechamento/playbook habilitadas (`triggeringLogic.isEnabled`), incidentes via `2025-09-01` com `$top=1000`, cobertura implícita para tipos de regras não-KQL e tabelas de plataforma (`implicit-consumers.json`), verificação de linha de base de retenção interativa, ordenação única de recomendações. Transformações: descoberta de DCR no escopo da assinatura filtrada pelo workspace de destino, além do DCR de transformação do workspace e associações, com status visível e aviso quando uma permissão estiver ausente; análise de transformações de workspace e multi-estágio; KQL dividido interseccionado com o esquema de tabela ativo. Robustez: cache de coleta ativado por padrão (`-NoCache`, `-RefreshCache`, `-CacheMaxAgeMinutes`, `-CachePath`), autenticação antes do spinner com avisos impressos depois, saída TUI e Markdown escapada, resolução de caminho de exportação que cria diretórios e retorna o caminho gravado, meta CSP em HTML, novas tentativas REST em erros de transporte e conclusão assíncrona estilo Location, resolução de workspace via REST (`Az.Resources` removido), validação de classificação personalizada, heurísticas cientes de PascalCase com fallback de primeira parte da Microsoft, timeouts de regex. Os endpoints seguem o ambiente Azure conectado (Government, China) e as versões de API movidas para SecurityInsights `2025-09-01`, OperationalInsights `2025-07-01`, recomendações `2025-10-01-preview`. Dados: banco de classificação 345 -> 481 entradas com chaves `status`/`replacedBy`/`xdrStreamable`/`platform`, mais de 80 tabelas de primeira parte e 35 sucessoras, correções de rótulos de conectores, correções de `isFree`; `basic-plan-tables.json` regenerado e novo `auxiliary-plan-tables.json` a partir da matriz de recursos de tabelas do Azure Monitor; recomendação `DeprecatedSource`, recomendação Data Lake ciente do plano com fallback Basic, XDR Checker respeita a capacidade de streaming, selos de ciclo de vida em TUI e exportações. Passo de revisão: chave de cache cobre precificação e versão do módulo, booleanos e níveis de classificação personalizada analisados em vez de convertidos, atribuição de fechamento automático ciente de severidade, predicados KQL divididos verificados contra o esquema ativo, status de busca XDR exibido em vez de `$null` silencioso, caminhos de saída sem extensão são arquivos, identidades de proprietários de incidentes não são mais coletadas. Menu de dicionário na TUI com todos os termos que a ferramenta usa, apoiado por `Data/dictionary.json` e fixado ao código por testes. Objetos de regra de automação e detecção personalizada do Defender são projetados para os campos consumidos, de modo que identidades de autores (createdBy, lastModifiedBy, proprietários atribuídos) nunca chegam ao cache ou às exportações. Licença GPL-3.0. 437 testes |
| 0.8.0 | 2026-05-26 | Adicionado gerenciamento interativo de retenção de tabelas com novo fluxo TUI em massa e ponto de entrada de atualização de tabela única, além do comando público `Set-LogHorizonTableRetention`. Adicionado mecanismo de aplicação PATCH da API Tables com validação, sondagem de operação assíncrona do Azure e fallback em duas etapas (PATCH combinado, depois somente plano e somente retenção) para atualizações de retenção resilientes. Adicionada cobertura Pester focada para validação, formato de payload, fallback e mapeamento de comando público. Também corrige um caso extremo/bug em que os usuários recebiam recomendações para alterar tabelas data lake para o nível data lake se ainda tivessem dados de análise no Sentinel |
| 0.7.1 | 2026-05-15 | Adicionada consciência de plano a partir de `Usage.Plan` sem substituir o plano de tabela configurado: a análise agora rastreia o histórico de planos observados, sinaliza uso de múltiplos planos e incompatibilidades configurado-vs-observado, e apresenta dados de plano no painel, detalhamento de tabela, Ver Todas as Tabelas, avaliação de retenção e exportações. Corrigida a atribuição de fechamento automático do Detection Analyzer para que a heurística de tempo seja aplicada somente quando não existirem regras de automação habilitadas. 203 testes passando |
| 0.7.0 | 2026-04-16 | Avaliação de Detecção atualizada com tabela de resumo de matriz custo-valor (categorias de avaliação Primária/Secundária x7 com codificação de cores), submenu de detalhamento para tabelas primárias/secundárias com colunas de nível de custo/detecção. Detection Analyzer atualizado com barras de cobertura de volume ponderadas por GB (GB de detecção/caça/combinado como porcentagem da ingestão total, junto às barras existentes de contagem de tabelas). Melhorias de exibição adaptativa para o Detection Analyzer (largura dinâmica de barras, truncamento de nomes de regras, ocultação condicional de colunas com base na largura do console). 193 testes passando |
| 0.6.3 | 2026-04-11 | Atualização menor para PSGallery |
| 0.6.2 | 2026-04-11 | Menu de Ajuste de Logs / Transformações: análise de ajuste de dados ao vivo (uso de campos por tabela a partir de regras/consultas de caça implantadas, geração de KQL de filtro/projeção/combinado, estimativas de economia), extração de colunas de esquema da API Tables, hierarquia de fallback de `Get-SplitKql` (estatísticas da comunidade → padrões de categoria → campos universais), avaliador abrangente de tabelas com matriz de uso de campos, seções unificadas de exportação de ajuste KB + ao vivo, script de mineração `Build-FieldKnowledgeBase.ps1` para o corpus de regras do Azure-Sentinel no GitHub. Detection Analyzer: atribuição de fechamento automático baseada em SentinelHealth (primária) com fallback de correspondência de regras ciente de operador, análise de wrapper de condição booleana, detecção de status Resolvido, correspondência de cauda GUID para IDs de recursos ARM. Cobertura agora baseada em contagem de tabelas em todas as tabelas (incluindo nível gratuito). Aviso de pontuação adicionado a TUI e exportações. 174 testes |
| 0.6.1 | 2026-04-10 | Correções de bugs: filtragem de `$kqlKeywords` agora compartilhada no escopo do arquivo (estava indefinida em `Get-TablesFromKql`), `[CmdletBinding()]` adicionado a todas as funções auxiliares, verificação unificada do Defender simplificada, removido parâmetro fantasma de teste `-RuleCount`. Robustez: paginação de `Get-HuntingQueries`, wrapper de nova tentativa `Invoke-AzRestWithRetry` com backoff exponencial para 429/5xx, validação de `PricePerGB`, `Write-Verbose` em funções-chave. Documentação: selo de versão, contagem de banco de dados, pré-requisitos alinhados com o manifesto |
| 0.6.0 | 2026-04-10 | Detecção dinâmica de streaming XDR com 21 `KnownXDRTables` (antes 18 codificadas), `XDRState` por tabela (`NotStreaming`/`Analytics`/`Basic`/`Auxiliary`), Auxiliary reconhecido como nível data lake, tabelas XDR sem streaming exibidas como recomendações Information/Low com `NotStreamedCount`, analisador de retenção mostra tabelas XDR sem streaming como "XDR only (30d)", detalhamento de níveis na visão geral (analytics/basic/data lake + sem streaming), rótulos Auxiliary→"data lake" no Export-Report, banco de classificação atualizado para 345 entradas (+`DeviceNetworkInfo`, `DeviceInfo`→secundária/data lake, `DeviceImageLoadEvents` e `IdentityQueryEvents`→nível data lake), 15 novos testes Pester (121 no total) |
| 0.5.0 | 2026-04-03 | Exportação HTML estática com abas CSS puras (zero JS, sem CDN, totalmente autocontida), renderizador unificado de seções MD/HTML, captura completa de dados JSON (dataTransforms, correlationExcluded/Included, streamingTables), opção `-NonInteractive` para uso em CI/pipelines, alias de formato `md`, nomes de arquivo automáticos com carimbo de data/hora, exibição completa de KQL em transformações DCR (sem truncamento), tratamento de KQL multilinha em tabelas markdown, corrigida corrupção de backreference regex `$` na substituição de tokens HTML, renomeados auxiliares internos para evitar conflitos de alias do PowerShell (`h`→`hEnc`, `md`→`mdEsc`), 33 novos testes Pester (106 no total) |
| 0.4.1 | 2026-04-03 | Correções de segurança e estabilidade - adicionada sanitização de memória de tokens, validação de caminho de saída e proteção XSS, limites de paginação da API REST, corrigido mascaramento de erros do carregador de módulos e resolvidos avisos do PSScriptAnalyzer |
| 0.4.0 | 2026-04-02 | Descoberta de transformações (listagem de DCR + classificação de tipo de transformação), detecção de tabelas divididas (`_SPLT_CL`), auxiliar de KQL dividido com base de conhecimento de 15 tabelas (`high-value-fields.json`) + fallback de análise de regras, saída KQL somente de condição pronta para portal, lista expansível de recomendações, menu TUI de sugestões de KQL dividido |
| 0.3.0 | 2026-04-02 | Análise de conformidade de retenção de logs (CISA M-21-31, NIST SP 800-92, NCSC-UK, ASD ACSC, NSA), detecção de tags de correlação (`#DONT_CORR#`/`#INC_CORR#`), visualização de menu de avaliação de retenção, coluna de retenção em Todas as Tabelas, `recommendedRetentionDays` no esquema de classificação |
| 0.2.2 | 2026-04-02 | Tabela de otimização SOC oculta a coluna Detalhes em consoles estreitos |
| 0.2.1 | 2026-04-02 | Suporte a classificação personalizada (`-CustomClassificationPath`), recomendações de otimização SOC enriquecidas com sugestões de API/detalhamento, visualização padrão somente ativa, supressão de aviso de codificação UTF-8 |
| 0.2.0 | - | Lançamento público inicial com mecanismo de classificação, pontuação custo-valor, TUI Spectre.Console, exportação para JSON/Markdown |
| 0.1.0 | - | Versão interna para desenvolvimento |
## Problemas conhecidos
### Aviso de codificação UTF-8 do PwshSpectreConsole
Para habilitar a saída UTF-8 no seu terminal, adicione a seguinte linha no topo do arquivo `$PROFILE` do PowerShell e reinicie o terminal:```powershell
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
O módulo define isso automaticamente na importação, mas dependendo da sua sessão o aviso pode ainda aparecer. É apenas cosmético e não afeta a funcionalidade.
Se você tiver problemas ou quiser contribuir, crie um PR.
| Detection Analyzer | Pontua regras analíticas quanto a potencial ruído usando resultados de incidentes (proporção de fechamento automático, proporção de falsos positivos e percentis de volume de incidentes) |
| XDR Checker | Adiciona uma camada consultiva focada em XDR: verificações de cobertura de streaming e orientação de retenção de um ano no Data Lake para telemetria relacionada a XDR |
| Classificações Personalizadas | Forneça seu próprio JSON para adicionar ou substituir o banco de dados de classificação integrado |
| Cache de Coleta | Os dados coletados do workspace são armazenados em cache localmente (padrão de 60 minutos) para que reexecuções e reexportações levem segundos; desative com -NoCache |
| Nuvens Soberanas | Os endpoints ARM, Log Analytics e Graph seguem o ambiente do Azure conectado (público, US Government, China) |
| TUI Interativa | Painel Spectre.Console com menus, tabelas codificadas por cores, detalhamentos, assistente de retenção e arte ASCII |
| Exportação | Relatório em JSON, Markdown ou HTML estático para compartilhamento com a equipe |
-ppgb-BasicPricePerGB | decimal | Não | 1.15 | Preço por GB dos Basic Logs |
-LakePricePerGB | decimal | Não | 0.20 | Preço por GB do nível Auxiliary / Data Lake (ingestão + processamento) |
-NonInteractive | switch | Não | - | Ignorar o dashboard TUI e exportar diretamente (ou devolver dados ao pipeline se -Output for omitido) |
-CustomClassificationPath | string | Não | - | Caminho para um ficheiro JSON personalizado para adicionar ou substituir classificações (alias -clf) |
-NoCache | switch | Não | - | Não ler nem escrever a cache de recolha |
-RefreshCache | switch | Não | - | Recolher dados novos e sobrescrever a entrada da cache |
-CacheMaxAgeMinutes | int | Não | 60 | Idade máxima de uma entrada de cache para reutilizar (1-10080) |
-CachePath | string | Não | $env:LOCALAPPDATA\LogHorizon\cache | Diretório para ficheiros de cache |
| Rever transmissão e retenção para telemetria XDR |
| Analisador de Deteções | Pontuações de regras >= 70 com pelo menos 5 incidentes (com -IncludeDetectionAnalyzer) | Ajustar ou desativar a regra ruidosa |