Экспериментальная версия. Функциональность может сильно измениться. Совместимость с будущими версиями не гарантируется.
Как собирать события?
Поды runtime-audit-engine
выводят все события в стандартный вывод.
Далее агенты log-shipper могут собирать их и отправлять в хранилище логов.
Пример конфигурации ClusterLoggingConfig для модуля log-shipper
:
1apiVersion: deckhouse.io/v1alpha2
2kind: ClusterLoggingConfig
3metadata:
4 name: falco-events
5spec:
6 destinationRefs:
7 - xxxx
8 kubernetesPods:
9 namespaceSelector:
10 labelSelector:
11 matchExpressions:
12 - key: "kubernetes.io/metadata.name"
13 operator: In
14 values: [d8-runtime-audit-engine]
15 labelFilter:
16 - operator: Regex
17 values: ["\\{.*"] # to collect only JSON logs
18 field: "message"
19 type: KubernetesPods
Как оповещать о критических событиях?
Prometheus автоматически собирает метрики о событиях. Чтобы включить оповещения, добавьте в кластер правило CustomPrometheusRule.
Пример настройки такого правила:
1apiVersion: deckhouse.io/v1
2kind: CustomPrometheusRules
3metadata:
4 name: falco-critical-alerts
5spec:
6 groups:
7 - name: falco-critical-alerts
8 rules:
9 - alert: FalcoCriticalAlertsAreFiring
10 for: 1m
11 annotations:
12 description: |
13 There is a suspicious activity on a node {{ $labels.node }}.
14 Check you events journal for more details.
15 summary: Falco detects a critical security incident
16 expr: |
17 sum by (node) (rate(falcosecurity_falcosidekick_falco_events_total{priority="Critical"}[5m]) > 0)
Алерты лучше всего работают в комбинации с хранилищами событий, такими как Elasticsearch или Loki. Их задача — оповестить пользователя о подозрительном поведении на узле. После получения алерта рекомендуется «пойти» в хранилище и посмотреть на события, которые его вызвали.
Как применить правила для Falco, найденные в интернете?
Структура правил Falco отличается от схемы CRD. Это связано со сложностями при проверке правильности ресурсов в Kubernetes.
Скрипт для конвертации правил Falco в ресурсы FalcoAuditRules упрощает процесс миграции и позволять применять правила Falco в Deckhouse:
1git clone github.com/deckhouse/deckhouse
2cd deckhouse/ee/modules/runtime-audit-engine/hack/far-converter
3go run main.go -input /path/to/falco/rule_example.yaml > ./my-rules-cr.yaml
Пример результата работы скрипта:
1# /path/to/falco/rule_example.yaml
2- macro: spawned_process
3 condition: (evt.type in (execve, execveat) and evt.dir=<)
4- rule: Linux Cgroup Container Escape Vulnerability (CVE-2022-0492)
5 desc: "This rule detects an attempt to exploit a container escape vulnerability in the Linux Kernel."
6 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"
7 output: "Detect Linux Cgroup Container Escape Vulnerability (CVE-2022-0492) (user=%user.loginname uid=%user.loginuid command=%proc.cmdline args=%proc.args)"
8 priority: CRITICAL
9 tags: [process, mitre_privilege_escalation]
1# ./my-rules-cr.yaml
2apiVersion: deckhouse.io/v1alpha1
3kind: FalcoAuditRules
4metadata:
5 name: rule-example
6spec:
7 rules:
8 - macro:
9 name: spawned_process
10 condition: (evt.type in (execve, execveat) and evt.dir=<)
11 - rule:
12 name: Linux Cgroup Container Escape Vulnerability (CVE-2022-0492)
13 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"
14 desc: This rule detects an attempt to exploit a container escape vulnerability in the Linux Kernel.
15 output: Detect Linux Cgroup Container Escape Vulnerability (CVE-2022-0492) (user=%user.loginname uid=%user.loginuid command=%proc.cmdline args=%proc.args)
16 priority: Critical
17 tags:
18 - process
19 - mitre_privilege_escalation