Falco 与 Tetragon 最小化 POC 验证指南

Falco 与 Tetragon 最小化 POC 验证指南

本文档旨在提供一份手把手的操作指南,帮助你在本地环境快速构建一个包含 Falco 和 Tetragon 的 Kubernetes 集群,并验证它们的核心功能。

1. 环境准备

在开始之前,请确保你的本地环境(MacOS/Linux)已经安装了以下工具:

  • Docker Desktop (或 OrbStack/Podman): 容器运行时。
  • Kind: 用于在 Docker 中运行 Kubernetes 集群。
  • Kubectl: Kubernetes 命令行工具。
  • Helm: Kubernetes 包管理器。

1.1 检查版本

执行以下命令确认工具已就绪:

1
2
3
4
docker version
kind version
kubectl version --client
helm version

2. 创建集群

为了支持 eBPF,我们需要使用较新版本的 Kubernetes 节点镜像,并确保节点配置正确。

2.1 编写 Kind 配置文件

创建文件 security-poc/kind-config.yaml

1
2
3
4
5
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  image: kindest/node:v1.27.3 # 推荐使用 v1.27+ 以获得更好的 eBPF 支持

2.2 启动集群

1
kind create cluster --config security-poc/kind-config.yaml --name security-poc

等待集群启动完毕(约 1-2 分钟)。

3. 部署 Falco (威胁检测)

Falco 是云原生运行时安全的事实标准,我们将使用 Helm 进行安装。

3.1 安装脚本

创建并执行 security-poc/install-falco.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash
set -e

echo "=== Installing Falco ==="
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update falcosecurity
helm upgrade --install falco falcosecurity/falco \
  --namespace falco \
  --create-namespace \
  --set driver.kind=modern_ebpf \
  --set tty=true \
  --wait

echo "=== Falco Installed ==="

执行安装:

1
2
chmod +x security-poc/install-falco.sh
./security-poc/install-falco.sh

3.2 验证 Falco 状态

1
kubectl get pods -n falco

确保 Pod 状态为 Running

4. 部署 Tetragon (内核观测与阻断)

Tetragon 是 Cilium 推出的基于 eBPF 的安全观测与执行平台。

4.1 安装脚本

创建并执行 security-poc/install-tetragon.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash
set -e

echo "=== Installing Tetragon ==="
helm repo add cilium https://helm.cilium.io/
helm repo update cilium
helm upgrade --install tetragon cilium/tetragon \
  --namespace tetragon \
  --create-namespace \
  --wait

echo "=== Tetragon Installed ==="

执行安装:

1
2
chmod +x security-poc/install-tetragon.sh
./security-poc/install-tetragon.sh

4.2 验证 Tetragon 状态

1
kubectl get pods -n tetragon

确保 Agent Pods 状态为 Running

5. POC 验证场景

我们将通过模拟恶意行为来触发这两个工具的反应。

5.1 场景一:触发 Falco 告警 (文件完整性监控)

目标: 模拟攻击者修改 /etc 目录下的文件。

  1. 准备测试脚本 security-poc/demo-falco.sh:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    #!/bin/bash
    # 启动一个 Alpine 容器
    kubectl run alpine-test --image=alpine --restart=Never -- sh -c "sleep 3600" || true
    kubectl wait --for=condition=Ready pod/alpine-test --timeout=60s
    
    # 触发违规操作:在 /etc 下创建文件
    kubectl exec alpine-test -- touch /etc/falco-test
    
    # 查看 Falco 日志
    kubectl logs -n falco -l app.kubernetes.io/name=falco --tail=100 | grep "File below /etc opened for writing"
  2. 执行验证:

    1
    2
    
    chmod +x security-poc/demo-falco.sh
    ./security-poc/demo-falco.sh
  3. 预期结果: 你将在控制台看到类似如下的 Falco JSON 日志,表明它检测到了对 /etc 的写入尝试:

5.2 场景二:触发 Tetragon 观测 (敏感文件读取)

目标: 监控所有对 /etc/passwd 的读取行为。

  1. 定义策略 security-poc/tetragon-policy.yaml:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    apiVersion: cilium.io/v1alpha1
    kind: TracingPolicy
    metadata:
      name: log-etc-access
    spec:
      kprobes:
      - call: "sys_openat"
        syscall: true
        args:
        - index: 1
          type: "string"
        selectors:
        - matchArgs:
          - index: 1
            operator: "Prefix"
            values:
            - "/etc/passwd"
          matchActions:
          - action: Post
  2. 准备测试脚本 security-poc/demo-tetragon.sh:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    #!/bin/bash
    # 应用策略
    kubectl apply -f security-poc/tetragon-policy.yaml
    sleep 5 # 等待策略生效
    
    # 触发操作:读取 /etc/passwd
    kubectl exec alpine-test -- cat /etc/passwd > /dev/null
    
    # 查看 Tetragon 日志
    kubectl logs -n tetragon -l app.kubernetes.io/name=tetragon -c export-stdout --tail=100 | grep "/etc/passwd"
  3. 执行验证:

    1
    2
    
    chmod +x security-poc/demo-tetragon.sh
    ./security-poc/demo-tetragon.sh
  4. 预期结果: 你将看到 Tetragon 捕获的 process_execsys_openat 事件,详细记录了是哪个 Pod、哪个进程执行了该操作。

6. 清理环境

测试完成后,清理所有资源:

1
2
kind delete cluster --name security-poc
rm -rf security-poc/

7. 常见问题排查

  • Falco Pod 启动失败: 检查节点内核版本是否支持 eBPF。
  • Tetragon 没有日志: 确认 TracingPolicy 是否正确应用,以及 Pod 所在的节点是否运行了 Tetragon Agent。
0%