Bezpieczenstwo aplikacji - Jezyki Programowania na Platformie

Transkrypt

Bezpieczenstwo aplikacji - Jezyki Programowania na Platformie
Bezpieczenstwo aplikacji
Języki Programowania na Platformie .NET (część 2)
Tomasz Goluch
http://www.kaims.pl/∼goluch/
[email protected]
Bezpieczeństwo – ogólne koncepcje
sandboxing
zbiór praw jest określany poprzez evidence
prawa (permissions)
egzekwowanie praw (enforcements)
Tomasz Goluch
Bezpieczenstwo aplikacji
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.)
Tomasz Goluch
Bezpieczenstwo aplikacji
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
Tomasz Goluch
Bezpieczenstwo aplikacji
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
Tomasz Goluch
Bezpieczenstwo aplikacji
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ę
Tomasz Goluch
Bezpieczenstwo aplikacji
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ć
Tomasz Goluch
Bezpieczenstwo aplikacji
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
Tomasz Goluch
Bezpieczenstwo aplikacji
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
Tomasz Goluch
Bezpieczenstwo aplikacji
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
Tomasz Goluch
Bezpieczenstwo aplikacji
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
Tomasz Goluch
Bezpieczenstwo aplikacji
Prosty przykład uruchomienia
Imports System.AppDomain
...
Dim d as AppDomain = AppDomain.CreateDomain("Dowolna nazwa")
d.ExecuteAssembly("sciezka\plik.exe")
AppDomain.Unload(d)
Tomasz Goluch
Bezpieczenstwo aplikacji