CodezugriffssicherheitCode Access Security

Achtung

Codezugriffssicherheit und teilweise vertrauenswürdiger CodeCode Access Security and Partially Trusted Code

.NET Framework bietet einen Mechanismus namens Codezugriffssicherheit (Code Access Security, CAS) zur Erzwingung verschiedener Vertrauensebenen für anderen Code, der in der gleichen Anwendung ausgeführt wird.The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS). Die Codezugriffssicherheit sollte in .NET Framework nicht als Mechanismus zum Erzwingen von Sicherheitsbegrenzungen verwendet werden, die auf dem Codeursprung oder anderen Identitätsaspekten beruhen.Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. Wir aktualisieren unsere Leitfäden, um darauf hinzuweisen, dass die Codezugriffssicherheit und sicherheitstransparenter Code als Sicherheitsbegrenzung bei teilweise vertrauenswürdigem Code nicht unterstützt werden, insbesondere bei Code mit unbekannter Herkunft.We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. Wir raten davon ab, Code unbekannter Herkunft zu laden und auszuführen, ohne alternative Sicherheitsmaßnahmen zu treffen.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Diese Richtlinie gilt für alle Versionen von .NET Framework, außer für die in Silverlight enthaltene .NET Framework-Version.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Die heutigen hochgradig vernetzten Computersysteme sind häufig Code ausgesetzt, der aus unterschiedlichen, teilweise auch unbekannten Quellen stammt.Today's highly connected computer systems are frequently exposed to code originating from various, possibly unknown sources. Code kann an e-Mails angefügt oder über das Internet heruntergeladen werden.Code can be attached to email, contained in documents, or downloaded over the Internet. Viele Computerbenutzer haben leider die Auswirkungen von bösartigem mobilem Code hautnah zu spüren bekommen, beispielsweise von Viren und Würmern, die Daten beschädigen oder zerstören können und deren Beseitigung zeit- und kostenintensiv ist.Unfortunately, many computer users have experienced firsthand the effects of malicious mobile code, including viruses and worms, which can damage or destroy data and cost time and money.

Bei den gängigen Sicherheitsverfahren werden Benutzern Rechte auf Grundlage ihrer Anmeldeinformationen (üblicherweise des Kennworts) erteilt, und der Zugriff auf Ressourcen, bei denen es sich häufig um Verzeichnisse und Dateien handelt, wird eingeschränkt.Most common security mechanisms give rights to users based on their logon credentials (usually a password) and restrict resources (often directories and files) that the user is allowed to access. Bei diesem Ansatz bleiben jedoch einige Aspekte unberücksichtigt: Benutzer erhalten Code aus zahlreichen Quellen, von denen einige möglicherweise unzuverlässig oder nicht vertrauenswürdig sind. Code kann Fehler oder Sicherheitsrisiken enthalten, die von bösartigem Code ausgenutzt werden können. Und in manchen Fällen kann Code zu unerwartetem Verhalten führen.However, this approach fails to address several issues: users obtain code from many sources, some of which might be unreliable; code can contain bugs or vulnerabilities that enable it to be exploited by malicious code; and code sometimes does things that the user does not know it will do. Daher können Computersysteme beschädigt werden und private Daten in die falschen Hände gelangen, wenn umsichtige und vertrauenswürdige Benutzer schädliche oder fehlerhafte Software ausführen.As a result, computer systems can be damaged and private data can be leaked when cautious and trustworthy users run malicious or error-filled software. Bei den meisten Sicherheitsmechanismen von Betriebssystemen muss sämtlicher Code vollständig vertrauenswürdig sein, um ausgeführt werden zu können. Skripts auf einer Webseite können davon ausgenommen sein.Most operating system security mechanisms require that every piece of code must be completely trusted in order to run, except perhaps for scripts on a Web page. Daher ist nach wie vor ein umfassend anwendbarer Sicherheitsmechanismus erforderlich, der die geschützte Ausführung von Code eines Computersystems auf einem anderen System ermöglicht, selbst wenn keine gegenseitige Vertrauensstellung der Systeme besteht.Therefore, there is still a need for a widely applicable security mechanism that allows code originating from one computer system to execute with protection on another system, even when there is no trust relationship between the systems.

.NET Framework bietet einen Sicherheitsmechanismus namens Codezugriffssicherheit, der Computersysteme vor bösartigem, mobilem Code schützt, die geschützte Ausführung von Code unbekannter Herkunft ermöglicht und die absichtliche oder unabsichtliche Verletzung der Sicherheit durch vertrauenswürdigen Code verhindert.The .NET Framework provides a security mechanism called code access security to help protect computer systems from malicious mobile code, to allow code from unknown origins to run with protection, and to help prevent trusted code from intentionally or accidentally compromising security. Mithilfe der Codezugriffssicherheit können für Code aufgrund des Ursprungs und weiterer Identitätsaspekte verschiedene Vertrauensebenen festgelegt werden.Code access security enables code to be trusted to varying degrees depending on where the code originates and on other aspects of the code's identity. Die Codezugriffssicherheit erzwingt auch die verschiedenen Vertrauensebenen für Code, wodurch die Menge an Code, für dessen Ausführung vollständige Vertrauenswürdigkeit erforderlich ist, minimiert wird.Code access security also enforces the varying levels of trust on code, which minimizes the amount of code that must be fully trusted in order to run. Durch die Codezugriffssicherheit kann die Wahrscheinlichkeit verringert werden, dass Ihr Code durch bösartigen oder fehlerhaften Code missbraucht wird.Using code access security can reduce the likelihood that your code will be misused by malicious or error-filled code. Außerdem kann dadurch Ihre Haftung verringert werden, weil Sie die Vorgänge angeben können, die vom Code ausgeführt werden dürfen.It can reduce your liability, because you can specify the set of operations your code should be allowed to perform. Die Codezugriffssicherheit kann auch den Schaden begrenzen, der durch Sicherheitsschwachstellen im Code entstehen kann.Code access security can also help minimize the damage that can result from security vulnerabilities in your code.

Hinweis

Wichtige Änderungen an der Code Zugriffssicherheit in der .NET Framework 4 wurden vorgenommen.Major changes have been made to code access security in the .NET Framework 4. Die wichtigste Änderung ist die Sicherheits Transparenz, aber es gibt auch andere bedeutende Änderungen, die die Code Zugriffssicherheit beeinträchtigen.The most notable change has been security transparency, but there are also other significant changes that affect code access security. Weitere Informationen zu diesen Änderungen finden Sie unter Sicherheitsänderungen.For information about these changes, see Security Changes.

Die Codezugriffssicherheit wirkt sich in erster Linie auf Bibliothekscode und teilweise vertrauenswürdige Anwendungen aus.Code access security primarily affects library code and partially trusted applications. Entwickler von Bibliotheken müssen ihren Code vor nicht autorisiertem Zugriff von teilweise vertrauenswürdigen Anwendungen schützen.Library developers must protect their code from unauthorized access from partially trusted applications. Teilweise vertrauenswürdige Anwendungen sind Anwendungen, die aus externen Quellen (wie z. B. dem Internet) geladen werden.Partially trusted applications are applications that are loaded from external sources such as the Internet. Auf dem Desktop oder im lokalen Intranet installierte Anwendungen werden mit vollständiger Vertrauenswürdigkeit ausgeführt.Applications that are installed on your desktop or on the local intranet run in full trust. Anwendungen mit vollständiger Vertrauenswürdigkeit sind nicht von der Code Zugriffssicherheit betroffen, es sei denn, Sie sind als Sicherheits transparentgekennzeichnet, weil Sie voll vertrauenswürdig sind.Full-trust applications are not affected by code access security unless they are marked as security-transparent, because they are fully trusted. Die einzige Einschränkung für Anwendungen mit vollständiger Vertrauenswürdigkeit ist, dass mit dem SecurityTransparentAttribute-Attribut markierte Anwendungen keinen Code aufrufen können, der mit dem SecurityCriticalAttribute-Attribut markiert ist.The only limitation for full-trust applications is that applications that are marked with the SecurityTransparentAttribute attribute cannot call code that is marked with the SecurityCriticalAttribute attribute. Teilweise vertrauenswürdige Anwendungen müssen in einem Sandkasten (z. B. in Internet Explorer) ausgeführt werden, damit die Codezugriffssicherheit angewendet werden kann.Partially trusted applications must be run in a sandbox (for example, in Internet Explorer) so that code access security can be applied. Wenn Sie eine Anwendung aus dem Internet herunterladen und versuchen, Sie auf Ihrem Desktop auszuführen, erhalten Sie eine NotSupportedException mit der folgenden Meldung: "Es wurde versucht, eine Assembly von einem Netzwerk Speicherort zu laden, was dazu geführt hätte, dass die Assembly in früheren Versionen der .NET Framework in einen Sandkasten umgewandelt wurde.If you download an application from the Internet and try to run it from your desktop, you will get a NotSupportedException with the message: "An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. In dieser Version von .NET Framework wird die CAS-Richtlinie standardmäßig nicht aktiviert, dieser Ladevorgang kann daher gefährlich sein."This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous." Wenn Sie sicher sind, dass die Anwendung vertrauenswürdig ist, können Sie Sie mit dem <>-Element loadFromRemoteSourcesals voll vertrauenswürdig ausführen.If you are sure that the application can be trusted, you can enable it to be run as full trust by using the <loadFromRemoteSources> element. Informationen zum Ausführen einer Anwendung in einem Sandkasten finden Sie unter Gewusst wie: Ausführen von teilweise vertrauenswürdigem Code in einem Sandkasten beschrieben.For information about running an application in a sandbox, see How to: Run Partially Trusted Code in a Sandbox.

Die Vorteile der Codezugriffssicherheit gelten für den gesamten verwalteten Code, der für die Common Language Runtime geschrieben wird, auch wenn dieser Code die Codezugriffssicherheit nicht aufruft.All managed code that targets the common language runtime receives the benefits of code access security, even if that code does not make a single code access security call. Weitere Informationen finden Sie unter Grundlagen der Codezugriffssicherheit.For more information, see Code Access Security Basics.

Hauptfunktionen der CodezugriffssicherheitKey Functions of Code Access Security

Mithilfe der Codezugriffssicherheit wird der Zugriff von Code auf geschützte Ressourcen und Vorgänge eingeschränkt.Code access security helps limit the access that code has to protected resources and operations. In .NET Framework erfüllt die Codezugriffssicherheit die folgenden Funktionen:In the .NET Framework, code access security performs the following functions:

  • Definieren von Berechtigungen und Berechtigungssätzen, die den Zugriff auf die verschiedenen Systemressourcen regelnDefines permissions and permission sets that represent the right to access various system resources.

  • Bereitstellen der Möglichkeit für Code festzulegen, dass seine Aufrufer bestimmte Berechtigungen haben müssenEnables code to demand that its callers have specific permissions.

  • Bereitstellen der Möglichkeit für Code festzulegen, dass seine Aufrufer eine digitale Signatur besitzen müssen, sodass der geschützte Code nur von Aufrufern eines bestimmten Unternehmens oder eines bestimmten Standorts aufgerufen werden kannEnables code to demand that its callers possess a digital signature, thus allowing only callers from a particular organization or site to call the protected code.

  • Durchsetzen von Einschränkungen für Code zur Laufzeit, indem die erteilten Berechtigungen der einzelnen Aufrufer in der Aufrufliste mit den Berechtigungen verglichen werden, die sie besitzen müssenEnforces restrictions on code at run time by comparing the granted permissions of every caller on the call stack to the permissions that callers must have.

Durchlaufen der AufruflisteWalking the Call Stack

Zur Bestimmung, ob Code auf eine Ressource zugreifen oder einen Vorgang ausführen darf, durchläuft das Laufzeit-Sicherheitssystem die Aufrufliste und vergleicht dabei die erteilten Berechtigungen der einzelnen Aufrufer mit den angeforderten Berechtigungen.To determine whether code is authorized to access a resource or perform an operation, the runtime's security system walks the call stack, comparing the granted permissions of each caller to the permission being demanded. Wenn einer der Aufrufer in der Aufrufliste nicht über die angeforderte Berechtigung verfügt, wird eine Sicherheitsausnahme ausgelöst, und der Zugriff wird verweigert.If any caller in the call stack does not have the demanded permission, a security exception is thrown and access is refused. Mit dem Stackwalk sollen Lockangriffe verhindert werden, bei denen weniger vertrauenswürdiger Code äußerst vertrauenswürdigen Code aufruft und verwendet, um nicht autorisierte Aktionen auszuführen.The stack walk is designed to help prevent luring attacks, in which less-trusted code calls highly trusted code and uses it to perform unauthorized actions. Das Anfordern von Berechtigungen für alle Aufrufer zur Laufzeit beeinträchtigt die Leistung, aber es ist wichtig, den Code vor Lockangriffen durch weniger vertrauenswürdigen Code zu schützen.Demanding permissions of all callers at run time affects performance, but it is essential to help protect code from luring attacks by less-trusted code. Zum Optimieren der Leistung können Sie dafür sorgen, dass der Code weniger Stackwalks durchläuft. Sie müssen dabei jedoch unbedingt darauf achten, dass kein Sicherheitsrisiko entsteht.To optimize performance, you can have your code perform fewer stack walks; however, you must be sure that you do not expose a security weakness whenever you do this.

In der folgenden Abbildung ist der Stackwalk dargestellt, der entsteht, wenn eine Methode in Assembly A4 fordert, dass ihre Aufrufer über Berechtigung P verfügen.The following illustration shows the stack walk that results when a method in Assembly A4 demands that its callers have permission P.

Code ZugriffssicherheitCode access security
Sicherheits-StackwalkSecurity stack walk

TitelTitle BeschreibungDescription
Grundlagen der CodezugriffssicherheitCode Access Security Basics Beschreibt die Codezugriffssicherheit und die häufigsten Anwendungsbereiche.Describes code access security and its most common uses.
Sicherheits transparenter Code, Ebene 2Security-Transparent Code, Level 2 Beschreibt das Sicherheits Transparenz Modell in der .NET Framework 4.Describes the security transparency model in the .NET Framework 4.
Verwenden von Bibliotheken aus teilweise vertrauenswürdigem CodeUsing Libraries from Partially Trusted Code Beschreibt das Aktivieren von Bibliotheken zur Verwendung mit nicht verwaltetem Code und das Verwenden von Bibliotheken aus nicht verwaltetem Code.Describes how to enable libraries for use with unmanaged code and how to use libraries from unmanaged code.
Schlüsselbegriffe der SicherheitKey Security Concepts Bietet eine Übersicht über viele Schlüsselbegriffe und -konzepte, die im Sicherheitssystem von .NET Framework verwendet werden.Provides an overview of many of the key terms and concepts used in the .NET Framework security system.
Rollenbasierte SicherheitRole-Based Security Beschreibt die Integration von Sicherheit basierend auf Rollen.Describes how to incorporate security based on roles.
Cryptographic ServicesCryptographic Services Beschreibt die Integration von Kryptografie in Anwendungen.Describes how to incorporate cryptography into your applications.