Sicherheitstransparenter CodeSecurity-Transparent Code

Achtung

Code Zugriffssicherheit (Code Access Security, CAS) und teilweise vertrauenswürdiger CodeCode Access Security (CAS) 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).

CAS wird in .net Core, .net 5 oder höheren Versionen nicht unterstützt. CAS werden von Versionen von c# höher als 7,0 nicht unterstützt.CAS is not supported in .NET Core, .NET 5, or later versions. CAS is not supported by versions of C# later than 7.0.

CAS in .NET Framework sollten nicht als Mechanismus zum Erzwingen von Sicherheitsgrenzen auf der Grundlage von Code Ursprungs oder anderen Identitäts Aspekten verwendet werden.CAS in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. CAS und Security-Transparent Code werden nicht als Sicherheits Begrenzung mit teilweise vertrauenswürdigem Code unterstützt, insbesondere bei Code mit unbekannter Herkunft.CAS and Security-Transparent Code are not 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. .NET Framework gibt keine Sicherheitspatches für Exploits mit Rechte Erweiterungen aus, die möglicherweise für den CAS-Sandkasten erkannt werden..NET Framework will not issue security patches for any elevation-of-privilege exploits that might be discovered against the CAS sandbox.

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.

Sicherheit schließt drei interagierende Elemente ein: Sandkasten, Berechtigungen und Erzwingung.Security involves three interacting pieces: sandboxing, permissions, and enforcement. Unter einem Sandkasten versteht man das Erstellen isolierter Domänen, in denen bestimmter Code als vollständig vertrauenswürdig und sonstiger Code auf die Berechtigungen im Berechtigungssatz für den Sandkasten beschränkt ist.Sandboxing refers to the practice of creating isolated domains where some code is treated as fully trusted and other code is restricted to the permissions in the grant set for the sandbox. Der Anwendungscode, der innerhalb des Berechtigungssatzes des Sandkastens ausgeführt wird, wird als transparent betrachtet, das heißt, es können keine Vorgänge ausgeführt werden, die sich auf die Sicherheit auswirken können.The application code that runs within the grant set of the sandbox is considered to be transparent; that is, it cannot perform any operations that can affect security. Der Berechtigungssatz für den Sandkasten wird durch Beweis bestimmt (Evidence-Klasse).The grant set for the sandbox is determined by evidence (Evidence class). Beweise geben Aufschluss darüber, welche bestimmten Berechtigungen von Sandkästen benötigt werden, und welche Arten von Sandkästen erstellt werden.Evidence identifies what specific permissions are required by sandboxes, and what kinds of sandboxes can be created. Erzwingung bedeutet, dass transparenter Code nur innerhalb seines Berechtigungssatzes ausgeführt werden darf.Enforcement refers to allowing transparent code to execute only within its grant set.

Wichtig

Die Sicherheitsrichtlinie war ein Schlüsselelement in früheren Versionen von .NET Framework.Security policy was a key element in previous versions of the .NET Framework. Ab .NET Framework 4 ist die Sicherheitsrichtlinie veraltet.Starting with the .NET Framework 4, security policy is obsolete. Die Beseitigung der Sicherheitsrichtlinie geschieht getrennt von der Sicherheitstransparenz.The elimination of security policy is separate from security transparency. Informationen zu den Auswirkungen dieser Änderung finden Sie unter Kompatibilität und Migration von Richtlinien für die Code Zugriffssicherheit.For information about the effects of this change, see Code Access Security Policy Compatibility and Migration.

Zweck des TransparenzmodellsPurpose of the Transparency Model

Transparenz ist ein Erzwingungsmechanismus, mit dem Code, der als Teil der Anwendung von Code ausgeführt wird, der wiederum als Teil der Infrastruktur ausgeführt wird.Transparency is an enforcement mechanism that separates code that runs as part of the application from code that runs as part of the infrastructure. Transparenz unterscheidet zwischen Code, in dem privilegierte Aktionen wie das Aufrufen von systemeigenem Code ausgeführt werden können (sicherheitsrelevanter Code), und Code, in dem dies nicht möglich ist (transparenter Code).Transparency draws a barrier between code that can do privileged things (critical code), such as calling native code, and code that cannot (transparent code). In transparentem Code können Befehle in den Grenzen des Berechtigungssatzes, in denen der Code verwendet wird, ausgeführt werden. Es ist jedoch nicht möglich, dass mit transparentem Code wichtiger Code ausgeführt und davon abgeleitet wird bzw. er darf keinen wichtigen Code enthalten.Transparent code can execute commands within the bounds of the permission set it is operating in, but cannot execute, derive from, or contain critical code.

Das primäre Ziel der Transparenzerzwingung besteht darin, einen einfachen, effektiven Mechanismus für die Isolation verschiedener Codegruppen auf Grundlage von Rechten bereitzustellen.The primary goal of transparency enforcement is to provide a simple, effective mechanism for isolating different groups of code based on privilege. Innerhalb des Kontexts des Sandkastenmodells sind diese Rechtegruppen entweder voll vertrauenswürdig (das heißt, sie unterliegen keine Einschränkungen) oder teilweise vertrauenswürdig (das heißt, sie sind auf den Berechtigungssatz beschränkt, der dem Sandkasten gewährt wurde).Within the context of the sandboxing model, these privilege groups are either fully trusted (that is, not restricted) or partially trusted (that is, restricted to the permission set granted to the sandbox).

Wichtig

Das Transparenzmodell geht über Codezugriffssicherheit hinaus.The transparency model transcends code access security. Transparenz wird vom Just-In-Time-Compiler erzwungen und bleibt unabhängig vom Berechtigungssatz für eine Assembly in Kraft, einschließlich vollständiger Vertrauenswürdigkeit.Transparency is enforced by the just-in-time compiler and remains in effect regardless of the grant set for an assembly, including full trust.

Transparenz wurde in .NET Framework, Version 2.0, eingeführt, um das Sicherheitsmodell zu vereinfachen und das Schreiben und Bereitstellen von sicheren Bibliotheken und Anwendungen zu erleichtern.Transparency was introduced in the .NET Framework version 2.0 to simplify the security model, and to make it easier to write and deploy secure libraries and applications. Transparenter Code wird auch in Microsoft Silverlight verwendet, um die Entwicklung von teilweise vertrauenswürdigen Anwendungen zu vereinfachen.Transparent code is also used in Microsoft Silverlight, to simplify the development of partially trusted applications.

Hinweis

Wenn Sie eine teilweise vertrauenswürdige Anwendung entwickeln, beachten Sie die Berechtigungsanforderungen für die Zielhosts.When you develop a partially trusted application, you have to be aware of the permission requirements for your target hosts. Sie können eine Anwendung entwickeln, die Ressourcen verwendet, die von einigen Hosts nicht zugelassen werden.You can develop an application that uses resources that are not allowed by some hosts. Diese Anwendung wird ohne Fehler kompiliert, schlägt jedoch fehl, wenn sie in die gehostete Umgebung geladen wird.This application will compile without error, but will fail when it is loaded into the hosted environment. Wenn Sie die Anwendung mit Visual Studio entwickelt haben, können Sie in der Entwicklungsumgebung das Debuggen in teilweiser Vertrauenswürdigkeit oder in einem eingeschränkten Berechtigungssatz aktivieren.If you have developed your application using Visual Studio, you can enable debugging in partial trust or in a restricted permission set from the development environment. Weitere Informationen finden Sie unter How to: Debug a ClickOnce Application with Restricted Permissions.For more information, see How to: Debug a ClickOnce Application with Restricted Permissions. Die für ClickOnce-Anwendungen bereitgestellte Funktion zur Berechnung von Berechtigungen ist auch für jede beliebige teilweise vertrauenswürdige Anwendung verfügbar.The Calculate Permissions feature provided for ClickOnce applications is also available for any partially trusted application.

Angeben der TransparenzebeneSpecifying the Transparency Level

Das SecurityRulesAttribute-Attribut auf Assemblyebene wählt explizit die SecurityRuleSet-Regeln aus, nach denen sich die Assembly richtet.The assembly-level SecurityRulesAttribute attribute explicitly selects the SecurityRuleSet rules that the assembly will follow. Die Regeln werden unter einem System mit numerischen Ebenen organisiert, wobei höhere Ebenen eine strengere Erzwingung von Sicherheitsregeln bedeuten.The rules are organized under a numeric level system, where higher levels mean tighter enforcement of security rules.

Die Ebenen lauten folgendermaßen:The levels are as follows:

  • Ebene 2 ( Level2 ) – die Transparenzregeln für .NET Framework 4.Level 2 (Level2) – the .NET Framework 4 transparency rules.

  • Ebene 1 (Level1) – die .NET Framework 2.0-Transparenzregeln.Level 1 (Level1) – the .NET Framework 2.0 transparency rules.

Der primäre Unterschied zwischen den zwei Transparenzebenen besteht darin, dass auf Ebene 1 keine Transparenzregeln für Aufrufe von außerhalb der Assembly erzwungen werden und dass diese Ebene nur für Kompatibilität vorgesehen ist.The primary difference between the two transparency levels is that level 1 does not enforce transparency rules for calls from outside the assembly and is intended only for compatibility.

Wichtig

Geben Sie Transparenz der Ebene 1 nur für Kompatibilität an, das heißt, geben Sie Ebene 1 nur für Code an, der mit .NET Framework 3.5 oder niedriger entwickelt wurde und für den das AllowPartiallyTrustedCallersAttribute-Attribut verwendet bzw. für den das Transparenzmodell nicht verwendet wird.You should specify level 1 transparency for compatibility only; that is, specify level 1 only for code that was developed with the .NET Framework 3.5 or earlier that uses the AllowPartiallyTrustedCallersAttribute attribute or does not use the transparency model. Verwenden Sie Transparenz der Ebene 1 z. B. für .NET Framework 2.0-Assemblys, die Aufrufe von teilweise vertrauenswürdigen Aufrufern (APTCA) ermöglichen.For example, use level 1 transparency for .NET Framework 2.0 assemblies that allow calls from partially trusted callers (APTCA). Verwenden Sie für Code, der für die .NET Framework 4 entwickelt wurde, immer Transparenz der Ebene 2.For code that is developed for the .NET Framework 4, always use level 2 transparency.

Transparenz der Ebene 2Level 2 Transparency

Transparenz der Ebene 2 wurde in der .NET Framework 4 eingeführt.Level 2 transparency was introduced in the .NET Framework 4. Die drei Grundsätze dieses Modells sind transparenter Code, sicherheitsgeschützter Code und sicherheitskritischer Code.The three tenets of this model are transparent code, security-safe-critical code, and security-critical code.

  • Transparenter Code kann unabhängig von den Berechtigungen, die er erhält (einschließlich vollständiger Vertrauenswürdigkeit), nur anderen transparenten Code oder sicherheitsgeschützten Code aufrufen.Transparent code, regardless of the permissions it is granted (including full trust), can call only other transparent code or security-safe-critical code. Wenn der Code teilweise vertrauenswürdig ist, können nur Aktionen ausgeführt werden, die gemäß dem Berechtigungssatz der Domäne zulässig sind.If the code is partially trusted, it can only perform actions that are allowed by the domain’s permission set. Transparenter Code ist nicht für die folgenden Vorgänge vorgesehen:Transparent code cannot do the following:

    • Ausführen eines Assert-Vorgangs oder einer Berechtigungserweiterung.Perform an Assert operation or elevation of privilege.

    • Der Code darf keinen unsicheren oder nicht überprüfbaren Code enthalten.Contain unsafe or unverifiable code.

    • Direktes Aufrufen von wichtigem Code.Directly call critical code.

    • Aufrufen von systemeigenen Code oder von Code, der das SuppressUnmanagedCodeSecurityAttribute-Attribut besitzt.Call native code or code that has the SuppressUnmanagedCodeSecurityAttribute attribute.

    • Aufrufen eines Members, der von einem LinkDemand-Feld geschützt wird.Call a member that is protected by a LinkDemand.

    • Erben von wichtigen Typen.Inherit from critical types.

      Außerdem können transparente Methoden keine wichtigen virtuellen Methoden überschreiben oder wichtige Schnittstellenmethoden implementieren.In addition, transparent methods cannot override critical virtual methods or implement critical interface methods.

  • Sicherheitsgeschützter Code ist vollständig vertrauenswürdig, kann aber durch transparenten Code aufgerufen werden.Security-safe-critical code is fully trusted but is callable by transparent code. Es macht einen beschränkten Oberflächenbereich mit vollständig vertrauenswürdigen Codes verfügbar.It exposes a limited surface area of full-trust code. Korrektheits- und Sicherheitsüberprüfungen werden in sicherheitsgeschütztem Code ausgeführt.Correctness and security verifications happen in safe-critical code.

  • Mit sicherheitskritischem Code kann jeder Code aufgerufen werden, und er ist vollständig vertrauenswürdig, kann jedoch nicht von transparentem Code aufgerufen werden.Security-critical code can call any code and is fully trusted, but it cannot be called by transparent code.

Transparenz der Ebene 1Level 1 Transparency

Das Transparenzmodell der Ebene 1 wurde in .NET Framework, Version 2.0, eingeführt, um es Entwicklern zu ermöglichen, die Codemenge zu reduzieren, die Sicherheitsüberwachung unterliegt.The level 1 transparency model was introduced in the .NET Framework version 2.0 to enable developers to reduce the amount of code that is subject to a security audit. Obwohl Transparenz der Ebene 1 in Version 2.0 öffentlich verfügbar war, wurde sie hauptsächlich nur bei Microsoft für Sicherheitsüberwachungszwecke verwendet.Although level 1 transparency was publicly available in version 2.0, it was primarily used only within Microsoft for security auditing purposes. Mit Anmerkungen können Entwickler deklarieren, welche Typen und Member Sicherheitserweitungen und andere vertrauenswürdige Aktionen ausführen können (sicherheitsrelevant) und welche nicht (sicherheitstransparent).Through annotations, developers are able to declare which types and members can perform security elevations and other trusted actions (security-critical) and which cannot (security-transparent). Code, der als transparent gekennzeichnet ist, erfordert keine umfassende Sicherheitsüberwachung.Code that is identified as transparent does not require a high degree of security auditing. Transparenz der Ebene 1 gibt an, dass die Transparenzerzwingung auf die Assembly beschränkt ist.Level 1 transparency states that the transparency enforcement is limited to within the assembly. Anders ausgedrückt sind alle öffentlichen Typen oder Member, die als sicherheitskritisch eingestuft werden, nur innerhalb der Assembly sicherheitskritisch.In other words, any public types or members that are identified as security-critical are security-critical only within the assembly. Wenn Sie Sicherheit für diese Typen und die Member erzwingen möchten, wenn sie von außerhalb der Assembly aufgerufen werden, müssen Sie Linkaufrufe für volle Vertrauenswürdigkeit verwenden.If you want to enforce security for those types and members when they are called from outside the assembly, you must use link demands for full trust. Wenn dies nicht der Fall ist, werden öffentlich sichtbare sicherheitskritische Typen und Member als sicherheitsgeschützt behandelt und von teilweise vertrauenswürdigem Code außerhalb der Assembly aufgerufen.If you do not, publicly visible security-critical types and members are treated as security-safe-critical and can be called by partially trusted code outside the assembly.

Für das Transparenzmodell der Ebene 1 gelten die folgenden Einschränkungen:The level 1 transparency model has the following limitations:

  • Auf sicherheitskritische Typen und Member, die öffentlich sind, kann von sicherheitstransparentem Code zugegriffen werden.Security-critical types and members that are public are accessible from security-transparent code.

  • Die Transparenzanmerkungen werden nur innerhalb einer Assembly erzwungen.The transparency annotations are enforced only within an assembly.

  • Sicherheitskritische Typen und Member müssen Sicherheit für Aufrufe von außerhalb der Assembly mithilfe von Linkaufrufen erzwingen.Security-critical types and members must use link demands to enforce security for calls from outside the assembly.

  • Vererbungsregeln werden nicht erzwungen.Inheritance rules are not enforced.

  • Es besteht die Möglichkeit, dass durch transparenten Code schädliche Vorgänge ausgeführt werden, wenn er mit voller Vertrauenswürdigkeit ausgeführt wird.The potential exists for transparent code to do harmful things when run in full trust.

TransparenzerzwingungTransparency Enforcement

Transparenzregeln werden erst erzwungen, wenn Transparenz berechnet wird.Transparency rules are not enforced until transparency is calculated. Zu diesem Zeitpunkt wird eine InvalidOperationException ausgelöst, wenn gegen eine Transparenzregel verstoßen wird.At that time, an InvalidOperationException is thrown if a transparency rule is violated. Die Zeit zur Berechnung der Transparenz hängt von mehreren Faktoren ab und kann nicht vorhergesagt werden.The time that transparency is calculated depends on multiple factors and cannot be predicted. Sie wird so spät wie möglich berechnet.It is calculated as late as possible. Im .NET Framework 4 erfolgt die Berechnung der Transparenz auf Assemblyebene früher als in der .NET Framework 2,0.In the .NET Framework 4, assembly-level transparency calculation occurs sooner than it does in the .NET Framework 2.0. Es ist nur garantiert, dass die Transparenzberechnung ausgeführt wird, wenn sie benötigt wird.The only guarantee is that transparency calculation will occur by the time it is needed. Dies ist vergleichbar mit der Änderung des Punkts durch den Just-In-Time-Compiler, an dem eine Methode kompiliert wird und Fehler in dieser Methode erkannt werden.This is similar to how the just-in-time (JIT) compiler can change the point when a method is compiled and any errors in that method are detected. Die Transparenzberechnung ist unsichtbar, wenn der Code keine Transparenzfehler enthält.Transparency calculation is invisible if your code does not have any transparency errors.

Weitere InformationenSee also