基于 Falco 规则检测容器逃逸:API 参考与实战手册(Anthropic Cybersecurity Skills 实践指南)
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
本文是围绕 detecting-container-escape-with-falco-rules 技能(skill)中的 API Reference 展开的完整技术指南。它以 Falco 官方 CLI、规则语法、过滤字段、JSON 输出与 Falcosidekick 告警链路为主线,完整覆盖从 Falco 部署、自定义逃逸检测规则编写、规则验证到告警集成与结果解析的端到端流程。读完本文,你将能够:使用 Falco CLI 完成版本检查、规则语法校验与字段列举;独立编写针对nsenter、mount、cgroup release_agent、Docker Socket、内核模块加载等逃逸向量的 Falco 规则;通过 JSON 输出与 Falcosidekick 将告警路由到 Slack/Elasticsearch;并使用仓库提供的agent.py/process.py脚本自动生成规则、校验规则并解析告警日志,建立可落地的容器运行时逃逸检测体系。
技能背景:Syscall 级运行时安全监控
Falco 是 CNCF 孵化的运行时安全工具,通过监控 Linux 系统调用(syscall)实时检测容器的异常行为。在容器逃逸(Container Escape)检测场景中,攻击者往往需要借助setns、unshare、mount、pivot_root等系统调用或nsenter、modprobe等工具突破容器边界,这些行为都会在 syscall 层留下痕迹。Falco 的规则引擎正是针对这些痕迹进行匹配与告警。
在 Anthropic Cybersecurity Skills 仓库中,该技能被归类于container-security子域,并映射了 MITRE ATT&CK 的 T1610(Deploy Container)、T1611(Escape to Host)、T1609(Container Administration Command)、T1525(Implant Container Image)、T1068(Exploitation for Privilege Escalation)等技术,以及 NIST CSF 的 PR.PS-01、PR.IR-01、ID.AM-08、DE.CM-01 控制项(见 SKILL.md)。这意味着本技能不仅给出检测规则,还承担着将运行时告警映射到合规框架与威胁模型的任务。
Falco CLI:运行时管理的四个核心命令
API Reference 给出了四个最常用的 CLI 命令,它们是日常操作 Falco 的入口:
falco --version # 检查版本 falco --validate /path/to/rules.yaml # 校验规则语法 falco -r /etc/falco/rules.d/escape.yaml # 加载指定规则文件 falco --list # 列出所有可用字段 falco --list-events # 列出支持的 syscall其中:
falco --validate是上线规则前的强制门禁,仓库脚本 agent.py 将其封装为validate_rules_file():以falco --validate <rules_path>子进程方式执行,返回码为 0 判定语法有效,否则输出 stderr 中的错误信息。任何自定义规则文件都应先通过该校验再进入 DaemonSet 热加载。falco --list输出的字段列表是编写条件表达式(condition)的基础,下文「关键过滤字段」一节中的字段均可在该命令输出中检索确认。falco -r用于在调试阶段只加载目标规则文件,避免全量规则库的干扰,与 falco.yaml 配置 中的rules_files列表相互补充。
Falco 规则语法:一个规则对象的完整字段
规则的 YAML 骨架在 API Reference 中给出:
- rule: <name> desc: <description> condition: <filter expression> output: <alert message with fields> priority: <Emergency|Alert|Critical|Error|Warning|Notice|Informational|Debug> tags: [tag1, tag2] enabled: true各字段的实战要点:
rule:规则名,会出现在告警的rule字段中,命名应能直接反映攻击行为。condition:Falco 过滤器表达式,是规则的核心判定逻辑,支持and、or、not、in、contains、startswith、endswith等运算符。output:告警输出模板,以%字段名形式嵌入运行时字段,例如user=%user.name、container_name=%container.name。字段在输出时会被自动求值填充。priority:八级严重度,从Emergency(最高)到Debug(最低)。agent.py 中的SEVERITY_MAP定义了与数值的对应关系:Emergency:0、Alert:1、Critical:2、Error:3、Warning:4、Notice:5、Informational:6、Debug:7,数值越小越紧急,告警过滤时以"小于等于阈值"为命中条件。tags:标签数组,既用于归类,也用于与 MITRE ATT&CK 技术 ID 关联。仓库脚本以container、escape、T1611、T1610、namespace、docker_socket、cgroup、kernel_module、privileged作为逃逸告警的识别标签(见 agent.py)。enabled:布尔值,控制规则是否默认启用,便于在灰度阶段关闭高误报规则。
除rule基本结构外,Falco 还支持list(命名列表)与macro(可复用宏),仓库的完整规则文件(SKILL.md)展示了它们的组合用法:先定义escape_binaries列表,再用macro: container_escape_attempt封装"容器内执行逃逸二进制"的通用条件,最后多条rule直接引用该宏。
关键 Falco 过滤字段:编写条件的原子能力
API Reference 汇总了逃逸检测最常用的过滤字段:
| 字段 | 含义 |
|---|---|
container | 事件是否来自容器 |
spawned_process | 是否新产生了进程 |
proc.name | 进程名 |
proc.cmdline | 完整命令行 |
proc.pname | 父进程名 |
fd.name | 文件描述符对应的路径 |
container.name | 容器名 |
container.image.repository | 镜像仓库名 |
container.privileged | 容器是否为特权模式 |
proc.is_exe_upper_layer | 二进制是否不在原始镜像层中(写入的可疑可执行文件) |
evt.type | 系统调用类型(如 setns、unshare、mount) |
条件表达式组合示例:检测挂载宿主文件系统时,用spawned_process and container and proc.name = mount and (proc.args contains "/host" or proc.args contains "nsenter");检测 cgroup 逃逸向量时,用open_write and container and fd.name endswith release_agent(对应 CVE-2022-0492)。evt.type字段则适合做细粒度 syscall 级匹配,例如仅当evt.type = setns或evt.type = unshare时触发告警。这些字段与 SKILL.md 中 8 条逃逸检测规则一一对应。
逃逸检测规则库:8 条核心规则与完整规则文件
SKILL.md 提供了覆盖主流逃逸向量的规则集,每条规则在 process.py 的ESCAPE_RULES字典中都有对应的可编程模板:
| 规则 | 条件核心 | 优先级 | 标签 |
|---|---|---|---|
| 挂载宿主文件系统 | proc.name = mount and (args contains "/host" or "nsenter") | CRITICAL | T1611 |
| nsenter 命名空间逃逸 | proc.name = nsenter | CRITICAL | T1611, namespace |
| 特权容器启动 | container_started and container.privileged=true | WARNING | T1610 |
| 写入 /proc/sysrq-trigger | open_write and fd.name = /proc/sysrq-trigger | CRITICAL | host-manipulation |
| 加载内核模块 | proc.name in (insmod, modprobe) | CRITICAL | T1611, kernel |
| 写入 cgroup release_agent | open_write and fd.name endswith release_agent | CRITICAL | CVE-2022-0492 |
| 读取宿主 /etc/shadow | open_read and (fd.name = /etc/shadow or startswith /host/etc/shadow) | CRITICAL | T1003 |
| 访问 Docker Socket | (open_read or open_write) and fd.name = /var/run/docker.sock | CRITICAL | T1610 |
最终可部署的完整规则文件(/etc/falco/rules.d/container-escape.yaml)在 SKILL.md 中给出,它合并了escape_binaries列表(nsenter、chroot、unshare、mount、umount、pivot_root)、container_escape_attempt宏、逃逸二进制执行规则,以及针对/proc/1/、/etc/shadow、/etc/kubernetes/admin.conf、/var/lib/kubelet/等敏感路径的访问检测规则。而 process.py 的generate_all_rules()函数能够以脚本方式自动生成同构规则集——这意味着你可以把规则模板纳入 CI/CD,随镜像与集群变更自动产出新的规则文件。
Falco JSON 输出格式:告警事件的机器可读结构
当json_output: true开启后,Falco 每行输出一个 JSON 对象,API Reference 给出了标准结构:
{ "time": "2024-01-15T10:30:00.000Z", "rule": "Container Escape Binary Execution", "priority": "Critical", "source": "syscall", "output": "Escape binary in container...", "output_fields": { "user.name": "root", "proc.cmdline": "nsenter -t 1 -m -u -i -n", "container.name": "attacker-pod" }, "tags": ["container", "escape", "T1611"] }关键字段说明:
source:告警来源,本文场景为syscall(Falco 还支持k8s_audit等来源)。output_fields:规则 output 模板中%字段的求值结果,是排查阶段最核心的证据(进程命令行、容器名、用户等)。tags:与规则中的tags一致,脚本据此识别逃逸告警。
仓库的两个脚本都实现了对该 JSON 结构的解析:agent.py 的parse_falco_alerts()按--min-priority阈值过滤(利用SEVERITY_MAP比较数值等级),并将 tags 与逃逸标签集合求交集以提取escape_alerts;process.py 的parse_falco_alerts()与summarize_alerts()则进一步按优先级与规则名聚合统计,输出by_priority、by_rule与escape_attempts摘要。解析结果可直接对接 SIEM 或生成逃逸检测报告。
Falcosidekick 告警路由:Slack 与 Elasticsearch 集成
Falco 本身只负责检测,告警分发由 Falcosidekick 完成。API Reference 给出了最小配置:
config: slack: webhookurl: "https://hooks.slack.com/services/XXX" minimumpriority: "critical" elasticsearch: hostport: "https://es:9200" index: "falco-alerts"其中minimumpriority定义了进入该通道的最低告警级别,可在通道层面做告警分级:例如 Slack 只接收critical以上(避免告警疲劳),Elasticsearch 接收notice以上用于全量留存。更完整的 Slack 模板在 SKILL.md 中,支持 Go 模板语法提取{{.Priority}}、{{.Rule}}、{{.OutputFields.container_name}}、{{.OutputFields.container_image_repository}}、{{.OutputFields.proc_cmdline}}等字段,将告警渲染为可读消息。workflows 文档还演示了 Prometheus 输出用于指标监控(workflows.md)。
Helm 部署:Kubernetes 环境下的标准安装
API Reference 提供了一行式 Helm 安装命令:
helm repo add falcosecurity https://falcosecurity.github.io/charts helm install falco falcosecurity/falco \ --namespace falco --create-namespace \ --set driver.kind=ebpf \ --set falcosidekick.enabled=truedriver.kind=ebpf:选择 eBPF 驱动而非内核模块。SKILL.md 的最佳实践明确推荐 eBPF 驱动(更安全、无需编译模块、对内核版本要求为 5.8+)。falcosidekick.enabled=true:同 Chart 部署告警分发器。- 生产环境还需补充
--set falcosidekick.webui.enabled=true与 containerd 收集器配置--set collectors.containerd.enabled=true --set collectors.containerd.socket=/run/containerd/containerd.sock(见 SKILL.md)。
完整部署流程(含 verify 与 rollout status 检查)在 workflows.md:安装后以kubectl get pods -n falco -o wide确认 DaemonSet 在每个节点就绪,再通过kubectl logs -n falco -l app.kubernetes.io/name=falco --tail=10检查启动日志。也可参考 workflows.md 用 ConfigMap 承载自定义规则并kubectl rollout restart daemonset/falco热加载。
配套 CLI:用脚本自动化规则生命周期
仓库为该技能提供了两个 Python 工具,分别对应 API Reference 中的 CLI 用法:
python agent.py --check-status python agent.py --validate-rules /etc/falco/rules.d/escape.yaml python agent.py --parse-alerts /var/log/falco/events.json --min-priority Warning python agent.py --generate-rules > escape-rules.yaml- agent.py 的四个参数对应:
--check-status检测 Falco 是否安装及服务状态(先尝试falco --version,回退到systemctl is-active falco);--validate-rules调用falco --validate校验规则文件;--parse-alerts按最低优先级解析 JSON 告警并输出逃逸告警摘要;--generate-rules直接打印内置的逃逸检测规则 YAML。 - process.py 提供了
generate、parse-alerts、health、deploy四个子命令。其中deploy子命令演示了完整自动化链路:generate_all_rules()生成规则 →kubectl create configmap ... --dry-run=client -o yaml生成 ConfigMap 清单 →kubectl apply -f -应用 → 提示kubectl rollout restart daemonset/falco加载新规则。health子命令则通过 Kubernetes API 检查 Falco Pod 是否全部处于 Running 状态。
这套 CLI 的意义在于把"编写规则 → 校验 → 部署 → 解析告警"固化为一套可重复执行的程序化流程,适合集成进 SOC 的检测工程流水线。
规则测试与验证:模拟逃逸行为
规则上线后必须实测验证。SKILL.md 给出了三种模拟方式:
# 模拟敏感文件读取(触发 shadow 规则) kubectl run test-escape --image=alpine --restart=Never -- sh -c "cat /etc/shadow" # 模拟 nsenter 命名空间逃逸(hostPID 容器内执行) kubectl run test-nsenter --image=alpine --restart=Never --overrides='{"spec":{"hostPID":true}}' -- nsenter -t 1 -m -u -i -n -- cat /etc/hostname # 检查告警是否命中 kubectl logs -n falco -l app.kubernetes.io/name=falco --tail=50 | grep -i escape更系统的三阶段测试在 workflows.md 中:测试 1 用securityContext.privileged=true覆盖启动特权容器,验证Launch Privileged Container规则(WARNING 级);测试 2 用cat /etc/shadow验证敏感文件读取规则;测试 3 通过kubectl exec -it deploy/some-app -- /bin/sh验证 Shell 生成的默认规则(Terminal shell in container)。验证完成后需及时kubectl delete pod清理测试负载。规则加载情况可用falco --list | grep -i escape在运行中的 Falco Pod 内确认(workflows.md)。
配置要点:falco.yaml 关键设置
将自定义规则接入 Falco 并在生产输出,需要调整 falco.yaml 中的以下设置:
rules_files: - /etc/falco/falco_rules.yaml - /etc/falco/rules.d/container-escape.yaml json_output: true json_include_output_property: true json_include_tags_property: true log_level: info priority: WARNING http_output: enabled: true url: http://falcosidekick:2801 insecure: true grpc: enabled: true bind_address: "unix:///run/falco/falco.sock" threadiness: 8 grpc_output: enabled: truerules_files:将自定义规则文件追加进加载列表;json_*三项控制 JSON 告警格式及其中的 output/tags 字段是否包含,务必全部开启以配合脚本解析。priority: WARNING:全局最低告警级别,低于该级别的事件不输出。http_output:将告警转发给 Falcosidekick(http://falcosidekick:2801),insecure: true用于集群内明文 HTTP。grpc/grpc_output:开启 gRPC 服务供客户端(如 Falco Sidekick、falcoctl)查询,threadiness: 8为工作线程数。
误报抑制与告警调优
容器逃逸规则普遍存在误报风险(如合法运维工具使用 nsenter 调试)。workflows.md 给出了标准调优手段——追加 exceptions 白名单:
- rule: Terminal shell in container append: true exceptions: - name: known_shell_spawners fields: [container.image.repository] comps: [in] values: - [my-debug-image, kubectl-debug]append: true表示对既有规则追加修改,exceptions按fields + comps + values组合定义豁免条件。SKILL.md 的最佳实践还建议:以 DaemonSet 方式覆盖全部节点、先基于默认规则(maturity_stable)再叠加自定义规则、为规则打上 MITRE ATT&CK 技术 ID 标签便于关联、在强制模式前先以宽松模式测试、并通过 Prometheus 指标端点持续监控 Falco 健康度(SKILL.md)。assets/template.md 提供的告警分诊模板(0-5 分钟处置、5-30 分钟调查、隔离/取证/恢复三阶段)可作为告警触发后的标准响应清单。
威胁模型与标准映射
逃逸检测不是孤立告警,它需要与威胁模型对齐。standards.md 给出了 MITRE ATT&CK for Containers 的检测映射:
| 技术 ID | 名称 | Falco 检测手段 |
|---|---|---|
| T1611 | Escape to Host | nsenter、mount、chroot 检测 |
| T1610 | Deploy Container | 特权容器启动检测 |
| T1003 | OS Credential Dumping | 容器内 /etc/shadow 访问 |
| T1005 | Data from Local System | 敏感文件读取检测 |
| T1059 | Command and Scripting Interpreter | 容器内 Shell 启动 |
| T1068 | Exploitation for Privilege Escalation | 内核漏洞利用指标 |
该表同时关联历史逃逸 CVE:CVE-2024-21626(runc 的process.cwd逃逸,检测/proc/self/fd访问宿主路径)、CVE-2022-0492(cgroup v1 release_agent,对应上文 cgroup 规则)、CVE-2022-0185(文件系统上下文漏洞,检测容器内 unshare)、CVE-2020-15257(containerd-shim API,检测抽象 socket 连接)、CVE-2019-5736(runc 覆盖宿主二进制,检测对/proc/self/exe的写入),详见 standards.md。此外,NIST SP 800-190(容器运行时监控与告警)、CIS Kubernetes Benchmark v1.8 的 5.7.x 小节(seccomp、Security Context、命名空间隔离)以及 NSA/CISA Kubernetes 加固指南第 5 节(审计日志与威胁检测)均为本技能提供了合规上下文。读者可在仓库 mappings 目录中查看全部技能对 ATT&CK 框架的整体覆盖情况。
总结
从 API Reference 出发,本技能提供了一条完整的容器逃逸检测闭环:CLI 管理(version/validate/list)→ 规则编写(语法 + 过滤字段 + 8 条逃逸规则)→ JSON 结构化输出 → Falcosidekick 告警路由(Slack/Elasticsearch/Prometheus)→ 脚本自动化(agent.py / process.py 的生成、校验、解析、部署)→ 模拟测试与误报调优 → 威胁模型与合规映射。配合 SKILL.md 的完整规则库、workflows.md 的五阶段实战流程以及 assets/template.md 的告警分诊模板,安全团队可以在 Kubernetes/容器环境中快速建立 syscall 级的逃逸检测能力,并将告警无缝接入现有 SIEM/SOAR 体系。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考