Что такое Falco?
Falco — это open-source инструмент для мониторинга безопасности во время выполнения (runtime security), разработанный для обнаружения аномального поведения в приложениях, контейнерах и Kubernetes кластерах. Falco использует eBPF и системные вызовы для мониторинга активности в реальном времени.
Основные возможности Falco
- Runtime мониторинг — обнаружение подозрительной активности в реальном времени
- Kubernetes интеграция — нативная поддержка контейнеров и pod'ов
- Настраиваемые правила — гибкая система правил безопасности
- eBPF поддержка — высокопроизводительный мониторинг ядра
- Множественные output — интеграция с SIEM, alerting системами
- Cloud-native — разработан для современных микросервисных архитектур
- Compliance — соответствие PCI DSS, NIST, SOC 2
Установка Falco
1# Установка через пакетный менеджер
2# Ubuntu/Debian
3curl -s https://falco.org/repo/falcosecurity-3672BA8F.asc | apt-key add -
4echo "deb https://download.falco.org/packages/deb stable main" | tee -a /etc/apt/sources.list.d/falcosecurity.list
5apt-get update -y
6apt-get install -y falco
7
8# CentOS/RHEL
9rpm --import https://falco.org/repo/falcosecurity-3672BA8F.asc
10curl -s -o /etc/yum.repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo
11yum -y install falco
12
13# Или через Helm в Kubernetes
14helm repo add falcosecurity https://falcosecurity.github.io/charts
15helm repo update
16helm install falco falcosecurity/falco
Запуск Falco
Конфигурация Falco
1# /etc/falco/falco.yaml
2rules_file:
3 - /etc/falco/falco_rules.yaml
4 - /etc/falco/falco_rules.local.yaml
5 - /etc/falco/k8s_audit_rules.yaml
6
7# Outputs
8stdout_output:
9 enabled: true
10
11syslog_output:
12 enabled: true
13
14file_output:
15 enabled: true
16 keep_alive: false
17 filename: /opt/falco/events.txt
18
19http_output:
20 enabled: true
21 url: "http://localhost:8080/falco-events"
22
23# gRPC API
24grpc:
25 enabled: true
26 bind_address: "0.0.0.0:5060"
27 threadiness: 8
28
29# Buffered outputs
30buffered_outputs: false
31
32# JSON output
33json_output: true
34json_include_output_property: true
Примеры правил безопасности
1# custom-rules.yaml
2- rule: Shell in Container
3 desc: Notice shell activity within a container
4 condition: >
5 spawned_process and container and
6 (proc.name in (shell_binaries) or
7 (proc.name in (shell_interpreters) and
8 not proc.args contains "-c"))
9 output: >
10 Shell spawned in container (user=%user.name container_id=%container.id
11 container_name=%container.name shell=%proc.name parent=%proc.pname
12 cmdline=%proc.cmdline)
13 priority: WARNING
14
15- rule: Suspicious Network Activity
16 desc: Detect suspicious network connections
17 condition: >
18 inbound_outbound and container and
19 (fd.sport in (suspicious_ports) or fd.dport in (suspicious_ports))
20 output: >
21 Suspicious network activity (user=%user.name container_id=%container.id
22 connection=%fd.name proto=%fd.l4proto)
23 priority: CRITICAL
24
25- rule: File Modified in /etc
26 desc: Detect modifications to /etc directory
27 condition: >
28 open_write and container and
29 fd.name startswith /etc and
30 not proc.name in (trusted_processes)
31 output: >
32 File in /etc modified (user=%user.name file=%fd.name
33 container_id=%container.id process=%proc.name)
34 priority: ERROR
Интеграция с Kubernetes
1# falco-daemonset.yaml
2apiVersion: apps/v1
3kind: DaemonSet
4metadata:
5 name: falco
6 namespace: falco-system
7spec:
8 selector:
9 matchLabels:
10 app: falco
11 template:
12 metadata:
13 labels:
14 app: falco
15 spec:
16 serviceAccount: falco
17 hostNetwork: true
18 hostPID: true
19 containers:
20 - name: falco
21 image: falcosecurity/falco:latest
22 securityContext:
23 privileged: true
24 volumeMounts:
25 - name: dev-fs
26 mountPath: /host/dev
27 - name: proc-fs
28 mountPath: /host/proc
29 - name: boot-fs
30 mountPath: /host/boot
31 - name: lib-modules
32 mountPath: /host/lib/modules
33 - name: usr-fs
34 mountPath: /host/usr
35 - name: etc-fs
36 mountPath: /host/etc
37 volumes:
38 - name: dev-fs
39 hostPath:
40 path: /dev
41 - name: proc-fs
42 hostPath:
43 path: /proc
44 - name: boot-fs
45 hostPath:
46 path: /boot
47 - name: lib-modules
48 hostPath:
49 path: /lib/modules
50 - name: usr-fs
51 hostPath:
52 path: /usr
53 - name: etc-fs
54 hostPath:
55 path: /etc
Интеграция с Prometheus
Отправка алертов в Slack
1# falco-slack-webhook.py
2import json
3import requests
4from flask import Flask, request
5
6app = Flask(__name__)
7SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"
8
9@app.route('/falco-events', methods=['POST'])
10def handle_falco_event():
11 event = request.get_json()
12
13 if event.get('priority') in ['CRITICAL', 'ERROR']:
14 slack_message = {
15 "text": f"🚨 Falco Security Alert",
16 "attachments": [
17 {
18 "color": "danger" if event.get('priority') == 'CRITICAL' else "warning",
19 "fields": [
20 {
21 "title": "Rule",
22 "value": event.get('rule', 'Unknown'),
23 "short": True
24 },
25 {
26 "title": "Priority",
27 "value": event.get('priority', 'Unknown'),
28 "short": True
29 },
30 {
31 "title": "Output",
32 "value": event.get('output', 'No details'),
33 "short": False
34 }
35 ]
36 }
37 ]
38 }
39
40 requests.post(SLACK_WEBHOOK_URL, json=slack_message)
41
42 return "OK", 200
43
44if __name__ == '__main__':
45 app.run(host='0.0.0.0', port=8080)
Интеграция с ELK Stack
1// Logstash конфигурация
2input {
3 http {
4 port => 8080
5 codec => json
6 }
7}
8
9filter {
10 if [rule] {
11 mutate {
12 add_field => { "event_type" => "falco_security" }
13 }
14
15 if [priority] == "CRITICAL" {
16 mutate {
17 add_tag => [ "security_critical" ]
18 }
19 }
20
21 date {
22 match => [ "time", "ISO8601" ]
23 }
24 }
25}
26
27output {
28 elasticsearch {
29 hosts => ["elasticsearch:9200"]
30 index => "falco-security-%{+YYYY.MM.dd}"
31 }
32}
Создание custom правил
1# custom-k8s-rules.yaml
2- macro: sensitive_mount
3 condition: >
4 (container.mount.dest[/proc*] != "N/A" or
5 container.mount.dest[/var/run/docker.sock] != "N/A" or
6 container.mount.dest[/] != "N/A" or
7 container.mount.dest[/etc] != "N/A")
8
9- rule: Privileged Container Started
10 desc: Detect privileged containers
11 condition: >
12 container_started and container and
13 (container.privileged=true or sensitive_mount)
14 output: >
15 Privileged container started (user=%user.name
16 container_id=%container.id container_name=%container.name
17 image=%container.image.repository)
18 priority: WARNING
19
20- rule: Cryptocurrency Mining Activity
21 desc: Detect potential cryptocurrency mining
22 condition: >
23 spawned_process and container and
24 (proc.name in (xmrig, cpuminer, cgminer, bfgminer) or
25 proc.cmdline contains "stratum+tcp" or
26 proc.cmdline contains "mining.pool")
27 output: >
28 Cryptocurrency mining detected (user=%user.name
29 container_id=%container.id process=%proc.name
30 cmdline=%proc.cmdline)
31 priority: CRITICAL
Мониторинг файловой системы
1# filesystem-rules.yaml
2- rule: Write to /tmp from Container
3 desc: Detect writes to /tmp directory
4 condition: >
5 open_write and container and
6 fd.name startswith /tmp and
7 not proc.name in (trusted_tmp_writers)
8 output: >
9 File write to /tmp (user=%user.name file=%fd.name
10 container_id=%container.id process=%proc.name)
11 priority: INFO
12
13- rule: Sensitive File Access
14 desc: Monitor access to sensitive files
15 condition: >
16 open and container and
17 (fd.name in (/etc/passwd, /etc/shadow, /etc/sudoers,
18 /root/.ssh/authorized_keys, /home/*/.ssh/id_rsa))
19 output: >
20 Sensitive file accessed (user=%user.name file=%fd.name
21 container_id=%container.id process=%proc.name)
22 priority: WARNING
Troubleshooting Falco
Когда использовать Falco
- Runtime security мониторинг в Kubernetes
- Compliance требования (PCI DSS, SOC 2)
- Обнаружение инцидентов безопасности
- Мониторинг контейнеризованных приложений
- Интеграция с SIEM системами
- DevSecOps практики
Преимущества Falco
- Real-time мониторинг — обнаружение угроз в реальном времени
- Cloud-native — разработан для контейнерных окружений
- Гибкость — настраиваемые правила и outputs
- Производительность — эффективное использование eBPF
- Интеграции — поддержка популярных инструментов
- CNCF проект — активное сообщество и развитие
Альтернативы Falco
- Sysdig Secure — коммерческая версия с дополнительными функциями
- Aqua Security — comprehensive container security платформа
- Twistlock (Prisma Cloud) — enterprise container security
- NeuVector — full lifecycle container security
- StackRox (Red Hat) — Kubernetes-native security
- Capsule8 — runtime security для Linux
FAQ
Влияет ли Falco на производительность?
Falco спроектирован для минимального влияния на производительность. Использование eBPF и оптимизированных системных вызовов обеспечивает низкий overhead (обычно менее 1-3% CPU).
Можно ли использовать Falco без Kubernetes?
Да, Falco может работать на любых Linux системах для мониторинга процессов, файловой системы и сетевой активности, не только в контейнерных окружениях.
Как настроить custom правила?
Создай файл с правилами в формате YAML, используй макросы для переиспользования условий и добавь путь к файлу в конфигурацию Falco.