Traductions: [EN],[JP] Listes de souhaits: [Livres],[Musique]
 
   Center for Information Technology Integration   
OpenSSH avec Séparation des Privilèges
  
 

OpenSSH avec Séparation des Privilèges

Nous utilisons un processus fils sans privilège pour contenir et restreindre les effets des erreurs de programmation. Un bogue dans le processus fils non privilégié ne résulte pas en la compromission du système. En d'autres mots, le but est la séparation complète des privilèges dans OpenSSH.

La séparation des privilèges utilise deux processus : le processus père privilégié contrôle les progrès du processus fils non privilégié. Le processus fils est non privilégié. Ceci est atteint en changeant ses uid/gid vers un utilisateur non utilisé et en restreignant ses accès au système de fichiers via chroot() à /var/empty. C'est le seul processus qui traite des données réseau. Le père privilégié peut être modélisé par une très petite machine d'états finis donc il est facile de raisonner à propos du code qui est exécuté avec des privilèges.

Une interface bien définie entre le père privilégié et le fils non privilégié permet au fils de déléguer les opérations qui requièrent des privilèges au père. La réussite de l'authentification est déterminée par le processus père.

La communication entre les processus privilégié et non privilégié est accomplie par des tubes. La mémoire partagée stocke l'état qui ne peut être exporté autrement. Le fils doit demander au père privilégié de déterminer si l'authentification était réussie ou non.

  Diagramme

Si le processus fils est corrompu et croit que l'utilisateur distant a été authentifié, l'accès ne sera pas autorisé à moins que le père soit parvenu à la même décision.

Auparavant toute corruption de sshd pouvait conduire à une compromission root distante immédiate si elle se produisait avant l'authentification, et à une compromission root locale si elle se passait après l'authentification. La séparation des privilèges rendra une telle compromission très difficile si non impossible.

Statut du Projet

  • 2002-03-18: OpenSSH avec Séparation des Privilèges a été intégré dans le dépôt cvs de OpenBSD.
  • 2002-03-16: Une réaction d'un utilisateur a identifié quelques petits problèmes qui sont en cours de résolution maintenant.
  • 2002-03-15: Version finalisée. À la recherche de retours.
  • 2002-03-14: Fixations de bogues mineurs. Plutôt stable, s'exécute sur tous mes systèmes de bureau.
  • 2002-03-13: SSHv1 est avec la séparation des privilèges, aussi. BSD-auth est supporté et d'autres systèmes d'authentification devraient opérer sous séparation des privilèges bientôt.
  • 2002-03-12: Tout OpenSSH est complètement avec séparation des privilèges. Afin d'avoir la séparation des privilèges après l'authentification, le système d'exploitation a besoin de supporter le passage de descripteurs de fichiers. Si aucun passage de descripteurs de fichiers n'est accessible, la séparation des privilèges s'arrêtera après que l'authentification aura réussie.
    • SSH v2 seulement: À présent la séparation des privilèges fonctionne seulement pour le protocole v2. Le protocole SSH v1 est actuellement à l'étude.
  • 2002-03-11: La pré-authentification est complètement avec séparation des privilèges. Après que l'authentification a été réussie le fils non privilégié exporte ses états de la cryptographie et de la compression au père privilégié qui continue alors.
    • État de la Cryptographie: OpenSSH a besoin de garder trace de l'IV courant, et pour les chiffrements de flux l'état de la clé en entier. Actuellement, j'obtiens le contexte depuis la structure EVP_CIPHER_CONTEXT.
    • Exportation de l'État de la Compression: Je devais créer deux segments de mémoire partagée. Passer outre les fonctions d'allocation de zlib pour allouer les entrées depuis le second segment de mémoire. Quand le processus existe vous avez toutes les structures de contrôle depuis le premier segment de mémoire stocké dans le second segment de mémoire et pouvez utiliser l'information dans le second segment pour synchroniser complètement l'état pour le premier segment d'un processus à l'autre.
      Ceci est complètement transparent puisque la bibliothèque zlib fournit des "hooks" pour des mécanismes privés d'allocation.

Références

Code source

Le code source est accessible depuis le dépôt CVS d'OpenBSD.
  • 2002-03-18: Vous pouvez obtenir les sources de ssh avec la commande suivante
    cvs -d anoncvs@anoncvs1.ca.openbsd.org:/cvs get src/usr.bin/ssh
    
    ou depuis tout autre serveur cvs anonyme.

Remerciements

Markus Friedl a aidé à l'écriture du code pour la séparation des privilèges et ses suggestions ont amélioré ses qualités de façon significative.

Portabilité

Maintenir la portabilité est une haute priorité. L'interface à la mémoire partagée est très bien abstraite et devrait être facile à remettre en oeuvre sur des systèmes d'exploitation qui ne supportent pas les segments de mémoire anonyme.

La version portable de OpenSSH supporte la Séparation des Privilèges. Quelques problèmes avec quelques systèmes d'exploitation sont toujours à l'étude.

 

  

Questions et commentaires (ndt: en anglais):
Niels Provos
Last modified: Wed Jul 24 17:44:05 EDT 2002
  Vous pouvez entretenir mon bonheur de hacker en réduisant mes listes de souhaits: Livres, Musique

Traduction française par Denis Ducamp.