Un mécanisme d'isolation similaire à plegde et unveil est en cours de développement pour FreeBSD

Pour FreeBSD, une implémentation d'un mécanisme d'isolation des applications est proposée, rappelant les appels système plegde et unveil développés par le projet OpenBSD. L'isolement dans plegde est obtenu en interdisant l'accès aux appels système qui ne sont pas utilisés dans l'application, et dans unveil en ouvrant sélectivement l'accès uniquement aux chemins de fichiers individuels avec lesquels l'application peut travailler. Pour l'application, une sorte de liste blanche d'appels système et de chemins de fichiers est constituée, et tous les autres appels et chemins sont interdits.

La différence entre l'analogue de plegde et unveil développé pour FreeBSD réside dans la fourniture d'une couche supplémentaire qui vous permet d'isoler les applications sans apporter de modifications à leur code ou avec des modifications minimes. Rappelons que dans OpenBSD, plegde et unveil visent une intégration étroite avec l'environnement sous-jacent et sont utilisés en ajoutant des annotations spéciales au code de chaque application. Pour simplifier l'organisation de la protection, les filtres permettent de s'affranchir du détail au niveau des appels système individuels et de manipuler des classes d'appels système (entrée/sortie, lecture de fichiers, écriture de fichiers, sockets, ioctl, sysctl, lancement de processus, etc.) . Les fonctions de restriction d'accès peuvent être appelées dans le code de l'application au fur et à mesure que certaines actions sont effectuées, par exemple, l'accès aux sockets et aux fichiers peut être refusé après avoir ouvert les fichiers nécessaires et établi une connexion réseau.

L'auteur du portage de plegde et unveil pour FreeBSD entend offrir la possibilité d'isoler des applications arbitraires, pour lesquelles l'utilitaire Curtain est proposé, qui permet d'appliquer aux applications des règles définies dans un fichier séparé. La configuration proposée comprend un fichier avec des paramètres de base qui définissent des classes d'appels système et des chemins de fichiers typiques spécifiques à certaines applications (travail avec le son, interaction réseau, journalisation, etc.), ainsi qu'un fichier avec des règles d'accès pour des applications spécifiques.

L'utilitaire Curtain peut être utilisé pour isoler la plupart des utilitaires non modifiés, des processus serveur, des applications graphiques et même des sessions de bureau entières. Curtain peut être utilisé conjointement avec les mécanismes d’isolation fournis par les sous-systèmes Jail et Capsicum. Il est également possible d'organiser une isolation imbriquée, lorsque les applications lancées héritent des règles définies pour l'application parent, en les complétant par des restrictions individuelles. Certaines opérations du noyau (fonctionnalités de débogage, POSIX/SysV IPC, PTY) sont en outre protégées par un mécanisme de barrière qui empêche l'accès aux objets du noyau qui ne sont pas créés par le processus actuel ou parent.

Un processus peut configurer sa propre isolation en appelant Curtainctl ou en utilisant les fonctions plegde() et unveil() de libcurtain, similaires à celles trouvées dans OpenBSD. Pour suivre les verrous pendant l'exécution de l'application, le sysctl « security.curtain.log_level » est fourni. L'accès aux protocoles X11 et Wayland est activé séparément en spécifiant les options « -X »/ » -Y » et « -W » lors de l'exécution de Curtain, mais la prise en charge des applications graphiques n'est pas encore suffisamment stabilisée et présente un certain nombre de problèmes non résolus ( les problèmes apparaissent principalement lors de l'utilisation de X11 et le support de Wayland est bien mieux implémenté). Les utilisateurs peuvent ajouter des restrictions supplémentaires en créant des fichiers de règles locales (~/.curtain.conf). Par exemple, pour autoriser l'écriture depuis Firfox uniquement dans le répertoire ~/Downloads/, vous pouvez ajouter une section « [firefox] » avec la règle « ~/Downloads/ : rw + ».

L'implémentation comprend le module noyau mac_curtain pour le contrôle d'accès obligatoire (MAC, Mandatory Access Control), un ensemble de correctifs pour le noyau FreeBSD avec l'implémentation des gestionnaires et filtres nécessaires, la bibliothèque libcurtain pour utiliser les fonctions plegde et unveil dans les applications, l'utilitaire Curtain, des exemples de fichiers de configuration, un ensemble de tests et de correctifs pour certains programmes dans l'espace utilisateur (par exemple, pour utiliser $TMPDIR pour unifier le travail avec des fichiers temporaires). Dans la mesure du possible, l'auteur a l'intention de minimiser le nombre de modifications nécessitant des correctifs au noyau et aux applications.

Source: opennet.ru

Ajouter un commentaire