Języki Programowania na Platformie.NET (część 2) http://www.kaims.pl/ goluch/ goluch@eti.pg.gda.pl
Bezpieczeństwo ogólne koncepcje sandboxing zbiór praw jest określany poprzez evidence prawa (permissions) egzekwowanie praw (enforcements)
Bezpieczeństwo w.net Framework 4.5 Wyróżniamy dwa rodzaje kodu: critical code kod, który może wykonywać uprzywilejowane akcje, transparent code nie może powyższych, w szczególności wykonuje czynności w ramach praw, które posiada i nie może wykonywać, dziedziczyć czy zawierać kodu krytycznego. (Możliwość debugowania z ograniczonymi prawami.)
Bezpieczeństwo w.net Framework 4.5 Mechanizm zabezpieczeń stosowany na platformie.net opiera się na modelu bezpieczeństwa opartym na rolach RBS (role based security) oraz na uprawnieniach kodu CAS (code access security) Mechanizm RBS bazuje na uprawnieniach użytkownika określonych na poziomie systemu operacyjnego, wynikających z jego uprawnień indywidualnych oraz z przynależności do grupy Sprawdzenie tożsamości użytkownika i zweryfikowanie jego uprawnień do korzystania z kodu realizuje się na dwa sposoby: deklaratywny (declarative security), za pomocą atrybutów zabezpieczeń dodanych do klas i metod programowy (imperative security), polegający na dynamicznym tworzeniu zestawu uprawnień, które są następnie sprawdzane w trakcie wykonywania kodu
Bezpieczeństwo w.net Framework 4.5 Brak wystarczających uprawnień do wykonania kodu powoduje zgłoszenie wyjątku powoduje zgłoszenie wyjątku SecurityException Metoda deklaratywna jest prostą, statyczną metodą umożliwiającą określenie niezbędnych uprawnień dla całej klasy lub metody dla użytkowników/grup użytkowników, których role są powszechnie znane W celu kontrolowania uprawnień na poziomie konkretnych fragmentów kodu lub wtedy, gdy chcemy uwzględnić dodatkowe warunki, to należy zastąpić podejście deklaratywne podejściem programowym
CAS (Code Access Security) Mechanizm CAS pozwala na kontrolowanie sposobu działania aplikacji niezależnie od uprawnień użytkownika (np. pozwala sprawdzić, czy aplikacja ma wystarczające prawa do korzystania z zasobów albo weryfikować, czy nie posiada ona większych uprawnień niż są jej konieczne) definiuje prawa i zbiory praw, które reprezentują możliwości dostępu do zasobów systemowych umożliwia wykonywanie kodu z wybranym poziomem bezpieczeństwa sprawdza czy kod nadrzędny (wywołujący) posiada prawa pozwalające wykonać zadaną akcję
CAS (Code Access Security CLR pozwala na dostęp do zasobów systemowych (np. plików, rejestru systemowego, dziennika zdarzeń, gniazd sieciowych) i wykonanie na nich żądanych operacji tylko wtedy, gdy ma odpowiednie do tego uprawnienia Przed uzyskaniem przez podzespół dostępu do zasobów CLR w trakcie uruchamiania podzespołu kolekcjonuje i sprawdza dowody (evidence), aby określić, jakie uprawnienia (permission) do wykonania kodu można mu nadać
CAS (Code Access Security Począwszy od wersji.net Framework 4.0 CAS nie korzysta już z zasad polityki bezpieczeństwa (security policy), ponieważ zapewniały one tylko kontrolę kodu zarządzanego, pomijając całkowicie aplikacje niezarządzane (natywne) Prawa dostępu określane są na podstawie uprawnień i tak zwanej przejrzystości (transparency), która określa, jaki fragment kodu może wykonywać krytyczne ze względów bezpieczeństwa operacje, a jaki nie Zadaniem modelu przejrzystości jest zapewnienie prostego i efektywnego mechanizmu, który będzie izolować od siebie różne grupy kodów Podobnie jak w przypadku RBS dostęp do zasobów można weryfikować w sposób deklaratywny lub programowy
Sanboxing zastosowania Uruchamiamy kod z ograniczonymi prawami, gdy: nie mamy zaufania, np. kod pobierany z sieci testujemy własny moduł, który bedzie uruchamiany z ograniczonymi prawami na maszynie klienta
Sandboxing w praktyce: domeny aplikacji zestaw uprawnień w sandbox-ie jest określony przez jest określony przez dowody uprawnień (evidence) na etapie tworzenia domeny aplikacji Public Shared Function CreateDomain ( _ friendlyname As String, _ securityinfo As Evidence, _ info As AppDomainSetup, _ grantset As PermissionSet, _ ParamArray fulltrustassemblies As StrongName() _ ) As AppDomain
Klasa Evidence zawiera zwykle podpisy i lokalizację danego kodu security policy składa się z grup kodu klasa Evidence służy do określenia do jakiej grupy dany kod należy obiekt Evidence jest kolekcją mamy dwa typy źródeł: host evidence oraz assembly evidence
Prosty przykład uruchomienia Imports System.AppDomain... Dim d as AppDomain = AppDomain.CreateDomain("Dowolna nazwa") d.executeassembly("sciezka\plik.exe") AppDomain.Unload(d)