Publication de LKRG 1.0.0 pour protéger contre l'exploitation des vulnérabilités dans le noyau Linux

Le projet Openwall a publié le module noyau LKRG 1.0.0 (Linux Kernel Runtime Guard), destiné à vérifier l'intégrité des structures du noyau et à détecter les tentatives d'exploitation de vulnérabilités dans le noyau. Il est noté que l'attribution du numéro de version 1.0.0 a marqué l'atteinte d'un état mature pour le projet. Le code du projet est distribué sous la licence GPLv2.

Le module est adapté à la fois pour la protection contre les attaques, manipulant déjà des vulnérabilités connues dans le noyau Linux, ainsi que pour contrer des exploits utilisant encore des vulnérabilités inconnues, si des mesures spéciales ne sont pas prises pour contourner LKRG. La protection repose sur la détection de modifications non autorisées dans le noyau en cours d'exécution (vérification de l'intégrité) et le suivi des changements de privilÚges des processus utilisateur (détection d'exploitation).

La vérification de l'intégrité est effectuée sur la base de la comparaison des hachages calculés pour les zones de mémoire et les structures de données les plus importantes du noyau, telles que l'IDT (Interrupt Descriptor Table), MSR, les tables d'appels systÚme, toutes les procédures et fonctions, les gestionnaires d'interruptions, les listes de modules chargés, le contenu de la section « .text » des modules et les attributs des processus. La procédure de vérification est activée périodiquement par un minuteur ou lors de l'apparition de certains événements dans le noyau, par exemple, lors de l'exécution des appels systÚme setuid, setreuid, fork, exit, execve, et do_init_module.

La détection d'une éventuelle exploitation et le blocage des attaques se font avant que le noyau ne donne accÚs aux ressources (par exemple, avant l'ouverture d'un fichier), mais aprÚs que le processus a obtenu des privilÚges non autorisés (par exemple, changement d'UID). Lorsqu'un comportement non autorisé des processus est détecté, leur terminaison forcée est effectuée, ce qui est suffisant pour bloquer de nombreux exploits. Les frais généraux liés au fonctionnement du module sont estimés à 2-2,5%.

Le fonctionnement est pris en charge sur des systĂšmes avec des architectures x86-64, AArch64 (ARM64), ARM32 et x86. Le fonctionnement de LKRG 1.0.0 a Ă©tĂ© testĂ© avec des noyaux provenant de diffĂ©rentes distributions, Ă  partir du noyau 3.10 de RHEL/CentOS 7 jusqu'Ă  6.17-rc4 du rĂ©fĂ©rentiel dans lequel la prĂ©paration de la version Fedora 44 est en cours. Des paquets sont disponibles pour les distributions ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto et OpenBMC. Les paquets construits pour Rocky Linux peuvent ĂȘtre utilisĂ©s dans RHEL 8/9 et dans des distributions dĂ©rivĂ©es, telles qu'AlmaLinux 8/9, tandis que les paquets pour Whonix sont disponibles sous Debian et Ubuntu.

Parmi les changements dans la nouvelle version :

  • La compatibilitĂ© avec les noyaux Linux est assurĂ©e jusqu'Ă  la version 6.17-rc4.
  • Lorsque utilisĂ© avec des noyaux Ă  partir de la version 6.13, l'interception des appels distants override_creds() et revert_creds() a Ă©tĂ© interrompue, ce qui a limitĂ© la dĂ©tection des attaques contournant le pointeur cred. Des mesures compensatoires ont Ă©tĂ© ajoutĂ©es Ă  d'autres endroits du noyau pour pallier ces limitations.
  • Le suivi inutile des informations d'identification, pour lesquelles l'intĂ©gritĂ© n'est pas vĂ©rifiĂ©e, a Ă©tĂ© interrompu. Ce changement a permis de rĂ©duire la base de code d'environ 1500 lignes.
  • Le support du mĂ©canisme introduit dans le noyau Linux 6.10 pour la crĂ©ation de fichiers temporaires dans le systĂšme de fichiers OverlayFS, utilisant l'option O_TMPFILE (ovl_tmpfile), a Ă©tĂ© ajoutĂ©. Ce support est nĂ©cessaire pour Ă©viter les faux positifs apparus lors de l'utilisation de conteneurs isolĂ©s sur des systĂšmes avec des noyaux 6.10-6.12.
  • Pour les systĂšmes x86_64, le support de la technologie Intel CET (Control-flow Enforcement Technology) a Ă©tĂ© ajoutĂ© pour protĂ©ger le code exĂ©cutable en utilisant les instructions IBT (indirect branch tracking), ainsi que la protection logicielle kCFI (kernel Control Flow Integrity) pour bloquer la violation de l'ordre d'exĂ©cution normal (control flow) due Ă  des exploits modifiant les pointeurs de fonction en mĂ©moire.
  • Pour la connexion de nombreux gestionnaires, le mĂ©canisme kprobes a Ă©tĂ© utilisĂ© au lieu de kretprobes, simplifiant le code d'installation des hooks et permettant d'obtenir de meilleures performances.
  • Le fonctionnement avec les verrous (lock) de donnĂ©es spĂ©cifiques au processus (per-task shadow data) a Ă©tĂ© retravaillĂ©. GrĂące Ă  l'Ă©limination des verrous superflus, la performance d'accĂšs Ă  ces donnĂ©es a Ă©tĂ© amĂ©liorĂ©e.
  • Des bogues ayant conduit Ă  des conditions de course, des problĂšmes d'intĂ©gritĂ© et des faux positifs ont Ă©tĂ© corrigĂ©s.
  • Le support de la compilation utilisant Clang a Ă©tĂ© amĂ©liorĂ©.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster