jeudi 18 mars 2010

basics 8 - détecter les rootkits linux

Les rootkits sont des programmes malveillants installés au sein même de l'OS. Ils sont difficiles à détecter et à supprimer. Quelques outils permettent de s'en prémunir. Cet article aborde les outils anti rootkits sous forme de tutoriel.. Nous étudierons:
  • le contrôle d'intégrité,
  • la détection de signatures,
  • la recherche d'objets cachés.
Ces techniques peuvent être complétées par l'analyse des appels systèmes, celle des logs système, et celle des flux anormaux que nous n'étudierons pas ici.

Contrôle d'intégrité

Le contrôle d'intégrité consiste à créer une base de signatures des fichiers systèmes sains. Le contrôleur compare le système à sa base. Vous êtes avertis lorsque des modifications y sont apportées. Pour cela, RAID et tripwire peuvent être utilisés conjointement.

tripwire

Installation

Considérons que notre client linux est sain.
client_linux$ sudo apt-get install tripwire
Lors de l'installation, nous définissons la clé du site et la clé locale de la base. Choisissons pour ces deux mots de passe :
utilisateur
Éditons le fichier /etc/tripwire/twcfg.txt
client_linux$ sudo gedit /etc/tripwire/twcfg.txt

ROOT =/usr/sbin
POLFILE =/etc/tripwire/tw.pol
DBFILE =/var/lib/tripwire/$(HOSTNAME).twd
REPORTFILE =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE =/etc/tripwire/site.key
LOCALKEYFILE =/etc/tripwire/$(HOSTNAME)-local.key
EDITOR =/usr/bin/vi
LATEPROMPTING =false
LOOSEDIRECTORYCHECKING =false
MAILNOVIOLATIONS =true
EMAILREPORTLEVEL =3
REPORTLEVEL =3
SYSLOGREPORTING =true
MAILMETHOD =SMTP
SMTPHOST =localhost
SMTPPORT =25
Editons le fichier /etc/tripwire/twpol.txt
client_linux$ gedit /etc/tripwire/twpol.txt
#
# Standard Debian Tripwire configuration
#
#
# This configuration covers the contents of all 'Essential: yes'
# packages along with any packages necessary for access to an internet
# or system availability, e.g. name services, mail services, PCMCIA
# support, RAID support, and backup/restore support.
(…)
Ces deux fichiers permettent de configurer tripwire. Après avoir modifié la politique d'utilisation:
client_linux$ cd /etc/tripwire
client_linux /etc/tripwire$ sudo twadmin --create-polfile --cfgfile ./tw.cfg --site-keyfile ./site.key ./twpol.txt
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol
Sauvegardons les fichiers .txt du répertoire /etc/tripwire sur un support amovible puis supprimons les (nous utilisons ici l'outil wipe).
client_linux$ sudo apt-get install wipe
client_linux$ cp /etc/tripwire/*.txt /mnt/mon_support_amovible/tripwire
client_linux$ sudo wipe -fqr /etc/tripwire/*.txt
Les fichiers tw.cfg et tw.pol sont les versions chiffrées et signées de ces fichiers. Modifions leurs droits (root):
client_linux$ sudo chmod 0600 tw.cfg tw.pol

initialisation de la base

client_linux$ sudo tripwire --init --cfgfile /etc/tripwire/tw.cfg --polfile /etc/tripwire/tw.pol --site-keyfile /etc/tripwire/site.key --local-keyfile /etc/tripwire/HOSTNAME-local.key

Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
### Warning: File system error.
(...)
### Filename: /proc/13501/task/13501/fdinfo/4
### Aucun fichier ou dossier de ce type
### Continuing...
The object: "/proc/fs/vmblock/mountPoint" is on a different file system...ignoring.
The object: "/proc/sys/fs/binfmt_misc" is on a different file system...ignoring.
Wrote database file: /var/lib/tripwire/PK67.twd
The database was successfully generated.

Vérification de l'intégrité des fichiers

client_linux$ sudo tripwire –check

AIDE

installation de aide

Passons en root:
client_linux$ sudo passwd
client_linux$ su -
installons aide
client_linux# apt-get install aide

initialisation de la base

initialisons la base (cela prend un certain temps)
client_linux# touch /var/lib/aide/aide.db
client_linux# aideinit

Overwrite existing /var/lib/aide/aide.db.new [Yn]? Y
Running aide --init...
lstat() failed for /home/utilisateur/.gvfs:Permission denied

AIDE, version 0.13.1

### AIDE database at /var/lib/aide/aide.db.new initialized.

Overwrite /var/lib/aide/aide.db [yN]? Y
sauvegardons la base et le fichier aide.conf sur un media externe
client_linux# cp /var/lib/aide.db /mnt/mon_support_amovible/aide
client_linux# cp /etc/aide/aide.conf /mnt/mon_support_amovible/aide

vérification de l'intégrité des fichiers

Nous utilisons la base que nous avions sauvegardée sur le support amovible:
client_linux# cp /mnt/mon_support_amovible/aide/aide.db /var/lib/aide/aide.db
client_linux# cp /mnt/mon_support_amovible/aide/aide.conf /etc/aide/aide.conf
client_linux# aide --check

mise à jour de la base

Nous mettons à jour la base puis la sauvegardons à nouveau.
client_linux# aide –update
client_linux# cp /mnt/mon_support_amovible/aide/aide.db /var/lib/aide/aide.db
client_linux# cp /mnt/mon_support_amovible/aide/aide.conf /etc/aide/aide.conf

simulation de la modification d'un fichier systeme

Nous allons simuler le comportement d'un rootkit en modifiant le fichier /bin/login:

Sauvegardons /bin/login
client_linux$ sudo mkdir /bin/backup
[sudo] password for utilisateur:
client_linux$ sudo cp /bin/login /bin/backup/login
Modifions la date de création de /bin/backup/login avec la date de /bin/login:
client_linux$ sudo touch -r /bin/login /bin/backup/login
client_linux$ ls -F --full-time /bin/backup/login
-rwxr-xr-x 1 root root 43352 2009-07-31 15:55:36.000000000 +0200 /bin/backup/login*
Créons un nouveau fichier ./login:
client_linux$ echo "deleted" > ./login
Remplacons /bin/login par ./login et modifions sa date de création:
client_linux$ sudo cp ./login /bin/login
client_linux$ ls -F --full-time /bin/login
-rwxr-xr-x 1 root root 8 2010-03-18 17:06:06.291331679 +0100 /bin/login*
client_linux$ sudo touch -r /bin/backup/login /bin/login
client_linux$ ls -F --full-time /bin/login
-rwxr-xr-x 1 root root 8 2009-07-31 15:55:36.000000000 +0200 /bin/login*
A présent voyons si tripwire détecte la modification:
client_linux$ sudo tripwire –check > ./result.log
Et le résultat obtenu:
client_linux$ gedit ./result.log
(…)
Rule Name: Root file-system executables (/bin)
Severity Level: 100
-------------------------------------------------------------------------------

Added:
"/bin/backup"
"/bin/backup/login"

Modified:
"/bin"
"/bin/login"
Tripwire a bien retrouvé la modification.

détection de signatures


La détection de signature est le comportement le plus connu des antivirus. Deux outils Linux permettent de le faire pour les rootkits: chkrootkit, rkhunter

chkrootkit

Installation:
client_linux$ sudo apt-get install chkrootkit
utilisation:
client_linux$ sudo chkrootkit

rkhunter

Installation:
client_linux$sudo apt-get install rkhunter
utilisation:
client_linux$ sudo rkhunter --update
client_linux$ sudo rkhunter -c –pkgmgr DPKG

recherche d'objets cachés

Un outil permet de rechercher les processus cachés sous linux: unhide

installation:
client_linux$ sudo apt-get install unhide
utilisation:
client_linux$ unhide proc
Unhide 20080519
yjesus@security-projects.com

[*]Searching for Hidden processes through /proc scanning

client_linux$ unhide sys
Unhide 20080519
yjesus@security-projects.com

[*]Searching for Hidden processes through getpriority() scanning
[*]Searching for Hidden processes through getpgid() scanning
[*]Searching for Hidden processes through getsid() scanning
[*]Searching for Hidden processes through sched_getaffinity() scanning
[*]Searching for Hidden processes through sched_getparam() scanning
[*]Searching for Hidden processes through sched_getscheduler() scanning
[*]Searching for Hidden processes through sched_rr_get_interval() scanning
[*]Searching for Hidden processes through sysinfo() scanning

client_linux$ unhide brute
Unhide 20080519
yjesus@security-projects.com

[*]Starting scanning using brute force against PIDS

Pour connaître la liste des processus non masqués:
client_linux$ ps -e -o"%p %P %U %c"
PID PPID USER COMMAND
1 0 root init
(...)

références

21) Wikipedia - rootkits - http://fr.wikipedia.org/wiki/Rootkit
22) Maurice Libes - club Linux Nord Pas de Calais – Utiliser Linux... oui mais pas les yeux fermés - http://clx.anet.fr/spip/article.php3?id_article=146
23) tutoriel tripwire - http://remoteadmin.org.uk/tutorials/42-linux/56-tripwire-ubuntu
24) code source de DR Rootkit - http://www.immunityinc.com/resources-freesoftware.shtml
25) HSC aide - http://www.hsc.fr/ressources/breves/aide.html.fr

Aucun commentaire:

Enregistrer un commentaire