chkrootkit 扫描程序检测到可能的 KLM 木马

8 rootkit antivirus

今天,我chkrootkit通过运行以下工具使用该工具扫描了我的机器:

sudo chkrootkit
Run Code Online (Sandbox Code Playgroud)

这是一些输出:

检查 `lkm'... 你有
2 个进程隐藏用于 readdir 命令 你有 2 个进程隐藏用于 ps 命令 chkproc:警告:可能安装了 LKM 木马 chkdirs:没有检测到

这有什么可担心的吗?如果是这样,我该如何补救?

我正在运行 Ubuntu 14.10 和chkrootkit0.49 版。

Rin*_*ind 13

这有什么可担心的吗?

不,这是 chrootkit 中的误报和长期存在的错误。每当 lkm 检查报告 readdir 命令无法访问的隐藏进程时,您都会看到该消息。如果你有 ClamAV、MySQL、Exim 或 MailScanner 之类的东西在运行,你一定会看到这个警告。

最简单的检查:运行 chrootkit 几次,同时停止尽可能多的服务(即 mysql、clamav 等)。如果结果不同,这是一个明确的指标,它是一个误报。

顺便说一句:rkhunter 对 lkm 有更好的检查。


有关此消息的一些随机主题:stackexchangecpanel.netLinuxquestions.org和所有国家,这是假的和错误。


额外的东西:该命令./chkproc -v将显示您收到的消息的进程 ID (PID),您可以使用它来查找连接到此进程的程序cd /proc/{PID}/ && cat cmdline

如果这足够令人信服,您可以停止阅读。如果您想了解您的机器以及工作原理,请继续阅读。


那么,您需要了解有关您的系统的哪些信息才能解决此问题?

首先:最好的rootkit检测器就是你。了解您的机器上哪些服务处于活动状态,了解您的机器上正在运行哪些脚本可以保持您的系统清洁和安全。是的,完全理解 Linux 系统需要一些时间。

其次:有一些针对 Linux 的恶意软件,但很少见。原因很简单,尽管 Linux 非常便携,但它并不是那么便携。分布(怎么这么小)、库、不同的内核和编译器之间的差异使得在随机机器上执行随机代码极其困难。使用恶意软件的人是为了经济利益。所以他们专注于 Windows 的原因很简单,因为它是闭源的,有很多漏洞需要微软采取行动来修复它们。(简化 :) )


现在,您会看到有关可能安装了 LKM 木马的警告。LKM 代表 Linux Kernel Module,是 Linux 中的核心模块之一。内核模块被加载到匹配的内核中,如果两者不属于一起,模块将不会加载。这是 Linux 系统的基本安全功能之一,可用于跟踪恶意代码 (1)。

关于内核的一些基本知识(2):

  • uname -r 显示您的内核。

  • 安装的内核可以在/boot.

    rinzwind@schijfwereld:/boot$ ls abi-3.16.0-22-generic initrd.img-3.16.0-29-generic abi-3.16.0-23-generic initrd.img-3.16.0-30-generic abi-3.16.0-24-generic memtest86+.bin abi-3.16.0-25-generic memtest86+.elf abi-3.16.0-28-generic memtest86+_multiboot.bin abi-3.16.0-29-generic System.map-3.16.0-22-generic abi-3.16.0-30-generic System.map-3.16.0-23-generic config-3.16.0-22-generic System.map-3.16.0-24-generic config-3.16.0-23-generic System.map-3.16.0-25-generic config-3.16.0-24-generic System.map-3.16.0-28-generic config-3.16.0-25-generic System.map-3.16.0-29-generic config-3.16.0-28-generic System.map-3.16.0-30-generic config-3.16.0-29-generic vmlinuz-3.16.0-22-generic config-3.16.0-30-generic vmlinuz-3.16.0-23-generic grub vmlinuz-3.16.0-24-generic initrd.img-3.16.0-22-generic vmlinuz-3.16.0-25-generic initrd.img-3.16.0-23-generic vmlinuz-3.16.0-28-generic initrd.img-3.16.0-24-generic vmlinuz-3.16.0-29-generic initrd.img-3.16.0-25-generic vmlinuz-3.16.0-30-generic initrd.img-3.16.0-28-generic

  • 内核模块安装在/lib/modules与您的内核匹配的子目录中。


所以基于(1)和(2)下一步是重新启动到另一个内核。违规模块是针对特定内核编译的,将无法将自身编译到其他内核中(仅仅是因为头不匹配)。


拥有 rootkit 时可能受到影响的目录和文件数量是有限的(rootkit 需要从某个地方启动)。有 2 个目录和一组将被定位的文件...

  1. /etc/init.d/

    做一个ls -ltr /etc/init.d(它会按照上次更改的顺序列出它们)并检查未知的服务。正常的服务将具有合理的名称。这些服务可以由系统或手动启动。

    rinzwind@schijfwereld:/etc/init.d$ ls acpid hwclock.sh reboot alsa-utils irqbalance resolvconf anacron kerneloops rsync apparmor killprocs rsyslog apport kmod saned atieventsd lightdm sendsigs avahi-daemon lvm2 single bluetooth mountall-bootclean.sh skeleton bootmisc.sh mountall.sh smartmontools brltty mountdevsubfs.sh speech-dispatcher cgmanager mountkernfs.sh sslh cgproxy mountnfs-bootclean.sh sudo checkfs.sh mountnfs.sh thermald checkroot-bootclean.sh networking udev checkroot.sh network-manager udev-finish console-setup ondemand ufw cron php5-fpm umountfs cups pppd-dns umountnfs.sh cups-browsed procps umountroot dbus pulseaudio unattended-upgrades dns-clean rc urandom grub-common rc.local uuidd halt rcS x11-common hostname.sh README

  2. /etc/rc*/

    启动和终止脚本位于/etc/rc[0-5,S].d. 一般来说,这里的文件有数字和合理的描述(这些文件在启动时按字母顺序执行,在杀死期间按相反顺序执行。注意由随机数字和字母组成的脚本。这是一个列表(这些是有效的脚本) .

    rinzwind@schijfwereld:/etc$ ls rc*/ rc0.d/: K01alsa-utils K01lightdm K01unattended-upgrades K05umountnfs.sh K01atieventsd K01php5-fpm K01urandom K06networking K01bluetooth K01pulseaudio K01uuidd K07umountfs K01cgmanager K01resolvconf K02avahi-daemon K08umountroot K01cgproxy K01speech-dispatcher K03sendsigs K09halt K01cups-browsed K01sslh K04rsyslog README K01irqbalance K01thermald K05hwclock.sh

    rc1.d/: K01alsa-utils K01irqbalance K01speech-dispatcher README K01atieventsd K01kerneloops K01sslh S01dns-clean K01bluetooth K01lightdm K01thermald S01killprocs K01cgmanager K01php5-fpm K01ufw S01pppd-dns K01cgproxy K01pulseaudio K01uuidd S02single K01cups K01saned K02avahi-daemon K01cups-browsed K01smartmontools K04rsyslog

    rc2.d/: README S01uuidd S02kerneloops S04cups S01apport S02acpid S02rsync S04cups-browsed S01cgmanager S02anacron S02smartmontools S04pulseaudio S01dns-clean S02atieventsd S02speech-dispatcher S04saned S01php5-fpm S02cgproxy S02thermald S05grub-common S01pppd-dns S02cron S03avahi-daemon S05ondemand S01rsyslog S02dbus S03bluetooth S05rc.local S01sslh S02irqbalance S03lightdm

    rc3.d/: README S01uuidd S02kerneloops S04cups S01apport S02acpid S02rsync S04cups-browsed S01cgmanager S02anacron S02smartmontools S04pulseaudio S01dns-clean S02atieventsd S02speech-dispatcher S04saned S01php5-fpm S02cgproxy S02thermald S05grub-common S01pppd-dns S02cron S03avahi-daemon S05ondemand S01rsyslog S02dbus S03bluetooth S05rc.local S01sslh S02irqbalance S03lightdm

    rc4.d/: README S01uuidd S02kerneloops S04cups S01apport S02acpid S02rsync S04cups-browsed S01cgmanager S02anacron S02smartmontools S04pulseaudio S01dns-clean S02atieventsd S02speech-dispatcher S04saned S01php5-fpm S02cgproxy S02thermald S05grub-common S01pppd-dns S02cron S03avahi-daemon S05ondemand S01rsyslog S02dbus S03bluetooth S05rc.local S01sslh S02irqbalance S03lightdm

    rc5.d/: README S01uuidd S02kerneloops S04cups S01apport S02acpid S02rsync S04cups-browsed S01cgmanager S02anacron S02smartmontools S04pulseaudio S01dns-clean S02atieventsd S02speech-dispatcher S04saned S01php5-fpm S02cgproxy S02thermald S05grub-common S01pppd-dns S02cron S03avahi-daemon S05ondemand S01rsyslog S02dbus S03bluetooth S05rc.local S01sslh S02irqbalance S03lightdm

    rc6.d/: K01alsa-utils K01lightdm K01unattended-upgrades K05umountnfs.sh K01atieventsd K01php5-fpm K01urandom K06networking K01bluetooth K01pulseaudio K01uuidd K07umountfs K01cgmanager K01resolvconf K02avahi-daemon K08umountroot K01cgproxy K01speech-dispatcher K03sendsigs K09reboot K01cups-browsed K01sslh K04rsyslog README K01irqbalance K01thermald K05hwclock.sh

    rcS.d/: README S03udev S08checkroot-bootclean.sh S01console-setup S04brltty S08kmod S02alsa-utils S04mountdevsubfs.sh S08urandom S02apparmor S04procps S09mountall.sh S02hostname.sh S04udev-finish S09networking S02mountkernfs.sh S05hwclock.sh S10mountall-bootclean.sh S02resolvconf S05lvm2 S10mountnfs.sh S02ufw S06checkroot.sh S11mountnfs-bootclean.sh S02x11-common S07checkfs.sh S12bootmisc.sh

  3. 一个启动脚本。

    通常,Ubuntu 在终端中使用 bash 并在启动时使用 dash。echo $SHELL将向您展示正在使用的外壳。对于 bash,用于检查奇怪脚本或奇怪代码行的隐藏文件是...

    /etc/profile 
    /etc/bashrc
    /etc/bash.bashrc
    
    ~/.profile
    ~/.bash_profile
    
    Run Code Online (Sandbox Code Playgroud)

    这是5个常见的。任何机器都可以有更多。除此之外,您还可能包括

    /etc/crontab
    crontab
    
    Run Code Online (Sandbox Code Playgroud)

    最后一个适用于您的用户和执行sudo su. “crontab”你可以列出crontab -l。注意不是通用 Linux 或由您创建的脚本。

如果您碰巧有第二个系统,生活会变得容易得多:您可以简单地将上述所有文件与第二台机器进行比较。