Sécurité d'accès du code

De nos jours, du fait d'une interconnexion extrême, les systèmes informatiques sont fréquemment exposés à du code provenant de diverses sources parfois inconnues. Du code peut être attaché à un message électronique, contenu dans des documents ou téléchargé via Internet. Malheureusement, de nombreux utilisateurs d'ordinateurs ont personnellement fait l'expérience de code mobile malveillant, y compris de virus et de vers, qui peuvent endommager ou détruire des données et coûter du temps et de l'argent.

La plupart des mécanismes de sécurité courants accordent des droits aux utilisateurs en fonction de leurs informations d'identification de connexion (généralement un mot de passe) et limitent les ressources (souvent des répertoires et fichiers) auxquelles ils peuvent accéder. Toutefois, cette approche ne permet pas de répondre à plusieurs problèmes : les utilisateurs obtiennent du code en provenance de nombreuses sources, certaines d'entre elles pouvant s'avérer peu fiables ; le code peut contenir des bogues ou des vulnérabilités qui permettent au code malveillant de l'exploiter ; et le code fonctionne parfois de manière inattendue pour l'utilisateur. Par conséquent, lorsque des utilisateurs prudents et dignes de confiance exécutent le logiciel malveillant ou qui contient des erreurs, cela peut entraîner l'endommagement des systèmes informatiques et la fuite des données privées. La plupart des mécanismes de sécurité des systèmes d'exploitation exigent que chaque partie du code ait un niveau de confiance suffisant afin de s'exécuter, sauf peut-être pour les scripts d'une page Web. Par conséquent, il est encore besoin d'un mécanisme de sécurité largement applicable qui permette à du code provenant d'un système informatique de s'exécuter en toute sécurité sur un autre système, même s'il n'existe pas de relations de confiance entre les systèmes.

Le .NET Framework fournit un mécanisme de sécurité connu sous le nom de sécurité d'accès du code afin d'aider à protéger les systèmes informatiques contre du code mobile malveillant, de permettre à du code d'origine inconnue de s'exécuter sans protection, et d'empêcher du code de confiance de compromettre la sécurité de façon intentionnelle ou accidentelle. La sécurité d'accès du code permet d'assortir ce dernier d'un niveau de confiance à différents degrés, en fonction de son origine et d'autres aspects de son identité. La sécurité d'accès du code applique aussi différents niveaux de confiance au code, ce qui réduit la quantité de code dont le niveau de confiance doit être suffisant pour s'exécuter. Le recours à la sécurité d'accès du code peut réduire la probabilité que votre code soit mal utilisé par du code malveillant ou qui contient des erreurs. Elle peut réduire votre responsabilité, car vous pouvez spécifier l'ensemble des opérations que votre code doit être autorisé à effectuer. La sécurité d'accès du code peut aussi aider à réduire les dommages qui peuvent résulter de la mise en danger de la sécurité dans votre code.

RemarqueRemarque

Des modifications importantes ont été apportées à la sécurité d'accès du code dans le .NET Framework version 4.La modification la plus notable a été la transparence de la sécurité, mais il existe d'autres modifications significatives qui affectent la sécurité d'accès du code.Pour plus d'informations sur ces modifications, consultez Modifications de sécurité dans le .NET Framework 4.

La sécurité d'accès du code affecte principalement le code de bibliothèque et les applications partiellement fiables. Les développeurs de bibliothèques doivent protéger leur code contre l'accès non autorisé d'applications partiellement fiables. Les applications partiellement fiables sont des applications chargées à partir de sources externes telles qu'Internet. Les applications installées sur votre poste de travail ou sur l'intranet local sont exécutées avec une confiance totale. Les applications de confiance totale ne sont pas affectées par la sécurité d'accès du code à moins qu'elles soient marquées comme transparentes de sécurité (security-transparent), parce qu'elles sont entièrement fiables. Leur seule limitation est que les applications marquées avec l'attribut SecurityTransparentAttribute ne peuvent pas appeler du code marqué avec l'attribut SecurityCriticalAttribute. Les applications partiellement fiables doivent être exécutées dans un bac à sable (sandbox) (par exemple, dans Internet Explorer) afin que la sécurité d'accès du code puisse être appliquée. Si vous téléchargez une application en provenance d'Internet et essayez de l'exécuter sur votre poste de travail, vous obtiendrez une NotSupportedException avec le message suivant : « Tentative de chargement d'un assembly à partir d'un emplacement réseau qui aurait entraîné l'utilisation de l'assembly en mode Bac à sable (sandbox) dans les versions antérieures du .NET Framework. Cette version du .NET Framework n'activant pas la stratégie CAS par défaut, ce chargement peut être dangereux ». Si vous êtes sûre que l'application est fiable, vous pouvez lui permettre d'être exécutée avec une confiance totale en utilisant l'<loadFromRemoteSources>élément. Pour plus d'informations sur l'exécution d'une application dans un bac à sable (sandbox), consultez Comment : exécuter du code d'un niveau de confiance partiel dans un bac à sable (sandbox).

Tout le code managé qui cible le Common Language Runtime bénéficie de la sécurité d'accès du code, même si ce code ne fait aucun appel de sécurité d'accès du code. Pour plus d'informations, consultez Notions fondamentales de la sécurité d'accès du code.

Fonctions clés de la sécurité d'accès du code

La sécurité d'accès du code permet de limiter l'accès du code aux ressources et opérations protégées. Dans le .NET Framework, la sécurité d'accès du code exécute les fonctions suivantes :

  • Définit les autorisations et les jeux d'autorisations qui représentent le droit d'accès aux diverses ressources système.

  • Permet au code d'exiger que ses appelants aient les autorisations spécifiques.

  • Permet au code d'exiger que ses appelants possèdent une signature numérique, n'autorisant ainsi que les appelants d'une organisation ou d'un site spécifiques à appeler le code protégé.

  • Applique les restrictions sur le code au moment de l'exécution en comparant les autorisations accordées de chaque appelant de la pile des appels aux autorisations que les appelants doivent avoir.

Parcours de la pile des appels

Pour déterminer si le code est autorisé à accéder à une ressource ou à exécuter une opération, le système de sécurité du runtime parcourt la pile des appels, en comparant les autorisations accordées de chaque appelant à l'autorisation demandée. Si un appelant de la pile des appels n'a pas l'autorisation demandée, une exception de sécurité est levée et l'accès est refusé. Le parcours de la pile des appels est conçu pour éviter les attaques malveillantes au cours desquelles du code ayant un niveau de confiance plus faible appelle du code ayant un niveau de confiance élevé et l'utilise pour exécuter des actions non autorisées. Le fait de demander les autorisations de tous les appelants au moment de l'exécution affecte la performance, mais est essentiel pour protéger le code contre les attaques malveillantes de code ayant un niveau de confiance plus faible. Pour optimiser la performance, vous pouvez faire en sorte que votre code effectue moins de parcours de pile ; vous devez cependant être sûr que vous ne mettez pas la sécurité en danger lorsque vous faites cela.

L'illustration suivante présente le parcours de la pile des appels qui aboutit lorsqu'une méthode dans l'assembly A4 réclame que ses appelants bénéficient de l'autorisation P.

Parcours de pile de sécurité

Sécurité d'accès du code

Rubriques connexes

Titre

Description

Notions fondamentales de la sécurité d'accès du code

Décrit la sécurité d'accès du code et ses principales utilisations.

Code transparent de sécurité, niveau 2

Décrit le modèle de transparence de sécurité dans le .NET Framework 4.

Utilisation de bibliothèques à partir de code d'un niveau de confiance partiel

Décrit comment activer des bibliothèques en vue d'une utilisation avec du code non managé et comment utiliser des bibliothèques à partir d'un code non managé.

Écriture des bibliothèques de classes sécurisées

Explique les considérations relatives à la sécurité pour des bibliothèques de classe.

Création de vos propres autorisations d'accès du code

Décrit comment créer des autorisations personnalisées.

Concepts fondamentaux sur la sécurité

Offre une vue d'ensemble de nombreux termes et concepts clés utilisés dans le système de sécurité .NET Framework.

Sécurité basée sur les rôles

Décrit comment incorporer la sécurité basée sur les rôles.

Services de chiffrement

Décrit comment incorporer le chiffrement dans vos applications.

Outils de sécurité (.NET Framework)

Décrit les outils utilisés pour implémenter et gérer le système de sécurité .NET Framework.