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

