关键不是给容器“加一层监控”,而是把进程行为、系统调用、容器操作和日志流全部串联起来,形成可追溯、可告警、可验证的闭环;需同步实施宿主机系统调用审计、Docker守护进程全链路日志化、容器内进程监控及关键配置自动审计四类措施,并通过时间戳与容器ID关联分析实现精准溯源。

要提升基础业务安全审计能力,关键不是给容器“加一层监控”,而是把进程行为、系统调用、容器操作和日志流全部串联起来,形成可追溯、可告警、可验证的闭环。下面从四个实操性强的方向展开,每项都对应真实部署场景中的薄弱点。
一、宿主机级系统调用审计(抓根本)
容器逃逸或提权攻击往往始于异常系统调用。必须对 Docker 守护进程及其依赖二进制文件做实时审计:
- 在 /etc/audit/rules.d/audit.rules 中添加规则(Red Hat/CentOS 系统需优先改此路径):
-w /usr/bin/docker -k docker-bin<br>-w /usr/bin/docker-runc -k docker-runc<br>-w /var/lib/docker -k docker-lib<br>-w /etc/docker/daemon.json -k docker-config
- 重启审计服务:
systemctl restart auditd - 验证是否生效:
ausearch -k docker-bin | head -5,执行一次docker run hello-world后应能查到对应记录
二、Docker 守护进程操作全链路日志化(抓谁干了什么)
daemon.json 配置决定你能看到多少敏感操作细节:
- 编辑 /etc/docker/daemon.json,启用 journald 并打标:
{ "log-driver": "journald", "log-opts": { "tag": "docker-audit" } } - 重启守护进程:
systemctl restart docker - 立即捕获高风险动作:
journalctl -t docker-audit | grep -E "(exec|cp|commit|inspect.*format)"
例如docker exec -u root nginx sh会完整记录 UID、时间、参数,无需额外工具即可溯源
三、容器内进程行为监控(抓运行时异常)
仅靠宿主机日志无法覆盖容器内部行为,需轻量级嵌入式方案:
- 在 baseimage-docker 类镜像中,启用 syslog-ng 的进程日志增强:修改
image/services/syslog-ng/syslog-ng.conf,加入:filter f_proc { program(".*") and match("exec|fork|kill") }; destination d_proc { file("/var/log/proc.log"); }; - 利用 osquery 实时查询容器内状态(需在容器中安装 osquery):
SELECT name, state, pid, cmdline FROM docker_containers WHERE state = 'running';SELECT * FROM processes WHERE cmdline LIKE '%sh%' OR cmdline LIKE '%bash%'; - 将 osquery 结果通过 cron 定期导出,或对接 Fluentd 推送到 SIEM
四、关键配置与权限自动审计(抓人为疏漏)
很多漏洞源于启动参数错误,这类问题必须自动化拦截或告警:
- 编写检查脚本,定期扫描运行中容器是否含高危配置:
docker ps --format '{{.ID}} {{.Names}}' | while read id name; do<br> docker inspect $id | jq -e '.[] | select(.HostConfig.Privileged == true or .HostConfig.CapAdd[]? == "SYS_ADMIN")' >/dev/null && echo "ALERT: $name has privileged or SYS_ADMIN"; done - 在 CI/CD 流水线中集成镜像扫描(如 Trivy),禁止带 CRITICAL 漏洞或 --privileged 的镜像推送到生产仓库
- 对 /etc/docker/daemon.json 做版本控制 + 变更告警,任何修改触发 Slack 通知和配置回滚检查
不复杂但容易忽略:四项措施里任意一项单独启用效果有限,真正起效的是把 auditd 日志、journald 操作日志、osquery 运行时数据、配置扫描结果这四类信息按时间戳和容器 ID 关联分析。比如某次 docker exec 调用后 3 秒内,osquery 查到新 bash 进程、auditd 记录了 runc fork、且该容器恰好没启用 no-new-privileges——这就是一个可确认的入侵线索。

















