|
当你的机器被入侵后,入侵者很可能会替换诸如lsof等程序,使得你无法察觉他们的入侵或已经入侵后进行的行动。所以我们需要时不时地来检测重要的文件是否被做过手脚。这,要依靠检验文件系统完整性的工具。
要使用这类工具,shell script和crontab的知识是有帮助的,而知道系统下各个目录是干什么的几乎是必要的。
以下转自
http://millenniumdark.blog.ubunt ... %e4%bb%8b%e7%bb%8d/
最有名的应该是tirewrap。(貌似也是最早的吧。)除此之外,还有一些,比如aide和integrit等。下面有个非常详细的比较。
http://www.la-samhna.de/library/scanners.html
要注意的是这比较有点过时了。(但是,目前所能找到的比较中,这个是最全最新的了。)比如aide是支持sign db和 config的。
各个工具都有它的特点。我选择的是integrit,绝不是因为它最好,而是基于以下一些考虑:
首先,如果电脑好的话,不用考虑性能问题。像上面那个评测中说的一样,速度都很快。可惜我的电脑很不好,所以基于性能,把perl和c++的去掉。 (tirewrap不仅仅是c++,还是唯一把配置文件和baseline db都加密的,这安全性固然增强不少,但消耗的资源肯定也涨了不少。)
接着在把那几个不太知名的去掉。(所谓不太知名,比较主观,就是我在看那篇比较前不知道的。)就剩下samhain,aide和integrit了。
samhain功能很强,还可以探测rootkit, port, setuid等一堆东西。(这我觉得交给另外的程序也可以。比如rootkit交给tiger或chkrootkit,setuid用checksecurity可以完成,等等。)
samhain支持中央式管理,也就是说除了standalone的安装外,还可以安装在一台中央服务器上,监视一群服务器。支持多个管理员协同工作。这是非常酷的特性。如果管理的服务器多的,应该很方便。但目前我是单人单机,所以用不着。
samhain还有可以检测/proc文件的完整性等优势,具体看上面提到的比较文章。
aide看样子提供了很不错的功能,据说比tirewrap轻量很多。还有诸如aide-xen之类的包。
integrit是传统的unix小工具类型的。功能很少。但带来的好处是small mem print,容易配置。因为机器破,需要light weighted;因为是初学者,需要容易配置,故选择了integrit。
integrit的安装。我是aptitude install integrit的。你如果直接安装那deb也是可以的,因为这东西没有什么依赖。
其他发行版的,可以看看有没有现成的包。或者到
http://integrit.sourceforge.net/
下载、编译。
文档方面,这里是一个简单的Howto,只能说给你个大致的概念:
http://integrit.sourceforge.net/howto.html
这个才是完整的手册:(虽然是完整的手册,但大概半小时就可以读完。可见integrit容易上手。)
http://integrit.sourceforge.net/texinfo/integrit.html
以下是一个简单的介绍:
最简单的例子,我们的家目录里有一个bin,里面放着一些小脚本,这些小脚本会不会被入侵者改动了呢?
首先,我们写一个简单的配置文件:
$ cd ~
$ cat > integrit.conf << EOF
# 这是注释
# 这是我们认为可信的,用作比较的标准的数据库:
known=/home/weakish/database/usr_known.cdb
# 根据当前文件情况生成的数据库
current=/home/weakish/database/usr_current.cdb
# 我们要检查的根目录,integrit从根目录开始检查
root=/home/weakish/bin
# integrit不会检查任何/home/weakish/bin以外的目录的情况
# 注意 root=/home/weakish/bin/ 是错误的写法。最后的/不能要
EOF
好了。现在我们来运行integrit生成初始的数据库:(注意,这integrit要有root权限才能运行的。)
# integrit -C /home/weakish/integrit.conf -u
现在我们认为这数据库是可信的,将其作为可信数据库:
$ mv /home/weakish/database/usr_current.cdb /home/weakish/database/usr_known.cdb
现在我们改动一下bin里的脚本,但并不升级数据库,而是开始检测:
# integrit -C /home/weakish/integrit.conf -c
integrit就会报告了,它的报告格式是这样的:
changed: 文件名 x (known:current)
x是switch,说明什么地方改变了。比如s代表checksum,所以下面一行,是告诉你某文件的checksum改变了:
changed: /home/weakish/bin/paste2bin s(390050c7cde43fd29883e593d7ce79e743449ad1:52af37e84de65b1dfa3ce7aef74672af4ec6ee1e)
类似的switch有p(权限),u(uid),g(gid),z(文件大小)等等,具体请看手册。
还有其他格式,比如new表示新出现的文件,missing表示消失的文件。
我们看一下,这些变化并不是入侵者造成的,而是我们自己改动的。所以有理由相信现在没有被入侵,至少入侵者还没改动我们监视的文件,所以可以升级数据库了:
# integrit -C /home/weakish/integrit.conf -u
然后把新生成的数据库作为可信数据库:
$ mv /home/weakish/database/usr_current.cdb /home/weakish/database/usr_known.cdb
过一段时间,我们可以再check一下,没问题,升级,变为可信。如此循环。
注意:上面为了方便说明,我们check和update是分开的,其实更多时候我们是一起的:
# integrit -C /home/weakish/integrit.conf -cu
好了。现在我们归纳一下整个流程:
首先,我们要有一个配置文件,还要有一个可信的数据库。(如果说入侵者对配置文件或者可信数据库做了手脚的话,那我们什么也不会知道。所以,最好是把这配置文件和可信数据库放在一个安全的地方,比如只读的光盘,或者只读的U盘,等等。)
然后我们运行
# integrit -C ConfigureFile -cu
阅读下报告,看看有没有什么入侵痕迹。如果有,你已经被入侵了。按照被入侵后的常规步骤处理(除非你很有信心,能把入侵者的后门、木马全清除,还是作一个重装。重装前可以先把当前磁盘做个镜像。然后慢慢分析入侵者是如何入侵的。)
如果看不出什么痕迹,就把它作为可信数据库保存吧。(可以把旧的可信数据库做个备份。)注意,保存好后,检验一下那checksum和报告中的是否一致。
然后我们来看一些integrit的设置的例子:
有时我们需要跳过某些目录,比如,设定了
root=/
但我们不检测/proc目录,(integrit不支持检测/proc!)加上
!/proc
检测/root目录,但不检测/root的子目录:
=/root
/var/log下的文件常常变化,所以我们只检查权限,主人等内容,不检查checksum,inode,mtime,ctime
/var/log SIMC
但是我们又希望检查一些已归档的日志
/var/log/archive simc
从这里可以看到,子目录会继承上级目录的设定,而大写表示关闭switch,小写则表示开启。
以上只是例子,详细设定,请看手册。
要记住,integrit是unix工具类的,只做一件事。所以,不支持多重根目录。如果你觉得配置文件搞得太复杂了,可以写多个配置文件,维护多个数据库。然后多次运行integrit,每次使用不同的配置文件。
integrit支持xml报告,你也可以对报告进行自动处理。
这integrit一般是配合脚本和crontab使用的。Debian在/etc/integrit/下有配置文件的样本, /etc/cron.daily下有脚本的样本,还有/usr/share/doc/integrit/的etc和examples文件夹中的内容也可参 考。许多配置文件的例子和cron脚本
如果你希望使用Debian默认的配置,只要先修改/etc/integrit/integrit.conf,手动运行
# integrit -C /etc/integrit/integrit.conf -u
然后复制current.cdb到known.cdb (具体路径取决于你/etc/integrit/integrit.conf的设定)。
再修改/etc/integrit/integrit.debian.conf即可。Debian已经配置好了,有一个天天运行的cron job已经安装了,一旦你修改/etc/integrit/integrit.debian.conf,加入配置文件,就会天天运行integrit了。 |
|