Delen via


Beveiligingsoverwegingen voor assembly's

Wanneer u een assembly bouwt, kunt u een set machtigingen opgeven die de assembly moet uitvoeren. Of bepaalde machtigingen wel of niet aan een assembly worden verleend, is gebaseerd op bewijs.

Er zijn twee verschillende manieren waarop bewijs wordt gebruikt:

  • Het invoerbewijs wordt samengevoegd met het bewijs dat door het laadprogramma wordt verzameld om een definitieve set bewijsmateriaal te maken dat wordt gebruikt voor beleidsresolutie. De methoden die gebruikmaken van dit semantische zijn Assembly.Load, Assembly.LoadFrom en Activator.CreateInstance.

  • Het invoerbewijs wordt ongewijzigd gebruikt als de definitieve set bewijzen die worden gebruikt voor beleidsoplossing. De methoden die gebruikmaken van deze semantische omvatten Assembly.Load(byte[]) en AppDomain.DefineDynamicAssembly().

    Optionele machtigingen kunnen worden verleend door het beveiligingsbeleid dat is ingesteld op de computer waarop de assembly wordt uitgevoerd. Als u wilt dat uw code alle mogelijke beveiligingsonderzondering afhandelt, kunt u een van de volgende handelingen uitvoeren:

  • Voeg een machtigingsaanvraag in voor alle machtigingen die uw code moet hebben en verhandel de laadtijdfout die optreedt als de machtigingen niet worden verleend.

  • Gebruik geen machtigingsaanvraag om machtigingen te verkrijgen die uw code mogelijk nodig heeft, maar wees voorbereid om beveiligingsonderzonderingen af te handelen als er geen machtigingen worden verleend.

    Notitie

    Beveiliging is een complex gebied en u hebt veel opties waaruit u kunt kiezen. Zie Belangrijke beveiligingsconcepten voor meer informatie.

Tijdens het laden wordt het bewijsmateriaal van de assembly gebruikt als invoer voor het beveiligingsbeleid. Beveiligingsbeleid wordt ingesteld door de onderneming en de beheerder van de computer, evenals door gebruikersbeleidsinstellingen en bepaalt de set machtigingen die worden verleend aan alle beheerde code wanneer deze wordt uitgevoerd. Beveiligingsbeleid kan worden ingesteld voor de uitgever van de assembly (als deze een handtekeningprogramma heeft gegenereerd), voor de website en zone (een Internet Explorer-concept) waaruit de assembly is gedownload, of voor de sterke naam van de assembly. De beheerder van een computer kan bijvoorbeeld beveiligingsbeleid instellen waarmee alle code die is gedownload van een website en ondertekend door een bepaald softwarebedrijf toegang heeft tot een database op een computer, maar geen toegang verleent tot schrijven naar de schijf van de computer.

Krachtige assembly's en ondertekeningshulpprogramma's

Waarschuwing

Vertrouw niet op sterke namen voor beveiliging. Ze bieden alleen een unieke identiteit.

U kunt een assembly op twee verschillende maar complementaire manieren ondertekenen: met een sterke naam of met behulp van SignTool.exe (tekenprogramma). Als u een assembly met een sterke naam ondertekent, wordt versleuteling van openbare sleutels toegevoegd aan het bestand dat het assemblymanifest bevat. Sterke naamondertekening helpt bij het controleren van de uniekheid van namen, het voorkomen van adresvervalsing van namen en het opgeven van een bepaalde identiteit wanneer een verwijzing wordt omgezet.

Er is geen vertrouwensniveau gekoppeld aan een sterke naam, waardoor SignTool.exe (sign tool) belangrijk is. Voor de twee hulpprogramma's voor ondertekening is een uitgever vereist om zijn identiteit te bewijzen aan een externe instantie en een certificaat te verkrijgen. Dit certificaat wordt vervolgens ingesloten in uw bestand en kan worden gebruikt door een beheerder om te bepalen of de echtheid van de code moet worden vertrouwd.

U kunt zowel een sterke naam als een digitale handtekening geven die is gemaakt met behulp van SignTool.exe (sign tool) aan een assembly, of u kunt deze alleen gebruiken. De twee hulpprogramma's voor ondertekening kunnen slechts één bestand tegelijk ondertekenen; voor een assembly met meerdere bestanden ondertekent u het bestand dat het assemblymanifest bevat. Een sterke naam wordt opgeslagen in het bestand met het assemblymanifest, maar een handtekening die is gemaakt met behulp van SignTool.exe (Sign Tool) wordt opgeslagen in een gereserveerde sleuf in het uitvoerbare uitvoerbare bestand (PE) dat het assemblymanifest bevat. Ondertekening van een assembly met behulp van SignTool.exe (tekenprogramma) kan worden gebruikt (met of zonder een sterke naam) wanneer u al een vertrouwenshiërarchie hebt die afhankelijk is van SignTool.exe (sign Tool) gegenereerde handtekeningen, of wanneer uw beleid alleen het sleutelgedeelte gebruikt en geen vertrouwensketen controleert.

Notitie

Wanneer u zowel een sterke naam als een handtekeningtoolhandtekening op een assembly gebruikt, moet eerst de sterke naam worden toegewezen.

De algemene taalruntime voert ook een hash-verificatie uit; het assemblymanifest bevat een lijst met alle bestanden waaruit de assembly bestaat, inclusief een hash van elk bestand zoals het bestond toen het manifest werd gebouwd. Wanneer elk bestand wordt geladen, wordt de inhoud ervan gehasht en vergeleken met de hash-waarde die is opgeslagen in het manifest. Als de twee hashes niet overeenkomen, kan de assembly niet worden geladen.

Sterke naamgeving en ondertekening met behulp van SignTool.exe (Sign Tool) garanderen integriteit via digitale handtekeningen en certificaten. Alle technologieën die worden genoemd, namelijk hashverificatie, sterke naamgeving en ondertekening met behulp van SignTool.exe (Sign Tool), werken samen om ervoor te zorgen dat de assembly op geen enkele manier is gewijzigd.

Zie ook