programmation de la sécurité Unix: Minimiser les privilèges



Les procédures de sécurité doivent minimiser les privilèges, pour réduire le bogue dans la possibilité de failles de sécurité. Cet article explique comment réduire au minimum les modules privilégiés, les privilèges et les privilèges accordés à la fois efficaces pour minimiser les privilèges.

L'article ne traite que certains de la classe UNIX traditionnels privilégiés des mécanismes, ont également discuté des mécanismes relativement nouveaux, tels que la prison de FreeBSD (), Linux Security Module (Linux Security Modules, LSM) cadre, et le Linux Security-Enhanced (SELinux).

Mars 3, 2003, Internet Security Systems sur Sendmail une faille sérieuse dans une mise en garde. Tous les e-mail via l'agent de transfert de message (agent de transfert de mail, MTA) pour transférer, Sendmail est le MTA le plus populaire, alors cet avertissement touchés de nombreuses organisations dans le monde entier. Le problème est, selon la configuration habituelle, soigneusement définir le "de", "à" ou "CC" domaine de messages e-mail permet à l'expéditeur complet (root) de contrôle d'une machine celui qui exécute Sendmail. Plus sérieusement, le pare-feu général, ne protège pas contre de telles attaques à l'intérieur de la machine.

La cause directe de cette lacune, car, Sendmail a une détection des défauts de sécurité, de type buffer overflow peut se produire. Toutefois, un rôle important dans le facteur, Sendmail est souvent installé comme un seul «setuid root» du programme, le système fonctionne, il a des autorisations de contrôle intégral. Ce défaut, Sendmail dans aucun de ceux qui peuvent permettre à un attaquant de contrôle direct de l'ensemble du système.

Cette conception est-elle nécessaire? Non, Postfix de Wietse Venema est une commune peut correspondre c'est MTA. Comme Sendmail, Postfix faire beaucoup de tests de sécurité, toutefois, afin de minimiser les privilèges, Postfix conçu comme un ensemble de modules. Les résultats, Postfix est généralement considéré comme plus sûr que le programme Sendmail. Cet article explique comment faire pour minimiser les privilèges, vous pouvez appliquer le même raisonnement à votre programme.

Réduire la base de privilège

L'application pratique des procédures ont des défauts. Voulons-nous vraiment, mais vraiment il est. des besoins complexes, les pressions calendrier et les changements dans l'environnement est peu susceptible d'être pratique processus afin impeccable. Même ceux qui ont passé complexe et une technologie sophistiquée pour prouver formellement la procédure correcte, il y aura des défauts. Pourquoi? Une des raisons est que la vérification doit être fait un certain nombre d'hypothèses, et souvent, ces hypothèses ne sont pas tout à fait correcte. En tout cas, pour des raisons diverses, la plupart des procédures n'avaient pas été un test rigoureux. Par ailleurs, aujourd'hui encore, il n'ya pas de défaut (peu probable), l'entretien futur de la ou des changements de l'environnement sont susceptibles d'introduire des défauts. Donc, pour régler des problèmes pratiques, nous avons un moyen de développer les procédures de sécurité, malgré les défauts de notre programme.

Malgré ces lacunes, le programme de sécurité est le moyen le plus important est de minimiser le privilège. Privilège ne sont pas seulement permettre à tout le monde peut faire. systèmes UNIX dans la classe, avec «root», les autres utilisateurs ou des membres d'un groupe de privilèges est le type le plus commun de privilèges. Certains systèmes vous permettent d'accorder des privilèges ni lire ni écrire à des fichiers spécifiques. Mais de toute façon, pour minimiser les privilèges:

Seule une partie du programme ont besoin des privilèges accordés et privilèges

Seule une partie de celui-ci est absolument nécessaire d'accorder des privilèges spécifiques

Les privilèges du temps efficace ou peut être effectivement limitée au strict minimum le temps

Le fait est que l'objectif, et non absolue. La base de votre organisation (tel que votre système d'exploitation ou à la machine virtuelle) peut être faite pour compléter celles-ci ne Rong Yi Yan Ge, ou l'accomplissement strict de celles-ci peuvent être très compliqué, Er Dao Zhi a présenté lors de la tentative d'achever défaut plus rigoureuse. Toutefois, la plus proche de vous ces objectifs, la possibilité d'entraîner une baisse des défauts de sécurité. Même si le défaut a eu des problèmes de sécurité, qui a conduit au problème de sécurité pourrait être encore plus bas. Et si vous pouvez vous assurer que seule une petite partie du programme a des privilèges spécifiques, vous pouvez utiliser beaucoup de temps supplémentaire pour s'assurer que le cadre qui peut résister aux attaques. Cette idée n'est pas nouvelle; Saltzer et Schroeder 1975 Papier excellente discuté des principes de sécurité, de manière explicite, comme un principe de privilège minimum (voir Ressources). Certaines idées sont intemporelles, telles que la réduction du privilège.

Les trois sections suivantes sera de discuter de ces objectifs, à son tour, y compris la manière d'atteindre leur classe les systèmes UNIX. Ensuite, nous discuterons de la FreeBSD et Linux dans certains mécanismes spéciaux disponibles, y compris de la NSA Security-Enhanced Linux (SELinux) discussion.

Minimiser les modules privilégiée

Comme mentionné plus haut, que de faire partie privilégiée du programme ne s'applique privilégiée. Autrement dit, lorsque vous concevez votre programme, essayez de traiter décomposé en parties distinctes, de ne faire que quelques-uns des besoins des petites et indépendantes des privilèges spéciaux.

Si les différentes parties doit être exécuté, puis utiliser le processus UNIX-système (pas les fils). Threads partagent leurs privilèges de sécurité, le fil en question peut interférer avec le processus de tous les autres threads. le cadre privilégié de la préparation, sur les autres programmes comme il est attaqué: un jour sera! Veiller à ce que le cadre privilégié de la seule chose à faire aussi peu que possible; fonctionnalité limitée des moyens moins susceptibles d'être utilisés.

Une approche commune est de créer une fonction extrêmement limitée a des privilèges spécifiques (comme un outil setuid ou setgid) de ligne de commande. commande passwd UNIX est un exemple, c'est un privilège particulier d'outils de ligne de commande pour modifier le mot de passe («setuid root»), mais il peut faire est de changer votre mot de passe. Alors, peut demander une variété d'outils GUI pour faire le changement réel passwd. Si possible, essayez d'éviter complètement la création du programme setuid ou setgid, il est difficile de s'assurer que vous êtes vraiment de protéger toutes les entrées. Cependant, parfois vous avez besoin pour créer un setuid / setgid programmes, afin, si nécessaire, autant que possible de traiter le plus petit et le plus limité.

Il existe de nombreuses autres façons. Par exemple, vous pouvez avoir un privilège spécial d'un petit "serveur (serveur)" processus; que le serveur ne permet que la demande spécifique, mais ne fait que confirmer que le demandeur est autorisé à délivrer la demande. Une autre approche courante consiste à commencer à utiliser les privilèges d'un programme, le programme ensuite dérivé à abandonner tous les privilèges du processus d'autre part, le processus en faisant le gros du travail.

Faites attention la manière dont ces modules communiquent les uns avec les autres. Dans de nombreux systèmes UNIX, la valeur de ligne de commande et de l'environnement peut être vu par d'autres utilisateurs, il n'est donc pas dans le processus de transmission des données entre le secret d'une bonne façon. Pipeline peut être compétente, mais à éviter soigneusement l'impasse (deux extrémités pouvez actualiser une requête simple protocole de réponse / ne peut être compétente).

Minimiser les privilèges accordés

Pour vous assurer que vous n'avez besoin que d'accorder des privilèges à faire de la procédure - en rester là. UNIX principal moyen d'obtenir les privilèges auxquels ils lancée par un utilisateur ou un groupe. En règle générale, le processus de les utiliser comme un utilisateur et le groupe de courir, mais, "setuid" ou "setgid" programme sera le programme de l'utilisateur ou des privilèges de groupe.

Malheureusement, il existe une certaine façon involontaire au programme «setuid root» sur les privilèges UNIX-systèmes développeurs. Les développeurs pense qu'ils font des choses pour eux-mêmes à devenir «facile» parce qu'ils ne vont pas en compte en profondeur de leurs procédures est absolument nécessaire de privilèges spéciaux. Le problème est, puisque la plupart de ces programmes à faire la classe des systèmes UNIX faire presque tout, si les défauts peuvent rapidement devenir une catastrophe de sécurité.

Non seulement parce que vous avez besoin pour effectuer une tâche simple de donner tous les privilèges possibles. La procédure doit être accordée uniquement les privilèges dont ils ont besoin. Si vous pouvez, à setgid pour les faire fonctionner, de ne pas utiliser setuid - privilèges setgid moins. Créer un utilisateur spécifique et un groupe (ne pas utiliser root), et les utiliser selon vos besoins. Afin de s'assurer que ceux appartenant à root exécutable uniquement par root pour écrire, pour que d'autres ne peuvent pas les modifier. Permissions de fichiers ensemble très strict - si elle n'est pas absolument nécessaire, ne pas laisser tout le monde peut lire ou écrire des fichiers, et l'utilisation de ces utilisateurs et groupes spécifiques. Peut expliquer tous ces jeux peut être un exemple de "Top Ten" des dizaines de pratique courante. Beaucoup de procédures sont "jeux setgid", de ne faire que le programme de jeu peuvent être modifiées "Top Ten" des scores, les scores et des documents stockés dans le groupe principal des jeux (et uniquement ce groupe peut écrire). Même si l'attaque malveillante et a inscrit un programme de jeu, tout ce qu'il pourrait faire serait de modifier les scores des documents. Dans tous les cas, les développeurs de jeux ont encore besoin d'écrire leurs programmes de prévention de fichiers malveillants score.

chroot () appel système est un outil utile - malheureusement, il ya quelques difficiles à utiliser. Lorsque la vue des processus du système de fichiers "root", cet appel système de modifier le processus pour voir le contenu. Si vous envisagez de l'utiliser - et il peut être utile - pour être prêts à prendre le temps de faire un bon usage de celui-ci. Doit être soigneusement préparée "nouvelle racine", ce qui est compliqué parce que l'application exacte dépend de la plate-forme et les caractéristiques des applications. Vous devez être root, à chroot () d'appel, et vous devriez changer rapidement le statut de non-root (racine utilisateurs de l'environnement chroot, donc si c'est pour prendre effet, vous avez besoin de lever le privilège). Et chroot ne changera pas d'accès au réseau. Cela peut être un système utile appels, tous ont parfois besoin de l'examiner, mais l'effort à faire bien préparé.

Les ressources limitées est un outil souvent oublié, qui comprend à la fois le processus de ressources de stockage, y compris les ressources. Ces restrictions déni de service attaques sont particulièrement utiles:

Stockage pour, vous pouvez définir pour chaque utilisateur ou groupe pour chaque système de fichiers monté ou le fichier des quotas de stockage nombre (limite). Dans le système GNU / Linux, voir quota (1), quotactl (2) et quotaon (8 compréhension) pour en profondeur de cette fonction, toutefois, où, même si elles ne sont pas en mesure d'utiliser la plupart de la classe des systèmes UNIX comprennent le système de quotas. Dans GNU / Linux et de nombreux autres systèmes, vous pouvez définir "dur" des limites (ne pas dépasser) et "Soft" limites (qui peuvent être excédent temporaire).

Le processus est, vous pouvez définir de nombreuses limites, comme le nombre de fichiers ouverts, le nombre de processus, et ainsi de suite. Cette capacité est effectivement partie de la norme (comme un Single UNIX Specification (Single UNIX Specification)), chacun d'eux dans les systèmes UNIX classe presque omniprésents, pour comprendre, voir getrlimit (2), setrlimit (2) et getrusage ( 2), sysconf (3) et ulimit (1). Processus ne peut jamais dépasser la ligne «courant», mais ils peuvent limiter toute la manière à relever le courant "de la PAC." Malheureusement, il ya une anomalie problèmes terme peut vous faire confondre. "Lignes" est également connu comme "soft" des frontières, limites, aussi connu comme "dur" des frontières. De cette façon, vous serez dans une situation inhabituelle, le processus ne peut jamais dépasser les limites du processus de mou (courants) des limites - et vous pouvez dépasser la limite de quota souple est. Je propose de limiter le processus d'utiliser le terme "lignes" et de "cap" (ne jamais utiliser le terme «mous» et «dur»), alors il n'y aurait pas confondre.

Réduire au minimum le temps de privilège

Mais seulement quand nécessaire pour offrir des privilèges - ne donnent pas un instant.

Chaque fois que possible, ne pas utiliser quel que soit votre besoin immédiat, les privilèges, et puis y renoncer définitivement. Une fois qu'ils ont été définitivement abandonnée, puis l'attaquant ne peut pas faire tout autre usage de ces privilèges. Par exemple, le besoin de privilèges root individu à la racine, la procédure peut commencer (par exemple, en devenant «setuid root») puis passer à l'utilisateur aux privilèges restreints à courir. C'est le nombre de serveurs Internet (y compris le serveur Web Apache) les méthodes utilisées. Classe les systèmes UNIX ne permettent pas de programme pour 0 ouvert 到 1024 port TCP / IP, vous devez avoir les privilèges root. Mais la plupart des serveurs suffit d'ouvrir les ports moment du démarrage, après le privilège a été n'avez plus besoin. Une façon consiste à exécuter en tant que root, dès que possible d'ouvrir des ports privilégiés nécessaires, puis de supprimer définitivement les privilèges root (y compris le processus appartient à un groupe privilégié). Va essayer de supprimer tous les autres privilèges hérités, par exemple, fermer dès que possible besoin de privilèges spécifiques pour ouvrir le fichier.

Si vous ne pouvez pas définitivement renoncer à des privilèges, vous pouvez l'enlèvement d'au moins temporaire des privilèges aussi souvent que possible. C'est mieux que de manière permanente en supprimant les privilèges, parce que si un attaquant peut contrôler votre programme, l'attaquant peut réactiver le privilège et l'utiliser. Néanmoins, cela vaut la peine.

De nombreuses attaques seulement quand ils ont le privilège de tromper la procédure à faire des choses en dehors du programme et des privilèges du programme sont en mesure de réussir (par exemple, en créant un lien symbolique anomalie et liens en dur). Si le programme n'est généralement pas permettre à ses privilèges, alors l'attaquant aimerait profiter de ce programme sera plus difficile.

Relativement nouveau mécanisme

Jusqu'à présent, nous avons discuté des principes effectivement s'appliquer à presque tous les systèmes d'exploitation, et, depuis le 19e siècle, des années 70, la quasi-totalité de la classe des systèmes UNIX sont similaires aux mécanismes classiques. Cela ne signifie pas qu'ils sont inutiles; simple et l'épreuve du temps, c'est leur propre avantage. Cependant, une classe relativement nouvelle de systèmes UNIX est passé à moins de soutien mécanisme de privilège, il est utile de savoir. Bien qu'il soit facile de trouver des mécanismes éprouvés par le temps, mais sur le mécanisme relativement nouveau pour l'information n'est pas encore connu. Donc, je présenterai ici un mécanisme précieux sélectionné: jail FreeBSD (), Linux Security Modules (LSM) et le cadre de Security-Enhanced Linux (SELinux).

jail FreeBSD ()

chroot () appel système a beaucoup de problèmes, tel que mentionné ci-dessus. Par exemple, il est difficile de corriger l'utilisation, l'utilisateur root peut toujours apprendre, mais il ne contrôle pas l'accès au réseau. les développeurs de FreeBSD a décidé d'ajouter un appel nouveau système pour résoudre ces problèmes, le nouveau système d'appel appelé prison (). Cet appel est semblable à chroot (), mais essayez d'utiliser plus facile et plus efficace à utiliser. Dans une prison, toutes les demandes (même racine) sont limités en prison, et la prison dans le processus ne peut communiquer avec d'autres processus, et le système est bloqué les tentatives de l'utilisateur root en prison le chemin de la typique. prison se verra attribuer une adresse IP spécifique, ne peut pas utiliser une autre adresse que sa propre adresse.

prison () est unique pour FreeBSD, ce qui limite son utilité. Cependant, tous les OSS / FS a beaucoup de croisement entre l'impact du noyau (pollinisation croisée). Par exemple, en utilisant le cadre de sécurité pour Linux a été développé pour la version Linux d'une prison. En outre, FreeBSD 5 a ajouté un cadre flexible Mac (à partir TrustedBSD projet), y compris les fonctions de base d'un même module pour SELinux. Tous, à l'avenir pour voir plus de cette situation ne soyez pas surpris.

Module de sécurité Linux (LSM)

Dans le Sommet de 2001 sur le noyau Linux, Linus Torvalds a un problème. Un certain nombre de projets de sécurité différents, y compris le Security-Enhanced Linux (SELinux) du projet, en lui demandant d'ajouter à leurs méthodes de sécurité du noyau Linux. Le problème est que ces différentes méthodes sont souvent incompatibles. Torvalds a pas de moyen simple pour déterminer lequel est le meilleur, il a demandé à ces projets afin de créer un cadre de sécurité commune Linux. Ainsi, l'administrateur peut leur donner n'importe quelle méthode d'installation particulière, ils veulent la sécurité. Après plusieurs discussions avec Torvalds, Crispin Cowan a créé un groupe pour créer le cadre commun de sécurité. Ce cadre est appelé Linux Security Module (LSM) cadre, il fait maintenant partie du noyau Linux standard (comme la version 2.6 du noyau).

Sur le plan conceptuel, le cadre de LSM est particulièrement simple. noyau Linux est toujours fait de son inspection de sécurité de routine; par exemple, si vous écrivez un fichier, vous avez toujours besoin d'avoir accès en écriture à son application.

Cependant, chaque fois que nécessaire si le noyau Linux devrait permettre l'accès pour déterminer si elle doit être vérifiée - par un «livre» à la demande un module de sécurité pour mener à bien - pour déterminer si l'action de permis. De cette façon, les administrateurs peuvent tout simplement sélectionner ce qu'il veut utiliser le module de sécurité, et l'insert même noyau Linux d'autres modules. Depuis lors, le module de sécurité permettra de déterminer ce qui est permis.

LSM cadre conçu pour être si flexible qu'il peut réaliser de nombreux types de politiques de sécurité. En fait, un certain nombre de différents projets de concert pour s'assurer que le cadre LSM suffisamment compétente du travail réel. Par exemple, lorsque l'objet interne est créé ou supprimé lorsque le LSM en un certain nombre d'appels - n'est pas parce que ces opérations peuvent être suspendus, mais pour le module de sécurité peut garder une trace de vos données importantes. Utilisation d'un certain nombre de différents outils d'analyse pour s'assurer que le cadre LSM ne manquez pas d'anomalies importantes de leur branche cible. Les résultats montrent que le projet que beaucoup de gens pensent plus difficile, et son succès est difficile gagné.

LSM est nécessaire de comprendre les décisions de conception de base fait. Fondamentalement, le cadre LSM a été conçu pour presque toutes les branches sont des exceptions limitées, ne sont pas fiables (officielle). Direction générale de faire une crédibilité absolue anormale décision finale: Si l'exception est la branche que la demande devrait être autorisé, il sera autorisé sans condition. Au contraire, ne peut que renforcer la crédibilité de la branche anormale des autres restrictions; elle ne peut pas accorder de nouveaux droits. Théoriquement, si toutes les branches sont crédibles LSM anormale, cadre LSM sera plus souple. Un appelé capable () branche exception est digne de confiance - mais seulement parce qu'il avait à soutenir les capacités POSIX régulière. Cependant, la lettre peut faire toute les branches anormales, il est nécessaire de le noyau Linux, de nombreux changements fondamentaux, dit le changement n'est pas autorisé à être acceptée.

Beaucoup de gens craignent que la plupart des cas de la branche anormale peut croire, même le moindre défaut devient une catastrophe, et laissez la branche exception signifie que les utilisateurs ne seront pas surpris (En tout cas, l'original des autorisations UNIX encore du travail) . LSM cadre afin que les développeurs qui souhaitent limiter la méthode, et la plupart de ses développeurs la certitude qu'ils peuvent travailler dans le cadre.

LSM cadre pour la compréhension d'autres restrictions sont également importantes. LSM cadre est conçu pour appuyer le contrôle d'accès, de vérification et autres questions de sécurité ne sont pas. LSM lui-même module ne pas enregistrer toutes les demandes ou leurs résultats, parce qu'ils ne peuvent pas tout voir. Pourquoi? Une des raisons est que le noyau ne peut pas appeler le module LSM a refusé la demande; Si vous souhaitez à la vérification de ce refus sera un problème. Aussi, pour des raisons de performance, certains de la branche proposée pour les anomalies du réseau et des données de terrain LSM n'est pas utilisée par le thread du noyau. Il peut contrôler un certain nombre d'accès au réseau, mais pas assez pour soutenir la "étiqueté" réseau de flux de données (dans ce cas, différents paquets ont différentes manutention par le label de sécurité du système d'exploitation). Ces restrictions ne sont pas appropriés, incompatible avec les principes de base des idées générales; cadre LSM a été prolongée un jour l'espoir de se débarrasser de ces restrictions.

Néanmoins, même avec ces restrictions, le cadre LSM afin de limiter les privilèges d'ajouter qu'il est encore très utile. Torvalds LSM cadre de l'objectif fondamental est réalisé: "Je n'aime pas la lutte entre les groupes de sécurité différents. J'espère que ce n'est indirects, me laisser sortir de cette lutte, puis le marché peuvent avoir du mal à décider quelle stratégie et appliquées pour atteindre l'ultime ».

Donc, si vous souhaitez restreindre l'Linux accordé le privilège de votre programme, vous pouvez créer entièrement votre module de sécurité propres. Si vous utilisez un de réelles contraintes externes qui peuvent avoir besoin de le faire - heureusement cela est possible. Toutefois, cela est très important; de toute façon, vous avez encore d'écrire du code du noyau. Si possible, vous préférable de ne pas utiliser le module de sécurité Linux existant, mais essayez d'écrire votre module de sécurité propres. Certains module LSM disponibles, mais, Security-Enhanced Linux (SELinux) est le plus mature d'un module de sécurité Linux, alors laissez-nous examiner ce module.

Security-Enhanced Linux (SELinux) l'histoire

Un peu d'histoire permettra de vous aider à comprendre le Security-Enhanced Linux (SELinux) - et il est lui-même une histoire amusante. US National Security Agency (National Security Agency, NSA) a longtemps été préoccupés par la sécurité de la plupart des systèmes d'exploitation, la capacité limitée. Après tout, l'un d'eux est de veiller à ce que le ministère américain de la Défense d'utiliser l'ordinateur face à des attaques sans fin pour maintenir la sécurité. NSA constaté que la plupart des mécanismes de sécurité du système d'exploitation, y compris Windows et la plupart des systèmes UNIX et Linux, n'a atteint qu'un contrôle "accès sélectif (contrôle d'accès discrétionnaire)" (CAD) de mécanisme. système de CAD est d'exécuter le programme sous l'identité de l'utilisateur et les documents pour déterminer le propriétaire du programme objet peut faire. NSA pense que c'est un grave problème, parce que le CAD lui-même vulnérable ou malveillants programme est un échec de la protection sont. Au lieu de cela, la NSA a longtemps espéré que le système d'exploitation peut également soutenir "contrôle d'accès obligatoire (contrôle d'accès obligatoire)" (MAC) mécanisme.

mécanisme MAC permet à l'administrateur système peut définir la politique de sécurité du système, cette stratégie peut être fondée sur d'autres facteurs, tels que le rôle de l'utilisateur, la crédibilité du programme et devrait Shi Yong, le programme va utiliser le type de données, etc, afin de limiter le programme peut Que faire les choses. Un petit exemple, avec le MAC après que l'utilisateur ne peut pas facilement "secret (Secret)" données en "non-confidentielles (non classifiés)" données. Toutefois, le MAC peut effectivement faire beaucoup plus que cela.

NSA a été avec les fournisseurs de système d'exploitation depuis de nombreuses années, mais beaucoup de fournisseurs plus grande part du marché de l'intégration de la MAC n'est pas intéressé à venir. Même les fournisseurs qui intègre MAC est généralement aussi être utilisé comme "produits séparés", plutôt que les produits conventionnels. En partie parce que l'ancien Mac n'est pas assez souple.

Ainsi, la NSA de pouvoir essayer de faire MAC et plus souple et plus facile d'être inclus dans le système d'exploitation. Ils utilisent le système d'exploitation Mach développé des prototypes de leurs idées, puis élargi le travail initié par «Fluke» du système d'exploitation.

Toutefois, il est difficile de convaincre les gens que ces idées peuvent être appliquées aux «véritable système d'exploitation", parce que tous ces sont basés sur de minuscules «projet de recherche de jouets de classe". Très peu en dehors du prototype peut essayer de voir ces idées dans une application réelle de la façon de travailler. NSA ne peut pas convaincre un distributeur de titre à ajouter à ces idées, et de la NSA n'avait pas le droit de modifier le système d'exploitation propriétaire. Ce n'est pas un problème nouveau; ans, la DARPA a tenté de forcer son système d'exploitation propriétaire, les chercheurs ont utilisé le système d'exploitation Windows, mais a rencontré de nombreux problèmes (voir les références ci-dessous).

Ainsi, la NSA suis tombé sur une pensée, rétrospectivement, semble évident: pour utiliser un jouet n'est pas open-source du système d'exploitation, et mettre en œuvre leurs idées de sécurité pour montrer que (1) il peut travailler, (2) il est spécifique à l'œuvre (par le biais pour tout le code source). Ils ont choisi la dominante sur le marché, le noyau open source (Linux) et dans lesquels la concrétisation de leur idée que «Security-Enhanced Linux (SELinux). Sans surprise, l'utilisation du système réel (Linux) pour les chercheurs NSA peut traiter avec eux dans le jouet ne peut pas traiter. Par exemple, dans la plupart des systèmes basés sur Linux, presque toutes sont liées de façon dynamique, alors qu'ils avaient à faire des recherches sur la façon d'effectuer la procédure d'analyse en profondeur (y accéder sur le point d'entrée »et« exécuter »les autorisations pour le document pour plus l'information). C'est un moyen beaucoup plus de succès, les gens qui utilisent prototype SELinux plus tôt que ceux qui utilisent beaucoup plus.

SELinux au travail

Ainsi, SELinux travailler? Méthode SELinux en fait très commun. Une base importante de chaque objet, comme chaque objet du système de fichiers, et chaque processus a une corrélation de leur contexte de sécurité "(contexte de sécurité)". Le contexte de sécurité peut être basée sur le niveau de sécurité militaire (s'il n'est pas confidentiel, confidentielle et hautement confidentielles), basée sur les rôles des utilisateurs, basées sur des applications (ainsi, un serveur Web peut avoir son propre contexte de sécurité), ou sur de nombreux autres éléments. Quand il exécute un autre programme, le processus peut changer le contexte de sécurité. Même, selon la procédure de l'appeler, un programme donné peut fonctionner dans différents contextes de sécurité, même si un utilisateur commence par toutes les procédures.

Ensuite, l'administrateur système peut spécifier les privilèges accordés à créer un contexte de sécurité avec laquelle la politique de sécurité "(politique de sécurité)". Lorsque l'appel système se produit lorsque, SELinux pour vérifier si tous les privilèges nécessaires ont été accordés - et si non, il a refusé la demande.

Par exemple, pour créer un fichier, le contexte de sécurité du processus en cours au contexte de sécurité du répertoire parent sur la "recherche (recherche)» et «add_name« privilège, et il faut (à créer) les fichiers dans le contexte de sécurité de la Création "( créer) un privilège ". De même, le contexte de sécurité de ce fichier avec le système de fichier doit avoir le privilège de «lié (associée)" (Ainsi, par exemple, «hautement confidentiel» des documents ne peut pas écrire une "aucune confiance" dans le disque). Aussi pour les sockets, les interfaces réseau, hôte et le port du contrôle d'accès réseau. Si la politique de sécurité pour ceux qui sont toutes les autorisations accordées, la demande sera autorisée par SELinux. Sinon, ils seront interdits. Si vous le faites, étape par étape l'ensemble de ces contrôles sera plus lent, mais il existe de nombreux programme d'optimisation (basé sur des années de recherche) pour le rendre très rapidement.

L'examen est indépendant du système de classes dans les autorisations UNIX habituelle bits; dans le système SELinux, vous devez taper la fois les autorisations UNIX standard, il SELinux la permission de faire quelque chose. Cependant, les contrôles SELinux peut faire beaucoup de permissions UNIX traditionnels de la classe est difficile à réaliser.

Utilisation de SELinux, vous pouvez facilement créer un programme spécifique et ne peut fonctionner que dans le contexte d'un serveur Web en particulier pour écrire des fichiers. Encore plus intéressant, c'est que si un attaquant a marqué un serveur Web et devenir root, l'attaquant ne sera pas donné le contrôle de l'ensemble du système - s'il ya une bonne politique de sécurité, alors.

Il a été difficile: Pour SELinux efficacement, vous devez avoir une bonne raison derrière la mise en œuvre la politique de sécurité SELinux. La plupart des utilisateurs auront besoin d'un pratique et facile à modifier leur stratégie initiale. Il ya quelques années j'ai commencé à éprouver SELinux; ce moment-là, la stratégie initiale n'est pas encore venu, il ya de nombreux problèmes. Par exemple, dans les jours avant que je trouve la politique de l'échantillon ne permet pas au début le système de mise à jour de l'horloge matérielle (le dernier, j'ai présenté un correctif pour résoudre ce problème). Bonne première conception de la politique de sécurité similaire à la catégorie de produits, la NSA espère faire par la communauté des affaires, et de chercher à le faire. Red Hat, un certain nombre de développeurs Debian, Gentoo et d'autres utilisent le cadre de base SELinux, et la création de la politique de sécurité initial, afin que les utilisateurs peuvent immédiatement commencer à l'utiliser. En effet, Red Hat prévoit de tous les utilisateurs dans leur fonctionnement dans les deux SELinux Fedora Core, et de fournir des outils simples pour permettre aux utilisateurs non-professionnels peuvent sélectionner certaines des options communes à modifier leur politique de sécurité. Il ya un démarrage Gentoo SELinux LiveCD. Réduire ces groupes, il sera plus facile à traiter privilège, sans beaucoup de code.

Ici, nous sommes de retour à la position initiale. SELinux seulement se produire lorsque l'exécution du programme que pour permettre la transmission sécurisée, qui contrôle le processus de compétence (et non une partie du processus). Par conséquent, pour exploiter pleinement le potentiel de SELinux, vous avez besoin de décomposer le processus de demande et les procédures d'indépendants, seuls quelques petits éléments privilégié - tout comme la façon dont cette situation a évolué en l'absence de procédures de sécurité SELinux. Des outils tels que SELinux vous permet de mieux contrôler les autorisations accordées, et de créer ainsi une meilleure protection, cependant, vous avez encore besoin de diviser votre programme en éléments plus petits afin de permettre à ceux qui contrôlent le jeu une efficacité maximale.

Conclusion

Réduire au minimum les problèmes de sécurité privilège est la défense la plus importante. Comme le défaut est inévitable, vous voulez réduire considérablement la possibilité de défauts de conduire à des problèmes de sécurité. Cependant, au moins un programme de sécurité doivent être liés à la sécurité de certaines parties du code, vous pouvez donc non seulement de minimiser la charge de tous les autres privilèges. Même lorsque vous avez à minimiser certains de ceux impliqués dans la sécurité après la partie ou de ceux qui doivent être corrects. À droite, vous avez besoin pour éviter les erreurs courantes.