snort
对snort的源码配置防攻击等机制进行剖析
guoguangwu
这个作者很懒,什么都没留下…
展开
-
snort的gtp解码源码分析
GTP 全称为GPRS Tunneling Protocol即GPRS隧道协议。GTP(GPRS隧道协议)用于建立核心通信网络GSN(GPRS服务节点)之间的通道。snort提供的GTP解码和预处理器提供通过GTP解决对这些网络的入侵企图的方法。它还使检测新攻击更容易。GTP解码器提取GTP PDU内的有效载荷;GTP预处理器检查所有信令消息,并提供关键字以供进一步检查。启用和配置解码器后,解码器将剥离GTP头并解析底层IP/TCP/UDP封装的数据包。因此,所有规则和检测工作就像没有GTP头一样。原创 2021-07-31 21:35:44 · 425 阅读 · 0 评论 -
snort 文件类型识别原理分析
snort的文件规则保存在file_magic.conf中。以pdf为例:file type:PDF; id:22; category:PDF files; msg:"PDF file "; rev:1; content:| 25 50 44 46|; offset:0; file type:PDF; id:282; category:PDF files; msg:"PDF file "; rev:1; content:| 25 50 44 46 2D 31 2E 30|; offset:0;原创 2021-05-09 14:14:16 · 959 阅读 · 0 评论 -
snort Boyer-Moore (bm)字符串搜索算法源码分析
https://baike.baidu.com/item/BM%E7%AE%97%E6%B3%95/19457300?fr=aladdin上面是关于bm算法的原理介绍接下来我基于snort-2.9.5分析源码实现,源码文件主要涉及到mstring.h|c、sp_pattern_match.h|c。先看一下数据结构设计typedef struct _PatternMatchData...原创 2019-03-10 13:05:15 · 636 阅读 · 0 评论 -
snort 源码分析之模式匹配引擎
snort是一款著名的开源IPS,其主页地址:点击打开链接。更详细的介绍网上很多,可自行搜索了解。本博客主要介绍snort-2.9.5版本的模式匹配引擎的加载和匹配。 模式匹配引擎主要使用多模式匹配算法和单模式匹配算法。先由多模式匹配算法大概确定有哪些规则可能匹配成功,然后再通过单模式匹配算法去精确匹配。其配置格式如下:config detection: search-me...原创 2017-03-20 16:06:05 · 9158 阅读 · 3 评论 -
snort 源码分析之 模式匹配引擎接口 SearchAPI 源码分析(AC算法)
/* * 基于snort-2.9.5的源码进行分析 * src/preprocessors/str_search.h|.c *//* * t_search 结构用于管理SearchAPI对象 */typedef struct tag_search{ /* * mpse 由mpseNew函数创建 */ void *mpse; /*...原创 2019-03-08 18:21:13 · 1579 阅读 · 1 评论 -
snort 规则选项自定义详细分析(源码)
https://mp.csdn.net/postedit/88376541前面分析过content的规则选项主要流程包括注册、解析接下来我一个实例进行分析如何增加一个自定义的规则选项首先进入RegisterRuleOptions函数中,编写自己的注册接口函数SetupTest, 规则选项关键字test, ,初始换函数TestInit, TestRuleParse解析该字段的函数,...原创 2019-03-10 14:12:11 · 2062 阅读 · 0 评论 -
Boyer-Moore-Horsepool snort 源码实现 针对小模式串
该算法适合特别短的串, 就没有必要构造bm算法的好后缀表,节约空间源码文件src/dynamic-plugins/sf_engine/bmh.c|htypedef struct {/* 模式串*/ unsigned char *P; /* 模式串 忽略大小写*/ unsigned char *Pnc; /* 模式串长度*/ int M; /* 坏...原创 2019-03-10 15:02:39 · 438 阅读 · 0 评论 -
snort 内存池源码实现分析
源码mempool.h|csf_sdlist_types.h内存池涉及几个动作 :初始化、分配、释放、销毁、清空底层使用两个链表实现内存的分配used_list与释放回收free_listint mempool_init(MemPool *mempool, PoolCount num_objects, size_t obj_size);int mempool_destroy(M...原创 2019-03-10 15:54:36 · 465 阅读 · 0 评论 -
snort string vector 实现 源码分析
涉及文件 sfutil/strvec.h|c字符串类型的数组:默认构造, 数组为空,元素个数为0。调用增加接口时, 会调用realloc增加2个元素空间,与stl的内部实现略有不同。提供初始化、增加、获取、容器拷贝等。该工具在daq模块使用的时候使用。数据结构定义typedef struct { /* 字符串数组*/ char** v; /* 数组中下一个放置...原创 2019-03-11 10:46:04 · 255 阅读 · 0 评论 -
snort 源码分析之规则结构分析(一)
snort中比较复杂的结构很多,今天和大家分享一下snort的规则设计的数据结构:规则头和规则选项先从一条规则实例开始分析:alert tcp $HOME_NET any -> $EXTERNAL_NET $HTTP_PORTS (msg:"MALWARE-CNC GzWaaa outbound data connection"; flow:to_server,established...原创 2019-03-10 19:28:54 · 3423 阅读 · 3 评论 -
snort源码分析之规则结构分析(二)
上篇对照snort的规则简单介绍了一下那些规则字段接下来看一下规则头和规则选项的数据结构/* 规则头匹配函数链表*/typedef struct _RuleFpList{ /* context data for this test */ /* 目前规则头没有使用 */ void *context; /* rule check function po...原创 2019-03-10 22:53:53 · 2382 阅读 · 0 评论 -
snort 源码分支之规则结构分析(三)
前面介绍了规则头数据结构分析、解析和匹配过程。接下来分析规则选项的数据结构和解析、匹配过程。/* * 规则匹选项配数据结构 */typedef struct _OptFpList{ /* context data for this test */ /* 匹配时传入的参数option_data, 例如 PatternMatchData*/ void *conte...原创 2019-03-12 20:19:35 · 970 阅读 · 1 评论 -
snort 源码分析之规则结构分析(四)
解析完一条规则后,会调用FinishPortListRule函数将该规则进行归类。归类的原则是 Finish adding the rule to the port tables 1) find the table this rule should belong to (src/dst/any-any tcp,udp,icmp,ip or nocontent) 2) fi...原创 2019-03-25 23:13:19 · 869 阅读 · 0 评论 -
snort 源码分析之基础数据结构 链表
前面的很多里面涉及到snort的基础数据结构, snort里面很多数据结构都是自己实现的比如今天要讲解的链表,后面要讲的哈希表的实现。具体文件 sflsq.h|c链表的数据结构定义typedef void * NODE_DATA;/* * 节点定义, 队列、栈、链表(双向) */typedef struct sf_lnode{ struct sf_lnode...原创 2019-03-13 11:49:05 · 523 阅读 · 0 评论 -
snort 源码分析之基础数据结构 哈希表
哈希表的种类很多,普遍的实现是链式哈希表(解决哈希冲突的问题)。snort也是这样实现的, 每个bucket是一个双向链表。每次插入和查询某个key value时, 如果成功都会将该元素放置在链表头, 作为缓存加速下次使用。涉及的文件有sgghash.h|c、sfhashgcn.h|c。/* * 哈希表控制对象 */typedef struct _SFHASHFCN { /...原创 2019-03-13 15:46:37 · 624 阅读 · 0 评论 -
snort 源码分析之规则文件解析- ipvar变量
snort的规则文件系统中包含很多配置,其中一些配置依赖于其他的配置项,使得snort规则解析分为两步,第一步解析配置的变量。例如ipvar HOME_NET any 这是一个ip变量的设置,关键字ipvar 、HOME_NET :变量名、any :变量值;定义完之后,就可以在规则中使用,例如alert tcp $EXTERNAL_NET any -> $HOME_NET $HTT...原创 2019-03-26 23:51:06 · 1184 阅读 · 0 评论