EDN首页   博客首页

日志档案

发表于 2007-4-24 13:58:53

0

标签: 无标签

使用强大的Snort

  这篇文档通过snort来在你的系统上建立一个网络安全检测系统,并且将所有可能发生的安全入侵动作记录下来。

  Snort是Martin Roesch开发的一个基于软件的实时入侵检测系统,它可以提醒管理员任何一个潜在的入侵行为。对于日益增涨的网络攻击行为、功能强大的exploits和一些经验丰富的黑客来说,它们以成为你网络中的隐患,监视与跟踪他们的动作以成为你日常工作中的一部分。

  直到现在,检测系统一般都是一些专业的硬件设备和一些非实时性的产品并且非常难于安装,Snort是一个基于TCP/IP的网络监听解决方案,它的使用成本远低于专业的监听设备,因为它是开源软件,Snort非常易于使用,虽说它是一个轻量级的产品但它的功能一点也不亚于商业产品。

什么是网络安全检测系统?

  网络入侵检测系统(NIDS)是一个可以检测任何非正常信息和未经认证信息的系统,它不象防火墙一样通过配置访问列表和内容信息检测来控制网络,如果传输方法和内容被允许,它才被允许通过,但是NIDS捕捉和检测全部的传输,不管理它是允许的还是不被允许的数据包,它是基于传输内容的一种控制方法,可以对于任一一个IP或应用层进行警告控制。
Snort是一个轻量级的NIDS系统,它不会打断入侵行为,它只是起到监控作用,它非常容易控制,可以使用一些你所熟悉的方法进行开发,并且安装很快。Snort当前包含了超过1100条入侵警告信息。而且它保留了一些和其他检测设备时行沟通的方法,它并不会影响其他优秀的入侵检测设备的工作。

它非常彻底的封装了一些包特性,以下是snort可以使用的特性:

  • 可以检测缓冲区溢出、端口扫描、CGI攻击、SMB探测、NetBios探测、NMAP扫描等等,并且可以检测出系统中一些未知的木马程序、DDos客户端和许多许多未知的程序。

• 使用syslog、SMB的网络消息来警告系统管理员。
• 可以快速开发出新的入侵警告
• 将数据包以人性化的方法进行解码并以目录方式记录.
• 使用被动方式进行检测
• 可以使用DSL或专用服务器来检测你的网络

  Snort使用libpcap库,tcpdump工具也使用同样的库文件,Snort解码所有通过网络的数据包用于检测是否有入侵动作,在它工作时它以混杂模式工作。

为什么要使用入侵检测系统?

  入侵检测设备都应该是任何网络中的一部分,它可以将帮助你检测最新的入侵行为。

在安装Snort之前
在实装Snort之前有一些事情需要你考虑。
• 你的组织或机构是否你同意你使用检测系统?
• 在你的系统上安装snort是否安全?
• 你将在那里安装Snort?如果你想尝试找出扫描你机器端口或攻击你自已网络的人来的话,它可能是最好的了,不过对于放置在公司里面的snort来说可能会难一点。
• 你的时间是否正确,这对于NIDS来说非常重要,建议你通过time server来进行同步。请你修改crontab文件。
00 * * * * root /usr/sbin/ntpdate -u

安装检测设备

  这个检测设备可以放置在组织的防火墙外面或放置在DMZ中。这样将可以使 snort检测到攻击行为而且不影响防火墙的工作。

交换机、路由器、防火墙的存在将影响检测系统的正常工作。

单一接口

  单一接口对于检测设备来说是最容易的。单一接口可以用来监听网络中所有的数据传输,前提这个网络是基于非交换环璄的。

双接口

  在两接口中一个接口用于网络监听,一个接口用于远程网络管理。这种配置将不提供任何服务,只提供一个SSH远程服务进行管理。

实装Snort

  首先保证机器上以正确安装了libpcap库。如果你是Redhat系统可以去以下地址下载:

http://www.linuxsecurity.com/programs/snort-1.6.2.2-1.i386.rpm. ftp://ftp.ee.lbl.gov/libpcap.tar.Z.

实装网络入侵检测库

  安装后你可以通过网络下载最新的入侵库: http://www.snort.org/snort-files.htm#Rules

  还有一些其他的入侵库你可以通过http://dev.whitehats.com/ids/vision.conf 下载,它们每个小时都会更新

  如果你是通过rpm进行的安装,你可以通过snort-update进行升级,修改你的cron文件。

  00 00 * * * root /usr/sbin/snort-update -q

  在正确安装以后,你就可以使用它了,以下是它的最基本命令集合

# snort -? 打印出最常用的选项

test-drive是用来保证正确的安装。只监视本地机器,-I=interface:

# snort -vdei eth0

用CTRL+C来停止测试。不要忘了将你的网卡设为混杂模式。Snort将以后台程序形式运行,并会以开启停止形式出现。

Packet Sniffer模式

这种模式下,只将TCP/IP报头打印出来

# snort -v

查看应用层数据

# snort -vd


数据联接层报头

# snort -vde

记录

  指定任何其他选项是没有意义的,如果你需要Snort的安装选项或者使用tcpdump,请解析出这个文件,-r表示读并处理文件。
# snort -vder /var/log/snort/snort-0629@1600.log
对Berkeley Packet Filter解析出特定的项目
# snort -vder /var/log/snort/snort-0629@1600.log udp
# snort -vr /var/log/snort/snort-0629@1600.log tcp
# snort -ver /var/log/snort/snort-0629@1600.log icmp
  对Berkeley Packet Filter用man查看snort和tcpdump的其他选项。

网络侵入探测模式

  现在我们进入真正的Snort工具。看一下/etc/snort/snort.conf,全局配置文件。Snort的规则设置也以文本文件形式存放在/etc/snort。最后仔细看一下这一行:

var HOME_NET $eth0_ADDRESS

  这个是按照本地网卡的网络设置来初始化Snort。

  为了保证速度,记录每个单个的包并显示在屏幕上是不可能的。包会被丢弃,而记录文件会变得非常庞大。使用-v切换,这样就不会显示在屏幕上,我们可以不用-e,数据连接报头:

# snort -dl /var/log/snort -h 192.168.1.0/24 -c /etc/snort/snort.conf

  -h表示本地网络,-c表示使用规则设定。这是最基本的,用ASCII记录安装规则定义的包。使用-b切换记录为二进制文件。注意定义子网范围用CIDR符号。

  这些神秘的规则设定是从哪里来得呢?两个来源:从Snort.org,包括在RPM或是下载的二进制文件中;从Martin Roesch,Snort的制作者,他设计的Snort在所有方面都很迅速:安装、运行和对攻击的反应。如果你有能力分析一个攻击和确认一个独特的信号,你可以自己写一个规则来发现并记录它。参见你下载的Snort用户手册(SnortUsersManual.pdf),这是一个非常好的写定制规则指南。(这些文件都可以在线获得)Snort.org每天更新规则设定,你可以下载让你满意的。你可以在Snort.org上的Snort/contrib目录找到snortpp,可以用它来合并新的规则

下面就是配置好snort.conf的文件了,以下是最基本的配置文件:

#
# Taken and modified from "vision.conf", part of Max Vision's
# ArachNIDs work. See /usr/doc/snort-1.6/README.snort-stuff for more
# information on how to use this file.

var INTERNAL 192.168.1.0/24
var EXTERNAL 63.87.101.0/24
var DNSSERVERS 63.87.101.90/32 63.87.101.92/32

preprocessor http_decode: 80 443 8080
preprocessor minfrag: 128
preprocessor portscan-ignorehosts: $DNSSERVERS
preprocessor portscan: $EXTERNAL 3 5 /var/log/snort/portscan.log
# |
# Log file (path/name) ----------------------------------+

# Ruleset, available (updated hourly) from:
#
# http://dev.whitehats.com/ids/vision.conf

# Include the latest copy of Max Vision's ruleset
include /etc/snort/vision.conf

#
# Uncomment the next line if you wish to include the latest
# copy of the snort.org ruleset. Be sure to download the latest
# one from http://www.snort.org/snort-files.htm#Rules
#
# include /etc/snort/06082k.rules

#
# If you wish to monitor multiple INTERNAL networks, you can include
# another variable that defines the additional network, then include
# the snort ruleset again. Uncomment the two following lines.
#
# var INTERNAL 192.168.2.0/24
# include /etc/snort/vision.conf

# include other rules here if you wish.
authpriv.* /var/log/secure.log

[root@krypton ~]# snort -d -l /var/log/snort -c /etc/snort/rules.base
Initializing Network Interface...
User level filter, protocol ALL, raw packet socket
Decoding Ethernet on interface eth0
Initializing Preprocessors!
-------------------------------------------------
Keyword | Preprocessor @
-------------------------------------------------
http_decode : 0x8053070
minfrag : 0x8053290
portscan : 0x8053ce0
portscan-ignorehosts: 0x8054340
-------------------------------------------------

Initializing Plug-ins!
-------------------------------------------------
Keyword | Plugin Registered @
-------------------------------------------------
content : 0x8052050
offset : 0x8052080
depth : 0x80520f0
nocase : 0x8052160
flags : 0x8052710
itype : 0x80528f0
icode : 0x8052a00
ttl : 0x8052b10
id : 0x8052bf0
ack : 0x8052cd0
seq : 0x8052dc0
dsize : 0x8052ec0
ipopts : 0x8054420
rpc : 0x8054670
icmp_id : 0x8054830
icmp_seq : 0x8054930
session : 0x8055300
-------------------------------------------------

Initializating Output Plugins!
-------------------------------------------------
Keyword | Output @
-------------------------------------------------
alert_syslog : 0x8054a20
log_tcpdump : 0x8054ff0
-------------------------------------------------


+++++++++++++++++++++++++++++++++++++++++++++++++++
Initializing rule chains...
255 Snort rules read...
255 Option Chains linked into 140 Chain Headers
+++++++++++++++++++++++++++++++++++++++++++++++++++

Performing Rule List Integrity Tests...
---------------------------------------
Alert TCP Chains : OK
Alert UDP Chains : OK
Alert ICMP Chains : OK
Log TCP Chains : Empty list...
Log UDP Chains : Empty list...
Log ICMP Chains : Empty list...
Pass TCP Chains : Empty list...
Pass UDP Chains : Empty list...
Pass ICMP Chains : Empty list...
---------------------------------------


-*>; Snort! <*-
Version 1.6
By Martin Roesch (roesch@clark.net, www.clark.net/~roesch)
按Ctrl+c可以停止snort的运行,如果你想snort运行在后台你可以使用:
[root@krypton ~]# /usr/sbin/snort -s -d -D -i eth0 -l /var/log/snort -c /etc/snort/rules.base
如果你想snort启动时就载入可以编辑一个文件,放入/etc/rc.d/init.d/snortd这个文件中
[root@krypton ~]# /etc/rc.d/init.d/snortd
Starting snort: [ OK ]
[root@krypton ~]# ps awx | grep snort
9131 ? S 0:04 /usr/sbin/snort -s -d -D -i eth0 -l
/var/log/snort -c /etc/snort/rules.base
9149 pts/1 S 0:00 grep snort
[root@krypton ~]#
之后为了测试一下snort是否工作正常你可以使用nmap来测试一下。
[root@krypton ~]# nmap -p 25,53 -sX -P0 -D 1.2.3.4,5.6.7.8 192.168.200.189

Starting nmap V. 2.54BETA1 by fyodor@insecure.org (www.insecure.org/nmap/)
Interesting ports on smtp.mydomain.com (192.168.200.189):
Port State Service
25/tcp open smtp
53/tcp open domain

Nmap run completed -- 1 IP address (1 host up) scanned in 19 seconds
之后snort如果工作正常的话,你将得到一条这样的信息
Jun 18 15:57:52 krypton snort[9131]: spp_portscan: PORTSCAN DETECTED from
1.2.3.4
Jun 18 15:57:52 krypton snort[9131]: spp_portscan: PORTSCAN DETECTED from
5.6.7.8
Jun 18 15:57:58 krypton snort[9131]: spp_portscan: portscan status from
192.168.1.100: 2 connections across 1 hosts: TCP(2), UDP(0) STEALTH
Jun 18 15:57:58 krypton snort[9131]: spp_portscan: portscan status from
1.2.3.4: 2 connections across 1 hosts: TCP(2), UDP(0) STEALTH
Jun 18 15:57:58 krypton snort[9131]: spp_portscan: portscan status from
5.6.7.8: 2 connections across 1 hosts: TCP(2), UDP(0) STEALTH
[root@krypton ~]# cd /var/log/snort
[root@krypton snort]# find 192.168.200.189
192.168.100.189
192.168.100.189/ICMP_ECHO
192.168.100.189/ICMP_PORT_UNRCH
192.168.100.189/TCP:57554-32771
192.168.100.189/TCP:57555-32771
[root@krypton ~]#
[root@krypton 192.168.100.189]# cat TCP:57554-32771
** MISC-Attempted Sun RPC high port access **
06/18-00:48:31.928357 192.168.100.189:57554 ->; 192.168.200.189:32771
TCP TTL:42 TOS:0x0 ID:5410
***F*P*U Seq: 0x0 Ack: 0x0 Win: 0x400
00 00 00 00 00 00 ......
The corresponding syslog entry looks like:
Jun 18 00:48:31 krypton snort[8757]: MISC-Attempted Sun RPC high port
access: 192.168.100.189:57554 ->; 192.168.200.189:32771

系统分类: 嵌入式   |   用户分类: 无分类   |   来源: 转贴   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(463)    回复(0)  

投一票您将和博主都有获奖机会!