開源了!愛奇藝網(wǎng)絡(luò)流量分析引擎QNSM及其應(yīng)用
點(diǎn)擊“開發(fā)者技術(shù)前線”,選擇“星標(biāo)?”
在看|星標(biāo)|留言,? 真愛
▌導(dǎo)讀
?
▌互聯(lián)網(wǎng)企業(yè)邊界復(fù)雜性

▌QNSM簡介

QNSM(iQIYI Network Security Monitor)設(shè)計(jì)目標(biāo)是成為一個(gè)全流量,實(shí)時(shí),高性能網(wǎng)絡(luò)安全監(jiān)控引擎,高性能、實(shí)時(shí)性、可擴(kuò)展、多元特征提取是我們需要的關(guān)鍵特性。
·? 高性能: 基于DPDK(https://www.dpdk.org/)利用普通x86服務(wù)器即可高速處理10Gbps以上的流量,繞過了內(nèi)核復(fù)雜的協(xié)議棧,并采用輪詢的方式收發(fā)數(shù)據(jù)包,基于主從和流水線架構(gòu),無鎖化設(shè)計(jì)。
·? 擴(kuò)展性強(qiáng):旁路部署, 結(jié)合分光分流可以支持多機(jī)快速橫向擴(kuò)展,自身的流水線設(shè)計(jì)也可以方便實(shí)現(xiàn)自定義組件的插入,并且提供基于配置文件的統(tǒng)一資源管理模型,包括隊(duì)列,CPU,MEMPOOL等,能夠快速組建數(shù)據(jù)交換網(wǎng)絡(luò),加速開發(fā)進(jìn)程。
·? 多元特征: 多種維度的DDoS檢測特征數(shù)據(jù),支持基本的DFI/DPI,以庫文件形式實(shí)現(xiàn)的Suricata IDPS集成,支持ipv4和ipv6雙協(xié)議。
·? 實(shí)時(shí)性: 集成IDPS實(shí)時(shí)檢測,DDoS檢測支持以10s(可調(diào)整)周期輸出聚合數(shù)據(jù),提取的多元特征可以通過Kafka和安全智能分析服務(wù)實(shí)現(xiàn)對接并進(jìn)行后續(xù)分析。
▌QNSM架構(gòu)設(shè)計(jì)

如上圖所示,QNSM是作為服務(wù)軟件運(yùn)行在普通多核X86服務(wù)器上,每一個(gè)服務(wù)器可以有多塊萬兆網(wǎng)卡,并且通過分光或者交換端口鏡像的方式獲得要分析的網(wǎng)絡(luò)流量,如果流量比較大,可以進(jìn)一步通過分流器進(jìn)行分流,將流量分散到不同的服務(wù)器上進(jìn)行分析,進(jìn)而QNSM利用DPDK實(shí)現(xiàn)了多個(gè)多核處理器和多個(gè)多隊(duì)列網(wǎng)卡實(shí)現(xiàn)了高速包處理,其高性能來自于:
·? 零拷貝(Zero-copy)
·? 預(yù)取、批量收包來減少cache miss和提高吞吐
·? Share Nothing的設(shè)計(jì)模式實(shí)現(xiàn)無鎖、無CPU切換
·? 充分利用網(wǎng)卡的RSS特性,收包隊(duì)列和CPU核綁定
1、基礎(chǔ)庫
·? PORT:對網(wǎng)卡隊(duì)列和核心之間ring隊(duì)列的邏輯封裝,是實(shí)現(xiàn)并行處理和線性擴(kuò)展的基礎(chǔ)。
·??MSG:封裝了支持回調(diào)的CPU核心之間的傳遞的通信消息,這些消息可以是策略消息也可以是數(shù)據(jù)消息,這種無阻塞的核間消息支持一對一和一對多通信,實(shí)現(xiàn)數(shù)據(jù)和控制平面分開,數(shù)據(jù)集的輸出和包處理分開。
·? ACL: 是支持回調(diào)的五元組的策略描述,例如要指定滿足怎么樣的策略的包要聚合、處理、dump等操作。
·? TBL: 是對DPDKrte_hash表的封裝,是數(shù)據(jù)集的存儲,提供CURD操作接口,實(shí)現(xiàn)基于mempool的表項(xiàng)資源分配。
·? SCHED: 是對工作線程的封裝,支持自定義的包處理,策略執(zhí)行,自定義計(jì)算邏輯,消息分發(fā)和定時(shí)回調(diào)等。
2、流水線
·? SESSM:負(fù)責(zé)包解析,flow數(shù)據(jù)聚合和復(fù)制轉(zhuǎn)發(fā),處理策略消息等。
·? SIP_AGG:是對源IP進(jìn)行特征聚合和輸出,在攻擊時(shí)通過響應(yīng)策略消息打開。
·? VIP_AGG:實(shí)現(xiàn)目標(biāo)VIP(需要保護(hù)的業(yè)務(wù)IP)的自學(xué)習(xí),以及基于目標(biāo)VIP的進(jìn)行特征提取和向EDGE輸出。
·??DUMP:保存數(shù)據(jù)包為PCAP文件供后續(xù)的事件回溯,在攻擊時(shí)通過響應(yīng)策略消息打開。
·? EDGE: 負(fù)責(zé)將上游組件發(fā)送的多維數(shù)據(jù)輸出到外部Kafka供進(jìn)一步分析。
·? DETECT: 集成Suricata庫,支持IDPS的檢測。
基于QNSM現(xiàn)有的流水線組件,我們已經(jīng)將其應(yīng)用在DDoS攻擊檢測,IDPS檢測防護(hù),流量監(jiān)控以及網(wǎng)絡(luò)DLP等多種場景,并支撐了各種上層安全產(chǎn)品的開發(fā)。大家可以根據(jù)自己不同安全應(yīng)用的需要,設(shè)計(jì)和插入自開發(fā)的組件。
3、控制層
4、安全應(yīng)用

上圖展示了在愛奇藝如何應(yīng)用QNSM來滿足各種安全需求,愛奇藝的QNSM服務(wù)節(jié)點(diǎn)分布在各個(gè)網(wǎng)絡(luò)分區(qū)的邊界上,并通過邊控中心來進(jìn)行管理和維護(hù)。邊控中心(Aegis)是愛奇藝網(wǎng)絡(luò)安全防護(hù)的核心服務(wù),它有如下功能:
·? 管理配置所有的QNSM集群,通過Kafka 和QNSM的進(jìn)行控制交互
·? 通過IDPS網(wǎng)關(guān)實(shí)現(xiàn)管理和配置QNSM集成的IDPS(Suricata)
·? 作為愛奇藝WAF的統(tǒng)一服務(wù)后臺,這里不做重點(diǎn)介紹
·? 愛奇藝內(nèi)部的安全大數(shù)據(jù)分析引擎結(jié)合威脅情報(bào)等外源數(shù)據(jù),對從QNSM集群EDGE組件輸出到Kafka的數(shù)據(jù)進(jìn)行分析處理,產(chǎn)出的網(wǎng)絡(luò)攻擊事件會發(fā)送邊控中心,邊控中心會根據(jù)策略進(jìn)一步和態(tài)勢感知系統(tǒng)對接,進(jìn)而和安全運(yùn)營系統(tǒng)對接實(shí)現(xiàn)閉環(huán)運(yùn)營。
·? 邊控中心可以按事件驅(qū)動QNSM dump網(wǎng)絡(luò)流量成PCAP文件,并ETL進(jìn)Moloch ( https://github.com/aol/moloch a largescale, open source, indexed packet capture and search system)建立包索引,方便對事件進(jìn)行包級別的分析和溯源。
我們將會在后續(xù)的分享文章中具體介紹邊控中心的架構(gòu)和設(shè)計(jì),這里不再贅述。下面,簡單介紹我們是如何利用QNSM來滿足我們DDoS攻擊檢測和擴(kuò)展支持IDPS能力的需求。
4.1 DDoS攻擊檢測
通過前面的多維異常檢測識別出流量攻擊以后,邊控中心收到攻擊事件和報(bào)警后會立即采取如下行動:
·? 邊控中心通過Kafka向Master組件下發(fā)各種策略消息管理和指導(dǎo)流水線的工作,包括dump數(shù)據(jù)包取證,攻擊源IP發(fā)現(xiàn),攻擊源端口提取,反射攻擊協(xié)議DFI等策略消息。
·? Master組件根據(jù)策略喚醒SIP_AGG組件,DUMP組件,其中SIP_AGG組件基于源IP聚合特征數(shù)據(jù)(可用于協(xié)助發(fā)現(xiàn)后續(xù)攻擊來源IP), DUMP組件會進(jìn)行dump數(shù)據(jù)包,dump出的PCAP文件投遞到Moloch進(jìn)一步索引和進(jìn)行專家分析。
·? VIP_AGG組件基于VIP+SPORT聚合特征數(shù)據(jù),SESSM組件也會針對被攻擊VIP 做協(xié)議DFI識別,以協(xié)助識別是否存在某類協(xié)議的反射攻擊。
·? QNSM通過EDGE組件,聚合數(shù)據(jù)進(jìn)入到Kafka,可以作為安全大數(shù)據(jù)分析的數(shù)據(jù)源,并且和其他不同的安全服務(wù)進(jìn)行聯(lián)動。
·? DDoS攻擊結(jié)束,邊控中心通過Kafka向Master組件下發(fā)策略關(guān)閉消息管理和指導(dǎo)流水線中的重度組件工作。
在檢測出VIP的入口流量存在攻擊的情況下,通常需要進(jìn)一步判斷該攻擊是否為反射攻擊,我們會利用QNSM產(chǎn)出的VIP+SPORT聚合特征數(shù)據(jù)以及 SESSM組件的DFI協(xié)議識別特征數(shù)據(jù),在安全大數(shù)據(jù)引擎計(jì)算不同的源端口的流量占比分布和包占比分布等特征進(jìn)而計(jì)算熵值,熵值越小,風(fēng)險(xiǎn)越高(占比越高,風(fēng)險(xiǎn)越高, 流量和包占比如果全部集中在一個(gè)端口,熵將會是0),我們會結(jié)合多維度特征構(gòu)建評分卡模型,最終給出是否是某一類協(xié)議的反射攻擊的判定。
攻擊確定以后,會根據(jù)應(yīng)急預(yù)案進(jìn)行流量牽引,愛奇藝構(gòu)建了私有的流量清洗中心,并結(jié)合云清洗和運(yùn)營商的近源清洗形成了三位一體的清洗能力。
4.2 IDPS能力集成
利用Suricata的DFI能力,QNSM也快速擴(kuò)展支持從流量中識別各類數(shù)據(jù)庫,緩存等云服務(wù)訪問流量的能力,并且支持從流量中提取文件信息(包括文件名,文件大小,文件類型,MD5等),通過Kafka輸出到安全大數(shù)據(jù)分析引擎,最終實(shí)現(xiàn)向DLP平臺(綠盾)輸出數(shù)據(jù)泄露和違規(guī)訪問事件。
目前支持了愛奇藝內(nèi)部常見的HTTP, MySQL,Redis,CouchBase, Memcached,MongoDB,Elasticsearch,Kafka,VNC,RSYNC等多種協(xié)議和相關(guān)工具的識別,支持對HTTP,SMTP,F(xiàn)TP文件傳輸通道的監(jiān)控。
▌開源
我們需要大家和我們一起改進(jìn)QNSM,讓它變得更強(qiáng)大,非常歡迎更多的合作和貢獻(xiàn),覆蓋更多的甚至不限于安全應(yīng)用的場景。
目前,QNSM 項(xiàng)目剔除了和愛奇藝內(nèi)部平臺深度集成部分后,核心代碼開源在GitHub:https://www.github.com/iqiyi/qnsm,歡迎使用、報(bào)告Issues 和 提交 Pull-Request。
END
前線推出學(xué)習(xí)交流群,加群一定要備注: 研究/工作方向+地點(diǎn)+學(xué)校/公司+昵稱(如Java+上海+上交+可可), 根據(jù)格式備注,可更快被通過且邀請進(jìn)群,領(lǐng)取一份專屬學(xué)習(xí)禮包
掃碼加我微信進(jìn)群,內(nèi)推和技術(shù)交流,大佬們零距離
歷史推薦
while (true) 和 for (;;) ?到底哪個(gè)更快? 阿里程序員常用的 15 款開發(fā)者工具! 再見!RxJava 同事:你居然還在用 try catch 處理異常?有點(diǎn)Low啊 完美!竟然用一個(gè)腳本就把系統(tǒng)升級到https了,且永久免費(fèi)! 好文點(diǎn)個(gè)在看吧!


