Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
log-horizon — Microsoft Sentinel SIEM Log Source Analyzer | Kitploit
Инструменты/GitHubGitHub/lnfernux/log-horizon
Безопасность облачной инфраструктурыАудит конфигурацииБезопасность облачных средDevSecOpsРазведка угрозРеагирование на ИнцидентыАнализ Журналов
GitHublnfernux/log-horizon

log-horizon

Microsoft Sentinel SIEM Log Source Analyzer

Репозиторий
282 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

Microsoft Sentinel SIEM Log Source Analyzer

PowerShell 7+ Module Version


Я не сосчитаю, сколько раз мне приходилось отвечать на вопросы «Что мы на самом деле получаем из этих логов?» или «Какие логи рекомендованы для Microsoft Sentinel?» Ответ всегда зависит от множества факторов, но можно дать общие рекомендации. Поэтому я и собрал эту штуковину.

Log Horizon подключается к вашему рабочему пространству Microsoft Sentinel (и, опционально, к Defender XDR), проходит по всем таблицам логов, которые вы принимаете, и сообщает, приносят ли они пользу с точки зрения безопасности или просто сжигают деньги. Он классифицирует таблицы, оценивает их на основе ваших правил обнаружения и выдает конкретные рекомендации с оценкой экономии.

Важно: это общий подход. Если вы точно знаете, что какой-то источник логов важен для вашей среды, этот контекст всегда имеет приоритет над тем, что говорит инструмент. Классификации — это отправная точка, а не истина в последней инстанции.

Хотите узнать больше? У меня есть несколько статей о Log Horizon в блоге:

  1. Релиз инструмента: Log Horizon
  2. Обновление: Log Horizon v0.5.0
  3. Построение практического базового набора логов и как Log Horizon помогает в этом
  4. Как использовать Log Horizon

Возможности

Отказ от ответственности

[!CAUTION] Отказ от ответственности

Этот инструмент разработан и поддерживается с помощью ИИ. Пожалуйста, соблюдайте осторожность при использовании этого решения и всегда понимайте, что вы запускаете, прежде чем запускать его в рабочей среде. Разработчик не несет ответственности за какие-либо уязвимости или проблемы.

Загружая, устанавливая или используя этот инструмент, вы подтверждаете, что прочитали, поняли и согласны с этими условиями.

Предварительные требования

Что нужноВерсия
PowerShell7.0+
Модули AzAz.Accounts, Az.Resources
Другие модулиPwshSpectreConsole 2.6.3+

Если вы еще не вошли в Azure, модуль запустит Connect-AzAccount. Если вы уже вошли, он просто продолжит работу.

Начало работы

Всё просто:```powershell

Grab the dependencies

Install-Module -Name Az.Accounts, Az.Resources -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:~
## Использование

### Основы

Начните с подключения к Azure и убедитесь, что вы выбрали правильную учетную запись и подписку:```powershell
Connect-AzAccount

Затем мы можем вызвать инструмент:```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" />

Также есть меню для более детального изучения других результатов:

<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

root@kitploit:~
### Экспорт отчета```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 обычным способом, затем выберите Управление хранением и типом таблицы в главном меню для массового обновления хранения или типа.
  • Откройте Log Tuning / Transforms > Evaluate specific table и выберите Управление хранением/типом для этой таблицы для изменения одной таблицы.

Для скриптов или автоматизации используйте специальную публичную команду:```powershell

Preview a single-table change

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:~
### Неинтерактивный / режим CI

Пропустите интерактивный TUI и экспортируйте сразу в файл — полезно для пайплайнов или запланированных запусков:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/

Если опустить -Output, объект анализа возвращается в конвейер, так что вы можете передать его в свою логику.

Разбить предложения KQL

Интерактивный TUI включает меню Split KQL Suggestions, которое генерирует готовые для портала разбитые KQL для таблиц, которые являются хорошими кандидатами для разбиения. Оно показывает KQL для каждой таблицы, которые можно вставить прямо в редактор правил разбиения Sentinel, с указанием источника (база знаний, анализ правил или комбинированный).

Пользовательские цены

Цена по умолчанию — 5.59 $/ГБ (Западная Европа, Simplified PAYG). Если ваш уровень обязательств отличается:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61

root@kitploit:~
### Все параметры

| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
| `-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)
  • Процентиль объема (35%) — сколько инцидентов генерирует правило относительно других правил.
  • Процентиль автозакрытия (40%) — как часто инциденты автоматически закрываются правилами автоматизации (наивысший вес, поскольку автоматическое закрытие является наиболее сильным сигналом о малоценных оповещениях).
  • Процентиль ложных срабатываний (25%) — как часто аналитики классифицируют результат как ложное срабатывание.

Пороговые значения оценок:

Правила с оценкой ≥ 70 и как минимум 5 инцидентами автоматически отображаются как рекомендации с высоким приоритетом в представлении «Рекомендации».

5. Интерактивная панель мониторинга

  • Панель мониторинга: обзорная статистика, 10 самых дорогих таблиц, шкала покрытия, сводка соответствия срокам хранения, выноска об исключениях корреляции
  • Рекомендации: приоритетные действия с расчетной ежемесячной экономией — разворачивается для отображения полного списка, если более 10
  • Оценка обнаружения: разбивка покрытия правил и запросов на охоту по таблицам, список правил, исключенных из корреляции
  • Оптимизация SOC: собственные предложения Microsoft по улучшению
  • Оценка хранения: таблицы ниже рекомендуемых минимумов с текущим и рекомендуемым сроком хранения, типом плана и дефицитом
  • Преобразования: инвентаризация преобразований DCR с классификацией типов преобразований
  • Предложения Split KQL: готовый к вставке в портал split KQL по таблицам с указанием источника (база знаний, анализ правил или комбинированный)
  • Все таблицы: полный список с классификацией, стоимостью, правилами, сроком хранения (цветовая кодировка) и оценкой
  • Анализ XDR: интеграция Defender XDR (при использовании -IncludeDefenderXDR)
  • Анализатор обнаружений: ранжирование шумных правил на основе процентилей с индикаторами качества закрытия (при использовании -IncludeDetectionAnalyzer)
  • Экспорт: выгрузить отчет в JSON или Markdown прямо из меню

База данных классификации

Находится в Data/log-classifications.json. 345 записей, 190 коннекторов, 21 категория.

Что содержится в каждой записи

Первичные и вторичные данные безопасности

Первичные (211 записей): таблицы, на которых вы фактически строите обнаружения. Журналы входа, оповещения безопасности, данные об угрозах, журналы аудита, результаты уязвимостей, события брандмауэра, телеметрия EDR.

Вторичные (133 записи): вспомогательные данные. Метрики производительности, диагностика инфраструктуры, объемы сетевого трафика, снимки инвентаризации, базовые конфигурации, проверки работоспособности.

Категории вкратце

Пользовательские классификации

Вы можете предоставить собственный файл классификации, чтобы добавить записи для таблиц, которых нет во встроенной базе данных, или переопределить существующие записи, если значения по умолчанию не соответствуют вашему окружению. Пользовательские записи имеют приоритет над встроенными, если одно и то же tableName встречается в обоих.```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' ` -CustomClassificationPath './my-classifications.json'

root@kitploit:~
Пользовательский файл использует ту же схему, что и `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 (Директорат сигналов Австралии, Австралийский центр кибербезопасности)

  • ACSC: Лучшие практики регистрации событий и обнаружения угроз (август 2024)
  • ACSC: Приоритетные журналы для приёма SIEM — Практическое руководство (май 2025)

CISA (Агентство по кибербезопасности и защите инфраструктуры)

  • CISA: Руководство по реализации M-21-31: Повышение расследовательских и восстановительных возможностей федерального правительства
  • CISA: Сборник материалов по внедрению расширенных облачных журналов Microsoft (2025)

Microsoft

  • Справочник по коннекторам данных Microsoft Sentinel
  • Справочник по таблицам и коннекторам Microsoft Sentinel
  • Репозиторий Azure-Sentinel на GitHub (аналитические правила сообщества, определения коннекторов, шаблоны решений)
  • Биллинг Microsoft Sentinel
  • Управление уровнями данных Microsoft Sentinel

MITRE

  • Источники данных MITRE ATT&CK

NIST (Национальный институт стандартов и технологий)

  • NIST SP 800-92: Руководство по управлению журналами компьютерной безопасности

NSA (Агентство национальной безопасности)

  • Руководство NSA по пересылке киберсобытий

NCSC-UK (Национальный центр кибербезопасности — Великобритания)

  • «Что именно мы должны логировать?» NCSC-UK

Google Cloud

  • Обзор журналов аудита Google Cloud
  • Лучшие практики журналов аудита 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

root@kitploit:~
### Генерация базы знаний

Раздельные базы знаний 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 в PwshSpectreConsole

Чтобы включить вывод UTF-8 в вашем терминале, добавьте следующую строку в начало вашего $PROFILE файла PowerShell и перезапустите терминал:```powershell $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

root@kitploit:~
Модуль устанавливает это автоматически при импорте, но в зависимости от вашей сессии предупреждение может всё равно появляться. Оно косметическое и не влияет на функциональность.

## Участие в разработке

Если у вас есть проблемы или вы хотите внести свой вклад, создайте 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Какой коннектор данных создает эту таблицу
classificationprimary (ценность для безопасности) или secondary (вспомогательная телеметрия)
categoryКатегория безопасности: идентификация и доступ, сетевая безопасность и т.д.
descriptionКраткое описание на понятном языке содержимого таблицы
keywordsТермины для сопоставления при анализе ключевых пробелов
mitreSourcesСопоставления с источниками данных MITRE ATT&CK
recommendedTieranalytics (горячий уровень) или datalake (кандидат для вспомогательного хранилища)
recommendedRetentionDaysМинимальный рекомендуемый общий срок хранения в днях (рекомендации регуляторов)
isFreeБесплатно ли Microsoft принимает эту таблицу
КатегорияКоличествоПримеры
Идентификация и доступ33SigninLogs, OktaSSO, CyberArk_AuditEvents_CL
Сетевая безопасность29AZFWNetworkRule, Cloudflare_CL, darktrace_model_alerts_CL
Оповещения безопасности26SecurityAlert, SecurityIncident, SentinelOneAlerts_CL
Обнаружение на конечных точках22DeviceProcessEvents, DeviceFileEvents, SentinelOne_CL
Плоскость управления облаком22AzureActivity, OfficeActivity, GoogleWorkspaceReports
Сетевой трафик23AzureNetworkAnalytics_CL, CommonSecurityLog, AZFWFatFlow
Облачная безопасность13McasShadowItReporting, PaloAltoPrismaCloudAlertV2_CL
Безопасность электронной почты20EmailEvents, ProofPointTAPMessagesBlockedV2_CL, MimecastSIEM_CL
Телеметрия конечных точек14DeviceInfo, SentinelOneAgents_CL, jamfprotecttelemetryv2_CL
Управление уязвимостями11DeviceTvmSoftwareVulnerabilities, QualysHostDetectionV3_CL
Безопасность данных12PurviewDataSensitivityLogs, VaronisAlerts_CL, MimecastDLP_CL
Журналы приложений22AppServiceHTTPLogs, FunctionAppLogs, DynatraceAttacks_CL
Аналитика угроз8ThreatIntelligenceIndicator, CybleVisionAlerts_CL
Безопасность SAP7ABAPAuditLog, SAPBTPAuditLog_CL, Onapsis_Defend_CL
Безопасность IoT/OT4RadiflowEvent, DragosAlerts_CL, Phosphorus_CL
Платформа данных13AzureDiagnostics, SnowflakeLogin_CL, MongoDBAudit_CL
Контейнеры и K8s7ContainerLog, KubeEvents, GKEAudit, AWSEKSLogs_CL
Работоспособность платформы6SentinelHealth, Watchlist, SOCPrimeAuditLogs_CL
Диагностика инфраструктуры7AzureMetrics, GCPComputeEngine, GCPMonitoring
Управление состоянием7DeviceTvmSecureConfigurationAssessment, CortexXpanseAlerts_CL
Управление конфигурациями6ConfigurationData, ESIExchangeOnlineConfig_CL
Доступ к хранилищам5StorageBlobLogs, StorageFileLogs, AWSS3ServerAccess
ВерсияДатаИзменения
0.8.02026-05-26Добавлено интерактивное управление удержанием таблиц с новым объёмным потоком TUI и точкой входа для обновления одной таблицы, а также публичная команда Set-LogHorizonTableRetention. Добавлен механизм применения PATCH для Tables API с проверкой, опросом асинхронных операций Azure и двухэтапным запасным вариантом (комбинированный PATCH, затем только план и только удержание) для устойчивых обновлений удержания. Добавлено покрытие Pester для проверки, формы полезной нагрузки, запасного варианта и сопоставления публичных команд. Также исправлена граничная ситуация/ошибка, когда пользователи получали рекомендации по изменению таблиц озера данных на уровень озера данных, если у них ещё были данные аналитики в Sentinel.
0.7.12026-05-15Добавлена осведомлённость о плане из Usage.Plan без замены настроенного плана таблицы: анализ теперь отслеживает историю наблюдаемых планов, отмечает использование нескольких планов и несоответствия настроенного и наблюдаемого, а также отображает данные плана на панели мониторинга, в детализации таблиц, представлении всех таблиц, оценке удержания и экспорте. Исправлено автоматическое закрытие атрибуции в Detection Analyzer, так что временная эвристика применяется только при отсутствии включённых правил автоматизации. Пройдено 203 теста.
0.7.02026-04-16Обновление оценки обнаружений: добавлена сводная таблица матрицы стоимости-ценности (первичные/вторичные x7 категорий оценки с цветовой кодировкой), подменю детализации для первичных/вторичных таблиц со столбцами стоимости и уровня обнаружения. Добавлены бары покрытия объёма в GB для Detection Analyzer (обнаружение/охота/комбинированные GB в процентах от общего объёма приёма вместе с существующими барами количества таблиц). Улучшения адаптивного отображения для Detection Analyzer (динамическая ширина полос, усечение имён правил, условное скрытие столбцов в зависимости от ширины консоли). Пройдено 193 теста.
0.6.32026-04-11Небольшое обновление для PSGallery.
0.6.22026-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.12026-04-10Исправления ошибок: фильтрация $kqlKeywords теперь общая в области файла (ранее не определена в Get-TablesFromKql), [CmdletBinding()] добавлен во все вспомогательные функции, упрощена единая проверка Defender, удалён фиктивный тестовый параметр -RuleCount. Надёжность: пагинация Get-HuntingQueries, обёртка повторных попыток Invoke-AzRestWithRetry с экспоненциальной задержкой для 429/5xx, проверка PricePerGB, Write-Verbose в ключевых функциях. Документация: значок версии, количество баз данных, предварительные требования согласованы с манифестом.
0.6.02026-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.02026-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.12026-04-03Исправления безопасности и стабильности — добавлена очистки памяти токенов, проверка пути вывода и защита от XSS, ограничения пагинации REST API, исправление маскировки ошибок загрузчика модулей и устранение предупреждений PSScriptAnalyzer.
0.4.02026-04-02Обнаружение преобразований (список DCR + классификация типов преобразований), обнаружение разделённых таблиц (_SPLT_CL), помощник разделения KQL с базой знаний из 15 таблиц (high-value-fields.json) + запасной вариант анализа правил, вывод KQL только с условиями, готовый для портала, расширяемый список рекомендаций, меню TUI с предложениями по разделению KQL.
0.3.02026-04-02Анализ соответствия удержанию журналов (CISA M-21-31, NIST SP 800-92, NCSC-UK, ASD ACSC, NSA), обнаружение тегов корреляции (#DONT_CORR#/#INC_CORR#), просмотр меню оценки удержания, столбец удержания в "Все таблицы", recommendedRetentionDays в схеме классификации.
0.2.22026-04-02Таблица оптимизации SOC скрывает столбец Detail на узких консолях.
0.2.12026-04-02Поддержка пользовательской классификации (-CustomClassificationPath), обогащённые рекомендации по оптимизации SOC с предложениями API/детализацией, представление только активных по умолчанию, подавление предупреждения о кодировке UTF-8.
0.2.0-Первый публичный релиз с движком классификации, оценкой стоимость-ценность, TUI Spectre.Console, экспортом в JSON/Markdown.
0.1.0-Внутренняя версия для разработки.