|
|
 | |  |  | Présentation et détection du rootkit ADORE |  |
by Stéphane Aubert (16/10/2000)
--[ Introduction ]---------------------------------------------------------
ADORE est un rootkit pour Linux qui, via un module, vient ajouter des
fonctionnalités au noyau. Ainsi, il peut cacher des fichiers, cacher des
processus ou permettre à tout utilisateur de passer des commandes en tant
que root.
--[ Installation ]---------------------------------------------------------
La version de adore 0.14 est téléchargeable en sources sur PSS
(http://packetstorm.securify.com/) elle contient les fichiers suivants :
safe [aubert] /work/HACK% tar tvzf ../adore-0.14.tar.gz
drwxr-xr-x root/root 0 2000-02-20 20:56 adore/
-rw-r--r-- root/root 14330 2000-02-20 20:41 adore/adore.c
-rw-r--r-- root/root 264 2000-02-20 20:36 adore/Makefile
-rw-r--r-- root/root 2957 2000-02-20 18:06 adore/ava.c
-rw-r--r-- 33/root 1660 1999-12-29 20:56 adore/LICENSE
-rw-r--r-- root/root 585 2000-02-20 18:42 adore/README
Après tar xvzf adore-0.14.tar.gz, lancer cd adore;make pour la compiler.
Par défault, adore est compilé avec les options :
-DBEHAVE_STEALTH -DHIDDEN_SERVICE="\":31337\"" -DELITE_CMD=50000
Il est aussi possible d'utiliser l'option -DUSE_SLOWER_HEROIN_METHOD.
Pour installer adore il suffit d'insérer le module en tant que root (su -) :
safe [root] /work/HACK/adore# insmod adore.o
Vous pouvez vérifier qu'il est bien caché ;-) :
safe [root] /work/HACK/adore# lsmod
Module Size Used by
3c589_cs 8072 2
serial_cs 5040 0 (unused)
ds 6024 2 [3c589_cs serial_cs]
i82365 21276 2
pcmcia_core 43264 0 [3c589_cs serial_cs ds i82365]
bsd_comp 3620 0 (unused)
slip 5160 0 (unused)
nls_cp437 3676 2 (autoclean)
Il est probable que si adore est le SEUL ou le premier module chargé , la
procédure qui le cache ne marche pas.
Vous pouvez même essayer de le supprimer ;-) :
safe [root] /work/HACK/adore# rmmod adore
rmmod: module adore not loaded
C'est trop tard !
--[ Utilisation ]----------------------------------------------------------
Pour le piloter il faut utiliser le programme ava :
safe [aubert] /work/HACK/adore% ./ava
Usage: ./ava {h,u,r,i,v,U} [file, PID or dummy (for 'U')]
h hide file
u unhide file
r execute as root
U uninstall adore
i make PID invisible
v make PID visible
On peut donc commencer à jouer avec et cacher un fichier :
safe [aubert] /work/HACK/adore% touch sahsc
safe [aubert] /work/HACK/adore% ls -l
total 56
-rw-r--r-- 1 aubert users 1660 Dec 29 1999 LICENSE
-rw-r--r-- 1 aubert users 264 Feb 20 2000 Makefile
-rw-r--r-- 1 aubert users 585 Feb 20 2000 README
-rw-r--r-- 1 aubert users 14330 Feb 20 2000 adore.c
-rw-r--r-- 1 aubert users 5460 Oct 16 01:12 adore.o
-rwxr-xr-x 1 aubert users 14080 Oct 16 01:12 ava*
-rw-r--r-- 1 aubert users 2957 Feb 20 2000 ava.c
-rw-r--r-- 1 root root 0 Oct 16 01:14 sahsc
safe [aubert] /work/HACK/adore% ./ava h sahsc
Checking for adore 0.12 or higher ...
Adore 0.14 installed. Good luck.
File 'sahsc' hided.
safe [aubert] /work/HACK/adore% ls -l
total 56
-rw-r--r-- 1 aubert users 1660 Dec 29 1999 LICENSE
-rw-r--r-- 1 aubert users 264 Feb 20 2000 Makefile
-rw-r--r-- 1 aubert users 585 Feb 20 2000 README
-rw-r--r-- 1 aubert users 14330 Feb 20 2000 adore.c
-rw-r--r-- 1 aubert users 5460 Oct 16 01:12 adore.o
-rwxr-xr-x 1 aubert users 14080 Oct 16 01:12 ava*
-rw-r--r-- 1 aubert users 2957 Feb 20 2000 ava.c
safe [aubert] /work/HACK/adore% ./ava u sahsc
Checking for adore 0.12 or higher ...
Adore 0.14 installed. Good luck.
File 'sahsc' unhided.
safe [aubert] /work/HACK/adore% ls -artli
total 64
155595 -rw-r--r-- 1 aubert users 1660 Dec 29 1999 LICENSE
155594 -rw-r--r-- 1 aubert users 2957 Feb 20 2000 ava.c
155596 -rw-r--r-- 1 aubert users 585 Feb 20 2000 README
155593 -rw-r--r-- 1 aubert users 264 Feb 20 2000 Makefile
155592 -rw-r--r-- 1 aubert users 14330 Feb 20 2000 adore.c
123023 drwxr-xr-x 7 aubert users 4096 Oct 15 19:17 ../
155598 -rwxr-xr-x 1 aubert users 14080 Oct 16 01:12 ava*
155597 -rw-r--r-- 1 aubert users 5460 Oct 16 01:12 adore.o
155599 -rw-r--r-- 1 root root 0 Oct 16 01:14 sahsc
155591 drwxr-xr-x 2 aubert users 4096 Oct 16 01:14 ./
Adore est avant tout un rootkit et en tant que tel il doit permettre de
passer root pour un utilisateur lambda.
Ca c'est impressionnant :
safe [aubert] /work/HACK/adore% ./ava r "/bin/sh"
Checking for adore 0.12 or higher ...
Adore 0.14 installed. Good luck.
sh-2.03# id
uid=0(root) gid=0(root) groups=100(users),1(bin),3(sys),5(tty),102(apm)
sh-2.03#
Et voilà je suis root !
--[ Détection ]------------------------------------------------------------
Comme nous l'avons vu au début ce module se cache lui-même (commande
lsmod) Il est donc difficile a détecter.
S'il est compilé avec l'option -DELITE_CMD=50000 (ainsi que ./ava.c) il est
alors possible d'utiliser "./ava U destroy" pour le supprimer !
Si on ne possède pas le programme ava (ou si celui-ci est bien caché) il
semble difficile à détecter !
Pour rire j'ai cherché des traces, j'ai même essayé dans le swap :
safe [root] /work/HACK/adore# fdisk -l
...
/dev/hda7 682 730 393561 82 Linux swap
safe [root] /work/HACK/adore# strings /dev/hda7 | grep -i adore
safe [root] /work/HACK/adore#
Rien ? j'ai pas du bien cherché ! ;-))
Je pense qu'il est possible à détecter simplement avec un petit scanner
qui va essayer successivement tous les UID possibles (tous sauf ceux
existant dans /etc/passwd).
Pourquoi faire ca ? Simplement parceque le programme ./ava obtient la
version du module adore en appelant la fonction setuid(ELITE_CMD+2).
Le programme adore_scan permet de détecter la présence de ce rootkit furtif
(au moins jusqu'à la version 0.14).
Voici son résultat sur un système sain :
safe [root] /work/HACK/adore# ./adore_scan
-=- Adore Rootkit Scanner -=-
-=- by Stephane.Aubert@hsc.fr -=-
ADORE rootkit NOT DETECTED on this system.
Insérons le vilain module :
safe [root] /work/HACK/adore# insmod adore.o
Exécutons de nouveau adore_scan :
safe [root] /work/HACK/adore# ./adore_scan
-=- Adore Rootkit Scanner -=-
-=- by Stephane.Aubert@hsc.fr -=-
ADORE rootkit (version 0.14) is running with ELITE_CMD=50000 !
--[ adore_scan.c ]---------------------------------------------------------
/** adore_scan.c (C) 2000 by Stephane Aubert
** <Stephane.Aubert@hsc.fr>
** Adore Rootkit Scanner (until version 0.14)
** Compile: gcc -o adore_scan -Wall adore_scan.c
** Usage: ./adore_scan
**/
#include <pwd.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int version;
uid_t uid;
printf("\n-=- Adore Rootkit Scanner -=-\n-=- by Stephane.Aubert@hsc.fr -=-\n\n");
// for all possible UIDs
for( uid=65535; uid>=2; uid-- ) {
if( getpwuid(uid) == NULL ) { // if UID is not in /etc/passwd
if( (version=setuid( uid )) >=0 ) {
printf("ADORE rootkit (version 0.%d) is running with ELITE_CMD=%d !\n\n",
version, uid-2 );
return 1;
}
}
}
printf("ADORE rootkit NOT DETECTED on this system.\n\n");
return 0;
}
--[ EOF ]------------------------------------------------------------------
|