king

Tripwire:一款老牌的文件完整性检查器

king 安全防护 2023-01-10 349浏览 0

Tripwire是一款最为常用的开放源码的完整性检查工具,它生成目标文件的校验和并周期性的检查文件是否被更改。下面我们简单介绍一下 Tripwire的运行机理。与大多数完整性检查程序相同,对于需要监视的文件,Tripwire会使用校验和来为文件的某个状态生成唯一的标识(又称为 “快照”),并将其存放起来以备后用。当Tripwire程序运行时,它先计算新的标识,并于存放的原标识加以比较,如果发现不匹配的话,它就报告系统管理人员文件已经被修改。接下来,系统管理员就可以利用这个不匹配来判断系统是否遭到了入侵。例如,如果Tripwire已经为/bin/login和 /bin/ls存放了快照,那么对它们的尺寸、inode号、权限以及其他属性的任何修改,都逃不过Tripwire的火眼金睛。尤其是对于文件内容的修改,即使只改变了一个字节,Tripwire也能察觉得到,因为校验和是针对文件整体的。

下载链接:http://down.51cto.com/data/149235

>>去网络安全工具百宝箱看看其它安全工具

Tripwire的工作原理

当Tripwire运行在数据库生成模式时,会根据管理员设置的一个配置文件对指定要监控的文件进行读取,对每个文件生成相应数字签名,并将这些结果保存在自己的数据库中,在缺省状态下,MD5和SNCFRN(Xerox的安全哈希函数)加密手段被结合用来生成文件的数字签名。除此以外,管理员还可使用MD4,CRC32,SHA等哈希函数,但实际上,使用上述两种哈希函数的可靠性已相当高了,而且结合MD5和sncfrn两种算法(尤其是sncfrn)对系统资源的耗费已较大,所以在使用时可根据文件的重要性做取舍。当怀疑系统被入侵时,可由Tripwire根据先前生成的,数据库文件来做一次数字签名的对照,如果文件被替换,则与Tripwire数据库内相应数字签名不匹配, 这时Tripwire会报告相应文件被更动,管理员就明白系统不”干净”了。

有一点要注意,上述保障机制的重点在于数据库内的数字签名,如果数据库是不可靠的,则一切工作都丧失意义。所以在Tripwire生成数据库后,这个库文件的安全极为重要。比较常见的做法是将数据库文件, Tripwire二进制文件,配置文件单独保留到”可拿走并锁起来”的质上,如软盘,将上述文件复制到软盘后,关闭写保护口,锁到保险柜中。除软盘外, 一次性介质,如cd-r也是很好的选择,这样即使侵入者拿到盘也无计可施。除这种办法外,利用PGP等加密工具对上述关键文件进行数字签名也是一个很好的选择。

当然,当管理员自身对某些文件更动时, Tripwire的数据库必然是需要随之更新的, Tripwire考虑到了这一点,它有四种工作模式:数据库生成,完整性检查,数据库更新。交互更新。当管理员更动文件后,可运行数据库更新模式来产生新的数据库文件。

下载Tripwire,安装前的准备工作

Tripwire支持绝大多数Unix操作系统,它的安装需要编译环境,如gcc,cc等,还需要gzip,gunzip等解压工具。这些工具管理员可从相应站点获取,这里不讨论。Tripwire可从www.tripwire.com获得,到它的主页download部分,可以看到当前可免费download的Tripwire1.3 ASR版本,下载下来就是。

安装Tripwire

Tripwire的tar包解开后,我们可以看到如下目录结构,建议先看看根下的README文件,对Tripwire有个整体的了解。随后,我们就可以一步步的安装这个软件了。

步骤1:匹配主机环境

在Tripwire的根下有Ported这个文件,它是对支持的系统及相关配置文件的描述,管理员第一步需要打开这个文件,找到符合自己系统的描述,本文的测试环境是solaris2.6,我们截取相关部分来看看,

vendor:SunMicrosystems,Inc. 
  • os:SunOS osversion:5.x(Solaris2.x)
  • compiler:cc cflags:-O
  • ldflags: libs:
  • conf.h:conf-svr4.h tw.config:tw.Conf.sunos5
  • notes:

    在这一段描述中,要尤其注意的是conf.h 和tw.config对应的行,在下几步的配置中需要用到它们两个对应的文件。此处要注意的是:每种操作系统这两个地方所对应的文件是不同的。

    步骤2:配置监控目标

    进入include目录,编辑config.h文件,将第一步Ported中conf.h后对应的文件名和路径写入config.h开始#include部分,此例中即为

    #include"../configs/conf-svr4.h"
    

    同时注意的是,在configh文件中还有Tripwire配置文件,Tripwire数据库文件的放置路径及生成数据库的文件名等设置,管理员按照个人喜好设置即可编辑好config.h后,还要根据本机情况编辑修改位于configs目录下的Tripwire配置文件,也就是上面Ported 文件中tw.config对应的tw.conf.sunos5,我们知道,对文件,目录等的监控就是在这里设置的。我们一段段的选取一部分这个文件来看看:

    # 
  • #-:ignorethefollowingatributes #+:donotignorethefollowingattributes
  • # #p:permissionandfilemodebitsa:accesstimestamp
  • #i:inodenumberm:modificationtimestamp #n:numberoflinks(refcount)c:inodecreationtimestamp
  • #u:useridofowner1:signature1 #g:groupidofowner2:signature2
  • #s:sizeoffile
  • 注意上述p,I,n,u,g,s,a,c,1,2等,它表示可以对文件,目录设置的监控项目,管理员可组合使用,最前面的-,+号表示选取或忽略这些属性。如下例:

    /var+pinugsm12-a
    

    它表示对目录/var下所有文件检查,监控项目分别有文件属性,inode,链接数,属组,属主,修改时间,生成时间,数字签名等,但是,对这个目录下的文件的访问不加监控,如果访问也监控的话,正常的用户访问也会被Tripwire捕捉,这没有必要。

    为了方便起见,Tripwire作者把常见组合做成了模板,如下,

    # 
  • #Templates:(default)R:[R]ead-only(+pinugsm12-a) #L:[L]ogfile(+pinug-sam12)
  • #N:ignore[N]othing(+pinusgsamc12) #E:ignore[E]verything(-pinusgsamc12)
  • #
  • tw.conf.sunos5这个文件再向下,就是管理员根据情况填写了,把需要监控的文件及目录加入列表,赋予相应属性即可。如下:

    /R 
  • /.rhostsR#maynotexist /.profileR#maynotexist
  • /etc/dfs/dfstabR /etc/hosts.equivR
  • /etc/inet/inetd.confR /etc/inet/protocolsR
  • /etc/inet/servicesR /etc/init.dR
  • /etc/motdL #/etc/named.bootR#maynotexist
  • /etc/optR /etc/passwdL
  • /etc/profileR
  • 步骤3:编译

    完成上两步后,就可以编译了,在Tripwire的根下,执行make,系统即会自动编译,编译成功后,可以再执行make test,Tripwire会自动检查编译情况及工作状态,它会一段一段的测试,我们选取一段如下:

    ===test.Update.sh:DESCRIPTION 
  • ThisshellscriptexercisesalltheTripwireintegritychecking anddatabaseupdatefunctionalities。
  • ===test.update.sh:Settingupauxiliaryscripts=== ===test.update.sh:BEGIN===
  • ../src/tripwire-loosedir-c/tmp/twtest/tw.config-d/tmp/twtest/tw.db-iall===test.update.sh:testingGROWING(safe)files===
  • ===test.update.sh:testingGROWING(unsafe)files=== ===test.update.sh:testingADDEDfiles===
  • ===test.update.sh:testingDELETEDfiles=== ===test.update.sh:testingCHANGEDfiles===
  • ===test.update.sh:testinginputschemes=== ===test.update.sh:tw.configfromstdin
  • ===test.update.sh:databasefromstdin===test.update.sh:testingcomplexUPDATEcases
  • ===test.update.sh:changedignore-mask(UPDATEfile) ===test.update.sh:changedignore-mask(UPDATEentry)
  • ===test.update.sh:testingUPDATEDfiles(7cases) ===test.update.sh:case1:update:addnewfile===
  • ===test.update.sh:case2:update:deletefile=== ===test.update.sh:case3:update:updatefile===
  • ===test.update.sh:case4:nonsensecase(skipping)=== ===test.update.sh:case6:update:deleteentry===
  • ===test.update.sh:case5:update:addentry=== ===test.update.sh:case7:update:updateentry===
  • ===test.update.sh:PASS===
  • 我们可以看到,Tripwire对update功能一项项的做检测,并在最后PASS了,当Tripwire所有的检测项目都PASS后,编译就OK了。

    步骤4:生成数据库

    成功编译Tripwire,我们准备开始对需要监控的文件进行扫描,以生成Tripwire数据库,在Tripwire 的src目录下:如下操作。/tripwire -init,则系统会根据tw.conf.sunos5文件内的设置,开始扫描并生成相应的数据库,上面提到,数据库文件的路径是在第二步configh中设置的,在本例中为/var/tripwire,我们得到了名为tw.db_secu.unix.com的数据库文件。建议此时将Tripwire可执行文件,数据库文件,配置文件COPY到软盘等地方,放到安全的地方。以后需要安全鉴别时直接在软盘上执行即可。

    步骤5:测试

    数据库生成了,我们来测试一下吧,首先我们在根下touch生成一个goadd文件,其次我们把根下的.cshrc文件做一下改动,在里面加入几个#注释号。然后我们来运行一下Tripwire看如何:

    /Tripwire-c./tw.config.sunos5-d./tw.db_secu.unix.com 
  • Tripwire(tm)ASR(AcademicSourceRelease)1.3.1 FileIntegrityAssessmentSoftware
  • (c)1992,PurdueResearchFoundation,(c)1997,1999Tripwire SecuritySystems,Inc。AllRightsReserved。UseRestrictedto
  • AuthorizedLicensees。 ###Phase1:Readingconfigurationfile
  • ###Phase2:Generatingfilelist ./tripwire:/.profile:Nosuchfileordirectory
  • ./tripwire:/kernel/unix:Nosuchfileordirectory ###Phase3:Creatingfileinformationdatabase
  • ###Phase4:Searchingforinconsistencies ###
  • ###Totalfilesscanned:4437 ###Filesadded:1
  • ###Filesdeleted:0 ###Fileschanged:1
  • ### ###Totalfileviolations:2
  • ### added:-rw-r--r--root0Jul318:45:312000/goadd
  • changed:-r--r--r--root669Jul318:46:152000/.cshrc ###Phase5:Generatingobserved/expectedpairsforchangedfiles
  • ### ###AttrObserved(whatitis)Expected(whatitshouldbe)
  • ###===================================================================== /.cshrc
  • st_size:669668 st_mtime:MonJul318:46:152000MonJul309:00:412000
  • st_ctime:MonJul318:46:152000MonJul309:00:412000 md5(sig1):3z9gKjlZGq5GbeWOxpYaF91Z7K0n3ZKAyuPpAZB1G8uq
  • snefru(sig2):1vCDeMR45lpRCChmDithiW1oRYPpQ:oZA6hVx6Zi4.NG
  • 可以看到,系统运行经过了5个步骤,首先读取配置文件,其次生成配置文件中设置为需要监控,但实际并不存在的文件列表。第三部生成文件信息库,第四步报告检查情况。我们看到共扫描了4437个文件,其中有一个文件是新增加的,有一个文件发生了改变。在下面它列出了这两个文件-正是我们做了手脚的文件!在最后一步Tripwire将发生了改变的文件现在字节数,生成时间,修改时间, md5, snefru签名及数据库中的记录对比列出,是不是很爽?

    上面我们讲到的是Tripwire的主要功能,在命令行状态下敲入tripwire -h 就会有其它使用参数的介绍,有兴趣的管理员不妨一试。

    继续浏览有关 安全 的文章
    发表评论