Zabezpečení-Transparentní kód

, Author

  • 30.3.2017
  • 6 minut čtení
    • g
    • D
    • m
    • Y
    • s
    • +8

Upozornění

Zabezpečení přístupu ke kódu (CAS) a částečně důvěryhodný kód

Na .NET Framework poskytuje mechanismus pro vynucení různých úrovní důvěryhodnosti různých kódů běžících ve stejné aplikaci, který se nazývá zabezpečení přístupu ke kódu (CAS).

CAS není podporován ve verzích .NET Core, .NET 5 a novějších. CAS není podporován verzemi jazyka C# novějšími než 7.0.

CAS v prostředí .NET Framework by neměl být používán jako mechanismus pro vynucování hranic zabezpečení na základě původu kódu nebo jiných aspektů identity. CAS a Security-Transparent Code nejsou podporovány jako bezpečnostní hranice s částečně důvěryhodným kódem, zejména kódem neznámého původu. Nedoporučujeme načítat a spouštět kód neznámého původu bez zavedení alternativních bezpečnostních opatření. .NET Framework nebude vydávat bezpečnostní záplaty pro případné zneužití zvýšení oprávnění, které by mohlo být objeveno proti sandboxu CAS.

Tato zásada platí pro všechny verze .NET Framework, ale nevztahuje se na .NET Framework obsažený v Silverlightu.

Zabezpečení zahrnuje tři vzájemně se ovlivňující části: sandbox, oprávnění a vynucení. Sandboxing označuje praxi vytváření izolovaných domén, kde je některý kód považován za plně důvěryhodný a jiný kód je omezen na oprávnění v grantu nastaveném pro sandbox. Kód aplikace, který běží v rámci sady oprávnění sandboxu, je považován za transparentní, to znamená, že nemůže provádět žádné operace, které by mohly ovlivnit zabezpečení. Sada oprávnění pro pískoviště je určena evidencí (třída Evidence). Evidence určuje, jaká konkrétní oprávnění sandboxy vyžadují a jaké druhy sandboxů lze vytvořit. Vynucování se týká povolení transparentního kódu ke spuštění pouze v rámci jeho sady oprávnění.

Důležité

Zásady zabezpečení byly klíčovým prvkem v předchozích verzích prostředí .NET Framework. Počínaje verzí .NET Framework 4 je politika zabezpečení zastaralá. Odstranění zásad zabezpečení je odděleno od transparentnosti zabezpečení. Informace o dopadech této změny naleznete v části Kompatibilita a migrace zásad zabezpečení přístupu ke kódu.

Účel modelu transparentnosti

Transparentnost je mechanismus vynucování, který odděluje kód běžící jako součást aplikace od kódu běžícího jako součást infrastruktury. Průhlednost vytváří bariéru mezi kódem, který může provádět privilegované činnosti (kritický kód), například volání nativního kódu, a kódem, který je provádět nemůže (průhledný kód). Transparentní kód může vykonávat příkazy v mezích sady oprávnění, ve které pracuje, ale nemůže vykonávat, odvozovat nebo obsahovat kritický kód.

Primárním cílem prosazování transparentnosti je poskytnout jednoduchý a účinný mechanismus pro izolaci různých skupin kódu na základě oprávnění. V kontextu modelu sandboxu jsou tyto skupiny oprávnění buď plně důvěryhodné (tj. bez omezení), nebo částečně důvěryhodné (tj. omezené na sadu oprávnění přidělenou sandboxu).

Důležité

Model transparentnosti přesahuje zabezpečení přístupu ke kódu. Průhlednost je vynucována překladačem just-in-time a zůstává v platnosti bez ohledu na sadu oprávnění pro sestavu, včetně plné důvěryhodnosti.

Průhlednost byla zavedena v prostředí .NET Framework verze 2.0 s cílem zjednodušit model zabezpečení a usnadnit psaní a nasazení bezpečných knihoven a aplikací. Průhledný kód se používá také v aplikaci Microsoft Silverlight, aby se zjednodušil vývoj částečně důvěryhodných aplikací.

Poznámka

Při vývoji částečně důvěryhodné aplikace musíte znát požadavky na oprávnění cílových hostitelů. Můžete vyvinout aplikaci, která bude používat prostředky, které nejsou některým hostitelům povoleny. Tato aplikace se zkompiluje bez chyby, ale při načtení do hostovaného prostředí selže. Pokud jste aplikaci vyvinuli pomocí aplikace Visual Studio, můžete z vývojového prostředí povolit ladění v režimu částečné důvěryhodnosti nebo v omezené sadě oprávnění. Další informace naleznete v části Jak na to: Ladění aplikace ClickOnce s omezenými oprávněními. Funkce Výpočet oprávnění poskytovaná pro aplikace ClickOnce je k dispozici také pro jakoukoli částečně důvěryhodnou aplikaci.

Určení úrovně průhlednosti

Atribut SecurityRulesAttribute na úrovni assembly explicitně vybírá pravidla SecurityRuleSet, kterými se assembly bude řídit. Pravidla jsou uspořádána podle systému číselných úrovní, kde vyšší úrovně znamenají přísnější prosazování bezpečnostních pravidel.

Úrovně jsou následující:

  • Úroveň 2 (Level2) – pravidla průhlednosti .NET Framework 4.

  • Úroveň 1 (Level1) – pravidla průhlednosti .NET Framework 2.0.

Primární rozdíl mezi oběma úrovněmi průhlednosti spočívá v tom, že úroveň 1 nevynucuje pravidla průhlednosti pro volání mimo sestavu a je určena pouze pro kompatibilitu.

Důležité

Úroveň průhlednosti 1 byste měli zadávat pouze pro kompatibilitu; to znamená, že úroveň 1 zadávejte pouze pro kód, který byl vytvořen pomocí prostředí .NET Framework 3.5 nebo staršího, které používá atribut AllowPartiallyTrustedCallersAttribute nebo nepoužívá model průhlednosti. Úroveň průhlednosti 1 použijte například pro sestavy .NET Framework 2.0, které umožňují volání od částečně důvěryhodných volajících (APTCA). U kódu, který je vytvořen pro prostředí .NET Framework 4, vždy používejte průhlednost úrovně 2.

Průhlednost úrovně 2

Průhlednost úrovně 2 byla zavedena v prostředí .NET Framework 4. Průhlednost úrovně 2 se vztahuje na kód, který je vytvořen pro prostředí .NET Framework 4, a na kód, který je vytvořen pro prostředí .NET Framework 4. Tři principy tohoto modelu jsou transparentní kód, bezpečnostně kritický kód a bezpečnostně kritický kód.

  • Transparentní kód, bez ohledu na oprávnění, která mu byla udělena (včetně plné důvěry), může volat pouze jiný transparentní kód nebo bezpečnostně kritický kód. Pokud je kód částečně důvěryhodný, může provádět pouze akce, které jsou povoleny sadou oprávnění domény. Transparentní kód nemůže provádět následující činnosti:

    • Provádět operace Assert nebo zvýšení oprávnění.

    • Obsahovat nebezpečný nebo neověřitelný kód.

    • Přímo volat kritický kód.

    • Volat nativní kód nebo kód, který má atribut SuppressUnmanagedCodeSecurityAttribute.

    • Volat člen, který je chráněn příznakem LinkDemand.

    • Dědit od kritických typů.

      Transparentní metody navíc nemohou přepisovat kritické virtuální metody nebo implementovat metody kritického rozhraní.

  • Kritický kód bezpečný z hlediska bezpečnosti je plně důvěryhodný, ale je volatelný transparentním kódem. Vystavuje omezenou plochu plně důvěryhodného kódu. Ověřování správnosti a zabezpečení probíhá v bezpečném-kritickém kódu.

  • Bezpečnostně-kritický kód může volat libovolný kód a je plně důvěryhodný, ale nemůže být volán transparentním kódem.

Průhlednost úrovně 1

Model průhlednosti úrovně 1 byl zaveden ve verzi 2.0 frameworku .NET Framework, aby vývojáři mohli snížit množství kódu, který podléhá bezpečnostnímu auditu. Ačkoli byla transparentnost úrovně 1 ve verzi 2.0 veřejně dostupná, používala se primárně pouze v rámci společnosti Microsoft pro účely bezpečnostního auditu. Prostřednictvím anotací mohou vývojáři deklarovat, které typy a členy mohou provádět zvýšení zabezpečení a další důvěryhodné akce (security-critical) a které ne (security-transparent). Kód, který je označen jako transparentní, nevyžaduje vysoký stupeň bezpečnostního auditu. Úroveň transparentnosti 1 uvádí, že vynucování transparentnosti je omezeno pouze uvnitř sestavy. Jinými slovy, všechny veřejné typy nebo členy, které jsou identifikovány jako bezpečnostně kritické, jsou bezpečnostně kritické pouze v rámci sestavy. Pokud chcete vynutit zabezpečení těchto typů a členů, když jsou volány z vnějšku sestavy, musíte použít požadavky na propojení pro plnou důvěryhodnost. Pokud tak neučiníte, veřejně viditelné typy a členy kritické z hlediska bezpečnosti jsou považovány za kritické z hlediska bezpečnosti a mohou být volány částečně důvěryhodným kódem mimo sestavu.

Model transparentnosti 1. úrovně má následující omezení:

  • Typy a členy kritické z hlediska bezpečnosti, které jsou veřejné, jsou přístupné z kódu transparentního z hlediska bezpečnosti.

  • Anotace transparentnosti jsou vynucovány pouze v rámci sestavy.

  • Typy a členy kritické z hlediska bezpečnosti musí používat požadavky na odkazy k vynucení bezpečnosti pro volání z vnějšku sestavy.

  • Pravidla dědičnosti nejsou vynucována.

  • Existuje možnost, že transparentní kód bude při spuštění s plnou důvěrou provádět škodlivé věci.

Vynucování transparentnosti

Pravidla transparentnosti se nevynucují, dokud není vypočítána transparentnost. V té době je v případě porušení pravidla průhlednosti vyhozena výjimka InvalidOperationException. Doba výpočtu průhlednosti závisí na více faktorech a nelze ji předvídat. Vypočítává se co nejpozději. V prostředí .NET Framework 4 dochází k výpočtu průhlednosti na úrovni sestavy dříve než v prostředí .NET Framework 2.0. Jedinou zárukou je, že k výpočtu průhlednosti dojde v době, kdy je to potřeba. Je to podobné, jako když překladač JIT (just-in-time) může změnit okamžik, kdy je metoda zkompilována a kdy jsou zjištěny případné chyby v této metodě. Výpočet průhlednosti je neviditelný, pokud váš kód neobsahuje žádné chyby průhlednosti.

Viz také

  • Bezpečnostně průhledný kód, úroveň 1
  • Bezpečnostně průhledný kód, úroveň 2

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.