来源:Isblog.cn% J2 E' [) F2 Q4 k5 Y% v/ Z o' c9 L
完整性是
安全要求的基本要求之一,本文将向读者详细介绍如何利用
开源完整性检测工具Tripwire来检查
系统的完整性。
: J! s w! W9 k" w
4 n6 N8 \/ p. C+ V1 d+ _/ e一、系统的完整性
/ r, F$ E9 h \" n; X
, o/ x" Z& N1 h我们知道,系统的正常运行要靠系统
程序的正常运转,而程序的运行又与其可执行文件休戚相关。所以,维护系统完整性是确保系统安全的一项基本工作。我们这里的系统完整性是指系统中可执行文件的完整性,也就是说系统中的程序文件没被非法修改。
# E; p( R3 _* P1 F: u7 G
7 c' r# a3 r4 h* I: _" Z M4 S如果可执行文件被恶意修改的话,如改变、插入或删除等,将直接威胁到系统的安全性。大多数情况下,
黑客渗入到系统后会立即修改某些系统文件以创建后门,如用准备好的替代物换掉系统中原有的/bin/login文件以便使其不用口令便能登陆系统;然后再修改某些文件,例如/bin/ls等,以便隐藏其行径。如果我们没能发现这些改变的话,那无异于身处险境却还以为很安全,这就为黑客的长期入侵提供了非常有利的条件,同时也意味着我们的损失将更大!为了改变这种被动的局面,我们需要一种文件完整性检查工具,使得当系统文件被恶意修改后能及时发现,从而为进一步处理创造条件。
! S- |4 F- p4 Z" l2 v% {
3 d& g5 `( t: ]二、Tripwire概述8 P7 Q7 Y4 J) ~' X' O
F. {' v' X8 `
Tripwire的运行机理8 v6 z. s9 i; ~
# a! `& j: a( W I5 T
Tripwire是一款最为常用的开放源码的完整性检查工具,它生成目标文件的校验和并
周期性的检查文件是否被更改。下面我们简单介绍一下Tripwire的运行机理。与大多数完整性检查程序相同,对于需要监视的文件,Tripwire会使用校验和来为文件的某个状态生成唯一的标识(又称为"快照"),并将其存放起来以备后用。当Tripwire程序运行时,它先计算新的标识,并于存放的原标识加以比较,如果发现不匹配的话,它就报告系统
管理人员文件已经被修改。接下来,系统管理员就可以利用这个不匹配来判断系统是否遭到了入侵。例如,如果Tripwire已经为/bin/login和/bin/ls存放了快照,那么对它们的尺寸、inode号、权限以及其他属性的任何修改,都逃不过Tripwire的火眼金睛。尤其是对于文件内容的修改,即使只改变了一个字节,Tripwire也能察觉得到,因为校验和是针对文件整体的。
4 w z E& ` H- f6 @ X4 Q7 ^( |" \& W
通过对以上运行机制的了解我们不难发现,完整性检查工具的安装时机非常重要,最好是在交付用户使用和连入
网络之前的
Linux系统初装时进行。因为完整性检查工具只有保留了系统文件的初始状态(快照),才能确保系统文件的完整性;如果在系统使用一段
时间后再取其快照的话,它很可能已经不再是原系统文件的映象(如已经遭到破坏),所以这时的完整性检测的可靠性已经打了折扣。
+ Q/ W/ d; }7 s+ o+ _5 Q% C
* ?$ K. ]8 c+ a& s- \Tripwire的组成, D; c$ L+ L2 R; j- y1 M0 o
3 T5 @7 E7 r, u" hTripwire主要由策略和
数据库组成。策略不仅指出Tripwire应检测的
对象即文件和目录,而且还规定了用于鉴定违规行为的规则。一般情况下,对于/root、/bin和/lib目录及其中文件的任何修改都应视为违规行为。数据库则用来存放策略中规定的检测对象的快照。只要建立了策略和数据库,我们就可以随时用快照来比较当前的文件系统,然后生成一个完整性检测报告,从而判断系统的完整性是否受到攻击。除了策略和数据库外,Tripwire还有一个配置文件,用以控制数据库、策略文件和Tripwire可执行程序的位置等。
4 z3 b2 X/ Q; r- p5 f4 I3 W* h
# A6 \, I4 l: `/ H3 U6 ]为了防止被篡改,Tripwire对其自身的一些重要文件进行了加密和签名处理。这里涉及到两个密钥:site密钥和local密钥。其中,前者用于保护策略文件和配置文件,如果多台
机器具有相同的策略和配置的话,那么它们就可以使用相同的site密钥;后者用于保护数据库和报告,因此不同的
机器必须使用不同的local密钥。
a! g" N; d$ t- T0 O/ |" m8 r) M) \
三、Tripwire的安装和设置
! D7 Q* Q4 W7 k' X j3 C3 x* d
& L. A2 L" T( O- ^* @Tipwire的安装$ I' W7 N" l) L" m& p- F4 D! l
' K" ~0 L- A' A( L- ?
Tripwire的
下载地址为http://www.tripwire.org。如果您使用的是RedHatLinux的话,可以
下载该站点上的RPM格式的程序(当前最新版本为rpm4-tripwire-2.3-47.i386.tar.gz),假设将其
下载到/A目录的话,安装过程如下所示:
, b! E, O" D7 ~1 n0 t! I1 J# ]: n0 Z6 @7 P: f
3 g( s1 u- a2 k& _& k' F5 Z4 l1 k
9 _! N9 M% r. X# L5 p' ^
+ ]. S% y, u% l
/ T* }8 a2 m3 Y" X! d. brpm-ivh/A/rpm4-tripwire-2.3-47.i386.tar.gz
/ B0 @. y+ r. N6 A5 u& D$ G9 F' l
[color=#FFFFFF']
: Z$ t8 A0 k/ B: B& y; H- m5 j# |' D
" m& v; R; X3 r5 J7 w9 v& \7 _如果从
源代码中进行
软件安装,先下载tar格式源程序并解包。接下来在相应目录中执行如下操作:
3 S1 `* b5 W2 {
1 O! v% `+ U8 W5 }( F4 p
$ S" |( Z! c3 y& ]' Y, W: e* X
2 L* v2 n$ T& m* m1 `
( K+ {1 S' k0 G
./configuremakemakeinstall
& `* `9 p9 H) P7 H1 X[color=#FFFFFF']
1 K6 _8 ~& d: Q* j1 Q
\" j! t- V+ t. h6 u) w$ p( w' r, v% ~! {
3 i3 O! ?7 ]. y4 Y安装后的设置
* q% r- T2 f# W2 V( y" [' i( `. p6 F# Q. U2 P
在安装Tripwire之后,可以进行如下的设置:
: G: W& {- l3 c; {
3 A( ~+ w) S- D& J/ u
9 h+ w: q0 S; E ^1 O1 v* |% I8 X! @& {
6 {* k4 T/ H8 |- o/ ~0 ?# n$ f; S( k2 s
#cd/etc/tripwire#./twinstall.sh#tripwire--init#rmtwcfg.txttwpol.txt
- S0 }/ x7 v& z. a0 t( q% s' z8 _1 f7 j' c1 i4 N: U
这里,脚本twinstall.sh的作用在于执行下列任务:
5 Q1 \ _) c- n9 E2 H1 R- Z
: s1 g, @0 s8 K! E7 j1)创建site和local密钥,这时会要求输入口令;如果这两个密钥业已存在,则可以跳过此步骤。其中,site密钥存放在site.key文件中,而local密钥则存放在hostname-local.key(这里的hostname是指该机器的主机名)文件之中。
`4 g3 B `2 P' d, S. S/ C+ C
6 c/ G0 I. ?$ i+ b2)利用site密钥对默认配置文件twcfg.txt进行签名,并将签名(而非被签名的文件twcfg.txt)存放于文件tw.cfg之中。
- a3 _9 Q, V* q e: k9 x! N
8 }5 `$ o$ o9 [8 g0 c
3)利用site密钥对默认策略文件twcfg.txt进行签名,并将签名(而非被签名的文件twcfg.txt)存放于文件tw.pol之中。
( J# B* Y. _( Z
3 b* e6 r( r% {8 @ o
此外,您还可以手工方式来安装,尤其是在由于某种原因,您的系统没带twinstall.sh文件等情况下则必须手工完成这项工作:
, q( f% a# k( P2 f, @1 T
2 |3 T7 N; V4 q6 W$ _4 Y设置常见的变量:
8 o( S8 C! H/ }$ |6 b, c. T$ |3 J# L9 I
% u- _3 M, w# n; T- `
2 V% g7 T" `: ]2 |6 C: z% V$ J2 x
% O# q# u$ _. t" y1 ]) R7 f' B" `; b6 _2 \. m$ E* ]9 [
# \% J1 a5 V8 d# z; rDIR=/etc/tripwireSITE_KEY=$DIR/site.keyLOCAL_KEY=$DIR/`hostname`-local.key
. o/ [6 C& I+ o. f$ @( T
[color=#FFFFFF']
1 A( p' z8 O# g U0 T8 T% \- H. J$ t, j1 z6 u
! J8 J {0 j" {
创建site密钥
- L; }% t2 Q$ b6 S% N1 Q: r& k* j" T- k: V
2 [8 D3 g2 J* Q7 ^# s# D: j: W6 t) n
& \2 c! X1 y" \: o2 C
" i* p. P+ w% r& |$ O; S
#twadmin--generate-keys--site-keyfile$SITE_KEY
: M& W, b3 u# u n: g6 n7 J. w
生成local密钥
3 K& i4 p& i. ^; [0 Q
4 p) a& B( v0 t# W0 G9 P
% q7 Z( U9 ^& C/ B0 J
0 Q' X- l$ Q" n9 k# R; D. G% d) T* _% Q* V/ \5 i" e, b1 U
) w0 [1 y4 E" W' y
#twadmin--generate-keys--local-keyfile$LOCAL_KEY
) k$ [+ `- ?6 _( s% I: f. s, S' N1 m# Y4 O- U2 C
为配置文件签名
8 P k% u( m) a* S; G: K. r4 D" x, @5 |
) e1 x8 }9 Z5 |9 ]/ Q& j/ C( u
h5 ]. T/ Y/ f0 U. {) W0 j$ r" [0 ^: f, \1 I) H
, [4 G: G% L/ i
#twadmin--create-cfgfile--cfgfile$DIR/tw.cfg\--site-keyfile$SITE_KEY$DIR/twcfg.txt
( j1 e/ o3 |; I9 x' g* d) T! c0 Y
* ~8 Q* E7 c- \1 r( N
为策略文签名
9 ]8 J) l1 f. o/ m) K, j: Y
0 s/ @- \8 @2 I: r. W$ r+ q% f" T$ E F! P; q
4 g' z% {" j% \" {+ r* ^; Q+ _1 B8 N+ G5 w" o( N* i
g0 L2 c4 C# a4 `
#twadmin--create-polfile--cfgfile$DIR/tw.cfg\--site-keyfile$SITE_KEY$DIR/twpol.txt
4 Q E8 u3 r+ z( Z
6 h" k- y+ g s- U
设置权限
4 Z4 b- Q" K% M! j. M' w1 |
$ w: R' U0 a( N `( F5 k8 k! G9 |
4 ^. q- R% q# u# }( x* o% c6 ~1 }
" c* k% I5 | @# R0 ~% E
) \) @ z- V! H+ J) U) }6 q1 P' G/ o
#cd$DIR#chownroot:root$SITE_KEY$LOCAL_KEYtw.cfgtw.pol#chmod600$SITE_KEY$LOCAL_KEYtw.cfgtw.pol
7 v+ z4 d. Q3 V8 ?1 n
& R' f: [) `$ w7 l+ }需要说明的是,上述配置是以您的默认配置和策略文件已经存在并分别为twcfg.txt和twpol.txt为前提的。一般情况下,为了使这两个文件能更好的满足我们的系统要求,还必须对其进行相应的修改(见下文)。此外,策略和配置文件的名称必须为twcfg.txt和twpol.txt,因为脚本代码就是用的这两个名称。
& V3 q( z l+ P" C$ a) F9 t5 V8 \7 w7 m
然后,为tripwire建立数据库并用local进行签名,命令如下所示:
& ^0 n' d" m+ u0 S
( g7 E: c0 h0 {
) |4 P' g3 o D2 `$ W; {3 u# D
0 u0 ~" o9 z) o4 }6 _* V S, L. o, n3 P
$ Q {. o, C* O- {, A#tripwire-init
; h x P9 @5 a% L0 `! e/ v
3 ]) i5 R! _2 l* v, d- \6 t
需要说明的是,完成此项操作,需要输入local密钥的口令;如果tripwire出现
类似"Warning:File
SystemError"之类的错误消息的话,那么可能是由于默认策略引用了并不存在的文件所引起的。
# ^5 F& G) y' y" c" u5 ]+ h& T8 U: K% S0 A/ q& ~% h
为了安全起见,我们还需要删除明文形式的策略和配置文件,命令如下所示:
; ` v/ E' k# A l- m( L' x$ z$ l+ g- T7 o6 T; y
! ~' G, Q; o6 |% {+ M
% g5 x% I- V* x5 ^1 ? t E" j4 z
n+ |1 |) Q6 g0 i2 l6 }
: @( ?( d* W/ X: r% o#rmtwcfg.txttwpol.txt