Доступно только в Enterprise Edition.
Находится в процессе активного развития. Функциональность может существенно измениться.

Как собирать события?

Поды runtime-audit-engine выводят все события в стандартный вывод. Далее агенты log-shipper могут собирать их и отправлять в хранилище логов.

Пример конфигурации ClusterLoggingConfig для модуля log-shipper:

1apiVersion: deckhouse.io/v1alpha1
2kind: ClusterLoggingConfig
3metadata:
4  name: falco-events
5spec:
6  destinationRefs:
7  - xxxx
8  kubernetesPods:
9    namespaceSelector:
10      matchNames:
11      - d8-runtime-audit-engine
12  labelFilter:
13  - operator: Regex
14    values: ["\\{.*"] # to collect only JSON logs
15    field: "message"
16  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(falco_events{priority="Critical"}[5m]) > 0)

Алерты лучше всего работают в комбинации с хранилищами событий, такими как Elasticsearch или Loki. Их задача — оповестить пользователя о подозрительном поведении на узле. После получения алерта рекомендуется «пойти» в хранилище и посмотреть на события, которые его вызвали.

Как применить правила для Falco, найденные в интернете?

Структура правил Falco отличается от схемы CRD. Это связано со сложностями при проверке правильности ресурсов в Kubernetes.

Скрипт для конвертации правил Falco в ресурсы FalcoAuditRules упрощает процесс миграции и позволять применять правила Falco в Deckhouse:

1git clone github.com/deckhouse/deckhouse
2cd deckhouse/ee/modules/650-runtime-audit-engine/hack/fav-converter
3go run main.go -input /path/to/falco/rule_example.yaml > ./my-rules-cr.yaml

Пример результата работы скрипта:

1# /path/to/falco/rule_example.yaml
2- rule: Linux Cgroup Container Escape Vulnerability (CVE-2022-0492)
3  desc: "This rule detects an attempt to exploit a container escape vulnerability in the Linux Kernel."
4  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"
5  output: "Detect Linux Cgroup Container Escape Vulnerability (CVE-2022-0492) (user=%user.loginname uid=%user.loginuid command=%proc.cmdline args=%proc.args)"
6  priority: CRITICAL
7  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