Mechanizmy uwierzytelniania i zarządzania sesją użytkownika stanowią nieodłączny element każdej większej internetowej aplikacji bazodanowej. Jeśli nie podjęto wystarczających kroków w celu ich zabezpieczenia, napastnik może uzyskać poziom uprawnień, który pozwoli mu na wykonania operacji zagrażających bezpieczeństwu zarówno całego systemu jak i użytkowników z niego korzystających.
Ataki na proces uwierzytelniania
Uwierzytelnianie użytkowników można zdefiniować jako proces weryfikacji czy dany użytkownik jest tą osobą, za którą się podaje [OWASP02, s.16]. Najpopularniejszym sposobem uwierzytelniania użytkowników w Internecie są obecnie hasła. Niestety ciągle obserwowany jest wzrost efektywności rozmaitych programów do łamania szyfrowanych haseł [KLG03, s.393].
Wyróżnia się dwa podstawowe sposoby łamania haseł [SGT05, s.229] :
Bez względu na szczegółowe nazwy tych ataków, należy je traktować jako techniki siłowe, czyli takie, które w drodze zautomatyzowanego procesu metodą prób i błędów próbują odgadnąć dane uwierzytelniające.
Według innego podziału można wyróżnić następujące ataki siłowe [WASC04a, s.11] :
Wartym odnotowania jest fakt, że atak siłowy z reguły wymaga dużych nakładów czasowych, co może być często zniechęcającym czynnikiem dla napastnika. Kluczową rolę odgrywa stopień skomplikowania haseł przechowywanych w systemie.
Specyficzną odmianą zagrożeń związanych z procesem uwierzytelniania są ataki socjotechniczne. Największy problem polega na tym, że nie są to ataki techniczne, a jedynie próby nakłaniania użytkowników do wykonania nierozsądnych działań [Schl04, s.332]. Najczęściej przyjmują następującą formę [Schl04, s.332] :
Wyżej wymienione formy ataku często są też ze sobą łączone. Ochrona przed tego typu zagrożeniami na poziomie aplikacji jest niemożliwa. Praktycznie jedyne, co można zrobić, to uświadomić użytkowników o istniejącym niebezpieczeństwie tak, aby starali się go unikać.
Ataki na sesje użytkownika
Mechanizm zarządzania sesją jest powszechnie stosowany w celu identyfikacji i śledzenia użytkownika pomiędzy kolejnymi podstronami. W rezultacie nie musi on podawać swoich danych uwierzytelniających - z reguły nazwy i hasła - przed obejrzeniem każdej podstrony w ramach danej witryny. Użytkownikowi przydzielany jest unikalny identyfikator, dzięki któremu aplikacja jest w stanie go rozpoznać, odczytać i przydzielić odpowiedni zestaw uprawnień lub innych danych specyficznych dla niego. Duża grupa zagrożeń dotyczących mechanizmu autoryzacji ma związek właśnie z tym identyfikatorem sesji. Użycie przez atakującego tego samego identyfikatora co prawowity użytkownik prowadzi bowiem do nieuprawnionego dostępu do aplikacji i wykonania operacji w jego imieniu.
Wyróżnia się kilka ataków i zagrożeń związanych z sesjami. Należą do nich przechwycenie sesji, wymuszenie sesji, ujawnienie danych sesji, podmiana całej sesji oraz podmiana danych sesji.
Przechwycenie sesji (Session Hijacking) odnosi się do tych ataków, które próbują uzyskać dostęp do istniejącej sesji użytkownika [Shif04b, s.42]. Oznacza to tych użytkowników, którym identyfikator został już przydzielony. Znane są dwie podstawowe metody uzyskania identyfikatora sesji :
Kolejny rodzaj ataku, określany terminem “wymuszenie sesji” (Session Fixation), różni się od opisanych wyżej technik tym, że napastnik nie skupia swojej uwagi na zdobyciu identyfikatora sesji ofiary, a raczej na skłonieniu ofiary do użycia identyfikatora określonego przez niego samego [Olse04, s.12]. Innymi słowy, użytkownik zostaje nieświadomie skłoniony do użycia sesji zainicjowanej przez atakującego. Atak ten przebiega w trzech krokach [Kols02; Esse05] :

Nieco innym rodzajem zagrożeń są : ujawnienie danych sesyjnych oraz podmiana całej sesji. Oba wykorzystują dość kontrowersyjną cechę języka PHP. Otóż w standardowej konfiguracji, PHP zapisuje sesje w pliku, w tym samym katalogu (w przypadku systemu operacyjnego Linux jest to katalog tymczasowy /tmp), w wyniku czego w środowiskach współdzielonych wiele osób zapisuje dane sesyjne w tym samym miejscu i z tymi samymi uprawnieniami [Jaku03]. Atakujący może to wykorzystać do podmiany pliku sesji lub danych w nim zawartych. Testy dowodzą, że w ten sposób skonfigurowanych jest wiele kont u wielu dostawców usług hostingowych, a także serwerów uczelnianych [Mrug06, s. 75]. Jednakże problem nie dotyczy tylko środowisk współdzielonych. Ujawnienie plików sesji jest możliwe bowiem także np. przy użyciu Directory Traversal, natomiast do modyfikacji tych plików można wykorzystać chociażby podatność aplikacji na iniekcję poleceń systemowych.
Ostatnie z zagrożeń opisywanych w niniejszym punkcie, czyli atak polegający na podmianie danych sesji (ang. Session Injection) nie do końca związany jest z samym mechanizmem zarządzania sesją. O wiele bardziej dotyczy zagrożeń iniekcji złośliwego kodu oraz manipulacji parametrami wejściowymi. Podmiana danych sesji polega na nieautoryzowanym rejestrowaniu zmiennych w sesji [Jaku03]. Atak ten możliwy jest wtedy, gdy zmienne sesyjne inicjowane lub modyfikowane są na podstawie danych pochodzących od użytkownika, a weryfikacja tych danych jest niewystarczająca.
Jak pokazują wyżej omówione zagrożenia związane z poprawnym uwierzytelnianiem i identyfikacją użytkownika, kwestia ochrony tych mechanizmów nie powinna być lekceważona, tym bardziej że standardowy mechanizm sesji zaimplementowany w PHP nie daje wystarczającego poziomu bezpieczeństwa. Dodatkowo możliwość wykorzystania innych technik ataku na aplikację internetowe w celu przejęcia sesji użytkownika, pokazuje, że na bezpieczeństwo stron WWW powinno się patrzeć całościowo z szczególnym naciskiem na metody wykorzystujące wstrzykiwanie wrogiego kodu. Metody te bowiem bardzo często stają się skutecznym środkiem w przeprowadzanych atakach.
Artykuł jest fragmentem pracy "BEZPIECZEŃSTWO INTERNETOWYCH APLIKACJI BAZODANOWYCH PHP/MySQL - ZAGROŻENIA" autorstwa Przemka Sobstela. Tekst został opublikowany na zasadach licencji Creative Commons