NEL是東軟自主研發(fā)出的一種通用攻擊描述語(yǔ)言,包括NEL語(yǔ)言規(guī)范及其相應(yīng)的開(kāi)發(fā)環(huán)境。NEL的設(shè)計(jì)目標(biāo)是為不同類(lèi)型的入侵檢測(cè)及防御產(chǎn)品(如網(wǎng)絡(luò)IDS/IPS、主機(jī)IDS/IPS、應(yīng)用防火墻、應(yīng)用安全增強(qiáng)模塊等)的開(kāi)發(fā)提供一個(gè)具有強(qiáng)大描述能力、高度可擴(kuò)展性和很高代碼執(zhí)行效率的語(yǔ)言平臺(tái)。

簡(jiǎn)介

NEL開(kāi)發(fā)環(huán)境(以下簡(jiǎn)稱(chēng)NEL平臺(tái))可以大大提高協(xié)議分析和攻擊檢測(cè)規(guī)則開(kāi)發(fā)的效率,極大地降低開(kāi)發(fā)團(tuán)隊(duì)的溝通成本和代碼維護(hù)代價(jià)。同時(shí)NEL平臺(tái)提供了無(wú)縫使用C語(yǔ)言中的常量、變量、結(jié)構(gòu)、函數(shù)等語(yǔ)言實(shí)體的能力,從而可以復(fù)用大量己有的C程序代碼,有效縮短產(chǎn)品的面世時(shí)間以及更新升級(jí)周期。NEL是為了解決大型攻擊檢測(cè)防御系統(tǒng)在傳統(tǒng)的開(kāi)發(fā)過(guò)程中所面臨的難題而提出的。

概況

基于NEL平臺(tái)進(jìn)行大規(guī)模入侵檢測(cè)防御產(chǎn)品(Intrusionpreventionsystem,IPs)的開(kāi)發(fā)能夠有效提高系統(tǒng)的開(kāi)發(fā)效率。基于NEL平臺(tái),可以將基于協(xié)議分析的攻擊檢測(cè)任務(wù)劃分為協(xié)議分析的開(kāi)發(fā)、攻擊檢測(cè)規(guī)則的制訂和語(yǔ)言平臺(tái)的開(kāi)發(fā)這三個(gè)子任務(wù),每個(gè)子任務(wù)分別由協(xié)議分析小組、攻擊分析小組、和描述語(yǔ)言開(kāi)發(fā)小組來(lái)承擔(dān)。這樣,即使系統(tǒng)增加了很多的協(xié)議、制訂了很多的攻擊規(guī)則、描述語(yǔ)言的語(yǔ)法不斷增強(qiáng),每個(gè)子系統(tǒng)的擴(kuò)展以及規(guī)模不斷增長(zhǎng)也不會(huì)影響到其他開(kāi)發(fā)小組中的開(kāi)發(fā)人員,使得構(gòu)造一個(gè)大規(guī)模的攻擊檢測(cè)防御系統(tǒng)成為可能。

采用NEL平臺(tái)不僅解決了大型攻擊檢測(cè)防御產(chǎn)品的分層次開(kāi)發(fā)和系統(tǒng)可擴(kuò)展性的難題,而且由于NEL在運(yùn)行期將“協(xié)議分析”和“攻擊檢測(cè)”緊密禍合在一起,因此開(kāi)發(fā)出的系統(tǒng)具有非常高的運(yùn)行效率。NEL平臺(tái)全新開(kāi)發(fā)模式以及在代碼執(zhí)行速度等方面的諸多技術(shù)優(yōu)勢(shì)使得NEL平臺(tái)成為一個(gè)理想的高性能攻擊檢測(cè)防御產(chǎn)品開(kāi)發(fā)平臺(tái)。

優(yōu)勢(shì)

NEL語(yǔ)言具有強(qiáng)大的技術(shù)優(yōu)勢(shì),主要體現(xiàn)在以下幾點(diǎn):

(1)強(qiáng)大的攻擊描述能力

NEL是一種過(guò)程型編程語(yǔ)言,提供了很多高級(jí)語(yǔ)言中刁‘有的過(guò)程性手段,具有強(qiáng)大的描述復(fù)雜攻擊的能力。NEL中可以定義各種數(shù)據(jù)類(lèi)型、常量、變量、數(shù)組、表達(dá)式、函數(shù)等等,這些特性使得NEL達(dá)到了與C語(yǔ)言相當(dāng)?shù)拿枋瞿芰?。同時(shí),NEL的語(yǔ)法與C非常相近,在NEL中可以定義一些抽象的語(yǔ)言實(shí)體(變量、函數(shù)),然后以過(guò)程性的方式操作這些語(yǔ)言實(shí)體來(lái)完成運(yùn)算。

NEL引入了一個(gè)新的語(yǔ)言元素:事件。事件指開(kāi)發(fā)者或NEL語(yǔ)言本身定義的攻擊檢測(cè)過(guò)程中檢測(cè)到的活動(dòng):檢測(cè)到一個(gè)TCP級(jí)的數(shù)據(jù)報(bào)、一個(gè)HTTP的請(qǐng)求或一次SMTP通信等等都可以被定義為一個(gè)事件。針對(duì)不同的應(yīng)用協(xié)議,開(kāi)發(fā)人員可以采用NEL中的事件在任何層次上(數(shù)據(jù)包層次、協(xié)議層次以及更高的層次上)來(lái)定義事件并基于事件來(lái)制訂攻擊檢測(cè)規(guī)則。

NEL中事件的引入為開(kāi)發(fā)人員制訂攻擊檢測(cè)規(guī)則提供了極大的靈活性。

NEL中的“事件”概念使得在攻擊檢測(cè)系統(tǒng)的開(kāi)發(fā)過(guò)程中,協(xié)議分析開(kāi)發(fā)人員只要專(zhuān)注于“基礎(chǔ)協(xié)議事件的定義和產(chǎn)生”,協(xié)議分析的開(kāi)發(fā)完成后,協(xié)議分析的知識(shí)即被固化到系統(tǒng)中;攻擊檢測(cè)規(guī)則開(kāi)發(fā)人員可以專(zhuān)注于“攻擊事件的定義”,而無(wú)需知道協(xié)議分析的細(xì)節(jié)。事件的引入使得協(xié)議分析的開(kāi)發(fā)和攻擊檢測(cè)規(guī)則的開(kāi)發(fā)被劃分成兩個(gè)完全獨(dú)立的層次。而對(duì)于沒(méi)有將協(xié)議分析開(kāi)發(fā)和攻擊檢測(cè)規(guī)則開(kāi)發(fā)分成兩個(gè)層次的語(yǔ)言,攻擊規(guī)則開(kāi)發(fā)人員在編寫(xiě)攻擊的檢測(cè)規(guī)則時(shí),必須對(duì)協(xié)議的細(xì)節(jié)有深入了解,而且協(xié)議的分析過(guò)程必須體現(xiàn)在每一條規(guī)則中,不僅代碼變得非常龐雜,系統(tǒng)運(yùn)行時(shí)攻擊檢測(cè)的效率也會(huì)受到非常大的影響。

NEL不僅引入了“事件”這一概念,還引入了對(duì)事件自身和事件之間的邏輯約束關(guān)系,比如對(duì)事件進(jìn)行限定和歸約等操作。事件和事件邏輯約束關(guān)系的引入使得NEL具有了強(qiáng)大的攻擊描述能力,同時(shí)提供了攻擊檢測(cè)所必須的抽象性和概括性,使得NEL開(kāi)發(fā)者可以方便地編寫(xiě)基于協(xié)議異常、漏洞特征等不同類(lèi)型的攻擊檢測(cè)規(guī)則,由于檢測(cè)規(guī)則具有對(duì)協(xié)議上下文的精確理解,包括了漏洞特征的描述,因此具有非常高的檢測(cè)準(zhǔn)確性。

(2)良好的可擴(kuò)展性

NEL平臺(tái)以及NEL平臺(tái)之上的協(xié)議分析模塊和攻擊檢測(cè)規(guī)則都可以不斷地?cái)U(kuò)展:NEL平臺(tái)自身的擴(kuò)展可以為開(kāi)發(fā)者提供越來(lái)越強(qiáng)大的協(xié)議和攻擊描述、分析和防御能力,使得攻擊檢測(cè)具有越來(lái)越高的準(zhǔn)確率和性能,而這種擴(kuò)展對(duì)平臺(tái)上己經(jīng)開(kāi)發(fā)出的協(xié)議分析模塊和攻擊檢測(cè)規(guī)則不會(huì)有任何影響;同樣,開(kāi)發(fā)者也可以不斷進(jìn)行協(xié)議分析模塊的擴(kuò)充,以提供更強(qiáng)的針對(duì)特定協(xié)議的攻擊檢測(cè)能力,而這種擴(kuò)充對(duì)于協(xié)議之上己有的攻擊檢測(cè)規(guī)則也不會(huì)有任何影響。

在現(xiàn)實(shí)世界中,許多協(xié)議都是非常復(fù)雜的,受時(shí)間和人力投入的制約,在攻擊檢測(cè)系統(tǒng)的開(kāi)發(fā)過(guò)程中,一開(kāi)始就將協(xié)議所有的命令和交互過(guò)程都實(shí)現(xiàn)是非常困難的,也是不必要的。NEL提供了一種機(jī)制,允許開(kāi)發(fā)者將一個(gè)協(xié)議所有未做全面分析的命令作為一個(gè)統(tǒng)一的事件來(lái)處理,并基于這個(gè)事件來(lái)定義攻擊規(guī)則,從而使得協(xié)議分析的開(kāi)發(fā)成為一個(gè)漸進(jìn)的過(guò)程,開(kāi)發(fā)重點(diǎn)和次序可以根據(jù)攻擊的危害程度和影響范圍、人力資源狀況等多方面因素靈活調(diào)整。這種漸進(jìn)式的協(xié)議分析開(kāi)發(fā)模式對(duì)于應(yīng)對(duì)復(fù)雜多變的網(wǎng)絡(luò)攻擊是十分必要的。

為了有效利用己有的C語(yǔ)言代碼,NEL平臺(tái)提供了無(wú)縫使用C語(yǔ)言實(shí)體的功能,開(kāi)發(fā)者可以在NEL中無(wú)縫地調(diào)用C語(yǔ)言的代碼。在這種模式下,C語(yǔ)言是一個(gè)宿主語(yǔ)言,而NEL是一個(gè)寄生語(yǔ)言。采用NEL構(gòu)建攻擊防御系統(tǒng),可以有效復(fù)用大量己有C代碼,迅速增強(qiáng)和擴(kuò)展系統(tǒng)的協(xié)議分析和攻擊檢測(cè)能力。

NEL平臺(tái)高度的可擴(kuò)展性使得采用NEL構(gòu)造的產(chǎn)品可以快速開(kāi)發(fā)出針對(duì)新的應(yīng)用、漏洞和攻擊的檢測(cè)規(guī)則和防護(hù)方案,消除伴隨著新的應(yīng)用協(xié)議及漏洞不斷增長(zhǎng)而帶來(lái)的安全風(fēng)險(xiǎn)。

(3)高效的分析檢測(cè)過(guò)程

NEL的協(xié)議分析和攻擊檢測(cè)過(guò)程在運(yùn)行期是緊禍合在一起的,因此具有非常高的運(yùn)行效率。

對(duì)于攻擊檢測(cè)及防御系統(tǒng)開(kāi)發(fā)來(lái)說(shuō),攻擊描述語(yǔ)言的檢測(cè)準(zhǔn)確性、擴(kuò)展性、運(yùn)行效率以及開(kāi)發(fā)模式等方面的因素對(duì)于產(chǎn)品的成功是至關(guān)重要的。NEL在攻擊描述能力、檢測(cè)準(zhǔn)確性、運(yùn)行效率和開(kāi)發(fā)效率等諸多方面都具有明顯優(yōu)勢(shì),非常適合應(yīng)用于高速網(wǎng)絡(luò)環(huán)境中的深度防御產(chǎn)品(如IPs、應(yīng)用防火墻等)的開(kāi)發(fā)。

開(kāi)發(fā)過(guò)程

基于NEL的攻擊檢測(cè)系統(tǒng)的開(kāi)發(fā),主要分為六個(gè)過(guò)程:引擎初始化、連接初始化、協(xié)議解析、事件分析、連接釋放和引擎關(guān)閉。

(1)引擎初始化。由“協(xié)議分析引擎的初始化”和“事件分析引擎的初始化”兩部分構(gòu)成。前者利用c語(yǔ)言來(lái)完成,后者則通過(guò)NEL庫(kù)中提供的nel少tab少arseo和nel_fileesparseo兩個(gè)函數(shù),來(lái)讀入開(kāi)發(fā)人員定義的NEL規(guī)則(包括協(xié)議規(guī)則和攻擊規(guī)則來(lái)完成。

(2)連接初始化。由“協(xié)議分析引擎的初始化”和“事件分析引擎的初始化”兩部分構(gòu)成。前者直接在C語(yǔ)言中完成,而后者則是通過(guò)調(diào)用nel_env_alloco來(lái)完成的。

(3)協(xié)議解析。由協(xié)議分析引擎單獨(dú)完成的。這部分工作的目的,是對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行分析,并將分析的結(jié)果保存在一個(gè)結(jié)構(gòu)中(我們稱(chēng)其為“協(xié)議元素”),為此后的事件分析提供輸入。

(4)事件分析。由協(xié)議分析引擎調(diào)用nel_env--analysiso初始化,然后由事件分析引擎來(lái)完成的。事件分析引擎將根據(jù)內(nèi)部的分析表、分類(lèi)器來(lái)判斷輸入的協(xié)議結(jié)構(gòu)是否會(huì)產(chǎn)生攻擊事件。如果是攻擊、或者疑似攻擊,則調(diào)用協(xié)議分析引擎中定義的函數(shù),采取適當(dāng)?shù)膭?dòng)作(阻斷、丟棄、審計(jì)和報(bào)警等)。

“規(guī)則”用來(lái)定義“事件”之間的關(guān)系。一個(gè)“規(guī)則”由“規(guī)則左部”、“事件關(guān)系算符”、“規(guī)則右部”和“規(guī)則動(dòng)作”四部分構(gòu)成,規(guī)則一般形如:規(guī)則左部事件關(guān)系算符規(guī)則右部規(guī)則動(dòng)作

“規(guī)則左部”只能是一個(gè)抽象事件;“事件關(guān)系運(yùn)算符,可以是“歸結(jié)”符號(hào)“:”(如有A:B,代表A事件由B事件規(guī)約而成)或者“選擇”符號(hào)“}”(如有A:B{}和A:C{},可以簡(jiǎn)寫(xiě)為A:B{}}C{});“規(guī)則右部”由一系列帶謂詞的事件構(gòu)成,“謂詞”是描述事件或者事件間必須滿(mǎn)足的約束條件的表達(dá)式,謂詞寫(xiě)在事件的后面,用一對(duì)括號(hào)括住,謂詞是可選的,當(dāng)一個(gè)事件沒(méi)有謂詞約束它的時(shí)候,可以省略掉括號(hào);“規(guī)則動(dòng)作”是在事件規(guī)則之后用大括號(hào)“{”和“}”括起來(lái)的NEL語(yǔ)句。在這些語(yǔ)句中可以使用事件變量。規(guī)則中,可以使用$1、$2等指針來(lái)指向“事件變量”,其中‘,$’,后面的序號(hào)表明該事件出現(xiàn)在規(guī)則右部中的序號(hào)。另外我們使用$0指向“連接事件”的“事件變量”。

(5)連接釋放。即對(duì)某一連接相關(guān)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行釋放。我們需要先利用nel_env--deanuP()來(lái)釋放掉保存在事件分析引擎中為該連接保存的所有數(shù)據(jù)結(jié)構(gòu),然后再調(diào)用協(xié)議分析引擎的釋放函數(shù),對(duì)連接數(shù)據(jù)結(jié)構(gòu)進(jìn)行徹底的釋放。

(6)引擎關(guān)閉。最后,調(diào)用neti_en段dealloco來(lái)釋放整個(gè)事件分析引擎,然后協(xié)議引擎釋放自己的數(shù)據(jù)結(jié)構(gòu),這樣就可以關(guān)閉引擎了。