分享
 
 
 

Snort-output xml plugin分析

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Snort-output xml plugin分析

Author: gnicky URL http://blog.csdn.net/loconfuse

对snort1.8的版本进行初步的分析,因为发现snort在2.0之后发生了相对巨大的变化,对于软件内核分析,选择较低的版本是比较合适的,最好是从作者的原始思想出发,可惜也没有作者的灵感,下载了snort-1.8,就从这个版本分析。

首先打开了manual 阅读一遍,总体上把握软件的功能,在网络应用的模式上分为三类侦听、记录、入侵检测;对输出插件大致地阐述sys_log\Database\CSV\XML\SMB_alert等方式,在这个版本中包含较多的output plugin,对于想学习插件编写的爱好者比较有学习意义。

为了便于学习,同时下载snort2.0的版本,在这个版本中,文件的分类整理规范,不像1.8中大部分的文件直接存放在主目录下。由于学习linux是个新手,对下面的文件命名也不是很有理解(以前minux操作系统没有好好学)。Contrib作为可选可增加内容的文件存放地点,Doc作为相关文档,手册的存放地点,同时也包括一些make file等文件,下面的一段内容截取自ReadMe.Plugin:

Overview:

Snort version 1.5 introduces a major new concept, plugins. There are two types of plugin currently available in Snort: detection plugins and preprocessors. Detection plugins check a single aspect of a packet for a value defined within a rule and determine if the packet data meets their acceptence criteria. For example, the tcp flags detection plugin checks the flags section of TCP packets for matches with flag combinations defined in a particular rule. Detection plugins may be called multiple times per packet with different arguments. Preprocessors are only called a single time per packet and may perform highly complex functions like TCP stream reassembly, IP defragmentation, or HTTP request normalization. They can directly manipulate packet data and even call the detection engine directly with their modified data. They can perform less complex tasks like statistics gathering or threshold monitoring as well.

主要介绍了在对libpcap抓取的packet分析中使用到的插件,包括整体上与局部上使用的两类,这种基于插件的设计模式为snort的发展提供了非常广阔的空间。

"sp_something.c"/"sp_something.h" 主要用于detection plugins,而spp_something.c以及spp_something.h用于preprocessors plugins.假如有兴趣编写插件可以通过templates中的文件来学习,希望能够成为一个优秀的plugin developer!

假如对输出插件非常有兴趣,可以学习下文件readme.database,该文件讲述的是database输出插件的相关内容,当然没有涉及具体的工作原理。相信readme.cvs文件应该是在说如何使用csv输出插件的。根据这些规则,应该能够猜到到snort1.8的版本中的readme.xml文件讲述的是如何使用xml插件,这个文件在2.2.0中并未出现。

Etc作为一个非常重要的文件夹,其中包含了classification的文件,snort.conf配置文件等基础文件。而rules文件夹想必知道,所有的后缀为.rules的判断规则文件存放于此,可以发现一点在这些文件夹中包含makefile的两个文件,基本上makefile.am是比较简单的,下面是简单的rules样例:

## $Id$

AUTOMAKE_OPTIONS=foreign no-dependencies

EXTRA_DIST = attack-responses.rules backdoor.rules bad-traffic.rules

chat.rules ddos.rules deleted.rules dns.rules dos.rules experimental.rules

exploit.rules finger.rules ftp.rules icmp-info.rules icmp.rules imap.rules

info.rules local.rules misc.rules multimedia.rules mysql.rules netbios.rules

nntp.rules oracle.rules other-ids.rules p2p.rules policy.rules pop3.rules

porn.rules rpc.rules rservices.rules scan.rules shellcode.rules smtp.rules

snmp.rules sql.rules telnet.rules tftp.rules virus.rules web-attacks.rules

在SRC中存放snort的大部分源码,其中对各类功能的文件进行了分类,其中output-plugin中包含输出插件的内容,至于win32应该是为windows准备的。

请看对Xml输出插件的描述在snort1.8.0中:

The XML plug-in enables snort to log in SNML - simple network markup language aka (snort markup language) to a file or over a network. The DTD is available in the contrib directory of the snort distribution. You can use this plug-in with on one or more snort

sensors to log to a central database and create highly configurable intrusion detection infrastructures within your network. The plugin will also enable you to automatically report alerts to a third party such as an incident response team or managed security service provider.

This plugin was originally developed at the CERT Coordination Center as part of the AIRCERT project. Be aware that the SNML DTD is in its early phases of development and is likely to be modified as it undergoes public scrutiny.

事实表明伴随着发展,在发布的snort2.2.0中就没有包括xml的输出插件,在网站上应该可以下载到DTD的格式,问题是对应的开发的分析XML log的软件是否能够适应,在这个问题上,程序对DTD的依赖程度非常关键。

初始目标,让snort2.2.0支持xml输出插件,分析与输出插件相关的.c以及.h文件。以下是一些尝试性的工作:

step 1、在最接近output plugin的内容中,copy 文件spo_xml.c spo_xml.h到output-plugins中,同时修改makefile的两个文件。# Makefile.in generated by automake 1.6.3 from Makefile.am.通过这个,观察“Edit the Makefile.am and add the names of the two files to the list of names on the "snort_SOURCES" line. Save and exit the file. Run "automake".这样对应的makefile.in就对发生变化,应该会在文件中的至少两个地方发生改变。比较两个版本会发现其中由于模块化的影响,对于1.8.0中的混合型编译输出结果、或者中间结果使用变量snort_XX,而在snort-2.2.0中libspo-XX被使用在spo即ouput plugin模块中。

Step 2、回到上级目录src下,分析其中可能与plugins相关的文件,plugbase.c观察中,请看其中的注释/* built-in detection plugins *//* built-in output plugins */,可见在有些地方,这些模块的分离还没有彻底完成!

对比两个版本的plugbase.c文件,发现往后的snort对switch开关量的使用相当普篇,使得可定制性很强也增加了安装部署的难度,修改的当前目标是强制使用xml输出插件(不设置开关)

OutputKeywordList是我们需要关注的一个变量类型,其中定义了能够启用的outputKeyword。下列头文件中最有可能出现的几个:

#include "plugbase.h"

#include "snort.h"

#include "debug.h"

#include "util.h"

#include "log.h"

#include "detect.h"

请看typedef struct _OutputKeywordList

{

OutputKeywordNode entry;

struct _OutputKeywordList *next;

} OutputKeywordList;基本上使用结构体_XXXX然后自定义变量类型XXXXX。关键的问题何时赋予初始值,因为这个在编译时候决定,基本上作为常量在snort中使用效率最高。

这一步留下一个问题,初始化的一堆关键词在什么时候赋给了列表?关注系统的GLOBAL变量

Step 3、在src文件夹中的makefile文件中挖掘信息,发现snort_LDADD = output-plugins/libspo.a \也就是等于间接地促使spo-xml.o\spo_csv.o等文件的生成

回顾发生的修改,确信问题与解决方法,RegisterOutputPlugin("xml", NT_OUTPUT_LOG, XmlInit);在setupXML的函数的第一个语句中发现,而惯例的话,全部大写的变量为GLOBAL,调用了PlugBase中实现的方法void RegisterOutputPlugin(char *keyword, int type, void (*func) (u_char *))可以发现该方法是void的,没有参数返回,因此变量就保存在列表中。

Step 4、考虑可能发生的问题,在整个调用过程中应该不会发生问题,但是对于函数库的调用得不到保证,

#include <openssl/crypto.h>

#include <openssl/x509.h> openssl-0.9.7e\crypto\x509

#include <openssl/x509_vfy.h>

#include <openssl/pem.h> openssl-0.9.7e\crypto\pem

#include <openssl/ssl.h>

#include <openssl/err.h> openssl-0.9.7e\crypto\err

这些openssl下的头文件可能导致问题,同时对于版本的问题也不得不恐惧。这也让我想起在上次的blog中所写的,在snort的install中强调with-openssl是对xml输出插件的必要支持,可见所言非虚。正好目录下有Openssl的文件夹,结果解压缩的时候发现出错了,有点遗憾!~!openssl-0.9.7e\include\openssl目录下包含了所有的文件,没有问题。

此外snml的dtd文件需要放置在合适的目录下。

按照snort2.0的过程开始工作,同时./configure的时候加上with-openssl=DIR

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有