tripwire--入侵检测系统
入侵检测系统 IDS Intrusion Detection Systems
入侵防护系统 IPS Intrusion Prevention System
入侵前
(入侵后检测,事后入侵检测) tripwire
(入侵中检测,实时入侵检测) snort
因特网
|
|
路由
|
|
防火墙
|
|
入侵检测系统
|
|
内部服务器
tripwire
你下载一个软件,会有md5值或数据签名等方法来让你验证这个软件是否被人恶意修改过.这也是一种完整性检测。
你的操作系统里有很多重要的文件(如/etc/passwd,/etc/shadow,各种命令等),也不能被人恶意修改,如果你怀疑有人入侵了你的操作系统,如何检测出哪些文件被修改过内容或属性等?
tripwire软件就可以帮你解决。
完整性检测
md5或者rpm等都可以对单个文件做完整性检测
rpm -Vf
缺点1:只针对安装的rpm包里的文件做完整性检测,无法对自建的文件做检测
缺点2:只能检测单个文件,你需要写脚本循环去检测多个文件
# rpm -Vf /etc/php.ini --这个文件是rpm版的php的配置文件,第一次使用这个命令,没有任何显示,表示此文件没有做过任何的改变
# rpm -Vf /etc/php.ini --对这个文件做微小的改变后,再执行此命令就会有信息了
S.5....T. c /etc/php.ini
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
1,安装
# yum install tripwire --需要epel源
# ls /etc/tripwire/
twcfg.txt --定义tripwire各个相关文件的路径
twpol.txt --定义检测的对象文件,及违规时采取的行为
# cat /etc/tripwire/twcfg.txt --查看此文件,有以下相关的文件定义
/var/lib/tripwire/$(hostname).twd --用于存放生成的快照
/var/lib/tripwire/report/ --存放检测的报告
tripwire为了自身的安全,设定了两个密码文件
/etc/tripwire/site.key --用于保护策略文件和配置文件
/etc/tripwire/$(HOSTNAME)-local.key --用于保护数据库和分析报告
# ls /etc/tripwire/ --做完后,就会多产生几个配置文件了
li.cluter.com-local.key site.key tw.cfg twcfg.txt tw.pol twpol.txt
2,建立两个密码文件
# tripwire-setup-keyfiles
Enter the site keyfile passphrase:
Verify the site keyfile passphrase: --输入你设定的site密码两次
Generating key (this may take several minutes)...Key generation complete.
Enter the local keyfile passphrase:
Verify the local keyfile passphrase: --输入你设定的local密码两次
Generating key (this may take several minutes)...Key generation complete.
Signing configuration file... --签名配置文件
Please enter your site passphrase: --输入刚设定好的site密码
Wrote configuration file: /etc/tripwire/tw.cfg
Signing policy file... --签名策略文件
Please enter your site passphrase: --输入刚设定好的site密码
Wrote policy file: /etc/tripwire/tw.pol
3,修改默认配置文件
rpm版
# man twpolicy --可以查看策略帮助
# - ignore the following properties
# + check the following properties
#
# a access timestamp (mutually exclusive with +CMSH)
# b number of blocks allocated
# c inode creation/modification timestamp
# d ID of device on which inode resides
# g group id of owner
# i inode number
# l growing files (logfiles for example)
# m modification timestamp
# n number of links
# p permission and file mode bits
# r ID of device pointed to by inode (valid only for device objects)
# s file size
# t file type
# u user id of owner
#
# C CRC-32 hash
# H HAVAL hash
# M MD5 hash
# S SHA hash
Device = +pugsdr-intlbamcCMSH ;
Dynamic = +pinugtd-srlbamcCMSH ;
Growing = +pinugtdl-srbamcCMSH ;
IgnoreAll = -pinugtsdrlbamcCMSH ;
IgnoreNone = +pinugtsdrbamcCMSH-l ;
ReadOnly = +pinugtsdbmCM-rlacSH ;
Temporary = +pugt ;
===============================================================
--以twpol.txt下面这一段为例来说明它这个默认策略文件定义的意思
(
rulename = "Tripwire Binaries",
severity = $(SIG_HI)
)
{
$(TWBIN)/siggen -> $(SEC_BIN) ;
$(TWBIN)/tripwire -> $(SEC_BIN) ;
$(TWBIN)/twadmin -> $(SEC_BIN) ;
$(TWBIN)/twprint -> $(SEC_BIN) ; --这四个文件都要被以SEC_BIN的检测等级来检测
}
--然后又找到有这句变量定义
SEC_BIN = $(ReadOnly) ;
--又有下面这句的定义(rpm版里要man twpolicy去找,source版里有)
ReadOnly = +pinugtsdbmCM-rlacSH ;
-----------------------------------------------------------------------------------------------------------
现在/etc/tripwire/twpol.txt已经默认定义了非常多的文件,但现在这里有一个问题:它默认定义的文件或命令,你的系统上不一定有,所以你要注释掉它。它默认注释的文件或命令,你的系统上却有,所以你要去掉注释.
比如:
下面这一句,它默认是定义的,但我系统上没有,所以需要前面加#号来注释
/sbin/busybox -> $(SEC_CRIT) ;
下面这一句,默认是注释的,但我系统上有,所以我想去掉前面的注释
#/sbin/lvchange -> $(SEC_CRIT) ;
为了实现这两个需求,我们需要使用脚本来处理默认的policy文件
# cp 笔记目录下/arch/TRANtwpol.sh /etc/tripwire/
# cd /etc/tripwire/
# cp twpol.txt twpol.txt.bak --因为这个脚本是用sed直接操作修改这个文件,所以可以先备份一下
# sh TRANtwpol.sh twpol.txt --处理完后的twpol.txt文件就是实现了上面两个需求的文件
这样处理并不能增加配置,也就是说你如果有需要添加的自定义需求,就只能手动再添加;下面我就添加一段做个示例,在配置文件最后加下如下一段
(
rulename = "notes",
severity = $(SIG_HI)
)
{
/share/ -> $(SEC_INVARIANT) (recurse = 0) ;
/share/20170522/ -> $(SEC_CRIT);
!/share/20170522/program/ ;
}
--这个策略的意思是/share/目录本身(不递归到下级子目录),只检查$(SEC_INVARIANT);/share/20170522/及其递归下级所有文件和子目录都检查$(SEC_CRIT);/share/20170522/program/及其递归下级所有都不检查任何属性
4,把修改好的文件,定入policy文件
# twadmin -m P twpol.txt --将修改完毕的文件,编码写入policy file
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol
# file /etc/tripwire/tw.pol --把你修改好的策略都写入了这个数据文件里
/etc/tripwire/tw.pol: data
5,初始化
# tripwire --init --通过上一步的数据文件来初始化数据库文件(就相当于是对你所有的配置做了数字签名)
Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System *** --在这里时间较长,几分钟左右
Wrote database file: /var/lib/tripwire/li.cluter.com.twd --数据库文件路径
The database was successfully generated.
6,怀疑被入侵后进行手动检测,或者用crontab周期性检测
# tripwire --check --对所有定义的文件进行一次检测,速度较慢
Wrote report file: /var/lib/tripwire/report/li.cluster.com-20160930-101619.twr --检测完的报告,时间格式为系统的年月日-时分秒
# tripwire --check --rule-name notes --指定只检测的定义的规则名
查看历史报告,可以看到更详细的信息
# twprint --print-report --twrfile /var/lib/tripwire/report/li.cluster.com-20160930-101619.twr
一般为了安全性,在写入数据库之后,把明文的twpol.txt文件给删除或者备份到其它介质
# rm /etc/tripwire/twpol.txt -rf
7,策略如何更新?
a),导出正在使用的策略
# twadmin -m p >/etc/tripwire/twpol.txt
b),按照需求对其进行修改
c),再导进去
# twadmin -m P /etc/tripwire/twpol.txt
d),重新生成数据文件
#tripwire --init