分享
 
 
 

Snort入侵检测系统分析

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Snort的特点

Snort是一个强大的清量级的网络入侵检测系统。它具有实时数据流量分析和日志Ip网络数据包的能力,能够进行协议分析,对内容搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时警报。此外,Snort具有很好的扩展性和可移植性。

还有,这个软件遵循公用许可GPL,所以只要遵守GPL任何组织和个人都可以自由使用。

Snort是一个轻量级的入侵检测系统

1.Snort虽然功能强大,但是其代码极为简洁,短小,其源代码压缩包只有200KB不到。Snort可移植性非常好。Snort的跨平台性能极佳,目前已经支持Linux系列, Solaris,BSD系列,IRIX,HP-UX,Windows系列,ScoOpenserver,Unixware等。

Snort的功能非常强大

2.Snort具有实时流量分析和日志Ip网数据包的能力。能够快速地检测网络攻击,及时地发出警报。Snort的警报机制很丰富。

例如:Syslog,用户指定文件,UnixSocket,还有使用SAMBA协议向Windows客户程序发出WinPopup消息。利用XML插件,Snort可以使用SNML(简单网络标记语言.simple network markup language)把日志存放在一个文件或者适时警报。

3.Snort能够进行协议分析,内容的搜索/匹配。现在Snort能够分析的协议有TCP,UDP和ICMP。将来的版本,将提供对ARP.ICRP,GRE,OSPF,RIP,ERIP,IPX,APPLEX等协议的支持。它能够检测多种方式的攻击和探测,例如:缓冲区溢出,CGI攻击,SMB检测,探测操作系统质问特征的企图等等。

4.Snort的日至格式既可以是Tcpdump的二进制格式,也可以编码成ASCII字符形式,更便于拥护尤其是新手检查,使用数据库输出插件,Snort可以把日志记入数据库,当前支持的数据库包括:Postagresql,MySQL,任何UnixODBC数据库,MicrosoftMsSQL,还有Oracle等数据库。

5.使用TCP流插件(TCPSTREAM),Snort可以对TCP包进行重组。Snort能够对IP包的内容进行匹配,但是对于TCP攻击,如果攻击者使用一个程序,每次发送只有一个字节的数据包,完全可以避开Snort的模式匹配。而被攻击的主机的TCP西医栈会重组这些数据,将其发送给目标端口上监听的进程,从而使攻击包逃过Snort的监视。使用TCP流插件,可以对TCP包进行缓冲,然后进行匹配,使Snort具备对付上面攻击的能力。

6.使用Spade(Statistical Packet Anomaly Detection Engine)插件,Snort能够报告非正常的可以包,从而对端口扫描进行有效的检测。

7.Snort还有很强的系统防护能力。如:是用其IPTables,IPFilter插件可以使入侵检测主机与防火墙联动,通过FlexResp功能,Snort能够命令防火墙主动短开恶意连接。

8.扩展性能较好,对于新的攻击威胁反应迅速。

作为一个轻量级的网络入侵检测系统,Snort有足够的扩展能力。它使用一种简单的规则描述语言(很多商用入侵检测系统都兼容Snort的规则语言)。最基本的规则知识包含四个域:处理动作,协议,方向,端口。

例如 Log Tcp Any any - 10.1.1.0/24 80(谁都看得明白)

9.Snort支持插件,可以使用具有特定功能的报告,检测子系统插件对其功能进行扩展。Snort当前支持的插件包括:数据库日志输出插件,破碎数据包检测插件,断口扫描检测插件,HTTP URI插件,XML网页生成等插件。

10.Snort的规则语言非常简单,能够对新的网络攻击做出很快的反应。发现新攻击后,可以很快地根据Bugtrag邮件列表,找到特征码,写出新的规则文件。

总之,对于世界上各安全组织来讲,Snort入侵检测都是一个优秀入侵检测系统的一个标准的标准。通过研究它,我们可以学到到所有入侵检测系统的内部框架及工作流程(也包括同类型的商业入侵检测系统的框架及工作流程)。

7.2 Snort系统各程序模块代码分析

系统架构分析Snort主工作流函数为SnortMain()流程大体如下:

相关函数解释:

1) 命令行参数解析函数ParseCmdLine(),解析个中命令参数,并将其放入全局PV类型的变量PV中。数据类型PV包含各种标示字段,用来知识个中系统的参数设置。

例如:规则文件,系统运行模式,显示模式,插件激活等。

2)检测引擎初始化fpInitDetectinEngine(),用于制定快速规则匹配模块的配置参数,包括模式搜索算法等(Snort可使用的算法有Aho-Corasick , Wu-Manber , Boyer-Moore 等算法,缺省Snort使用Byer-More算法。)。并负责在协议解析过程中产生警报信息。

3)取得从网络截取到的数据流的主要进程OpenPcap()。起主要作用是根据命令行参数分析结果,分别调用Libpcap函数库Pcap_open_live()―通过网卡驱动实时截取网络数据 和 Pcap_open_offline()―通过文件来访问以前网卡驱动截取数据保存成为的文件,并获得相对应的数据包数据结构。

4)各种插件初始化主要包括输入/输出插件初始化,检测插件初始化和预处理插件初始化等。主要就是将各种插件的关键字与对应的初始化处理函数相调用,然后注册到对应的关键字链表结构中,随后逐个弹出以便规则解析模块使用。

例如:预处理模块插件. 链表结构PreprocessKeyWordList定义如下:

typedef struct_preprocessKeywordNode

{

char *keyword;

void(*func)(u_char*);

}PreprocessKeywordNode;

typedef struct_preprocessKeywordList

{

PreprocessNode entry;

Struct_PreprocessKeywordList *next;

}PreprocessKeywordlist;

预处理插件的初始化函数 void (*func)(u_char *)并非插件的直接工作模块,而是由规则解释模块负责调用,然后将对应的插件处理模块连接到预处理工作数据链表结构中。

预处理工作函数链表结构PreprocessFuncNode定义如下:

typedef struct_PreprocessFuncNode

{

void (*func)(Packet *);

struct_PreprocessFuncNode *next;

} PreprocessFuncNode;

函数void (*func)(Packet *)才是真正进行预处理的工作模块,将被检测模块Preprocess() 在遍历预处理插件链表时调用。

4)规则结构初始化和解析

CreateDefaultRules()负责进行初始的规则结果建设。

我们学习到的规则链表模型结构多是多个二维链表结构(前面描述过)。而Snort是新三维链表结构形式,涉及到关键数据结构RuleListNode如下:

typedef struct_RuleListNode

{

ListHead *RuList; /* The rule list associated with this node*/

int mode; /* The rule mode */

int rval; /* 0―no detection , 1 ?detection event */

int evalIndex ; /* eval index for this rule set */

char *name; /* Name of this rule list */

struct_RuleListNode Next; /* Rhe next RuleListNode */

} RuleListNode;

数据结构RuleListNode链表代表了系统支持的规则类型,包括Alert,Log,Pass,Activate,Dynamic。每链表节电又通过ListHead结构类型字段RuleList指向下面的规则链表。

第二层数据结构ListHead,定义如下:

typedef struct_ListHead

{

RuleTreeNode *IpList;

RuleTreeNode *TcpList;

RuleTreeNode *UdpList;

RuleTreeNode *IcmpList;

Struct_OutputFuncNode *LogList;

Struct_OutputFuncNode *AlertList;

Struct_RuleListNode *ruleListNode;

} ListHead;

数据结构ListHead中若干字段IpList , TcpList , UdpList , IcmpList等又分别指向各协议类型划分的规则链表,同时,可能有一个回指针去对应RuleListNode节点。

最基础的数据结构包括RuleTreeNode和OptTreeNode,分别代表最基本的规则链表头和规则节点,并分别定义。

应用这个链表来解决实例问题并说明此链表结构与工作过程.

函数CreatDefaultRules()此时并没有执行规则解析的任务,只是负责上层规则构架,代码如下:

ListHead Alert; /*Alert Block Header*/

ListHead Log; /*Log Block Header*/

ListHead Pass; /*Pass Blok Header*/

ListHead Activation; /*Activation Block Header*/

ListHead Dynamic; /*Dynamic Block Header*/

Void CreateDefaultRules()

{

CreateRuleType(“activation”,RULE_ACTIVATE,1,&Activation);

CreateRuleType(“dynamic”,RULE_DYNAMIC,1,&Dynamic);

CreateRuleType(“alert”,RULE_ALERT,1,&Alert);

CreateRuleType(“Pass”,RULE_PASS,0,&Pass);

CreateRuleType(“log”,RULE_LOG,1,&Log); }

链表头动作(5种):

说明:以上举的两个例子一个是对WEB服务的CGI攻击,另一个是telnet攻击。还有很多应用层上的攻击,就不举例了。其中字符:Flow: 链接到检测插件。

Content: 用特定算法检查的字符串。

5)规则优化及快速匹配模块是Snort2.0版本中引入的最重要的组件。在SnortMain()函数中,主要涉及调用了建立和初始化规则优化和快速匹配数据结构的类型。包含有2个主要函数:OtnXMatchInfoInitialize(),fpCreateFastPacketDetection()

OtnXMatchInfoInitialize()主要是对数据类型OTNX_MATCH_DATA数据结构类型的全局变量omd,为它而申请空间。OTNX_MATCH_DATA数据结构中包括快速匹配时所需要的重要信息。而fpCreateFastPacketDetection()是建立快速匹配引擎的主要接口函数,严厉是读入有规则解析模块建立的规则链表中的所有规则链表头(上图所显示的RuleTreeNode类型)和规则选项节点(OptTreeNode类型),一边快速匹配之用。

6)数据包处理模块InterfaceThread()。

InterfaceThread()中功能简单,主要调用Libpcap库函数Pcap_loop()。Libpcap 库函数Pcap_loop()的接口函数,

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有