Poznáváme C# a Microsoft .NET – 75. díl – Bezpečnost

Bezpečnost je pojmem, který je v souvislosti se softwarovými aplikacemi velmi často skloňován. Výjimkou není ani platforma .NET a tudíž dnešní článek se jí bude věnovat. Jelikož je tento článek úvodem do problematiky bezpečnosti, seznámíme se hlavně se základními principy implementace zabezpečení aplikací v rámci .NET.

Základní koncepty V oblasti vývoje softwarových aplikací je potřeba z bezpečností řešit několik otázek. Například jaké operace, aplikace nebo zásuvný modul, které pocházejí z nějakého méně důvěryhodného zdroje, například sítě internet, mohou po spuštění v našem počítači provádět. Asi se shodneme na tom, že by nebylo úplně šťastné kdyby, se na pozadí stažený zásuvný modul aplikace po stažení postaral o zasílání našich emailů správci webu nebo o nějaké další nepříjemné překvapení . Další řešenou problematikou v oblasti zabezpečení aplikací je fakt, že ne každá osoba pracující s aplikací má potřebná práva pro provádění všech operací, které daná aplikace poskytuje a je tedy potřeba rozlišit chování aplikace v závislosti na aktuálně pracujícím uživateli.

Tyto otázky jsou rámcem .NET řešeny velmi efektivně. Běhové prostředí CLR při nahrávání každé assembly sestavuje sadu informací o nahrávané assembly (legitimace sestavení - assembly evidence), kam mimo jiné zaznamená z jakého umístění je daná assembly nahrána. Na základě těchto informací jsou tedy assembly, jako základní jednotce pro přiřazení bezpečnostních práv, povoleny pouze specifické operace. Pro řešení otázky s různými osobami, které pracují s aplikací je rámec .NET připraven pracovat s několika různými druhy autentikace. Údaje získané pomocí mechanismu autentikace mohou být v aplikaci použity na rozlišení operací, které mohou osoby, pracující s aplikací, provádět. Pojďme se na tyto koncepty podívat pěkně zvlášť a trochu blíže.

Zabezpečení přístupu ke kódu Zapezpečení přístupu ke kódu – Code Access Security (CAS) je přístup využívaný rámcem .NET pro udělení stupně důvěry určité assembly. Pokud se kód v assembly pokouší přímo nebo nepřímo přistupovat k nějakému zdroji (soubor, proměnné prostředí..) a není mu udělena taková důvěra, kterou pro tento přístup potřebuje, je vyhozena výjimka SecurityException. To jakou důvěru určitá assembly získá je definováno pomocí dvou základních konceptů – kódových skupin a sad oprávnění.

Kódové skupiny seskupují assembly s určitými charakteristickými vlastnostmi. Mezi vlastnosti, které slouží k tomuto seskupování jsou například vydavatel assembly, adresář ze kterého assembly pochází či silné jméno assembly. Ke každé kódové skupině je přiřazena určitá sada oprávnění. Každé oprávnění se váže k určitým akcím, které mohou být kódem vykonány. Existuje oprávnění pro přístup k souborům, pro využívání izolovaných úložišť, používání proměnných prostředí a tak dále. Je tedy v praxi možné definovat kódovou skupinu, do níž budou spadat všechny assembly od určitého vydavatele a díky specifické sadě oprávnění definovat jaké všechny operace budou kódy v assembly od daného vydavatele smět vykonávat.

Kromě možnosti definovat vlastní kódové skupiny a sady oprávnění je zde i skupina předdefinovaných skupin (Lokální počítač, Lokální intranet, Internet..) i sad oprávnění (Veškerá oprávnění, Spouštění, Žádná oprávnění..). Správci systémů mohou kódové skupiny spravovat buď pomocí utility pro příkazový řádek (caspol.exe) nebo mnohem pohodlněji pomocí modulu snap-in konzole MMC.

Klepněte pro větší obrázek

Správa zabezpečení pomocí modulu snap-in konzole MMC Se zabezpečením přístupu kódu lze pracovat nejen na úrovni administračních nástrojů, ale také na úrovni zdrojového kódu. Touto problematikou se budeme hlouběji zabývat v příštím článku, ale nyní si alespoň řekneme, že každé oprávnění je představováno objekty určitého typu a že s těmito objekty lze provádět různé operace. Jednou s nejužívanější operací je operace vyžádání daného oprávnění, kde zjistíme zda-li volající kód disponuje potřebným oprávněním pro provedení specifické akce, na což můžeme v aplikaci nějakým způsobem reagovat.

//vytvorime objekt opravneni pristupu k souboru
FileIOPermission filePermission = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:/file.dll");
try
{
      //vyzadame toto opravneni
      filePermission.Demand();
      Console.WriteLine("Pristup k souboru byl povolen! Aplikace ma dostatecna prava");
}
catch (SecurityException secEx)
{
     Console.WriteLine("Pristup k souboru byl odepren! Aplikace nema dostatecna opravneni");
}

Zabezpečení založené na rolích Zabezpečení přístupu ke kódu řeší problémy různých původů assembly. Jistě je to velmi inteligentní způsob toho jak odlišit jaké oprávnění má assembly od daného vydavatele čí z daného umístění získat , avšak kromě tohoto zabezpečení obsahuje rámec .NET podporu zabezpečení založeného na rolích. Při tomto způsobu zabezpečení jsme schopni určit chování aplikace v závislosti na tom, za je či není aktuální uživatel aplikace ve specifické roli.

Zajímavou informací je, že tento způsob oproti bezpečnosti přístupu ke kódu také znatelně rychlejší. Zabezpečení založené na rolích je implementováno pouze na úrovni zdrojového kódu aplikace. Při implementaci tohoto typu zabezpečení je využíváno kontextu zabezpečení uživatele, který je představován typem implementujícím rozhraní IPrincipal. Těchto typů je několik a toho správného je použito v závislosti na tom s jakým způsobem ověřování je asociována daná aplikační doména. Asi nejčastěji je využíváno integrovaného ověřování systému Windows, ale používá se i ověřování technologie ASP .NET či technologie passport. Existují i další a dobré je vědět, že tuto množinu lze doplnit vlastní implementací.

//nastavime politiku vazani identity          AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
           
//ziskame objekt predstavujici uzivatele
IPrincipal principal = Thread.CurrentPrincipal;
//zjistime jestli je obsazen v roli Administrator
bool isAdmin = principal.IsInRole("Administrator");

if (isAdmin)
{
    Console.WriteLine("Uzivatel je obsazen v roli Administrator");
}
else
{
    Console.WriteLine("Uzivatel neni obsazen v roli Administrator");
}

Tolik ke stručnému představení bezpečnosti založené na rolích. Podobně jako v případě zabezpečení přístupu ke kódu, tak i tomto způsobu zabezpečení bude podrobněji pojednávat jeden z dalších článků.

Příklady ke článku lze stáhnout zde.

Příští díl bude podrobněji pojednávat o bezpečnosti přístupu ke kódu.

Diskuze (6) Další článek: Skype 2.5 s funkcí pro posílání SMSek oficiálně venku

Témata článku: Software, Microsoft, Bezpečnost, Programování, Přístup, Catch, Určitý objekt, Nepříjemné překvapení, Díl, Snap, Silné jméno, Různé typy, Nepříjemná vlastnost


Určitě si přečtěte

PrusaLab a FutLab: Praha se dočkala špičkových komunitních dílen pro hackery

PrusaLab a FutLab: Praha se dočkala špičkových komunitních dílen pro hackery

** Nejprve svoji velkou dílnu otevřelo Brno ** Letos se přidala i Praha ** Nabízí malé 3D tiskárny i velké průmyslové stroje

Jakub Čížek | 11

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 56

Blíží se Juno. Jeden z nejhezčích Linuxů pro normální lidi

Blíží se Juno. Jeden z nejhezčích Linuxů pro normální lidi

** Ubuntu a Fedora patří k nejpopulárnějším linuxovým OS pro desktop ** A pak je tu zástup dalších nebo jejich odvozenin ** Jedním z nich je Elementary OS, který se brzy dočká novinek

Jakub Čížek | 71

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 30

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 42

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

** Apple večer představil novinky ** Ukáže nové operační systémy, ale čekala se i nová zařízení ** Začíná vývojářská konference Applu WWDC 2018

Karel Javůrek | 86

WALL-E vyfotil Zemi ze vzdálenosti 1 milionů km

WALL-E vyfotil Zemi ze vzdálenosti 1 milionů km

** Malá sonda s přezdívkou WALL-E pořídila fotografii Země a Měsíce ze vzdálenosti 1 milionů km ** CubeSat letí se sondou InSight k Marsu ** InSight přistane na Marsu 26. listopadu

Petr Kubala | 4


Aktuální číslo časopisu Computer

Kdy necháme řídit chytrá auta?

6 Wi-Fi Mesh systémů ve velkém testu

Srovnali jsme 7 sportovních kamer

Znáte pravidla pro létání s drony?