web-dev-qa-db-fra.com

Un scanner chkrootkit a détecté un cheval de Troie KLM

Aujourd'hui, j'ai scanné ma machine avec l'outil chkrootkit en exécutant:

Sudo chkrootkit

Et ce fut une partie de la sortie:

Vérification de "lkm" ... Vous avez
2 processus masqués pour la commande readdir Vous avez 2 processus masqués pour la commande ps chkproc: Avertissement: Possibilité d'installer des chkdirs sur un cheval de Troie LKM: rien n'a été détecté

Est-ce quelque chose à craindre? Et si oui, comment puis-je remédier à la situation?

J'utilise Ubuntu 14.10 et chkrootkit version 0.49.

6
user364819

Est-ce quelque chose à craindre?

Non, c’est un faux positif et un bug de longue date dans chrootkit. Vous verrez le message chaque fois que la vérification lkm signale des processus cachés inaccessibles par la commande readdir. Si vous avez quelque chose comme ClamAV, MySQL, Exim ou MailScanner en cours d'exécution, cet avertissement est inévitable.

Vérification la plus simple: exécutez chrootkit plusieurs fois avec autant de services arrêtés (par exemple, mysql, clamav, etc.). Si les résultats varient, c'est un indicateur clair, il s'agit d'un faux positif.

Au fait: rkhunter a un meilleur chèque pour lkm.


Quelques sujets aléatoires sur ce message: stackexchange , cpanel.net , Linuxquestions.org et indiquent tous qu'il s'agit d'un faux et d'un bogue.


Quelque chose de plus: la commande ./chkproc -v affiche les ID de processus (PID) du message que vous recevez et vous pouvez l’utiliser pour trouver le programme connecté à ce processus avec cd /proc/{PID}/ && cat cmdline

Si cela est suffisamment convaincant, vous pouvez arrêter de lire. Si vous voulez connaître votre machine et son fonctionnement, continuez à lire.


Alors, que devez-vous savoir sur votre système pour pouvoir résoudre ce problème?

Premièrement: le meilleur détecteur de rootkit, c'est vous. Savoir quels services sont actifs sur votre ordinateur, savoir quels scripts sont exécutés sur votre ordinateur est ce qui maintient votre système propre et sécurisé. Et oui, il faudra un peu de temps pour bien comprendre un système Linux.

Deuxièmement: Il y a un peu de malware ciblant Linux mais c'est rare. Pour la simple raison que Linux est très portable, il n’est pas aussi portable. Les différences entre les distributions (si petites soient-elles), les bibliothèques, les noyaux différents et les compilateurs rendent extrêmement difficile l’exécution de code aléatoire sur des machines aléatoires. Et les personnes qui s’intéressent aux logiciels malveillants y trouvent un avantage financier. Ils se concentrent donc sur Windows pour les raisons très simples qu'il est source fermée et que de nombreux trous dépendent de Microsoft pour pouvoir prendre des mesures pour les réparer. (simplifié :))


Maintenant, pour l’avertissement que vous voyez sur un possible cheval de Troie LKM installé. LKM signifie Linux Kernel Module (module noyau Kernel) et est l’un des modules principaux de Linux. Les modules du noyau sont chargés dans les noyaux correspondants et si les deux n'appartiennent pas ensemble, les modules ne seront pas chargés. C’est l’une des fonctionnalités de sécurité de base d’un système Linux que vous pouvez utiliser pour détecter un code malveillant (1).

Quelques éléments de base sur les noyaux (2):

  • uname -r montre votre noyau.

  • les noyaux installés peuvent être visualisés dans /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

  • les modules du noyau sont installés dans /lib/modules dans un sous-répertoire correspondant à votre noyau.


Donc, basé sur (1) et (2), l’étape suivante consiste à redémarrer dans un autre noyau. Le module incriminé a été compilé avec un noyau spécifique et ne pourra pas se compiler dans l'autre noyau (tout simplement parce que les en-têtes ne correspondent pas).


Le nombre de répertoires et de fichiers pouvant être affectés lorsque vous avez un rootkit est limité (un rootkit doit être démarré quelque part). Il y a 2 répertoires et un groupe de fichiers qui seront ciblés ...

  1. /etc/init.d/

    Faites un ls -ltr /etc/init.d (il les listera par ordre de dernière modification) et recherchera des services inconnus. Les services normaux auront des noms sains. Ces services peuvent être démarrés par le système ou manuellement.

    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*/

    Les scripts de démarrage et d'arrêt sont situés dans /etc/rc[0-5,S].d. En général, les fichiers ici ont des numéros et une description saine (ces fichiers sont exécutés dans l'ordre alphabétique au démarrage et dans l'ordre inverse lors d'un kill. Faites attention aux scripts composés de lettres et de chiffres aléatoires. Voici une liste (ce sont des scripts valides) .

    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. un script de démarrage.

    En général, Ubuntu utilise bash dans un terminal et un tiret lors du démarrage. echo $Shell vous montrera quel Shell est utilisé. Pour bash, les fichiers cachés pour vérifier les scripts étranges ou les lignes de code étranges sont ...

    /etc/profile 
    /etc/bashrc
    /etc/bash.bashrc
    
    ~/.profile
    ~/.bash_profile
    

    Ce sont les 5 communes. Toute machine peut avoir plus si. Outre que vous pourriez également inclure

    /etc/crontab
    crontab
    

    Le dernier pour l'utilisateur et en faisant Sudo su. "crontab" vous pouvez lister avec crontab -l. Surveillez les scripts qui ne sont pas Linux général ou créés par vous.

Si vous avez un deuxième système, la vie devient beaucoup plus facile: vous pouvez simplement comparer tous les fichiers ci-dessus avec le deuxième ordinateur.

11
Rinzwind