Dans quelle mesure le SELinux est-il en mode «permissif»? De quoi devrais-je me méfier?

14

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.

j.d'oh
la source
Êtes-vous certain qu '"il n'y a aucun moyen de changer l'état de SELinux"? Avez-vous essayé d'émettre setenforce 1depuis l'émulateur de terminal (en tant que root)?
Marc.2377
Eh bien, je vais faire des recherches un peu plus à ce sujet, mais oui, je suis assez sûr en raison des instructions du créateur de ROM. Je suis un peu néophyte, donc je ne sais pas à 100% pourquoi (j'ai encore besoin de recherches), mais la raison indiquée est que le chargeur de démarrage est verrouillé ... forum.xda-developers.com/amazon-fire/orig-development/…
j.d'oh

Réponses:

12

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:

  • Les ressources comme les fichiers ont des propriétaires qui peuvent définir des droits d'accès sur les ressources qu'ils possèdent: cela leur permet de décider si une ressource particulière doit être privée (seul le propriétaire peut y accéder) ou si elle doit être partagée avec d'autres utilisateurs.
  • En plus de cela, vous avez le super-utilisateur (appelé rootsur 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:

  1. Que se passerait-il si un bogue dans un service fonctionnant tel que roottrouvé 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.
  2. Que se passerait-il si un utilisateur ne protégeait pas correctement les ressources privées? Ensuite, ces ressources pourraient être utilisées de manière malveillante (lues, peut-être même modifiées ou supprimées) par d'autres utilisateurs non privilégiés. C'est généralement ce que vous avez lorsqu'une application malveillante s'exécute sur votre téléphone (peu importe si vous avez été amené à l'installer, ou si elle est arrivée ici seule en utilisant un bogue dans une autre application non privilégiée, un navigateur ou un client de messagerie pour par exemple), et cette application malveillante essaie d'accéder directement aux données d'autres applications ou à des emplacements de stockage (elle peut le faire pour accéder à des données normalement inaccessibles ou pour s'installer à plusieurs endroits afin de rendre sa suppression plus difficile).

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:

  1. Comme je l'ai dit, cette politique s'applique également aux utilisateurs privilégiés. Cela signifie qu'avec une politique correctement conçue, un service conçu pour gérer la configuration réseau de l'appareil ne pourra rien faire d'autre: il n'aura pas accès aux SMS par exemple, et un service gérant les SMS n'aura pas accès à la configuration réseau , et aucun d'entre eux n'aura accès aux données de l'utilisateur, malgré le fait que les deux s'exécutent à l'aide du compte de super-utilisateur.
  2. Android a récemment inclus une fonctionnalité multi-utilisateurs qui est appliquée par SELinux, empêchant tout utilisateur d'accéder aux données d'un autre utilisateur. Mais au-delà de cela, la politique SELinux est également responsable de la description du comportement des applications autorisées, et très probablement même si certaines ressources ne sont pas correctement protégées à l'aide du système DAC SELinux viendra à la rescousse et empêchera toujours l'application malveillante d'y accéder directement.

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 ( dmesgau moins, mais généralement ils sont également copiés dans logcat: 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 :

type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace" 
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t 
tcontext=system_u:object_r:sysfs_t tclass=file

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;).

WhiteWinterWolf
la source
@ j.d'oh: Les commentaires ne sont pas pour une discussion approfondie, j'ai créé une nouvelle salle de chat pour essayer de répondre à vos questions.
WhiteWinterWolf