免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: phiazat
打印 上一主题 下一主题

基于Snort的入侵检测系统 [复制链接]

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
41 [报告]
发表于 2006-10-09 23:50 |只看该作者
3.7.1在规则中使用变量\r\n在配置文件中,你可以使用变量,这样会带来一些方便。例如,你可以在配置文件中定义HOME_NET变量。\r\nvar HOME_NET 192.168.1.0/24\r\n\r\n然后你就可以在你的规则中引用这个变量:\r\nalert ip any any -> $HOME_NET any (ipopts: lsrr; \\\r\nmsg: “Loose source routing attempt”; sid: 1000001\r\n\r\n这样做的好处是可以使配置文件用在不同环境中,你所做的只是改变变量的值,而不需要修改每个规则。\r\n3.7.11在变量中使用网络列表\r\n你也可以定义一个包含多个条目的变量,例如一个包含两个网段的网络:\r\nvar HOME_NET [192.168.1.0/24,192.168.10.0/24]\r\n不同的网络用逗号分隔。\r\n3.7.1.2 在变量中使用网络接口名称\r\n在定义变量的时候,你可以用网络接口名称:\r\nvar HOME_NET $eth0_ADDRESS\r\nvar EXTERNAL_NET $eth1_ADDRESS\r\n3.7.1.3 使用关键字any\r\n关键字any也可以成为一个变量。它匹配任何值,例如:\r\nvar EXTERNAL_NET any

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
42 [报告]
发表于 2006-10-09 23:50 |只看该作者
在系统自带的snort.conf文件中,已经定义了很多变量,你可以根据自己的需要修改。\r\n\r\n3.7.2 配置指令\r\n在snort.conf文件中用配置指令可以让用户配置Snort的全局设定。例如日志文件的路径,规则的应用顺序等等。配置指令的大体格式如下:\r\nconfig directive_name[: value]\r\n表3-6是一个指令列表\r\n \r\n指令        描述           \r\nOrder        改变规则应用的顺序,相当于命令行中的-o选项。           \r\nAlertfile        用来设置告警文件的名称。           \r\nClassification        用来建立规则的分类。           \r\nDecode_arp        打开arp解码,相当于命令行-a选项           \r\nDump_chars_only        相当于命令行选项 –C           \r\nDump_payload        相当于命令行选项 –d,用来从包中获得数据载荷的内容           \r\nDecode_data_link        相当于命令行选项 –e,用来数据链路层头部的解码。           \r\nBpf_file        相当于命令行选项 –F           \r\nSet_gid        相当于命令行选项 –g,用来设定运行Snort的组用户ID           \r\nDaemon        相当于命令行选项 –D,这样用守护进程的模式调用Snort           \r\nReference_net        相当于命令行选项 –h.用来设置本地网络地址           \r\nInterface        相当于命令行选项 –i.用来设置Snort的网络接口。           \r\nAlert_with_interface_name        相当于命令行选项 –T,用来在告警消息的后面附加接口信息。           \r\nLogdir        相当于命令行选项 –l.           \r\nUmask        相当于命令行选项 –m,用来在运行Snort的时候设置Umask.           \r\nPkt_count        相当于命令行选项 –n,用来在接受到一定数量的包后退出Snort           \r\nNolog        相当于命令行选项 –N,用来停止告警以外的日志。           \r\nObfuscate        相当于命令行选项-O,用来在以伪装的IP来向其他人发送消息,这样可以掩藏自己的IP地址。           \r\nNo_promisc        相当于命令行选项 –p,用来关闭混杂模式。           \r\nQuite        相当于命令行选项-q,用来关闭Snort启动时候的欢迎信息和统计信息。           \r\nChroot        相当于命令行选项-t,用来改变根目录           \r\nChecksum_mod        用来检验特定类型的包的校验值。           \r\nSet_uid        相当于命令行选项-u,用来设置运行Snort的用户ID           \r\nUtc        相当于命令行选项-U,用UTC时间代替本地时间作为日志的时钟。           \r\nVerbose        相当于命令行选项-v,在记录日志的同时,将日志信息输出到标准输出。           \r\nDump_payload_verbose        相当于命令行选项-X,将原始包信息传送到标准输出           \r\nShow_year        在日志时间戳中加上年份           \r\nStateful        设置stream4预处理器的声明模式

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
43 [报告]
发表于 2006-10-09 23:50 |只看该作者
3.7.3预处理器的配置\r\n预处理器的配置格式如下:\r\npreprocessor <preprocessor_name>[: <configuration_options>]\r\n详细内容在第四章解释。\r\n3.7.4输出模块配置\r\n输出模块的配置格式如下:\r\noutput <output_module_name>[: <configuration_options>]\r\n详细内容在第四章解释。\r\n\r\n3.7.5定义新的动作类型\r\n每个Snort规则的第一个部分都是动作。Snort有很多预定义的动作,但是如果这些动作仍然不能满足你的要求,你可以定义自己的动作。\r\n一个新的动作类型可以包含多个输出模块。例如:\r\nruletype dump_database\r\n{\r\ntype alert\r\noutput database: alert, mysql, user=rr dbname=snort \\\r\nhost=localhost\r\noutput log_tcpdump: tcpdump_log_file\r\n}\r\n新定义的动作类型同样可以在规则种应用:\r\ndump_database icmp any any -> 192.168.1.0/24 any \\\r\n(fragbits: D; msg: \"Don’t Fragment bit set\"\r\n如上面的例子,日志将同时被记录到数据库和日志文件。\r\n3.7.6 规则的配置\r\n规则的配置往往是配置文件中的最后部分。你可以用include关键字将其他的规则文件引用。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
44 [报告]
发表于 2006-10-09 23:50 |只看该作者
3.7.8示例\r\n下面是一个配置文件的示例,如果你修改了配置文件,就需要重新启动Snort使之生效。\r\n# Variable Definitions\r\nvar HOME_NET 192.168.1.0/24\r\nvar EXTERNAL_NET any\r\nvar HTTP_SERVERS $HOME_NET\r\nvar DNS_SERVERS $HOME_NET\r\nvar RULE_PATH ./\r\n# preprocessors\r\npreprocessor frag2\r\npreprocessor stream4: detect_scans\r\npreprocessor stream4_reassemble\r\npreprocessor http_decode: 80 -unicode -cginull\r\npreprocessor unidecode: 80 -unicode -cginull\r\npreprocessor bo: -nobrute\r\npreprocessor telnet_decode\r\npreprocessor portscan: $HOME_NET 4 3 portscan.log\r\npreprocessor arpspoof\r\n# output modules\r\noutput alert_syslog: LOG_AUTH LOG_ALERT\r\noutput log_tcpdump: snort.log\r\noutput database: log, mysql, user=rr password=boota \\\r\ndbname=snort host=localhost\r\noutput xml: log, file=/var/log/snortxml\r\n# Rules and include files\r\ninclude $RULE_PATH/bad-traffic.rules\r\ninclude $RULE_PATH/exploit.rules\r\ninclude $RULE_PATH/scan.rules\r\ninclude $RULE_PATH/finger.rules\r\ninclude $RULE_PATH/ftp.rules\r\ninclude $RULE_PATH/telnet.rules\r\ninclude $RULE_PATH/smtp.rules\r\ninclude $RULE_PATH/rpc.rules\r\ninclude $RULE_PATH/dos.rules\r\ninclude $RULE_PATH/ddos.rules\r\ninclude $RULE_PATH/dns.rules\r\ninclude $RULE_PATH/tftp.rules\r\ninclude $RULE_PATH/web-cgi.rules\r\ninclude $RULE_PATH/web-coldfusion.rules\r\ninclude $RULE_PATH/web-iis.rules\r\ninclude $RULE_PATH/web-frontpage.rules\r\ninclude $RULE_PATH/web-misc.rules\r\ninclude $RULE_PATH/web-attacks.rules\r\ninclude $RULE_PATH/sql.rules\r\ninclude $RULE_PATH/x11.rules\r\ninclude $RULE_PATH/icmp.rules\r\ninclude $RULE_PATH/netbios.rules\r\ninclude $RULE_PATH/misc.rules\r\ninclude $RULE_PATH/attack-responses.rules\r\ninclude $RULE_PATH/myrules.rules

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
45 [报告]
发表于 2006-10-09 23:51 |只看该作者
3.8 基于动作的Snort规则包检验顺序\r\n5种类型的Snort规则可以归为3个大类:\r\n告警规则\r\n通过规则\r\n日志规则\r\n当Snort收到包的时候,会按照上面三种规则依次检验,这样的设计是安全性非常高的。但是因为大多数包是正常的包,因此这样做也会耗费一些系统资源,Snort提供一种方法改变顺序来提高效率,但是这样做也会使安全性降低。将顺序改变为:\r\n通过规则\r\n告警规则\r\n日志规则\r\n在改变规则的时候要仔细,因为可能一个比较差的规则就可能让很多恶意的包通过。你可以在配置文件中用config order来实现顺序的改变:\r\nconfig order\r\n如果你定义了自己的规则类型,它们一般会在监测顺序的最后。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
46 [报告]
发表于 2006-10-09 23:51 |只看该作者
3.8 基于动作的Snort规则包检验顺序\r\n5种类型的Snort规则可以归为3个大类:\r\n告警规则\r\n通过规则\r\n日志规则\r\n当Snort收到包的时候,会按照上面三种规则依次检验,这样的设计是安全性非常高的。但是因为大多数包是正常的包,因此这样做也会耗费一些系统资源,Snort提供一种方法改变顺序来提高效率,但是这样做也会使安全性降低。将顺序改变为:\r\n通过规则\r\n告警规则\r\n日志规则\r\n在改变规则的时候要仔细,因为可能一个比较差的规则就可能让很多恶意的包通过。你可以在配置文件中用config order来实现顺序的改变:\r\nconfig order\r\n如果你定义了自己的规则类型,它们一般会在监测顺序的最后。\r\n\r\n3.9自动升级Snort规则\r\n有许多工具可以用来升级Snort的特征库,下面介绍两个升级Snort规则的方法\r\n39.1简单的方法\r\n这个方法包含一个简单的shell脚本,你需要在你的系统中安装wget程序。这个程序用来用HTTP协议来获得文件的信息,与浏览器类似,但是它用命令行来取得文件的信息。\r\n#!/bin/sh\r\n# Place of storing your Snort rules. Change these variables\r\n# according to your installation.\r\nRULESDIR=/etc/snort\r\nRULESDIRBAK=/etc/snort/bak\r\n# Path to wget program. Modify for your system if needed.\r\nWGETPATH=/usr/bin\r\n# URI for Snort rules\r\nRULESURI=http://www.snort.org/downloads/snortrules.tar.gz\r\n# Get and untar rules.\r\ncd /tmp\r\nrm -rf rules\r\n$WGETPATH/wget $RULESURI\r\ntar -zxf snortrules.tar.gz\r\nrm –f snortrules.tar.gz\r\n# Make a backup copy of existing rules\r\nmv $RULESDIR/*.rules $RULESDIRBAK\r\n# Copy new rules to the location\r\nmv /tmp/rules/*.rules $RULESDIR\r\n下面让我们来看这个脚本是如何工作的。下面的几行是定义一些变量:\r\nRULESDIR=/etc/snort\r\nRULESDIRBAK=/etc/snort/bak\r\nWGETPATH=/usr/bin\r\nRULESURI=http://www.snort.org/downloads/snortrules.tar.gz\r\n下面的3行用来删除/tmp目录下面的/tmp/rules并从$RULESURI变量中指定的URI下载snortrules.tar.gz文件然后用下面的两行命令解压并删除它。\r\ntar -zxf snortrules.tar.gz\r\nrm -f snortrules.tar.gz\r\n下面的一行用来备份现有的规则文件的拷贝,以便你需要使用它们。\r\nmv $RULESDIR/*.rules $RULESDIRBAK\r\n脚本中的最后一行将新的规则文件从/tmp/rules目录移动到工作目录./etc/snort这样Snort就可以读取它们了。\r\nmv /tmp/rules/*.rules $RULESDIR\r\n运行脚本之后要重新启动Snort。\r\n\r\n3.9.2 复杂的方法\r\n这一部分介绍关于Oinkmaster的信息。你可以在http:// www.algonet.se/~nitzer/oinkmaste ... t的机器上安装Perl。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
47 [报告]
发表于 2006-10-09 23:51 |只看该作者
3.10 默认的Snort规则和分类\r\n随Snort发行版含有很多的规则,它们被存放到不同的文件中,每个文件代表一类规则。例如1.9.0附带的规则文件:\r\nattack-responses.rules\r\nbackdoor.rules\r\nbad-traffic.rules\r\nchat.rules\r\nddos.rules\r\ndeleted.rules\r\ndns.rules\r\ndos.rules\r\nexperimental.rules\r\nexploit.rules\r\nfinger.rules\r\nftp.rules\r\nicmp-info.rules\r\nicmp.rules\r\nimap.rules\r\ninfo.rules\r\nlocal.rules\r\nMakefile\r\nMakefile.am\r\nMakefile.in\r\nmisc.rules\r\nmultimedia.rules\r\nmysql.rules\r\nnetbios.rules\r\nnntp.rules\r\noracle.rules\r\nother-ids.rules\r\np2p.rules\r\npolicy.rules\r\npop3.rules\r\nporn.rules\r\nrpc.rules\r\nrservices.rules\r\nscan.rules\r\nshellcode.rules\r\nsmtp.rules\r\nsnmp.rules\r\nsql.rules\r\ntelnet.rules\r\ntftp.rules\r\nvirus.rules\r\nweb-attacks.rules\r\nweb-cgi.rules\r\nweb-client.rules\r\nweb-coldfusion.rules\r\nweb-frontpage.rules\r\nweb-iis.rules\r\nweb-misc.rules\r\nweb-php.rules\r\nx11.rules\r\n例如,所有和X-window攻击相关的规则都在x11.rules文件中。\r\n# (C) Copyright 2001,2002, Martin Roesch, Brian Caswell, et al.\r\n# All rights reserved.\r\n# $Id: x11.rules,v 1.12 2002/08/18 20:28:43 cazz Exp $\r\n#----------\r\n# X11 RULES\r\n#----------\r\nalert tcp $EXTERNAL_NET any -> $HOME_NET 6000 (msg:\"X11 MIT Magic\r\nCookie detected\"; flow:established\r\n; content: \"MIT-MAGIC-COOKIE-1\"; reference:arachnids,396;\r\nclasstype:attempted-user; sid:1225; rev:3;\r\n)\r\nalert tcp $EXTERNAL_NET any -> $HOME_NET 6000 (msg:\"X11 xopen\";\r\nflow:established; content: \"|6c00 0b\r\n00 0000 0000 0000 0000|\"; reference:arachnids,395; classtype:unknown;\r\nsid:1226; rev:2\r\n3.10.1local.rules文件\r\nlocal.rules文件中没有规则,它是用来存放管理员自定义的规则的。你也可以用其他文件来存放自定义的规则。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
48 [报告]
发表于 2006-10-09 23:51 |只看该作者
3.11一些默认的规则的样板\r\n这一部分分析一些随Snort发行的预先定义的规则,这里的规则都是来自于telnet.rules文件,现在让我们来分析它们:\r\n3.11.1监测telnet会话中的su尝试\r\n下面的规则探测尝试在telnet进程中su超级用户的尝试:\r\nalert tcp $TELNET_SERVERS 23 -> $EXTERNAL_NET any (msg:\"TELNET\r\nAttempted SU from wrong group\"; flow:\r\nfrom_server,established; content:\"to su root\"; nocase;\r\nclasstype:attempted-admin; sid:715; rev:6\r\n在这个规则中,有很多地方需要注意:\r\n\r\n变量是$TELNET_SERVERS在snort.conf中定义的Telnet服务器列表。\r\n规则仅仅监测telnet服务器的回应,而不是请求\r\n变量$EXTERNAL_NET是在snort.conf中定义的外部网络。规则将监测来自于外部的telnet会话,对于内部网络的telnet会话,就不会做出监测。\r\n关键字flow用来将规则仅仅应用在已经建立的会话上面。\r\n关键字content用来监测含有“to su root”的包,如果有,则产生告警。\r\n关键字nocase使规则忽略包内容的大小写。\r\n关键字classtype给规则归类\r\n 规则的ID是715\r\n关键字rev显示规则的版本

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
49 [报告]
发表于 2006-10-09 23:52 |只看该作者
3.11.2 监测telnet会话中的登录失败\r\n下面的规则与上个规则类似,它可以监测登录Telnet服务器的失败尝试:\r\nalert tcp $TELNET_SERVERS 23 -> $EXTERNAL_NET any (msg:\"TELNET login\r\nincorrect\"; content:\"Login inco\r\nrrect\"; flow:from_server,established; reference:arachnids,127;\r\nclasstype:bad-unknown; sid:718; rev:6\r\n它比上个规则多出了一个指定参考地址的关键字。\r\n\r\n\r\n\r\n3.12写有质量的规则\r\n在Snort的发行版中有已经定义好的规则,这些规则对于你编写优质的规则是个不错的参考。尽管不是强制性的,但是你最好在每个规则的选项中用到下面的部分:\r\n用msg关键字引导的消息\r\n用classification关键字引导的规则分类\r\n用sid关键字引导的的数字用来标示规则\r\n用reference关键字引导的系统弱点参考URL\r\n用rev来表明不同的规则版本\r\n\r\n另外,你应该用不同的方法来攻击你的网络来测试你的规则,因为恶意用户也会用各种方法来攻击网络。好的规则应该能够探测到各种攻击。

论坛徽章:
1
丑牛
日期:2015-01-07 15:25:00
50 [报告]
发表于 2006-10-10 23:40 |只看该作者
与处理器和输出模块是Snort体系中两个重要的部分,预处理器在Snort应用规则前处理接收到的数据。输出模块输出Snort探测机制所产生的数据。数据包通过Snort的流程图如图4-1所示。被捕获的数据包首先经过预处理器,然后,经过探测引擎根据规则处理。根据规则处理的结果,输出处理器处理日志或者告警。\r\nSnort允许你对预处理器和输出模块进行配置,这些工作可以通过修改snort.conf来完成。在本书中,输入插件和预处理器是同一概念,输出插件和输出模块也是同一概念。本章将对这些组件进行讨论。\r\n4.1预处理器\r\n当Snort接收到数据包的时候,主探测引擎并不能对它们进行处理和应用规则,比如,数据包有可能是分片的,需要重新组装,预处理器就是做这样的工作,使数据能够被探测引擎处理,另外,一些预处理器还可以做一些其它工作,比如探测包中的一些明显错误。下面给你介绍预处理器如何工作。\r\n在安装过程中,你可以在编译的时候选择对各种预处理器的支持。各种预处理器的配置参数在snort.conf中调整,你可以在通过这个文件打开或者关闭某个预处理器。\r\n捕获的包要经过所有已经打开的预处理器,不能跳过,因此如果你如果打开了大量的预处理器,就会降低Snort的运行速度。\r\n在snort.conf中,你可以用preprocessor关键字打开预处理器,格式如下:\r\npreprocessor <name of preprocessor>[: parameters]\r\n后面的参数通常是可选项。\r\n你也可以编写自己的预处理器,察看Snort源代码doc目录中的README.PLUGIN文件,你可以获得相关的资料,也可以在templates目录中查看源代码示例。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP