1.概述
  入侵检测(Intrusion Detection),顾名思义,便是对入侵行为的发觉。它通过
对计算机网络或计算机系统中的若干关键点收集信息并对其进行分析,从中发现网络或
系统中是否有违反安全策略的行为和被攻击的迹象。进行入侵检测的软件与硬件的组合
便是入侵检测系统(Intrusion Detection System,简称IDS)。与其他安全产品不同的
是,入侵检测系统需要更多的智能,它必须可以将得到的数据进行分析,并得出有用的
结果。一个合格的入侵检测系统能大大的简化管理员的工作,保证网络安全的运行。

  日志是使系统顺利运行的重要保障。它会告诉我们系统发生了什么和什么没有发
生。然而,由于日志记录增加得太快了,铺天盖地的日志使系统管理员茫然无措,最终
使日志成为浪费大量磁盘空间的垃圾。日志具有无可替代的价值,但不幸的是它们经常
被忽略,因为系统管理员在并不充裕的时间里难以查看大量的信息。标准的日志功能不
能自动过滤和检查日志记录,并提供系统管理员所需要的信息。

  对于入侵者来说,要做的第一件事就是清除入侵的痕迹。这需要入侵者获得root权
限,而一旦系统日志被修改,就无法追查到攻击的情况。因此,好的系统管理员应该建
立日志文件检测。有很多工具可以实现日志检测的功能,其中就有Logcheck和Swatch。
本文将对Logcheck和Swatch逐一进行介绍。

2.日志文件系统

  审计和日志功能对于系统来说是非常重要的,可以把感兴趣的操作都记录下来,供
分析和检查。UNIX采用了syslog工具来实现此功能,如果配置正确的话,所有在主机上
发生的事情都会被记录下来,不管是好的还是坏的。

  Syslog已被许多日志系统采纳,它用在许多保护措施中--任何程序都可以通过
syslog记录事件。Syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发
送一个信息。它能记录本地事件或通过网络纪录另一个主机上的事件。

  Syslog依据两个重要的文件:/sbin/syslogd(守护进程)和/etc/syslog.conf配
置文件,习惯上,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中
(messages.*)。一个典型的syslog纪录包括生成程序的名字和一个文本信息。它还包
括一个设备和一个行为级别(但不在日志中出现)。

  /etc/syslog.conf的一般格式如下:

  设备.行为级别 [;设备.行为级别]    记录行为
  
  设备           描述
  auth         认证系统:login、su、getty等,即询问用户名和口令
  authpriv      同LOG_AUTH,但只登录到所选择的单个用户可读的文件中
  cron         cron守护进程
  daemon       其他系统守护进程,如routed
  kern        内核产生的消息
  lpr         打印机系统:lpr、lpd
  mail        电子邮件系统
  news        网络新闻系统
  syslog       由syslogd产生的内部消息
  user        随机用户进程产生的消息
  uucp        UUCP子系统
  local0~local7   为本地使用保留
  
  行为级别       描述
  debug        包含调试的信息,通常旨在调试一个程序时使用
  info        情报信息
  notice       不是错误情况,但是可能需要处理
  warn(warning)   警告信息
  err(error)     错误信息
  crit        重要情况,如硬盘错误
  alert        应该被立即改正的问题,如系统数据库破坏
  emerg(panic)    紧急情况
  
  记录行为(举例)    描述
  /dev/console     发送消息到控制台
  /var/adm/messages  把消息写到文件/var/adm/messages
  @loghost       把消息发到其它的日志记录服务器
  fred,user1      传送消息给用户
  *           传送消息给所有的在线用户

  有个小命令logger为syslog系统日志文件提供一个shell命令接口,使用户能创建
日志文件中的条目。用法:logger 例如:logger This is a test!

  它将产生一个如下的syslog纪录:Apr 26 11:22:34 only_you: This is a test!

  更详细的帮助信息请man syslogd,man syslog.conf

3.Logcheck

3.1 logcheck介绍

  Logcheck是一软件包,用来实现自动检查日志文件,以发现安全入侵和不正常的活
动。Logcheck用logtail程序来记录读到的日志文件的位置,下一次运行的时候从记录
下的位置开始处理新的信息。所有的源代码都是公开的,实现方法也非常简单。

  Logcheck SHELL脚本和logtail.c程序用关键字查找的方法进行日志检测。在这儿
提到的关键字就是指在日志文件中出现的关键字,会触发向系统管理员发的报警信息。
Logcheck的配置文件自带了缺省的关键字,适用于大多数的*inx系统。但是最好还是自
己检查一下配置文件,看看自带的关键字是否符合自己的需要。

  Logcheck脚本是简单的SHELL程序,logtail.c程序只调用了标准的ANSI C函数。
Logcheck要在cron守护进程中配置,至少要每小时运行一次。脚本用简单的grep命令来
从日志文件检查不正常的活动,如果发现了就发MAIL给管理员。如果没有发现异常活
动,就不会收到MAIL。

3.2 安装和配置logcheck

3.2.1 下载Logcheck

  下载网址 下载后放在/backup目录。

3.2.2 安装

以root用户身份登录,

  [root@only_you /root]# tar zxvf /backup/logcheck-1.1.1.tar.gz
  [root@only_you /root]# cd logcheck-1.1.1
  [root@only_you logcheck-1.1.1] make linux //在Linux平台下使用
  make install SYSTYPE=linux //缺省安装目录是/usr/local/etc
  make[1]: Entering directory `/root/logcheck-1.1.1'
  Making linux
  cc -O -o ./src/logtail ./src/logtail.c
  Creating temp directory /usr/local/etc/tmp //在/usr/local/etc下创建目录
tmp
  Setting temp directory permissions
  chmod 700 /usr/local/etc/tmp
  Copying files
  cp ./systems/linux/logcheck.hacking /usr/local/etc //拷贝文件到
/usr/local/etc目录
  cp ./systems/linux/logcheck.violations /usr/local/etc
  cp ./systems/linux/logcheck.violations.ignore /usr/local/etc
  cp ./systems/linux/logcheck.ignore /usr/local/etc
  cp ./systems/linux/logcheck.sh /usr/local/etc
  cp ./src/logtail /usr/local/bin //把logtail程序拷贝到/usr/local/bin目录
  Setting permissions
  chmod 700 /usr/local/etc/logcheck.sh //logcheck的脚本
  chmod 700 /usr/local/bin/logtail //修改文件访问权限,确认只有root用户才
能操作
  chmod 600 /usr/local/etc/logcheck.violations.ignore //不同的配置文件
  chmod 600 /usr/local/etc/logcheck.violations
  chmod 600 /usr/local/etc/logcheck.hacking

3.2.3 程序文件介绍

  logcheck.sh 主脚本文件。控制所有的处理过程,用grep命令检查日志文件,发现
问题报告系统管理员。由cron定时启动。

  logtail 记录日志文件上次处理到的位置。被logcheck程序调用,避免重复处理已
处理过的日志文件。所有的日志文件都由此程序处理,在同一目录下会产生文件
######.offset,其中######是检查的日志文件名。文件中记录了logtail开始处理的偏
移量,如果删除掉,则从文件开始处进行处理。Logcheck跟踪日志文件的inode号和文
件大小,如果inode号发生变化,或者是文件大小比上次运行时的小, logtail会重置
偏移量,处理整个文件。

  Logcheck.hacking 文件中包含了系统受到攻击时的关键字。这个文件的关键字比
较稀少,除非能知道某种特定的攻击方式的特征。缺省的关键字是ISS(Internet
Security Scanner)攻击产生的,或者是sendmail中的地址栏里的非法语法。在日志文
件中找到了关键字就会给管理员发信。

  logcheck.violations 文件中包含了产生否定或拒绝信息的系统事件。如denied,
refused等。

  logcheck.violations.ignore 文件中包含了要对logcheck.violations进行反向
查找的关键字。

3.2.4 配置

  为了使logcheck运行正常,先要对syslog.conf进行配置,你应该根据自己的需要
进行配置,下面给出的只是一个例子。

  把下面的内容加到/etc/syslog.conf中

  #记录mail,news以外的消息
  *.*;mail.none;news.none -/var/log/messages
  #记录认证请求
  auth.*;authpriv.* /var/log/authlog
  #记录所有的内核消息
  kern.* /var/log/kernlog
  #记录警告和错误消息
  *.warn;*.err /var/log/syslog

  这四个文件/var/log/messages,/var/log/authlog,/var/log/kernlog,
/var/log/syslog也就是logcheck要检查的日志文件。

  重起syslog,[root@only_you]#/etc/rc.d/init.d/syslog restart

  用编辑器(vi等)打开文件/usr/local/etc/logcheck.sh,在其中会找到下面的内

  # Linux Red Hat Version 3.x, 4.x
  $LOGTAIL /var/log/messages > $TMPDIR/check.$$
  $LOGTAIL /var/log/secure >> $TMPDIR/check.$$
  $LOGTAIL /var/log/maillog >> $TMPDIR/check.$$

  这是logcheck自带的内容,也就是logcheck要检查的日志文件,把它该为下面的内
容,使之于syslog.conf的内容相一致:(应该根据你配置的syslog.conf进行修改)

  $LOGTAIL /var/log/messages > $TMPDIR/check.$$
  $LOGTAIL /var/log/authlog >> $TMPDIR/check.$$
  $LOGTAIL /var/log/kernlog >> $TMPDIR/check.$$
  $LOGTAIL /var/log/syslog >> $TMPDIR/check.$$

  还可以找到一行为 SYSADMIN=root,指的是发邮件时的收信人,缺省为
root@localhost,本机的root用户,如果机器与Internet相连,也可以指定真实的帐
号,我就把它改为了only_you@linuxaid.com.cn,这样就可以随时收到邮件了,不须用
root帐号登录到linux机器上去。

  在/etc/crontab中增加一项,让cron定时启动logcheck。关于cron的用法请参考相
应文档。

  00,10,20,30,40,50 * * * * root /usr/local/etc/logcheck.sh

  每10分钟运行一次。

3.2.5 测试

  都配置好了,试试效果如何吧。登录一下,故意输错口令,看看有什么事情发生。
10分钟以后,我的only_you@linuxaid.com.cn信箱真的收到了一封信,信的内容大致
如下:

  Apr 26 13:51:13 only_you -- wap[1068]: LOGIN ON pts/1 BY wap FROM
*.*.*.*
  Apr 26 13:51:24 only_you PAM_unix[1092]: authentication failure;
wap(uid=500) -> root for system-auth service

  刚装好不长时间,logcheck就报告有人试图登录到我的机器上来,不知道这位IP为
211.69.197.1的朋友想干什么。

  Security Violations
  =-=-=-=-=-=-=-=-=-=
  Apr 26 15:30:53 only_you xinetd[528]: refused connect from 211.69.197.1
  Apr 26 15:30:53 only_you xinetd[528]: refused connect from 211.69.197.1
  Unusual System Events
  =-=-=-=-=-=-=-=-=-=-=
  Apr 26 15:30:53 only_you xinetd[528]: refused connect from 211.69.197.1
  Apr 26 15:30:53 only_you xinetd[528]: refused connect from 211.69.197.1
  Apr 26 15:30:53 only_you xinetd[528]: FAIL: ftp libwrap
from=211.69.197.1
  Apr 26 15:40:00 only_you CROND[1388]: (root) CMD
(/usr/local/etc/logcheck.sh)
  Apr 26 15:40:00 only_you CROND[1388]: (root) CMD
(/usr/local/etc/logcheck.sh)
  Apr 26 15:40:00 only_you CROND[1390]: (root) CMD ( /sbin/rmmod -as)
  Apr 26 15:40:00 only_you CROND[1390]: (root) CMD ( /sbin/rmmod -as)
  Apr 26 15:30:53 only_you xinetd[528]: FAIL: ftp libwrap
from=211.69.197.1

4.swatch

  SWATCH (The Simple WATCHer and filer) 是Todd Atkins开发的用于实时监视日
志的PERL程序。Swatch利用指定的触发器监视日志记录,当日志记录符合触发器条件
时,swatch会按预先定义好的方式通知系统管理员。

  Swatch非常容易安装。它是一个PERL程序,无需编译。Swatch有一个很有用的安装
脚本,将所有的库文件、手册页和PERL文件复制到相应目录下。安装完成后,只要创建
一个配置文件,就可以运行程序了。Swatch的下载网址,最新的版本为3.0.1 。下载后
也放到了/backup目录。

4.1 安装

  以root用户身份登录,

  [root@only_you /root]# tar zxvf /backup/swatch-3.0.1.tar.gz
  [root@only_you /root]# cd swatch-3.0.1

  现在的版本需要perl 5和Time::HiRes, Date::Calc,Date::format, file::Tail.
模块,系统自带的perl可能不包括,没关系,它的安装程序会自己到网上去找。

  [root@only_you swatch-3.0.1]# perl Makefile.PL

  系统提示HiRes 1.12模块没有安装,询问是否安装,回答y,

  接着系统提示Are you ready for manual configuration? [yes]

  敲n就会自动配置,然后它自己到网上去装东西,具体在干什么我也不清楚了。装
完这个又说缺别的东西,还是让它自己去装。试着执行一下./swatch,如果没有错误信
息就说明安装成功了。

4.2 配置swatchrc

  swathrc文件的格式如下

  # Bad login attempts
  watchfor /INVALID|REPEATED|INCOMPLETE/
  echo
  bell 3
  mail=only_you@linuxaid.com.cn
  # Machine room temperature
  watchfor /WizMON/
  echo inverse
  bell

  watchfor后跟/pattern/, 其中的"pattern"代表一个swatch将要进行搜索匹配的
正则表达式,也就是我们的触发器,下面紧跟的以“Tab”开头的是当表达式匹配时所
要执行的动作,Swatch允许指定包括显示、email、呼叫或任何指定的执行文件。上面
第一个watchfor的含义是找到/INVALID|REPEATED|INCOMPLETE/后把信息显示到屏幕
上,响铃,同时向only_you@linuxaid.com.cn发MAIL。详细的正则表达式的格式请参考
相应的文档。

  缺省情况下,swatch认为swatchrc文件为~/.swatchrc,可以通过运行时指定参数
来改变,如果未找到swatchrc文件,则使用缺省的配置

  watchfor = /.*/
  echo = random

4.3 测试

  Swatch启动时可以带很多参数,但使用通常如下格式启动它就可以了:

  /usr/local/bin/swatch -c /var/log/syslogrc -t /var/log/syslog &

  -c参数用于指定配置文件,-t参数指定实时监视的日志文件,"&"使swatch在后台
运行。启动后,swatch产生子进程,因此swatch是以两个进程运行的,在停止swatch时
必须杀掉两个进程。

  -t参数是用tail –f filename,从文件的末尾开始查找,如果想查找整个文件,
则应该使用-f filename。

  现在让我们来实验一下,在swatch程序所在的目录下建立swatchrc文件,内容如下

  watchfor = /FAILED/
  echo=random

  执行./swatch –c swatchrc –f /var/log/authlog,所有登录失败的记录就会显
示出来,并且还用不同的颜色来显示。

  Apr 26 17:43:34 only_you login[2344]: FAILED LOGIN 1 FROM cjm FOR dsf,
Authentication failure
  Apr 27 09:55:50 only_you login[932]: FAILED LOGIN 1 FROM (null) FOR
root, Authentication failure

5.总结

  日志是很强大的工具,然而它的大量数据也很容易淹没我们。如果我们没有足够的
时间去检查数以兆计的数据时,很可能会忽略那些有用的资料。日志自动检测系统可以
帮助我们解决这个问题。这些自动检测系统将我们所需要的信息实时地通知我们。希望
本文能对如何定制你自己的日志文件自动检测系统有一定的帮助。

6.参考资料

[1]《An Introduction to Intrusion Detection& ASSESSMENT》ICSA, Inc.
[2]http://www.psionic.com
[3] 《The Common Intrusion Detection Framework Architecture》
Phil Porras, SRI
Dan Schnackenberg, Boeing
Stuart Staniford-Chen, UC
Davis, editor
Maureen Stillman, Oddysey Research
Felix Wu, NCSU