Introduction.
Avant de transformer votre ordinateur en forteresse, pensez à ce que vous voulez vraiment. Sachez que chaque système de sécurité est restreignant, et tout spécialement : un système de sécurité très sur est bien entendu très restreignant. Vous êtes prévenus! Sachez aussi que des vérifications additionnelles d'autorisation rendent plus lent votre noyau, et des méthodes comme le safe_delete (deletion sure) rendent votre système en général plus lent lors des deletions.
La distribution des permissions pour la bonne administration d'un système est une chose difficile. Unix tradionnellement définit un super utilisateur (root) pour s'occuper de tout les aspects du système. Bien entendu c'est là qu'est le maillon le plus faible de la chaîne de sécurité. Maintenant avec RSBAC, vous pouvez avoir séparément un administrateur et un officier de sécurité. L'un et l'autre n'ont pas les même fonctions, et donc doivent travailler en coopération pour administrer le système. L'administrateur système peut toujours faire son travail sur le système, changer quelques fichiers de configuration, ajouter ou enlever un utilisateur, limiter les ressources systèmes par utilisateur. L'officier de sécurité quant à lui peut limiter l'accès à tous les autres utilisateurs (et même l'administrateur système) aux données, en incluant les données système. Par exemple, l'administrateur peut ajouter ou enlever des utilisateurs, mais ne peut pas modifier manuellement le fichier /etc/passwd et le fichier /etc/shadow si il n'y est pas autorisé par l'officier de sécurité.
ATTENTION !! Soyez particulièrement prudent dans vos changements, vous pourriez par erreur vous interdire tout accès à votre propre système, à tel point que même un redémarrage en mode single n'y changerai rien. Dans ce cas là, la seule chose qui peut vous sauver serait un noyau de maintenance, nous verrons ensuite comment en créer un, ou alors de redémarrer avec un noyau Linux traditionnel.
Donc si vous n'avez pas peur du changement ni peur du risque, allez-y ! Sinon, restez fidèle au système de sécurité classique d'Unix...
Création du noyau.
Rapatriez la dernière version de RSBAC (http://www.rsbac.org/). Vous avez besoin de 2 archives: rsbac-current-version.tar.gz et rsbac-admin-current-versions.tar.gz. Prenez soin de bien prendre la même version pour les 2 archives, sans cela, ça ne fonctionnerai pas. La première archive contient le patch du noyau avec le code principal de RSBAC, quant à la seconde elle contient les utilitaires d'administration correspondants.
Ensuite, créez un nouvel utilisateur, "secoff" avec l'UID 400. Plus tard, pendant le premier redémarrage système, ce compte va automatiquement devenir Officier de Sécurité.
Desarchivez le noyau dans /usr/src/linux, desarchivez rsbac-current-version.tar.gz
dans le même répertoire et appliquez le patch de RSBAC au
noyau :
patch -p1 < patch-kernel-version.
Ce patch redirige la plupart des appels systèmes traditionnels
(open(), fork() etc...) vers leur correspondant en RSBAC.
RSBAC va alors vérifier si l'appel est autorisé ou non.
Et ensuite le véritable appel système effectué ou
non. Vous pouvez rapatrier le patch correspondant à votre noyau
sur http://www.rsbac.org/ dans le répertoire
Patch.
Ensuite 'make menuconfig' et voyez apparaître le choix "Rule Set Based Access Control (RSBAC)" (Contrôle d'Accès, Base sur des Règles). Bienvenu à RSBAC !
Configurez votre noyau comme à l'habitude et ensuite entrez dans le menu dédié à RSBAC. Sélectionnez le modules suivants :
Vous devriez sélectionner ces modules et déselectionner tous les autres. Soyez certain que pour tous les modules sélectionnes, vous avez sélectionné aussi "NOM-DU-MODULE protection for AUTH" et surtout pas "NOM-DU-MODULE protection by role", sans quoi votre système serait inutilisable.
Maintenant il ne reste plus qu'à compiler et à installer les utilitaires d'administration. Desarchivez rsbac-admin-*-*.tar.gz dans n'importe quel répertoire. Ensuite compilez et installez les utilitaires ('make all install'). Vous aurez probablement à changer le paramètre KERNELDIR pour refléter le répertoire dans lequel à été installé votre arbre source du noyau). Quand vous installez les utilitaires, un répertoire /rsbac est crée. C'est la base de données d'accès. RSBAC s'en servira pour noter toutes vos règles. Quand vous perdez tout accès au système, vous pouvez simplement effacer tous les fichiers de ce répertoire mis à part le fichier useraci (vous devez faire ça en utilisant un noyau Linux standard).
Donc maintenant vous avez le noyau et les utilitaires. On peut continuer. Après le premier redémarrage système, des services ne marcherons pas, et tout le monde va vous engueuler. Ne vous en faites pas, tout va bien. Puisque l'on limite l'accès au ressources système, c'est normal que quelques services ne fonctionnent plus. Nous allons changer quelques permissions et tout ira bien. Tout d'abord, nous devons nous connecter en tant qu'Officier de Sécurité. Le premier moyen est de redémarrer la machine en passant un paramètre au noyau 'rsbac_auth_enable_login' (ajoutez ce paramètre uniquement la première fois!).
La seconde manière est de redémarrer en utilisant un noyau
de maintenance, de se loguer dans le système en tant que root et
de taper la commande:
attr_set_fd FILE auth_may_setuid /bin/login
(cette commande autorise le programme /bin/login à changer de
UID pour refléter l'UID de l'utilisateur qui se connecte, sans ça,
/usr/bin/login ne laisserai se loguer personne d'autre que root).
Après cela, vous pouvez redémarrez votre système, login en tant qu'Officier de Sécurité, et courrez à la bibliothèque lire la théorie des différents modèles de sécurité.
Feb 25 12:58:13 stas kernel: rsbac_adf_request(): request CHANGE_OWNER, caller_pid 77, caller_prog_name portmap, caller_uid 0, target-type PROCESS, tid 77, attr owner, value 1, result NOT_GRANTED by AUTH
Ce message nous explique que le processus 'portmap' avec le UID 0 a essayé de changer son UID pour devenir 1 et que le module AUTH a rejetté la requête. Et bien nous pouvons dire à RSBAC que portmap a le droit de faire ça en ajoutant par exemple l'UID 1 à sa liste de capabilités.
Loguez vous en secoff (notre Officier de Sécurité) et lancez le menu d'administration principal"rsbac_menu". Allez dans "File/Dir Attributes menu", êtes vous prêt pour la grosse liste de permissions que vous allez voir ? C'est le résultat du fait que RSBAC est modulaire. Chaque module (chaque modèle de sécurité) à ses propre définitions de permissions à différents niveaux.
Au travail ! Sélectionnez le fichier portmap en utilisant le menu "File/Dir List : Choose from listing of last dir". Ensuite sélectionnez "auth_capabilities" et ensuite ajoutez l'UID 1. Maintenant le programme portmap va être capable de changer son UID pour devenir 1, mais pas 6 ni autre chose ! Maintenant portmap ne se plaindra plus de ce problème au prochain démarrage.
Utilisez cette méthode pour corriger tous les autres erreurs similaires. Comme le montre mon expérience, après ce petit travail, le système fonctionnera comme avant.
Le module AUTH est très puissant, mais pourtant très
simple. Les autres modules ne sont pas aussi simple à comprendre.
Par exemple, le module MAC réalise le modèle de sécurité
offert par Bella et LaPadulla pour le système d'exploitation Multics.
Mais tout d'abord essayons de nous familiariser avec la théorie.
Soit 2 ensembles: un ensemble d'objets O et un ensemble de sujets S.
Les objets sont fichiers, répertoires, mémoires partagées,
pipes, queues de messages et autres ressources système. Les sujets
sont des utilisateurs et les processus qu'ils lancent.
Les sujets essayent d'accéder aux objets. Le système de
sécurité vérifie que les permissions du sujet et ensuite
lui autorise ou rejette son action. Il est clair que le système
à besoin de critères pour faire sa décision. Dans
MAC (Contrôle d'Accès Obligatoire) les critères sont
les Mandatory Label.
Un Mandatory Label consiste en un niveau de sécurité
L (nombre positif) et un ensemble de catégories M (vecteur de 64
bits).
La catégorie M1 domine sur la catégorie M2 (par définition)
si pour chaque 1 dans le second vecteur correspond un 1 dans le premier
vecteur.
Exemple avec un vecteur de 3 bits:
M1 {1,0,1} domine sur M2 {1,0,0}
M3 {0,0,0} domine sur M4 {0,0,0}
Le Label {Li,Mi} domine sur le label {Lj,Mj} (par définition) si Li>Lj et Mi domine sur Mj.
Avec ces définitions, nous avons aussi besoin de règles spéciales.
Tout d'abord nous avons besoin d'utiliser une matrice d'accès
D ou Dij contient les permissions du sujet Si d'accéder à
l'objet Oj (lecture, écriture, exécution, et peut être
d'autres...) Nous n'avons pas cette matrice dans RSBAC et donc nous utilisons
à la place les règles standards d'Unix.
Il y à aussi les règles additionnelles suivantes (reprise
de la documentation générale de RSBAC) :
1. ss-property: Si domine Oj, si x = r ou x =w (x contient l'accès
en lecture)
2. *-property: Si est dit 'trusted' (de confiance) ou
1. Oj domine le niveau courant de de Si, si mode=a
2. le niveau de Si est égal au niveau
courant de Si, si mode = w
3. le niveau courant de Si domine le niveau
de Oj, si mode = r
3. ds-property: x est dans la cellule Mi,j de la matrice M des accès
autorises.
Comme vous pouvez le voir, il s'agit d'un modèle difficile. Dans la vie réelle, la plupart des programmes ne marcheront pas correctement. Je recommande donc que vous n'utilisiez ce modèle que si vous le comprenez suffisamment.
EXERCICE: Utilisons les attributs 'file' et 'user' de MAC. Loguez vous avec le compte "test". Créez le fichier ~/mactest, lancez le menu principal d'administration de RSBAC, et allez dans "File/Dir Attributes menu". Choisissez le fichier mactest que vous venez de créer. Changez les attributs suivants :
Lancez rsbac_menu et allez dans le menu "User Attributes: Go to user attribute menu". Comme vous le voyiez l'utilisateur a beaucoup de droits. Choisissez "test". Nous avons besoin de sélectionner deux de ses droits :
EXERCICE: Créer le répertoire /tmp/acltest, lancer rsbac_menu et allez dans la section "ACL Menu: Go to ACL menu..." Mais ou sont les permissions ? Pas de précipitations ... appuyiez sur "Change mask" et ....
Dessélectionnez pour le répertoire /tmp/acltest la permissions CHDIR. Maintenant rien ni personne ne peut aller dans ce répertoire. Nous avons changé le masque général, mais nous pouvons ajouter des entrées ACL pour certains utilisateurs, ainsi que quelques groupes de rôle (voyez le chapitre "RC module").
Choisissez le menu"Add ACL Entry:Add group, role or user entry", et ajouter un utilisateur. Choisissez l'utilisateur de la liste (par exemple l'utilisateur tttt). Vous pouvez changer le masque pour cet utilisateur maintenant. Sélectionnez son masque, et sélectionnez toutes les permissions dans le vecteur. Essayez le résultat,
L'utilisateur tttt et seulement l'utilisateur tttt peut changer de répertoire vers /tmp/acltest (l'Officier de Sécurité peut changer de répertoire aussi vers ce répertoire, mais vous pouvez le bloquer avec une permission UNIX ordinaire!).
Vous pouvez aussi ajouter des entrées dans les groupe d'utilisateurs (ACL group) et dans les RC-role. Mais vous devez lire la description d'un RC avant cela.
Est ce que vous aimez le théâtre ? ... oui ? Alors
ça devrait être simple pour vous l'idée de rôle.
Sinon, lisez le texte suivant.
Tout d'abord les mots clés sont 'cible' et 'requêtes'.
Un sujet fait une requête pour accéder à une cible. Les requêtes ont le même permissions ACL (CHDIR, APPEND_OPEN,...). Les cibles sont : FILE, DIR, DEV, IPC (sémaphores, queues de messages, pipes,...), SCD (System Control Data, Données de Contrôle du Système, par exemple les ports, les logs du noyau ...), USER, PROCESS, NONE (cible vide), FD (File Descriptor, descripteur de fichier FILE et DIR en même temps).
Chaque cible à un type. Vous pouvez utiliser un type par défaut (System FD, Security FD,...) ou en créer un nouveau.
Rôle est une classe de sujets. Un rôle définit cette classe de permissions d'accès à des cibles définies ainsi qu'à d'autres rôles.
Les rôles ont les paramètres généraux suivants :
Par exemple, l'administrateur peut ajouter/enlever des utilisateurs, mais ne peut pas éditer manuellement les fichier /etc/passwd et /etc/shadow, après ces changements. Cela peut être très intéressant pour un site web. Un hacker qui réussit à rentrer sur votre système ne peut pas enlever ni modifier les pages web, même en ayant un accès root. Seulement Apache peut travailler avec ces pages.
EXERCICE: D'abord, créez un nouveau type de cible "Passwd FD". Faites cela en utilisant le menu "RC types". Ensuite, faites un nouveau rôle "Admin Passwd". Ensuite, allez dans "RC Roles", choisissez "System Administrator" (en utilisant le menu "Rolelist: Choose role from list") et copiez le dans le nouveau rôle (en utilisant le menu "Copy Role (New Role)"). Renommez le nouveau rôle "Admin Passwd". Changez les permissions ACL de ce rôle pour la cible "Passwd FD" et mettez toutes les permissions, les autres rôles n'ont aucune permission pour cette cible par défaut). Ajoutez au rôle System Admin la permission de lire la cible (en lecture seule, et pas lecture/écriture!).
Maintenant, le modèle est prêt!. Appliquez le à vos objets. Mais faites attention ! Vous pouvez perdre l'accès à votre propre système. Une bonne idée généralement est de faire les modifications en utilisant une console virtuelle, et de les essayer à partir d'une autre console virtuelle.
Lancez rsbac_menu. Aller dans le menu 'file attribute' et trouver le paramètre:
Choisissez le fichier /bin/login et mettez lui l'attribut suivant:
Que le spectacle continue ...
Stanislav Ievlev <inger@linux.ru.net>
Translation from English to French by:
Fabrice Marie <fabrice@celestix.com>