欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Unix/Linux下入侵检测系统--- snort

程序员文章站 2022-07-03 11:40:30
  一、snort介绍 Snort是被设计用来填补昂贵的、探测繁重的网络侵入情况的系统留下的空缺。Snort是一个免费的、跨平台的软件包,用作监视小型TCP/IP网的嗅探器、日志记...
  一、snort介绍
Snort是被设计用来填补昂贵的、探测繁重的网络侵入情况的系统留下的空缺。Snort是一个免费的、跨平台的软件包,用作监视小型TCP/IP网的嗅探器、日志记录、侵入探测器。它可以运行在linux/UNIX和Win32系统上,你只需要几分钟就可以安装好并可以开始使用它。
 
    Snort的一些功能:
 
    - 实时通讯分析和信息包记录
 
    - 包装有效载荷检查
 
    - 协议分析和内容查询匹配
 
    - 探测缓冲溢出、秘密端口扫描、CGI攻击、SMB探测、操作系统侵入尝试
 
    - 对系统日志、指定文件、Unix socket或通过Samba的WinPopus 进行实时报警
 
    Snort有三种主要模式:信息包嗅探器、信息包记录器或成熟的侵入探测系统。遵循开发/*软件最重要的惯例,Snort支持各种形式的插件、扩充和定制,包括数据库或是XML记录、小帧探测和统计的异常探测等。
 
  信息包有效载荷探测是Snort最有用的一个特点,这就意味着很多额外种类的敌对行为可以被探测到。
 
    二、所需软件包的安装以及安装
 
  下在所需要的软件包
 
  1.libcap
 
  http://www.mirrors.wiretapped.net/security/packet-capture/libpcap/libpcap-0.8.3.tar.gz
 
  2.snort
 
  http://www.snort.org/dl/snort-2.2.0.tar.gz
 
  3.snort rules
 
  http://www.snort.org/dl/rules/snortrules-snapshot-2_2.tar.gz
 
  4.openssl
 
  http://www.openssl.org/source/openssl-0.9.7d.tar.gz
 
  5.acid基于Web的入侵事件数据库分析控制台
 
  http://acidlab.sourceforge.net
 
  6.gd
 
  http://www.boutell.com/gd/
 
  7.adodb为ACID提供便捷的数据库接口;
 
  http://php.weblogs.com/ADODB
 
  8.phplot ACID所依赖的制图库;
 
  http://www.phplot.com/
 
  9.apache www.2cto.com
 
  http://www.apache.org
 
  10.mysql
 
  http://wwww.mysql.com
 
  11.php(v> 4.2)
 
  http://www.php.net
 
snort 安装
 
二、开始安装
 
  1.安装MySQL
 
#addgroup mysql
 
#adduser mysql
 
# mkdir /var/lib/mysql
 
# chown -R mysql.mysql /var/lib/mysql
 
  然后,以mysql身份登录,执行下列命令:
 
  $gzip -d -c mysql-3.23.49.tar.gz | tar xvf -
 
  $cd mysql-3.23.49
 
  $./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql
 
  $make
 
$make install
 
数据库初始化,建立配置文件,启动mysql服务。
 
修改root口令:
 
# /usr/local/mysql/bin/mysqladmin -u root password 123
 
  2.安装openssl
 
  #tar zxvf openssl*
 
  #cd openssl
 
  #./configure
 
  #make
 
  #make test
 
  #make install
 
  3.安装libpcap
 
  #tar zxvf libpcap*
 
  #cd libpcap-0.8.3
 
  #./configure
 
  如果出现:
 
  configure: warning: cannot determine packet capture interface
 
  configure: warning: (see INSTALL for more info)
 
  说明需要编译系统内核,使其对CONFIG_PACKET支持//对于2.4以后的内核都已支持
 
  #make
 
  #make install
 
 
4. 安装libnet
 
# tar zxvf libnet-1.0.2a.tar.gz
 
# cd libnet-1.0.2a
 
# ./configure --prefix=/usr/local/libnet
 
# make ; make install
 
5.安装snort
 
  #tar zxvf snort*
 
  #cd snort-2.2.0
 
  #./configure --enable-flexresp --with-mysql=/usr/local/mysql --with-openssl=/usr/local/ssl
 
  支持mysql,持openssl 还有更多的一些选项,可以参见tarball文档  
 
  如果出现:
 
  ERROR! Libpcre header not found, go get it from
 
  请http://www.pcre.org下载lib库安装即可。
 
  如果出现:
 
  ERROR! Libnet header not found
 
  请http://www.packetfactory.net/projects/libnet/下载安装即可。
 
如果已经安装,可以用--with-libnet-* 选项
 
或者:
 
PATH=$PATH:/usr/local/libnet/bin
 
--with-libnet-libraries=/usr/local/libnet/lib
 
--with-libnet-includes=/usr/local/libnet/include
 
#make
 
  #make install
 
  6.安装apache
 
  #./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all
 
  #make
 
  #make install
 
  7.安装gd
 
  首先安装为PHP提供既时生成PNG和JPG图象功能的GD库:
 
  #gzip -d -c gd-2.0.28.tar.gz | tar xvf -
 
  #cd gd-2.0.28
 
  #make
 
  #make install
 
  8.安装php
 
  #gzip -d -c php-4.3.2.tar.gz | tar xvf -
 
  #cd php-4.3.2
 
  #./configure -with-mysql=/usr/local/mysql \
 
  --with-apxs2=/usr/local/apache/bin/apxs \
 
  --with-gd=/usr/local
 
  #make
 
  #make install
 
拷贝php.ini-dist
 
# cp ./php.ini-dist /usr/local/php
 
修改httpd.conf 支持php
 
AddType application/x-httpd-php .php
 
  9.安装ACID
 
  该部分的安装工作具体包括三个软件包:adodb452.tar.gz、phplot-5.0rc1.tar.gz和acid- 0.9.6b23.tar.gz 。安装过程十分简单,只需分别将这三个软件包解压缩并展开在Apache服务器的文档根目录下即可,具体操作
 
  如下所示:(本服务器的文档目录为/usr/local/apache/htdocs)
 
  #cd /www/ids/
 
  #gzip -d -c adodb452.tar.gz | tar xvf -
 
  #gzip -d -c phplot-5.0rc1.tar.gz | tar xvf -
 
  #gzip -d -c acid-0.9.6b23.tar.gz | tar xvf -
 
  然后开始配置工作,转到acid目录下编辑ACID的配置文件:acid_conf.php给下列变量赋值:
 
  $DBlib_path=" ../adodb"
 
  $DBtype=" mysql"
 
  $alert_dbname=" snort"
 
  $alert_host=" localhost"
 
  $alert_port=" 3306"
 
  $alert_user=" root"
 
  $alert_password=" 123"
 
  $archive_dbname=" snort"
 
  $archive_host=" localhost"
 
  $archive_port=" 3306"
 
  $archive_user=" root"
 
  $archive_password=" 123"
 
  $ChartLib_path=" ../phplot"
 
  $Chart_file_format=" png"
 
  $portscan_file=" /var/log/snort/portscan.log"
 
  好,到此,所需软件安装完成,下面进入snort的设定与启动
 
snort 配置
 
三、snort的设定与启动
 
  我们可以把Snort运做在chroot的环境中,设定也是很简单,首先,可以选定一个有足够位置放置Snort的Log的地方,如果您会定期检查及清除Log文档,您可以把Snort的chroot环境放在/home/snort中,然后需要的是一个
 
  snort使用者,执行以下的指令新增Snort这个用者:
 
  # groupadd snort
 
  # useradd -g " snort" -d " /home/snort" -s " /nonexists" -c " Snort User" snort
 
  然后,把snortrules.tar.gz这个文件解压在/home/snort中,解压了snortrules包后,在/home/snort/ 内有rules文件出现,这就是Snort使用的Ruleset,这些Ruleset就是供Snort用作侦测任何网络反映的基础。在rules中有一个是" snort.conf" ,它是Snort的配置文件,需要按实际情况修改snort.conf。
 
  在snort.conf 中,需要修改几个地方便可以执行Snort,以下是可能需要修改的地方:
 
  - var HOME_NET
 
  网络或是主机的IP,例如只有这一台服务器,就可以只输入服务器的IP 地址,如果机器有两个以上的IP,
 
  可以使用这个方法:
 
  var HOME_NET [192.168.1.1,192.168.1.2]
 
  或是
 
  var HOME_NET 192.168.1.0/24
 
  -var SMTP [IP.Address]
 
  SMTP 服服器的位置,如果与HOME_NET 中的不同,只需把$HOME_NET 移除,并加其指定SMTP 机器的IP便可以。
 
  - var HTTP_SERVERS
 
  HTTP 服服器,与SMTP 中的设定相同,如成为Web Server 的不是HOME_NET 机器,可以指定给其他的IP。
 
  - var DNS_SERVERS
 
  DNS 服务器的IP地址,同时需要Uncomment 以下一行:
 
  # preprocessor portscan-ignorehosts: $DNS_SERVERS
 
  这可以防止因为DNS 的Lookup 而记录无用的PortScan 。
 
  最后是有关记录部份的配置,刚才编译Snort时加入了" MySQL" 的支持,为了使用MySQL 记录,先要在MySQL中
 
  建立Snort 使用的Databases、用者名及密码,执行以下命令:
 
  # echo " CREATE DATABASE snort; " | mysql -u root -p123
 
  # grant INSERT,SELECT on snort.* to snort@localhost
 
  然后在Snort 的源始码内找到" schemas/create_mysql" ,再执行以下命令建立Tables
 
  # mysql -u root -p < create_mysql (在最上面一行,添加use snort;)
 
  完成后,别忘记在snort.conf 中也要启动MySQL 的支持,简单地Uncomment 以下:
 
  在454行:
 
  output database: log, mysql, user=snort password=123 dbname=snort host=localhost
 
  在493行:
 
  ruletype redalert
 
  {
 
  type alert
 
  output alert_syslog: LOG_AUTH LOG_ALERT
 
  output database: log, mysql, user=snort dbname=snort host=localhost
 
  }
 
  四,执行snort
 
  一切准备工作都做好了,那么现在开始让snort运行起来了哦:)
 
  但在这之前请:
 
  #mkdir /var/log/snort
 
  #chown snort.snort /var/log/snort
 
  现在开始cd 进入/home/snort 内,然后打入这个命令:
 
  /home/snort #snort -b -d -i eth0 -u snort -g snort -c /home/snort/rules/snort.conf -l /var/log/snort &
 
  -u 功能是使snort 由" snort" 这个使用者执行,进入chroot 的用者环境
 
  -c 指定使用的指定目录
 
  & 只是在背景中执行 
 
  五、SNORT规则编写简介
 
  一条Snort规则可以分为前后两个部分,规则头和后面的选项部分。规则头包含有匹配后的动作命令、协议类型、以及选择流量的四元组(源目的IP及源目的端口)。规则的选项部分是由一个或几个选项的符合,所有主要选项之间是与的关系。选项之间可能有一定的依赖关系,选项主要可以分为四类,第一类是数据包相关各种特征的描述选项,比如:content、fla gs、dsize、ttl等;第二类是规则本身相关一些说明选项,比如:reference、sid、classtype、priority等;
 
  第三类是规则匹配后的动作选项,比如:msg、resp、react、session、logto、tag等;第四类是选项是对某些选项的修饰,比如从属于content的nocase、offset、depth、regex等。由于snort的规则语言语法非常简单,所以可以对新发现的攻击作出快速的反应,迅速开发新的snort规则。编写新的规则,最重要的是知道新攻击的特征码。要得到一个新的攻击的特征码,一般的方法就是进行实际的测试。对一个测试网络进行攻击,使用snort记录在攻击主机和测试网络之间的数据流。然后,对记录的数据进行分析得到其唯一的特征码,最后把得到的特征码加入到规则中。下面是IMAP缓冲区溢出攻击被记录下的数据包:
 
  --------------------------------------------------------------------------
 
  052499-22:27:58.403313 192.168.1.4:1034 -> 192.168.1.3:143
 
  TCP TTL:64 TOS:0x0 DF
 
  ***PA* Seq: 0x5295B44E Ack: 0x1B4F8970 Win: 0x7D78
 
  90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 3B ...............;
 
  5E 89 76 08 31 ED 31 C9 31 C0 88 6E 07 89 6E 0C ^.v.1.1.1..n..n.
 
  B0 0B 89 F3 6E 08 89 E9 6E 0C 89 EA CD 80 .....n....n.....
 
  31 DB 89 D8 40 CD 80 90 90 90 90 90 90 90 90 90 1...@...........
 
  90 90 90 90 90 90 90 90 90 90 90 E8 C0 FF FF FF ................
 
  2F 62 69 6E 2F 73 68 90 90 90 90 90 90 90 90 90 /bin/sh.........
 
  ---------------------------------------------------------------------------
 
这个攻击的特征码就是/bin/sh字符串及其前面的机器代码。这实际上是一个shellcode。
 
用这些信息可以很快开发出一条新的规则:
 
  alert tcp any any -> 192.168.1.0/24 143 (content:" |E8C0 FFF FF|/bin/sh" ;
 
  msg:" New IMAP Buffer Overflow detected!"
 
  其中的特征码含有文本和16进制两种形式,它们以|分割,snort运行时都被转换为二进制形式。
 
  至此,LINUX下的Snort 安装建立成功。结果可以直接从WEB界面上看到,一套完整的IDS系统就可以正常运行了。
 
 六、验证:
 
http://server ip/acid
 
 

Unix/Linux下入侵检测系统--- snort

Unix/Linux下入侵检测系统--- snort



 
 
 
七、结束语

 
  Snort 的设定与安装都是很简单的,尽管Snort 所做的不外是记录及提供侦测,可是这个工作却不可以忽视,很多公司都有设定有防火墙,而防火所做的是帮您防止多数的攻击,加上使用Snort 的强大IDS功能,网络管理员可以即随时知道一切Cracker、Lamer 对公司网络的攻击,而同时可以改变防火墙的Rules,阻止外来的攻击,这是单一防火墙不能为的。