前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络入侵检测系统之Suricata(十五)--IPOnly/Radix Tree详解

网络入侵检测系统之Suricata(十五)--IPOnly/Radix Tree详解

原创
作者头像
于顾而言SASE
发布2024-03-20 10:00:23
880
发布2024-03-20 10:00:23
举报
文章被收录于专栏:入侵检测系统入侵检测系统

Suricata中对纯ip的加载是单独作为一个模块的,称之为IpOnly规则。

那么,本文将以三个方面来介绍如何对程序进行优化。

  • 什么是IpOnly规则
  • IpOnly规则如何组织
  • IpOnly规则如何匹配

1 什么是IpOnly规则

IpOnly规则在规则解析后,由SignatureIsPDOnly函数进行判断, 不满足IpOnly的规则大致可分为以下情况:

  • 未知协议,即不在AppProtoEnum结构体中定义的协议
  • 含模式匹配,即存在option带content,或pcre等等
  • 地址中存在非规则,即!1.1.1.1 any -> any any
  • 与IpOnly不兼容的一些option,例如DETECT_FLOWBITS(需要有setbits)

2 IpOnly规则如何组织

IpOnly规则比较特殊,一般认为命中源和目的ip地址,再校验以下其他头部信息,就可以认为该报文 可以命中这条规则。那么我们的重点就放在了如何组织ipv4,ipv6地址,并高效的进行匹配。

这里面suricata借鉴了BSD操作系统中路由表查找算法-Radix Tree,路由表查找本质就是对目的ip进行 最长掩码匹配,而索引到路由表中的下一跳。那么,我们先看看radix tree的基本思想。

Radix Tree本质是一个二叉树,由内部节点和外部节点,内部节点用于指示需要进行bit test的位置,并根据测试结果决定查找方向,外部节点则用于存储键值。

Suricata具体实现在IPOnlyPrepare中,它分别建立了4个Radix Tree,代表源ipv4/6,目的ipv4/6。

精确IP添加的步骤

  1. 将插入的节点放在树中匹配,如果键值一样则挂在掩码链表的合适位置,否则就要记录它们第一次出现不同bit的位置。
  2. 公共相同掩码切分,看下面这个图比较好理解,旧节点和新节点第一次不一样的地方是148:

插入前:

插入后:

网段IP添加的步骤

  1. 类似于192.171.192.0/18这种网段形式的ip插入,首先先将ip和mask作个与运算,生成的key不断进行进行bit test找到叶子节点,然后最大公共相同的位置,生成新的父节点。这一步和精确ip的插入是一样的。
  2. 如果当前网段ip的掩码小于或等于父节点的bit位置,那么我们可以认为这个叶子结点可以覆盖父节点下所有的节点,因此新增父节点的netmask为18。

3 IpOnly规则如何匹配

匹配在函数SCRadixFindKeyIPV4BestMatchSCRadixFindKeyIPV6BestMatch中。 查找步骤可分为3步,寻叶-》辩重-》回溯:

  • 不停的bit test进行左右路径深入,终结于某个叶子节点后,判断该叶子节点是否与查找键相同。
  • 如果第一步骤精确匹配不到,则在这个叶子节点的重复键链表中查找掩码匹配的可能,掩码是按从大到小进行排列:192.168.0.0/16和192.168.0.0/20
代码语言:javascript
复制
//查掩码链表
SCRadixPrefixContainNetmaskAndSetUserData(node->prefix, netmask_node->netmasks[j], 0, user_data_result))
//精确匹配
SCRadixPrefixContainNetmaskAndSetUserData(node->prefix, key_bitlen, 1, user_data_result)
  • 如果第二步骤也没有找到,那么需要向父亲节点回溯,将查找键和该掩码进行逻辑与运算,产生一个新的查找键再进行查找,因为树顶代表的是大家拥有前缀一致的ip地址,那么如果存在该中间节点掩码列表中掩码够小,那么是存在网络匹配的可能的。

4 Reference

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 什么是IpOnly规则
  • 2 IpOnly规则如何组织
  • 3 IpOnly规则如何匹配
  • 4 Reference
相关产品与服务
网络入侵防护系统
网络入侵防护系统(Network Intrusion Prevention System,NIPS),是基于腾讯安全服务内部数百条业务线的运维经验积累和大数据处理能力的结合,通过旁路部署的方式,提供了网络层 ACL (访问控制)和日志审计功能,解决云平台监管、ACL 控制、安全治理等问题,并辅助客户满足网安法,合规性要求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档