Uwierzytelnianie wieloskładnikowe (ang. MFA) to świetny sposób na zwiększenie bezpieczeństwa aplikacji internetowych, sesji pulpitu zdalnego, VPN i praktycznie każdej innej usługi, do której użytkownik może się logować. Wprowadzając jeden lub więcej dodatkowych czynników do procesu uwierzytelniania, można udowodnić, że ktoś naprawdę jest tym, za kogo się podaje, i zapobiec znacznej ilości podszywania się, kradzieży tożsamości i ataków opartych na poświadczeniach.

Jednak przy wybieraniu i wdrażaniu technologii MFA ważne jest, aby dokładnie zrozumieć, co chroni, a czego nie, i jakie luki bezpieczeństwa może pozostawić. Chociaż MFA jest świetne, nie jest panaceum na wszystkie ataki oparte na uwierzytelnianiu i należy na nie patrzeć tylko jako część całej polityki bezpieczeństwa.

Jednym z przykładów ukazujących słabości MFA, a bardziej może luki przeglądarek internetowych, jest wykorzystanie plików cookie do obejścia wieloskładnikowego logowania.
Atak nosi nazwę Pass-the-Cookie i w tym artykule pokażemy na czym polega i jak można się przed nim uchronić.


Ciasteczka w przeglądarce

Nie będziemy tutaj wchodzić w szczegóły techniczne i omawiać samych plików cookie. Ważne jest, aby wiedzieć o ich podstawowych funkcjach i przeznaczeniu.

Pliki „cookies” to niewielkie pakiety informacji, wysyłane przez serwis internetowy, który odwiedzamy. Są zapisywane na urządzeniu końcowym (komputerze, laptopie, smartfonie), z którego korzystamy podczas przeglądania stron internetowych.
W ciasteczkach składających się z szeregu liter i cyfr, znajdują się różne informacje niezbędne do funkcjonowania serwisów internetowych, np. tych wymagających autoryzacji.
Ciasteczka umożliwiają także m.in. zapamiętanie naszych preferencji i personalizowanie stron internetowych w zakresie wyświetlanych treści oraz dopasowania reklam. Dzięki „cookies” możliwe jest też rejestrowanie produktów i usług czy głosowanie w internetowych ankietach.

Nas interesuje to, że ciasteczka to sposób, w jaki aplikacje internetowe mogą przechowywać dane uwierzytelniające użytkowników. Dzięki temu witryna internetowa może logować nas, bez wyświetlania ciągłych monitów o podanie nazwy konta i hasła.

Co się stanie, jeśli ciasteczka z danymi uwierzytelniającymi wpadną w niepowołane ręce?


Co oznacza „Pass-the-Cookie”?

Pojęcie ataku Pass-the-Cookie jest bardzo podobne do Pass-the-Hash czy Pass-the-Ticket, które służą do nieuprawionego wykorzystania poświadczeń w domenie Active Directory. Zasadniczo, jeśli skonfigurujesz MFA na swoich aplikacjach internetowych, użytkownik przy logowaniu zostanie poproszony o dostarczenie dodatkowego dowodu, że jest tym, za kogo się podaje, na przykład potwierdzenia powiadomienia „push” na swoim urządzeniu mobilnym. Po pozytywnym przejściu tych testów, użytkownik zostanie wpuszczony do aplikacji poprzez przeglądarkę internetową. W tym momencie tworzony jest plik cookie i zapisywany dla sesji tego użytkownika.

Jest to podobne do działania protokołu Kerberos lub NTLM, w których po zakończeniu procesu uwierzytelniania artefakt jest przechowywany lokalnie w pamięci systemu. Jest to wykorzystywane do przyszłych uwierzytelnień. Dzięki temu użytkownik może swobodnie pracować i nie jest stale proszony o podanie hasła.

Gdyby ktoś był w stanie wyodrębnić odpowiednie pliki cookies przeglądarki, mógłby uwierzytelnić się jako inny użytkownik w całkowicie oddzielnej sesji w innym systemie, omijając po drodze wszystkie punkty kontrolne MFA. Jest to tożsame z tym, w jaki sposób użytkownik może „przekazać” hash NTLM lub bilet Kerberos, jeśli wyodrębni go z pamięci komputera użytkownika.


Wyciągnięcie danych z ciasteczek

Skupimy się na najpopularniejszej przeglądarce internetowej na Świecie jaką jest Google Chrome.
Chrome przechowywuje pliki cookies w następującej lokalizacji w bazie danych SQLite:

% localappdata% \ Google \ Chrome \ User Data \ Default \ Cookies

Pliki nie są oczywiście dostępne dla zwykłego użytkownika czy nawet administratora systemu. Są zaszyfrowane za pośrednictwem interfejsu API ochrony danych Microsoft (DPAPI). Pisaliśmy już trochę o tym mechanizmie i jego słabościach w artykule tutaj. W skrócie, jest to szyfrowanie danych za pomocą kluczy kryptograficznych, które należą do użytkownika, który jest właścicielem danych. Potrzeba więc sposobu na uzyskanie dostępu do bazy danych cookies i odszyfrowania informacji na tekst zrozumiały przez przeglądarkę.

Na szczęście Benjamin Delpy, twórca narzędzia Mimikatz, przeprowadził badania na ten temat i udało mu się zaimplementować w swoim narzędziu moduł, który wyodrębnia dane z plików cookies użytkownika, nawet jeśli są one szyfrowane. Służy do tego następujące polecenie:

dpapi :: chrome / in: “% localappdata% \ Google \ Chrome \ User Data \ Default \ Cookies” / unprotect

Aby komenda stała się uniwersalna i była możliwa do wywołania bezpośrednio z linii komend w kontekście użytkownika, którego dane chcemy pozyskać, zmieniliśmy ją w następujący sposób:

mimikatz.exe privilege :: debug log “dpapi :: chrome / in:% localappdata% \ google \ chrome \ USERDA ~ 1 \ default \ cookies / unprotect” exit

Po jej wywołaniu otrzymamy wylistowane dane z plików cookies dotyczące każdej witryny, która takie pliki wysłała do urządzenia użytkownika końcowego.


Scenariusz ataku

Użytkownik o nazwie „kapitanhack” posiada konto Microsoft, do którego uwierzytelnia się w przeglądarce internetowej za pomocą weryfikacji dwuetapowej. Użytkownik ten nie jest administratorem na swojej stacji roboczej, ale może być już administratorem w portalu Office 365 lub Microsoft Azure, co jest dość powszechną sytuacją.
Weryfikacja dwuetapowa daje poczucie bezpieczeństwa, ponieważ dopóki ktoś nie ukradnie naszego telefonu nasze konto powinno być nie do złamania, prawda?
Niestety nie do końca. Wyobraźmy sobie, że „kapitanhack” kliknął na złośliwy link i jego stacja została skompromitowana i atakujący jest w stanie wykonać kod w jego kontekście.

Zaczniemy od wykonania komendy Mimikatz z poprzedniego rozdziału:

mimikatz.exe privilege :: debug log “dpapi :: chrome / in:% localappdata% \ google \ chrome \ USERDA ~ 1 \ default \ cookies / unprotect” exit

Dzięki parametrowi „log” cały wynik zostanie zapisany do pliku tekstowego w celu łatwiejszego wyszukania odpowiednich wartości ciasteczek.

Ciasteczek w pliku jest bardzo dużo i musimy wiedzieć czego dokładnie szukamy. Jak wspominaliśmy, chcemy wykorzystać ciasteczka do zalogowania się na konto Microsoft Online. Powinniśmy więc szukać ciasteczek o nazwach: ESTSAUTH, ESTSAUTHPERSISTENT lub ESTSAUTHLIGHT. Na inne platformy, jak na przykład Google, AWS czy Facebook, atakujący będzie musiał wykorzystać inne ciasteczka. Lista najbardziej popularnych przedstawiona jest w dokumencie Johann’a Rehberger’a tutaj. W niektórych przypadkach wymagane jest przekazanie do przeglądarki nawet czterech różnych wartości, czasami wystarczy tylko jeden wpis.

W naszym wyekstrahowanych ciasteczkach widzimy te dotyczące konta w Microsoft Online.

Teraz wystarczy tylko przekazać ciasteczka do sesji przeglądarki. W Google Chrome jest to bardzo proste i nie wymaga żadnych dodatkowych trików czy narzędzi. Tak jakby twórcy aplikacji sami dali nam do tego interfejs. Na stronie logowania do usługi Microsoft klikamy prawym przyciskiem myszy i wybieramy opcję „Inspect” lub „Zbadaj”, w zależności od języka.
Jak widzimy atakujący nie zna ani maila, ani loginu, ani hasła do konta, które chce przejąć. Oczywiście nie ma też dostępu do jego urządzenia mobilnego.

Następnie w otwartym oknie należy przejść do zakładki „Application” i otworzyć sekcję „Cookies”. Ukażą nam się aktualnie używane w tej sesji ciasteczka. Tych, o które nam konkretnie chodzi oczywiście brakuje 🙂

Dodamy wpisy ESTSAUTH oraz ESTSAUTHPERSISTEN klikając PPM i wybierają opcję „Add New”. Odpowiednie parametry należy przekleić z logu tekstowego z Mimikatz.

Następnie możemy po prostu odświeżyć stronę, a zostaniemy pomyślnie zalogowani na konto użytkownika „kapitanhack”. Bez konieczności podawania kodu z urządzenia mobilnego.


Jak się ochronić?

Atak Pass-the-Cookie jest szczególnie niepokojący z dwóch powodów. Po pierwsze, jego przeprowadzenie nie wymaga uprawnień administracyjnych na systemie. Wszyscy użytkownicy mają dostęp do odczytu i odszyfrowania swoich własnych plików cookies. Atak można więc wykonać w kontekście konta użytkownika, który nie jest administratorem.
Po drugie, atakujący nie musi znać hasła do konta ani nawet jego adresu e-mail, aby Pass-the-Cookie zadziałało. Jeśli odpowiednie ciasteczko, odpowiedzialne za tak zwane „Stay Signed In” w przeglądarce zostanie przejęte, sesja zostanie od razu przepuszczona przez wszystkie zabezpieczenia. Nawet po zamknięciu i ponownym uruchomieniu przeglądarki.

Aby zapobiec tego typu zagrożeniom, można wprowadzić rygorystyczne zasady automatycznego kasowania plików cookie za każdym razem, gdy przeglądarka zostanie zamknięta. Często jednak jest to bardzo uciążliwe i nie pozwala normalnie funkcjonować, zwłaszcza, gdy użytkownik posiada bardzo długie i skomplikowane hasło zapamiętane w przeglądarce, a do uwierzytelnienia używa tylko drugiego składnika. Jeśli to tylko możliwe, należy nie zapamiętywać poświadczeń w przeglądarce i nie zezwalać na „Stay Signed In”.
Pomocne przy wykrywaniu tego typu zagrożeń, mogą być także narzędzia bezpieczeństwa do monitorowania uwierzytelnień i wykrywania zagrożeń opartych na przejmowaniu poświadczeń.