PaX - Définition et Explications

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

Introduction

PaX a sa propre version de la mascotte de Linux, Tux

PaX est un correctif (patch) de sécurité pour le noyau Linux créé en 2000. Il utilise une approche qui permet aux programmes informatiques de faire seulement ce qu'ils ont à exécuter proprement, et rien de plus.

La protection de l'espace executable est un des mécanismes mis en œuvre. Ainsi chaque segment de la mémoire (D'une manière générale, la mémoire est le stockage de l'information. C'est aussi le souvenir d'une information.) peut être accédé soit en écriture, soit en exécution, mais jamais les deux.

Cela rend notamment l'exploitation des dépassements de tampon plus difficile à réaliser. Cette restriction, connue sous le nom de NX Bit, existait déjà auparavant au niveau matériel sur certaines architectures (Architectures est une série documentaire proposée par Frédéric Campain et Richard Copans, diffusé sur Arte depuis 1995.), mais PaX (PaX est un correctif (patch) de sécurité pour le noyau Linux créé en 2000. Il utilise une approche qui permet aux programmes informatiques de faire seulement ce qu'ils ont à exécuter proprement, et rien...) en est une implémentation (Le mot implantation peut avoir plusieurs significations :) logicielle. D'autres implantations de ce même système existent pour d'autres systèmes d'exploitation dont W^X pour OpenBSD (OpenBSD est un système d'exploitation libre de type Unix, dérivé de 4.4BSD. Créé en 1994 par Theo de Raadt, il est issu de la séparation avec NetBSD, le plus ancien des trois autres principaux...).

Les processeurs récents d'Intel et d'AMD (entre autres) disposent matériellement de ce NX Bit, mais il faut que le système d'exploitation le supporte pour qu'il soit utilisé.

L'autre mécanisme principal de PaX est de rendre aléatoire la valeur de certaines adresses mémoires.

Les développeurs

PaX est maintenu par The PaX Team (en français, L'Équipe PaX) ; le principal programmeur (En informatique, un développeur (ou programmeur) est un informaticien qui réalise du logiciel en créant des algorithmes et en les mettant en œuvre dans un langage de programmation.) de ce groupe est anonyme.

Les techniques utilisées par PaX

Protection de zones mémoires contenant du code exécutable

Par l'intermédiaire de PaX, les zones de code ne seront pas accessibles en écriture, ce qui permet de se protéger contre des interventions malicieuses tentant de les modifier. Cela est fait en utilisant (ou émulant) la fonctionnalité du NX Bit.

PAGEEXEC

PAGEEXEC est la première implémentation proposée pour implémenter le bit NX sur les architectures i386. Le bit supervisor surchargé pour émuler le comportement du bit NX. Cette implémentation repose sur le translation lookaside buffer (TLB), le cache utilisé par l'unité de gestion mémoire. Lors d'une tentative d'accès à une page protégée qui n'est pas encore dans le TLB, en exécution, une faute de protection est levée. Comme sur les processeurs récents le TLB est séparé en un cache pour les exécutions (ITLB) et un cache pour les données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un...) (DTLB), PaX peut déterminer si il s'agit d'une instruction (Une instruction est une forme d'information communiquée qui est à la fois une commande et une explication pour décrire l'action, le comportement, la méthode ou la tâche...), qui doit alors être interdite.

SEGMEXEC

SEGMEXEC émule le fonctionnement du bit NX sur les processeurs IA-32. Cela fonctionne en segmentant la mémoire en deux zone de 1.5 Go chacune. La zone basse (de 0 à 1.5 Go) contient les données non exécutables, c'est-à-dire les données mais aussi instructions (qui peuvent en effet vouloir être lues). La seconde ( Seconde est le féminin de l'adjectif second, qui vient immédiatement après le premier ou qui s'ajoute à quelque chose de nature identique. La...) zone, exécutable, en revanche ne contient que les instructions. Les mappings des deux segments pointent vers les mêmes zones de la mémoire physique (La physique (du grec φυσις, la nature) est étymologiquement la « science de la nature ». Dans un sens général et ancien, la physique désigne la...), ainsi la mémoire vive (La mémoire vive, mémoire système ou mémoire volatile, aussi appelée RAM de l'anglais Random Access Memory (que l'on traduit en français par 'mémoire à accès...) utilisée n'est pas doublée.

Lorsqu'une adresse (Les adresses forment une notion importante en communication, elles permettent à une entité de s'adresser à une autre parmi un ensemble d'entités. Pour qu'il n'y ait pas...) mémoire doit être exécutée, elle est traduite dans la zone contenant le code exécutable. Si le code n'est pas présent à l'adresse traduite, il s'agit alors d'une tentative d'exécution de code interdite, le programme est alors tué.

Restriction via mprotect()

Voir entre autres (en) mprotect

Trampoline emulation

Les trampolines implémentés par GCC sous la forme de petites portions de code généralement générés sur la pile lors du runtime. Cela nécessite donc de rendre exécutable la pile, ce qu'empêche PaX. Pour éviter que les programmes utilisant cette technique ne soient tués, PaX est capable d'identifier et d'autoriser leur utilisation.

Address space layout randomization

L'address space layout randomization consiste à rendre certaines adresses de la mémoire virtuelle (En informatique, le mécanisme de mémoire virtuelle a été mis au point dans les années 1960. Il est basé sur l'utilisation d'une mémoire de masse (type disque dur ou anciennement un tambour), dans...) aléatoires permettant de se prémunir contre l'exploitation de certaines failles (généralement de type dépassement (Un dépassement est le fait de rouler pendant un instant, en général relativement court, à côté d’un autre...) de tampon). Les parties du programmes qui seront placés à des adresses aléatoires sont en général la pile, le tas, la position des bibliothèques, …

Rendre aléatoire l'adresse de la pile

Pour éviter une utilisation aléatoire de la Pile d'appel d'un programme, PaX rend cette adresse aléatoire.

Rendre aléatoire l'adresse de base utilisé par mmap() base

Dans un système d'exploitation POSIX (POSIX est le nom d'une famille de standards définie depuis 1988 par l'IEEE et formellement désignée IEEE 1003. Ces standards ont émergé d'un projet de standardisation...), l'appel système (En informatique, un appel système est une fonction fournie par le noyau d'un système d'exploitation et utilisée par les programmes s'exécutant dans l'espace utilisateur (en d'autres termes, tous les...) mmap() mappe des fichiers ou des périphériques informatiques en mémoire. Rendre aléatoire l'adresse de base utilisée par mmap() permet de se protéger contre certaines exploitations de faille

Base ET_EXEC rendue aléatoire

Marquage des exécutables ELF

PaX permet à des fichiers exécutables au format ELF d'être marqué avec des permissions réduites via les outils chpax et paxctl. Ces marquages sont dans l'en-tête ELF et sont à la fois indépendants du système de fichier ( Un fichier est un endroit où sont rangées des fiches. Cela peut-être un meuble, une pièce, un bâtiment, une base de données informatique. Par exemple : fichier des patients d'un médecin, fichier des...) et de la partie Code objet (En informatique (développement), un fichier objet est un fichier intermédiaire intervenant dans le processus de compilation.) du fichier. L'outil (Un outil est un objet finalisé utilisé par un être vivant dans le but d'augmenter son efficacité naturelle dans l'action. Cette augmentation se...) chpax est obsolète et remplacé par paxctl.

PaX permet des marquages individuels pour PAGEEXEC et SEGMEXEC, de rendre aléatoire les adresses de base (Les périphériques ont parfois besoin d'échanger des informations avec le système, c'est pourquoi des adresses mémoire leur sont assignées pour l'envoi et la réception de données. Ces...) de la pile d'appel, du tas, de mmap(), …

Page générée en 0.009 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique