NEL語言簡介
NEL開發環境(以下簡稱NEL平台)可以大大提高協定分析和攻擊檢測規則開發的效率,極大地降低開發團隊的溝通成本和代碼維護代價。同時NEL平台提供了無縫使用C語言中的常量、變數、結構、函式等語言實體的能力,從而可以復用大量己有的C程式代碼,有效縮短產品的面世時間以及更新升級周期。NEL是為了解決大型攻擊檢測防禦系統在傳統的開發過程中所面臨的難題而提出的。
概況
基於NEL平台進行大規模入侵檢測防禦產品 (Intrusionpreventionsystem,IPs)的開發能夠有效提高系統的開發效率。基於NEL平台,可以將基於協定分析的攻擊檢測任務劃分為協定分析的開發、攻擊檢測規則的制訂和語言平台的開發這三個子任務,每個子任務分別由協定分析小組、攻擊分析小組、和描述語言開發小組來承擔。這樣,即使系統增加了很多的協定、制訂了很多的攻擊規則、描述語言的語法不斷增強,每個子系統的擴展以及規模不斷增長也不會影響到其他開發小組中的開發人員,使得構造一個大規模的攻擊檢測防禦系統成為可能。
採用NEL平台不僅解決了大型攻擊檢測防禦產品的分層次開發和系統可擴展性的難題,而且由於NEL在運行期將“協定分析”和“攻擊檢測”緊密禍合在一起,因此開發出的系統具有非常高的運行效率。NEL平台全新開發模式以及在代碼執行速度等方面的諸多技術優勢使得NEL平台成為一個理想的高性能攻擊檢測防禦產品開發平台。
NEL語言的優勢
NEL語一言具有強大的技術優勢,主要體現在以下幾點:
(1)強大的攻擊描述能力
NEL是一種過程型程式語言,提供了很多高級語言中刁‘有的過程性手段,具有強大的描述複雜攻擊的能力。NEL中可以定義各種數據類型、常量、變數、數組、表達式、函式等等,這些特性使得NEL達到了與C語言相當的描述能力。同時,NEL的語法與C非常相近,在NEL中可以定義一些抽象的語言實體(變數、函式),然後以過程性的方式操作這些語言實體來完成運算。
NEL引入了一個新的語言元素:事件。事件指開發者或NEL語言本身定義的攻擊檢測過程中檢測到的活動:檢測到一個TCP級的數據報、一個HTTP的請求或一次SMTP通信等等都可以被定義為一個事件。針對不同的套用協定,開發人員可以採用NEL中的事件在任何層次上(數據包層次、協定層次以及更高的層次上)來定義事件並基於事件來制訂攻擊檢測規則。
NEL中事件的引入為開發人員制訂攻擊檢測規則提供了極大的靈活性。
NEL中的“事件”概念使得在攻擊檢測系統的開發過程中,協定分析開發人員只要專注於“基礎協定事件的定義和產生”,協定分析的開發完成後,協定分析的知識即被固化到系統中;攻擊檢測規則開發人員可以專注於“攻擊事件的定義”,而無需知道協定分析的細節。事件的引入使得協定分析的開發和攻擊檢測規則的開發被劃分成兩個完全獨立的層次。而對於沒有將協定分析開發和攻擊檢測規則開發分成兩個層次的語言,攻擊規則開發人員在編寫攻擊的檢測規則時,必須對協定的細節有深入了解,而且協定的分析過程必須體現在每一條規則中,不僅代碼變得非常龐雜,系統運行時攻擊檢測的效率也會受到非常大的影響。
NEL不僅引入了“事件”這一概念,還引入了對事件自身和事件之間的邏輯約束關係,比如對事件進行限定和歸約等操作。事件和事件邏輯約束關係的引入使得NEL具有了強大的攻擊描述能力,同時提供了攻擊檢測所必須的抽象性和概括性,使得NEL開發者可以方便地編寫基於協定異常、漏洞特徵等不同類型的攻擊檢測規則,由於檢測規則具有對協定上下文的精確理解,包括了漏洞特徵的描述,因此具有非常高的檢測準確性。
(2)良好的可擴展性
NEL平台以及NEL平台之上的協定分析模組和攻擊檢測規則都可以不斷地擴展:NEL平台自身的擴展可以為開發者提供越來越強大的協定和攻擊描述、分析和防禦能力,使得攻擊檢測具有越來越高的準確率和性能,而這種擴展對平台上己經開發出的協定分析模組和攻擊檢測規則不會有任何影響;同樣,開發者也可以不斷進行協定分析模組的擴充,以提供更強的針對特定協定的攻擊檢測能力,而這種擴充對於協定之上己有的攻擊檢測規則也不會有任何影響。
在現實世界中,許多協定都是非常複雜的,受時間和人力投入的制約,在攻擊檢測系統的開發過程中,一開始就將協定所有的命令和互動過程都實現是非常困難的,也是不必要的。NEL提供了一種機制,允許開發者將一個協定所有未做全面分析的命令作為一個統一的事件來處理,並基於這個事件來定義攻擊規則,從而使得協定分析的開發成為一個漸進的過程,開發重點和次序可以根據攻擊的危害程度和影響範圍、人力資源狀況等多方面因素靈活調整。這種漸進式的協定分析開發模式對於應對複雜多變的網路攻擊是十分必要的。
為了有效利用己有的C語言代碼,NEL平台提供了無縫使用C語言實體的功能,開發者可以在NEL中無縫地調用C語言的代碼。在這種模式下,C語言是一個宿主語言,而NEL是一個寄生語言。採用NEL構建攻擊防禦系統,可以有效復用大量己有C代碼,迅速增強和擴展系統的協定分析和攻擊檢測能力。
NEL平台高度的可擴展性使得採用NEL構造的產品可以快速開發出針對新的套用、漏洞和攻擊的檢測規則和防護方案,消除伴隨著新的套用協定及漏洞不斷增長而帶來的安全風險。
(3)高效的分析檢測過程
NEL的協定分析和攻擊檢測過程在運行期是緊禍合在一起的,因此具有非常高的運行效率。
對於攻擊檢測及防禦系統開發來說,攻擊描述語言的檢測準確性、擴展性、運行效率以及開發模式等方面的因素對於產品的成功是至關重要的。NEL在攻擊描述能力、檢測準確性、運行效率和開發效率等諸多方面都具有明顯優勢,非常適合套用於高速網路環境中的深度防禦產品(如IPs、套用防火牆等)的開發。
基於NEL語言的開發過程
基於NEL的攻擊檢測系統的開發,主要分為六個過程:引擎初始化、連線初始化、協定解析、事件分析、連線釋放和引擎關閉。
(1)引擎初始化。由“協定分析引擎的初始化”和“事件分析引擎的初始化”兩部分構成。前者利用c語言來完成,後者則通過NEL庫中提供的nel少tab少arseo和nel_fileesparseo兩個函式,來讀入開發人員定義的NEL規則(包括協定規則和攻擊規則來完成。
(2)連線初始化。由“協定分析引擎的初始化”和“事件分析引擎的初始化”兩部分構成。前者直接在C語言中完成,而後者則是通過調用nel_env_alloco來完成的。
(3)協定解析。由協定分析引擎單獨完成的。這部分工作的目的,是對網路數據包進行分析,並將分析的結果保存在一個結構中(我們稱其為“協定元素”),為此後的事件分析提供輸入。
(4)事件分析。由協定分析引擎調用nel_env--analysiso初始化,然後由事件分析引擎來完成的。事件分析引擎將根據內部的分析表、分類器來判斷輸入的協定結構是否會產生攻擊事件。如果是攻擊、或者疑似攻擊,則調用協定分析引擎中定義的函式,採取適當的動作(阻斷、丟棄、審計和報警等)。
“規則”用來定義“事件”之間的關係。一個“規則”由“規則左部”、“事件關係算符”、“規則右部”和“規則動作”四部分構成,規則一般形如:
規則左部事件關係算符規則右部規則動作;
“規則左部”只能是一個抽象事件;“事件關係運算符,,可以是“歸結”符號“:”(如有A:B,代表A事件由B事件規約而成)或者“選擇”符號“}”(如有A:B{}和A:C{},可以簡寫為A:B{}}C{});“規則右部”由一系列帶謂詞的事件構成,“謂詞”是描述事件或者事件間必須滿足的約束條件的表達式,謂詞寫在事件的後面,用一對括弧括住,謂詞是可選的,當一個事件沒有謂詞約束它的時候,可以省略掉括弧;“規則動作”是在事件規則之後用大括弧“{”和“}”括起來的NEL語句。在這些語句中可以使用事件變數。規則中,可以使用$1、$2等指針來指向“事件變數”,其中‘,$’,後面的序號表明該事件出現在規則右部中的序號。另外我們使用$0指向“連線事件”的“事件變數”。
(5)連線釋放。即對某一連線相關的數據結構進行釋放。我們需要先利用nel_env--deanuP()來釋放掉保存在事件分析引擎中為該連線保存的所有數據結構,然後再調用協定分析引擎的釋放函式,對連線數據結構進行徹底的釋放。
(6)引擎關閉。最後,調用neti_en段dealloco來釋放整個事件分析引擎,然後協定引擎釋放自己的數據結構,這樣就可以關閉引擎了。