Code Access Security - Code Access Security

Code Access Security (CAS), i Microsoft .NET framework, er Microsofts løsning for å forhindre upålitelig kode i å utføre privilegerte handlinger. Når CLR laster en enhet , vil den skaffe bevis for enheten og bruke denne til å identifisere kodegruppen som enheten tilhører. En kodegruppe inneholder et tillatelsessett (en eller flere tillatelser ). Kode som utfører en privilegert handling vil utføre et krav om tilgang til kode som vil få CLR til å gå opp i anropsstakken og undersøke tillatelsessettet som er gitt til montering av hver metode i samtalestakken. Kodegruppene og tillatelsessettene bestemmes av administratoren av maskinen som definerer sikkerhetspolicyen .

Bevis

Bevis kan være all informasjon knyttet til en samling. Standardbevisene som brukes av .NET -kode tilgangssikkerhet er:

  • Applikasjonskatalog: katalogen der en samling befinner seg.
  • Utgiver: forsamlingens forlags digitale signatur (krever at forsamlingen signeres via Authenticode ).
  • URL : den fullstendige URL -en der monteringen ble lansert fra
  • Nettsted: vertsnavnet til nettadressen/eksternt domene/VPN.
  • Sone: sikkerhetssonen der forsamlingen befinner seg
  • Hash : en kryptografisk hash av forsamlingen, som identifiserer en bestemt versjon.
  • Sterkt navn: en kombinasjon av forsamlingsnavn, versjon og offentlig nøkkel for signeringsnøkkelen som brukes til å signere forsamlingen. Signeringsnøkkelen er ikke et X.509 -sertifikat, men et tilpasset nøkkelpar generert av det sterke navneverktøyet, SN.EXE eller av Visual Studio .

En utvikler kan bruke egendefinert bevis (såkalt montering bevis), men dette krever å skrive en sikkerhetsenhet og i versjon 1.1 av .NET fungerer ikke dette anlegget.

Bevis basert på en hash av enheten er lett å få tak i i kode. For eksempel, i C# , kan bevis innhentes med følgende kodeklausul:

this.GetType().Assembly.Evidence

Politikk

En policy er et sett med uttrykk som bruker bevis for å bestemme et kodegruppemedlemskap. En kodegruppe gir et tillatelsessett for samlingene i gruppen. Det er fire policyer i .NET:

  • Enterprise: policy for en familie av maskiner som er en del av en Active Directory -installasjon.
  • Maskin: policy for den nåværende maskinen.
  • Bruker: retningslinjer for den påloggede brukeren.
  • AppDomain: policy for det kjørende applikasjonsdomenet.

De tre første retningslinjene lagres i XML -filer og administreres gjennom .NET Configuration Tool 1.1 (mscorcfg.msc). Den endelige policyen administreres gjennom kode for det gjeldende applikasjonsdomenet.

Kode tilgangssikkerhet vil presentere en forsamlings bevis for hver policy og deretter ta krysset (det er tillatelsene som er felles for alle de genererte tillatelsessettene) som tillatelsene gitt til forsamlingen.

Som standard gir Enterprise-, User- og AppDomain -retningslinjene full tillit (det vil si at alle enheter kan ha alle tillatelser), og maskinpolitikken er mer restriktiv. Siden krysset er tatt, betyr dette at det endelige tillatelsessettet bestemmes av maskinpolicyen.

Vær oppmerksom på at policy -systemet er eliminert i .NET Framework 4.0.

Kodegruppe

Kodegrupper knytter et bevis til et navngitt tillatelsessett. Administratoren bruker .NET Configuration Tool til å spesifisere en bestemt type bevis (for eksempel nettsted) og en bestemt verdi for det beviset (for eksempel www.mysite.com) og identifiserer deretter tillatelsessettet som kodegruppen vil være innvilget.

Krav

Kode som utfører noen privilegerte handlinger vil stille krav om en eller flere tillatelser. Kravet får CLR til å gå anropsstakken, og for hver metode vil CLR sikre at de nødvendige tillatelsene er i metodens forsamlings gitte tillatelser. Dersom tillatelse ikke gis deretter en sikkerhets unntak blir kastet. Dette forhindrer nedlastet kode i å utføre privilegerte handlinger. For eksempel, hvis en samling lastes ned fra et nettsted som ikke er klarert, vil forsamlingen ikke ha noen fil -IO -tillatelser, og hvis denne forsamlingen prøver å få tilgang til en fil, vil det komme et unntak som forhindrer anropet.

Referanser