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

簡介

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

概況

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

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

優(yōu)勢

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

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

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

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

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

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

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

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

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

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

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

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

(3)高效的分析檢測過程

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

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

開發(fā)過程

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

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

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

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

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

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

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

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

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