应组合falco与osquery实现容器内敏感操作追踪:falco监听系统调用检测高危行为并告警,osquery补全进程上下文,再通过容器id和时间窗口关联docker日志、falco事件与osquery快照,形成完整执行链。

要追踪容器内的敏感执行操作,不能只盯着 Docker 守护进程日志——它只管“谁调了 API”,不管“容器里干了什么”。真正有效的追踪必须向下延伸到容器内部进程行为,靠组合外部审计工具与容器内轻量级监控来实现。
用 Falco 捕获容器内高危系统调用
Falco 是目前最成熟的容器运行时安全工具,它基于 eBPF 或内核模块监听系统调用,能实时发现 shell 启动、敏感路径写入、非授权网络连接等行为:
- 安装后默认启用预置规则,例如检测 容器内执行 sh/bash/shell 类进程,会输出完整上下文:用户、容器名、命令行、父进程
- 可自定义规则匹配特定行为,比如 访问 /etc/shadow、写入 /root/.ssh/authorized_keys、调用 execve 并参数含 curl/wget/python -c
- 告警支持多种输出:直接写入 syslog/journald(便于与 docker events 对齐时间)、推送 Kafka 或 Webhook 实现实时响应
结合 osquery 补全进程上下文
Falco 告警提供“发生了什么”,osquery 则回答“当时环境什么样”:
- 在容器内部署 osquery(需以特权模式或挂载 /proc /sys),通过 SQL 查询实时进程树、打开文件、网络连接、用户登录会话
- 例如执行 SELECT * FROM processes WHERE name IN ('sh','bash','python','curl') AND on_disk = 0 可识别内存马类无文件执行
- 将 osquery 结果与 Falco 时间戳对齐,就能还原出某次 exec_create 调用后,容器内是否立刻 spawned 了一个 root 权限的 bash 进程
加固基础:让敏感操作更难发生
审计不是兜底,而是最后一道防线。前置控制能大幅降低误报和响应压力:
- 禁止容器使用 --privileged 或挂载宿主机关键路径(如 -v /:/host),通过 AppArmor/SELinux 策略拦截并记录 avc: denied 事件
- Docker daemon 配置 "no-new-privileges": true,阻止容器内进程提权
- 限制 docker exec -u root 类操作——这类参数完整记录在 journald 日志中,是交叉验证执行者意图的关键依据
日志关联:打通“API 调用”与“容器内行为”
单一数据源无法闭环。必须把三类日志打上统一标识并关联分析:
- Docker journald 日志:含 UID、CLI 全参数、时间戳,标记为 docker-audit
- Falco 输出日志:含容器 ID、进程名、命令行、事件时间(纳秒级)
- osquery 定时快照:按固定间隔采集容器内状态,带 container_id 标签
- 用容器 ID + 时间窗口(±2 秒)做关联,就能构建出一条完整链:用户 A 在 10:01:22.331 执行 docker exec -it nginx sh → 容器 nginx 在 10:01:22.405 启动 bash → 该 bash 进程 10:01:23.110 尝试写入 /etc/passwd











