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(日志与监控不足)类别,说明其定位正是补齐集群运行时的可观测性与威胁检测能力。
本场景完成后的学习目标是:
- 将 Falco 的 Helm Chart 部署到 Kubernetes 集群;
- 对 Falco 日志进行分析,观察 Kubernetes 集群中的安全事件检测过程;
- 使用 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)来保护并监控系统,工作流程分为三步:
- 在运行时解析内核发出的 Linux 系统调用(Parsing the Linux system calls from the kernel at runtime);
- 将该事件流断言到一个强大的规则引擎上(Asserting the stream against a powerful rules engine);
- 当规则被违反时发出告警(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 类二进制,如
sh、bash、csh、zsh等; - 执行 SSH 类二进制,如
ssh、scp、sftp等; - 篡改 Linux coreutils 可执行文件;
- 篡改登录(login)二进制;
- 篡改 shadowutils / passwd 类可执行文件,如
shadowconfig、pwck、chpasswd、getpasswd、change、useradd等。
可以推断,这套默认规则集恰好覆盖容器内最常见的后渗透动作(读影子文件、起 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 检测到了这次事件并发出通知"的结果。
从源码结构看,本场景的检测链路可以归纳为:
- 事件源:hacker-container 内
cat进程触发open/read等系统调用; - 采集层:Falco 在内核层捕获该 syscall 事件流;
- 规则匹配:默认规则集中"对知名目录(
/etc)敏感文件的读取"规则被违反; - 告警输出:事件经
kubectl logs可见的 Falco 日志输出,供安全人员分析。
由于整个流程无需额外配置规则文件,读者可以直接体验"开箱即用"的运行时检测能力;若要进一步定制规则(如按容器标签放行白名单),可参考原文档提示,查阅 Falco 官方文档进行深入学习。
小结
本场景完整走通了 Kubernetes 运行时安全监控的一条主线:
- 用Helm v3三条命令完成 Falco 的部署(
helm repo add→helm repo update→helm install falco falcosecurity/falco); - 用
kubectl get pods --selector app=falco与kubectl 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),仅供参考