Kubernetes Goat Scenario 18:在集群内部署 Falco 实现运行时安全监控与事件检测
2026/9/17 1:47:06 网站建设 项目流程

Kubernetes Goat Scenario 18:在集群内部署 Falco 实现运行时安全监控与事件检测

【免费下载链接】kubernetes-goatKubernetes Goat is a "Vulnerable by Design" cluster environment to learn and practice Kubernetes security using an interactive hands-on playground 🚀项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-goat

本篇基于 Kubernetes Goat 的 Scenario 18 实战文档,讲解如何在一个 Kubernetes 集群中通过 Helm 部署开源运行时安全引擎 Falco,利用其预定义规则集对容器与 Kubernetes 资源做近实时的安全监控,并通过模拟读取敏感文件/etc/shadow的攻击行为,完整体验从部署、日志观测到安全事件检测的全流程。读完本文,你将掌握 Falco 的部署方式、其基于系统调用的检测原理,以及如何在 Kubernetes Goat 环境中复现和验证一次真实的运行时告警。

场景背景:为什么需要运行时安全监控

Kubernetes Goat 是一个"Vulnerable by Design(设计上即脆弱)"的 Kubernetes 集群环境,供读者以动手实践的方式学习和练习 Kubernetes 安全。Scenario 18 对应其中的运行时安全主题,完整文档见 Scenario 18 文档。

容器及其基础设施是不可变的(immutable):应用打包为镜像后,传统的安全工具和技术在运行期间很难及时发现特定的攻击行为、漏洞利用与异常活动。这正是运行时安全监控的价值所在——不依赖静态分析,而是在系统调用层面持续观察行为流。本场景选择的工具是 Falco,一个流行的开源云原生运行时安全项目,用于在集群内完成"监控 + 规则检测 + 告警"的闭环。

从项目文档 K8s OWASP Top 10 映射表 可以看到,Kubernetes Goat 将本场景(连同 Scenario 21 的 Cilium Tetragon)归入K05: Inadequate Logging and Monitoring(日志与监控不足)类别,说明其定位正是补齐集群运行时的可观测性与威胁检测能力。

本场景完成后的学习目标是:

  1. 将 Falco 的 Helm Chart 部署到 Kubernetes 集群;
  2. 对 Falco 日志进行分析,观察 Kubernetes 集群中的安全事件检测过程;
  3. 使用 Falco 以近实时(near real-time)的方式发现并分析安全问题。

部署前置条件:Helm v3

:::note 提示

本场景的所有部署步骤依赖Helm v3,执行前请确认本机已安装 Helm 3 且kubectl可正常连接目标集群。

:::

Kubernetes Goat 环境本身通过仓库根目录的 setup-kubernetes-goat.sh 脚本一键部署各类脆弱场景(RBAC 配置、metadata-db 等 Helm Chart),而 Scenario 18 的 Falco 属于"防御方"组件,由读者在已建好的集群上手动安装,这也符合攻防演练中"先有攻击面、再上监控"的真实节奏。

使用 Helm 部署 Falco

按照 Scenario 18 文档 给出的官方 Chart 仓库方式,执行以下三条命令:

# 1. 添加 Falcosecurity 官方 Helm 仓库 helm repo add falcosecurity https://falcosecurity.github.io/charts
# 2. 更新本地仓库索引 helm repo update
# 3. 安装 Falco helm install falco falcosecurity/falco

部署成功后,Falco 会以 Pod 的形式运行在集群中。接下来分两步验证部署状态并进入日志观测。

查看 Falco 部署状态与日志

先用标签选择器确认 Falco Pod 已就绪:

kubectl get pods --selector app=falco

再手动抓取并跟随 Falco 的日志流,这是后续观察安全事件的核心入口:

kubectl logs -f -l app=falco

-f参数让终端持续输出新日志,因此这一步建议保持挂起状态,等攻击行为发生后回到该终端查看告警输出。

Falco 的工作原理:系统调用 → 规则引擎 → 告警

按原文档的说明,Falco 是一个云原生运行时安全项目,被广泛视为 Kubernetes 威胁检测的"事实标准"引擎。它由 Sysdig 于 2016 年创建,也是首个加入 CNCF 并达到孵化(incubation)级别的运行时安全项目。其核心定位是检测意外的应用行为,并在运行时对威胁发出告警

具体到实现机制,Falco 通过系统调用(system calls)来保护并监控系统,工作流程分为三步:

  1. 在运行时解析内核发出的 Linux 系统调用(Parsing the Linux system calls from the kernel at runtime);
  2. 将该事件流断言到一个强大的规则引擎上(Asserting the stream against a powerful rules engine);
  3. 当规则被违反时发出告警(Alerting when a rule is violated)。

这种"内核行为流 + 规则匹配"的架构意味着:即使攻击者未留下明显的文件痕迹或日志记录,只要其行为触发了内核中的敏感系统调用,就会被规则集捕获——这正弥补了上一节提到的"容器不可变导致传统工具失效"的问题。

Falco 默认规则集的检测范围

Falco 自带一套默认规则,用于检查内核层面是否出现异常行为。根据 Scenario 18 文档 的枚举,默认规则覆盖的场景包括:

  • 使用特权容器进行权限提升(Privilege escalation using privileged containers);
  • 使用setns等工具进行命名空间变更(Namespace changes using tools likesetns);
  • 对知名目录的读/写操作,如/etc/usr/bin/usr/sbin等;
  • 创建符号链接(Creating symlinks);
  • 文件属主(Ownership)与权限模式(Mode)的变更
  • 意外的网络连接或 socket 变更(Unexpected network connections or socket mutations);
  • 通过execve派生的进程(Spawned processes using execve);
  • 执行 shell 类二进制,如shbashcshzsh等;
  • 执行 SSH 类二进制,如sshscpsftp等;
  • 篡改 Linux coreutils 可执行文件
  • 篡改登录(login)二进制
  • 篡改 shadowutils / passwd 类可执行文件,如shadowconfigpwckchpasswdgetpasswdchangeuseradd等。

可以推断,这套默认规则集恰好覆盖容器内最常见的后渗透动作(读影子文件、起 shell、建外连、改系统工具),这也是后文实验中"读/etc/shadow"能够被命中的原因。

实验:启动 hacker-container 模拟攻击行为

Kubernetes Goat 提供了统一的攻击载体madhuakula/hacker-container(一个基于 Alpine、内置常见安全评估工具的容器,详见 Scenario 14 文档)。在本场景中,先启动一个临时的 hacker 容器:

kubectl run --rm --restart=Never -it --image=madhuakula/hacker-container -- bash

参数说明:

  • --rm:Pod 结束(退出)后自动清理资源;
  • --restart=Never:容器退出后不重启,保持一次性实验 Pod 的语义;
  • -it:分配 TTY 并保持 stdin 打开,进入交互式 shell;
  • 末尾的bash是容器启动命令,直接进入 bash。

进入容器后,执行本场景的"攻击触发点"——读取密码影子文件:

cat /etc/shadow

/etc/shadow存放系统用户密码哈希,属于典型的高敏感文件。在正常业务负载下,容器进程几乎不会去读它;因此"某个容器执行了对/etc/shadow的读取"这一行为本身就是一次值得告警的异常事件。

验证结果:Falco 的实时告警

执行cat /etc/shadow后,回到此前挂着kubectl logs -f -l app=falco的终端,可以看到 Falco 已经在近实时时间内捕获到该行为并输出了检测告警——即原文档中"Hooray,Falco 检测到了这次事件并发出通知"的结果。

从源码结构看,本场景的检测链路可以归纳为:

  1. 事件源:hacker-container 内cat进程触发open/read等系统调用;
  2. 采集层:Falco 在内核层捕获该 syscall 事件流;
  3. 规则匹配:默认规则集中"对知名目录(/etc)敏感文件的读取"规则被违反;
  4. 告警输出:事件经kubectl logs可见的 Falco 日志输出,供安全人员分析。

由于整个流程无需额外配置规则文件,读者可以直接体验"开箱即用"的运行时检测能力;若要进一步定制规则(如按容器标签放行白名单),可参考原文档提示,查阅 Falco 官方文档进行深入学习。

小结

本场景完整走通了 Kubernetes 运行时安全监控的一条主线:

  • Helm v3三条命令完成 Falco 的部署(helm repo addhelm repo updatehelm install falco falcosecurity/falco);
  • kubectl get pods --selector app=falcokubectl logs -f -l app=falco完成部署验证与日志跟随;
  • 理解了 Falco "内核系统调用 → 规则引擎断言 → 违反即告警" 的三段式检测原理,及其默认规则集对特权容器、命名空间变更、敏感目录读写、shell/SSH 执行、系统工具篡改等行为的覆盖范围;
  • 通过madhuakula/hacker-container容器执行cat /etc/shadow,成功触发并观察到了 Falco 的近实时告警。

作为 Kubernetes Goat 攻防演练体系中的一环,Scenario 18 回答的问题是:当集群里已经存在各种脆弱配置和攻击面时,如何在运行时看见它们。结合项目内 K8s OWASP Top 10 映射,该场景补齐了 K05(日志与监控不足)这一环节,读者可在此基础上继续探索自定义规则与告警集成,把"能看见"进一步升级为"能响应"。

【免费下载链接】kubernetes-goatKubernetes Goat is a "Vulnerable by Design" cluster environment to learn and practice Kubernetes security using an interactive hands-on playground 🚀项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-goat

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询