Cognito User Pools
Podstawowe informacje
Pula użytkowników to katalog użytkowników w Amazon Cognito. Dzięki puli użytkowników Twoi użytkownicy mogą zalogować się do Twojej aplikacji internetowej lub mobilnej za pośrednictwem Amazon Cognito, lub federować za pośrednictwem dostawcy tożsamości zewnętrznej (IdP). Bez względu na to, czy użytkownicy logują się bezpośrednio czy za pośrednictwem strony trzeciej, wszyscy członkowie puli użytkowników mają profil katalogowy, do którego można uzyskać dostęp za pomocą SDK.
Pule użytkowników zapewniają:
Usługi rejestracji i logowania.
Wbudowany, dostosowywalny interfejs użytkownika do logowania użytkowników.
Logowanie za pomocą mediów społecznościowych takich jak Facebook, Google, Logowanie za pomocą Amazona i Logowanie za pomocą Apple, oraz za pomocą dostawców tożsamości SAML i OIDC z Twojej puli użytkowników.
Zarządzanie katalogiem użytkowników i profilami użytkowników.
Funkcje zabezpieczeń takie jak uwierzytelnianie wieloskładnikowe (MFA), sprawdzanie skompromitowanych poświadczeń, ochrona przed przejęciem konta oraz weryfikacja telefonu i e-maila.
Dostosowane przepływy pracy i migracja użytkowników za pomocą wyzwalaczy AWS Lambda.
Kod źródłowy aplikacji zazwyczaj zawiera również identyfikator puli użytkowników i identyfikator aplikacji klienckiej, (a czasami sekret aplikacji?) które są potrzebne do zalogowania się do puli użytkowników Cognito.
Potencjalne ataki
Rejestracja: Domyślnie użytkownik może się zarejestrować, więc mógłby utworzyć użytkownika dla siebie.
Wyliczanie użytkowników: Funkcjonalność rejestracji może być wykorzystana do znalezienia nazw użytkowników, które już istnieją. Te informacje mogą być przydatne do ataku metodą brutalnej siły.
Atak brutalnej siły logowania: W sekcji Uwierzytelnianie znajdziesz wszystkie metody, których użytkownik musi użyć do zalogowania się, możesz spróbować je atakować metodą brutalnej siły, aby znaleźć poprawne poświadczenia.
Narzędzia do testowania penetracyjnego
Pacu, framework eksploatacji AWS, teraz zawiera moduły "cognito__enum" i "cognito__attack", które automatyzują wyliczanie wszystkich zasobów Cognito w koncie i flagują słabe konfiguracje, atrybuty użytkownika używane do kontroli dostępu, itp., oraz automatyzują tworzenie użytkownika (w tym obsługę MFA) i eskalację uprawnień na podstawie modyfikowalnych niestandardowych atrybutów, użytecznych poświadczeń puli tożsamości, ról do przyjęcia w tokenach id, itp.
Aby uzyskać opis funkcji modułów, zobacz część 2 postu na blogu. Aby uzyskać instrukcje instalacji, zobacz główną stronę Pacu.
Użycie
Przykładowe użycie ataku cognito__attack w celu próby utworzenia użytkownika i wszystkich wektorów eskalacji uprawnień przeciwko określonej puli tożsamości i klientowi puli użytkowników:
Przykładowe użycie cognito__enum do zebrania wszystkich pul użytkowników, klientów pul użytkowników, pul tożsamości, użytkowników itp. widocznych w bieżącym koncie AWS:
Cognito Scanner to narzędzie CLI napisane w języku Python, które implementuje różne ataki na Cognito, w tym niechciane tworzenie kont i konto oracle.
Instalacja
Użycie
Dla dalszych informacji sprawdź https://github.com/padok-team/cognito-scanner
Rejestracja
Pule użytkowników domyślnie umożliwia rejestrację nowych użytkowników.
Jeśli każdy może się zarejestrować
Możesz napotkać błąd wskazujący, że musisz podac więcej szczegółów dotyczących użytkownika:
Możesz podać potrzebne szczegóły za pomocą JSON, na przykład:
Możesz również użyć tej funkcji do wyliczenia istniejących użytkowników. To jest komunikat błędu, gdy użytkownik o takiej nazwie już istnieje:
Zauważ w poprzedniej komendzie, jak niestandardowe atrybuty zaczynają się od "custom:". Pamiętaj również, że podczas rejestracji nie możesz tworzyć nowych niestandardowych atrybutów dla użytkownika. Możesz jedynie przypisać wartość do domyślnych atrybutów (nawet jeśli nie są one wymagane) oraz określonych atrybutów niestandardowych.
Lub po prostu, aby sprawdzić, czy identyfikator klienta istnieje. To jest błąd, jeśli identyfikator klienta nie istnieje:
Jeśli tylko administrator może rejestrować użytkowników
Błąd ten spowoduje, że nie będziesz mógł zarejestrować ani wyliczyć użytkowników:
Weryfikacja rejestracji
Cognito umożliwia weryfikację nowego użytkownika poprzez zweryfikowanie jego adresu e-mail lub numeru telefonu. Dlatego podczas tworzenia użytkownika zazwyczaj będziesz musiał podać co najmniej nazwę użytkownika i hasło oraz adres e-mail i/lub numer telefonu. Ustaw jedno które kontrolujesz, aby otrzymać kod do weryfikacji twojego nowo utworzonego konta użytkownika w ten sposób:
Nawet jeśli wygląda na to, że możesz użyć tego samego adresu e-mail i numeru telefonu, gdy musisz zweryfikować utworzonego użytkownika, Cognito zgłosi problem z użyciem tych samych informacji i nie pozwoli na weryfikację konta.
Eskalacja uprawnień / Aktualizacja atrybutów
Domyślnie użytkownik może zmieniać wartość swoich atrybutów za pomocą:
Przywileje podnoszenia atrybutów niestandardowych
Możesz znaleźć używane atrybuty niestandardowe (takie jak isAdmin
), ponieważ domyślnie możesz zmieniać wartości swoich własnych atrybutów, możesz podnieść uprawnienia zmieniając wartość samodzielnie!
Przywileje modyfikacji e-maila/nazwy użytkownika
Możesz użyć tego do modyfikacji adresu e-mail i numeru telefonu użytkownika, ale nawet jeśli konto pozostaje zweryfikowane, te atrybuty są ustawione w stanie niezweryfikowanym (musisz je zweryfikować ponownie).
Nie będziesz w stanie zalogować się za pomocą adresu e-mail lub numeru telefonu dopóki ich nie zweryfikujesz, ale będziesz mógł zalogować się za pomocą nazwy użytkownika.
Zauważ, że nawet jeśli adres e-mail został zmodyfikowany i nie został zweryfikowany, pojawi się on w Tokenie ID wewnątrz pola email
i pole email_verified
będzie false, ale jeśli aplikacja nie sprawdza tego, możesz podawać się za innych użytkowników.
Ponadto, zauważ, że możesz umieścić cokolwiek w polu name
po prostu modyfikując atrybut nazwy. Jeśli aplikacja sprawdza to pole z jakiegoś powodu zamiast email
(lub jakiegokolwiek innego atrybutu), możesz podawać się za innych użytkowników.
W każdym razie, jeśli z jakiegoś powodu zmieniłeś swój adres e-mail na przykład na nowy, możesz uzyskać dostęp, potwierdzając e-mail za pomocą otrzymanego w nim kodu:
Użyj phone_number
zamiast email
do zmiany/weryfikacji nowego numeru telefonu.
Administrator może również włączyć opcję logowania za pomocą preferowanego nazwy użytkownika. Zauważ, że nie będziesz mógł zmienić tej wartości na żaden nazwa użytkownika lub preferred_username, który jest już używany do podszywania się pod innego użytkownika.
Odzyskiwanie/Zmiana Hasła
Możliwe jest odzyskanie hasła, znając jedynie nazwę użytkownika (lub akceptowany jest email lub telefon) i mając do niego dostęp, kod zostanie tam wysłany:
Odpowiedź serwera zawsze będzie pozytywna, jakby nazwa użytkownika istniała. Nie można użyć tej metody do wyliczenia użytkowników.
Z kodem można zmienić hasło na:
Aby zmienić hasło, musisz znać poprzednie hasło:
Uwierzytelnianie
Pula użytkowników obsługuje różne sposoby uwierzytelniania. Jeśli masz nazwę użytkownika i hasło, istnieją również różne obsługiwane metody logowania. Ponadto, gdy użytkownik jest uwierzytelniony w puli, są udostępniane 3 rodzaje tokenów: Token ID, Token dostępu i Token odświeżania.
Token ID: Zawiera twierdzenia dotyczące tożsamości uwierzytelnionego użytkownika, takie jak
imię
,e-mail
inumer telefonu
. Token ID można również użyć do uwierzytelniania użytkowników w serwerach zasobów lub aplikacjach serwerowych. Musisz zweryfikować podpis tokena ID, zanim będziesz mógł ufać jakimkolwiek twierdzeniom wewnątrz tokena ID, jeśli używasz go w aplikacjach zewnętrznych.Token ID to token, który zawiera wartości atrybutów użytkownika, nawet te niestandardowe.
Token dostępu: Zawiera twierdzenia dotyczące uwierzytelnionego użytkownika, listę grup użytkownika i listę zakresów. Celem tokena dostępu jest autoryzacja operacji API w kontekście użytkownika w puli użytkowników. Na przykład, możesz użyć tokenu dostępu do udzielenia użytkownikowi dostępu do dodawania, zmiany lub usuwania atrybutów użytkownika.
Token odświeżania: Dzięki tokenom odświeżania możesz uzyskać nowe tokeny ID i dostępu dla użytkownika, dopóki token odświeżania jest nieważny. Domyślnie token odświeżania wygasa 30 dni po zalogowaniu się użytkownika do puli użytkowników. Podczas tworzenia aplikacji dla puli użytkowników możesz ustawić wygaśnięcie tokena odświeżania aplikacji na dowolną wartość między 60 minutami a 10 latami.
ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH
To jest przepływ uwierzytelniania po stronie serwera:
Aplikacja po stronie serwera wywołuje operację API
AdminInitiateAuth
(zamiastInitiateAuth
). Ta operacja wymaga poświadczeń AWS z uprawnieniami, które obejmującognito-idp:AdminInitiateAuth
icognito-idp:AdminRespondToAuthChallenge
. Operacja zwraca wymagane parametry uwierzytelniania.Po uzyskaniu aplikacja po stronie serwera parametrów uwierzytelniania, wywołuje operację API
AdminRespondToAuthChallenge
. Operacja APIAdminRespondToAuthChallenge
udaje się tylko wtedy, gdy podasz poświadczenia AWS.
Ta metoda NIE jest włączona domyślnie.
Aby zalogować się, musisz znać:
identyfikator puli użytkowników
identyfikator klienta
nazwę użytkownika
hasło
sekret klienta (tylko jeśli aplikacja jest skonfigurowana do użycia sekretu)
Aby móc zalogować się tą metodą, aplikacja musi zezwalać na logowanie za pomocą ALLOW_ADMIN_USER_PASSWORD_AUTH
.
Ponadto, aby wykonać tę czynność, potrzebujesz poświadczeń z uprawnieniami cognito-idp:AdminInitiateAuth
i cognito-idp:AdminRespondToAuthChallenge
.
Last updated