integrit介绍

NetBSD下有Veriexec这么好的基于内核的东西可用。安全性高,而且几乎不需配置。Linux就没这好福气。要使用外部的文件系统完整性工具。安全性低,而且需要折腾。

最有名的应该是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了。

Leave a Reply