爱奇艺网络流量分析引擎QNSM及其应用

2020 年 3 月 16 日

爱奇艺网络流量分析引擎QNSM及其应用

导读


一定业务规模的互联网公司的基础设施的网络边界通常都呈现一定程度的复杂多分区的情况,如何进行有效的安全防护和控制会成为安全体系建设的重点和难点。面对这一挑战,爱奇艺安全团队自研了网络流量分析引擎 QNSM,并将其用在各种基于流量分析的跨区安全检测和控制场景中,成为了爱奇艺安全防御体系的关键基础引擎。本文是根据爱奇艺高级总监卢明樊在 QCon 全球软件开发大会(上海站)2019 分享《爱奇艺网络流量安全检测能力建设实践》部分内容整理而成。


互联网企业边界复杂性



上图是典型的中大型互联网公司的网络架构,通常分为:


  • 办公网络,可能还有如右下角的众多小的分支机构,甚至还有办公机房

  • 核心数据中心, 这些数据中心机房可能分布在全国多个地方,并通过专线实现互连,在这个基础上构建了自己的私有云。

  • CDN网络,这些CDN节点和核心机房也存在一定的互连。

  • 如果使用公有云基础服务,呈现混合云的模式,这些基础服务与核心数据中心存在互连。

  • 上述大量的分区都可能通过不同的方式接入到互联网。

  • 最后,BYOD和各种无线热点以及手机无线热点等出现,导致呈现了大量碎片化的所谓新边界。


对企业安全防御而言,带来了各种新的挑战:


  • 安全防御变得碎片化和多层次化,大边界内部还可能出现更多的小边界。

  • 单个边界可能流量会非常大,特别是互联网互联的边界,100Gps以上成为常态,如果在这些边界进行流量检测,要求流量检测要具备高性能和很好的水平扩展能力,随时应对边界流量的扩展。

  • 企业面临的内外威胁依旧很严峻,流量型攻击,漏洞型攻击,边界突破渗透,内部人员的泄露、破坏和控制都是普遍存在。

  • 安全防御的体系也在逐步演化,从单纯的边界防御、结合多层次内部防御的纵深防御、以及立足于零信任或者假设失陷的下紧扣角色和权限的安全模型都在推动我们安全防御在不断的升级迭代来应对日益严峻的威胁。安全防御体系的演化不代表边界消失了,边界防御依旧是基础和重要一环,有效地流量分析和控制成为了新的安全防御体系重要的数据源和关节可编排的控制点。


因此,我们自研了旁路流量分析引擎 QNSM(iQiYi Network SecurityMonitoring),通过对业务流量和旁路流量的协同分析,并集成多种可调度的防护能力,协同应对多种类型和多种层次的攻击,并且安全运营体系打通,从接入、预案、响应、联动、防御、溯源逐步形成闭环。


QNSM 简介


全流量分析是非常重要的, 可以用来进行资产发现、网络监控和可视化,对安全而言,通过对网络流量的分析,对流量构建基线建模,从流量中可以发现异常、风险以及检测攻击,从流量中也可以实现数据内容提取,发现潜在的敏感数据流动或者泄露,还可以进行 ACL 策略校对,并将网络流量产出的数据特征通过机器学习和专家分析,可以挖掘更多的信息以及进行取证溯源和事件回查。



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、基础库


QNSM 在 DPDK 的基础上封装构建了各种基础库为构建上层流水线提供了基础能力,包括:


  • PORT:对网卡队列和核心之间ring队列的逻辑封装,是实现并行处理和线性扩展的基础。

  • MSG:封装了支持回调的CPU核心之间的传递的通信消息,这些消息可以是策略消息也可以是数据消息,这种无阻塞的核间消息支持一对一和一对多通信,实现数据和控制平面分开,数据集的输出和包处理分开。

  • ACL: 是支持回调的五元组的策略描述,例如要指定满足怎么样的策略的包要聚合、处理、dump等操作。

  • TBL: 是对DPDKrte_hash表的封装,是数据集的存储,提供CURD操作接口,实现基于mempool的表项资源分配。

  • SCHED: 是对工作线程的封装,支持自定义的包处理,策略执行,自定义计算逻辑,消息分发和定时回调等。


2、流水线


QNSM 构建了不同的流水线组件来满足不同场景的安全应用,为了支持更多的安全应用场景,我们可以在基础库的基础上构建更多的流水线组件,进而实现网络流量多样的处理能力。


  • SESSM:负责包解析,flow数据聚合和复制转发,处理策略消息等。

  • SIP_AGG:是对源IP进行特征聚合和输出,在攻击时通过响应策略消息打开。

  • VIP_AGG:实现目标VIP(需要保护的业务IP)的自学习,以及基于目标VIP的进行特征提取和向EDGE输出。

  • DUMP:保存数据包为PCAP文件供后续的事件回溯,在攻击时通过响应策略消息打开。

  • EDGE: 负责将上游组件发送的多维数据输出到外部Kafka供进一步分析。

  • DETECT: 集成Suricata库,支持IDPS的检测。


基于 QNSM 现有的流水线组件,我们已经将其应用在 DDoS 攻击检测,IDPS 检测防护,流量监控以及网络 DLP 等多种场景,并支撑了各种上层安全产品的开发。大家可以根据自己不同安全应用的需要,设计和插入自开发的组件。


3、控制层


Master 是整个引擎的主控,通过 Kafka 接收从管理平台接收策略消息,并下发到流水线组件实现对流水线的配置和处理控制。


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 攻击检测


业务接入边控中心,会提供要保护的 VIP(Virtual IP),此外 QNSM 也会主动发现流量中的目标 VIP 并且和 CMDB 进行比对发现属于待保护的 VIP。DDoS 攻击检测方法主要是要基于受保护的 VIP 为目标的流量进行聚合特征数据供安全大数据分析引擎进行判断以实现 DDoS 检测。整体的检测思路是构建目标 VIP 以及所在机房的流量基线,计算流量特征,并进行多维异常检测识别攻击,常见的流量基线是包括 VIP 和本机房的成分基线以及机房流量基线和流量上边界,通过当前流量与基线进行实时计算,构建表示当前流量与基线的偏离的多维指标特征,并利用解释性强的模型来进行检测判断(例如评分卡模型等),并且会采取边控中心运营对事件的正负反馈来进一步修正基线和训练模型。


通过前面的多维异常检测识别出流量攻击以后,边控中心收到攻击事件和报警后会立即采取如下行动:


  • 边控中心通过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 是一种基于网络流量的 IDPS 引擎,它有广泛的规则集来监控网络流量,并在发生入侵事件时触发警报, QNSM 使用库文件的方式将 Suricata 集成,并通过 IDPS 网关接收边控中心下发更新 Suricata 相关检测规则,从 SESSM 组件复制转发过来的包会通过 Detect 组件调用 Suricata 进行处理,实现实时检测和触发事件和告警,并通过 Kafka 将事件和告警输出到安全大数据分析引擎进行进一步分析处理。通过对 Suricata 的集成,QNSM 可以兼容大量开源和自定义的 IDPS 规则集,并且规则管理方式保持完全一致。


利用 Suricata 的 DFI 能力,QNSM 也快速扩展支持从流量中识别各类数据库,缓存等云服务访问流量的能力,并且支持从流量中提取文件信息(包括文件名,文件大小,文件类型,MD5 等),通过 Kafka 输出到安全大数据分析引擎,最终实现向 DLP 平台(绿盾)输出数据泄露和违规访问事件。


目前支持了爱奇艺内部常见的 HTTP, MySQL,Redis,CouchBase, Memcached,MongoDB,Elasticsearch,Kafka,VNC,RSYNC 等多种协议和相关工具的识别,支持对 HTTP,SMTP,FTP 文件传输通道的监控。


开源


目前 QNSM 已经应用到爱奇艺包括 DDOS 攻击检测检测、IDPS、网络 DLP 等多种安全检测场景,累计部署 22+集群共计 130+分析节点,总分析带宽容量达到 1TBps。


我们需要大家和我们一起改进 QNSM,让它变得更强大,非常欢迎更多的合作和贡献,覆盖更多的甚至不限于安全应用的场景。


目前,QNSM 项目剔除了和爱奇艺内部平台深度集成部分后,核心代码开源在 GitHub:https://www.github.com/iqiyi/qnsm,欢迎使用、报告 Issues 和 提交 Pull-Request。


我们采用 Git work-flow 的工作方式,具体可以参考开源代码中的 Contributing 文档,欢迎更多的开发者的参与,也欢迎通过邮件组: qnsm_devel#qiyi.com (请用 @替换 #)和我们进行交流。


后续规划


后续,爱奇艺安全团队针对 QNSM 会继续优化,开发计划如以下几部分:


  • 增强易用性,让配置使用更加简单

  • 进一步优化性能和降低资源占用

  • 增加加密流量的非内容和内容特征的分析能力

  • 高级DPI和DFI能力

  • 支持netflow等多种标准输出

  • Bro/Zeek的集成以及沙箱分析的集成

  • 旁路TAP(分流)以及串联Firewall(过滤)能力

  • 扩展到更多场景,例如给业务安全和智能运维赋能等

  • 逐步开放边控中心的集群管理、监控和事件处置能力


后续会逐步将最新的进展同步到开源社区。


本文转载自公众号爱奇艺技术产品团队(ID:iQIYI-TP)。


原文链接


https://mp.weixin.qq.com/s?__biz=MzI0MjczMjM2NA==&mid=2247486442&idx=1&sn=9781f36f99476447d954602d296045c6&chksm=e97697c9de011edf1979bc42ed7eaf4d17266d4a327ec13b8f59b7bf819b26b71829ca170d47&scene=27#wechat_redirect


2020 年 3 月 16 日 11:271479

评论

发布
暂无评论
发现更多内容

理论 | 三天两夜,万字长文,吃透TCP/IP

简爱W

Java TCP

netty案例,netty4.1基础入门篇零《初入JavaIO之门BIO、NIO、AIO实战练习》

小傅哥

Java Netty 小傅哥

netty案例,netty4.1基础入门篇一《嗨!NettyServer》

小傅哥

Java Netty

netty案例,netty4.1中级拓展篇四《Netty传输文件、分片发送、断点续传》

小傅哥

Netty 小傅哥

netty案例,netty4.1中级拓展篇六《SpringBoot+Netty+Elasticsearch收集日志信息数据存储》

小傅哥

Java Netty

netty案例,netty4.1基础入门篇十二《简单实现一个基于Netty搭建的Http服务》

小傅哥

Java Netty

LeetCode题解:11. 盛最多水的容器,for循环双指针,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

netty案例,netty4.1基础入门篇八《NettyClient半包粘包处理、编码解码处理、收发数据方式》

小傅哥

Netty 小傅哥

PHP浮点数精度损失问题

flyer0126

php 弱类型语言

[租房]刚步入社会的小萌新,休想坑小妹妹,安排!

我是程序员小贱

Stream 流

HeGuang

Java

netty案例,netty4.1基础入门篇五《NettyServer字符串编码器》

小傅哥

Java Netty

netty案例,netty4.1基础入门篇六《NettyServer群发消息》

小傅哥

Java Netty 小傅哥

netty案例,netty4.1中级拓展篇三《Netty传输Java对象》

小傅哥

Java Netty 小傅哥

在java中使用SPI创建可扩展的应用程序

程序那些事

Java spi 可扩展程序 可扩展应用

实战 | Vue + Element UI 页面创建

简爱W

Java 架构师

netty案例,netty4.1基础入门篇三《NettyServer字符串解码器》

小傅哥

Java Netty 小傅哥

netty案例,netty4.1中级拓展篇一《Netty与SpringBoot整合》

小傅哥

Java Netty

一把年龄,技术一般,怎么去面试

escray

学习 面试 面试现场

netty案例,netty4.1基础入门篇二《NettyServer接收数据》

小傅哥

Java Netty 小傅哥

netty案例,netty4.1基础入门篇四《NettyServer收发数据》

小傅哥

Java Netty 小傅哥

netty案例,netty4.1基础入门篇十《关于ChannelOutboundHandlerAdapter简单使用》

小傅哥

Netty 小傅哥

netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》

小傅哥

Java Netty

netty案例,netty4.1中级拓展篇五《基于Netty搭建WebSocket,模仿微信聊天页面》

小傅哥

Java Netty 小傅哥

netty案例,netty4.1中级拓展篇七《Netty请求响应同步通信》

小傅哥

Java Netty 小傅哥

API 中签名的使用

flyer0126

接口安全

没有亮点的简历,要用详历来弥补

escray

学习 面试 简历 面试现场

netty案例,netty4.1中级拓展篇二《Netty使用Protobuf传输数据》

小傅哥

Java Netty 小傅哥

世界很大,我想去看看

escray

学习 面试 面试现场

netty案例,netty4.1基础入门篇七《嗨!NettyClient》

小傅哥

Netty 小傅哥

netty案例,netty4.1基础入门篇九《自定义编码解码器,处理半包、粘包数据》

小傅哥

Java Netty

爱奇艺网络流量分析引擎QNSM及其应用-InfoQ