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.

Témata článku: Software, Microsoft, Bezpečnost, Programování, Snap, Catch

6 komentářů

Nejnovější komentáře

  • aredhel 24. 6. 2006 18:33:49
    autentikace ma byt co, autentizace?

    autentikace = autentizace =...
  • gully, gully 22. 6. 2006 10:35:05
    Ano, je to zcela legalni. Je to vydane se souhlasem jak pana Puse, tak i...
  • mifko 20. 6. 2006 13:33:43
    Bohuzial, slovo ramec sa ozaj ako ekvivalent slova...
Určitě si přečtěte

Kde nejlevněji uložit 1 TB dat: Srovnali jsme aktuální ceny cloudových úložišť

Kde nejlevněji uložit 1 TB dat: Srovnali jsme aktuální ceny cloudových úložišť

** Srovnali jsme známá cloudová úložiště podle toho, kolik měsíčně zaplatíte za 1TB ** Ceny se pohybují od dvou stovek až po tisíc korun ** Google umožní uložit až 30 TB dat

18.  3.  2017 | Stanislav Janů | 113

Pojďme programovat elektroniku: Meteostanice, která bude díky Sigfoxu posílat stav počasí třeba z vrcholu Sněžky

Pojďme programovat elektroniku: Meteostanice, která bude díky Sigfoxu posílat stav počasí třeba z vrcholu Sněžky

** Příští roky budou ve znamení internetu věcí ** Podívali jsme se podrobně na síť Sigfox ** Takhle s ní komunikují krabičky z celé Evropy

19.  3.  2017 | Jakub Čížek | 18

Obří Mechroboti jsou realitou, měří čtyři metry a mají hmotnost přes 1,5 tuny

Obří Mechroboti jsou realitou, měří čtyři metry a mají hmotnost přes 1,5 tuny

** Jihokorejská společnost Hankook Mirae Technology vyrábí obří Mechroboty ** Jsou určené pro ovládání člověkem uvnitř ** V prodeji se objeví koncem tohoto roku za 200 milionů korun

20.  3.  2017 | Karel Javůrek | 18

Google představil nový Android O. Na co se můžeme těšit?

Google představil nový Android O. Na co se můžeme těšit?

** Google vypustil vývojářskou verzi nového Androidu ** Přinese lepší notifikace nebo prodlouženou výdrž ** K uživatelům se dostane na podzim

Včera | Stanislav Janů | 54


Aktuální číslo časopisu Computer

Supertéma o počítačové bezpečnosti

AMD Ryzen přichází

Velké testy kinoprojektorů a levných sluchátek

Příslušenství do USB-C