PROJET AUTOBLOG


Shaarli - Les discussions de Shaarli

Archivé

Site original : Shaarli - Les discussions de Shaarli du 23/07/2013

⇐ retour index

Bulletin d'actualité CERTFR-2015-ACT-019

mercredi 27 mai 2015 à 10:33
Liens 27/05/2015
"""
3 - Délégation de privilèges sous Linux

Sur un système Linux, il est courant de déléguer certains privilèges à des catégories d'utilisateurs en fonction de leur besoin. Par exemple, il est courant de donner la possibilité à des administrateurs réseau de lancer la commande tcpdump en root afin d'effectuer des diagnostics. Cette délégation est souvent effectuée au moyen de la commande sudo. Ainsi, il est fréquent de voir la ligne suivante dans le fichier /etc/sudoers :

NETWORK_ADM ALL=(root) /usr/sbin/tcpdump

Cette approche constitue une faille de sécurité : en effet, le programme tcpdump permet de lancer des commandes arbitraires avec l'option -z (notamment utilisée pour compresser des captures réseau). Rien n'empêche une personne malintentionnée d'utiliser le programme /bin/sh pour obtenir les privilèges root à partir de la commande sudo tcpdump.

Une approche alternative est d'utiliser les capabilities, ou capacités Linux. Elles permettent de diviser les privilèges root en sous-parties plus restreintes. Ainsi, la commande tcpdump n'a besoin que de la capacité CAP_NET_RAW pour écouter sur le réseau. Il est donc possible d'affecter cette capacité au programme tcpdump, qui pourra alors être exécuté sans les privilèges root : la vulnérabilité dans la configuration sudo qui permettait d'élever ses privilèges a donc été corrigée. Il reste cependant un dernier problème à résoudre : affecter la capacité au programme permet à tous les utilisateurs de lancer tcpdump. Il faut alors restreindre l'utilisation de cette capacité au groupe des administrateurs réseau. Une première approche consiste à retirer les permissions d'exécution à tous les utilisateurs, et à les affecter aux administrateurs via un groupe Unix standard. Une seconde consiste à ne pas restreindre les droits sur l'exécutable tcpdump, mais plutôt à limiter les capacités héritables par les utilisateurs.

Le module PAM pam_cap permet de gérer finement les capacités que chaque utilisateur peut obtenir. Le module pam_cap.so doit être activé pour les différents types de connexions (SSH, login, etc.), par l'ajout de la ligne suivante en début des fichiers adéquats situés sous /etc/pam.d/ :

auth required pam_cap.so

Le fichier /etc/security/capability.conf doit être édité pour indiquer quelle est la capacité dont peut hériter une liste d'utilisateurs ( il n'est malheureusement pas possible de définir un groupe). Il faut ensuite interdire l'héritage des capabilities pour tous les autres utilisateurs avec la directive none *.

cap_net_raw user1 user2 [...]
none *

Le binaire tcpdump doit enfin être marqué comme s'exécutant avec la capacité cap_net_raw :

1. setcap cap_net_raw=ei /usr/sbin/tcpdump

Le fonctionnement des capacités liées aux fichiers est similaire à celui des programmes setuid. Le module pam_cap permet simplement de placer une limite haute aux capacités qu'un utilisateur peut obtenir.

Lors de la mise à jour du paquet tcpdump, il est fort probable que les capacités du binaire soient modifiées. La dernière opération indiquée ci-dessus sera alors à réitérer.
"""
(Permalink)