[SMACK] Un Mandatory Access Control simplifié
Qu’est ce que SMACK ?
Mandatory Access Control
Simple Mandatory Access Control Kernel est un mandatory access control, qui permet d’améliorer la sécurité d’un système. La particularité de celui-ci est que la politique de sécurité est gérée au niveau du système et ne laisse pas à l’utilisateur la gestion des droits sur ses fichiers. Ils utilisent l’infrastructure Linux Security Modules (LSM) du noyau Linux.
Il est important de retenir que les mandatory access control sont appelés après plusieurs étapes. (https://www.linux.com/tutorials/overview-linux-kernel-security-features/). Si une erreur arrive avant, il est donc normal de ne pas avoir d’entrée dans les journaux.
Les journaux SMACK sont disponibles dans le fichier suivant :
$ tail -f /var/log/audit/audit.log
Voici un schéma pour résumer :
Politique de sécurité
La politique de sécurité permet d’autoriser des sujets
(processus) à effectuer des actions sur des objets
(fichier, socket).
Ces autorisations sont stockées dans des fichiers dans le dossier /etc/smack/accesses.d/
.
Il faut redémarrer le système pour que les règles contenues dans le dossier soient prises en compte.
Comment ça fonctionne ?
Labels
SMACK utilise des labels. Chaque ressource (fichier, socket, processus) en a un.
Un label est composé de 255 caractères ASCII au maximum et est sensible à la casse.
Fichiers
Lire le label d’un fichier
Pour récupérer le label d’un fichier, on peut utiliser les deux commandes suivantes :
$ getfattr -dm "SMACK*" /var/local/lib/afm/applications/agl-service-can-low-level
# file: /var/local/lib/afm/applications/agl-service-can-low-level/
security.SMACK64="App:agl-service-can-low-level"
$ ls -Z /var/local/lib/afm/applications/
App:agl-service-can-low-level agl-service-can-low-level
Changer le label d’un fichier
Pour modifier le label d’un fichier, on peut utiliser les commandes suivantes :
$ chsmack -a label file
$ attr -S -s SMACK64 -V "label" file
Processus
Lire le label d’un processus
Pour récupérer le label d’un processus, on peut utiliser la commande suivante :
# ps -Z 512
LABEL PID TTY STAT TIME COMMAND
System 512 ? Ssl 0:00 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
Règles
Il existe plusieurs règles et labels par défaut dans SMACK.
On pourrait les résumer au tableau suivant :
Label | Requested by | Requested on |
---|---|---|
_ (floor) | PERMITTED | |
^ (hat) | PERMITTED | |
* (star) | DENIED |
Toutes les requêtes entre deux labels identiques sont autorisées
On peut ensuite venir ajouter de nouvelles règles dans le dossier /etc/smack/accesses.d/
.
On peut stocker ces règles dans un ou plusieurs fichiers.
Une règle s’écrit sous la forme suivante :
Label_du_sujet Label_de_l_objet Autorisations
Il existe différentes autorisations :
- read (r)
- write (w)
- execute (x)
- append (a)
- transmute (t)
- lock (l)
Si on veut autoriser le label admin
à lire et exécuter un fichier avec le label secret
. On peut créer dans accesses.d
le fichier suivant :
# vim /etc/smack/accesses.d/regles_admin
admin secret rx
Il faut redémarrer le système pour que les règles soient prises en compte.
Il est possible de venir charger directement cette règle dans la politique avec la commande smackload
:
echo "admin secret rx" > smackload
Il est essentiel de stocker les règles dans le dossier
accesses.d
sinon elles seront perdues au redémarrage.