Deckhouse Virtualization Platform (DVP) предоставляет встроенные средства поиска угроз безопасности за счёт анализа событий ядра Linux и аудита событий Kubernetes API. DVP позволяет:
- находить угрозы в окружениях, анализируя приложения и контейнеры;
- обнаруживать попытки применения уязвимостей из базы CVE и признаки запуска криптовалютных майнеров;
- выявлять угрозы Kubernetes, включая:
- оболочки командной строки, запущенные в контейнерах или подах;
- контейнеры, работающие в привилегированном режиме;
- монтирование небезопасных путей в контейнеры (например,
/proc
); - попытки чтения секретных данных (например, из
/etc/shadow
).
Источники данных для аудита безопасности
DVP использует два основных источника событий:
- события ядра Linux — с помощью eBPF-драйвера для системы обнаружения угроз Falco;
- события аудита API Kubernetes — через интеграцию с механизмом Kubernetes auditing и вебхук-интерфейс.
Подробности об архитектуре реализации аудита можно найти в разделе Архитектура.
Минимальные требования
Для получения событий ядра требуется:
- ядро Linux версии 5.8 или выше;
- поддержка eBPF.
Проверить наличие поддержки можно одним из следующих способов:
-
убедитесь в наличии файла
/sys/kernel/btf/vmlinux
:ls -lah /sys/kernel/btf/vmlinux
-
убедитесь, что включён параметр
CONFIG_DEBUG_INFO_BTF
:grep -E "CONFIG_DEBUG_INFO_BTF=(y|m)" /boot/config-*
-
На каждом узле кластера запускаются агенты Falco, которые потребляют ресурсы в зависимости от количества применяемых правил или собираемых событий.
На некоторых системах могут не работать пробы eBPF.
Как включить аудит событий безопасности
- Убедитесь, что узлы соответствуют минимальным требованиям.
-
Включите аудит в Deckhouse, используя следующую конфигурацию:
apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: runtime-audit-engine spec: enabled: true
- (Опционально) Если control plane в кластере не управляется DVP при помощи
control-plane-manager
, настройте вебхук аудита API Kubernetes вручную.
Все доступные параметры аудита безопасности доступны в разделе документации модуля runtime-audit-engine
.
Настройка вебхука API Kubernetes вручную
Настройка вебхука не требуется, если включён модуль control-plane-manager
.
В этом случае при включении модуля runtime-audit-engine
настройки сбора событий аудита API Kubernetes применятся автоматически.
Чтобы настроить вебхук на получение событий аудита от kube-apiserver
, выполните следующие шаги:
-
Создайте файл
kubeconfig
для вебхука с адресомhttps://127.0.0.1:9765/k8s-audit
и данными сертификата (ca.crt
) из Secretd8-runtime-audit-engine/runtime-audit-engine-webhook-tls
.Пример:
apiVersion: v1 kind: Config clusters: - name: webhook cluster: certificate-authority-data: BASE64_CA server: "https://127.0.0.1:9765/k8s-audit" users: - name: webhook contexts: - context: cluster: webhook user: webhook name: webhook current-context: webhook
- Укажите путь к созданному файлу конфигурации с помощью флага
--audit-webhook-config-file
в манифестеkube-apiserver
. - (Опционально) Чтобы собирать события аудита API Kubernetes не только из системных, но и пользовательских пространств имён, настройте политики аудита.
Работа с правилами аудита
Для анализа событий безопасности используются правила, определяющие критерии подозрительного поведения. В DVP предусмотрены:
- встроенные правила, включая:
- правила для аудита Kubernetes (располагаются в контейнере
falco
по пути/etc/falco/k8s_audit_rules.yaml
); - правила, удовлетворяющие требованиям приказа ФСТЭК России №118 от 4 июля 2022 г.
«Требования по безопасности информации к средствам контейнеризации»
(
fstec
, в формате кастомного ресурса FalcoAuditRules);
Чтобы настроить список встроенных правил, используйте параметр
settings.builtInRulesList
модуляruntime-audit-engine
. - правила для аудита Kubernetes (располагаются в контейнере
- пользовательские правила, которые задаются через кастомный ресурс FalcoAuditRules.
Подробности о работе правил аудита безопасности можно найти в разделе Архитектура.
Добавление пользовательского правила
Чтобы добавить правило, создайте ресурс FalcoAuditRules с необходимыми условиями. Используйте синтаксис условий Falco. Агенты Falco автоматически применят созданное правило.
Пример:
apiVersion: deckhouse.io/v1alpha1
kind: FalcoAuditRules
metadata:
name: ownership-permissions
spec:
rules:
- macro:
name: spawned_process
condition: (evt.type in (execve, execveat) and evt.dir=<)
- rule:
name: Detect Ownership Change
desc: detect file permission/ownership change
condition: >
spawned_process and proc.name in (chmod, chown) and proc.args contains "/tmp/"
output: >
The file or directory below has had its permissions or ownership changed (user=%user.name
command=%proc.cmdline file=%fd.name parent=%proc.pname pcmdline=%proc.pcmdline gparent=%proc.aname[2])
priority: Warning
tags: [filesystem]
Дополнительные примеры правил можно найти на следующих ресурсах:
Применение стороннего правила
Поскольку структура правил Falco отличается от схемы кастомных ресурсов DVP, сторонние правила из интернета необходимо сконвертировать в ресурс FalcoAuditRules перед применением.
Используйте следующий скрипт для конвертации:
git clone github.com/deckhouse/deckhouse
cd deckhouse/ee/modules/runtime-audit-engine/hack/far-converter
go run main.go -input /path/to/falco/rule_example.yaml > ./my-rules-cr.yaml
Пример результата работы скрипта:
-
Изначальное правило:
# /path/to/falco/rule_example.yaml - macro: spawned_process condition: (evt.type in (execve, execveat) and evt.dir=<) - rule: Linux Cgroup Container Escape Vulnerability (CVE-2022-0492) desc: "This rule detects an attempt to exploit a container escape vulnerability in the Linux Kernel." condition: container.id != "" and proc.name = "unshare" and spawned_process and evt.args contains "mount" and evt.args contains "-o rdma" and evt.args contains "/release_agent" output: "Detect Linux Cgroup Container Escape Vulnerability (CVE-2022-0492) (user=%user.loginname uid=%user.loginuid command=%proc.cmdline args=%proc.args)" priority: CRITICAL tags: [process, mitre_privilege_escalation]
-
Ресурс с правилом после конвертации:
# ./my-rules-cr.yaml apiVersion: deckhouse.io/v1alpha1 kind: FalcoAuditRules metadata: name: rule-example spec: rules: - macro: name: spawned_process condition: (evt.type in (execve, execveat) and evt.dir=<) - rule: name: Linux Cgroup Container Escape Vulnerability (CVE-2022-0492) condition: container.id != "" and proc.name = "unshare" and spawned_process and evt.args contains "mount" and evt.args contains "-o rdma" and evt.args contains "/release_agent" desc: This rule detects an attempt to exploit a container escape vulnerability in the Linux Kernel. output: Detect Linux Cgroup Container Escape Vulnerability (CVE-2022-0492) (user=%user.loginname uid=%user.loginuid command=%proc.cmdline args=%proc.args) priority: Critical tags: - process - mitre_privilege_escalation
Сбор логов и оповещения
DVP экспортирует события аудита безопасности в формате метрик Prometheus, по которым можно настроить оповещения через ресурс CustomPrometheusRules. Это позволяет:
- подключить внешнее хранилище для сбора логов (например, Loki или Elasticsearch);
- настроить оповещения о критических событиях.
Настройка сбора логов и событий
Все события аудита безопасности выводятся в stdout. Для сбора и отправки событий в хранилище логов создайте ресурс ClusterLoggingConfig, следуя примеру:
apiVersion: deckhouse.io/v1alpha1
kind: ClusterLoggingConfig
metadata:
name: falco-events
spec:
destinationRefs:
- xxxx
kubernetesPods:
namespaceSelector:
labelSelector:
matchExpressions:
- key: "kubernetes.io/metadata.name"
operator: In
values: [d8-runtime-audit-engine]
labelFilter:
- operator: Regex
values: ["\\{.*"] # Для сбора логов только в формате JSON.
field: "message"
type: KubernetesPods
Настройка оповещений о критических событиях
Для создания оповещений о критических событиях создайте объект CustomPrometheusRules, следуя примеру:
apiVersion: deckhouse.io/v1
kind: CustomPrometheusRules
metadata:
name: falco-critical-alerts
spec:
groups:
- name: falco-critical-alerts
rules:
- alert: FalcoCriticalAlertsAreFiring
for: 1m
annotations:
description: |
There is a suspicious activity on a node {{ $labels.node }}.
Check you events journal for more details.
summary: Falco detects a critical security incident
expr: |
sum by (node) (rate(falco_events{priority="Critical"}[5m]) > 0)
Просмотр метрик
Для получения Prometheus-метрик используйте PromQL-запрос falcosecurity_falcosidekick_falco_events_total{}
:
d8 k -n d8-monitoring exec -it prometheus-main-0 prometheus -- \
curl -s "http://127.0.0.1:9090/api/v1/query?query=falcosecurity_falcosidekick_falco_events_total" | jq
Отладка и эмуляция событий
Для отладки и эмуляции событий безопасности в DVP можно использовать:
- утилиту
event-generator
; - HTTP-эндпоинт
/test
сервисаfalcosidekick
.
Включение логов для отладки
В Falco по умолчанию используется отладочный уровень логирования debug
.
В Falcosidekick по умолчанию отладочное логирование отключено.
Для включения установите параметр spec.settings.debugLogging
в true
, следуя примеру
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: runtime-audit-engine
spec:
enabled: true
settings:
debugLogging: true
Настройка эмуляции событий
Falco
Утилита event-generator
позволяет генерировать
различные подозрительные действия (например, системные вызовы или события аудита API Kubernetes).
Используйте следующую команду для запуска тестового набора событий в кластере Kubernetes:
d8 k run falco-event-generator --image=falcosecurity/event-generator run
Если вам нужно сымитировать определённое действие, обратитесь к руководству утилиты.
Falcosidekick
Чтобы имитировать отправку тестовых событий для сервиса falcosidekick
,
используйте HTTP-эндпоинт /test
:
-
Создайте тестовое событие, выполнив следующую команду:
nsenter -t $(pidof falcosidekick) curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" http://localhost:2801/test
-
Проверьте метрику события:
d8 k -n d8-monitoring exec -it prometheus-main-0 prometheus -- \ curl -s "http://127.0.0.1:9090/api/v1/query?query=falcosecurity_falcosidekick_falco_events_total" \ | jq '.data.result.[] | select (.metric.priority_raw == "debug")'
Пример вывода:
{ "metric": { "__name__": "falcosecurity_falcosidekick_falco_events_total", "container": "kube-rbac-proxy", "hostname": "falcosidekick", "instance": "192.168.208.7:4212", "job": "runtime-audit-engine", "node": "dev-master-0", "priority": "1", "priority_raw": "debug", "rule": "Test rule", "source": "internal", "tier": "cluster" }, "value": [ 1744234729.799, "1" ] }