Share via


Codezugriffssicherheit

Auf modernen, hochgradig vernetzten Computersystemen befindet sich häufig Code aus unterschiedlichen, teilweise auch unbekannten Quellen. Code kann an E-Mail-Nachrichten angehängt, in Dokumenten enthalten oder aus dem Internet heruntergeladen sein. Zahlreiche Computerbenutzer waren schon direkt von bösartigem mobilem Code betroffen, beispielsweise von Viren oder Würmern, die Daten beschädigen oder zerstören und deren Beseitigung zeit- und kostenintensiv ist.

Bei den gängigen Sicherheitsverfahren werden Benutzern Rechte auf Grundlage der Anmeldeinformationen (üblicherweise des Kennworts) verliehen, und der Zugriff auf Ressourcen, bei denen es sich häufig um Verzeichnisse und Dateien handelt, wird eingeschränkt. Bei diesem Ansatz werden jedoch mehrere Probleme nicht berücksichtigt: Benutzer rufen Code aus vielen Quellen ab, von denen einige u. U. nicht verlässlich sind. Der Code kann Fehler oder Sicherheitsrisiken enthalten, die eine Angriffsfläche für bösartigen Code darstellen, und sich u. U. unvorhersehbar verhalten. Wird bösartige oder fehlerhafte Software ausgeführt, kann dies die Beschädigung des Computersystems oder das Ausspähen privater Daten zur Folge haben. Bei den meisten Sicherheitsverfahren für Betriebssysteme muss sämtlicher Code, der ausgeführt werden soll, vollständig vertrauenswürdig sein. Skripts auf einer Webseite können davon ausgenommen sein. Daher ist ein umfassend einsetzbares Sicherheitsverfahren erforderlich, das die geschützte Ausführung von Code aus einem Computersystem auf einem anderen System ermöglicht, selbst wenn keine gegenseitige Vertrauensstellung der Systeme besteht.

.NET Framework stellt ein als Codezugriffssicherheit bezeichnetes Sicherheitsverfahren zur Verfügung, das 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. Mit der Codezugriffssicherheit wird die Vertrauenswürdigkeit von Code in Abhängigkeit seiner Herkunft und weiterer Identitätsmerkmale ermittelt. Um die Menge von Code zu verringern, für dessen Ausführung vollständige Vertrauenswürdigkeit erforderlich ist, werden die Vertrauensebenen für Code durch die Codezugriffssicherheit erzwungen. Durch den Einsatz der Codezugriffssicherheit wird die Wahrscheinlichkeit gesenkt, dass Code von bösartigem oder fehlerhaftem Code missbraucht wird. Hierdurch kann Ihre Haftbarkeit verringert werden, da die Vorgänge angegeben werden können, die vom Code ausgeführt werden dürfen. Codezugriffssicherheit kann auch den Schaden begrenzen, der durch Sicherheitsanfälligkeiten im Code entstehen kann.

HinweisHinweis

Im .NET Framework, Version 4 wurden an der Codezugriffssicherheit wesentliche Änderungen vorgenommen.Die wichtigste Änderung betraf die Sicherheitstransparenz, aber es wurden noch weitere bedeutende Änderungen hinsichtlich der Codezugriffssicherheit vorgenommen.Weitere Informationen über diese Änderungen finden Sie unter Änderungen der Sicherheit in .NET Framework 4.

Die Codezugriffssicherheit wirkt sich hauptsächlich auf Bibliothekscode und teilweise vertrauenswürdige Anwendungen aus. Entwickler von Bibliotheken müssen ihren Code vor nicht autorisiertem Zugriff von teilweise vertrauenswürdigen Anwendungen schützen. Teilweise vertrauenswürdige Anwendungen sind Anwendungen, die aus externen Quellen, z. B. dem Internet, stammen. Auf dem Desktop oder im lokalen Intranet installierte Anwendungen sind voll vertrauenswürdig. Sofern sie nicht als sicherheitstransparent markiert wurden, werden vollständig vertrauenswürdige Anwendungen von der Codezugriffssicherheit in ihrer Ausführung nicht beeinträchtigt, da sie voll vertrauenswürdig sind. Mit dem SecurityTransparentAttribute-Attribut gekennzeichnete Anwendungen können jedoch keinen Code aufrufen, der mit dem SecurityCriticalAttribute-Attribut gekennzeichnet wurde. Dies ist die einzige Einschränkung für vollständig vertrauenswürdige Anwendungen. Teilweise vertrauenswürdige Anwendungen müssen in einem Sandkasten (z. B. in Internet Explorer) ausgeführt werden, damit Codezugriffssicherheit verwendet werden kann. Wenn Sie eine Anwendung aus dem Internet herunterladen und sie vom Desktop aus auszuführen möchten, löst diese eine NotSupportedException aus. Zusätzlich erhalten Sie eine Fehlermeldung über den gescheiterten Versuch, eine Assembly von einem Netzwerkspeicherort zu laden. In dieser Version von .NET Framework wird die CAS-Richtlinie standardmäßig nicht aktiviert, dieser Ladevorgang kann daher gefährlich sein." Wenn Sie sicher sind, dass die Anwendung vertrauenswürdig ist, können Sie sie über das <loadFromRemoteSources>-Element für die Ausführung mit voller Vertrauenswürdigkeit festlegen. Weitere Informationen zur Ausführung einer Anwendung in einer Sandbox finden Sie unter Gewusst wie: Ausführen von teilweise vertrauenswürdigem Code in einer Sandbox.

Die Vorteile der Codezugriffssicherheit gelten für den gesamten verwalteten Code, der für die Common Language Runtime geschrieben wird, selbst wenn dieser die Codezugriffssicherheit nicht aufruft. Weitere Informationen finden Sie unter Grundlagen der Codezugriffssicherheit.

Hauptfunktionen der Codezugriffssicherheit

Durch die Codezugriffssicherheit wird der Codezugriff auf geschützte Ressourcen und Vorgänge eingeschränkt. In .NET Framework führt die Codezugriffssicherheit folgende Funktionen aus:

  • Sie definiert Berechtigungen und Berechtigungssätze, die das Recht des Zugriffs auf bestimmte Systemressourcen darstellen.

  • Sie ermöglicht es, dass ein Benutzer für das Aufrufen von Code über bestimmte Berechtigungen verfügen muss.

  • Sie ermöglicht es, dass ein Benutzer für das Aufrufen von Code über eine digitale Signatur verfügen muss, sodass ausschließlich Aufrufer von einer bestimmten Organisation oder einer bestimmten Site den geschützten Code aufrufen können.

  • Sie erzwingt Einschränkungen für Code zur Laufzeit, indem die erteilten Berechtigungen der einzelnen Aufrufer in der Aufrufliste mit den benötigten Berechtigungen für den Aufruf verglichen werden.

Durchlaufen der Aufrufliste

Um zu bestimmen, ob Code über die erforderliche Berechtigung zum Zugreifen auf eine Ressource oder zum Ausführen einer Operation verfügt, durchläuft das Sicherheitssystem der Laufzeit die Aufrufliste und vergleicht die erteilten Berechtigungen der einzelnen Aufrufer mit der geforderten Berechtigung. Wenn ein Aufrufer in der Aufrufliste nicht über die geforderte Berechtigung verfügt, wird eine Sicherheitsausnahme ausgelöst, und der Zugriff wird verweigert. Der Stackwalk soll Täuschungsmanöver verhindern, bei denen wenig vertrauenswürdiger Code hoch vertrauenswürdigen Code aufruft und dadurch unzulässige Operationen ausführt. Das Anfordern von Berechtigungen für alle Aufrufer zur Laufzeit setzt die Leistung herab, ist jedoch unerlässlich, um Code vor Täuschungsmanövern durch wenig vertrauenswürdigen Code zu schützen. Zum Optimieren der Leistung können Sie festlegen, dass der Code weniger Stackwalks durchführt. Dabei müssen Sie jedoch darauf achten, dass Sie kein Sicherheitsrisiko eingehen.

Die folgende Abbildung zeigt den Stackwalk, der entsteht, wenn eine Methode in Assembly A4 fordert, dass ihre Aufrufer über Berechtigung P verfügen.

Sicherheitsstackwalk

Codezugriffssicherheit

Verwandte Themen

Titel

Beschreibung

Grundlagen der Codezugriffssicherheit

Beschreibt die Codezugriffssicherheit und die häufigsten Anwendungsgebiete.

Sicherheitstransparenter Code, Ebene 2

Beschreibt das Sicherheitstransparenzmodell in .NET Framework 4.

Verwenden von Bibliotheken aus teilweise vertrauenswürdigem Code

Beschreibt das Aktivieren von Bibliotheken zur Verwendung mit nicht verwaltetem Code und das Verwenden von Bibliotheken aus nicht verwaltetem Code.

Erstellen von sicheren Klassenbibliotheken

Enthält Sicherheitsüberlegungen für Klassenbibliotheken.

Erstellen von eigenen Codezugriffsberechtigungen

Beschreibt das Erstellen eigener Berechtigungen.

Schlüsselbegriffe der Sicherheit

Bietet eine Übersicht über zahlreiche Schlüsselbegriffe und -konzepte im Sicherheitssystem von .NET Framework.

Rollenbasierte Sicherheit

Beschreibt die Einführung von Sicherheit auf der Grundlage von Rollen.

Kryptografische Dienste

Beschreibt die Einbindung von Kryptografie in Anwendungen.

Sicherheitstools (.NET Framework)

Beschreibt die Tools zum Implementieren und Verwalten des Sicherheitssystems in .NET Framework.