我每天晚上 3:04 都会运行 chkrootkit。一年多来它都没有出现任何问题,但一个月前开始出现此警告:
=======================
Checking `lkm'... You have 1 process hidden for readdir command
You have 1 process hidden for ps command
chkproc: Warning: Possible LKM Trojan installed
=======================
现在我每小时运行一次 chkrootkit,
3:02
3:03
3:04
3:05
其他时间没有警告,但每周 2-3 次,chkrootkit 会在 3:02 或 3:04 返回此警告。1 分钟后的下一次扫描不会返回此警告。有什么想法吗?为什么这个警告会在凌晨 3 点出现?有没有办法运行 chkrootkit 以便它显示有关隐藏进程的更多信息?
是的,我知道有很多文章说这可能是误报,但为什么这种警告开始如此频繁地出现?
Rkhunter、Clamav、LFD/CSF 没有报告服务器上存在任何问题。
答案1
我认为,除非我们有直接访问权限,否则这里的任何人都不可能正确地找出您的系统出了什么问题。
您可以假设这是误报,而且很有可能是这种情况。根据我的经验,我也遇到过奇怪的误报,经过一番调查后,我满意地确认这确实是误报。某些进程可以出于完全合法的原因从 ps 命令中隐藏。而且通常持续时间很短。
但是,如果你想确定的话,你可以按照下面描述的方式做。我知道这有点极端,可能根本不适用于你的情况,但我不能确定,这是你需要做的决定。
我个人在这方面的经验非常丰富,安全 Debian 手册,特别是在你的情况下检查第11章 妥协之后
一般建议是首先从网络上拔下受感染的系统,然后备份系统。然后进行更多调查。这应该是一项单独的活动,不需要妨碍恢复系统。尝试找出它是如何被感染的是个好主意。
同时彻底清除系统,从非可疑的只读源(例如 DVD)重新安装操作系统,并从备份中恢复您确定未受感染的数据。如果此类数据包含在存储库中,则只需从那里检索它,而不是从备份中检索。
假设系统及其备份上的任何文件都是可疑的,并尽可能尝试恢复它而不从备份中复制文件。只需重复您所做的操作、复制粘贴文本等即可恢复配置文件。
答案2
您必须查找可能的隐藏脚本。问题仍然存在,而且大多数情况下都是误报。
追踪警报:
我跟踪了ps
脚本之前和之后的命令,如下所示/etc/cron.daily/chkrootkit
:
ls /proc/*/status -al > /tmp/lsproc.before.txt
ps axf > /tmp/psaxf.before.txt
ps auxwww > /tmp/psauxwww.before.txt
eval $CHKROOTKIT $RUN_DAILY_OPTS > $LOG_DIR/log.today.raw 2>&1
ls /proc/*/status -al > /tmp/lsproc.after.txt
ps axf > /tmp/psaxf.after.txt
ps auxwww > /tmp/psauxwww.after.txt
结果是:
$ wc -l /tmp/*.txt
218 lsproc.before.txt
219 psauxwww.before.txt
217 psaxf.before.txt
218 lsproc.after.txt
216 psauxwww.after.txt
219 psaxf.after.txt
如您所见:之前是相同的(ps aux
对于没有的列,第一行是相同的ls /proc/*
)。所以之前,我们有 218 个进程。之后,我们仍然有 218 个,但只有 215 (216 - 1) 个进程ps
。我收到了警报: ,所以和You have 3 process hidden for ps command
之间的区别正是如此。/proc/
ps
这些过程是什么?我只听到diff
两个 psauxwww*:
my_user 16674 0.0 0.0 13976 1456 ? S 05:25 0:00 sh /one/dedicated/script.sh
my_user 16690 0.0 0.0 13980 1392 ? S 05:25 0:00 sh /one/dedicated/script.sh
my_user 16691 0.0 0.0 44284 2824 ? S 05:25 0:00 ssh [...]
不是隐藏了,只是消失了!
所以这只是一个脚本,每分钟通过我的 crontab 运行,它是“隐藏的”。但它并没有被隐藏(因为我发现你可以隐藏一些进程):它只是在 chkproc 测试期间消失!
解决方案?
到目前为止,我还没有看到任何简单的解决方案。chkrootkit
是用 bash 编写的,但是chkproc
编译了......
如果您跟踪丢失的进程(很可能是 cron,就像我的情况一样),您可以:
在 chkrootkit 运行的同时停止运行 cron(这并不总是可行的,因为有时无论如何你都需要每分钟运行一次 cron)
在 chkrootkit 运行的准确时间退出脚本,希望 chkrootkit 不会运行超过一分钟,例如在 bash 中你将添加 chkrootkit 运行于
6:25
:如果 [ “`date + %H%M`” = “0625” ]; 然后退出 0; fi
通过在脚本开头添加 sleep 来稍微推迟 chkrootkit 的执行
/etc/cron.daily/chkrootkit
,例如如果你的其他脚本花费的时间少于 15 秒:睡眠 15
虽然不太理想,但是如果您需要两个 cron 同时运行,您就知道该怎么做了。