2 points par GN⁺ 2024-10-27 | 1 commentaires | Partager sur WhatsApp

Analyse approfondie du nouveau appel système mseal de Linux

  • mseal est un nouvel appel système introduit dans le noyau Linux 6.10, qui fournit une fonctionnalité de « scellement de mémoire » pour la protection de la mémoire.
  • Cet appel système rend immuables des zones mémoire pendant l’exécution d’un programme afin d’empêcher un attaquant de modifier les permissions mémoire ou de manipuler l’agencement de la mémoire de manière illicite.
  • mseal vise à empêcher l’exécution de code par des attaquants distants, contrairement à memfd_create et memfd_secret, qui servent à se défendre contre des attaquants locaux visant des données sensibles stockées en mémoire.

Fonctionnement de mseal

  • La signature de fonction de mseal est simple : elle reçoit une adresse de départ et une longueur, puis scelle la zone mémoire correspondante.
  • La fonction do_mseal verrouille la zone mémoire, puis check_mm_seal et apply_mm_seal vérifient la validité de la zone avant d’appliquer le scellement.
  • Une zone mémoire scellée ne peut plus voir ses permissions modifiées, être démontée ou redimensionnée via des appels système comme mprotect, munmap ou mremap.

Techniques d’attaque contrées par mseal

  • Renforcement de NX : mseal empêche de modifier les permissions d’exécution d’une VMA, ce qui bloque les attaques fondées sur le shellcode.
  • Atténuation des attaques data-only basées sur l’unmapping : mseal empêche la libération arbitraire et le remappage d’une zone mémoire, ce qui bloque les attaques data-only.

Renforcement logiciel avec mseal

  • mseal permet de renforcer la sécurité en scellant certaines zones mémoire d’un logiciel.
  • Les développeurs peuvent utiliser mseal pour sceller sélectivement des zones mémoire susceptibles de contenir des données non fiables.
  • À mesure que l’intégration avec glibc progresse, une fonctionnalité de scellement automatique pourrait être ajoutée.

Résumé de GN⁺

  • mseal est une nouvelle fonctionnalité de sécurité introduite dans le noyau Linux, qui scelle des zones mémoire afin d’empêcher l’exécution de code par des attaquants distants.
  • Contrairement aux mécanismes existants de protection mémoire, cet appel système empêche les changements de permissions mémoire et l’unmapping, ce qui bloque les attaques data-only.
  • L’introduction de mseal joue un rôle important dans le renforcement de la sécurité logicielle, et davantage de cas d’usage sont attendus via son intégration à glibc.
  • Parmi les projets offrant des fonctionnalités similaires figurent memfd_create et memfd_secret, dédiés à la protection de la mémoire.

1 commentaires

 
GN⁺ 2024-10-27
Commentaire Hacker News
  • Dans la liste de diffusion du noyau, il a été fait mention d’un « débat houleux ». Un commentaire se demande si un initié pourrait résumer les objections et les inquiétudes. La liste de diffusion a tendance à être évitée parce qu’elle est trop intense

    • Le mécanisme lui-même semble raisonnable, mais il est surprenant qu’il n’existe pas déjà dans le noyau
  • Chrome veut cet appel, mais comme un attaquant peut remapper avec d’autres flags, il ne peut pas déverrouiller des pages scellées

    • Cela signifie qu’il ne peut pas être utilisé pour des pages allouées à l’exécution, et donc qu’il est inutilisable à moins d’avoir l’intention de les conserver pendant toute la durée de vie du processus
    • La question est posée de savoir si cela signifie qu’il ne peut pas être utilisé pour de la mémoire comme un sandbox JS
    • N’étant pas familier avec la façon dont Chrome gère sa mémoire et ses processus, l’auteur n’est pas certain de comprendre pourquoi ce n’est pas un problème
  • Un lien vers l’article sur mseal() et ses suites est fourni

  • Une certaine tristesse est exprimée face au fait que, bien que les architectures modernes (x86_64) disposent de nombreuses fonctionnalités favorisant une programmation sûre, les systèmes d’exploitation doivent tout de même implémenter ce type d’appel

    • Les tentatives de corriger d’anciens systèmes freinent les progrès de l’informatique et mettent des milliards de personnes en danger
    • Il existe bien des bugs d’architecture, mais les logiciels n’exploitent pas correctement les capacités actuelles
  • Une question est posée sur la possibilité de neutraliser l’appel système mseal avec une astuce LD_PRELOAD

  • Le prototype de mseal() dans l’article n’est pas syntaxiquement correct. Le premier argument devrait être unsigned long start_addr et non unsigned start addr

  • OpenBSD dispose de cette fonctionnalité depuis longtemps. La question est posée de savoir pourquoi elle n’arrive que maintenant sur Linux