J'ai installé une certaine ROM fournie avec SELinux en mode "Permissif". C'est la seule (bonne) ROM qui s'adapte correctement à mon appareil et il n'y a aucun moyen de changer l'état de SELinux.
Maintenant, je ne sais pas vraiment quelles sont les conséquences d'une telle décision et je serais heureux si quelqu'un pouvait me l'expliquer (je l'ai googlé et je sais ce que c'est théoriquement ... tout simplement pas dans la pratique). Ladite ROM a sa racine sur "désactivé", donc l'appareil est censé ne pas être raciné, mais comment cela correspond-il au SELinux, je ne suis pas sûr.
setenforce 1
depuis l'émulateur de terminal (en tant que root)?Réponses:
TL; DR: N'hésitez pas à passer directement à la conclusion en bas si vous le souhaitez :)!
L'objectif de SELinux est d'empêcher l'escalade de privilèges en appliquant une politique obligatoire qui restreint les actions possibles des utilisateurs non privilégiés et privilégiés.
Le terme "utilisateurs" ici inclut également tout processus en cours d'exécution sur l'appareil, qu'il soit directement lié aux actions physiques de l'utilisateur (l'humain, vous;)), car chaque processus s'exécute à l'aide d'un compte "utilisateur" du système.
Historiquement, les autorisations sur les systèmes basés sur Unix sont gérées à l'aide de ce qu'on appelle un système de contrôle d'accès discrétionnaire (DAC). Dans ce modèle:
root
sur les systèmes basés sur Unix) qui est l'utilisateur administratif et a accès à tout sur le système. Ce compte peut être utilisé de manière interactive par un humain (généralement un administrateur système) pour entretenir ou réparer le périphérique, mais généralement ce compte sera principalement utilisé par les services d'arrière-plan ou de bas niveau qui nécessitent un tel niveau de privilège: pilotes de périphérique, services de configuration réseau, services besoin d'accéder aux fichiers de tous les utilisateurs ou de gérer la communication interne entre les utilisateurs.C'est très agréable et offre déjà une bonne sécurité. Cependant, qu'en est-il des circonstances telles que celles-ci:
root
trouvé permettait à un attaquant de tromper un tel service pour exécuter du code arbitraire? Un tel attaquant aurait un accès complet à l'appareil. Pour donner des exemples concrets, un tel bogue peut être déclenché en envoyant des informations de configuration réseau ( DHCP ) spécialement conçues ou un MMS au téléphone.Voici SELinux.
SELinux est un système de contrôle d'accès obligatoire (MAC). Alors que dans le système DAC décrit précédemment, les utilisateurs étaient responsables de définir les droits appropriés sur leurs propres ressources, avec un système MAC, une stratégie à l'échelle du système (fournie avec le système d'exploitation) est appliquée aux utilisateurs privilégiés et non privilégiés.
Cela résout les deux problèmes mentionnés ci-dessus des manières suivantes:
Les systèmes DAC et MAC ne s'excluent pas mutuellement, au contraire le système MAC (SELinux) agit comme une deuxième couche de défense derrière le système DAC (les autorisations traditionnelles de type Unix). La tâche de SELinux est de bloquer toute activité contraire à la politique qui, étant donné uniquement le système DAC, serait autrement acceptée.
La chose délicate est qu'une telle politique peut être très complexe à écrire: elle doit en effet couvrir les composants de chaque appareil pour chaque utilisation possible dans chaque situation. En fait, peu importe si une action peut être légitime dans votre situation: si elle n'est pas dans la politique, elle est interdite . Des politiques mal conçues peuvent donc avoir des conséquences aléatoires, comme des plantages d'applications, des fonctionnalités inutilisables, etc.
C'est pourquoi les premières versions d'Android embarquant SELinux l'incluaient en mode "Permissif" par défaut. Dans ce mode, SELinux enregistrera les violations de stratégie, mais il ne tentera pas de bloquer l'activité associée. En analysant les fichiers journaux résultants, il devient possible de corriger et d'améliorer la stratégie jusqu'au point où les seules violations de stratégie restantes sont en effet des comportements malveillants ou indésirables. À ce stade, SELinux peut être transformé en mode "Enforcing": il enregistrera désormais non seulement mais bloquera également chaque action incriminée.
Conclusion
SELinux est une technique d'atténuation. Cela n'empêche pas les attaquants d'entrer dans votre téléphone, mais il garantit qu'une fois sur place, ils peuvent faire le moins de choses possible, idéalement rien d'utile, supprimant ainsi tout intérêt d'attaquer le téléphone en premier lieu.
Plus la ROM est ancienne, plus le nombre de bogues de sécurité susceptibles d'ouvrir un tel accès est élevé. SELinux serait un moyen efficace de maintenir un minimum de sécurité malgré ces vulnérabilités connues, mais pour fonctionner correctement, SELinux s'appuie sur une politique complexe.
Si votre ROM est fournie avec SELinux en mode "Permissif" par défaut, cela signifie probablement que la politique qu'elle contient n'est pas suffisamment fiable pour être commutée en toute sécurité en mode "Enforcing".
Si vous êtes assez technicien et avez accès au journal téléphonique (
dmesg
au moins, mais généralement ils sont également copiés danslogcat
: il existe des applications permettant de voir cette dernière mais en fonction de votre version Android, elles peuvent nécessiter un accès root), vous pouvez vérifier si vous trouvez des entrées "avc": ce sont des messages vous indiquant que SELinux vient de détecter une action contraire à la politique.Voici un exemple d'une telle entrée tirée du site Web de CyanogenMod :
S'il n'y en a pas, juste quelques-uns ou pour quelque raison que ce soit qui pourrait vous empêcher d'utiliser le téléphone, vous pouvez essayer de faire passer SELinux en mode "Enforcing". Dans les anciennes ROM CyanogenMod, c'était facile et possible simplement en utilisant une option cachée dans l'interface graphique (pas besoin de rooter le téléphone ou d'installer une application spécifique), je ne sais pas si d'autres ROMs offraient la même fonctionnalité mais puisque vous avez utilisé le CyanogenMod tag je suppose que vous avez peut-être de la chance;).
la source