对预处理规则的评价
插件化是很多开源软件采取的,非常流行的扩展方式,例如:
- apache:采用动态共享对象的方式,提供扩展;利用Apache扩展工具(apxs),可以无需重新编译apache,即可加入apache插件;
- nessus:nessus自创了一种叫做nasl的脚本语言来实现差价的扩展,由于其功能的局限,这种语言较受争议;
- nmap:通过NSE(Nmap Script Engine,nmap脚本引擎)实现插件的扩展,使用目前非常流行的lua作为其寄生语言;
- snort:在snort3的代码中,也引入了lua作为扩展语言;
- bro-ids:采用了一种自定义的脚本语言,来扩展对网络流量的处理功能。
与上述开源产品相比,ossec的预处理规则显得非常粗糙,从技术上看,甚至有些画蛇添足,因为:
- ossec的xml规则编写的难度比c语言编写的预处理规则更容易掌握;
- 预处理规则只局限于检测规则,其提供的扩展能力,不见得比在xml规则中定义正则表达式更强大;
- ossec的预处理规则不具备动态编译部署的能力,加入新的预处理规则,必须重新编译ossec的源代码;
- 由于预处理规则c程序的引入,有可能会给ossec加入新的bug,反而造成ossec的不稳定;
而与上述问题相比,预处理规则只能满足对c语言的偏好,所以前景不会太乐观,除非效法nmap做改进。另外,预处理规则出现的真正原因或许是出于商业的考 虑,因为利用预处理规则,Third Brigade公司可以对某些检测功能封闭源代码,直接编译到其商业版中,不用担心技术的泄露。