Debian – 警告:可能的LKM木马安装

我每天晚上3点04分运行chkrootkit。 一年多的时间里没有任何问题,但1个月前这个警告开始出现:

======================= 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不会在服务器上报告任何问题。

我不认为这里的任何人都可以正确地弄清楚你的系统出了什么问题,除非我们能够直接访问。

你可以认为这是一个误报,这是最有可能的情况。 根据我的经验,我也有一些奇怪的错误,经过一番调查,我很满意地确认这是一个误报。 出于完全合法的原因,一些进程可以从ps命令隐藏。 而且往往是短命的。

但是,如果你想确保你可以做一些事情,如下所述。 我知道这有点极端,可能根本就不适用于你的情况,但我不能确定,那是你需要做出的决定。

我个人在这样和那样的情况下,从保护Debian手册 ,特别是在你的情况检查第11章 – 妥协

一般的build议是首先从networking上拔下一个受损系统,然后备份系统。 然后进行更多的调查。 这应该是一个单独的活动,并不需要恢复系统的方式。 试着弄清楚它是如何被攻破的,这将是一个好主意。

同时彻底清除系统,重新安装操作系统从一个非可疑的只读源(如DVD),并从备份恢复只有你可以确定的数据没有被感染。 如果这样的数据包含在存储库中,那么只需从那里检索它而不是备份。

假设系统上的任何文件及其备份都受到怀疑,并尽可能地尝试将其还原,而无需从备份复制文件。 只需重复你所做的事情,复制粘贴文本等来恢复configuration文件。

你必须寻找可能的隐藏脚本。 这个问题依然存在,而且大部分时间都是假的。

追踪警报:

我已经在/etc/cron.daily/chkrootkit脚本的前后跟踪了ps命令:

 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 

正如你所看到的:before是相同的( 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,这是“隐藏”。 但它并不隐藏(因为我发现你可以隐藏一些进程):它只是在chkproctesting中消失!

解决scheme?

到目前为止,我没有看到任何简单的解决scheme。 chkrootkit是用bash编写的,但是chkproc被编译…

如果你跟踪丢失的进程(很可能是我的情况下的cron),你可以:

  • 在chkrootkit的同时停止运行cron(并不总是可能的,因为有时你需要每分钟运行你的cron,不pipe是什么)

  • 在chkrootkit运行的确切时间退出脚本,希望chkrootkit不会运行超过一分钟,例如在bash中,您将为在6:25运行的chkrootkit添加脚本:

    如果[“`date +%H%M`”=“0625”]; 然后退出0; 科幻

  • 稍微推迟chkrootkit的执行,在/etc/cron.daily/chkrootkit脚本的开头增加一个睡眠,例如,如果你的其他脚本less于15秒:

    睡15

不理想,但如果你需要两个crons在同一时间运行,你知道该怎么做。