Code-Zugriffssicherheit - Code Access Security
Code Access Security (CAS) im Microsoft .NET Framework ist die Lösung von Microsoft , um zu verhindern, dass nicht vertrauenswürdiger Code privilegierte Aktionen ausführt. Wenn die CLR eine Assembly lädt, ruft sie Beweise für die Assembly ab und verwendet diese, um die Codegruppe zu identifizieren, zu der die Assembly gehört. Eine Codegruppe enthält einen Berechtigungssatz (eine oder mehrere Berechtigungen ). Code dass führt eine privilegierte Aktion einen Code Zugang ausführen Nachfrage , die die CLR den zu Fuß nach oben führen wird Call - Stack und untersuchen Sie den Berechtigungssatz auf die Anordnung jedes gewährt Verfahrens in dem Call - Stack. Die Codegruppen und Berechtigungssätze werden vom Administrator des Computers bestimmt, der die Sicherheitsrichtlinie definiert .
Beweis
Nachweise können alle Informationen sein, die einer Assembly zugeordnet sind. Die Standardnachweise, die von der .NET-Codezugriffssicherheit verwendet werden, sind:
- Anwendungsverzeichnis: das Verzeichnis, in dem sich eine Assembly befindet.
- Herausgeber: die digitale Signatur des Herausgebers der Assembly (erfordert, dass die Assembly über Authenticode signiert wird ).
- URL : die vollständige URL, von der aus die Assembly gestartet wurde
- Site: der Hostname der URL/Remote-Domain/VPN.
- Zone: die Sicherheitszone, in der sich die Baugruppe befindet
- Hash : ein kryptografischer Hash der Assembly, der eine bestimmte Version identifiziert.
- Starker Name: eine Kombination aus Assembly-Name, Version und öffentlichem Schlüssel des Signaturschlüssels, der zum Signieren der Assembly verwendet wird. Der Signaturschlüssel ist kein X.509- Zertifikat, sondern ein benutzerdefiniertes Schlüsselpaar, das vom Strong Naming Tool SN.EXE oder von Visual Studio generiert wird .
Ein Entwickler kann benutzerdefinierte Beweise (sogenannte Assembly-Beweise) verwenden, aber dies erfordert das Schreiben einer Sicherheits-Assembly und in Version 1.1 von .NET funktioniert diese Möglichkeit nicht.
Beweise, die auf einem Hash der Assembly basieren, können leicht im Code abgerufen werden. In C# können Beweise beispielsweise durch die folgende Codeklausel abgerufen werden:
this.GetType().Assembly.Evidence
Politik
Eine Richtlinie ist ein Satz von Ausdrücken, der Beweise verwendet, um eine Codegruppenmitgliedschaft zu bestimmen. Eine Codegruppe gibt einen Berechtigungssatz für die Assemblys innerhalb dieser Gruppe. Es gibt vier Richtlinien in .NET:
- Enterprise: Richtlinie für eine Familie von Computern, die Teil einer Active Directory- Installation sind.
- Maschine: Richtlinie für die aktuelle Maschine.
- Benutzer: Richtlinie für den angemeldeten Benutzer.
- AppDomain: Richtlinie für die ausgeführte Anwendungsdomäne.
Die ersten drei Richtlinien werden in XML- Dateien gespeichert und über das .NET-Konfigurationstool 1.1 (mscorcfg.msc) verwaltet. Die endgültige Richtlinie wird über Code für die aktuelle Anwendungsdomäne verwaltet.
Die Codezugriffssicherheit präsentiert den Beweis einer Assembly für jede Richtlinie und nimmt dann die Schnittmenge (d. h. die Berechtigungen, die allen generierten Berechtigungssätzen gemeinsam sind) als der Assembly erteilte Berechtigungen.
Standardmäßig gewähren die Unternehmens-, Benutzer- und AppDomain-Richtlinien volle Vertrauenswürdigkeit (d. h. sie lassen allen Assemblys alle Berechtigungen zu) und die Maschinenrichtlinie ist restriktiver. Da die Schnittmenge genommen wird, bedeutet dies, dass der endgültige Berechtigungssatz durch die Maschinenrichtlinie bestimmt wird.
Beachten Sie, dass das Richtliniensystem in .NET Framework 4.0 entfernt wurde.
Codegruppe
Codegruppen verknüpfen ein Beweisstück mit einem benannten Berechtigungssatz. Der Administrator verwendet das .NET-Konfigurationstool, um einen bestimmten Beweistyp (z. B. Site) und einen bestimmten Wert für diesen Beweis anzugeben (z. B. www.mysite.com) und identifiziert dann den Berechtigungssatz, den die Codegruppe sein soll gewährt.
Forderungen
Code, der eine privilegierte Aktion ausführt, erfordert eine oder mehrere Berechtigungen. Die Anforderung veranlasst die CLR, die Aufrufliste zu durchlaufen, und für jede Methode stellt die CLR sicher, dass die angeforderten Berechtigungen in den der Assembly der Methode gewährten Berechtigungen enthalten sind. Wenn die Erlaubnis nicht erteilt wird dann eine Sicherheits Ausnahme ausgelöst. Dadurch wird verhindert, dass heruntergeladener Code privilegierte Aktionen ausführt. Wenn beispielsweise eine Assembly von einer nicht vertrauenswürdigen Site heruntergeladen wird, verfügt die Assembly über keine Datei-E/A-Berechtigungen. Wenn diese Assembly versucht, auf eine Datei zuzugreifen, wird eine Ausnahme ausgelöst, die den Aufruf verhindert.