Экспериментальная версия. Функциональность может сильно измениться. Совместимость с будущими версиями не гарантируется.

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

Поды 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