chkrootkit scanner detectou possível KLM Trojan

6

Hoje eu examinei minha máquina com a ferramenta chkrootkit executando:

sudo chkrootkit

E esta foi uma das saídas:

  

Verificando 'lkm' ... Você tem
  2 process hidden para readdir command Você tem 2 processos ocultos para   chkproc: Atenção: Possíveis chkdirs instalados pelo Trojan do LKM:   nada detectado

Isso é algo para se preocupar? E se sim, como posso remediar a situação?

Estou executando o Ubuntu 14.10 e chkrootkit versão 0.49.

    
por Great Uncle Bulgaria 20.02.2015 / 19:34

1 resposta

10
  

Isso é algo para se preocupar?

Não, é um erro falso positivo e de longa duração no chrootkit. Você verá a mensagem sempre que a verificação de lkm relatar processos ocultos inacessíveis pelo comando readdir. Se você tem algo como o ClamAV, MySQL, Exim ou MailScanner em execução, você verá este aviso.

Verificação mais fácil: execute o chrootkit algumas vezes com tantos serviços parados (por exemplo, mysql, clamav etc). Se os resultados variam, é um indicador claro, é um falso positivo.

A propósito: rkhunter tem uma melhor checagem para lkm.

Alguns tópicos aleatórios sobre esta mensagem: stackexchange , cpanel.net , Linuxquestions.org e todos afirmam que isso é falso e um bug.

Algo a mais: o comando ./chkproc -v mostrará os IDs do processo (PIDs) para a mensagem que você recebe e você pode usar isso para encontrar o programa que está conectado a este processo com cd /proc/{PID}/ && cat cmdline

Caso isso seja convincente o suficiente, você pode parar de ler. Se você quiser saber sobre sua máquina e como as coisas funcionam, continue lendo.

  

Então, o que você precisa saber sobre o seu sistema para lidar com esse problema?

Primeiramente: O melhor detector de rootkit é você. Sabendo quais serviços estão ativos em sua máquina, saber quais scripts estão sendo executados em sua máquina é o que mantém seu sistema limpo e seguro. E sim, vai demorar um pouco para entender completamente um sistema Linux.

Em segundo lugar: Há um pouco de malware direcionado ao Linux , mas é raro. Pela simples razão de que, embora o Linux seja muito portátil, não é tão portátil. As diferenças entre distribuições (pequenas), bibliotecas, kernels e compiladores tornam a execução de código aleatório em máquinas aleatórias extremamente difícil. E as pessoas que estão em malware estão nele para obter ganhos financeiros. Então, eles se concentram no Windows pelas razões muito simples que é de código fechado, tem um monte de buracos que dependem da Microsoft para tomar medidas para corrigi-los. (simplificado :))

Agora, para o aviso que você vê sobre um possível cavalo de Tróia LKM instalado. LKM significa Linux Kernel Module e é um dos principais módulos do Linux. Os módulos do kernel são carregados nos kernels correspondentes e, se os dois não pertencerem juntos, os módulos não serão carregados. Este é um dos recursos básicos de segurança de um sistema Linux que você pode usar para rastrear códigos maliciosos (1).

Algumas coisas básicas sobre os kernels (2):

  • uname -r mostra seu kernel.

  • os kernels instalados podem ser visualizados em /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

  • módulos do kernel são instalados em /lib/modules em um subdiretório que corresponde ao seu kernel.

Portanto, com base em (1) e (2), o próximo passo é reiniciar em outro kernel. O módulo ofensivo foi compilado contra um kernel específico e não será capaz de se compilar no outro kernel (simplesmente porque os cabeçalhos não combinam).

A quantidade de diretórios e arquivos que podem ser afetados quando você tem um rootkit é limitada (um rootkit precisa ser iniciado de algum lugar). Existem dois diretórios e um grupo de arquivos que serão direcionados ...

  1. /etc/init.d/

    Faça um ls -ltr /etc/init.d (ele será listado na ordem em que foram alterados pela última vez) e verifique se há serviços desconhecidos. Serviços normais terão nomes sensatos. Esses serviços podem ser iniciados pelo sistema ou manualmente.

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

    Os scripts de inicialização e eliminação estão localizados em /etc/rc[0-5,S].d . Em geral, os arquivos aqui têm números e uma descrição sã (esses arquivos são executados em ordem alfabética quando iniciados e em ordem inversa durante um kill. Fique atento para scripts que consistem em números aleatórios e letras. Aqui está uma lista (são scripts válidos) .

    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. um script de inicialização.

    Em geral, o Ubuntu usa o bash em um terminal e traço ao inicializar. echo $SHELL mostrará qual shell está sendo usado. Para bash, os arquivos ocultos para verificar scripts estranhos ou linhas estranhas de código são ...

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

    Estes são os 5 mais comuns. Qualquer máquina pode ter mais. Além disso, você também pode incluir

    /etc/crontab
    crontab
    

    O último para o seu usuário e fazendo sudo su . "crontab" você pode listar com crontab -l . Preste atenção para scripts que não são Linux gerais ou criados por você.

Se acontecer de você ter uma segunda vida útil do sistema torna-se muito mais fácil: você pode simplesmente comparar todos os arquivos acima com a segunda máquina.

    
por Rinzwind 20.02.2015 / 21:01