0x01缘由

       目前的产品开发过程中,涉及到了对应用层协议类型的检测。考虑到要构建高效的规则匹配引擎,于是再次研究了snort的规则引擎。
     主要目的还是开阔下设计思路和借鉴一些方法。

0x02 规则制定

        良好的规则设计是今后配置规则和扩展的基础。
        Snort 采用数据结构 RuleTreeNodes(RTN) 和 OptTreeNodes(OTN) 存储规则数据, 形成二维链表结构。有关 Snort 所用到的数据结构参考源码数据包 rules. h 文件。RTNs 组成横向链表, 每个RT N节点下又由多个OTNs组成纵向链表, 进而构成1棵规则树, 这样每1个OTN节点就对应1条规则。规则逻辑图如下图所示。1个RTN对应着若干个OTN, 这就是Snort组织规则库的特点。如果在1个规则文件中定义了N条检测X攻击活动的规则, 而且它们具有相同的源/目的的IP(Src/Des IP)和端口号(Src/ Des Port), 为了加快检测速度, 这N条检测规则就共用1个链表头(chain header) , 其中记录了源/目的 IP 和端口号, 而每条规则的检测特征将保存到不同的链表选项(chain option) 结构中, 这样在进行规则检测时只检测 1 次 RTN。
     摘录:Snort规则库的研究与改进_王喆.pdf
    
     

0x03 规则构建

       规则树的生成,如果Snort以网络入侵检测的模式运行,在对网络数据包进行检测前,首先要对规则文件(snort.conf)进行解析,建立规则库。在组织规则库时,首先按规则类型(规则行为:Alert,Pass,Log,Activation,Dynamic)分类,针对每种规则类型按协议类型(Ip/Tcp/Icmp/Uolp)分成相应链表。所有的规则都会被分配到这些链表中。通过源码分析,这一过程用到的主要函数是ParseRulesFile(),ParseRule(),Pro-cessHeadNode()和ParseRuleOptions()。ParseRule()处理单个规则。它对规则语句进行分解,提取规则类型,如果是alert,pass,log,active或dynamic类型,则利用ProcessHeadNode()和ParseRuleOptions(),按协议的不同完成相应链表头和链表选项的添加,从而形成规则树。在按规则类型进行处理还有preprocess,output等类型,遇到这些类型的规则,则调用相应的函数对其进行预处理插件或者输出插件的解析。
       摘录:Snort规则及规则处理模块分析.pdf

0x04 规则优化

       在 Snort 的入侵检测模式中,基于规则的模式匹配是其检测的核心机制。它的入侵检测流程分成
两大步:第一步是规则的解析流程,包括从规则文件中读取规则和在内存中组织规则;第二步是使
用这些规则进行匹配。为了提高规则匹配的速度, Snort 采用了 Boyer-Moore 字符串匹配算法、二维
列表递归检索( RTN 和 OTN)以及函数指针列表等方法。在保持这些方法的基础上,本文试图对规
则匹配的次序进行动态调整,以提高数据包匹配效率,从而提高 Snort 的整体性能。

0x05 规则匹配

     利用高效的AC匹配算法;
     针对跨包是将一条流多个包组合层一个大包,不支持跨包;

0x06 总结

     1、规则引擎的构建需要以上几个步骤完成;良好的规则设计可以方便以后针对漏洞的暴露添加规则;
     2、规则高效的数据结构组织;
     3、如何优化规则匹配算法;
     4、对于跨包的检测;
     

snort规则检测引擎初探相关推荐

  1. Snort规则检测引擎--架构解析

    1. 规则头和规则选项 snort将所有已知的攻击以规则的形式放在规则库中,规则库中的每条规则条目分为两个部分:规则头(RuleHeader)和规则选项(RuleOption). 规则头包括:规则行为 ...

  2. 如何编写snort的检测规则

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 摘要  ...

  3. SNORT入侵检测系统

    0x00 一条简单的规则 alert tcp 202.110.8.1 any -> 122.111.90.8 80 (msg:"Web Access"; sid:1) ale ...

  4. Snort规则入门学习

    Snort规则学习 Snort 是一个开源入侵防御系统(IPS).Snort IPS 使用一系列规则来帮助定义恶意网络活动,并利用这些规则来查找与之匹配的数据包,并为用户生成警报. 下面来学习一下sn ...

  5. Web流量检测与绕过(基于Snort规则)

    Web流量检测与绕过 Snort Snort概述 Snort规则学习 Snort规则编写 流量特征处理 消除流量特征 检测特征是否消除 实战 Snort 我在上一篇博客已经讲述,如何进行windows ...

  6. 【转载】用Snort巧妙检测SQL注入和跨站脚本攻击

    脚本攻击是最近网络上最疯狂的攻击方法了,很多服务器配置了先进的硬件防火墙.多层次的安全体系,可惜最后对80端口的SQL注入和跨站脚本攻击还是没有办法抵御,只能看着数据被恶意入侵者改的面目全非而毫无办法 ...

  7. 基于多种流量检测引擎识别pcap数据包中的威胁

    在很多的场景下,会需要根据数据包判断数据包中存在的威胁.针对已有的数据包,如何判断数据包是何种攻击呢? 方法一可以根据经验,对于常见的WEB类型的攻击,比如SQL注入,命令执行等攻击,是比较容易判断的 ...

  8. 30 snort 规则

    项关键字. msg - 在报警和包日志中打印一个消息. logto - 把包记录到用户指定的文件中而不是记录到标准输出. ttl - 检查ip头的ttl的值. tos 检查IP头中TOS字段的值. i ...

  9. 红与蓝:现代Webshell检测引擎免杀对抗与实践

    上半年Webshell话题很火,业界举办了数场对抗挑战赛,也发布了多篇站在安全产品侧,着重查杀思路的精彩文章,但鲜有看到以蓝军视角为主的paper. 作为多场挑战赛的参赛者及内部红蓝对抗的参与者,笔者 ...

最新文章

  1. sed linux 命令
  2. Python中的find()
  3. 【数据结构与算法】之深入解析“三数之和”的求解思路与算法示例
  4. SAP cross distribution chain status在Fiori应用中的draft handling
  5. excel打开空白_啥?下载的文件显示“文件已损坏,无法打开”?
  6. python打印长方形_利用python打印出菱形、三角形以及矩形的方法实例
  7. 345所开设人工智能本科专业高校名单大全
  8. 俄美就《中导条约》磋商 普京:不希望进行军备竞赛
  9. 微服务与SpringCloud
  10. 并发编程3-线程调度
  11. Java败给Python?不!我有话说
  12. 大数据可视化有哪些分析步骤
  13. C语言编程QQ管理系统,c语言制作学生管理系统srrpqq67.doc
  14. 面试必备:零拷贝详解
  15. Cracking the Wall of Confinement: Understanding and Analyzing Malicious Domain Take-downs
  16. 智能枕头里究竟藏有什么“智能”故事?
  17. windows操作系统---1
  18. 足球数据API接口 - 【足球赛事分析数据】API调用示例代码
  19. ML-Agents案例之双人足球
  20. ERROR 1118 (42000): Row size too large (8126). Changing some columns to TEXT or BLOB or using ROW_

热门文章

  1. 【项目管理】软件项目外包常见的3个坑
  2. android textview 用html设置字体
  3. Python机器学习基础篇二《监督学习》
  4. SpringSecurity(三)授权流程
  5. 从源码角度拆解SpringSecurity之C位的AuthenticationManager
  6. 为什么有的大公司代码也很烂?
  7. Bad Request:Your browser sent a request that this server could not understand.
  8. 推荐一个强大的开源动态线程池项目
  9. Jupyter Notebook 如何安装 + 使用?【审核5次重磅发布】
  10. 企业级BPM之微服务架构演进