[SMACK] Un Mandatory Access Control simplifié

Page content

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 :

label

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.