Глава 9. EDR и непрерывная оценка
В Главе 8 мы определили что проверяем: шифрование диска, версию ОС, состояние firewall, наличие TPM. Но статичная проверка при подключении — это не Zero Trust. Тенет 5 NIST SP 800-207 требует непрерывного мониторинга. Устройство, чистое утром, может быть скомпрометировано к обеду. Именно здесь начинается роль EDR — как непрерывного источника сигналов для Механизма политик (PE).
Зачем нужна непрерывная оценка
NIST SP 800-207: непрерывный мониторинг в архитектуре
Четыре из семи тенетов NIST SP 800-207 (Section 2.1) напрямую связаны с непрерывной оценкой устройств:
- Тенет 4: «Доступ к ресурсам определяется динамической политикой — включая наблюдаемое состояние идентичности клиента, приложения/сервиса и запрашивающего актива — и может включать другие поведенческие и средовые атрибуты»
- Тенет 5: «Организация мониторит и измеряет целостность и состояние безопасности всех принадлежащих и ассоциированных активов. Ни один актив по умолчанию не является доверенным»
- Тенет 6: «Аутентификация и авторизация — динамические и строго применяемые перед каждым доступом. Это постоянный цикл: получение доступа, сканирование, оценка угроз, адаптация и непрерывная переоценка доверия»
- Тенет 7: «Организация собирает максимум информации о текущем состоянии активов, сетевой инфраструктуры и коммуникаций и использует её для улучшения безопасности»
Источник: NIST SP 800-207, Section 2.1
Алгоритм доверия (Trust Algorithm, Section 3.3) в PE принимает на вход asset database и observable status — это данные о состоянии устройства, версиях ПО, патчах — и threat intelligence. EDR поставляет данные для обоих входов.
CISA ZTMM v2.0: уровень Optimal
CISA Zero Trust Maturity Model v2.0 (апрель 2023) определяет четыре уровня зрелости для столпа Devices. Уровень Optimal — это целевое состояние:
«Непрерывный мониторинг безопасности устройств и валидация. Доступ к данным зависит от аналитики рисков в реальном времени. Агентства непрерывно выполняют оценку состояния устройств (EDR). Постоянная оценка в реальном времени.»
Функция Device Threat Protection (добавлена в v2.0) явно включает EDR как компонент зрелой архитектуры: от базовой автоматизации (Initial) через консолидированную защиту (Advanced) к единой XDR-платформе для всех активов (Optimal).
Источник: CISA ZTMM v2.0
Статичная проверка vs непрерывная оценка
| Характеристика | Compliance check (Глава 8) | Непрерывная оценка (EDR) |
|---|---|---|
| Когда | При подключении / по расписанию (часы) | В реальном времени (секунды) |
| Что | Конфигурация: ОС, шифрование, firewall | Поведение: процессы, сетевой трафик, файлы |
| Обнаруживает | Несоответствие политике | Активные угрозы и аномалии |
| Реакция | Блокировка доступа | Изоляция устройства + блокировка доступа |
| Пример | «BitLocker отключен» | «Процесс mimikatz.exe извлекает пароли» |
Оба механизма необходимы. Compliance check (MDM/UEM) — это гигиенический минимум. EDR — это непрерывный мониторинг поведения. В архитектуре Zero Trust они дополняют друг друга и оба передают сигналы в PE.
EDR и XDR: определения
EDR (Endpoint Detection and Response) — термин, введённый аналитиком Gartner Антоном Чувакиным в 2013 году. EDR мониторит и реагирует на угрозы на конечных точках: рабочих станциях, серверах, мобильных устройствах. В отличие от традиционного антивируса (сигнатурный анализ), EDR анализирует поведение — паттерны процессов, файловых операций, сетевых соединений.
Источники: CrowdStrike — What is EDR, Palo Alto Networks — What is EDR
XDR (Extended Detection and Response) — расширение EDR за пределы endpoint. Gartner определяет XDR как «унифицированную платформу обнаружения и реагирования на инциденты, автоматически коррелирующую данные из нескольких компонентов безопасности».
Источник: Gartner Peer Insights — XDR
| Аспект | EDR | XDR |
|---|---|---|
| Область | Только endpoint | Endpoint + сеть + облако + email + идентичность |
| Корреляция | Внутри одного endpoint | Между всеми источниками |
| Пример | «Подозрительный процесс на хосте A» | «Фишинговое письмо → вход с нового устройства → lateral movement» |
Рынок EDR/XDR (2025)
Gartner Magic Quadrant for Endpoint Protection Platforms (2025) выделяет четырёх лидеров:
- CrowdStrike — лидер 6-й год подряд, высшая позиция по Ability to Execute (3-й год)
- Microsoft — лидер 6-й год подряд (Defender for Endpoint + Defender XDR)
- SentinelOne — лидер 5-й год подряд
- Palo Alto Networks (Cortex XDR) — лидер 3-й год подряд
Источники: CrowdStrike — 2025 Gartner MQ, Microsoft — 2025 Gartner MQ, SentinelOne — 2025 Gartner MQ
Размер рынка EDR: $5.1 млрд в 2025, прогноз $18.7 млрд к 2031 (CAGR 24%). XDR: $7.9 млрд в 2025, прогноз $30.9 млрд к 2030 (CAGR 31%).
Источники: Mordor Intelligence — EDR Market, MarketsandMarkets — XDR Market
Как EDR передаёт сигналы в архитектуру Zero Trust
В архитектуре NIST SP 800-207, EDR — это один из источников данных для Trust Algorithm (Section 3.3). Поток данных:
Microsoft Defender for Endpoint → Intune → Conditional Access
Самая зрелая интеграция EDR с Zero Trust — цепочка Microsoft: Defender обнаруживает угрозу → Intune оценивает compliance → Entra ID Conditional Access блокирует доступ.
Уровни риска устройства (Defender for Endpoint):
| Уровень | Значение | Рекомендация |
|---|---|---|
| Clear | Нет активных угроз | Полный доступ |
| Low | Только низкоуровневые угрозы | Доступ с предупреждением |
| Medium | Средние угрозы | Ограниченный доступ, step-up MFA |
| High | Критические угрозы | Блокировка доступа, изоляция |
Источник: Microsoft Learn — Conditional Access in Defender for Endpoint
Сценарий:
- Пользователь открывает вредоносный файл → Defender for Endpoint помечает устройство как High risk
- Оценка передаётся в Intune → политика compliance «Require device risk at or below Medium» → устройство noncompliant
- Entra ID Conditional Access → блокирует доступ к Exchange Online, SharePoint
- После remediation (автоматическое или ручное) → Defender снимает risk → Intune reassess → доступ восстанавливается
Требования: Microsoft Intune, Entra ID P1/P2, Windows 10/11 Entra ID Joined, лицензия Defender for Endpoint (Plan 2 или Microsoft 365 E5).
Источник: Microsoft Learn — Integrate Defender with Intune
CrowdStrike Falcon Zero Trust Assessment (ZTA)
CrowdStrike реализует непрерывную оценку через ZTA score — числовую оценку от 1 до 100 для каждого устройства (выше = лучше). Score рассчитывается на основе более 120 параметров endpoint, включая:
- ОС-параметры: настройки безопасности, доступность обновлений прошивки, митигации CVE
- Параметры сенсора: статус Reduced Functionality Mode (RFM), политики предотвращения, Real Time Response
ZTA score интегрируется с внешними системами контроля доступа:
| Интеграция | Протокол | Как работает |
|---|---|---|
| AWS Verified Access | Native Message Host + браузер | ZTA score как device posture для Cedar-политик |
| Zscaler Private Access | API | ZPA обновляет политики доступа по ZTA |
| Beyond Identity | API | Аутентификация только для устройств выше порога ZTA |
| Tailscale | Posture checks | Ограничение доступа к ресурсам по ZTA score |
Источники: CrowdStrike — Falcon ZTA, GitHub — CrowdStrike/aws-verified-access, Tailscale — CrowdStrike ZTA
Автоматическая изоляция
Ключевая возможность EDR в контексте Zero Trust — автоматическая изоляция скомпрометированного устройства. Изоляция отключает устройство от сети, оставляя только канал связи с EDR-платформой для расследования и ремедиации.
Это реализация принципа «предполагай взлом» (assume breach): PE не просто блокирует доступ — EDR физически ограничивает сетевую связанность устройства, предотвращая lateral movement.
Источник: Microsoft Learn — Response Actions on Devices
osquery: SQL-based endpoint visibility
Не каждая организация может позволить коммерческий EDR на всех endpoint. osquery — open-source инструмент, который превращает операционную систему в реляционную базу данных с SQL-интерфейсом.
Основы
- Создан: Facebook, 29 октября 2014 года
- Текущая версия: 5.21.0 (18 декабря 2025)
- Governance: osquery Foundation под Linux Foundation (с июня 2019)
- Платформы: macOS, Linux, Windows, FreeBSD
- Таблицы: более 270 (варьируется по ОС)
- Два режима:
osqueryi(интерактивная консоль) иosqueryd(демон с расписанием)
Источники: Meta Engineering — Introducing osquery (Oct 29, 2014), osquery GitHub Releases, Linux Foundation — osquery Foundation (June 2019)
Ключевые таблицы для Zero Trust
| Таблица | Платформа | Что проверяем |
|---|---|---|
os_version | Все | Версия ОС, патч-уровень |
disk_encryption | macOS, Linux | Шифрование диска (FileVault) |
bitlocker_info | Windows | Статус BitLocker, метод, % |
processes | Все | Запущенные процессы, PID, путь |
listening_ports | Все | Открытые порты, протокол |
logged_in_users | Все | Текущие сессии |
alf | macOS | Application Layer Firewall |
iptables | Linux | Правила фильтрации пакетов |
certificates | macOS, Windows | Установленные CA-сертификаты |
curl_certificate | Все | TLS-сертификат удалённого хоста |
Источник: osquery Schema, Fleet Table Docs
Примеры запросов для оценки устройства
Проверка шифрования диска:
-- macOS (FileVault)
SELECT name, uuid, encrypted
FROM disk_encryption
WHERE encrypted = 1;
-- Windows (BitLocker) — оба условия обязательны
SELECT
drive_letter,
CASE WHEN (conversion_status = 1 AND protection_status = 1)
THEN 'ENCRYPTED' ELSE 'NOT ENCRYPTED' END AS status,
encryption_method, percentage_encrypted
FROM bitlocker_info;Обнаружение работающего EDR-агента:
-- CrowdStrike Falcon (Windows — через сервисы)
SELECT name, display_name, status, start_type
FROM services
WHERE name = 'CSFalconService';
-- Microsoft Defender
SELECT name, pid, path
FROM processes
WHERE name IN ('MsMpEng.exe', 'MsSense.exe');
-- Универсальный запрос для нескольких EDR
SELECT name, pid, path
FROM processes
WHERE name IN (
'falcon-sensor', 'CSFalconService.exe', -- CrowdStrike
'SentinelServiceHost.exe', 'SentinelAgent.exe', -- SentinelOne
'MsMpEng.exe', 'MsSense.exe', -- Microsoft Defender
'cbagentd', 'CbDefense' -- Carbon Black
);Источники: Fleet — bitlocker_info, Fleet — disk_encryption, 1Password — CrowdStrike Falcon sensor check
Аномальные прослушивающие порты:
SELECT lp.port, lp.protocol, lp.address, p.name, p.path
FROM listening_ports lp
JOIN processes p ON lp.pid = p.pid
WHERE lp.port NOT IN (22, 80, 443, 8080)
AND lp.address != '127.0.0.1';Производительность и Watchdog
osquery включает встроенный watchdog для защиты от «тяжёлых» запросов:
| Параметр | Normal (Level 0) | Restrictive (Level 1) |
|---|---|---|
| Лимит памяти | 200 МБ сверх базовой | 100 МБ |
| Лимит CPU | 10% за 12 секунд | 5% за 6 секунд |
| Рестарты до отключения | 10 | 4 |
Если запрос превышает лимиты, watchdog завершает worker-процесс и блокирует виновный запрос на 24 часа.
Источник: osquery — Performance Safety
Fleet: управление osquery в масштабе
osquery на одном хосте полезен для отладки. Для флота из тысяч устройств нужен центральный сервер. Fleet — open-source платформа управления устройствами, построенная на osquery.
Основы
- Текущая версия: 4.80.0 (начало 2026)
- Лицензия: MIT (ядро), premium-функции под отдельной лицензией (
ee/директория) - Платформы: macOS, Linux, Windows, iOS, iPadOS, Android, ChromeOS
- Масштаб: 50 000+ endpoint (серверы, контейнеры, ноутбуки)
- Сайт: fleetdm.com
Архитектура Fleet:
Три зависимости: MySQL (хранилище), Redis (очереди и кэш), TLS-сертификат. Redis масштабируется до сотен тысяч устройств на одном инстансе. Горизонтальное масштабирование — добавить Fleet-серверы за балансировщиком.
Источник: Fleet — Reference Architectures
Policies: SQL-based compliance
Главная функция Fleet для Zero Trust — политики (policies). Политика — это SQL-запрос с бинарным результатом:
- Запрос вернул строки → PASS (соответствует)
- Запрос не вернул строк → FAIL (не соответствует)
# fleet-policies.yml (GitOps)
policies:
- name: "Disk encryption enabled"
query: >
SELECT 1 FROM disk_encryption WHERE encrypted = 1;
description: "FileVault or LUKS must be enabled"
resolution: "Enable FileVault: System Preferences → Security → FileVault"
platform: darwin,linux
- name: "OS is up to date"
query: >
SELECT 1 FROM os_version
WHERE version >= '14.0' AND platform = 'darwin';
description: "macOS must be 14.0 (Sonoma) or newer"
resolution: "Update macOS: System Settings → General → Software Update"
platform: darwin
- name: "CrowdStrike Falcon is running"
query: >
SELECT 1 FROM processes WHERE name = 'falcon-sensor';
description: "CrowdStrike Falcon sensor must be active"
resolution: "Contact IT: CrowdStrike agent is not running on your device"
platform: darwin,linuxFleet предоставляет библиотеку готовых политик (CIS benchmarks, типовые compliance-проверки) и поддерживает GitOps — политики хранятся в Git и применяются через fleetctl apply.
Источник: Fleet — Understanding Policies, Fleet — GitOps YAML
Webhook-автоматизация
Когда устройство переходит из состояния PASS в FAIL, Fleet отправляет webhook с данными о хосте и нарушенной политике. Это ключевой механизм интеграции с архитектурой Zero Trust:
Пример интеграции: Fleet обнаруживает, что шифрование диска отключено → webhook в Tines → Tines вызывает API Okta/Entra ID для обновления device trust signal → следующая аутентификация требует step-up MFA или блокирует доступ.
Fleet 4.71.0 добавил IdP-based labels — устройства автоматически маркируются на основе групп в IdP. Fleet 4.76.0 расширил API маппинга устройств с источником idp.
Источники: Fleet — Automations, Fleet — Zero Trust Attestation, Fleet 4.71.0 Release Notes
Vulnerability management
Fleet автоматически сопоставляет установленное ПО с базами уязвимостей:
- NVD (National Vulnerability Database) — CVE-записи
- CISA KEV (Known Exploited Vulnerabilities) — активно эксплуатируемые уязвимости
- EPSS (Exploit Prediction Scoring System) — вероятность эксплуатации
Это позволяет не просто обнаружить уязвимое ПО, но приоритизировать по реальному риску.
Источник: Fleet — Vulnerability Processing
Fleet vs коммерческий EDR
| Аспект | Fleet + osquery | Коммерческий EDR |
|---|---|---|
| Детекция угроз | SQL-запросы, поведенческий анализ ограничен | ML/AI, поведенческий анализ, threat intelligence |
| Реагирование | Webhook → внешняя автоматизация | Автоматическая изоляция, remediation |
| Compliance | Полностью настраиваемые SQL-политики | Предустановленные проверки вендора |
| Стоимость | MIT (бесплатно для core) | $5-50/endpoint/месяц |
| GitOps | Нативная поддержка (fleetctl, YAML) | Ограниченная |
| Позиционирование | Endpoint visibility + compliance | Threat detection + response |
Fleet не заменяет коммерческий EDR. Это дополнительный инструмент: когда EDR обнаруживает угрозу и изолирует устройство, osquery даёт полную видимость для расследования. Когда EDR стоит слишком дорого для всего флота — Fleet закрывает базовую compliance-проверку.
Уроки инцидентов
SolarWinds / SUNBURST (декабрь 2020)
Атака на цепочку поставок SolarWinds — один из наиболее значимых инцидентов, связанных с ограничениями EDR. Троянизированное обновление SolarWinds Orion было подписано легитимным сертификатом — EDR-системы рассматривали его как доверенное ПО.
Обнаружение произошло не через сигнатуры, а через аномальное поведение — FireEye (ныне Mandiant) обнаружила несанкционированный доступ к своим инструментам red team.
Урок для Zero Trust: доверие к подписанному ПО недостаточно. Нужна непрерывная поведенческая аналитика + верификация цепочки поставок (тема Главы 15).
Источники: Mandiant — SUNBURST Backdoor, US GAO — SolarWinds Cyberattack
CrowdStrike Falcon — сбой 19 июля 2024
Не атака, а операционный урок. 19 июля 2024 в 04:09 UTC CrowdStrike выпустила обновление конфигурации (Channel File 291) с ошибкой — несовпадение IPC Template Type (21 поле) с кодом сенсора (20 полей). Content Validator не обнаружил ошибку.
Результат:
- 8.5 млн устройств Windows затронуто (оценка Microsoft, <1% всех Windows-устройств)
- Отмены авиарейсов, блокировка платёжных систем, сбои государственных сервисов
- Оценка убытков: ~$5.4 млрд для топ-500 компаний США (Parametrix)
- Delta Air Lines подала иск на $500 млн
Источники: Wikipedia — 2024 CrowdStrike IT Outages, CISA Alert — CrowdStrike Update, CrowdStrike — Channel File 291 RCA
Урок для Zero Trust: EDR-агент с доступом на уровне ядра — единая точка отказа. Архитектура должна предусматривать graceful degradation — что делать с доступом, когда EDR-сигнал недоступен:
- Снизить уровень доступа (read-only)
- Потребовать дополнительный фактор (step-up MFA)
- Ограничить время сессии
Вызовы и ограничения
BYOVD (Bring Your Own Vulnerable Driver)
Техника постэксплуатации: атакующий загружает легитимный, но уязвимый подписанный драйвер ядра для отключения EDR-агента. Исследователи идентифицировали 917 подписанных 64-bit драйверов, пригодных для эксплуатации, и более 5 500 потенциально уязвимых драйверов, импортирующих опасные kernel API.
В 2026 году зафиксирована атака с использованием драйвера EnCase (Guidance Software) через BYOVD для завершения 59 процессов средств защиты с kill-loop каждую секунду.
Источники: Cymulate — How Attackers Bypass EDR, Dark Reading — EnCase Driver Weaponized
False positives и alert fatigue
По данным опроса Bitdefender (2024): ~45% всех EDR-алертов — false positives. До 30% алертов никогда не расследуются. Организации получают ~17 000 алертов о вредоносном ПО в неделю, из которых только 19% — реальные угрозы.
Источник: Bitdefender — Half of EDR Alerts Are False Alarms
Для архитектуры Zero Trust это означает: нельзя блокировать доступ на каждый EDR-алерт. Нужна калибровка порогов — только подтверждённые угрозы (High risk) должны блокировать доступ; подозрения (Medium) — требовать step-up MFA; низкие (Low) — логироваться без блокировки.
Зависимость от одного вендора
Инцидент CrowdStrike показал системный риск. Рекомендации:
- EDR — один из многих сигналов, а не единственный. PE принимает решение на основе identity + device compliance + EDR + network context
- Политика graceful degradation при недоступности EDR-сигнала
- Для критической инфраструктуры — рассмотреть многовендорную стратегию
Lab: osquery + Fleet для endpoint telemetry
Предварительные требования
- Docker и docker-compose
- Браузер для Fleet UI
Шаг 1: Развёртывание Fleet
# Создаём рабочую директорию
mkdir -p fleet-lab && cd fleet-lab
# docker-compose.yml для Fleet + MySQL + Redis
cat > docker-compose.yml << 'EOF'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: fleet_root_pass
MYSQL_DATABASE: fleet
MYSQL_USER: fleet
MYSQL_PASSWORD: fleet_pass
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
retries: 5
redis:
image: redis:7
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
retries: 5
fleet:
image: fleetdm/fleet:v4.80.0
command: fleet serve
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
environment:
FLEET_MYSQL_ADDRESS: mysql:3306
FLEET_MYSQL_DATABASE: fleet
FLEET_MYSQL_USERNAME: fleet
FLEET_MYSQL_PASSWORD: fleet_pass
FLEET_REDIS_ADDRESS: redis:6379
FLEET_SERVER_TLS: "false"
FLEET_LOGGING_JSON: "true"
ports:
- "8412:8080"
volumes:
mysql-data:
EOFПримечание:
FLEET_SERVER_TLS=false— только для лабораторной среды. В продакшене обязателен TLS.
# Запуск
docker-compose up -d
# Инициализация базы
docker-compose exec fleet fleet prepare db
# Создание admin-пользователя
docker-compose exec fleet fleet setup \
--email admin@lab.local \
--name Admin \
--password 'Lab#Pass2026!' \
--org-name "ZT Lab"Fleet UI доступен на http://localhost:8412.
Шаг 2: Подключение osquery-агента
# Получаем enroll secret из Fleet
ENROLL_SECRET=$(docker-compose exec fleet \
fleet get enroll-secret 2>/dev/null | head -1)
FLEET_URL="http://host.docker.internal:8412"
# Запуск osquery в Docker с подключением к Fleet
docker run -d --name osquery-agent \
--add-host=host.docker.internal:host-gateway \
osquery/osquery:5.21.0 \
osqueryd \
--tls_hostname="host.docker.internal:8412" \
--tls_server_certs="" \
--enroll_tls_endpoint="/api/osquery/enroll" \
--config_tls_endpoint="/api/osquery/config" \
--logger_tls_endpoint="/api/osquery/log" \
--distributed_tls_read_endpoint="/api/osquery/distributed/read" \
--distributed_tls_write_endpoint="/api/osquery/distributed/write" \
--enroll_secret_env=ENROLL_SECRET \
--disable_events=false \
--host_identifier=hostnameВ продакшене используйте сгенерированные Fleet-инсталляторы (
fleetctl package), которые встраивают osquery и конфигурацию в один пакет.
Шаг 3: Создание политик Zero Trust
Через fleetctl или API:
# fleet-policies.yml
cat > fleet-policies.yml << 'EOF'
apiVersion: v1
kind: policy
spec:
policies:
- name: "OS version is current"
query: >
SELECT 1 FROM os_version
WHERE (platform = 'darwin' AND version >= '14.0')
OR (platform = 'ubuntu' AND version >= '22.04')
OR (platform = 'windows' AND version >= '10.0.19045');
description: "OS must be a supported, patched version"
resolution: "Update your operating system to the latest supported version"
platform: darwin,linux,windows
- name: "Disk is encrypted"
query: >
SELECT 1 FROM disk_encryption WHERE encrypted = 1
UNION
SELECT 1 FROM bitlocker_info
WHERE conversion_status = 1 AND protection_status = 1;
description: "Full disk encryption (FileVault/LUKS/BitLocker) must be enabled"
resolution: "Enable disk encryption in system settings"
- name: "EDR agent is running"
query: >
SELECT 1 FROM processes
WHERE name IN ('falcon-sensor','CSFalconService.exe',
'MsMpEng.exe','MsSense.exe',
'SentinelServiceHost.exe','osqueryd');
description: "An EDR or osquery agent must be running"
resolution: "Contact IT: security agent is not running"
EOF
# Применяем политики
docker-compose exec fleet fleetctl apply -f /dev/stdin < fleet-policies.ymlШаг 4: Проверка через API
FLEET_URL="http://localhost:8412"
API_TOKEN="<token из Fleet UI: Settings → API tokens>"
# Список хостов с результатами политик
curl -s -H "Authorization: Bearer $API_TOKEN" \
"$FLEET_URL/api/v1/fleet/hosts" | \
python3 -m json.tool | head -30
# Детали конкретного хоста (policies, software, CVEs)
curl -s -H "Authorization: Bearer $API_TOKEN" \
"$FLEET_URL/api/v1/fleet/hosts/1" | \
python3 -c "
import sys, json
host = json.load(sys.stdin)['host']
print(f\"Hostname: {host['hostname']}\")
print(f\"Platform: {host['platform']}\")
print(f\"OS: {host['os_version']}\")
print(f\"Policies:\")
for p in host.get('policies', []):
status = 'PASS' if p['response'] == 'pass' else 'FAIL'
print(f\" [{status}] {p['name']}\")
"Шаг 5: Настройка webhook для интеграции с PDP
# Включаем webhook для failing policies
curl -s -X PATCH -H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
"$FLEET_URL/api/v1/fleet/config" \
-d '{
"webhook_settings": {
"failing_policies_webhook": {
"enable_failing_policies_webhook": true,
"destination_url": "https://hooks.example.com/fleet-policy-fail",
"policy_ids": [1, 2, 3],
"host_batch_size": 100
}
}
}'Fleet отправит POST-запрос на destination_url при каждом переходе хоста из PASS в FAIL. Payload содержит:
{
"timestamp": "2026-02-10T12:00:00Z",
"policy": {
"id": 2,
"name": "Disk is encrypted"
},
"hosts": [
{
"id": 1,
"hostname": "workstation-42",
"platform": "darwin",
"display_name": "workstation-42"
}
]
}Обработчик webhook (Tines, n8n, custom Lambda) маршрутизирует сигнал в IdP/PDP для обновления device trust.
Источник: Fleet — Automations
Очистка
docker-compose down -v
rm -rf fleet-labИтоги главы
| Концепция | Что даёт |
|---|---|
| EDR как сигнал | Непрерывный risk score → PE принимает динамические решения о доступе |
| Defender → Intune → CA | Зрелая интеграция: угроза → noncompliant → блокировка доступа → remediation → восстановление |
| CrowdStrike ZTA | Score 1-100, интеграции с AWS Verified Access, Zscaler, Tailscale |
| osquery | Open-source SQL-интерфейс к ОС, 270+ таблиц, контроль производительности через watchdog |
| Fleet | Центральное управление osquery, SQL-политики compliance, webhook → IdP, GitOps |
| Graceful degradation | Что делать, когда EDR-сигнал недоступен: снизить доступ, step-up MFA |
В следующей главе мы перейдём от endpoint к сети — Глава 10: Микросегментация.