
deadair v0.4.0
Находит правила обнаружения в вашей SIEM, которые работают вслепую
Открытое решение для проверки работоспособности SIEM-детектирований.
Находите включённые детектирования, которые «слепы», потому что их телеметрия отсутствует, устарела, поступает с задержкой или несовместима со схемой.
Работает локально · Только чтение · Без агента · Без загрузки телеметрии
Читать техническое описание · Упоминание в Detection Engineering Weekly · Упоминание в tl;dr sec #341
Реальное сканирование одноразовой 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 может показать, что один отфильтрованный срез общей таблицы «затих» или что конвейер сводных данных отстал. Эти две проверки являются рекомендательными; они не влияют на порог. В руководстве по использованию описаны правила доказательств, а в записи о валидации зафиксировано покрытие живых тестов.
Живое сканирование одноразовой 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: они идентифицируют «слепые» детектирования, имена источников, пробелы схемы и неиспользуемый сбор данных.
Документация
- Руководство по использованию — первые сканирования, доказательства отчётов, находки, CI-пороги, состояние и флоты
- Статус валидации — протестированные пути и текущие ограничения
- Архитектура — контракт бэкенда, модель данных, свойства безопасности и ограничения
- Лучшие практики — порядок развёртывания, контекст оповещений и маршрутизация
- Руководство MSSP — секреты, редактирование, планирование и обработка сбоев тенантов
- Детектирования, которые работают, но не видят — проблема и воспроизводимая симуляция
Участие
Приветствуются отчёты об ошибках, очищенные фикстуры, случаи корректности, документация и предложения по бэкендам. Начните с CONTRIBUTING.md и используйте шаблон RFC бэкенда для работы над адаптерами.
Лицензия
Apache-2.0.

