
Microsoft Sentinel SIEM Log Source Analyzer
Я не сосчитаю, сколько раз мне приходилось отвечать на вопросы «Что мы на самом деле получаем из этих логов?» или «Какие логи рекомендованы для Microsoft Sentinel?» Ответ всегда зависит от множества факторов, но можно дать общие рекомендации. Поэтому я и собрал эту штуковину.
Log Horizon подключается к вашему рабочему пространству Microsoft Sentinel (и, опционально, к Defender XDR), проходит по всем таблицам логов, которые вы принимаете, и сообщает, приносят ли они пользу с точки зрения безопасности или просто сжигают деньги. Он классифицирует таблицы, оценивает их на основе ваших правил обнаружения и выдает конкретные рекомендации с оценкой экономии.
Важно: это общий подход. Если вы точно знаете, что какой-то источник логов важен для вашей среды, этот контекст всегда имеет приоритет над тем, что говорит инструмент. Классификации — это отправная точка, а не истина в последней инстанции.
Хотите узнать больше? У меня есть несколько статей о Log Horizon в блоге:
[!CAUTION] Отказ от ответственности
Этот инструмент разработан и поддерживается с помощью ИИ. Пожалуйста, соблюдайте осторожность при использовании этого решения и всегда понимайте, что вы запускаете, прежде чем запускать его в рабочей среде. Разработчик не несет ответственности за какие-либо уязвимости или проблемы.
Загружая, устанавливая или используя этот инструмент, вы подтверждаете, что прочитали, поняли и согласны с этими условиями.
| Что нужно | Версия |
|---|---|
| PowerShell | 7.0+ |
| Модули Az | Az.Accounts, Az.Resources |
| Другие модули | PwshSpectreConsole 2.6.3+ |
Если вы еще не вошли в Azure, модуль запустит Connect-AzAccount. Если вы уже вошли, он просто продолжит работу.
Всё просто:```powershell
Install-Module -Name Az.Accounts, Az.Resources -Scope CurrentUser Install-Module -Name PwshSpectreConsole -Scope CurrentUser
git clone https://github.com/lnfernux/log-horizon Import-Module ./log-horizon/LogHorizon.psd1
## Использование
### Основы
Начните с подключения к Azure и убедитесь, что вы выбрали правильную учетную запись и подписку:```powershell
Connect-AzAccount
Затем мы можем вызвать инструмент:```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" />
Также есть меню для более детального изучения других результатов:
<img width="395" height="223" alt="{83CE9E6E-F373-49CD-BE05-182DB69F36BE}" src="https://assets.kitploit.com/production/public/readmes/13110/0606a575b10640bd13ebb87b930f74b2438167b5578cb843b412b4fcf273fc26.png" />
### Ключевые слова + Defender XDR
Хотите узнать, каких таблиц, связанных с конкретными вендорами, вам не хватает? Добавьте ключевые слова. Добавьте `-IncludeDefenderXDR`, если вам также нужен анализ XDR.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Keywords 'CrowdStrike','AWS','Okta' -IncludeDefenderXDR
Включите анализ качества/шума правил на основе инцидентов и правил автоматизации:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -IncludeDetectionAnalyzer -DetectionLookbackDays 90
### Экспорт отчета```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/
Теперь вы можете обновлять хранение и тип таблицы непосредственно из интерактивного TUI:
Invoke-LogHorizon обычным способом, затем выберите Управление хранением и типом таблицы в главном меню для массового обновления хранения или типа.Для скриптов или автоматизации используйте специальную публичную команду:```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
### Неинтерактивный / режим CI
Пропустите интерактивный TUI и экспортируйте сразу в файл — полезно для пайплайнов или запланированных запусков:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/
Если опустить -Output, объект анализа возвращается в конвейер, так что вы можете передать его в свою логику.
Интерактивный TUI включает меню Split KQL Suggestions, которое генерирует готовые для портала разбитые KQL для таблиц, которые являются хорошими кандидатами для разбиения. Оно показывает KQL для каждой таблицы, которые можно вставить прямо в редактор правил разбиения Sentinel, с указанием источника (база знаний, анализ правил или комбинированный).
Цена по умолчанию — 5.59 $/ГБ (Западная Европа, Simplified PAYG). Если ваш уровень обязательств отличается:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61
### Все параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
| `-SubscriptionId` | string | Да | - | Идентификатор подписки Azure |
| `-ResourceGroup` | string | Да | - | Группа ресурсов, содержащая рабочую область Sentinel |
| `-WorkspaceName` | string | Да | - | Имя рабочей области Log Analytics |
| `-WorkspaceId` | string | Нет | - | Идентификатор рабочей области (автоматически определяется, если опущен) |
| `-Output` | string | Нет | - | Формат экспорта: `json`, `markdown` / `md` или `html` |
| `-OutputPath` | string | Нет | - | Путь к файлу или каталогу для экспорта (автоматически создаёт имя файла с временной меткой при указании каталога) |
| `-Keywords` | string[] | Нет | - | Ключевые слова для анализа пробелов (например, `'AWS','CrowdStrike'`) |
| `-IncludeDefenderXDR` | switch | Нет | - | Включить анализ пользовательских обнаружений Defender XDR |
| `-IncludeDetectionAnalyzer` | switch | Нет | - | Включить анализ шумных обнаружений по правилам с использованием инцидентов и правил автоматизации |
| `-DetectionLookbackDays` | int | Нет | 90 | Окно запроса для анализа обнаружений на основе инцидентов/автоматизации (1-365 дней) |
| `-DaysBack` | int | Нет | 90 | Окно запроса для данных об использовании (1-365 дней) |
| `-PricePerGB` | decimal | Нет | 5.59 | Цена приема данных Sentinel за ГБ |
| `-NonInteractive` | switch | Нет | - | Пропустить TUI-панель и экспортировать напрямую (или вернуть данные в конвейер, если `-Output` опущен) |
| `-CustomClassificationPath` | string | Нет | - | Путь к пользовательскому JSON-файлу для добавления или переопределения классификаций |
---
## Под капотом
Всего выделено четыре этапа.
### 1. Сбор данных
Модуль подключается к Azure и извлекает данные из API Log Analytics и Security Insights:
| Источник данных | API | Что собираем |
|---|---|---|
| Использование таблиц | Таблица `Usage` (KQL) | Объем приема на таблицу за выбранный период запроса |
| Правила аналитики | Security Insights REST | Активные правила обнаружения + затрагиваемые таблицы + теги корреляции |
| Охотничьи запросы | Security Insights REST | Сохраненные охотничьи запросы + используемые таблицы |
| Коннекторы данных | Security Insights REST | Инвентаризация установленных коннекторов |
| Оптимизация SOC | Security Insights REST | Встроенные рекомендации Microsoft по SOC |
| Хранение таблиц | Azure Tables REST | Период хранения, архив и план хранения (Analytics/Basic) |
| Defender XDR | Security Insights REST | Пользовательские обнаружения XDR и настройка потоковой передачи (опционально) |
| Инциденты | Security Insights REST | Результаты инцидентов (статус/классификация), временные метки и подсказки для оценки качества правил |
| Правила автоматизации | Security Insights REST | Действия закрытия инцидентов на уровне правил и условия сопоставления заголовков для автоматического закрытия |
| SentinelHealth | Log Analytics KQL | События выполнения правил автоматизации с номерами инцидентов для окончательного определения автозакрытия (опционально, требует мониторинга работоспособности) |
### 2. Классификация
Каждая таблица классифицируется за два прохода:
**Первый** проход: прямой поиск по базе знаний из 345 записей в файле `Data/log-classifications.json`. Каждая запись содержит имя коннектора, первичную/вторичную классификацию, категорию безопасности, сопоставления источников данных MITRE и рекомендуемый тарифный план хранения.
**Если совпадения нет**, вступают в действие эвристические правила:
- Имя содержит шаблоны безопасности, такие как `Alert`, `Incident`, `Threat`, `Signin`, `Audit`, `Risk` -> **первичная**
- Имя похоже на инфраструктурную телеметрию: `Flow`, `Metric`, `Diagnostic`, `Perf`, `Heartbeat` -> **вторичная**
- На неё указывают активные правила аналитики -> **первичная**
- Высокий объем (>10 ГБ/мес) без активных обнаружений -> **вторичная**
- Ничего из вышеперечисленного -> **неизвестная**
### 3. Оценка стоимости и ценности
Каждая таблица оценивается по нескольким параметрам:
- **Уровень затрат**: Бесплатный / Низкий (<1 ГБ) / Средний (1-10 ГБ) / Высокий (10-50 ГБ) / Очень высокий (>50 ГБ)
- **Уровень обнаружения**: Нет / Низкий (1-2 правила) / Средний (3-9 правил) / Высокий (10+ правил)
- **Оценка**: Высокая ценность / Хорошая ценность / Отсутствие покрытия / Требуется проверка / Кандидат для Data Lake / Бесплатный тариф
- **Покрытие в %**: Процент таблиц, на которые ссылается хотя бы одно правило аналитики или охотничий запрос, вычисляемый как `tablesWithRules / totalTables * 100`. Покрытие на таблицу суммирует правила аналитики и охотничьи запросы, найденные при разборе KQL на имена таблиц.
Затем модуль генерирует рекомендации:
| Тип | Когда срабатывает | Что делать |
|---|---|---|
| **Data Lake** | Вторичная + высокая стоимость + мало обнаружений | Переместить на уровень Auxiliary/Data Lake (экономия ~95%) |
| **Низкая ценность** | Высокая стоимость + отсутствие обнаружений | Добавить правила, отфильтровать или переместить в Data Lake |
| **Оптимизация XDR** | Данные передаются через XDR + 0 правил Sentinel + существуют правила XDR | Остановить потоковую передачу, используйте единый портал XDR |
| **Отсутствие покрытия** | Первичная + отсутствие обнаружений | Написать правила аналитики, чтобы извлечь ценность из данных |
| **Фильтрация при приеме** | Первичная + >20 ГБ + <=3 обнаружений | Применить преобразование при приеме для сокращения объема |
| **Кандидат на разделение** | Первичная + высокий объем + обнаружения + отсутствует существующее преобразование | Разделить таблицу — строки с высокой ценностью остаются на уровне Analytics, остальное отправляется в Data Lake |
| **Недостаточное хранение** | Срок хранения таблицы ниже рекомендуемого минимума | Увеличить общий/архивный срок хранения для соблюдения нормативных требований |
### 4. Анализатор обнаружений (оценка шумности)
При использовании параметра `-IncludeDetectionAnalyzer` модуль извлекает последние инциденты и правила автоматизации, после чего оценивает каждое включенное правило аналитики на потенциальную шумность.
**Метрики на правило** (вычисляются на основе данных инцидентов):
| Метрика | Способ вычисления |
|---|---|
| Всего инцидентов | Количество инцидентов, связанных с правилом |
| Коэффициент автозакрытия | Инциденты, закрытые правилами автоматизации ÷ общее количество инцидентов. Основной источник: таблица SentinelHealth (окончательное сопоставление по номеру инцидента). Запасной вариант: сопоставление заголовков с учетом операторов по условиям правил автоматизации. |
| Коэффициент ложных срабатываний | Инциденты, классифицированные как ложные срабатывания ÷ общее количество инцидентов |
**Формула оценки шумности**:
Каждая метрика преобразуется в процентильный ранг среди всех правил, имеющих хотя бы один инцидент. Итоговый балл представляет собой взвешенную комбинацию:```
Score = (Volume_percentile × 0.35) + (AutoClose_percentile × 0.40) + (FalsePositive_percentile × 0.25)
Пороговые значения оценок:
Правила с оценкой ≥ 70 и как минимум 5 инцидентами автоматически отображаются как рекомендации с высоким приоритетом в представлении «Рекомендации».
-IncludeDefenderXDR)-IncludeDetectionAnalyzer)Находится в Data/log-classifications.json. 345 записей, 190 коннекторов, 21 категория.
Первичные (211 записей): таблицы, на которых вы фактически строите обнаружения. Журналы входа, оповещения безопасности, данные об угрозах, журналы аудита, результаты уязвимостей, события брандмауэра, телеметрия EDR.
Вторичные (133 записи): вспомогательные данные. Метрики производительности, диагностика инфраструктуры, объемы сетевого трафика, снимки инвентаризации, базовые конфигурации, проверки работоспособности.
Вы можете предоставить собственный файл классификации, чтобы добавить записи для таблиц, которых нет во встроенной базе данных, или переопределить существующие записи, если значения по умолчанию не соответствуют вашему окружению. Пользовательские записи имеют приоритет над встроенными, если одно и то же tableName встречается в обоих.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' `
-CustomClassificationPath './my-classifications.json'
Пользовательский файл использует ту же схему, что и `Data/log-classifications.json` — массив объектов:```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
}
]
Смотрите готовый шаблон в Data/custom-classifications-example.json.
Первичная/вторичная градация выполнялась частично автором, а затем путём подачи определений коннекторов данных Microsoft и таблиц в ИИ с базовой человеческой оценкой, используя лучшие практики Microsoft и отраслевые стандарты в качестве критериев классификации. Если что-то выглядит неподходящим для вашей среды, доверяйте своему контексту, а не инструменту — ИИ может ошибаться, и контекст имеет решающее значение.
Критерии классификации были взяты из следующих источников:
ACSC (Директорат сигналов Австралии, Австралийский центр кибербезопасности)
CISA (Агентство по кибербезопасности и защите инфраструктуры)
Microsoft
MITRE
NIST (Национальный институт стандартов и технологий)
NSA (Агентство национальной безопасности)
NCSC-UK (Национальный центр кибербезопасности — Великобритания)
Google Cloud
Также использовались другие источники, а также «экспертиза» авторов, если её можно так назвать.
LogHorizon.psd1 Module manifest (v0.6.2) LogHorizon.psm1 Module loader Public/ Invoke-LogHorizon.ps1 Entry point, the main orchestrator Private/ Connect-Sentinel.ps1 Azure auth + workspace resolution Get-TableUsage.ps1 KQL query for ingestion volumes Get-AnalyticsRules.ps1 Analytics rules + table/field extraction + correlation tags Get-HuntingQueries.ps1 Hunting queries + table extraction Get-DataConnectors.ps1 Data connector inventory Get-DataTransforms.ps1 DCR transform discovery, split KQL generation Get-DefenderXDR.ps1 Defender XDR analysis (optional) Get-Incidents.ps1 Incident fetch + SentinelHealth auto-close attribution Get-AutomationRules.ps1 Automation rule inventory + close-logic attribution Get-SocOptimization.ps1 SOC improvement recommendations Get-TableRetention.ps1 Per-table retention, archive, and plan type Invoke-AzRestWithRetry.ps1 REST retry wrapper with exponential backoff for 429/5xx Invoke-Classification.ps1 Static DB + heuristic classification + _SPLT_CL detection Invoke-Analysis.ps1 Cost-value matrix + recommendations + split suggestions Write-Report.ps1 Spectre.Console TUI rendering Export-Report.ps1 JSON / Markdown / static HTML export with shared section renderer Data/ log-classifications.json 345-entry classification knowledge base high-value-fields.json 15-table split KQL knowledge base with curated fields and split hints field-frequency-stats.json Community field frequency stats (generated by Build-FieldKnowledgeBase.ps1) custom-classifications-example.json Example custom classification override file ReportTemplate.html Static HTML report template (pure-CSS tabs, zero JS) Tests/ LogHorizon.Tests.ps1 Pester v5 unit tests
### Генерация базы знаний
Раздельные базы знаний KQL — `high-value-fields.json` и `field-frequency-stats.json` — генерируются в автономном режиме скриптом `Build-FieldKnowledgeBase.ps1`. Скрипт:
1. Выполняет поверхностное клонирование репозитория GitHub [Azure/Azure-Sentinel](https://github.com/Azure/Azure-Sentinel) (разреженная проверка `Solutions/`, `Detections/`, `Hunting Queries/`)
2. Разбирает ~3 800 файлов правил YAML и извлекает запросы KQL с помощью регулярных выражений
3. Запускает `Get-TablesFromKql` и `Get-FieldsFromKql` для каждого запроса, чтобы построить счётчики частоты полей для каждой таблицы
4. Вычисляет три уровня резервных полей:
- **Универсальные поля** — поля, встречающиеся более чем в 50% всех таблиц (например, `TimeGenerated`)
- **Категории по умолчанию** — поля, встречающиеся более чем в 40% таблиц в рамках категории классификации
- **Статистика для каждой таблицы** — необработанные счётчики частоты полей для таблиц с >= 3 ссылающимися правилами
5. Объединяет добытые поля с существующим курированным `high-value-fields.json` (переносит курированные записи, добавляет вновь обнаруженные таблицы с >= 3 правилами и >= 3 значимыми полями)
6. Выводит оба файла в `Data/`
Во время выполнения `Get-SplitKql` использует иерархию резервирования: запись курированной базы знаний -> анализ полей активного правила/охоты -> общедоступная статистика по таблицам -> категории по умолчанию -> универсальные поля. Частота полей является не идеальным методом, но может быть полезна.
## Тесты```powershell
Invoke-Pester ./Tests/LogHorizon.Tests.ps1 -Output Detailed
MIT
Чтобы включить вывод UTF-8 в вашем терминале, добавьте следующую строку в начало вашего $PROFILE файла PowerShell и перезапустите терминал:```powershell
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
Модуль устанавливает это автоматически при импорте, но в зависимости от вашей сессии предупреждение может всё равно появляться. Оно косметическое и не влияет на функциональность.
## Участие в разработке
Если у вас есть проблемы или вы хотите внести свой вклад, создайте PR.
## Нравится инструмент?
</br>
<a href='https://ko-fi.com/B0B61XGLO7' target='_blank'><img height='36' style='border:0px;height:36px;' src="https://assets.kitploit.com/production/public/readmes/13110/85ecfd7542830b8c7e246d37aec7c2b7397da003291ec4c56074631499f4829a.webp" border='0' alt='Купи мне кофе на ko-fi.com' /></a>
</br>
| Функция | Описание |
|---|
| Движок классификации | База знаний из 345 записей, охватывающая 190+ соединителей, 21 категорию, с автоматическим эвристическим откатом для неизвестных таблиц |
| Оценка стоимости-ценности | Матрица стоимости уровня таблицы и уровня обнаружения с комбинированной оценкой (Высокая ценность → Низкая ценность) |
| Рекомендации | Приоритетные действия: кандидаты в озеро данных, таблицы без обнаружений, пустая трата потока XDR, фильтрация на этапе приема, недостаточный срок хранения |
| Картирование обнаружений | Сопоставляет аналитические правила, запросы на поиск угроз и обнаружения XDR с каждой таблицей для выявления пробелов в покрытии |
| Теги корреляции | Обнаруживает теги #DONT_CORR# / #INC_CORR# в описаниях правил и помечает правила, исключенные из корреляции Defender |
| Соответствие срокам хранения | Сравнивает фактический срок хранения с рекомендуемым минимумом на основе отраслевых стандартов и лучших практик безопасности |
| Оптимизация SOC | Извлекает собственные рекомендации Microsoft по улучшению SOC из API Security Insights |
| Анализ ключевых слов | Помечает таблицы, которые следует принимать, но которые не принимаются, на основе ключевых слов вендора/продукта |
| Обнаружение преобразований | Обнаруживает правила сбора данных (DCR) и классифицирует преобразования на этапе приема (фильтр, проекция, обогащение, агрегация) |
| Обнаружение разделенных таблиц | Идентифицирует разделенные таблицы _SPLT_CL и связывает их с родительскими таблицами в движке классификации |
| Генератор KQL для разделения | Генерирует готовый к использованию в портале KQL для разделения на основе курируемой базы знаний, анализа живых правил и статистики частоты полей сообщества — формат только условия, который вставляется прямо в редактор правил разделения Sentinel |
| Анализатор обнаружений | Оценивает аналитические правила на потенциальную шумность с использованием результатов инцидентов (коэффициент авто-закрытия, коэффициент ложных срабатываний и процентили объема инцидентов) |
| Проверка XDR | Добавляет консультативный слой, ориентированный на XDR: проверки покрытия потоковой передачи и рекомендации по хранению в озере данных на один год для телеметрии XDR |
| Пользовательские классификации | Укажите свой собственный JSON, чтобы добавить или переопределить встроенную базу классификации |
| Интерактивный TUI | Панель управления Spectre.Console с меню, цветными таблицами, детализацией и ASCII-артом |
| Экспорт | JSON, Markdown или статический HTML-отчет для обмена с командой |
| Оценка | Метка | Значение |
|---|
| ≥ 70 | Шумное | Правило, вероятно, требует настройки или отключения |
| ≥ 50 | Наблюдение | Правило проявляет ранние признаки шумности |
| < 50 | Здоровое | Правило находится в пределах нормы |
| Н/Д | — | У правила нет связанных инцидентов (оценка невозможна) |
| Поле | Что содержит |
|---|
tableName | Имя таблицы Log Analytics (SecurityEvent, SigninLogs и т.д.) |
connector | Какой коннектор данных создает эту таблицу |
classification | primary (ценность для безопасности) или secondary (вспомогательная телеметрия) |
category | Категория безопасности: идентификация и доступ, сетевая безопасность и т.д. |
description | Краткое описание на понятном языке содержимого таблицы |
keywords | Термины для сопоставления при анализе ключевых пробелов |
mitreSources | Сопоставления с источниками данных MITRE ATT&CK |
recommendedTier | analytics (горячий уровень) или datalake (кандидат для вспомогательного хранилища) |
recommendedRetentionDays | Минимальный рекомендуемый общий срок хранения в днях (рекомендации регуляторов) |
isFree | Бесплатно ли Microsoft принимает эту таблицу |
| Категория | Количество | Примеры |
|---|
| Идентификация и доступ | 33 | SigninLogs, OktaSSO, CyberArk_AuditEvents_CL |
| Сетевая безопасность | 29 | AZFWNetworkRule, Cloudflare_CL, darktrace_model_alerts_CL |
| Оповещения безопасности | 26 | SecurityAlert, SecurityIncident, SentinelOneAlerts_CL |
| Обнаружение на конечных точках | 22 | DeviceProcessEvents, DeviceFileEvents, SentinelOne_CL |
| Плоскость управления облаком | 22 | AzureActivity, OfficeActivity, GoogleWorkspaceReports |
| Сетевой трафик | 23 | AzureNetworkAnalytics_CL, CommonSecurityLog, AZFWFatFlow |
| Облачная безопасность | 13 | McasShadowItReporting, PaloAltoPrismaCloudAlertV2_CL |
| Безопасность электронной почты | 20 | EmailEvents, ProofPointTAPMessagesBlockedV2_CL, MimecastSIEM_CL |
| Телеметрия конечных точек | 14 | DeviceInfo, SentinelOneAgents_CL, jamfprotecttelemetryv2_CL |
| Управление уязвимостями | 11 | DeviceTvmSoftwareVulnerabilities, QualysHostDetectionV3_CL |
| Безопасность данных | 12 | PurviewDataSensitivityLogs, VaronisAlerts_CL, MimecastDLP_CL |
| Журналы приложений | 22 | AppServiceHTTPLogs, FunctionAppLogs, DynatraceAttacks_CL |
| Аналитика угроз | 8 | ThreatIntelligenceIndicator, CybleVisionAlerts_CL |
| Безопасность SAP | 7 | ABAPAuditLog, SAPBTPAuditLog_CL, Onapsis_Defend_CL |
| Безопасность IoT/OT | 4 | RadiflowEvent, DragosAlerts_CL, Phosphorus_CL |
| Платформа данных | 13 | AzureDiagnostics, SnowflakeLogin_CL, MongoDBAudit_CL |
| Контейнеры и K8s | 7 | ContainerLog, KubeEvents, GKEAudit, AWSEKSLogs_CL |
| Работоспособность платформы | 6 | SentinelHealth, Watchlist, SOCPrimeAuditLogs_CL |
| Диагностика инфраструктуры | 7 | AzureMetrics, GCPComputeEngine, GCPMonitoring |
| Управление состоянием | 7 | DeviceTvmSecureConfigurationAssessment, CortexXpanseAlerts_CL |
| Управление конфигурациями | 6 | ConfigurationData, ESIExchangeOnlineConfig_CL |
| Доступ к хранилищам | 5 | StorageBlobLogs, StorageFileLogs, AWSS3ServerAccess |
| Версия | Дата | Изменения |
|---|
| 0.8.0 | 2026-05-26 | Добавлено интерактивное управление удержанием таблиц с новым объёмным потоком TUI и точкой входа для обновления одной таблицы, а также публичная команда Set-LogHorizonTableRetention. Добавлен механизм применения PATCH для Tables API с проверкой, опросом асинхронных операций Azure и двухэтапным запасным вариантом (комбинированный PATCH, затем только план и только удержание) для устойчивых обновлений удержания. Добавлено покрытие Pester для проверки, формы полезной нагрузки, запасного варианта и сопоставления публичных команд. Также исправлена граничная ситуация/ошибка, когда пользователи получали рекомендации по изменению таблиц озера данных на уровень озера данных, если у них ещё были данные аналитики в Sentinel. |
| 0.7.1 | 2026-05-15 | Добавлена осведомлённость о плане из Usage.Plan без замены настроенного плана таблицы: анализ теперь отслеживает историю наблюдаемых планов, отмечает использование нескольких планов и несоответствия настроенного и наблюдаемого, а также отображает данные плана на панели мониторинга, в детализации таблиц, представлении всех таблиц, оценке удержания и экспорте. Исправлено автоматическое закрытие атрибуции в Detection Analyzer, так что временная эвристика применяется только при отсутствии включённых правил автоматизации. Пройдено 203 теста. |
| 0.7.0 | 2026-04-16 | Обновление оценки обнаружений: добавлена сводная таблица матрицы стоимости-ценности (первичные/вторичные x7 категорий оценки с цветовой кодировкой), подменю детализации для первичных/вторичных таблиц со столбцами стоимости и уровня обнаружения. Добавлены бары покрытия объёма в GB для Detection Analyzer (обнаружение/охота/комбинированные GB в процентах от общего объёма приёма вместе с существующими барами количества таблиц). Улучшения адаптивного отображения для Detection Analyzer (динамическая ширина полос, усечение имён правил, условное скрытие столбцов в зависимости от ширины консоли). Пройдено 193 теста. |
| 0.6.3 | 2026-04-11 | Небольшое обновление для PSGallery. |
| 0.6.2 | 2026-04-11 | Меню настройки журналов / преобразований: анализ настройки данных в реальном времени (использование полей на таблицу из развёрнутых правил/запросов охоты, генерация KQL для фильтрации/проекции/комбинированного, оценка экономии), извлечение столбцов схемы из Tables API, иерархия запасных вариантов Get-SplitKql (статистика сообщества → категории по умолчанию → универсальные поля), комплексный оценщик таблиц с матрицей использования полей, объединённые разделы экспорта KB и настройки в реальном времени, скрипт добычи Build-FieldKnowledgeBase.ps1 для корпуса правил Azure-Sentinel GitHub. Detection Analyzer: автоматическое закрытие атрибуции на основе SentinelHealth (основной) с запасным сопоставлением правил с учётом оператора, разбор обёрток условий Boolean, обнаружение статуса Resolved, сопоставление хвостов GUID для ARM-идентификаторов ресурсов. Теперь покрытие основано на количестве таблиц для всех таблиц (включая бесплатный уровень). Примечание об оценке добавлено в TUI и экспорт. 174 теста. |
| 0.6.1 | 2026-04-10 | Исправления ошибок: фильтрация $kqlKeywords теперь общая в области файла (ранее не определена в Get-TablesFromKql), [CmdletBinding()] добавлен во все вспомогательные функции, упрощена единая проверка Defender, удалён фиктивный тестовый параметр -RuleCount. Надёжность: пагинация Get-HuntingQueries, обёртка повторных попыток Invoke-AzRestWithRetry с экспоненциальной задержкой для 429/5xx, проверка PricePerGB, Write-Verbose в ключевых функциях. Документация: значок версии, количество баз данных, предварительные требования согласованы с манифестом. |
| 0.6.0 | 2026-04-10 | Динамическое обнаружение потоковой передачи XDR с 21 KnownXDRTables (ранее жёстко задано 18), XDRState на таблицу (NotStreaming/Analytics/Basic/Auxiliary), Auxiliary признан уровнем озера данных, не передаваемые в потоке таблицы XDR отображаются как рекомендации уровня Information/Low с NotStreamedCount, анализатор удержания показывает непередаваемые таблицы XDR как "XDR only (30d)", разбивка по уровням на панели мониторинга (аналитика/базовый/озеро данных + не передаётся), метки Auxiliary→"data lake" в Export-Report, база классификации обновлена до 345 записей (+DeviceNetworkInfo, DeviceInfo→вторичный/озеро данных, DeviceImageLoadEvents и IdentityQueryEvents→уровень озера данных), 15 новых тестов Pester (всего 121). |
| 0.5.0 | 2026-04-03 | Статический экспорт HTML с вкладками на чистом CSS (без JS, без CDN, полностью автономный), унифицированный рендерер разделов MD/HTML, полный сбор данных JSON (dataTransforms, correlationExcluded/Included, streamingTables), переключатель -NonInteractive для CI/пайплайнов, псевдоним формата md, автоматические имена файлов с меткой даты и времени, полное отображение KQL в преобразованиях DCR (без усечения), обработка многострочного KQL в таблицах Markdown, исправление повреждения обратных ссылок $ в регулярных выражениях при замене токенов HTML, переименование внутренних помощников для избежания конфликтов с псевдонимами PowerShell (h→hEnc, md→mdEsc), 33 новых теста Pester (всего 106). |
| 0.4.1 | 2026-04-03 | Исправления безопасности и стабильности — добавлена очистки памяти токенов, проверка пути вывода и защита от XSS, ограничения пагинации REST API, исправление маскировки ошибок загрузчика модулей и устранение предупреждений PSScriptAnalyzer. |
| 0.4.0 | 2026-04-02 | Обнаружение преобразований (список DCR + классификация типов преобразований), обнаружение разделённых таблиц (_SPLT_CL), помощник разделения KQL с базой знаний из 15 таблиц (high-value-fields.json) + запасной вариант анализа правил, вывод KQL только с условиями, готовый для портала, расширяемый список рекомендаций, меню TUI с предложениями по разделению KQL. |
| 0.3.0 | 2026-04-02 | Анализ соответствия удержанию журналов (CISA M-21-31, NIST SP 800-92, NCSC-UK, ASD ACSC, NSA), обнаружение тегов корреляции (#DONT_CORR#/#INC_CORR#), просмотр меню оценки удержания, столбец удержания в "Все таблицы", recommendedRetentionDays в схеме классификации. |
| 0.2.2 | 2026-04-02 | Таблица оптимизации SOC скрывает столбец Detail на узких консолях. |
| 0.2.1 | 2026-04-02 | Поддержка пользовательской классификации (-CustomClassificationPath), обогащённые рекомендации по оптимизации SOC с предложениями API/детализацией, представление только активных по умолчанию, подавление предупреждения о кодировке UTF-8. |
| 0.2.0 | - | Первый публичный релиз с движком классификации, оценкой стоимость-ценность, TUI Spectre.Console, экспортом в JSON/Markdown. |
| 0.1.0 | - | Внутренняя версия для разработки. |