有些事情对我们系统管理员来说至少发生过一次,就是你感觉到你的系统好像不对劲
,开始怀疑有人已经突破了你的防御。确定此事是否发生的途径之一就是检查系统文
件有没有变化,你需要安装TripWire或者其他审计工具来帮忙。
幸运的是,Red Hat的程序员们开发了一个工具,叫作Red Hat Package Manager,简
称为RPM。在Red Hat的Linux系统中是默认存在的。
RPM能为我做些什么?
RPM是一个强大的工具,用来安装、升级和校验Red Hat系统上的软件包。它的校验功能可以用来确认文件是否被修改或覆盖,这正是本文所要讨论的。除了文件的大小和时间戳,RPM还能检查文件的信息文摘或MD5签名。
在RFC 1321中有MD5的详细描述。简单的说,MD5根据文件的内容用算法产生一个唯一的128位签名,用任何方法改变文件都会导致签名改变。尽管人们一直在讨论修改文件后能保持签名不变的理论可能性,但截止到目前还没有人能够做到。所以在文件使用前后各作一次MD5检查,能够99.9999%的保证文件没有改变。
如何使用RPM来检查文件?
有一些RPM的参数你需要注意。第一个是“-V”,它检查与某一RPM包相关所有文件的
完整性。语法为:
rpm -V package_name_to_verify
比如系统上运行了sendmail,通过以下命令检查所有相关文件的完整性:
rpm -V sendmail
输出看来是这样的:
[root@fubar /root]# rpm -V sendmail
S.5....T c /etc/aliases
missing /etc/mail/ip_allow
S.5....T c /etc/mail/relay_allow
S.5....T c /etc/sendmail.cf
S.5....T c /etc/sendmail.cw
S.5....T /usr/sbin/sendmail
S.5....T /var/log/sendmail.st
[root@fubar /root]#
只有校验失败的文件才被列出,没有列出的文件应该是完好无损的。左边给出了为什
么校验失败的原因,具体解释如下:
S = 大小改变
M = 权限改变
5 = MD5改变
L = 连接改变
D = 设备改变
U = 用户改变
G = 组改变
T = 日期和时间改变
missing = 文件丢失
从上面的输出可见,文件aliases, relay_allow, sendmail.cf 和 sendmail.cw的大
小、时间日期和MD5发生了改变。由于它们是配置文件,应该没什么关系。但是/usr/
bin/sendmail的改变就要引起注意了,它是一个监听在25端口的可执行文件,用来接
受信件。除非你升级了sendmail,否则它不应该校验失败,很明显有人修改或者覆盖
了原来的sendmail文件,可能带有***或者后门。
输出还显示ip_allow文件被删除或者被改名。这是用来检查和控制SPAM的一个文件,
它的丢失某种程度上表明相关的二进制文件可能被修改。
当观察RPM输出的时候,在检查日期时间和文件大小的同时,要特别注意MD5是否变化,***者经常修改或覆盖某些文件来隐藏他们的踪迹。
挨个检查软件包很费时间,用“-a”选项可以一次性检查所有RPM包:
rpm -Va > /root/rpm_chk.txt &
这条命令让RPM检查服务器上安装的RPM包,结果输出到rpm_chk.txt文件,最后的可选项“&”表示命令在后台运行,给出shell提示符可以作其他事情。
最后一个技巧,当你想要检查某个文件而不知道它属于哪个RPM包,可以用“-qf”选
项查看哪个软件包安装了此文件:
[root@fubar /root]# rpm -qf /usr/sbin/sendmail
sendmail-8.8.7-20
[root@fubar /root]#
这表明此sendmail文件是sendmail-8.8.7-20 RPM包的一部分。如果一个文件没有关联
的RPM包,输出大概是这样的:
[root@fubar /root]# rpm -qf /sbin/.vile_stuff
file /sbin/.vile_stuff is not owned by any package
[root@fubar /root]#
小心你系统上运行的不能被校验的程序!
如何开始?
首先,你必须有root权限来运行RPM。当以普通用户身份来运行RPM校验时,它的输出信息是不正确的,因为普通用户对某些文件可能都没有read权限。这意味着只有root才能检查整个系统文件的完整性。
RPM二进制文件在/bin目录下,它的数据库文件在/var/lib/rpm下。
最安全的方法是在服务器连到Internet之前,把这些数据文件和RPM二进制文件保存到
软盘或CD上,这能够保证你的工具自身是安全的。
第一件事是检查/var/lib/rpm,这些数据文件的日期和时间应该和安装系统当时的情
况一样,如果你发现日期不对,就要小心了。
其次,我们可以使用RPM来校验自身的完整性:
[root@fubar /root]# rpm -V rpm
[root@fubar /root]#
没有输出表示RPM应该没有什么问题。但这不是绝对的,因为二进制文件如果本身可疑就很难说。所以要尽可能使用CD上的工具,如果你没有比较安全的工具,用RPM校验自身在一般情况下也足够了。
现在我们知道RPM自身没有问题了,对整个系统作个检查:
rpm -Va > /root/rpm_chk.txt &
一个简单的技巧就是定期检查整个系统,然后比较不同时期的rpm_chk.txt,从而发现
哪些不正常的文件改动。
总结
尽管RPM不是专门设计用来审计文件的,但它可以帮你不少忙。目前Red Hat Linux各
个版本中都默认自带RPM,这意味着你完成Red Hat Linux安装以后,就可以使用RPM了,同时MD5提供了一种高精确度的文件校验方法。唯一注意的是要保证RPM自身和它所有数据文件的完整性,以防止***者修改它们来隐藏踪迹。
上一次,我告诉了你如何发现是否有***者在你的UNIX系统上放置了rootkit。Rootkit是UNIX系统核心命令替换程序的集合,它用于***成功后清除痕迹并维持对受害系统的访问。
你可以使用商用的或者开放源代码的程序,例如Tripwire或者chkrootkit,来检查你系统上是否存在rootkit。但是,发现有人攻破了你的UNIX系统是一回事——而清除这个烂摊子完全又是另外一回事。
清除rootkit将是一件复杂的事情。UNIX没有一个统一的(程序)包标准,这就意味着重新安装整个操作系统是通常的恢复方法。
这对于很多人来说不是一个好消息,尤其是当受害系统包含有不可替换数据的时候。有了数据备份的帮助,你可以把很多系统清理干净,而不需要停止它们的运行。
使用小红帽程序包管理器(Red Hat Package Manager,RPM)的Linux系统能够以根用户的权限运行rpm –Va命令,从而迅速地检查系统文件的完整性。这条命令会输出一个列表,上列着自从原始版本以来发生过改变的文件和目录,但是这并不意味着已经被安装了一个rootkit。要小心的是,对netstat、ifconfig、ps和chsh等命令文件进行更改是rootkit的典型做法,而不论所使用的UNIX操作系统是什么。
如果你怀疑已经被人安装了rootkit,那么要做的第一件事就是拔掉网络连接,尽快关掉受害机器,并在单用户模式启动它。如果你有“急救”启动磁盘或者光盘,那么就要用它了。
一旦在单用户模式启动了机器,你就可以开始恢复过程了。如果没有用于你Linux系统的“急救”磁盘,就要在Google上搜寻一个了。
***者一般都会更改Linux系统上的rootkit文件的属性,以防止其他的人替换它们。对受怀疑的文件或者目录运行lsattr命令会显示它们同其他可执行程序文件的差别。
标有“不可更改”标记(“i”)的文件总是可疑的。这个标记意味着有人已经使用chattr命令更改了rootkit文件,以防止你删除或者替换文件。
恢复的关键是确信你没有改错的文件。Rootkit经常会替换掉/bin、/sbin、/usr/bin和/usr/sbin下面的文件,这些地方放着UNIX命令需要使用的一些主要文件。Rootkit也会把目录和文件放在这些地方之外,但是除非你绝对确信这些文件属于rootkit而不是某个合法的应用程序,你就应该不去管它们。
如果找到了一个值得怀疑的rootkit文件,那么你就需要用一个合法的文件来替换它。如果你的Linux使用RPM,那么就要用rpm -q -f {file}来寻找替换受害文件的程序包。使用RPM的时候,替换受害文件的最佳方法是重新安装整个程序包,所以你需要安装光盘或者是同一Linux版本的程序文件。
但是在你能够替换程序包之前,你必须对标记为不可更改的受害文件“解锁”。在Linux上,chattr –I命令用于解锁,这样你就能够删除或者替换它们。(关于这些命令的更多信息请参看lsattr和chattr的使用手册。)在给受害文件解锁之后,你可以使用rpm -Uvh {package}命令来重新安装程序包,这就会替换掉受害文件。
替换掉受害文件并不意味着你就解决了这一问题,但是如果你需要尽快让系统恢复运行,这就是一种方法。有的时候,让机器尽快恢复运行要比了解***者如何攻破受害机器更为重要。但是这种调查工作肯定应该是你的下一步目标,否则很有可能又会有人再次攻破你的机器
转载于:https://blog.51cto.com/scanty/392863