Rootkit - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Mode opératoire

Contamination

La première phase d'action d'un rootkit consiste généralement à trouver un hôte vulnérable par balayage d'un ensemble d'adresses IP, ou grâce à une base de données d'IP vulnérables.

L'étape suivante consiste à chercher à obtenir un accès au système, sans forcément que celui-ci soit un accès privilégié (ou en mode administrateur). Il existe trois manières de contaminer un système, en suivant les techniques habituelles des programmes malveillants.

Il est possible de mettre en œuvre un exploit, c'est-à-dire profiter d'une vulnérabilité de sécurité connue ou non, à n'importe quel niveau du système (application, système d'exploitation, BIOS, etc.). Cette mise en œuvre peut être le fait d'un virus, mais elle résulte aussi souvent de botnets qui réalisent des scans de machines pour identifier et exploiter les failles qui sont utiles à l'attaque.

Même s'il n'est pas un virus à proprement parler, un rootkit peut utiliser des techniques virales pour se transmettre, notamment par un cheval de Troie. Un virus peut avoir pour objet de répandre des rootkits sur les machines infectées. A contrario, un virus peut aussi utiliser les techniques utilisées par des rootkits pour parfaire sa dissimulation.

Enfin, l’attaque par force brute permet d'accéder au système en profitant de la faiblesse des mots de passe de certains utilisateurs : il suffit de tester les mots de passe les plus courants.

Des outils, nommés « autorooters », réunissent ces opérations de scan et d'exploit en une seule, ce qui peut faciliter la tâche de script kiddies en laissant toutefois beaucoup de traces sur le réseau.

Modification du système et dissimulation

Une fois la contamination effectuée et l'accès obtenu, la phase suivante consiste à installer, au moyen de son script d'installation, les objets et outils nécessaires au rootkit ; c'est-à-dire les objets (programmes, bibliothèques) permettant la mise en place de la charge utile du rootkit, s'ils n'ont pas pu être installés durant la phase de contamination, ainsi que les outils et les modifications nécessaires à la dissimulation.

L'ouverture de portes dérobées, afin de permettre le contrôle de la machine, d'installer la charge utile et de pérenniser l'accès au système est une technique très fréquente.

Dissimulation

Le rootkit cherche à dissimuler son activité pour minimiser le risque qu'on le découvre, afin de profiter le plus longtemps possible de l'accès frauduleux, mais aussi pour rendre sa désinstallation difficile. Il va notamment dissimuler ses propres fichiers, les autres fichiers utilisés par l'attaquant, les processus qu'il exécute et les connexions qu'il va ouvrir. Cette faculté de dissimulation le différencie des virus, qui cherchent principalement à se répandre, bien que ces deux fonctions soient parfois jumelées pour une efficacité supérieure. Plusieurs méthodes de dissimulation peuvent être combinées.

La dissimulation de processus informatiques ou de fichiers permet de cacher l'activité du rootkit. Sous Windows, cela peut être réalisé en modifiant certaines clés de la base de registre ; sous Linux, on peut modifier les fichiers /usr/include/proc.h (processus à masquer) ou /usr/include/file.h (fichiers à masquer). L'attaquant peut aussi remplacer la commande ls pour qu'elle n'affiche pas certains dossiers. Une fois en place, le rootkit peut supprimer ses propres fichiers d'installation pour éviter qu'il ne soit reconnu par une recherche de fichiers.

Certains objets exécutables ou certaines bibliothèques sont remplacés par des programmes malveillants contrôlables à distance (chevaux de Troie), tout en conservant leur horodatage. Il est également possible de détourner certains appels aux tables de travail utilisées par le système par hooking, de manière à ce que des programmes d'apparence légitime exécutent les fonctions voulues par l'attaquant.

L'obtention des droits supérieurs par élévation des privilèges est également fréquemment rencontrée : cela permet notamment de désactiver les mécanismes de défense (comme un anti-virus), ou d'agir sur des objets de haut niveau de privilèges (pilotes de périphériques, noyau du système, etc.). Un rootkit va ainsi pouvoir écouter les transactions sur le réseau pour trouver des mots de passe non chiffrés (comme des connexions ftp), ou détourner une connexion ssh en interceptant l'appel système où le mot de passe n'est pas encore chiffré.

Le rootkit tente de ne pas apparaître dans les fichiers log. Pour cela, il efface certaines entrées des logs ou, de manière beaucoup plus sophistiquée, utilisera des techniques de type « Stealth by Design » (« furtif par conception »), à savoir implémenter à l'intérieur du rootkit des fonctions système afin de ne pas avoir à appeler les fonctions standards du système d'exploitation et ainsi éviter l'enregistrement d'événements système suspects. Il peut ainsi désactiver certains daemons et l'historique des shells.

Enfin, certains rootkits peuvent se charger intégralement en mémoire, ne laissant ainsi aucune trace sur les périphériques de stockage de la machine.

En revanche, certaines activités ne pourront pas facilement être camouflées, notamment ce qui concerne la charge utile qui engendre de la charge réseau ou processeur () ; l'effort de dissimulation se portera alors sur les communications entre le rootkit et l'attaquant pour protéger et maintenir l'accès frauduleux.

Maintien de l'accès

Un rootkit doit pouvoir être manipulé à distance par un attaquant. Celui-ci cherche donc souvent à maintenir un shell (ou « interpréteur de commandes ») disponible idéalement à n'importe quel moment (ou au moins durant l'installation du rootkit), en remplaçant des commandes comme ping ou xterm. Généralement, l'attaquant installe plusieurs de ces portes dérobées au cas ou l'une viendrait à être découverte et supprimée.

L'accès distant au kit peut se faire par l'intermédiaire d'une connexion TCP, comme telnet ou ssh (qui peut être renversée, c'est-à-dire que c'est la machine infectée qui va chercher à rentrer en contact avec l'attaquant), UDP ou ICMP. Il existe aussi des méthodes plus complexes mais plus discrètes : port knocking, faux paquet TCP contenant une commande cachée, se faire passer pour une autre machine, canaux cachés, etc. Au besoin, les scripts de démarrage seront modifiés pour que les services nécessaires au rootkit soient disponibles après chaque redémarrage de la machine.

Pour que l'accès à la machine ne soit pas détourné par un autre attaquant, celui-ci peut corriger les failles du système infecté : celles qui lui ont permis de rentrer, voire l'ensemble des failles connues.

Mise en place de la charge utile

Un botnet permet d'avoir un accès sur des centaines de machines.

La charge utile est la partie active du rootkit (et de tout programme malveillant en général), dont le rôle est d'accomplir la (ou les) tâche(s) assignée(s).

Cette charge utile permet d'avoir accès aux ressources de la machine infectée, et notamment le processeur, pour décrypter des mots de passe, pour effectuer des calculs distribués à des fins malveillantes, ou pour mettre en œuvre (ou détourner l'usage légitime) des applications comme un serveur de messagerie afin d'envoyer des mails (pourriel ou spam) en quantité. Les ressources réseaux intéressent également les attaquants, la machine pouvant alors servir de base pour d'autres attaques (DDoS, exploits) ou pour inspecter, sniffer l'activité réseau.

Le remplacement du procédé de connexion (comme /bin/login sous Linux) peut aussi fournir soit un accès de type porte dérobée (), soit un moyen de récupérer les informations d'authentification des utilisateurs de la machine. La compromission de pilotes de périphériques permet également d'installer des enregistreurs de frappe ou keyloggers (entre autres), afin de récupérer, en complément de l'activité réseau, des traces et des informations personnelles ou confidentielles, comme le seraient des données bancaires ou de connexion.

La machine infectée peut aussi devenir le point de départ pour d'autres attaques, sur internet, ou sur l'intranet, comme un déni de service. La prise de contrôle de la machine offre la possibilité de constituer un réseau de type botnet (la machine infectée devenant alors une machine zombie, comme dans le cas du botnet Srizbi), ou d'accéder à d'autres machines, par rebond.

Niveau de privilège

Bien que le terme ait souvent désigné des outils ayant la faculté d'obtenir un niveau de privilège de type administrateur (utilisateur root) sur les systèmes Unix et Linux, un rootkit ne cherche pas obligatoirement à obtenir un tel accès sur une machine et ne nécessite pas non plus d'accès administrateur pour s'installer, fonctionner et se dissimuler. Le programme malveillant « Haxdoor », même s'il employait des techniques de type noyau pour parfaire sa dissimulation, écoutait les communications sous Windows en mode utilisateur : en interceptant les API de haut niveau, il recueillait des données confidentielles avant leur chiffrement.

Cependant, l'élévation de privilège est souvent nécessaire pour que le camouflage soit efficace : le rootkit peut utiliser certains exploits afin de parfaire sa dissimulation en opérant à un niveau de privilège très élevé, pour atteindre des bibliothèques du système, des éléments du noyau, pour désactiver les défenses du système, etc.

Page générée en 0.119 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise