开源了!爱奇艺网络流量分析引擎QNSM及其应用
点击“开发者技术前线”,选择“星标?”
在看|星标|留言, 真爱
▌导读
▌互联网企业边界复杂性
▌QNSM简介
QNSM(iQIYI Network Security Monitor)设计目标是成为一个全流量,实时,高性能网络安全监控引擎,高性能、实时性、可扩展、多元特征提取是我们需要的关键特性。
· 高性能: 基于DPDK(https://www.dpdk.org/)利用普通x86服务器即可高速处理10Gbps以上的流量,绕过了内核复杂的协议栈,并采用轮询的方式收发数据包,基于主从和流水线架构,无锁化设计。
· 扩展性强:旁路部署, 结合分光分流可以支持多机快速横向扩展,自身的流水线设计也可以方便实现自定义组件的插入,并且提供基于配置文件的统一资源管理模型,包括队列,CPU,MEMPOOL等,能够快速组建数据交换网络,加速开发进程。
· 多元特征: 多种维度的DDoS检测特征数据,支持基本的DFI/DPI,以库文件形式实现的Suricata IDPS集成,支持ipv4和ipv6双协议。
· 实时性: 集成IDPS实时检测,DDoS检测支持以10s(可调整)周期输出聚合数据,提取的多元特征可以通过Kafka和安全智能分析服务实现对接并进行后续分析。
▌QNSM架构设计
如上图所示,QNSM是作为服务软件运行在普通多核X86服务器上,每一个服务器可以有多块万兆网卡,并且通过分光或者交换端口镜像的方式获得要分析的网络流量,如果流量比较大,可以进一步通过分流器进行分流,将流量分散到不同的服务器上进行分析,进而QNSM利用DPDK实现了多个多核处理器和多个多队列网卡实现了高速包处理,其高性能来自于:
· 零拷贝(Zero-copy)
· 预取、批量收包来减少cache miss和提高吞吐
· Share Nothing的设计模式实现无锁、无CPU切换
· 充分利用网卡的RSS特性,收包队列和CPU核绑定
1、基础库
· PORT:对网卡队列和核心之间ring队列的逻辑封装,是实现并行处理和线性扩展的基础。
· MSG:封装了支持回调的CPU核心之间的传递的通信消息,这些消息可以是策略消息也可以是数据消息,这种无阻塞的核间消息支持一对一和一对多通信,实现数据和控制平面分开,数据集的输出和包处理分开。
· ACL: 是支持回调的五元组的策略描述,例如要指定满足怎么样的策略的包要聚合、处理、dump等操作。
· TBL: 是对DPDKrte_hash表的封装,是数据集的存储,提供CURD操作接口,实现基于mempool的表项资源分配。
· SCHED: 是对工作线程的封装,支持自定义的包处理,策略执行,自定义计算逻辑,消息分发和定时回调等。
2、流水线
· SESSM:负责包解析,flow数据聚合和复制转发,处理策略消息等。
· SIP_AGG:是对源IP进行特征聚合和输出,在攻击时通过响应策略消息打开。
· VIP_AGG:实现目标VIP(需要保护的业务IP)的自学习,以及基于目标VIP的进行特征提取和向EDGE输出。
· DUMP:保存数据包为PCAP文件供后续的事件回溯,在攻击时通过响应策略消息打开。
· EDGE: 负责将上游组件发送的多维数据输出到外部Kafka供进一步分析。
· DETECT: 集成Suricata库,支持IDPS的检测。
基于QNSM现有的流水线组件,我们已经将其应用在DDoS攻击检测,IDPS检测防护,流量监控以及网络DLP等多种场景,并支撑了各种上层安全产品的开发。大家可以根据自己不同安全应用的需要,设计和插入自开发的组件。
3、控制层
4、安全应用
上图展示了在爱奇艺如何应用QNSM来满足各种安全需求,爱奇艺的QNSM服务节点分布在各个网络分区的边界上,并通过边控中心来进行管理和维护。边控中心(Aegis)是爱奇艺网络安全防护的核心服务,它有如下功能:
· 管理配置所有的QNSM集群,通过Kafka 和QNSM的进行控制交互
· 通过IDPS网关实现管理和配置QNSM集成的IDPS(Suricata)
· 作为爱奇艺WAF的统一服务后台,这里不做重点介绍
· 爱奇艺内部的安全大数据分析引擎结合威胁情报等外源数据,对从QNSM集群EDGE组件输出到Kafka的数据进行分析处理,产出的网络攻击事件会发送边控中心,边控中心会根据策略进一步和态势感知系统对接,进而和安全运营系统对接实现闭环运营。
· 边控中心可以按事件驱动QNSM dump网络流量成PCAP文件,并ETL进Moloch ( https://github.com/aol/moloch a largescale, open source, indexed packet capture and search system)建立包索引,方便对事件进行包级别的分析和溯源。
我们将会在后续的分享文章中具体介绍边控中心的架构和设计,这里不再赘述。下面,简单介绍我们是如何利用QNSM来满足我们DDoS攻击检测和扩展支持IDPS能力的需求。
4.1 DDoS攻击检测
通过前面的多维异常检测识别出流量攻击以后,边控中心收到攻击事件和报警后会立即采取如下行动:
· 边控中心通过Kafka向Master组件下发各种策略消息管理和指导流水线的工作,包括dump数据包取证,攻击源IP发现,攻击源端口提取,反射攻击协议DFI等策略消息。
· Master组件根据策略唤醒SIP_AGG组件,DUMP组件,其中SIP_AGG组件基于源IP聚合特征数据(可用于协助发现后续攻击来源IP), DUMP组件会进行dump数据包,dump出的PCAP文件投递到Moloch进一步索引和进行专家分析。
· VIP_AGG组件基于VIP+SPORT聚合特征数据,SESSM组件也会针对被攻击VIP 做协议DFI识别,以协助识别是否存在某类协议的反射攻击。
· QNSM通过EDGE组件,聚合数据进入到Kafka,可以作为安全大数据分析的数据源,并且和其他不同的安全服务进行联动。
· DDoS攻击结束,边控中心通过Kafka向Master组件下发策略关闭消息管理和指导流水线中的重度组件工作。
在检测出VIP的入口流量存在攻击的情况下,通常需要进一步判断该攻击是否为反射攻击,我们会利用QNSM产出的VIP+SPORT聚合特征数据以及 SESSM组件的DFI协议识别特征数据,在安全大数据引擎计算不同的源端口的流量占比分布和包占比分布等特征进而计算熵值,熵值越小,风险越高(占比越高,风险越高, 流量和包占比如果全部集中在一个端口,熵将会是0),我们会结合多维度特征构建评分卡模型,最终给出是否是某一类协议的反射攻击的判定。
攻击确定以后,会根据应急预案进行流量牵引,爱奇艺构建了私有的流量清洗中心,并结合云清洗和运营商的近源清洗形成了三位一体的清洗能力。
4.2 IDPS能力集成
利用Suricata的DFI能力,QNSM也快速扩展支持从流量中识别各类数据库,缓存等云服务访问流量的能力,并且支持从流量中提取文件信息(包括文件名,文件大小,文件类型,MD5等),通过Kafka输出到安全大数据分析引擎,最终实现向DLP平台(绿盾)输出数据泄露和违规访问事件。
目前支持了爱奇艺内部常见的HTTP, MySQL,Redis,CouchBase, Memcached,MongoDB,Elasticsearch,Kafka,VNC,RSYNC等多种协议和相关工具的识别,支持对HTTP,SMTP,FTP文件传输通道的监控。
▌开源
我们需要大家和我们一起改进QNSM,让它变得更强大,非常欢迎更多的合作和贡献,覆盖更多的甚至不限于安全应用的场景。
目前,QNSM 项目剔除了和爱奇艺内部平台深度集成部分后,核心代码开源在GitHub:https://www.github.com/iqiyi/qnsm,欢迎使用、报告Issues 和 提交 Pull-Request。
END
扫码加我微信进群,内推和技术交流,大佬们零距离
历史推荐
while (true) 和 for (;;) 到底哪个更快? 阿里程序员常用的 15 款开发者工具! 再见!RxJava 同事:你居然还在用 try catch 处理异常?有点Low啊 完美!竟然用一个脚本就把系统升级到https了,且永久免费! 好文点个在看吧!