从过等保到实时防御:security-collector-exporter 的进化
起因:等保检查的那点事
做运维的都知道,国内服务器逃不过一道坎:网络安全等级保护(GB/T 22239-2019,俗称等保 2.0)。不管你是三级还是二级,测评机构来了都得查这几样东西:
- SSH 有没有禁 root 登录、密码策略合不合规范
- 防火墙开没开、SELinux 是不是 enforcing
- 有没有过期账户、密码有效期多少天
- 端口开了哪些、有没有高危服务在跑
- 审计日志开了没、保留多长时间
市面上有不少等保检查工具,GitHub 上搜一搜就能找到一堆——Golin、EvaluationTools、Linux-Security-Compliance-Check 等等。但它们都有一个共同的局限:跑一遍出个报告就完了。今天查完合规,明天有人改了 sshd_config、关了防火墙、装了个后门服务,你根本不知道。
security-collector-exporter v0.1.0 的出发点很简单:把这些安全配置状态全部变成 Prometheus 指标,接入现有的监控体系,持续跟踪,自动告警。不是"查一次",而是"盯着看"。
覆盖了等保 2.0 里 Linux 主机层面的主要检查项:
| 等保检查领域 | 对应指标 | 持续监控能发现的问题 |
|---|---|---|
| 身份鉴别 | 密码策略、shadow 字段 | 有人改了密码有效期、创建了弱策略账户 |
| 访问控制 | SSH 配置、hosts.allow/deny | Root 登录被重新开启、访问控制被放宽 |
| 安全审计 | auditd 状态、crontab 条目 | 审计服务被停掉、加了可疑定时任务 |
| 入侵防范 | 防火墙状态、SELinux 模式 | 防火墙被关、SELinux 切到 permissive |
| 网络安全 | 端口列表、服务状态 | 新开了高危端口、启动了不该跑的服务 |
配合 Prometheus 告警规则,配置一变就能发现。等保测评的时候直接拉 Grafana 面板出来就行,不用临时 SSH 上去一台一台查。
v0.1.0 解决了一个很具体的痛点。但用着用着就发现:静态配置检查只覆盖了"合规"这一面,安全事件的另一面完全看不到。
静态检查看不到的盲区
举个真实的例子。2024 年有一个 Python 供应链攻击事件:一个被植入恶意代码的第三方库,在运行时通过 execve 调用弹了一个反弹 shell:
| |
这种攻击,传统的安全基线检查完全看不到:
- SSH 配置没问题 ✓
- 防火墙开着 ✓
- SELinux enforcing ✓
- 密码策略合规 ✓
你的服务器从合规角度完全没毛病,但攻击已经在进行了。
类似的场景还有很多:
- 容器逃逸:一个 Pod 里的进程通过内核漏洞提权到宿主机
- 内核模块后门:有人
insmod加载了一个 rootkit 内核模块 - 异常网络连接:业务容器突然开始连外部可疑 IP
- 敏感文件读取:非授权进程在读
/etc/shadow或私钥文件 - 暴力提权:有人在反复尝试
setuid/capset
这些全是运行时事件——发生了就过去了,你下次做基线检查的时候根本看不到痕迹。Linux 自带的 auditd 能记录一部分,但它是面向传统主机的,不了解容器和 Kubernetes 的上下文,在高负载下会丢事件,而且跨 namespace 追溯进程链路基本做不到。
这正是 eBPF 能发力的地方。
eBPF:内核级的实时安全监控
eBPF 的核心能力是:在内核态挂载到各种 hook 点(tracepoint、kprobe),事件发生时直接在内核里完成数据聚合,零拷贝、低开销,不需要把每个事件都送到用户态。
Cilium 旗下的 Tetragon 是这个方向上最知名的开源项目,在 Kubernetes 安全领域已经被广泛采用。有一个生产环境的案例:3000 节点的集群里,Tetragon 检测到了一个被供应链攻击的 Python 库弹出的反弹 shell——从事件发生到定位只用了 4 分钟。如果用传统的 audit 日志,追溯同样的事件可能需要一天。
但 Tetragon 是面向 Kubernetes 的,偏重策略执行(enforcement),而且部署和配置有一定门槛。很多场景其实不需要那么重——你可能只是想在现有的 Prometheus 监控体系上加一层安全事件感知,不需要完整的策略引擎。
security-collector-exporter 从 v0.2.0 开始加入了 eBPF 支持,做的事情更轻量但很实用:
五类实时安全事件
| |
和静态采集的组合拳
有意思的是 eBPF 指标和静态指标组合起来用的时候,效果不是 1+1=2,是 1+1>2:
| |
或者:
| |
静态指标告诉你"配置对不对",eBPF 指标告诉你"实际发生了什么"。两个维度合在一起,才能得到真正的安全态势感知。
从 v0.1.0 到 v0.3.0
| |
v0.2.0 是功能版本,eBPF 的核心能力都在这里了,但发布后在真实环境里跑出了不少问题:BPF 程序里有内核结构体字段引用错误、UDP kprobe 在目标内核上不存在、ARM 设备上版本探测会卡住整个采集周期。v0.3.0 花了一天时间把这些硬茬全修了——BPF map 从 PERCPU_ARRAY 换成 PERCPU_HASH 解决竞争条件、加了 PID hash map 做进程 exit 分类、Aggregator 重写加了 delta 追踪、版本探测加了超时和缓存。
v0.3.0 是第一个可以在生产环境放心跑的版本。
覆盖的场景
一张图说清楚现在能管哪些事:
| 场景 | 静态指标 (v0.1.0) | eBPF 指标 (v0.3.0) |
|---|---|---|
| 等保 2.0 合规检查 | ✅ | - |
| SSH/防火墙/SELinux 配置偏移检测 | ✅ | - |
| 密码策略和账户生命周期监控 | ✅ | - |
| 端口和服务变更追踪 | ✅ | - |
| 反弹 shell / 可疑进程检测 | - | ✅ |
| 容器异常行为监控 | - | ✅ |
| 提权攻击检测 | - | ✅ |
| 内核模块后门检测 | - | ✅ |
| 敏感文件越权访问 | - | ✅ |
| 异常出站连接检测 | - | ✅ |
| 安全态势评分 | ✅ | ✅(组合使用) |
从"过等保"到"持续安全监控",工具没变,能力上了一个台阶。
谁适合用
- 等保合规场景:需要持续证明安全配置合规的团队,不再为每次测评临时抱佛脚
- 运维安全团队:已经用 Prometheus + Grafana 监控基础设施,想加一层安全感知
- 容器化环境:需要知道容器里在跑什么、连了谁、有没有异常行为
- 中小规模服务器管理:不需要上完整的 SIEM 或 SOAR 平台,但需要基本的安全可观测性
- 安全研究 / 教学场景:想了解 eBPF 能在安全领域做什么,这是一个可以上手玩的轻量实现
快速开始
| |
不开 --ebpf.enabled 就是纯静态采集模式,和 v0.1.0 完全兼容。
项目地址:
- GitHub: github.com/mickeyzzc/security-collector-exporter
- Gitee 镜像: gitee.com/mickeybee/security-collector-exporter
如果觉得有用,欢迎 star、提 issue 或者 PR。