CWPP中Audit的升级换代
May 09, 2022 -技术背景是CWPP(Cloud Workload Protection Platforms)云工作负载保护平台,通常基于代理在计算机中永久运行,收集与安全相关的数据和事件,并将其发送到基于云服务分析后通知用户相应的潜在安全威胁。
其中的一个子系统audit,是一个用于收集记录系统、内核、用户进程发生的行为事件的被动防御的安全审计系统。该系统可以可靠地收集有关上任何与安全相关事件的信息,如记录文件访问、网络访问、用户指令、系统调用和系统安全事件。
随着时间的推移,内核的发展,其存在问题日显突出
- 性能开销大:开启服务的支付卡安全标准,系统吞吐率下降30%,系统调用开销下降50%,上下文切换下降10%,其他下降%2-10%左右
- 不能灵活调节性能:只是开启服务但不执行,系统吞吐率下降20%,系统调用开销下降35%,其他下降%2-10%左右
- 对docker容器支持不够,且对docker及其服务的监测达不到安全发现的效果
audit系统子系统
- auditd:审计守护程序负责将通过审计内核接口生成并由应用程序和系统活动触发的审计消息写入磁盘。
- auditctl:控制审计接口的日志生成参数和内核设置,以及用于确定要跟踪哪些事件的规则集
- aureport:创建自定义报告
- ausearch:搜索审计日志中的特定的事件
- audispd:通知其他应用程序,而不是将其写入磁盘上的审计日志中
可替代的5种技术比较
发布年份 | 采集框架 | 性能 | 可编程控制 | 稳定性 | 内置于内核 |
---|---|---|---|---|---|
2004 | Linux Audit | 差 | 否 | 高 | 是 |
2009 | SystemTap | 良 | 是 | 低 | 否 |
2006 | LTTng | 良 | 否 | 低 | 否 |
2009 | Perf/ftrace | 优 | 否 | 高 | 是 |
2014 | BPF | 优 | 是 | 高 | 是 |
性能低的原因
Audit独立于kprobe、tracepoint之外的数据源,通过syscall和文件操作等内核源码上插入自定义的钩子函数实现监控,于2004年加入内核,相比于其他技术性能差
BPF技术的优势
- 稳定:通过验证器,可防止错误引起的内核崩溃
- 免安装:无需安装,可动态加载和卸载
- 可编程控制:支持开发者插入自定义的代码逻辑
BPF的劣势
- 需要高版本的Linux内核,V3.x版本功能不全,V2.x无BPF支持。
- 低版本Linux使用原有audit或perf等实现
用BPF替代Audit的方案
- 使用BPF实现已有linux audit子系统功能。实现细节见下一节
- 根据系统版本选择安装,老系统使用原有audit或perf,V4.x及以上系统使用BPF
- 提供自监测系统,监控和配置性能指标,超过指标后,执行对应缓解措施
- 提供实时通知机制,遇到配置项,通知其他接入系统协同完成对应缓解措施
- 提供docker内监测和多docker间聚合事件能力,尤其是cgroup和网络等事件,增强docker的审计功能
BPF对linux audit子系统实现细节
Agent
策略下发 | 事件聚合 | 通知协同 | 性能监测
BPF
Ring Buffer ↑ | ↓ BPF Map
System call | syscall 系统调用 挂载点
VFS/File system | 文件操作 挂载点
硬件驱动
- 针对audit的监控syscall和文件操作,BPF也增加相同接入监控
- Agent通过BPF map设置配置策略到BPF驱动,动态管控监控行为
- 通过RingBuffer将BPF驱动实时发送事件到监控应用agent
- Agent分成4部分策略下发、事件聚合、通知协同、性能监测
主机审计系统流程
↓
策略下发
在后台服务中,管理员配置设计策略并下发
↓
主机agent接收策略,写入BPF map
↓
主机BPF驱动执行策略
↓
BPF驱动收集系统调用syscal和文件系统操作事件
事件聚合
在后台服务中,聚合分类这些事件
↑
在后台服务中,收集多台主机上报的审计事件
↑
由agent上报发送给后台服务
↑
事件内容写入Ring Buffer
↑
由BPF驱动收集系统调用syscal和文件系统操作事件
↑
主机agent根据下发策略要求
通知协同
将聚合分类安全事件通知其他安全服务,如威胁狩猎分析
↓
其他安全服务生成对应的安全策略
↓
将安全策略通知系统审计服务
↓
优化更新主机审计系统自身的安全策略
性能监测
主机agent采集主机自身性能指标
↓
根据下发策略扩大或减小监测挂载点
↓
动态控制审计系统的对系统的负荷
升级替换后的有益效果
- 高性能的收集安全信息
- 可动态加载的探针,动态分配系统开销
- 可兼容新旧系统的技术栈,适应老系统(老系统不支持新的技术)
- 可实时发现安全威胁,及时上报或紧急处理
- 可以与系统其他安全服务协同