Bezpieczeństwo systemów informatycznych

Bezpieczeństwo można by opisać w skrócie za pomocą słów: uwierzytelnienie , autoryzacja i bezpieczna komunikacja.
Uwierzytelnienie (authentication) jest procesem, którego celem jest stwierdzenie czy osoba za którą podaje się dany użytkownik, jest rzeczywiście tą osobą. W tym celu podaje on swój identyfikator (w skrócie login ) no i hasło. Autoryzacja (Authorization) jest kolejnym krokiem w którym następuje sprawdzenie do jakich zasobów ma dostęp uwierzytelniony użytkownik.

Bezpieczna komunikacja, czyli w tym przypadku, bezpieczny przesył danych przez sieć, to nic innego jak po prostu szyfrowanie przesyłanej zawartości. W środowisku internetowym zazwyczaj odbywa się to za pomocą technologii SSL (Secure Sockets Layer).

Autoryzacja

Autoryzacja z poziomu ASP .NET konfigurowana jest w pliku Web.config. Są to ustawienia domyślne, które stosowane są do wszystkich stron katalogu wirtualnego. Element „allow” definiuje użytkowników , bądź grupy, które mają prawo do zasobów. Element „deny” definiuje użytkowników , bądź też grupy, które nie mają prawa do zasobów. W szczególności ma to znaczenie w uwierzytelnieniu typu „Windows”, gdyż można tu określić zachowanie się aplikacji w odniesieniu do grup systemowych ( blok „roles”), bądź konkretnych kont. W tym wypadku elementy w bloku „roles” przyjmują postać: NazwaDomenyNazwaGrupySystemowej, a „users”: NazwaDomenyNazwaKonta W celu określenia użytkowników, często stosowane są również wartości specjalne, oznaczające odpowiednio:
„*”, wszystkich użytkowników
„?”, użytkowników którzy nie zostali uwierzytelnieni.
Możliwe jest również definiowanie autoryzacji w odniesieniu do konkretnego zasobu. W tym celu w głównym bloku pliku Web.config, należy użyć definicji „location”.
Element “path” służy do definiowania strony, do której odnoszą się ustawienia. W tym wypadku oznacza to iż do podanej strony, będą mieli dostęp wszyscy użytkownicy, bez względu na domyślne ustawienia. W uwierzytelnieniu typu „Forms”, możliwe jest również definiowanie ról i użytkowników w oparciu o zewnętrzne źródło danych. Mechanizm ten dokładniej omówiony zostanie, w opisie załączonego do artykułu przykładu. Kontrola dostępu do zasobów z poziomu systemu może odbywać się również za pomocą uprawnień NTFS, bądź list ACL (Access Control Lists).

Uwierzytelnianie

W aplikacjach ASP .NET tego co kryje się pod hasłem uwierzytelnienia, strzegą dwie „wierze”. Pierwszą z nich jest serwer WWW ( w tym wypadku jest to IIS), oraz sama aplikacja ASP .NET. Pierwszą „wierzą” strzegącą dostępu do zasobów jest IIS. Zapewnia on zasadniczo cztery typy uwierzytelnienia: Anonymous, Basic, Digest oraz Integrated Windows. W skrócie uwierzytelnienie Anonymous oznacza taką konfigurację serwera, aby otworzył swe bramy i przepuszczała każdego, kto tylko zażyczy sobie przez nie przejść. Do uwierzytelnienia typu Basic, wykorzystywane są dane ( login + hasło), istniejących kąt w systemie Windows. Wymagane jest tu więc już, podania danych uwierzytelniających. Problem w tym iż dane te są przesyłane przez sieć w postaci czystego tekstu. Zalecane jest więc stosowanie szyfrowania transmisji . Z kolei uwierzytelnienie Digest likwiduję tą niedogodność, ale za to nie jest obsługiwane przez większość przeglądarek, nie związanych z firmą Microsoft. Integrated Windows oznacza iż uwierzytelnienie jest ściśle związane z kontem, które jest aktualnie w użyciu. Serwer sprawdza tożsamość użytkownika i sam dokonuje weryfikacji czy ma on prawo do użycia danej aplikacji, bez konieczności podawania danych uwierzytelniających. Możliwe jest również stosowanie mieszanych zabezpieczeń., przez zaznaczenie kilku typów zabezpieczeń np. Anonymous i Basic. W tym wypadku zasoby określone w pliku konfiguracyjnym ASP .NET jako zabezpieczone, będą obsługiwane w serwerze IIS przez tryb „Basic”, a pozostałe przez „Anonymous”.
Rodzaj ustawienia można zmienić wybierając „Zarządzaj” z menu kontekstowego znajdującego się pod ikoną „Mój komputer” na pulpicie. Ustawienia aplikacji znajdują się w: Usługi i aplikacje-> Internetowe usługi informacyjne-> Witryny sieci Web-> Domyślna witryna sieci Web-> KatalogWirtualnyAplikacji-> Właściwości. W oknie Właściwości należy wybrać zakładkę „Zabezpieczenia katalogów” a następnie przycisk „Edytuj” z sekcji „Dostęp anonimowy i kontrola uwierzytelnienia”.

Druga z wież, jak już wspomniałem to ASP .NET. Umożliwia ona cztery typy uwierzytelnienia:
– Windows, oznacza iż za uwierzytelnienie odpowiedzialny jest IIS. W tym wypadku wybrany musi być typ Basic, Digest bądź Windows Integrated. To rozwiązanie jest dobre dla aplikacji intranetowych, gdzie wszyscy użytkownicy posiadają konta systemowe. Nie nadaje się jednak do aplikacji internetowych, ze względu na bardzo utrudniony mechanizm tworzenia nowych kont, dla każdego użytkownika chcącego korzystać z zabezpieczanej aplikacji www.
– Forms, oznacza iż uwierzytelnienie odbywa się po stronie ASP .NET. Użytkownik zanim dopuszczony zostanie do żądanego zasobu, kierowany jest na specjalnie utworzoną w tym celu stronę, gdzie podane swoje dane uwierzytelniające. Są one weryfikowane zazwyczaj w oparciu o zewnętrzne źródło danych. Uwierzytelnienie odbywa się tylko raz. Podczas dalszej współpracy użytkownika z aplikacją jego dane przesyłane są za pomocą cookie. IIS powinien mieć ustawiony tryb „Anonymous”.
– Passport, jest technologią umożliwiającą przeprowadzenie uwierzytelnienia, w oparciu o zewnętrznego dostawcę, który sprawdza tożsamość użytkownika. Wymaga to mniej pracy, no ale cóż, nic za darmo. To oczywiście kosztuje. Niewątpliwą zaletą tego rozwiązania jest możliwość zastosowania tych samych danych uwierzytelniających do wielu aplikacji. W wypadku Forms, każda aplikacja wymaga osobnej implementacji mechanizmu uwierzytelnienia. Również tu dane użytkownika wprowadzane są jednokrotnie, a dalej przesyłane są za pomocą cookie.
– None. Ten typ uwierzytelniania stosowany jest gdy, aplikacja posiada swój własny mechanizm zabezpieczeń. Jednym słowem wieża ASP .NET wyłączona jest z użycia, a IIS ma ustawiony tryb „Anonymous”.

Uwierzytelnianie Windows

Oznaczają one, iż domyślnie każdy z nie uwierzytelnionych użytkowników, nie będzie dopuszczony do zasobów aplikacji. Wyjątek stanowi zasób „default.aspx”, do którego dostęp mają wszyscy użytkownicy. W szczególności do strony „AddForm.aspx” nie ma dostępu użytkownik „JARTEKsomeone”. W serwerze IIS powinny zostać zaznaczone dwa typy zabezpieczeń: Basic i Anonymous. Drugi z wymienionych trybów będzie używany do dostępu do zasobu „default.aspx”. Jeżeli jakoś zasób wymaga podania danych uwierzytelniających, to system Operacyjny wyświetla okno logowania, w celu wprowadzenia tych danych.
System sam troszcz się o sprawdzanie czy użytkownik ma prawo dostępu do danego zasobu. Sam przechowuje także wprowadzone dane uwierzytelniające, tak iż nie trzeba ich podawać za każdym razem, gdy przedstawione zostanie żądanie dostępu do chronionego zasobu.

Uwierzytelnianie Forms

Użycie tego typu uwierzytelnienia wymaga ustawienia serwera IIS na typ zabezpieczeń „Anonymous”. W tym wypadku dostęp do zasobów również wymaga autoryzacji. Jednak tym razem nie jest ona automatycznie przeprowadzana przez system Operacyjny. programista musi sam utworzyć stronę, na którą kierowany jest użytkownik w celu wprowadzenia danych uwierzytelniających i zaimplementować mechanizm ich kontroli. Służy do tego dodatkowy blok „forms”, pokazany powyżej. Zasadniczo on dwa podstawowe elementy: „loginUrl” będący nazwą strony na której wprowadzane są uwierzytelniające, oraz „name” określające nazwę ciasteczka przechowującego te dane. Dodatkowo można również inne parametry, takie jak obsługę szyfrowanej transmisji. W bloku „forms”, można również opcjonalnie umieścić dane uwierzytelniające użytkowników, którzy mają dostęp do aplikacji. Służy do tego blok „credentials”.
Każdy z wierszy zawiera nazwę użytkownika („name”) oraz jego hasło(„password”). Dodatkowo określany jest również element „passwoerFormat”, określający sposób przechowywania hasła. W tym wypadku ma on postać czystego tekstu, co zdecydowanie nie jest zalecanym rozwiązaniem. Można jednak zmienić to ustawienie, tak aby hasło było szyfrowane. Służą do tego wartości „SHA1” lub „MD5”. W ogóle nie jest to jednak zbyt dobre rozwiązanie. Jest dość nie uniwersalne, ze względu na uciążliwe zarządzanie danymi użytkowników, używających aplikacji, jak i ze względów bezpieczeństwa. Dużo lepszym rozwiązaniem, jest użycie zewnętrznej bazy danych do przechowywania danych uwierzytelniających.
Po pozytywnym zweryfikowaniu danych wprowadzonych przez użytkownika (metoda log), następuje przekierowanie użytkownika na stronę do której pierwotnie się odwołał. Następuje to przy pomocy metody MobileFormsAuthentication.RedirectFromLoginPage. Jej argumentami jest ciąg znaków identyfikujący użytkownika (w naszym wypadku jest to identyfikator z bazy danych), oraz wartość logiczna, określająca czy ciasteczko przechowujące dane uwierzytelniające ma zostać zapisane na stałe na dysku twardym użytkownika (wartość true), czy też usunięte po wygaśnięciu jego ważności ( wartość false).


Bezpieczeństwo można by opisać w skrócie za pomocą słów: uwierzytelnienie , autoryzacja i bezpieczna komunikacja.
Uwierzytelnienie (authentication) jest procesem, którego celem jest stwierdzenie czy osoba za którą podaje się dany użytkownik, jest rzeczywiście tą osobą. W tym celu podaje on swój identyfikator (w skrócie login ) no i hasło. Autoryzacja (Authorization) jest kolejnym krokiem w którym następuje sprawdzenie do jakich zasobów ma dostęp uwierzytelniony użytkownik. Bezpieczna komunikacja, czyli w tym przypadku, bezpieczny przesył danych przez sieć, to nic innego jak po prostu szyfrowanie przesyłanej zawartości. W środowisku internetowym zazwyczaj odbywa się to za pomocą technologii SSL (Secure Sockets Layer).

Autoryzacja

Autoryzacja z poziomu ASP .NET konfigurowana jest w pliku Web.config. Są to ustawienia domyślne, które stosowane są do wszystkich stron katalogu wirtualnego. Element „allow” definiuje użytkowników , bądź grupy, które mają prawo do zasobów. Element „deny” definiuje użytkowników , bądź też grupy, które nie mają prawa do zasobów. W szczególności ma to znaczenie w uwierzytelnieniu typu „Windows”, gdyż można tu określić zachowanie się aplikacji w odniesieniu do grup systemowych ( blok „roles”), bądź konkretnych kont. W tym wypadku elementy w bloku „roles” przyjmują postać: NazwaDomenyNazwaGrupySystemowej, a „users”: NazwaDomenyNazwaKonta W celu określenia użytkowników, często stosowane są również wartości specjalne, oznaczające odpowiednio:
„*”, wszystkich użytkowników
„?”, użytkowników którzy nie zostali uwierzytelnieni.
Możliwe jest również definiowanie autoryzacji w odniesieniu do konkretnego zasobu. W tym celu w głównym bloku pliku Web.config, należy użyć definicji „location”.
Element “path” służy do definiowania strony, do której odnoszą się ustawienia. W tym wypadku oznacza to iż do podanej strony, będą mieli dostęp wszyscy użytkownicy, bez względu na domyślne ustawienia. W uwierzytelnieniu typu „Forms”, możliwe jest również definiowanie ról i użytkowników w oparciu o zewnętrzne źródło danych. Mechanizm ten dokładniej omówiony zostanie, w opisie załączonego do artykułu przykładu. Kontrola dostępu do zasobów z poziomu systemu może odbywać się również za pomocą uprawnień NTFS, bądź list ACL (Access Control Lists).

Uwierzytelnianie

W aplikacjach ASP .NET tego co kryje się pod hasłem uwierzytelnienia, strzegą dwie „wierze”. Pierwszą z nich jest serwer WWW ( w tym wypadku jest to IIS), oraz sama aplikacja ASP .NET. Pierwszą „wierzą” strzegącą dostępu do zasobów jest IIS. Zapewnia on zasadniczo cztery typy uwierzytelnienia: Anonymous, Basic, Digest oraz Integrated Windows. W skrócie uwierzytelnienie Anonymous oznacza taką konfigurację serwera, aby otworzył swe bramy i przepuszczała każdego, kto tylko zażyczy sobie przez nie przejść. Do uwierzytelnienia typu Basic, wykorzystywane są dane ( login + hasło), istniejących kąt w systemie Windows. Wymagane jest tu więc już, podania danych uwierzytelniających. Problem w tym iż dane te są przesyłane przez sieć w postaci czystego tekstu. Zalecane jest więc stosowanie szyfrowania transmisji . Z kolei uwierzytelnienie Digest likwiduję tą niedogodność, ale za to nie jest obsługiwane przez większość przeglądarek, nie związanych z firmą Microsoft. Integrated Windows oznacza iż uwierzytelnienie jest ściśle związane z kontem, które jest aktualnie w użyciu. Serwer sprawdza tożsamość użytkownika i sam dokonuje weryfikacji czy ma on prawo do użycia danej aplikacji, bez konieczności podawania danych uwierzytelniających. Możliwe jest również stosowanie mieszanych zabezpieczeń., przez zaznaczenie kilku typów zabezpieczeń np. Anonymous i Basic. W tym wypadku zasoby określone w pliku konfiguracyjnym ASP .NET jako zabezpieczone, będą obsługiwane w serwerze IIS przez tryb „Basic”, a pozostałe przez „Anonymous”.
Rodzaj ustawienia można zmienić wybierając „Zarządzaj” z menu kontekstowego znajdującego się pod ikoną „Mój komputer” na pulpicie. Ustawienia aplikacji znajdują się w: Usługi i aplikacje-> Internetowe usługi informacyjne-> Witryny sieci Web-> Domyślna witryna sieci Web-> KatalogWirtualnyAplikacji-> Właściwości. W oknie Właściwości należy wybrać zakładkę „Zabezpieczenia katalogów” a następnie przycisk „Edytuj” z sekcji „Dostęp anonimowy i kontrola uwierzytelnienia”.

Druga z wież, jak już wspomniałem to ASP .NET. Umożliwia ona cztery typy uwierzytelnienia:
– Windows, oznacza iż za uwierzytelnienie odpowiedzialny jest IIS. W tym wypadku wybrany musi być typ Basic, Digest bądź Windows Integrated. To rozwiązanie jest dobre dla aplikacji intranetowych, gdzie wszyscy użytkownicy posiadają konta systemowe. Nie nadaje się jednak do aplikacji internetowych, ze względu na bardzo utrudniony mechanizm tworzenia nowych kont, dla każdego użytkownika chcącego korzystać z zabezpieczanej aplikacji www.
– Forms, oznacza iż uwierzytelnienie odbywa się po stronie ASP .NET. Użytkownik zanim dopuszczony zostanie do żądanego zasobu, kierowany jest na specjalnie utworzoną w tym celu stronę, gdzie podane swoje dane uwierzytelniające. Są one weryfikowane zazwyczaj w oparciu o zewnętrzne źródło danych. Uwierzytelnienie odbywa się tylko raz. Podczas dalszej współpracy użytkownika z aplikacją jego dane przesyłane są za pomocą cookie. IIS powinien mieć ustawiony tryb „Anonymous”.
– Passport, jest technologią umożliwiającą przeprowadzenie uwierzytelnienia, w oparciu o zewnętrznego dostawcę, który sprawdza tożsamość użytkownika. Wymaga to mniej pracy, no ale cóż, nic za darmo. To oczywiście kosztuje. Niewątpliwą zaletą tego rozwiązania jest możliwość zastosowania tych samych danych uwierzytelniających do wielu aplikacji. W wypadku Forms, każda aplikacja wymaga osobnej implementacji mechanizmu uwierzytelnienia. Również tu dane użytkownika wprowadzane są jednokrotnie, a dalej przesyłane są za pomocą cookie.
– None. Ten typ uwierzytelniania stosowany jest gdy, aplikacja posiada swój własny mechanizm zabezpieczeń. Jednym słowem wieża ASP .NET wyłączona jest z użycia, a IIS ma ustawiony tryb „Anonymous”.

Uwierzytelnianie Windows

Oznaczają one, iż domyślnie każdy z nie uwierzytelnionych użytkowników, nie będzie dopuszczony do zasobów aplikacji. Wyjątek stanowi zasób „default.aspx”, do którego dostęp mają wszyscy użytkownicy. W szczególności do strony „AddForm.aspx” nie ma dostępu użytkownik „JARTEKsomeone”. W serwerze IIS powinny zostać zaznaczone dwa typy zabezpieczeń: Basic i Anonymous. Drugi z wymienionych trybów będzie używany do dostępu do zasobu „default.aspx”. Jeżeli jakoś zasób wymaga podania danych uwierzytelniających, to system Operacyjny wyświetla okno logowania, w celu wprowadzenia tych danych.
System sam troszcz się o sprawdzanie czy użytkownik ma prawo dostępu do danego zasobu. Sam przechowuje także wprowadzone dane uwierzytelniające, tak iż nie trzeba ich podawać za każdym razem, gdy przedstawione zostanie żądanie dostępu do chronionego zasobu.

Uwierzytelnianie Forms

Użycie tego typu uwierzytelnienia wymaga ustawienia serwera IIS na typ zabezpieczeń „Anonymous”. W tym wypadku dostęp do zasobów również wymaga autoryzacji. Jednak tym razem nie jest ona automatycznie przeprowadzana przez system Operacyjny. programista musi sam utworzyć stronę, na którą kierowany jest użytkownik w celu wprowadzenia danych uwierzytelniających i zaimplementować mechanizm ich kontroli. Służy do tego dodatkowy blok „forms”, pokazany powyżej. Zasadniczo on dwa podstawowe elementy: „loginUrl” będący nazwą strony na której wprowadzane są uwierzytelniające, oraz „name” określające nazwę ciasteczka przechowującego te dane. Dodatkowo można również inne parametry, takie jak obsługę szyfrowanej transmisji. W bloku „forms”, można również opcjonalnie umieścić dane uwierzytelniające użytkowników, którzy mają dostęp do aplikacji. Służy do tego blok „credentials”.
Każdy z wierszy zawiera nazwę użytkownika („name”) oraz jego hasło(„password”). Dodatkowo określany jest również element „passwoerFormat”, określający sposób przechowywania hasła. W tym wypadku ma on postać czystego tekstu, co zdecydowanie nie jest zalecanym rozwiązaniem. Można jednak zmienić to ustawienie, tak aby hasło było szyfrowane. Służą do tego wartości „SHA1” lub „MD5”. W ogóle nie jest to jednak zbyt dobre rozwiązanie. Jest dość nie uniwersalne, ze względu na uciążliwe zarządzanie danymi użytkowników, używających aplikacji, jak i ze względów bezpieczeństwa. Dużo lepszym rozwiązaniem, jest użycie zewnętrznej bazy danych do przechowywania danych uwierzytelniających.
Po pozytywnym zweryfikowaniu danych wprowadzonych przez użytkownika (metoda log), następuje przekierowanie użytkownika na stronę do której pierwotnie się odwołał. Następuje to przy pomocy metody MobileFormsAuthentication.RedirectFromLoginPage. Jej argumentami jest ciąg znaków identyfikujący użytkownika (w naszym wypadku jest to identyfikator z bazy danych), oraz wartość logiczna, określająca czy ciasteczko przechowujące dane uwierzytelniające ma zostać zapisane na stałe na dysku twardym użytkownika (wartość true), czy też usunięte po wygaśnięciu jego ważności ( wartość false).