Rechercher
Contactez-nous Suivez-nous sur Twitter En francais English Language
 

De la Théorie à la pratique





















Abonnez-vous gratuitement à notre NEWSLETTER

Newsletter FR

Newsletter EN

Vulnérabilités

Se désabonner

La faille Ghost : comment ça marche, et quelles sont les solutions ?

janvier 2015 par NBS System

Suite à la découverte de la faille Ghost mettant en danger les serveurs Linux, nous souhaitons faire un point pour l’expliquer plus en détail et la rendre compréhensible pour le plus grand nombre.

LA FAILLE GHOST : CONTEXTE

La faille Ghost, dont la dangerosité a été exposée le 27 janvier par la société Qualys, menace la sécurité des serveurs Linux. Il s’agit d’une erreur de code située dans la bibliothèque « Glibc », utilisée par toutes les machines Linux et pouvant éventuellement permettre à des attaquants de récupérer des données, implanter un botnet sur une machine (cheval de Troie permettant d’utiliser l’ordinateur comme soutien pour des attaques futures), voire même prendre le contrôle des machines, tout cela à distance.

Les serveurs à risque tels que ceux des entreprises reconnues ou possédant d’importantes bases de données doivent donc être rapidement protégés. Dans cet article, nous allons commencer par expliquer ce qu’est la faille Ghost, puis proposer quelques solutions pour éviter les risques liés à cette faille.

COMMENT ÇA MARCHE ?

Qu’est-ce qu’un programme ?

Le terme de programme couvre de nombreuses catégories : systèmes d’exploitation (Windows, Linux), navigateurs web (Firefox, Chrome), applications… Ce sont en fait des séquences d’instructions données à une machine, spécifiant étape par étape les opérations à effectuer pour obtenir un résultat à une requête.

Quand une demande est faite à un programme, ce dernier utilise plusieurs fonctions pour arriver au résultat demandé. Ces fonctions sont stockées dans des bibliothèques (library en anglais) ; certaines sont partagées entre quelques programmes spécifiques qui ont les mêmes besoins, d’autres sont largement utilisées par tous.

L’une de ces dernières contient des fonctions de base, nécessaires au fonctionnement de n’importe quel programme : c’est la bibliothèque « Libc ». Exemple simple : la fonction « printf () », permettant d’afficher un caractère sur l’écran, y est comprise.

La bibliothèque « Libc » est en réalité la brique fondamentale de tout programme. Pour comprendre, il faut descendre un peu plus profondément dans le fonctionnement d’un programme.

Le processeur d’un ordinateur « parle » son propre langage, le « langage machine », qui est aussi précis qu’extrêmement compliqué. Il existe donc un deuxième niveau de langage nécessitant moins de lignes de code et permettant de « converser » plus facilement avec la machine : le C. C’est le langage le plus performant, mais il reste assez compliqué à comprendre et à utiliser. C’est pourquoi un troisième niveau de langage existe et il comprend des types de code plus largement connus et utilisés : PHP, Java, Python… Ces langages, en réalité, se basent sur un noyau de C et ajoutent au code C leurs propres instructions.

Ainsi, si tous les programmes n’utilisent pas la même langue finale, une énorme partie d’entre eux est basée sur le C, et « Libc » (nom composé du préfixe Lib pour library et du suffixe C pour le nom du langage) est la bibliothèque qui regroupe toutes les fonctions basiques utilisables dans le langage C. Elle est donc utilisée par tous.

L’exemple de la fonction « gethostbyname () »

Nous allons maintenant prendre un exemple de fonction comprise dans la Libc : il s’agit de la fonction permettant de retourner l’adresse IP correspondant au nom de domaine souhaité, ce qui est une des étapes dans l’affichage d’une page internet par exemple. Cette fonction, « gethostbyname () », est accessible par tous les programmes.

Pour écrire une fonction, et donc par extension un programme, on déclare des variables ainsi que des paramètres pour cette variable dans le code source. Pour la fonction « gethostbyname () », on détermine par exemple la variable FQDN (Fully Qualified Domain Name, tel que www.toto.com) et l’on décide qu’elle ne doit pas excéder un certain nombre de caractères.

Si cette condition est réalisée, alors le programme ira chercher les informations correspondantes dans la partie de la RAM (mémoire vive) de l’ordinateur réservée à cet effet. Dans notre exemple, ce sera l’adresse IP correspondant au nom de domaine.

En revanche, si le nombre de caractères prédéfinis est dépassé et que l’on n’a pas prévu de bloquer la requête dans ce cas de figure, alors on dépasse la capacité de la variable et on touche alors à de l’espace mémoire non dédié à la variable. Le programme va tomber, et la requête va alors chercher à utiliser d’autres ressources de la machine.

Le cas Linux : Glibc et faille Ghost en tant que telle

La faille Ghost fonctionne sur ce schéma. Bien que beaucoup plus complexe et large que l’exemple donné plus haut sur une seule fonction, elle correspond à peu près à cela. Sur de nombreuses fonctions « gethostby… () » (d’où le nom Ghost), il existe un risque d’exploitation de tailles de caractères, suite à une erreur de code ou plutôt à un manque de sécurité au sein du code. Cette faille se situe dans la bibliothèque Glibc, créée par le groupement GNU qui, souhaitant augmenter la liberté et le contrôle des utilisateurs d’ordinateurs, l’a mise ainsi que son code source à la disposition de tous. Ayant l’habitude d’ajouter à toutes leurs créations un G en préfixe, ils ont nommé la bibliothèque Glibc. Elle fait partie des « distributions » Linux ; c’est pourquoi seul ce système est concerné par la faille.

La Glibc contient un nombre impressionnant de fonctions, permettant notamment la gestion au sens large du réseau.

Les risques réels liés à Ghost

Même si la faille doit être comblée rapidement pour éviter des attaques, il n’est pas si simple de profiter de ces exploits. En effet, il ne suffit pas de dépasser le nombre de caractères imposé pour pouvoir exploiter la machine. Une personne mal intentionnée devra, après avoir tapé un nom de domaine dépassant ce nombre, le faire suivre d’un paramètre adapté pour avoir accès au reste de la machine (dans www.toto.com/index.php, « index.php » est le paramètre). C’est comme s’il se forgeait un badge pour pouvoir rentrer dans des bureaux ; il se fabrique lui-même une autorisation afin que la machine ne le bloque pas à l’entrée de l’espace mémoire.

C’est pourquoi, puisque la faille a été révélée au grand jour, il est important de réagir vite afin que des attaquants ne profitent pas de la vulnérabilité des machines.

LES SOLUTIONS POUR SE PROTÉGER

Avant toute chose, il est à noter qu’après investigation de Qualys, certaines « cibles » ne sont a priori pas en danger d’être exploitées. Ces cibles sont : Apache, Cups, Dovecot, Gnupg, Isc-dhcp, Lighttpd, Mariabd/mysql, Nfs-utils, Nginx, Nodejs, Openldap, Openssh, Postfix, Proftpd, Pure-ftpd, Rsyslog, Samba, Sendmail, Sysklogd, Syslog-ng, Tcp_wrappers, Vsftpd, Xinetd. Pour les autres, que faire pour se prémunir de la faille Ghost ? Paradoxalement, la résolution de cette vulnérabilité est simple pour l’utilisateur final. Dès le 27 janvier au soir, des mises à jour étaient disponibles pour la plupart des distributions Linux majeures :

• Red Hat pour ses OS RHEL 5, 6 et 7
• Ubuntu pour ses versions 10.04 et 12.04
• SUSE, où seules les versions 11 et inférieures seraient touchées
• Debian 7
• CentOS 6 et 7

Ainsi, les deux actions à mener sont :
 Mise à jour de la bibliothèque "Glibc" à l’aide du gestionnaire de paquets du système d’exploitation
 Redémarrage de tous les services fonctionnant sur la machine afin que ces derniers rechargent la nouvelle "Glibc"

Alternativement, il est fortement recommandé, lorsque cela est possible, de redémarrer totalement le système d’exploitation (reboot) après la mise à jour de la bibliothèque, afin que plus aucune trace de l’ancienne "Glibc" ne soit présente en mémoire.

Pour tout renseignement complémentaire : https://www.nbs-system.com

- blog : https://www.nbs-system.com/blog

- La page de l’article : https://www.nbs-system.com/blog/la-...




Voir les articles précédents

    

Voir les articles suivants