| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> snort源码分析 -> 正文阅读 |
|
[系统运维]snort源码分析 |
目的对 实验平台
由于才疏学浅,所以先去百度找了工作流程的原理来方便阅读, Snort 工作流程分为以下四个主要部分: 1、包捕获/解码引擎:首先,利用libpcap从网卡捕获网络上的数据包,然后数据包经过解码引擎填入到链路层协议的包结构体中,以便对高层次的协议进行解码,如TCP和UDP端口。 2、预处理器插件:接着,数据包被送到各种各样的预处理器中,在检测引擎处理之前进行检查和操作。每个预处理器检查数据包是否应该注意、报警或者修改某些东西。 3、规则解析和检测引擎:然后,包被送到检测引擎。检测引擎通过各种规则文件中的不同选项来对每个包的特征和包信息进行单一、简单的检测。检测引擎插件对包提供额外的检测功能。规则中的每个关键字选项对应于检测引擎插件,能够提供不同的检测功能。 4、输出插件:Snort通过检测引擎、预处理器和解码引擎输出报警。 详细工作流程: 一、包捕获/解码引擎: 1、数据包捕获: Snort通过两种机制来满足网络流量的需要:将网卡设置为混杂模式;利用libpcap从网卡捕获网络数据包。 网卡的默认工作方式是忽略所有不是自己的MAC地址为目的地址的流量。通过将网卡设置成混杂模式,可以监听网络中的所有流量。 数据包捕获函数库是一个独立的软件工具,数据包捕获库函数能直接从网卡获取数据包。Snort就是通过调用该库函数从网络设备上捕获数据包。它工作在OSI模型的数据链路层。在不同的平台上使用Snort系统,需要安装不同版本的Libpcap,比如在Linux和Unix系统下需要安装Libpcap,而在Windows系列系统下,就需要安装Winpcap。 2、包解码: 对已经到达网卡并且被lipcap库函数捕获的数据包,Snort需调用解码引擎对数据链路层的原始数据包进行解码。Snort能够识别以太网、802.11(无线局域网协议)、令牌环以及诸如IP、TCP和UDP等高层协议。Snort将捕获的数据包解析后,存储在内存中指针指向的数据结构中。 二、预处理器: Snort卓越的速度源于简单的规则匹配,如果只对每个包进行数字和字符串的匹配,处理性能就能适应快速的高负载网络。这种检测系统的缺点是,如果攻击模式很常见,就会产生很多误报。如果模式过于特殊,又会产生漏报。造成这些缺陷的原因是特征语言的表达能力有限或IDS对协议的分析不够,一些IDS通过复杂的方法解决这一问题。它们有些使用协议异常检测来对不符合协议规范的包报警,有些则保持连接状态,并只对处于以连接TCP会话中的包报警。 Snort则通过预处理器来实现这些功能,Snort有多个预处理器,包括frag2,stream4,http_decode,Telnet_negotiation,portscan,rpc_decode等常用的预处理器。这些预处理器的主要功能为:1)包重组;2) 协议解码;3) 异常检测;。 1、包重组: 基于特征的检测将包数据和定义良好的模式进行匹配。但是不能对跨包的数据进行检测。通过frag2插件将分片重组到一个完整包中,可以确保攻击者不能用IP分片来躲避检测。通过stream4插件进行流重组,我们可以用单包特征机制在TCP会话中跨越多个包进行模式匹配。最后,通过stream4的状态维护功能,特征匹配可以具备一些智能,来判断哪些包应该丢弃,哪些包处于链接中。用一句话总结,包重组预处理器帮助Snort检测匹配数据分布在多个包中的攻击。 2、协议解码: 基于规则的检测提供简单的串/位匹配的功能,但无法检测HTTP协议中不同形式的URL,除非使用无限大的规则集。 http_de-code预处理器帮助Snort在规则匹配前规范化URL。简单的规则匹配还可能因为数据中间插入的协议信息而失败。Telnet_negoti-ation和rpc_decode预处理器去除数据中不应该进行模式匹配的部分,rpc_decode预处理合并RPC消息分片,Telnet_negotiation预处理器去除Telnet的协议协商过程。用一句话总结,协议解码预处理对协议数据进行处理,使串匹配功能在更明确的数据上工作。 3、异常检测: 基于规则的检测由于其简单性而工作可靠。它的过程精确,可以很容易地调整配置减少误报,也容易进行优化。但是,有些攻击无法通过这种模式来检测。Snort发展了协议异常检测:portscan预处理器允许Snort跟踪在一个时间段内接收的扫描类型的包,对超过阈值的情况进行报警;BackOrifice预处理器使Snort不用巨大的规则集就可以检测加密的BackOrifice流量。 三、规则解析和检测引擎: Snort规则是基于文本的,它通常存在于Snort程序目录中或者子目录中。在启动的时候,Snort读取所有的规则文件,并且建立一个三维的链表。Snort使用列表匹配包和检测。 1、规则解析: Snort规则是Snort入侵检测系统的重要组成部分。规则集是snort的攻击特库,每条规则都对应一条攻击特征,snort通过它来识别攻击行为。 每一条规包括两个部分:规则头部(RuleHeader)和规则选项(RuleOption)。规则头包含规则的行为、协议、源地址、目的地址、子网掩码、源和目的端口信息。规则选项包含报警信息以及规则触发时提供给管理员的参考信息。例如: alerttcpanyany->202.203.112.0/24any(content:“proxy-connection”;msg:“proxyuse”😉 这条规则述信息是:对任何访问202.203.112网段,tcp报文中含有proxy-connection的流量报警。在这个例子中,左括号前面是规则头。圆括号内的内容是规则选项,在规则选项中,content后面的内容为关键字,及需要匹配的字符串,msg后面的内容为规则触发时将显示的信息。Snort的规则定义中可以没有规则体,它们只是用来更好地定义所要进行的某种处理(记录、报警、忽略等)的数据包类型。只有当规则中的每一个元素都为真时,才能触发对应的规则动作。 2、检测引擎: Snort把具有相同条件的规则链接到一个集合中,用RTN结构来描述;规则选项对应于规则选项结点OTN(OptionalTreeNode),包含一些特定的检测标志、报警信息、匹配内容等条件,每个选项的匹配子函数(插件)放到FUNC链表中。只有当规则的各个条件都为真时才触发相应的操作。 Snort解析规则时,分别生成TCP、UDP、ICMP和IP这4个不同的规则树,每一个规则树包含独立的三维链表:RTN(规则头),OTN(规则选项)和FUNC(指向匹配子函数的指针)。 当Snort捕获一个数据报时,首先对其解码,然后进行预处理,再利用规则树对数据报进行匹配。在规则树匹配过程中:根据该数据报的IP协议决定与哪个规则树进行匹配;然后与RTN结点依次进行匹配,当与某个规则头相匹配时,接着向下与OTN结点进行匹配。每个OTN结点都包含了一条规则的全部选项,它包含的一组函数指针就是用来实现对这些条件的匹配操作。当检测得知数据报与某个OTN结点的所有条件相符合时,即判断此数据报为攻击报文。 为提高规则匹配的速度,Snort采用了Boyer-Moore字符串匹配算法、二维列表递归检索(RTN和OTN)以及函数指针列表(称为“三维列表”)等方法。 三、输出插件: 抓包引擎从网络获取数据包并发送给分析模块,如果包触发了报警或日志事件,那么数据就发送给相应的输出插件。输出插件在预处理器和抓包引擎执行完之后调用Snort报警和日志子系统时执行。 Snort输出插件的功能可以分为7个部分:版权和头信息;头文件、依赖关系和全局变量;关键字注册;参数分析和函数列表链;数据处理,格式化和存储;处理预处理器参数;清理和退出。下面详细描述插件的各功能。 1、版权和头信息现存的每一个输出插件都含有鲜明的版权信息,版权信息可以由插件开发者自主添加。插件的头详细描述了插件的用途,需要的参数、结果以及其他注释。 2、头文件,依赖关系和全局变量就绝大部分应用而言,文件以及它们之间的依赖关系对程序至关重要,而且要自释其意。全局变量在整个插件的任何部分都可以使用。 3、关键字注册输出插件通过配置文件和命令行引用和调用。用户必须为插件定义关键字并把该关键字连接到Snort,以便分析该关键字时作相应的特殊处理。 4、参数分析和函数列表链大部分插件在声明时需要传递参数,因此有必要写一些代码来处理这些数据。例如,当使用日志功能时,可能需要指定一个用于存储日志的日志文件名。除了分析参数,插件还必须链接Snort主引擎内的函数。 5、数据处理、格式化和存储数据处理、格式化和存储是插件最主要的功能,可以这么说,如果没有数据处理、格式化和存储这些功能,输出插件就不完整,没有用。 6、处理预处理器参数在有预处理器参数存在时,必须写数据处理代码来处理这些参数,这样在分析开始之前,Snort和输出插件就能区分预处理器单元。 7、清理和退出,在绝大多数情况下,需要在插件中包含清理内存、应用连接以及打开套接字的退出处理代码,这样可以提高Snort的执行效率。 Snort能够使用输出插件来汇报和表示数据,Snort支持多种日志格式,包括直接的文本头、PCAP、UNIXsyslog、XML文本数据库和多种关系数据库,这些输出插件使得报警和日志以更加灵活的格式和表现形式呈现给管理员。如果没有输出插件来处理、存储和格式化数据,包分析和流量分析是没有任何意义的。 安装了source-insight4.0开始阅读源码,arp协议的复习首先第一个看到是main函数里面的arguments里面的char指针传递的-a的指令,这个指令的解释是 -a => display ARP packets,
在main函数传递了-a这个参数以后,传递到ParseCmdLine来解析,这个函数是一个死循环,
调用了这个方法,把这个pv.showarp_flag调成了1,顺带一提,这个pv应该是控制操作指令的一个属性,里面包含着很多属性,要做什么操作都看这里控制。 snort->openpcap
在上面的flag调整完以后开始使用openpcap来进行抓包,其中pv是上一步指定的操作的指令结构体,interface是抓包的接口。这里用到了一种设计模式,方便以后的更改,以及程序的可进行的操作,interface接口传进来的是char指针类型。 开始我们看到openpcap这个函数
这里声明了三个变量,第一个是bpfu_int32类型的localnet,还有netmask, 参照一下csdn上面的解释,pcap简单使用和简单解释 - 青儿哥哥 - 博客园 (cnblogs.com)
bpfu_int32就是用来适应不同系统的电脑的数,满足32位的int类型 接着bpf_program就是用一个限定的状态来定义机器的保持?(英语不好) 后面的errorbuff是一个错误的缓冲区。 现在开始使用里面的函数,里面给pv的接口赋值,pcap_lookupdev莺歌就是调用c语言的库,lookupdev顾名思义就是寻找硬件设备,应该是调用主机的本地的函数。 赋值了以后,就使用这个函数获得硬件的解析器
判断完不为空以后就开始使用pcap_lookupnet(pv.interface, &localnet, &netmask, errorbuf) < 0来进行判断,其中的小于零是出现了错误的情况应该是硬件设备没被找到,后面的三个也是错误的判断,假如有错就丢到错误栈里面,这个有点向java的异常抛出
这一步应该是openpcap里面最关键的一步,里面的datalink就是指定了连接的类型下一步就是跳出openpcap这个函数了。 总结一下这个函数,就是初始化openpcap的配置,把错误的东西都给弄走。 snort->setpktprocessor
设置包的进程?(机翻) 这个函数将会返回一个int类型的数据 一开始使用了一个switch的函数
这个datalink类型,是链路层的类型,借用一下csdn上面的
先来看一下第一个DLT_EN10MB里面最关键的函数就是这个DecodeEthPkt,这个函数我觉得就是解码包了,我觉得是snort里面最关键的函数了,其中的grinder翻译为n.碾磨器械; 磨刀匠; 磨工; 磨床; 这个grinder是个方法指针,接收了这个DecodeEthPkt的值,然后强转成pcap_handler类型
下面开始进入decodeEthPkt这个函数,在decode文件下面
这个方法传入了三个参数,第一个是user,第二个是
这个pcap_pkthdr这个结构体,有一个时间戳,还有捕捉的长度,还有包的长度。csdn上面某文章的说法–因为在某些情况下你不能保证捕获的包是完整的,例如一个包长1480,但是你捕获到1000的时候,可能因为某些原因就中止捕获了,所以caplen是记录实际捕获的包长,也就是1000,而len就是1480。 后面的是个u_char类型是传入的包 传入的数据搞定了,看一下初始化的内容
里面调用了
其中的pip是PrintIP类型,然后net是NetData类型的
上面的这一段代码是假如是showeth为真的话,就把6位的eh->ether_src复制到pip里面
decode里面应该是最重要的一环
这里是筛选pkt的类型 1.ETHERNET_TYPE_IP–DecodeIP(…)初始的东西这里的代码是真的长- - 先看传入的参数把 **u_char *pkt, **—>ptr to the packet data const int len—>length from here to the end of the packet 慢慢来
合法性的操作
首先这里的合法性是,这里的包是被删减过的意思(Truncated)头部的包的合法性检测
这里的合法性检测是,包是被删减的,根据包头的说明,包里面少了点东西。 正式的开始解包!
这里是准备的操作,把ip_hlen*4赋值到hlen
DecodeIPOptions( (pkt + 20), hlen - 20);这里有两个参数
ip首部长度20所以要减去20,相当于指针位移了 这里穿进去的o_len是hlen-20,cp是包 先来复习一下ip的options
重要的解包的过程第一步,读取出option字段 **可选项(Options):**这是一个可变长的字段。该字段属于可选项,主要用于测试,由起源设备根据需要改写。可选项目包含以下内容: ? 松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。 ? 严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。 ? 路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。 ? 时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。
这里根据读取的东西,知道了ip的option字段是什么。 开始给结果赋值
ip解析的差不多了,开始走udp,tcp,icmp和ump的解析了,上面解析了ip的头
下面开始1.5分析ps:由于source insign已经过期了所以我选择用新的源码插卡器来看,这里用的是sourcetrail 首先肯定是从snort.c文件开始分析snort.c的结构是这样的,我们就从main函数开始看 第一步是初始化各种参数,来方便后面程序的调用,例如netmask protonames等
第二步就是处理指令的ParseCmdLine(argc, argv);这个函数我们在1.0的时候已经见过了,就是把传进来的参数进行处理,然后变成格式化的参数来供后面来使用,由于这个函数是在snort.c里面创建的,所以可以接触到里面的全局变量,这样的话就为参数的传递提供便利 同时这个函数里面自带一个循环,所以在输入终止指令的时候会一直的走 在处理完指令以后就是一大坨的合法性检验啊什么的
这里还有一串很傻的代码,估计是github上面哪个想浑水摸鱼的写的hhh,特地写了个只有一行的函数 第三步就是开始处理刚刚传入的指令了。int OpenPcap(char *intf)
这里的pv是已经被处理过的了,里面有我们想干的模式,这个openpcap和1.0版本的应该是大同小异,就是开始抓包,参数就是选择调用哪个接口 libpcap
第四步就是 SetPktProcessor();这一步是设置信息包处理器 一共有五种的形态 DLT_EN10MB grinder = (pcap_handler) DecodeEthPkt; DLT_IEEE802 grinder = (pcap_handler) DecodeTRPkt; DLT_SLIP grinder = (pcap_handler) DecodeSlipPkt; DLT_PPP grinder = (pcap_handler) DecodePppPkt; DLT_NULL grinder = (pcap_handler) DecodeNullPkt; 这里一共有五种形态,grinder的意思是碾磨器械; 磨刀匠; 磨工; 磨床;,在这里就是处理包所使用的方法,然后后面的强制类型转换,再加上想要的类型,这个有点像面向对象编程的方法,(pcap_handler)是一个接口,然后在调用这个的时候,实际调用的是实现这个类的实际方法 这个类就不细说了,里面有的方法已经在1.0就存在了。 第五步就是pcap_loop
这里是一个c里面原生的一个类里面的方法
其中四个参数的赋值情况是 pd->winpcap的句柄
cnt->包的个数
总结:在宏观上,main函数大体上和1.0没什么区别下面是有关于snort的规则的配置我们首先发现snort.h里面有个全局变量叫use_rules,他被这6个东西调用,并且这个是个int类型的变量,也就是说这个东西肯定与是否使用规则有关,那么按图索骥,可以从上面的6个调用的地方来知道与规则有关的详细的配置。 分析DecodeIcmp(decode.c)首先这个DecodeIcmp被调用的时机应该是之前的grinder里面的方法,会自动的在loop里面被调用 首先是关键代码 这里直接看最外层的ifelse语句,pv.use_rules是真的,为1的话就会执行Preprocess这个语句 而这个就是预处理。
分析Preprocess函数
这里首先一眼扫过去有个->的符号,而且还出现了next,Node这个字样,那么显而易见就是一个链表的数据了,有了这个思路我们再对PreprocessFuncNode这个类型的分析就会有头绪了, 首先这是一个链表,为什么会使用链表呢,我认为是因为处理规则是一种流水线一样的操作,是属于线性结构的,为了方便增删,减少内存的消耗,用链式来储存是比较好的方法,我们下面来看这个函数,, 首先是idx这个指针,是用来方便使用的,用来记录当前指向的地方是哪里,他指向的preprocesslist这个是一个全局变量,在别的地方被赋值,后面经跟着的是一个链表的遍历,每次都会调用一下func这个方法,对packet p 来进行操作,我们来看看func怎么玩 对preprocessList进行分析首先这玩意是个funcNode的结构体类型
里面包含着返回值为void的一个叫func接收Packet参数的一个方法,还有下一个节点。 这个类型就是用来存储方法节点的。 我们来看看这个东西在哪里被调用 一个是addFuncToPreprocList的方法,一个是Preprocess方法,第一个是增加,第二个是实施。 我们先来看看增加这里就是一个普普通通的链表增加的方法了,假如是空的话就创个头,calloc第一次看见,之前都是用malloc的,malloc和calloc的区别是:
这个方法被以上三个地方调用 HttpDecodeInit(u_char *args)的分析 来自于spp_http_decode.c这个函数传入一个字符串 总结Snort规则是基于文本的,它通常存在于Snort程序目录中或者子目录中。在启动的时候,Snort读取所有的规则文件,并且建立一个三维的链表。Snort使用列表匹配包和检测。 1、规则解析: Snort规则是Snort入侵检测系统的重要组成部分。规则集是snort的攻击特库,每条规则都对应一条攻击特征,snort通过它来识别攻击行为。 每一条规包括两个部分:规则头部(RuleHeader)和规则选项(RuleOption)。规则头包含规则的行为、协议、源地址、目的地址、子网掩码、源和目的端口信息。规则选项包含报警信息以及规则触发时提供给管理员的参考信息。例如: alerttcpanyany->202.203.112.0/24any(content:“proxy-connection”;msg:“proxyuse”😉 这条规则述信息是:对任何访问202.203.112网段,tcp报文中含有proxy-connection的流量报警。在这个例子中,左括号前面是规则头。圆括号内的内容是规则选项,在规则选项中,content后面的内容为关键字,及需要匹配的字符串,msg后面的内容为规则触发时将显示的信息。Snort的规则定义中可以没有规则体,它们只是用来更好地定义所要进行的某种处理(记录、报警、忽略等)的数据包类型。只有当规则中的每一个元素都为真时,才能触发对应的规则动作。 2、检测引擎: Snort把具有相同条件的规则链接到一个集合中,用RTN结构来描述;规则选项对应于规则选项结点OTN(OptionalTreeNode),包含一些特定的检测标志、报警信息、匹配内容等条件,每个选项的匹配子函数(插件)放到FUNC链表中。只有当规则的各个条件都为真时才触发相应的操作。 Snort解析规则时,分别生成TCP、UDP、ICMP和IP这4个不同的规则树,每一个规则树包含独立的三维链表:RTN(规则头),OTN(规则选项)和FUNC(指向匹配子函数的指针)。 当Snort捕获一个数据报时,首先对其解码,然后进行预处理,再利用规则树对数据报进行匹配。在规则树匹配过程中:根据该数据报的IP协议决定与哪个规则树进行匹配;然后与RTN结点依次进行匹配,当与某个规则头相匹配时,接着向下与OTN结点进行匹配。每个OTN结点都包含了一条规则的全部选项,它包含的一组函数指针就是用来实现对这些条件的匹配操作。当检测得知数据报与某个OTN结点的所有条件相符合时,即判断此数据报为攻击报文。 为提高规则匹配的速度,Snort采用了Boyer-Moore字符串匹配算法、二维列表递归检索(RTN和OTN)以及函数指针列表(称为“三维列表”)等方法。 snort的输出插件输出插件: 抓包引擎从网络获取数据包并发送给分析模块,如果包触发了报警或日志事件,那么数据就发送给相应的输出插件。输出插件在预处理器和抓包引擎执行完之后调用Snort报警和日志子系统时执行。 Snort输出插件的功能可以分为7个部分:版权和头信息;头文件、依赖关系和全局变量;关键字注册;参数分析和函数列表链;数据处理,格式化和存储;处理预处理器参数;清理和退出。下面详细描述插件的各功能。 1、版权和头信息现存的每一个输出插件都含有鲜明的版权信息,版权信息可以由插件开发者自主添加。插件的头详细描述了插件的用途,需要的参数、结果以及其他注释。 2、头文件,依赖关系和全局变量就绝大部分应用而言,文件以及它们之间的依赖关系对程序至关重要,而且要自释其意。全局变量在整个插件的任何部分都可以使用。 3、关键字注册输出插件通过配置文件和命令行引用和调用。用户必须为插件定义关键字并把该关键字连接到Snort,以便分析该关键字时作相应的特殊处理。 4、参数分析和函数列表链大部分插件在声明时需要传递参数,因此有必要写一些代码来处理这些数据。例如,当使用日志功能时,可能需要指定一个用于存储日志的日志文件名。除了分析参数,插件还必须链接Snort主引擎内的函数。 5、数据处理、格式化和存储数据处理、格式化和存储是插件最主要的功能,可以这么说,如果没有数据处理、格式化和存储这些功能,输出插件就不完整,没有用。 6、处理预处理器参数在有预处理器参数存在时,必须写数据处理代码来处理这些参数,这样在分析开始之前,Snort和输出插件就能区分预处理器单元。 7、清理和退出,在绝大多数情况下,需要在插件中包含清理内存、应用连接以及打开套接字的退出处理代码,这样可以提高Snort的执行效率。 Snort能够使用输出插件来汇报和表示数据,Snort支持多种日志格式,包括直接的文本头、PCAP、UNIXsyslog、XML文本数据库和多种关系数据库,这些输出插件使得报警和日志以更加灵活的格式和表现形式呈现给管理员。如果没有输出插件来处理、存储和格式化数据,包分析和流量分析是没有任何意义的。 输出插件使得Snort在向用户提供格式化输出时更加灵活。输出插件在Snort的报警和记录子系统被调用时进行,在预处理和探测引擎之后。规则文件中指令的格式非常类似于预处理程序。 总结1.5版本相较于1.0版本多了两个插件,第一个是预处理器插件,第二个是处理插件。 预处理器插件模块 处理插件模块 2、头文件,依赖关系和全局变量就绝大部分应用而言,文件以及它们之间的依赖关系对程序至关重要,而且要自释其意。全局变量在整个插件的任何部分都可以使用。 3、关键字注册输出插件通过配置文件和命令行引用和调用。用户必须为插件定义关键字并把该关键字连接到Snort,以便分析该关键字时作相应的特殊处理。 4、参数分析和函数列表链大部分插件在声明时需要传递参数,因此有必要写一些代码来处理这些数据。例如,当使用日志功能时,可能需要指定一个用于存储日志的日志文件名。除了分析参数,插件还必须链接Snort主引擎内的函数。 5、数据处理、格式化和存储数据处理、格式化和存储是插件最主要的功能,可以这么说,如果没有数据处理、格式化和存储这些功能,输出插件就不完整,没有用。 6、处理预处理器参数在有预处理器参数存在时,必须写数据处理代码来处理这些参数,这样在分析开始之前,Snort和输出插件就能区分预处理器单元。 7、清理和退出,在绝大多数情况下,需要在插件中包含清理内存、应用连接以及打开套接字的退出处理代码,这样可以提高Snort的执行效率。 Snort能够使用输出插件来汇报和表示数据,Snort支持多种日志格式,包括直接的文本头、PCAP、UNIXsyslog、XML文本数据库和多种关系数据库,这些输出插件使得报警和日志以更加灵活的格式和表现形式呈现给管理员。如果没有输出插件来处理、存储和格式化数据,包分析和流量分析是没有任何意义的。 输出插件使得Snort在向用户提供格式化输出时更加灵活。输出插件在Snort的报警和记录子系统被调用时进行,在预处理和探测引擎之后。规则文件中指令的格式非常类似于预处理程序。 总结1.5版本相较于1.0版本多了两个插件,第一个是预处理器插件,第二个是处理插件。 预处理器插件模块 处理插件模块 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 5:59:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |