Fin mai dernier, Poisson Sean, un chercheur en sécurité cinformations partagées etn son blog sur une méthode qu’il a trouvée pour contourner le module de sécurité SELinux.
Dans son article de blog, cIl a partagé une démonstration de la façon dont il est possible de contourner l’interdiction de charger des modules du noyau, implémenté dans des règles SELinux spécifiques sur l’un des appareils étudiés (il n’est pas précisé de quel appareil il s’agit et dans quelle mesure le problème affecte les règles SELinux dans le micrologiciel et les distributions).
Pour ceux qui ne connaissent pas SELinux (Security Enhanced Linux) doit savoir que cet eC’est un module de sécurité pour le noyau Linux, ce qui améliore la sécurité du système et, en cas de faille de sécurité, l’empêche de se propager dans tout le système.
SELinux fonctionne en trois modes ; “Désactiver, permissif et application.” En mode Désactiver, SELinux reste complètement désactivé. Si SELinux est activé, il sera en mode permissif ou en mode exécuteur. En mode permissif, SELinux ne surveillera que l’interaction. En mode application, SELinux filtrera également l’interaction avec la surveillance.
Sa rigidité de sécurité peut être comprise du fait qu’avec SELinux, même si le système est compromis, les fichiers auxquels l’accès n’est pas autorisé ne sont pas accessibles.
Ayant déjà expliqué très superficiellement SELinux, à propos du bypass Sean Pesce mentionne que le blocage des modules dans les règles SELinux impliquées repose sur la restriction de l’accès à l’appel système fini_modulequi permet de charger un module à partir d’un fichier et est utilisé dans des utilitaires comme insmod.
J’ai récemment envisagé un appareil basé sur Linux non divulgué en tant que projet parallèle personnel du week-end. En utilisant des techniques simples dont je ne parlerai pas ici, j’ai obtenu un accès root au shell. Pour éviter de révéler des détails inutiles sur l’implémentation cible, des informations telles que les noms de fichiers et les contextes SELinux ont été modifiées dans l’article.
Il est mentionné que en tant que tel, il n’est pas nécessairement obligatoire de désactiver SELinux, mais pour éviter de nombreuses complications, un module de noyau personnalisé est chargé “serait le mieux”. Mais pas dans ce cas, car pour le contourner, il partage que je décide d’abord de cloner l’un des modules du noyau existants à partir du système de fichiers de l’appareil à l’aide d’un script et qui est patché dans la fonction module_init qui peut également être utilisée pour charger directement les modules du noyau à partir d’un tampon en mémoire.
En me connectant avec mon shell inversé, j’ai rapidement réalisé que le système avait activé SELinux. Bien que la politique ne soit pas aussi stricte que la politique standard que vous pourriez trouver sur un appareil Android typique, elle était suffisamment stricte pour m’empêcher de faire beaucoup de choses utiles (par exemple, monter des systèmes de fichiers et accéder à des fichiers dans /etc/ ) . Heureusement, j’ai pu écrire et exécuter des fichiers dans /tmp/ , donc j’avais toujours un moyen simple de créer et d’exécuter des outils personnalisés.
Il mentionne en outre qu’il existe deux appels système différents qui peuvent être utilisés pour charger un module du noyau : int init_module qui charge un module du noyau stocké en mémoire, tandis que entier fini_module charge un module du noyau à partir du disque.
Avec cela, on profite de la possibilité de charger des modules du noyau, qui peuvent être compilés en tant que modules personnalisés pour faire quelque chose de plus avancé et avec les configurations nécessaires, une exécution réussie du noyau avec accès à l’espace utilisateur peut être obtenue.
Le contexte SELinux n’est pas supprimé ; nous passons plutôt au contexte de la tâche de démarrage (d’une manière générale, ce contexte a probablement très peu de restrictions, voire aucune).
Pour montrer la méthode, un prototype fonctionnel a été préparé qui permet d’exécuter du code au niveau du noyau en chargeant son module et en désactivant complètement la protection SELinux, si vous avez un accès root limité au système utilisant SELinux.
Enfin, si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans la publication originale au lien suivant.