niedziela, 5 lutego 2012

Bezpieczeństwo aplikacji webowych

Bezpieczeństwo w Internecie

Internet ze swej natury jest środowiskiem, w którym każda czynność winna być wykonywana z uwzględnieniem aspektu bezpieczeństwa, i to zarówno z punktu widzenia danych umieszczanych na serwerach, jak i internautów. Z czego to wynika? Internet jest anonimowy i ma globalny zasięg, to znaczy potencjalnie każdy istniejący w internecie obiekt może zostać zaatakowany przez dowolną osobę, która jednocześnie może pozostać anonimowa (czyli bezkarna). Z drugiej strony użytkownicy przeglądając serwisy internetowe, rejestrując się w portalach i umieszczając informacje na swój temat narażają się na wykorzystanie tych informacji do innych celów, bądź nawet na kradzież tożsamości.

Każdy z elementów internetu jest inaczej podatny na ataki. Strony internetowe ze swej natury zawierają publiczne treści, więc potencjalnie nie jest istotny aspekt podsłuchu. Tylko że bezpieczeństwo należy rozpatrywać nie tylko z punktu widzenia serwera, ale również internauty. On również jest narażany na niebezpieczeństwo. Chodzi przede wszystkim o ochronę danych osobowych. Ochronie winny podlegać nie tylko przesyłane hasła. Dostęp do informacji na temat oglądanych stron jest również zamachem na prywatność internauty.

Atak na strony

Atak może polegać na zmianie stanu obiektu (np. na podmianie treści, zainstalowaniu niechcianego programu itp), bądź na podsłuchaniu transmisji (odczytaniu treści danych, które miały pozostać niejawne). Na podsłuch narażona jest każda transmisja, należy zakładać że żaden kanał transmisyjny nie jest w pełni bezpieczny, zawsze może dany fragment zostać przechwycony. Atak może też polegać na uniemożliwieniu normalnego działania obiektu. Ten rodzaj ataku, określany często skrótem DOS polega na przykład na przeciążaniu serwerów, tak aby nie potrafiły na bieżąco wysyłać stron do osób, które tego żądają.

HTTPS

Podstawowy protokół komunikacyjny w internecie to http. Umożliwia on wymianę komunikatów pomiędzy hostami w postaci niezaszyfrowanej. Dlatego też opracowano wersję szyfrowaną, określaną mianem HTTPS. Zapewnia on bezpieczny kanał transmisji, który nie zostanie ani podsłuchany ani zmodyfikowany. Z protokołem tym związanych jest szereg elementów takich jak certyfikaty, algorytmy kryptograficzne, które z jednej strony zapewniają bezpieczeństwo, z drugiej wprowadzają komplikacje w obsłudze oraz nieco spowalniają transmisje. To może tłumaczyć dlaczego jest stosunkowo tak niewielki udział transmisji szyfrowanych w internecie. Z drugiej strony powszechne traktowanie tego protokołu jako panaceum na bezpieczną transmisję stanowi zagrożenie innego rodzaju. Ignorowane są inne środki zapobiegawcze, a wiadomym jest że nie jest bezpiecznie jeżeli wszystko zależy od jednego elementu. Dlatego też stosuje się niezależnie inne rozwiązania dbające o bezpieczeństwo.

Logowanie

Aplikacja podejmując pracę winna dowiedzieć się, z kim ma do czynienia. Uwierzytenianie (potocznie logowanie) jest bardzo istotną funkcją z punktu widzenia bezpieczeństwa. Ma zapewnić, że uprawniony użytkownik zostanie prawidłowo zidentyfikowany przez aplikację, która tym samym udostępni swe zasoby (zgodnie z posiadanymi uprawnieniami przez użytkownika). Ale jednocześnie cały proces uwierzytelniania nie będzie mógł posłużyć do przejęcia takich danych. Jednym z rozwiązań jest nie przesyłanie jawnym tekstem wprowadzanego przez użytkownika hasła. Oprócz podsłuchu transmisji (która "przecież" zabezpieczona jest protokołem HTTPS) są jeszcze logi serwera, które nie mogą zawierać tak wrażliwych danych. Dobrze jest przesyłać je w postaci zaszyfrowanej lub z wykorzystanie jednokierunkowej funkcji skrótu.

Identyfikator sesji

Przyjęło się że identyfikator sesji przechowuje się jako Cookie. Jest to powszechnie stosowany mechanizm, posiadający szereg atrybutów pozwalających na dostosowanie działania do własnych potrzeb. Po pierwsze można określić czas ważności takiego identyfikatora. Przy określonym dłuższym okresie użytkownik otwierając przeglądarkę może automatycznie mieć przywróconą sesję. W większości przypadków lepiej jest gdy nie ma określonego terminu (atrybut Expires) wtedy identyfikator kończy ważność w momencie zamknięcia strony. Drugim atrybutem podnoszącym bezpieczeństwo jest HttpOnly dostępny we wszystkich nowoczesnych przeglądarkach. Gdy jest obecny zabronione są wszelkie (poza czystym Http) manipulacje tym "ciasteczkiem" w tym poprzez JavaScript. Tym samym minimalizowane jest niebezpieczeństwo przejęcia sesji przez atak XSS.

Identyfikatory stron

Nazewnictwo stron internetowych (URL) ma również wpływ na bezpieczeństwo. Atakujący znając strukturę stron może znaleźć słaby punkt i przeprowadzić skuteczny atak. Najbardziej podatne (najtrudniejsze do ochrony) jest stosowanie zasad REST. Każdy obiekt ma zawsze taką samą nazwę. Jest to podyktowanie chęcią wspomożenia takich aspektów jak cache czy tryb bezpołączeniowy. W przypadku zaawansowanych aplikacji aspekty te są nieistotne. Każda transmisja jest w trybie połączeniowym (aplikacja nie udostępnia danych anonimowo). Tak samo dane mogą się dynamicznie zmieniać, cache winien być wyłączony do znacznej części wyświetlanych elementów. Tak więc cele REST są pomijalne a ryzyko realne. Rozwiązanie przyjęte przeze mnie jest całkowitym odwróceniem zasad REST. Każda strona posiada URL który jest losowo jej przydzielany i jest unikalny od wszystkich innych stron wyświetlanych przez ten serwer. Takie jednorazowe identyfikatory są popularnym rozwiązaniem z zakresu bezpieczeństwa (vide: hasła jednorazowe). Dla przeglądarki to nie ma większego znaczenia, gdyż każdy link na stronie zawiera właściwy URL, i czy to jest zrozumiałe dla człowieka czy też nie - nie ma większego znaczenia dla działania. Istotne jest to, że dla każdego użytkownik rozpoczynającego sesję tworzona jest lista stron do których ma prawo. Strony są tworzone dynamicznie, a za każdym razem aktualizowana jest lista stron dostępnych obecnie użytkownikowi. Rozwiązanie to bazuje na systemie zarządzania oknami w systemie Windows, gdzie każde okno ma "uchwyt" czyli 32-bitowy unikalny numer.

Brak komentarzy:

Prześlij komentarz