Назад к обновлениям
New releaseSep 6, 2026

deadair v0.8.0

Находит правила обнаружения в вашем SIEM, которые работают вслепую

Поделиться

deadair - состояние покрытия обнаружений SIEM

CI Release Go 1.26 License: Apache-2.0

deadair проверяет, есть ли у включённых обнаружений SIEM необходимая им телеметрия.
Он сообщает об отсутствующих или устаревших данных, задержках приёма и несоответствиях схемы.

Работает локально · Только чтение · Без агента · Без выгрузки телеметрии

Читать техническое описание · Упомянут в Detection Engineering Weekly · Упомянут в tl;dr sec #341

Сканирование Elastic, показывающее отсутствующие и устаревшие источники, отсутствующие поля и задержанные события

Отсутствующие поля и задержанные события в одноразовой лаборатории Elastic. Откройте изображение, чтобы увидеть короткую запись с элементами управления воспроизведением, или воспроизведите её с помощью make record-scan-lab.

Зачем нужен deadair

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

Он выявляет:

  • правила, чьи селекторы индексов, алиасов или потоков данных не разрешаются ни во что;
  • правила со смешанными селекторами, где один объявленный вход исчез, а другой всё ещё разрешается;
  • правила, все соответствующие источники которых устарели или пусты;
  • в Elastic — правила, работающие с отсутствующими объявленными полями;
  • в Elastic и подходящих Scheduled-правилах Sentinel — слепое окно задержки приёма;
  • в Sentinel — правила, чьи известные источники используют несовместимый план таблиц Basic или Auxiliary;
  • в Elastic и OpenSearch — исправную телеметрию, которую не читает ни одно включённое обнаружение.

deadair поддерживает Elastic Security, OpenSearch Security Analytics и Microsoft Sentinel.

Быстрый старт

Скачайте бинарный файл для macOS, Linux или Windows со страницы GitHub Releases или установите с помощью Go:

go install github.com/alephnull-sh/deadair/cmd/deadair@latest

Выведите настройку только для чтения для вашего SIEM:

deadair setup elastic      # Elastic Security
deadair setup opensearch   # OpenSearch Security Analytics
deadair setup sentinel     # Microsoft Sentinel

Выполните одну настройку, затем проверьте и просканируйте:

deadair check   # verify the credential can scan
deadair scan    # assess live rules and telemetry

Коды выхода стабильны: 0 — пройден настроенный порог, 1 — обнаружения, ограниченные порогом, 2 — сканирование не удалось.

Чтобы исследовать источник и потребляющие его обнаружения:

deadair scan --json-out report.json --html-out report.html
deadair inspect --source CommonSecurityLog report.json

Используйте имя источника из вашего отчёта. Руководство по исследованию также охватывает отдельные каналы Sentinel, обслуживание и отслеживание восстановления.

Как это работает

ЭтапЧто делает deadair
Инвентаризациячитает включённые обнаружения и объявленные ими входные данные
Разрешениеиспользует нативное разрешение индексов в Elastic и OpenSearch; в Sentinel объединяет анализ KQL с таблицами, watchlist, сохранёнными функциями, ASIM и сопоставленными данными из других рабочих областей
Измерениепроверяет свежесть и своевременность источников, а также схему и хранилище там, где бэкенд это поддерживает
Отчётвыдаёт вывод в терминал, JSON, HTML, сводки по парку и метрики Prometheus с доказательствами, лежащими в основе каждого вердикта

Sentinel следует той же модели «правило — источник» и добавляет литеральные watchlist, сохранённые функции, парсеры ASIM, сопоставленные рабочие области и происхождение сводных таблиц. Он также показывает, когда отфильтрованный срез общей таблицы замолчал или конвейер сводок отстал.

Руководство по использованию описывает правила доказательств, а запись о валидации фиксирует охват живого тестирования.

Тихий лондонский поток данных межсетевого экрана и зависящее от него обнаружение внутри Sentinel CommonSecurityLog

Два потока данных межсетевого экрана используют CommonSecurityLog. Один останавливается; другой продолжает отчитываться. Запись показывает сохранённые сканирования сбоя и восстановления. См. запись о валидации для условий лаборатории.

deadair проверяет, присутствует ли телеметрия обнаружения и исправна ли она. Он не проверяет логику правил и не доказывает, что смоделированная атака вызовет оповещение. Для этих задач используйте статическую валидацию правил и сквозные тесты обнаружения.

Обнаружения

ОбнаружениеЗначениеПервая проверка
нет соответствующего источникани один из входов правила не разрешается в видимый индекс, поток данных или таблицу Sentinelизменения шаблонов, отсутствующие интеграции и область действия учётных данных
все источники устарели или пустыкаждый разрешённый источник сейчас непригоденчастота источника и путь приёма
отсутствующие поляобъявленное в правиле Elastic поле отсутствует или не подлежит поиску в одном или нескольких разрешённых источниках после чтения всех сопоставлений источниковизменения парсера, пакета и сопоставления
слепое окно задержкиp95 задержки приёма парных событий превышает запас обратного просмотра правилаинтервал правила, обратный просмотр, переопределение метки времени и задержка конвейера
частичное покрытие входовполное выражение разрешается, но один положительный селектор внутри него разрешается пустыммиграции, резервные селекторы и ожидаемые альтернативы; информационно, если политика не ограничивает это порогом
несовместимый план источникаправило Sentinel зависит от таблицы Basic или Auxiliary, которая не подходит для пути доказательств правила аналитикиплан таблицы и тип правила
деградация источникаисточник устарел, пуст, имеет низкий объём или дрейф схемыистория источника и ожидаемое обслуживание
неиспользуемая телеметрияв Elastic или OpenSearch данные хранятся, но ни одно включённое локальное обнаружение не разрешается в нихотключённые правила и намеренный сбор
ожидаемый производитель молчитнастроенный канал поставщика, продукта или устройства Sentinel не отчитывался в пределах своего порогаотправитель и коллектор этого канала
неисправный конвейер сводоксоответствующая задача сводок Sentinel завершилась сбоем или её последний успех просроченнативная запись о выполнении и запрос сводок

Обнаружения производителя и конвейера сводок влияют на статус выхода, когда их классы выбраны в политике. Молчащий канал устройства сообщается отдельно от других потребителей его общей таблицы.

Каждый вердикт ограничен тем, что может видеть настроенная учётная запись. Отчёты JSON включают настроенные выражения, разрешённые источники, метод разрешения, статус оценки, метаданные бэкенда и доказательства возможностей. См. руководство по использованию для примеров и сортировки.

Подключение SIEM

Elastic:

export DEADAIR_ES_URL=https://es.example.internal:9200
export DEADAIR_KIBANA_URL=https://kibana.example.internal:5601
export DEADAIR_API_KEY=<read-only-api-key>

deadair check
deadair scan --json-out report.json --html-out report.html

OpenSearch:

export DEADAIR_BACKEND=opensearch
export DEADAIR_OPENSEARCH_URL=https://opensearch.example.internal:9200
export DEADAIR_OPENSEARCH_USERNAME=deadair
export DEADAIR_OPENSEARCH_PASSWORD=<password>

deadair check
deadair scan

Microsoft Sentinel:

az login --tenant <tenant-id>

export DEADAIR_BACKEND=sentinel
export DEADAIR_AZURE_SUBSCRIPTION_ID=<subscription-id>
export DEADAIR_AZURE_RESOURCE_GROUP=<resource-group>
export DEADAIR_SENTINEL_WORKSPACE=<workspace-resource-name>
# Optional: JSON allowlist for literal workspace() targets.
# export DEADAIR_SENTINEL_REMOTES=/restricted/path/sentinel-remotes.json

deadair check
deadair scan

Прежде чем deadair оценит сопоставленную удалённую рабочую область правила, в этой рабочей области должен быть развёрнут Sentinel. Сопоставления в одной подписке могут доказать доступность источника. Правилам между подписками нужны доказательства времени выполнения, привязанные к точной идентичности правила. См. детали использования Sentinel для правил доказательств, ограничений рабочих областей и регионов, а также рекомендаций Microsoft по производительности.

Используйте документированные роли только для чтения для Elastic, OpenSearch или Microsoft Sentinel.

CI, парки и мониторинг

# Gate a candidate rule against live source availability.
deadair scan --rule new-rule.json

# Fail only on new regressions between reports.
deadair diff yesterday.json today.json

# Scan multiple SIEM instances from one process.
deadair scan --fleet fleet.json

# Export cached scan results as Prometheus metrics.
deadair serve --interval 5m

scan --rule изолирует нативное для бэкенда правило-кандидат или детектор от несвязанного накопившегося объёма. diff работает с отредактированными отчётами, созданными с тем же ключом, хранящимся у вызывающей стороны. Конфигурация парка ссылается на секреты через переменные окружения, а не хранит значения секретов.

Официальный GitHub Action оборачивает пороги кандидатов для одного экземпляра для Elastic, OpenSearch и Sentinel. Он записывает сводку задания, загружает отредактированный JSON-отчёт и может применить политику deadair без установки правила. Рабочие процессы Sentinel сначала аутентифицируют раннер в Azure; Action не определяет входных данных для учётных данных Azure.

См. поведение порога CI, развёртывание парка и MSSP и примеры Prometheus для конфигураций, которые стоит протестировать в вашей собственной среде.

Протестированные бэкенды

БэкендЖивая валидация
Elastic Securityдоверенный CI на 8.19.19 и 9.4.4
OpenSearch Security Analyticsдоверенный CI на 2.19.6 и 3.7.0
Microsoft Sentinelзаписанное соответствие по запросу в одноразовых рабочих областях UK South; см. статус валидации

Прогон соответствия Sentinel выполняется вручную, а не по расписанию CI.

Модель безопасности

  • Все вызовы адаптеров доступны только для чтения. Доверенные тесты Elastic и OpenSearch, а также отдельные лабораторные пробы Sentinel подтверждают, что документированные идентичности сканирования не могут выполнять типовые операции записи.
  • Отчёты, HTML, файлы состояния и вывод парка записываются с правами 0600 в системах POSIX.
  • Учётные данные могут поступать из переменных окружения или файлов, что позволяет избежать секретов в аргументах процесса.
  • --redact заменяет идентификаторы арендатора, правила, источника, шаблона, поля, зависимости, происхождения, провенанса, рабочей области, watchlist, шаблона и пакета на ключевые псевдонимы HMAC. Проверенные выражения проб зависимостей и их аргументы KQL никогда не сериализуются. Сгенерированный из случайных байтов --redact-key-file также включает редактирование и сохраняет имена стабильными между отдельными запусками.
  • Экспортёр по умолчанию привязывается к loopback.
  • deadair не имеет поведения «звонка домой» и телеметрии использования.

Относитесь к отчётам как к конфиденциальным артефактам SOC: они выявляют слепые обнаружения, имена источников, пробелы в схеме и неиспользуемый сбор.

Документация

Участие

Открывайте issue для сообщений об ошибках, предложений или очищенных воспроизведений. Изменения кода выполняют сопровождающие. См. CONTRIBUTING.md для подробностей.

Лицензия

Apache-2.0.

Категории