Debian - 警告:可能已安装 LKM 木马

Debian - 警告:可能已安装 LKM 木马

我每天晚上 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 同时运行,您就知道该怎么做了。

相关内容