Une nouvelle fonctionnalité, qui a été ajoutée dans les snapshots de test du système d’exploitation Unix OpenBSD, va permettre de créer un noyau unique à chaque fois que l’utilisateur va redémarrer ou mettre à jour son ordinateur. Baptisée KARL (Kernel Address Randomized Link), elle fonctionne en reliant les fichiers internes du noyau dans un ordre aléatoire afin qu'il génère chaque fois un binaire unique du noyau.
Rappelons qu’actuellement, pour les versions stables, le noyau OpenBSD utilise un ordre prédéfini pour lier et charger des fichiers internes à l'intérieur des binaires du noyau, ce qui a pour conséquence d’attribuer le même noyau à tous les utilisateurs.
C’est Theo de Raadt, un ingénieur qui est le créateur et le chef des projets OpenBSD, OpenSSH, OpenNTPD et OpenBGPD, qui a expliqué la raison pour laquelle il a dû travailler sur une nouvelle fonctionnalité de randomisation du noyau pour le protéger : « La situation actuelle est que de nombreuses personnes installent un kernel binaire depuis OpenBSD et exécutent ce même binaire kernel pendant six mois, voire plus. Nous avons une randomisation substantielle pour les allocations de mémoire faites par le noyau, mais aussi pour les utilisateurs, bien sûr. Cependant, ce noyau est toujours dans la même mémoire physique et au même espace d'adresse virtuelle (on l'appelle KVA). »
Il ne s’agit pas de ASLR
Raadt rappelle qu’auparavant, le langage d'assemblage du noyau bootstrap / runtime locore.S était compilé et lié à tous les autres fichiers .c du noyau dans un mode déterministe : « Locore.o était toujours le premier, puis venaient les fichiers .c dans un ordre spécifié par notre utilitaire config (8) et certains fichiers auxiliaires. »
« Dans le nouvel ordre, locore est divisé en deux fichiers : un morceau Bootstrap, qui est laissé au début. Le runtime du langage d'assemblage et tous les autres fichiers qui sont liés de manière aléatoire. Il y a d'autres pièces qu’il faudrait essayer afin d'améliorer le caractère aléatoire de la mise en page. Par conséquent, chaque nouveau noyau est unique. Les compensations relatives entre les fonctions et les données sont uniques », a-t-il assuré.
En clair, KARL ne doit pas être confondu avec ASLR (Address Space Layout Randomization), une technique qui répartit de manière aléatoire l'adresse de la mémoire où le code de l'application est exécuté, de sorte que les exploits ne peuvent pas cibler une zone spécifique de mémoire où une application ou le noyau est connu pour s'exécuter.
Au lieu de cela, KARL génère des binaires de noyau avec des structures internes aléatoires, de sorte que les exploits ne peuvent pas faire fuiter ou attaquer les fonctions, les pointeurs ou les objets internes du noyau.
Les travaux sur cette fonctionnalité ont débuté en mai et ont d'abord fait l’objet d’une discussion à la mi-juin sur la liste de diffusion technique OpenBSD. KARL a récemment atterri dans des versions instantanées d'OpenBSD 6.1.
« Nos systèmes immunitaires fonctionnent mieux lorsqu'ils sont uniques », a-t-il conclu.
Pour Tiberiu C. Turbureanu, fondateur de la startup Technoethical qui vend des produits matériels axés sur la vie privée, cette fonctionnalité semble être unique à OpenBSD.
« Elle n'est pas implémentée dans Linux », a-t-il déclaré. « Cela semble être une excellente idée », a-t-il ajouté, pour ce qui concerne la possibilité de porter cette fonctionnalité sur le noyau Linux.
Au lieu de cela, le projet Linux vient d'ajouter une prise en charge de Kernel Address Space Layout Randomization (KASLR), une fonctionnalité qui porte ASLR sur le noyau lui-même, en chargeant le noyau à une adresse de mémoire aléatoire.
Cette fonctionnalité a été activée par défaut dans Linux 4.12, publié la semaine dernière. La différence entre les deux est que KARL charge un binaire de noyau différent au même endroit, tandis que KASLR charge le même binaire dans des endroits aléatoires. En clair, ils ont le même but, mais empruntent des voies différentes.
En ce qui concerne Windows, KARL n'est pas pris en charge, mais Microsoft a utilisé KASLR depuis de nombreuses années. Fabian Wosar, responsable technique chez l’éditeur de l'antivirus Emsisoft, est enthousiaste à l’idée d’ajouter KARL au noyau de Windows : « L'idée d'OpenBSD irait encore plus loin [que les protections actuelles du noyau de Windows], car tout le monde aurait un binaire unique du noyau », a-t-il expliqué.
« Donc, même si vous aviez l'adresse où le noyau débute (qui est randomisée), vous ne pourriez pas l'utiliser pour déterminer où se trouvent certaines fonctions, car l'emplacement des fonctions par rapport au début du noyau sera différent d’un système à l’autre », a-t-il ajouté.
Source : liste de diffusion OpenBSD
Et vous ?
Que pensez-vous de cette fonctionnalité ?
OpenBSD va embarquer une fonctionnalité permettant de disposer d'un noyau unique à chaque redémarrage système
KARL est déjà disponible en test
OpenBSD va embarquer une fonctionnalité permettant de disposer d'un noyau unique à chaque redémarrage système
KARL est déjà disponible en test
Le , par Stéphane le calme
Une erreur dans cette actualité ? Signalez-nous-la !