通过Falco检测K8S容器逃逸行为
2023-10-29
| 2024-2-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

1. 简介

Falco (CNCF孵化项目) 是一款适用于 Linux 操作系统的云原生运行时安全工具,旨在实时检测异常行为和潜在安全威胁并发出警报。该工具无需在容器内安装agent,而是通过 eBPF 探针有收集容器行为。
 
下面以攻击者发现一个K8S环境内具有 CAP_SYS_ADMIN 权限的容器RCE漏洞为例,介绍 Falco 容器逃逸行为检测

2. Falco 默认检测行为

攻击者通过 cat /proc/1/cgroup 发现是容器环境,通过 cdk 收集容器信息
notion image
运行 cdk 后,由于 cdk 不属于镜像原有的二进制文件,便触发 Drop and execute new binary in container 规则告警
再者,攻击者通过 ncpython 等工具进行反弹 shell 时,会触发规则 Netcat Remote Code Execution in Container
notion image
攻击者获取到容器权限后进行后渗透时就能及时发现
 
回到 CAP_SYS_ADMIN 权限场景,攻击者可以选择利用镜像内置命令进行容器逃逸,当然 Falco 内置了我们常用的挂载cgroups子系统逃逸检测 Detect release_agent File Container Escapes,但 mount 宿主机磁盘逃逸并没有内置,我们自定义规则检测即可

3. 自定义 Falco rules

根据根据官方文档编写需要的规则, -rule 规则部分可以用官方提供的 playground 验证语法
 
因我是通过 helm 安装的,下一份 charts/falco/values.yaml 到本地,修改 customRules: 部分为
然后应用即可,注意修改 user:changeme 为你自己的名字
所写的 Falco 是劫持系统调用参数,尽管 shell 执行命令存在混淆,也一样可以识别到
notion image

4. K8S 安装 Falco 和排障

K8S版本:v1.27.3
Linux内核版本:Linux kmaster1 5.15.0-84-generic #93-Ubuntu SMP Tue Sep 5 17:16:10 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
添加 Falco Helm 仓库 和 创建 Falco 服务命名空间
安装 Falco 和 Falcosidekick,注意修改 user:changeme 为你自己的名字
执行,查看安装进展,发现有个 pod 起不来
排障
发现为内核配置问题,各个 K8S 节点执行
过会就OK了

总结

Falco 提供的容器运行时安全检测功能是十分强大的,除了直接的屏幕输出,还支持 HTTP/gRPC 推送,为基于 Falco 开发容器安全平台提高了很强的可拓展性

参考

  • 云安全
  • Kubernetes
  • WIZ Big IAM Challenge WriteUpK8S 网络之 Cilium 源码分析
    • GitTalk
    目录