Code Toegangsbeveiliging - Code Access Security

Code Access Security (CAS), in het Microsoft .NET- framework, is de oplossing van Microsoft om te voorkomen dat niet-vertrouwde code geprivilegieerde acties uitvoert. Wanneer de CLR een assemblage laadt , zal het bewijs voor de assemblage verkrijgen en dit gebruiken om de codegroep te identificeren waartoe de assemblage behoort. Een codegroep bevat een machtigingenset (een of meer machtigingen ). Code die presteert een bevoorrechte actie zal een code toegang tot het uitvoeren van de vraag die zal leiden tot de CLR te lopen de call stack en onderzoekt de toestemmingenverzameling verleend aan de assemblage van elke methode in de call-stack. De codegroepen en machtigingensets worden bepaald door de beheerder van de machine die het beveiligingsbeleid definieert .

Bewijs

Bewijs kan alle informatie zijn die verband houdt met een assemblage. De standaardbewijzen die worden gebruikt door .NET-codetoegangsbeveiliging zijn:

  • Application directory: de directory waarin een assembly staat.
  • Publisher: de digitale handtekening van de uitgever van de assembly (hiervoor moet de assembly worden ondertekend via Authenticode ).
  • URL : de volledige URL van waaruit de assembly is gestart
  • Site: de hostnaam van de URL/Remote Domain/VPN.
  • Zone: de veiligheidszone waar de assembly zich bevindt
  • Hash : een cryptografische hash van de assembly, die een specifieke versie identificeert.
  • Strong Name: een combinatie van de assembly-naam, versie en openbare sleutel van de ondertekeningssleutel die wordt gebruikt om de assembly te ondertekenen. De ondertekeningssleutel is geen X.509- certificaat, maar een aangepast sleutelpaar dat is gegenereerd door de sterke naamgevingstool, SN.EXE of door Visual Studio .

Een ontwikkelaar kan gebruik maken van custom evidence (zogenaamde assembly evidence) maar hiervoor is het schrijven van een security assembly nodig en in versie 1.1 van .NET werkt deze faciliteit niet.

Bewijs op basis van een hash van de assembly is eenvoudig in code te verkrijgen. In C# kan bijvoorbeeld bewijs worden verkregen door de volgende codeclausule:

this.GetType().Assembly.Evidence

Beleid

Een beleid is een reeks uitdrukkingen die gebruikmaakt van bewijs om het lidmaatschap van een codegroep te bepalen. Een codegroep geeft een machtigingenset voor de assemblages binnen die groep. Er zijn vier beleidsregels in .NET:

  • Enterprise: beleid voor een familie van machines die deel uitmaken van een Active Directory- installatie.
  • Machine: beleid voor de huidige machine.
  • Gebruiker: beleid voor de aangemelde gebruiker.
  • AppDomain: beleid voor het uitvoerende applicatiedomein.

De eerste drie beleidsregels worden opgeslagen in XML- bestanden en worden beheerd via de .NET Configuration Tool 1.1 (mscorcfg.msc). Het uiteindelijke beleid wordt beheerd via code voor het huidige toepassingsdomein.

Codetoegangsbeveiliging zal het bewijs van een assembly voor elk beleid presenteren en vervolgens de kruising (dat zijn de machtigingen die gemeenschappelijk zijn voor alle gegenereerde machtigingensets) als de machtigingen die aan de assembly zijn verleend.

Standaard geven het Enterprise-, User- en AppDomain-beleid volledig vertrouwen (dat wil zeggen dat alle assembly's alle machtigingen mogen hebben) en is het Machine-beleid restrictiever. Aangezien de kruising is genomen, betekent dit dat de definitieve machtigingenset wordt bepaald door het machinebeleid.

Merk op dat het beleidssysteem is geëlimineerd in .NET Framework 4.0.

Code groep

Codegroepen koppelen een bewijsstuk aan een benoemde machtigingenset. De beheerder gebruikt de .NET-configuratietool om een ​​bepaald type bewijs (bijvoorbeeld site) en een bepaalde waarde voor dat bewijs (bijvoorbeeld www.mysite.com) op te geven en identificeert vervolgens de machtigingenset die de codegroep zal zijn toegekend.

eisen

Code die een bevoorrechte actie uitvoert, vraagt ​​om een ​​of meer machtigingen. De vraag zorgt ervoor dat de CLR door de call-stack loopt en voor elke methode zorgt de CLR ervoor dat de gevraagde machtigingen zich in de door de methode verleende machtigingen bevinden. Als de toestemming niet dan wordt verleend security uitzondering wordt gegooid. Dit voorkomt dat gedownloade code geprivilegieerde acties uitvoert. Als een assembly bijvoorbeeld wordt gedownload van een niet-vertrouwde site, heeft de assembly geen bestands-IO-machtigingen en dus als deze assembly probeert toegang te krijgen tot een bestand, wordt een uitzondering gegenereerd die de aanroep verhindert.

Referenties