Freigeben über


Überlegungen zur Assemblysicherheit

Wenn Sie eine Assembly erstellen, können Sie einen Satz von Berechtigungen angeben, die die Assembly zum Ausführen benötigt. Das Erteilen bestimmter Berechtigungen für eine Assembly beruht auf Beweisen.

Es gibt zwei verschiedene Methoden, wie Nachweise verwendet werden:

  • Die Eingabebeweise werden mit den vom Ladeprogramm erfassten Beweisen zusammengeführt, um einen endgültigen Beweissatz zu erstellen. Dieser wird für die Richtlinienauflösung verwendet. Zu den Methoden, die diese Semantik verwenden, gehören Assembly.Load, Assembly.LoadFrom und Activator.CreateInstance.

  • Die Eingabebeweise werden unverändert als endgültiger Beweissatz für die Richtlinienauflösung verwendet. Zu den Methoden, die diese Semantik verwenden, gehören Assembly.Load(byte[]) und AppDomain.DefineDynamicAssembly().

    Optionale Berechtigungen können von der Sicherheitsrichtlinie erteilt werden, die auf dem Computer festgelegt ist, auf dem die Assembly ausgeführt wird. Wenn Ihr Code alle potenziellen Sicherheitsausnahmen behandeln soll, können Sie eine der folgenden Aktionen ausführen:

  • Fügen Sie eine Berechtigungsanforderung für alle Berechtigungen ein, über die Ihr Code verfügen muss, und behandeln Sie vorab den Ladezeitfehler, der auftritt, wenn die Berechtigungen nicht erteilt werden.

  • Verwenden Sie keine Berechtigungsanforderung, um Berechtigungen zu erhalten, die Ihr Code möglicherweise benötigt, aber seien Sie vorbereitet, Sicherheitsausnahmen zu behandeln, wenn keine Berechtigungen erteilt werden.

    Hinweis

    Sicherheit ist ein komplexer Bereich, und Sie haben viele Optionen, aus denen Sie wählen können. Weitere Informationen finden Sie unter Schlüsselsicherheitskonzepte.

Zur Ladezeit wird der Beweis der Assembly als Eingabe für die Sicherheitsrichtlinie verwendet. Die Sicherheitsrichtlinie wird vom Unternehmen und vom Administrator des Computers sowie von Benutzerrichtlinieneinstellungen eingerichtet und bestimmt den Satz von Berechtigungen, die allen verwalteten Code gewährt werden, wenn sie ausgeführt werden. Sicherheitsrichtlinien können für den Herausgeber der Assembly (sofern sie über eine mit einem Signaturtool generierte Signatur verfügt), die Website und Zone (ein Konzept aus dem Internet Explorer), von der die Assembly heruntergeladen wurde, oder für den starken Namen der Assembly eingerichtet werden. Der Administrator eines Computers kann z. B. eine Sicherheitsrichtlinie einrichten, mit der der gesamte code, der von einer Website heruntergeladen und von einem bestimmten Softwareunternehmen signiert wurde, auf eine Datenbank auf einem Computer zugreifen kann, jedoch keinen Zugriff auf das Schreiben auf den Datenträger des Computers gewährt.

Assemblys mit starkem Namen und Signierungstools

Warnung

Verlassen Sie sich nicht auf starke Namen für sicherheit. Sie stellen nur eine eindeutige Identität bereit.

Sie können eine Assembly auf zwei unterschiedliche, sich jedoch gegenseitig ergänzende Arten signieren: mit einem starken Namen oder mithilfe von SignTool.exe (Signaturtool). Das Signieren einer Assembly mit einem starken Namen fügt der Datei, die das Assemblymanifest enthält, eine öffentliche Schlüsselverschlüsselung hinzu. Das Signieren mit starkem Namen gewährleistet die Eindeutigkeit der Namen, verhindert das Vortäuschen von Namen (Spoofing) und stellt Aufrufern beim Auflösen eines Verweises eine Identität bereit.

Mit einem starken Namen ist keine Vertrauensebene verknüpft. Daher ist die Verwendung von SignTool.exe (Signaturtool) wichtig. Die beiden Signaturtools erfordern, dass ein Herausgeber seine Identität einer Drittanbieterautorität nachweisen und ein Zertifikat erhält. Dieses Zertifikat wird dann in Ihre Datei eingebettet und kann von einem Administrator verwendet werden, um zu entscheiden, ob die Authentizität des Codes als vertrauenswürdig festgelegt werden soll.

Sie können einer Assembly sowohl einen starken Namen als auch eine digitale Signatur zuweisen, die mithilfe von SignTool.exe (Sign Tool) erstellt wurde, oder Sie können eins von beiden allein verwenden. Die beiden Signaturtools können jeweils nur eine Datei signieren; für eine Multifileassembly signieren Sie die Datei, die das Assemblymanifest enthält. Ein starker Name wird in der Datei gespeichert, die das Assemblymanifest enthält, aber eine signatur, die mit SignTool.exe (Sign Tool) erstellt wurde, wird in einem reservierten Steckplatz in der portablen ausführbaren Datei (PE) gespeichert, die das Assemblymanifest enthält. Eine Assembly kann mit SignTool.exe (Signaturtool) signiert werden (mit oder ohne starken Namen), wenn bereits eine Vertrauenshierarchie auf der Basis von mit SignTool.exe (Signaturtool) generierten Signaturen vorhanden ist oder die Richtlinie nur den Teil mit dem Schlüssel verwendet und keine Kette von Vertrauensstellungen überprüft.

Hinweis

Wenn für eine Assembly sowohl ein starker Name als auch eine Signaturtool-Signatur erforderlich ist, muss zuerst der starke Name zugeordnet werden.

Die Common Language Runtime führt auch eine Hashüberprüfung durch; Das Assemblymanifest enthält eine Liste aller Dateien, aus denen die Assembly besteht, einschließlich eines Hashs jeder Datei, wie sie beim Erstellen des Manifests vorhanden war. Da jede Datei geladen wird, werden deren Inhalte mit Hash versehen und mit dem im Manifest gespeicherten Hashwert verglichen. Wenn die zwei Hashs nicht übereinstimmen, wird die Assembly nicht geladen.

Starke Benennung und Signatur mithilfe vonSignTool.exe (Sign Tool) garantieren integrität durch digitale Signaturen und Zertifikate. Alle genannten Technologien, d. h. Hashüberprüfung, starke Namen und das Signieren mit SignTool.exe (Signaturtool), gewährleisten gemeinsam, dass die Assembly in keiner Weise geändert werden kann.

Siehe auch