标题：NEL
NEL语言简介
NEL是东软自主研发出的一种通用攻击描述语言，包括NEL语言规范及其相应的开发环境。NEL的设计目标是为不同类型的入侵检测及防御产品(如网络IDS/IPS、主机IDS/IPS、应用防火墙、应用安全增强模块等)的开发提供一个具有强大描述能力、高度可扩展性和很高代码执行效率的语言平台。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来释放整个事件分析引擎，然后协议引擎释放自己的数据结构，这样就可以关闭引擎了。