Capabilities

Niveau : Star Star Star Empty Empty
Résumé : setcap ; getcap ; getpcaps

Sous linux la gestion des droits des processus est héritée de posix et donc extrêmement simple.

Si on exclut les modules de sécurité comme SELinux, il n'y a que deux systèmes. Seul le premier est véritablement connu.

Les droits unix

Un processus porte en lui-même 2 informations associées à ses droits : un utilisateur et un groupe. Ceux-ci permettent de déterminer ses actions possibles sur les fichiers (donc partout puisque tout est fichier) avec les attributs correspondants.

Malheureusement tout n'est pas fichier, pour le reste il existe une distinction entre les processus d'uid 0 (root) et les autres. Cette distinction donne des droits supplémentaires au processus root lors de ses appels système, par exemple l'écoute sur un port inférieur à 1024 ou la possibilité de redémarrer une machine.

Ces droits sont hérités d'un processus à un autre sauf dans 2 cas :

  • un fichier exécuté a le bit suid alors on change l'uid du processus (augmentation des droits en général vers root)
  • le processus a l'uid root et demande à en changer (réduction des droits, par exemple pour login)

Les capabilities

C'est ici que ça devient intéressant. Sous linux, un processus dispose aussi d'un ensemble de droits spécifiques que peu de gens connaissent.

En supposant que votre noyau soit compilé pour (c'est en général le cas), il associera à chaque processus (pour être précis, chaque thread) un champ de bits lui listant ses droits (dont celui de garder le silence). Ce champ est hérité d'un processus à un autre et, miracle, il peut être associé à un fichier exécutable comme le bit suid.

Le concept est donc le même que pour le couple utilisateur/groupe. Ces droits peuvent changer dans les cas suivants :

  • un fichier exécuté a un ensemble de capabilities associé sur le filesystem alors on lui donne les droits associés (augmentation des droits)
  • le processus a des droits demande à ne plus les avoir (réduction des droits)
  • un processus fils est créé et les droits ne sont pas héritables (non transmission des droits)
  • le processus demande des droits supplémentaires qui sont autorisés mais non effectifs

Quels sont ces droits ?

En pratique ces droits ne sont qu'une subdivision des droits de root. Un découpage du bit suid si vous préférez.

On peut en trouver une petite liste dans man 7 capabilities

Comment qu'on fait ?

3 outils sont importants pour travailler avec les capabilities :

  • getcap : lire les capabilities d'un binaire
  • setcap : modifier les capabilities d'un binaire
  • getpcaps : lire les capabilities d'un processus qui tourne

A quoi ça sert ?

Ça sert à ne plus donner les droits root à un programme qui veut juste pouvoir faire un ping. C'est-à-dire qu'il est maintenant possible de réduire les autorisations données à un programme et donc sa sensibilité.

Après une vérification de vos binaires, vous pouvez donc avoir une installation pour laquelle plus aucun binaire n'est suid root !

Vous pouvez créer un logiciel ayant besoin d'une fonction qui n'est accessible que par root et ne lui donner que les droits nécessaires, et ainsi limiter l'impact sur vos utilisateurs en cas de faille.

Dans ma distribution préférée pour quand ?

Je ne peux pas vous répondre, les capabilities existent dans le noyau depuis très longtemps et pourtant les distribution ne semblent pas pressées de s'y convertir (en fait c'est prévu pour fedora, comme quoi mes articles sont d'actualité :-).

Il y a deux explications possibles. La première c'est qu'un noyau n'a pas nécessairement le support des capabilities, ce qui risque de limiter fortement le fonctionnement de la distribution si un utilisateur devait booter sur un tel noyau (mais bon c'est déjà le cas pour d'autres fonctionnalités).

La deuxième c'est que le système de capabilities est un peu plus compliqué que je l'ai décrit. En effet, les capabilities peuvent être "permitted", "inherited" ou "effective" ou une combinaison des 3. Et là c'est l'erreur bête, commune aux outils de sécurité, on complexifie les choses sans apporter beaucoup de valeur ajoutée. Un simple héritage aurait permis à tout un chacun de comprendre et mettre en place des capabilities ...

Tags:,
Vus : 928
Publié par Peck : 100