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

deadair v0.4.0

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

Поделиться

deadair - SIEM detection coverage health

CI Release Go 1.26 License: Apache-2.0

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

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

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

deadair scan of a disposable Elastic lab showing dead and impaired detections

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

Зачем нужен deadair

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

Он выявляет:

  • правила, чьи селекторы индексов, алиасов или потоков данных не разрешаются ни во что;
  • правила со смешанными селекторами, где одно объявленное входное данное исчезло, а другое всё ещё разрешается;
  • правила, все соответствующие источники которых устарели или пусты;
  • в Elastic — правила, работающие с отсутствующими объявленными полями;
  • в Elastic и подходящих правилах Sentinel Scheduled — «слепое окно» из-за задержки приёма данных;
  • в 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   # проверка, что учётные данные могут выполнять сканирование
deadair scan    # оценка активных правил и телеметрии

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

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

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

Sentinel следует той же модели «правило-к-источнику». Его адаптер также понимает буквальные списки наблюдения, сохранённые функции, парсеры ASIM, сопоставленные воркспейсы и происхождение сводных таблиц. Когда Azure предоставляет достаточно доказательств, deadair может показать, что один отфильтрованный срез общей таблицы «затих» или что конвейер сводных данных отстал. Эти две проверки являются рекомендательными; они не влияют на порог. В руководстве по использованию описаны правила доказательств, а в записи о валидации зафиксировано покрытие живых тестов.

deadair scan of a disposable Microsoft Sentinel lab showing missing, stale, late, and incompatible telemetry

Живое сканирование одноразовой Sentinel-лаборатории с намеренно отсутствующей, устаревшей, запаздывающей и несовместимой телеметрией. Откройте изображение для короткого повтора. См. отдельную запись о соответствии Azure для тестов только на чтение и запрета записи.

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

Находки

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

Каждый вердикт ограничен тем, что может видеть настроенное учётное данное. 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>
# Необязательно: JSON-список разрешённых для буквальных целей workspace().
# export DEADAIR_SENTINEL_REMOTES=/restricted/path/sentinel-remotes.json

deadair check
deadair scan

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

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

CI, флоты и мониторинг

# Проверка кандидатного правила на доступность живого источника.
deadair scan --rule new-rule.json

# Сбой только при новых регрессиях между отчётами.
deadair diff yesterday.json today.json

# Сканирование нескольких экземпляров SIEM из одного процесса.
deadair scan --fleet fleet.json

# Экспорт кэшированных результатов сканирования как метрик Prometheus.
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 заменяет идентификаторы тенантов, правил, источников, шаблонов, полей, зависимостей, происхождения, воркспейсов, списков наблюдения, шаблонов и пакетов на псевдонимы HMAC с ключом. Проверенные выражения зависимостей-проб и их аргументы KQL никогда не сериализуются. Файл --redact-key-file, сгенерированный из случайных байтов, также включает редактирование и сохраняет имена стабильными между отдельными запусками.
  • Экспортёр по умолчанию привязывается к loopback.
  • deadair не имеет поведения «звонка домой» или телеметрии использования.

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

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

Участие

Приветствуются отчёты об ошибках, очищенные фикстуры, случаи корректности, документация и предложения по бэкендам. Начните с CONTRIBUTING.md и используйте шаблон RFC бэкенда для работы над адаптерами.

Лицензия

Apache-2.0.

Категории