profile picture

CWPP中Audit的升级换代

May 09, 2022 - Linux

技术背景是CWPP(Cloud Workload Protection Platforms)云工作负载保护平台,通常基于代理在计算机中永久运行,收集与安全相关的数据和事件,并将其发送到基于云服务分析后通知用户相应的潜在安全威胁。

其中的一个子系统audit,是一个用于收集记录系统、内核、用户进程发生的行为事件的被动防御的安全审计系统。该系统可以可靠地收集有关上任何与安全相关事件的信息,如记录文件访问、网络访问、用户指令、系统调用和系统安全事件。

随着时间的推移,内核的发展,其存在问题日显突出

  1. 性能开销大:开启服务的支付卡安全标准,系统吞吐率下降30%,系统调用开销下降50%,上下文切换下降10%,其他下降%2-10%左右
  2. 不能灵活调节性能:只是开启服务但不执行,系统吞吐率下降20%,系统调用开销下降35%,其他下降%2-10%左右
  3. 对docker容器支持不够,且对docker及其服务的监测达不到安全发现的效果

audit系统子系统

audit

可替代的5种技术比较

发布年份采集框架性能可编程控制稳定性内置于内核
2004Linux Audit
2009SystemTap
2006LTTng
2009Perf/ftrace
2014BPF

性能低的原因

Audit独立于kprobe、tracepoint之外的数据源,通过syscall和文件操作等内核源码上插入自定义的钩子函数实现监控,于2004年加入内核,相比于其他技术性能差

BPF技术的优势

BPF的劣势

用BPF替代Audit的方案

  1. 使用BPF实现已有linux audit子系统功能。实现细节见下一节
  2. 根据系统版本选择安装,老系统使用原有audit或perf,V4.x及以上系统使用BPF
  3. 提供自监测系统,监控和配置性能指标,超过指标后,执行对应缓解措施
  4. 提供实时通知机制,遇到配置项,通知其他接入系统协同完成对应缓解措施
  5. 提供docker内监测和多docker间聚合事件能力,尤其是cgroup和网络等事件,增强docker的审计功能

BPF对linux audit子系统实现细节

                   Agent        
策略下发  |  事件聚合 |   通知协同  |  性能监测 
                    BPF        
    Ring Buffer ↑    |     ↓ BPF Map    
         System call | syscall 系统调用    挂载点
     VFS/File system | 文件操作    挂载点
                  硬件驱动        
  1. 针对audit的监控syscall和文件操作,BPF也增加相同接入监控
  2. Agent通过BPF map设置配置策略到BPF驱动,动态管控监控行为
  3. 通过RingBuffer将BPF驱动实时发送事件到监控应用agent
  4. Agent分成4部分策略下发、事件聚合、通知协同、性能监测

主机审计系统流程


                策略下发
在后台服务中,管理员配置设计策略并下发

    主机agent接收策略,写入BPF map

        主机BPF驱动执行策略

BPF驱动收集系统调用syscal和文件系统操作事件
                事件聚合
在后台服务中,聚合分类这些事件

在后台服务中,收集多台主机上报的审计事件

        由agent上报发送给后台服务

            事件内容写入Ring Buffer

由BPF驱动收集系统调用syscal和文件系统操作事件

        主机agent根据下发策略要求
                通知协同
将聚合分类安全事件通知其他安全服务,如威胁狩猎分析

        其他安全服务生成对应的安全策略

        将安全策略通知系统审计服务

    优化更新主机审计系统自身的安全策略
                性能监测
    主机agent采集主机自身性能指标

    根据下发策略扩大或减小监测挂载点

    动态控制审计系统的对系统的负荷

升级替换后的有益效果

  1. 高性能的收集安全信息
  2. 可动态加载的探针,动态分配系统开销
  3. 可兼容新旧系统的技术栈,适应老系统(老系统不支持新的技术)
  4. 可实时发现安全威胁,及时上报或紧急处理
  5. 可以与系统其他安全服务协同