Linux Expo

Les spécificités de Linux en sécurité

Denis Ducamp / Hervé Schauer Consultants

18 juin 1999


Reproduction strictement interdite

1. Introduction

Cette présentation va aborder deux aspects distincts :

1.1 Qu'est ce qu'un noyau ?

Le noyau est le coeur du système.

Il peut être comparé à un "gros programme" qui serait chargé en mémoire à l'initialisation de la machine. Ses principales tâches sont de :

Les programmes accèdent aux fonctionnalités du noyau via les appels systèmes.

1.2 Les principales fonctions de sécurité de Linux 2.2

2. Privilèges (capabilities)

2.1 Qu'est ce qu'un privilège ?

Sur un système Unix classique, le compte root (UID égal à 0) possède tous les droits. Il peut ainsi lire tous les fichiers et tuer tous les processus.

Si un programme a besoin d'un privilège alors le processus devra avoir l'identité de root.

Par exemple un programme de sauvegarde n'a besoin que de pouvoir lire tous les fichiers. En s'exécutant en tant que root, il obtient le contrôle total du système et peut donc tuer tous les processus.

Les privilèges (capabilities) sont le partitionnement des privilèges du compte root (UID = 0) en droits unitaires. Il est ainsi possible d'allouer à des processus les seuls droits dont ils ont besoin.

2.2 Les privilèges linux

Le système de privilèges utilisé est celui défini par le draft POSIX 1003.1e "POSIX capabilities" qui est maintenant abandonné.

Actuellement seuls les processus sont associés aux privilèges. Deux implémentations sont en cours de réalisation pour gérer les privilèges au niveau des fichiers exécutables.

Chaque processus possède trois ensembles de privilèges :

2.3 Les privilèges des processus

L'implémentation du noyau 2.2 ne fait aucune référence à l'UID d'un processus pour savoir quels sont ses droits, seul l'ensemble de ses privilèges effectifs (E) est consulté.

Sur un système Unix classique les processus appartenant à root possèdent tous les privilèges, les autres processus n'en possèdent aucun.

Le privilège CAP_SETPCAP permet de changer les privilèges d'autres processus. Cette fonctionnalité n'existant pas sur un système classique, ce privilège n'est donné à aucun processus sous Linux 2.2 .

Afin d'avoir un système fonctionnel à base de privilèges il est nécessaire de modifier deux lignes dans les sources du noyau pour que les processus appartenant à root acquièrent ce privilège (voir FAQ).

2.4 Gestion des processus

Les deux utilitaires à connaître sont :

Note : utiliser les utilitaires fournis avec une version 1.92 ou plus récente de la bibliothèque libcap (voir Références)

2.5 Exemples de processus

Dans les exemples ci-dessous, le programme lancé est un serveur de tamagoshi qui ouvrira une socket sur un port privilégié (999).

2.6 Les privilèges des fichiers exécutables

Deux implémentations sont en cours de développement :

2.7 Exemples de fichiers exécutables

Les exemples ci-dessous comparent les deux solutions pour le programme ping qui nécessite le privilège CAP_NET_RAW pour ouvrir une socket en mode raw.

Notes :

2.8 Références

Linux Capabilities FAQ 0.2 <ftp://ftp.guardian.no/pub/free/linux/capabilities/>

ftp://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.3/
par Andrew Morgan <morgan@transmeta.com> :
bibliothèque (libcap), utilitaires et patchs noyaux.

Elf capabilities hack <http://atrey.karlin.mff.cuni.cz/~pavel/elfcap.html>
par Pavel Machek <pavel@bug.ucw.cz> :
utilitaires et patchs noyaux.

3. Les risques des modules

Les modules ne rentrent pas en jeu dans la sécurité d'un système

Les modules possèdent le contrôle total de la machine et peuvent :

3.1 Qu'est-ce qu'un module ?

Un module est un morceau de code permettant d'ajouter des fonctionnalités au noyau : pilotes de périphériques matériels, protocoles réseaux, etc.

Il peut être chargé dynamiquement sans avoir besoin de recompiler le noyau ou de redémarrer le système.

Les modules sont exécutés dans l'espace mémoire du noyau :

3.2 Avantages pour l'administrateur

3.3 Avantages pour les pirates

Prendre le contrôle total de la machine en détournant des appels systèmes :

3.4 Références

4. La comptabilité

Enregistrement automatique par le noyau des ressources utilisées par chaque processus lors de leurs terminaisons :

4.1 Les utilitaires

Les utilitaires nécessaire à l'utilisation des données de comptabilités sont ceux édités par GNU : acct-6.3.2.tar.gz

Cette archive renferme entre autres les utilitaires suivants :

4.2 Mise en route

Pré-requis : le support noyau doit être activé.
(sélectionner l'option "BSD Process Accounting" dans le menu "General setup")

La comptabilité est activée par la commande accton /var/account/pacct

Le journal doit exister avant l'appel à cette commande,
il peut être préférable de restreindre les droits d'accès au journal.

Le comportement de la comptabilité peut être modifié via l'entrée /proc/sys/kernel/acct qui contient 3 entrées :

4.3 Statistiques

Les deux commandes suivantes permettent de synthétiser les données :

La commande dump-acct /var/account/pacct exporte au format texte le contenu du fichier de comptabilité. Il est ainsi possible de réaliser de façon simple ses propres statistiques avec des languages comme awk et perl.

5. Le chiffrement de systèmes de fichiers

5.1 Fonctionnement

5.2 Notes

5.3 Algorithmes

Deux algorithmes ont été implémentés pour chiffrer des partitions :

Une option permet d'utiliser en mode CBC n'importe quel algorithme présent dans la bibliothèque pour chiffrer des partitions.
Cette bibliothèque comprend les algorithmes suivants :
Blowfish, DES, DFC, IDEA, MARS, RC6 et Serpent.

5.4 Exemple

Sauvegarde de fichiers dans un fichier chiffré :

# dd if=/dev/urandom of=~/mon_fichier bs=1k count=100
# losetup -e twofish /dev/loop0 ~/mon_fichier
Password:
# mkfs -t ext2 /dev/loop0
# mount -t ext2 /dev/loop0 ~/mnt
# cp -pr ~/prive ~/mnt 
# umount /dev/loop0
# losetup -d /dev/loop0

5.5 Références

6. Divers

6.1 Patchs de sécurité

6.2 Distributions sécurisées

7. PAM (Pluggable Authentication Modules)

Historiquement, l'authentification des utilisateurs sous Unix se basait sur la saisie d'un mot de passe et sa vérification à partir du fichier /etc/passwd .

A chaque amélioration de ce schéma (/etc/shadow , One-Time-Passwords, etc.) tous les programmes (login, ftpd...) devaient être réécrits pour supporter les nouvelles fonctionnalités.

PAM se veut un mécanisme flexible d'authentification des utilisateurs.

Les programmes supportant PAM doivent pouvoir se lier dynamiquement à des modules chargés d'effectuer l'authentification.

L'ordre d'attachement des modules et leurs configurations sont à la charge de l'administrateur système qui gère cela de façon centralisée.

7.1 Configuration

Chaque application PAM doit posséder un fichier de configuration dans le répertoire /etc/pam.d . Chacun de ces fichiers est composé de 4 colonnes :

Le fichier /etc/pam.d/other fournit les configurations par défaut pour tout type de module non spécifié dans le fichier de configuration de l'application.

7.2 Quelques modules intéressants

7.3 Références


HSC ® © Hervé Schauer Consultants 1999 - 142, rue de Rivoli - 75001 Paris
Téléphone : +33 1 41 40 97 00 - Télécopie : +33 1 41 40 97 09
Courriel : <secretariat@hsc.fr>