Serwisy internetowe.net Informatyka, sem. 7 Bezpieczeństwo (wybrane elementy) 1
Microsoft.NET Security The Microsoft.NET Framework code access security oraz role-based security określa uprawnienia kodu z różnych źródeł, do czego jest kod lub użytkownicy uprawnieni code access i role-based wykorzystują podobne mechnizmy i infrastrukturę ułatwione zrozumienie "drugiego" mechanizmu 2
Powiązane koncepcje (elementy bezpieczeństwa) Security Permissions CLR zezwala kodowi (managed) na uruchomienie tylko tych akcji, do których ma uprawnienia bazuje na obiekcie Permissions Type Safety and Security dostęp do pamięci, do której ma uprawnienia Security Policy konfigurowalny zbiór zasad na których CLR bazuje ustalany przez administratora kod wykonuje operacje i dostaje się do zasobów, do których ma uprawnienia 3
Powiązane koncepcje (elementy bezpieczeństwa) Principal reprezentuje identyfikację i rolę użytkownika i działa w jego imieniu Authentication wykrywanie i weryfikowanie identyfikacji użytkownika (principal), user credentials, weryfikacja credentials Authorization określenie, czy użytkownik (principal) posiada uprawnienia do określonej operacji występuje po autentykacji, wykorzystuje informacje z autentykacji 4
Security Permissions Code Access Permissions reprezentuje dostęp do chronionych zasobów lub wykonanie operacji Identity Permissions rodzaj code access permission wskazuje, że kod posiada credentials do operacji Role-Based Security Permissions dostarcza mechanizmu sprawdzenia, czy użytkownik (lub jego agent/reprezentant) posiada identyfikację lub jest członkiem grupy PrincipalPermission - jedyna "implementacja" rolebased security 5
Code Access Security Wykonanie kodu zależnie od zaufania, które pokłada się do użytkownika i do pochodzenia kodu. np. kod z internetu, z intranetu, itd Ukierunkowany na ochronę zasobów przed kodem.net, nie chroni kodu przed użytkownikami np. użytkownik może obejść to zabezpieczenie skopiować kod na dysk albo uruchomić kod niezarządzany 6
Elementy CAS Code group grupuje kod zależnie od właściwości, typowo zależnie od pochodzenia (internet, intranet) przypisanie do grupy zależy od "membership condition" (warunek uczestnictwa) i "evidence" (dowody) CLR zbiera evidence (np. dostawca kodu, podpisy, strong name, URI pochodzenia, itd) Dodanie code group (caspol.exe, Mscorcfg.msc, podklasy CodeGroup (np. FileCodeGroup)) Permissions caspol.exe -listdescription, caspol.exe -listgroups akcje, które są zezwolone dla code group, np. dostęp do interface użytkownika, dostęp do dysku, itd. 7
Membership condition Warunek uczestnictwa kodu w grupie Każda grupa ma jeden warunek przypisania Rodzaje membership conditions Zone (region systemu), Site (strona www), Strong name (unikatowa nazwa), Publisher (dostawca), URL,..., All code, Custom (user specified) Code groups arranged hierarchically (All code ->...) Wartości dla Zone MyComputer, Internet, Intranet, Trusted, Untrusted (Windows Security Center => Internet options) 8
http://msdn.microsoft.com/en-us/library/aa302369.aspx 9
Evidence Evidence (dowody) - zazwyczaj określane na podstawie podpisów i pochodzenia kodu może być potencjalnie cokolwiek, obiekty rozpoznawane przez mechanizm bezpieczeństwa Polityka bezpieczeństwa składa się z grup kodu assembly jest członkiem grupy, jeżeli spełnia warunki (membership condition) Evidence - zbiór danych wejściowych dla polityki bezpieczeństwa w celu określenia, do jakiej code group należy assembly 10
Evidence - rodzaje Host evidencee - dostarczana przez komputer (host), może być dostarczona tylko przez komputer, który otrzymał uprawnienie ControlEvidence. Dowód pochodzenia kodu i podpisów cyfrowych. Typowo zawiera: Url, Site oraz Zone. Assembly evidence - część samego asembly. Deweloperzy mogą dodać własne evidence do assembly. Możliwe do dodania tylko w czasie wytwarzania assembly, przed podpisem. Domyślnie polityka bezpieczeństwa ignoruje assemblyevidence. 11
caspol - Code Access Security Policy tool Demo caspol.exe -resolvegroup assembly.dll -resolvegroup http://localhost/.../... (policy levels: Enterprise, Machine, User) 12
Code Access Permissions Po przypisaniu do grupy, system sprawdza, jakie uprawnienia posiada kod (grupa) Polityka bezpieczeństwa sprawdza, jakie akcje może wykonać kod Przykłady klas Permission: DnsPermission, FileIOPermission, UIPermission, MessageQueuePermission, PrintingPermission... Możliwość określenia bardziej szczegółowych uprawnień (np. poziom dostępu do pliku) 13
Code Access Permissions Dostęp do zasobów powinien być otoczony blokiem try-catch np. co zrobić, gdy aplikacja nie może czytać pliku (zakończyć, czy zrobić inną akcję) Assembly jest przypisany do wielu grup kodów, końcowe uprawnienie (permissions) są unią wszystkich grup (każda grupa może rozszerzać uprawnienia) Identity permissions - grupa permissions związana z assembly i jego kodem nie może być przekazywana dalej (grant option) PublisherIdentityPermission, SiteIdentityPermission, StrongNameIdentityPermission, URLIdentityPermission, ZoneIdentityPermission 14
Predefiniowane grupy uprawnień (Permission sets) FullTrust - bez ograniczeń SkipVerification - brak weryfikacji Execution - możliwość uruchomienia ale bez dostępu do zasobów Nothing - brak uprawnień, brak możliwości uruchomienia LocalIntranet - domyślne ustawienia lokalnego intranetu Internet - domyślne ustawienia internetu, dosyć restrykcyjne, nieznane pochodzenie kodu Everything - nadaje wszystkie uprawnienia poza pominięciem weryfikacji 15
Sprawdzenie uprawnień demo caspol.exe -resolveperm assembly.dll caspol.exe -resolveperm http://localhost/assembly.dll Uruchomienie aplikacji z "internetu" Dodanie localhost do trusted sites IIS hostuje aplikacje, która zostaje uruchomiona Możliwość uruchomienia kodu, ale ustawienia.net dla internet - brak dostępu do dysku. 16
Policy Levels Możliwość określenie uprawnień dla Machine, Enterprise, User, Application domain Uprawnienia muszą być częścią wspólną uprawnień (inaczej niż dla grup) np. user i enterprise są FullTrust machine ogranicza dostęp caspol -user -listgroups caspol -enterprise -listgroups 17
Security API System.Security.Permissions System.Security.Policy System.Security.Principal Klasy ważniejsze CodeAccessPermission, FileIOPermission, SecurityPermission,... UnauthorizedAccessException Class PermissionSet Evidence Narzędzia systemowe: caspol, Mscorcfg.msc 18
Demanding (żądanie) uprawnień CodeAccessPermission.Demand Method This method is typically used by secure libraries to ensure that callers have permission to access a resource. For example, a file class in a secure class library calls Demand for the necessary FileIOPermission before performing a file operation requested by the caller. The permissions of the code that calls this method are not examined; the check begins from the immediate caller of that code and proceeds up the stack. The call stack is typically represented as growing down, so that methods higher in the call stack call methods lower in the call stack. Demand succeeds only if no SecurityException is raised. UnauthorizedAccessException 19
Żądanie uprawnień Demo Imperatywne, deklaratywne Ustawienia dla assembly np. VisualStudio Properties => Security Atrybuty (deklarative) [assembly:fileiopermission(securityaction.requestmini mum, ViewAndModify="c:/")] dla klasy: [FileIOPermission(SecurityAction.Assert, Read="c:/")] Jako kod (imperative) fileiopermission.demand(); 20
Powody jawnego definiowania wymaganych uprawnień Jeżeli assembly wymaga uprawnień, to lepiej wiedzieć to na początku Otrzymanie tylko tych uprawnień, które są wymagane. Mniejsze ryzyko niewłaściwego użycia przez inne oprogramowanie Zażądanie mniejszej ilości uprawnień zwiększa szansę, że oprogramowanie wykona się poprawnie 21
Żądanie uprawnień Kategorie wymagań na uprawnienia: Minimum - wymagane, aby oprogramowanie uruchomiło się Optional - opcjonalne, nie wymagane Refused - uprawnienie nie ma być nadane Demo permcalc -show -stacks -cleancache Assembly.exe 22
Żądanie uprawnień, cd. SecurityAction - enum z akcjami Demand, Assert, Deny (class, method) RequestMinimum, RequestOptional, RequestRefuse (assembly) abstract CodeAccessPermission Defines the underlying structure of all code access permissions. 23
Denying, asserting permissions (zakazywanie, zezwalanie) Demo CodeAccessPermission permission =... permission.deny();... FileIOPermission permission =... permission.assert(); Wywołanie kodu "bezpiecznego" w ramach kodu, który nie wymaga pełnego bezpieczeństwa 24
Uwagi do.net security Nie wpływa na bezpieczeństwo kodu niezarządzanego Jeżeli użytkownik przekopiuje plik na lokalny komputer, to będzie uruchomiony z pełnymi uprawnieniami (dla tego użytkownika) Nie zabezpiecza przez zagrożeniami ze strony skryptów, natywnych.exe itd. Powyższe zagrożenia są w gestii ochrony systemu Windows 25
Katalogi z definicjami uprawnień <Windows>\Microsoft.NET\Framework\<version >\Config\enterprise.config... Zalecane używanie caspol albo.net Framework Configuration MMC 26
Zarządzanie grupami i uprawnieniami Jeżeli kod powinien się wykonać, ale ma za mało uprawnień: Zmniejszenie zabezpieczeń - nie zalecane, zwłaszcza dla internetu Przeniesienie aplikacji, np. na dysk lokalny z sieciowego Zastosowanie strong name i zdefiniowanie nowej grupy kodu dla tego strong name 27
Zmiana uprawnień grup i zarządzanie grupami kodów caspol.exe -listgroups (numer grupy) caspol.exe -chggroup 1.2 FullTrust caspol.exe -addgroup 1.3 -site www.pg.gda.pl FullTrust Zmiana w Centrum Zabezpieczeń Windows (wyłączenie zabezpieczeń, dodanie np. localhost do zaufanych domen) caspol.exe -addgroup 1.2 -url file:\\lokalnyintranet/* FullTrust caspol.exe -remgroup 1.5.10 28
Włączenie / wyłączenie security Zresetowanie ustawień caspol.exe -reset caspol.exe -security off caspol.exe -security on 29
Bibliografia Professional C# 2005 with.net 3.0 MSDN bychristian Nagel, Bill Evjen, Jay Glynn, Morgan SkinnerandKarli Watson http://msdn.microsoft.com/en-us/library/z164t8hs%28v=vs.90%29.aspx http://msdn.microsoft.com/en-us/library/5ba4k1c5%28v=vs.90%29.aspx http://msdn.microsoft.com/en-us/library/system.security.aspx http://msdn.microsoft.com/en-us/library/c5tk9z76%28v=vs.90%29.aspx http://msdn.microsoft.com/en-us/library/dc8ztsad%28v=vs.90%29.aspx http://msdn.microsoft.com/enus/library/system.security.codeaccesspermission.aspx http://msdn.microsoft.com/enus/library/system.security.policy.filecodegroup.aspx 30