鄒 峰,陳興蜀,羅永剛
(1.四川大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院,四川 成都 610065;2.四川大學(xué) 網(wǎng)絡(luò)空間安全研究院,四川 成都 610065)
隨著計(jì)算機(jī)與互聯(lián)網(wǎng)技術(shù)的發(fā)展,如何發(fā)現(xiàn)網(wǎng)絡(luò)流量、日志、威脅情報(bào)等數(shù)據(jù)中的安全問(wèn)題,當(dāng)前一種人機(jī)對(duì)答的數(shù)據(jù)分析方式(也可稱(chēng)作交互式分析)成為了研究熱點(diǎn)。由于網(wǎng)絡(luò)攻擊的復(fù)雜性,采用固定的分析模型難以發(fā)現(xiàn)一些新型的攻擊,此時(shí)就需要分析人員探索式地與數(shù)據(jù)進(jìn)行交互,將人的認(rèn)知能力應(yīng)用到安全分析過(guò)程中[1]。網(wǎng)絡(luò)流量、日志、威脅情報(bào)等數(shù)據(jù)存在規(guī)模大、實(shí)時(shí)、關(guān)聯(lián)關(guān)系復(fù)雜、結(jié)構(gòu)各異等特點(diǎn),需要找到合適的存儲(chǔ)工具與分析方法來(lái)構(gòu)建交互式分析系統(tǒng)。
本文選擇Elastic Search作為存儲(chǔ)介質(zhì),通過(guò)在其外部進(jìn)行擴(kuò)展的方法,構(gòu)建了一種網(wǎng)絡(luò)安全交互式分析系統(tǒng)。①定義了一種新的語(yǔ)言CSIAL來(lái)解釋網(wǎng)絡(luò)安全分析的需求,簡(jiǎn)化分析人員與數(shù)據(jù)進(jìn)行交互的過(guò)程,并基于Antlr4對(duì)語(yǔ)句進(jìn)行解析;②根據(jù)語(yǔ)句的解析結(jié)果來(lái)調(diào)用Elastic Search的相關(guān)API來(lái)實(shí)現(xiàn)基本的檢索、分組、統(tǒng)計(jì)等功能,并通過(guò)一些處理方法擴(kuò)展其不具有的子查詢(xún)、連接查詢(xún)等功能。根據(jù)安全分析的需求提煉出所需功能并總結(jié)為自定義的分析語(yǔ)言,通過(guò)解析符合該語(yǔ)言語(yǔ)法的語(yǔ)句并調(diào)用相應(yīng)功能對(duì)數(shù)據(jù)進(jìn)行處理,基于這種思想,達(dá)到網(wǎng)絡(luò)安全交互式分析的目的。
Elastic Search是當(dāng)前非常流行的開(kāi)源分布式全文搜索引擎,通過(guò)對(duì)海量數(shù)據(jù)構(gòu)建索引,能夠快速?gòu)闹胁樵?xún)、分析得到所需結(jié)果。Elastic Search是基于Lucene的,而Lucene是目前使用最廣泛、最受歡迎、效果最好的一個(gè)開(kāi)源全文搜索架構(gòu)[2]。在一個(gè)最新的非關(guān)系型數(shù)據(jù)庫(kù)流行度榜單中(https://db-engines.com/en/ranking),Elastic Search超過(guò)Redis排在第二位(僅次于Mongo BD)。面對(duì)大規(guī)模、實(shí)時(shí)、復(fù)雜、異構(gòu)的網(wǎng)絡(luò)安全相關(guān)數(shù)據(jù),進(jìn)行分布式存儲(chǔ)與全文搜索的Elastic Search是最好的選擇之一?;贓lastic Search的ELK(Elastic Search、Logstash、Kibana)框架[3,4]是目前開(kāi)源社區(qū)最活躍的分析框架,其提供了包括數(shù)據(jù)采集、索引、分析的一整套功能。文獻(xiàn)[4]基于ELK技術(shù)棧,實(shí)現(xiàn)了能對(duì)海量日志進(jìn)行實(shí)時(shí)采集和檢索的分析監(jiān)控系統(tǒng)。文獻(xiàn)[5]中提出一種調(diào)用Elastic Search Java API并利用Spring Boot框架來(lái)快速簡(jiǎn)潔地實(shí)現(xiàn)一個(gè)交互式平臺(tái)的方法。文獻(xiàn)[6]中,提出了一種新的威脅情報(bào)技術(shù),通過(guò)分析蜜罐日志數(shù)據(jù)來(lái)識(shí)別攻擊者的行為,從而確定攻擊模式,并利用ELK技術(shù)對(duì)日志數(shù)據(jù)進(jìn)行分析。
Antlr(another tool for language recognition)作為一款Java編寫(xiě)的語(yǔ)言識(shí)別分析工具,常用于處理符合某種語(yǔ)法規(guī)則的文本。Antlr4在Antlr的基礎(chǔ)上增加了語(yǔ)法樹(shù)的遍歷功能。文獻(xiàn)[7]中,選取了流系統(tǒng)持續(xù)查詢(xún)語(yǔ)言CQL(continues query language)中支持監(jiān)控的查詢(xún)語(yǔ)句,結(jié)合SQL(struct query language)的語(yǔ)法規(guī)則進(jìn)行了相應(yīng)的簡(jiǎn)化,設(shè)計(jì)了結(jié)構(gòu)化持續(xù)查詢(xún)語(yǔ)言CSQL,并使用到Antlr來(lái)解析查詢(xún)語(yǔ)言來(lái)構(gòu)建系統(tǒng)與用戶交互層的方法。文獻(xiàn)[8]中用到Anltr來(lái)解析SQL語(yǔ)句并調(diào)用MongoDB API來(lái)實(shí)現(xiàn)SQL訪問(wèn)接口的功能。
Apache Calcite[9]是類(lèi)似于Altlr的另一個(gè)基礎(chǔ)軟件框架。與Altlr不同的是,Calcite專(zhuān)門(mén)為許多流行的開(kāi)源數(shù)據(jù)分析系統(tǒng)提供統(tǒng)一的交互式SQL查詢(xún)語(yǔ)言支持,并提供了模塊化的、可擴(kuò)展的查詢(xún)優(yōu)化器和數(shù)百個(gè)內(nèi)置的優(yōu)化規(guī)則。Calcite已被Hive、Drill、Storm等多種平臺(tái)所采用。文獻(xiàn)[10]在Apache Calcite和Postgres上實(shí)現(xiàn)了一個(gè)基于強(qiáng)化學(xué)習(xí)的連接優(yōu)化方法。
設(shè)計(jì)的基于Elastic Search的網(wǎng)絡(luò)安全交互式分析系統(tǒng),總體架構(gòu)如圖1所示。分析人員在客戶端輸入符合CSIAL語(yǔ)法規(guī)則的語(yǔ)句,與Elastic Search中的數(shù)據(jù)進(jìn)行交互。
圖1 網(wǎng)絡(luò)安全交互式分析系統(tǒng)總體架構(gòu)
服務(wù)端(異步接口層)使用到Netty4框架,開(kāi)啟端口接收客戶端發(fā)來(lái)的查詢(xún)語(yǔ)句。語(yǔ)句解析層利用Antlr4工具進(jìn)行語(yǔ)句解析。關(guān)聯(lián)查詢(xún)功能擴(kuò)展層主要擴(kuò)展了子查詢(xún)與連接查詢(xún)的功能。Java API調(diào)用層根據(jù)語(yǔ)句解析層以及關(guān)聯(lián)查詢(xún)擴(kuò)展層提交的請(qǐng)求去反復(fù)調(diào)用Elastic Search的Java API,實(shí)現(xiàn)分析數(shù)據(jù)所需的各種功能。
對(duì)Elastic Search中的數(shù)據(jù)進(jìn)行分析時(shí),要么需使用其原生的復(fù)雜的領(lǐng)域特定語(yǔ)言(domain-specific language,DSL),要么需編程去調(diào)用其Java API。
使用Elastic Search原生Rest Ful提供的Json風(fēng)格的DSL語(yǔ)言語(yǔ)法復(fù)雜,每次編寫(xiě)會(huì)花費(fèi)大量的時(shí)間。該Rest Ful接口對(duì)外暴露了大量與分析數(shù)據(jù)無(wú)關(guān)的功能,若直接對(duì)外提供該接口,可能會(huì)因分析人員的不當(dāng)使用而破壞Elastic Search中索引的數(shù)據(jù)。此外,該DSL語(yǔ)法中缺乏一些安全分析所需的數(shù)據(jù)關(guān)聯(lián)等功能。
安全分析人員往往對(duì)數(shù)據(jù)的分析能力較強(qiáng),但編程能力相對(duì)較弱,采用人工編程的方式去實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)安全相關(guān)數(shù)據(jù)的分析,代價(jià)較高。因此,直接使用Elastic Search提供的Java API來(lái)編程的方法也不適用。
若使用現(xiàn)有的一些語(yǔ)言,如SQL風(fēng)格的語(yǔ)法,可能會(huì)無(wú)法實(shí)現(xiàn)Elastic Search具有但SQL不具有的功能。
因此,為了方便擴(kuò)展功能、簡(jiǎn)化分析操作,需要一種新的語(yǔ)言來(lái)解釋網(wǎng)絡(luò)安全交互式分析的需求。
設(shè)計(jì)實(shí)現(xiàn)了一種網(wǎng)絡(luò)安全交互式分析語(yǔ)言CSIAL。對(duì)于CSIAL的語(yǔ)法設(shè)計(jì),主要參考了Elastic Search的基本查詢(xún)與分析功能、Splunk的SPL語(yǔ)法、關(guān)系型數(shù)據(jù)庫(kù)的SQL語(yǔ)法以及Linux命令。功能見(jiàn)表1。
表1 在CSIAL中所包括的功能
語(yǔ)法中分為Filters、Joins、Groups、Columns、Orders、Rows這6類(lèi)子句,分別用于描述數(shù)據(jù)過(guò)濾與子查詢(xún)、連接、分組、返回字段設(shè)置與統(tǒng)計(jì)、排序、返回條數(shù)設(shè)置的功能。具體語(yǔ)法不再贅述。
在程序?qū)崿F(xiàn)中,為了更容易識(shí)別并解析符合某種語(yǔ)法的語(yǔ)句,通常選擇將解析過(guò)程拆分為兩個(gè)階段:詞法分析與語(yǔ)法分析。詞法分析是一個(gè)把字符組成單詞或符號(hào)的過(guò)程,語(yǔ)法分析是使用詞法分析所得的符號(hào)去識(shí)別句子結(jié)構(gòu)的過(guò)程。一條語(yǔ)句通過(guò)上述兩個(gè)階段后最終會(huì)得到一個(gè)語(yǔ)句生成樹(shù)的結(jié)構(gòu),以便于做進(jìn)一步的解析。
本文使用到Antlr4工具來(lái)對(duì)CSIAL語(yǔ)句進(jìn)行解析。語(yǔ)句解析流程如圖2所示。
圖2 語(yǔ)句解析流程
通過(guò).g4文件來(lái)定義CSIAL的相關(guān)語(yǔ)法規(guī)則,并使用Antlr4為其建立相應(yīng)的程序接口;根據(jù)解析需求去實(shí)現(xiàn)這些接口,得到所需的詞法分析器、語(yǔ)法分析器、錯(cuò)誤監(jiān)聽(tīng)器、生成樹(shù)遍歷器;滿足語(yǔ)法規(guī)則的語(yǔ)句通過(guò)詞法與語(yǔ)法解析后被處理為語(yǔ)句生成樹(shù);利用遍歷器訪問(wèn)生成樹(shù)的節(jié)點(diǎn),其中采用了遞歸方式來(lái)依次遍歷語(yǔ)句生成樹(shù)中的長(zhǎng)句、短句、單詞、關(guān)鍵字等;對(duì)匹配到的節(jié)點(diǎn)進(jìn)行相應(yīng)處理,最終得到語(yǔ)句解析結(jié)果,以用于后續(xù)對(duì)數(shù)據(jù)的查詢(xún)、分析等功能。
關(guān)聯(lián)查詢(xún)?cè)诰W(wǎng)絡(luò)安全交互式分析的很多場(chǎng)景中會(huì)用到。但是Elastic Search只能通過(guò)嵌套、父子關(guān)系、反規(guī)范化等特殊方式來(lái)進(jìn)行關(guān)聯(lián),這些方式存在消耗索引性能、浪費(fèi)存儲(chǔ)空間等問(wèn)題,在面對(duì)實(shí)時(shí)、多源、異構(gòu)的網(wǎng)絡(luò)安全相關(guān)數(shù)據(jù)時(shí)并不適用,因此選擇在Elastic Search外部擴(kuò)展實(shí)現(xiàn)更加靈活的關(guān)聯(lián)查詢(xún)功能。主要包括子查詢(xún)與連接查詢(xún)。
當(dāng)查詢(xún)數(shù)據(jù)時(shí),需要對(duì)某數(shù)據(jù)集進(jìn)行過(guò)濾,但過(guò)濾所需的具體值只能通過(guò)另一次查詢(xún)得到,此時(shí)就會(huì)用到子查詢(xún)。典型的SQL語(yǔ)句為“SELECT*FROM index1 WHERE x IN(SELECT DISTINCT x FROM index2)”。對(duì)于上述語(yǔ)句,Elastic Search實(shí)現(xiàn)子查詢(xún)功能的方法是:先從index2中進(jìn)行一次去重統(tǒng)計(jì),得到字段的值的種類(lèi),然后將結(jié)果封裝生成一個(gè)terms查詢(xún),再?gòu)膇ndex1中獲取最終結(jié)果。
已知兩個(gè)結(jié)構(gòu)化的數(shù)據(jù)集都包含某個(gè)相同的字段,于是以該字段為鍵,將兩個(gè)數(shù)據(jù)集進(jìn)行連接,生成一個(gè)新數(shù)據(jù)集,然后可以再對(duì)該新數(shù)據(jù)集進(jìn)行后續(xù)分析操作(如分組、統(tǒng)計(jì)、排序等)。這一過(guò)程便是連接查詢(xún)。連接生成新數(shù)據(jù)集的算法通常有循環(huán)嵌套連接、排序歸并連接、哈希連接等[11]。
實(shí)現(xiàn)對(duì)Elastic Search多個(gè)索引的連接查詢(xún)的一種方法:先從2個(gè)索引中分別獲取結(jié)果;執(zhí)行連接算法,將2個(gè)索引的結(jié)果連接生成新數(shù)據(jù)集;若無(wú)后續(xù)操作,則直接返回連接結(jié)果并結(jié)束;若有后續(xù)操作,則在Elastic Search中建立新索引,將新數(shù)據(jù)集以批處理的方式寫(xiě)入該索引;根據(jù)后續(xù)操作從新索引中得到最終結(jié)果。由于是實(shí)時(shí)結(jié)果,新索引持久保留的價(jià)值不大,因此最后需刪除新索引。
上面所述的連接查詢(xún)實(shí)現(xiàn)流程可分為如下幾部分:從已有索引中查詢(xún)數(shù)據(jù)、執(zhí)行連接操作生成新數(shù)據(jù)集、將新數(shù)據(jù)集寫(xiě)入Elastic Search的新索引、根據(jù)連接查詢(xún)的后續(xù)操作從新索引中再獲取最終結(jié)果。
深入分析可以發(fā)現(xiàn):查詢(xún)數(shù)據(jù)主要由Elastic Search集群本身的性能決定;執(zhí)行連接操作的復(fù)雜度主要由使用的連接算法決定。因此,優(yōu)化方法選擇從新數(shù)據(jù)集再次寫(xiě)入新索引的過(guò)程下手。本文選擇了兩個(gè)方面來(lái)進(jìn)行優(yōu)化:
(1)數(shù)據(jù)寫(xiě)入時(shí),Elastic Search會(huì)解析數(shù)據(jù)的各個(gè)字段,對(duì)字段值的內(nèi)容進(jìn)行分詞并建立索引。因此減少字段數(shù)量與數(shù)據(jù)大小能有效減少索引的運(yùn)算操作與磁盤(pán)空間,進(jìn)而有效減少數(shù)據(jù)的再寫(xiě)入時(shí)間。
本文采取一種從后往前推的方法,根據(jù)后續(xù)操作(如分組、統(tǒng)計(jì)等)得到真正需要使用的字段,于是只需將這些字段添加到新數(shù)據(jù)集。這種方式很大程度上減少了新數(shù)據(jù)集的大小,寫(xiě)入新索引的時(shí)間也會(huì)減少。例如,有A、B兩個(gè)索引,A包括a、b、c、d、e字段,B包括e、f、g、h字段,將A與B按照e字段連接,生成的新數(shù)據(jù)集按照a字段進(jìn)行分組,分別統(tǒng)計(jì)每個(gè)組中g(shù)字段的平均值??梢园l(fā)現(xiàn)這樣一次連接查詢(xún)雖然包括a~h共8個(gè)字段,但后續(xù)只涉及到a、g這2個(gè)字段,因此生成的新數(shù)據(jù)集完全可以只包括這2個(gè)字段,字段數(shù)量減少了3/4,使得數(shù)據(jù)量大幅減少,空間上與時(shí)間上均得到性能的提升。
(2)在Elastic Search中建立新索引時(shí)需要設(shè)置該索引的分片數(shù)與副本數(shù)[12](否則系統(tǒng)會(huì)默認(rèn)分配5個(gè)分片與1個(gè)副本),分片用于分割索引讓讀寫(xiě)可以進(jìn)行并行操作,副本則用于將每個(gè)分片完整復(fù)制并放到不同硬盤(pán)中來(lái)保障數(shù)據(jù)的完整性。采用當(dāng)前主流的機(jī)械硬盤(pán)時(shí),若一個(gè)Elastic Search集群中的硬盤(pán)總數(shù)、分片數(shù)、副本數(shù)分別為Z、m、n,那么能使得索引的讀寫(xiě)性能最好的平衡點(diǎn)滿足條件Z=m(n+1),此時(shí)對(duì)索引的進(jìn)行寫(xiě)入操作能夠最多達(dá)到m的并發(fā)量。
通過(guò)分析,副本數(shù)越少、分片數(shù)與副本數(shù)乘積越接近Elastic Search集群的總硬盤(pán)數(shù)時(shí),數(shù)據(jù)寫(xiě)入性能越高。而本文所述的連接查詢(xún)實(shí)現(xiàn)方法中,連接所得的數(shù)據(jù)為臨時(shí)數(shù)據(jù),因此副本數(shù)完全可以設(shè)置為0,而分片數(shù)可根據(jù)集群情況進(jìn)行調(diào)整。
為了方便收集測(cè)試結(jié)果,實(shí)驗(yàn)中,除了Elastic Search集群部署于2臺(tái)服務(wù)器上,其它程序(Netty4服務(wù)端程序、Antlr4、API調(diào)用程序、算法程序等)均運(yùn)行于本地Windows10主機(jī)。在實(shí)際應(yīng)用中,若將這些程序運(yùn)行于服務(wù)器,效率必然會(huì)更高。部分軟件信息見(jiàn)表2。
表2 軟件信息
硬件主要包括本地PC機(jī)與兩臺(tái)服務(wù)器,見(jiàn)表3。
表3 硬件信息
Elastic Search集群的部分配置參數(shù)見(jiàn)表4。
表4 對(duì)Elastic Search的系統(tǒng)配置參數(shù)
使用到Insomnia軟件作為客戶端(對(duì)應(yīng)前面所述的Netty4服務(wù)端)進(jìn)行實(shí)驗(yàn)。使用效果如圖3所示。
圖3 使用Insomnia作為客戶端進(jìn)行實(shí)驗(yàn)的效果
圖3中左側(cè)輸入語(yǔ)句、服務(wù)端IP與端口,右側(cè)得到返回結(jié)果、響應(yīng)狀態(tài)、相應(yīng)時(shí)間等。
為了評(píng)價(jià)CSIAL語(yǔ)法的復(fù)雜性,選擇了4個(gè)網(wǎng)絡(luò)安全分析需求,將其分別翻譯為CSIAL、SQL以及Elastic Search原生DSL這3種語(yǔ)句,然后用去掉空格與換行符后的字符數(shù)進(jìn)行對(duì)比。對(duì)比結(jié)果如圖4所示。
圖4 幾種語(yǔ)句的字符數(shù)對(duì)比
從圖中可以看到,4種需求翻譯所得的CSIAL與SQL語(yǔ)句的字符數(shù)較為接近,且都遠(yuǎn)小于Elastic Search原生DSL語(yǔ)句的字符數(shù),表明CSIAL的語(yǔ)法相比Elastic Search原生DSL更為簡(jiǎn)潔,能有效提升安全分析人員的使用效率。
對(duì)一條語(yǔ)句的解析主要分為詞法解析、語(yǔ)法解析、錯(cuò)誤反饋處理、語(yǔ)句生成樹(shù)生成幾個(gè)階段。為了測(cè)試自定義語(yǔ)言的語(yǔ)句解析性能,實(shí)驗(yàn)中以語(yǔ)句的字符數(shù)為自變量、解析時(shí)間(μs)為因變量進(jìn)行測(cè)試。其中解析時(shí)間為從接收到語(yǔ)句到得到解析結(jié)果的時(shí)間差值。實(shí)驗(yàn)結(jié)果如圖5所示。
圖5 語(yǔ)句解析性能
可以看到時(shí)間隨著語(yǔ)句的字節(jié)大小增加而略微有所提升,平均大致在1 ms左右。由于語(yǔ)句解析過(guò)程的耗時(shí)極小,在實(shí)際使用中,這個(gè)時(shí)間幾乎可以忽略不計(jì)。
連接查詢(xún)實(shí)驗(yàn)中自變量選擇的是連接生成的數(shù)據(jù)條數(shù),因變量為響應(yīng)時(shí)間(ms)。結(jié)果如圖6所示。
圖6 連接查詢(xún)響應(yīng)時(shí)間與連接后數(shù)據(jù)條數(shù)的關(guān)系
連接查詢(xún)的實(shí)驗(yàn)結(jié)果中可以發(fā)現(xiàn):①響應(yīng)時(shí)間與連接生成結(jié)果的數(shù)據(jù)條數(shù)大致呈正比;②優(yōu)化后的連接查詢(xún),耗時(shí)約為優(yōu)化前的50%~60%,體現(xiàn)出該優(yōu)化方法的有效性;③在該測(cè)試實(shí)驗(yàn)使用的數(shù)據(jù)與查詢(xún)用例中,對(duì)于連接生成結(jié)果的數(shù)據(jù)條數(shù)達(dá)到數(shù)十萬(wàn)條的情況下,對(duì)再寫(xiě)入過(guò)程進(jìn)行優(yōu)化后的連接查詢(xún),時(shí)間能夠控制在1 min以?xún)?nèi)。
若使用其它數(shù)據(jù)或用例,實(shí)驗(yàn)的結(jié)果可能會(huì)有所差異。
本文研究并構(gòu)建了一種基于Elastic Search的網(wǎng)絡(luò)安全交互式分析系統(tǒng)。
定義了一種網(wǎng)絡(luò)安全交互式分析語(yǔ)言CSIAL,該語(yǔ)言相比Elastic Search原生DSL語(yǔ)言更為簡(jiǎn)潔,能夠顯著簡(jiǎn)化安全人員對(duì)數(shù)據(jù)的分析過(guò)程。使用到Antlr4工具進(jìn)行語(yǔ)句解析,實(shí)驗(yàn)結(jié)果表明該方法的解析時(shí)間可以忽略不計(jì)。增加了網(wǎng)絡(luò)安全分析所需而Elastic Search缺乏的子查詢(xún)、連接查詢(xún)等功能,并通過(guò)兩個(gè)方面對(duì)連接過(guò)程進(jìn)行了優(yōu)化調(diào)整,使得相應(yīng)時(shí)間能夠一定程度上滿足需求。
由于只是原型系統(tǒng),后續(xù)工作將著手解決并發(fā)控制、可視化等復(fù)雜工程問(wèn)題。