Cognito Identity Pools
Podstawowe informacje
Pule tożsamości pełnią kluczową rolę, umożliwiając Twoim użytkownikom uzyskanie tymczasowych poświadczeń. Te poświadczenia są niezbędne do uzyskania dostępu do różnych usług AWS, w tym między innymi Amazon S3 i DynamoDB. Istotną cechą pul tożsamości jest ich obsługa zarówno dla anonimowych gości, jak i dla różnych dostawców tożsamości do uwierzytelniania użytkowników. Obsługiwane dostawcy tożsamości obejmują:
Pule użytkowników Amazon Cognito
Opcje logowania społecznościowego, takie jak Facebook, Google, Logowanie z Amazonem i Logowanie z Apple
Dostawcy zgodni z protokołem OpenID Connect (OIDC)
Dostawcy tożsamości SAML (Security Assertion Markup Language)
Uwierzytelnione tożsamości dewelopera
Cognito Sync
Aby wygenerować sesje puli tożsamości, najpierw musisz wygenerować ID tożsamości. To ID tożsamości jest identyfikacją sesji tego użytkownika. Te identyfikacje mogą mieć do 20 zestawów danych, które mogą przechowywać do 1 MB par klucz-wartość.
Jest to przydatne do przechowywania informacji o użytkowniku (który zawsze będzie korzystał z tego samego ID tożsamości).
Ponadto, usługa cognito-sync to usługa, która umożliwia zarządzanie i synchronizację tych informacji (w zestawach danych, wysyłanie informacji w strumieniach i wiadomościach SNS...).
Narzędzia do pentestowania
Pacu, framework eksploatacji AWS, teraz zawiera moduły "cognito__enum" i "cognito__attack", które automatyzują wyliczanie wszystkich zasobów Cognito w koncie, wykrywanie słabych konfiguracji, atrybutów użytkownika używanych do kontroli dostępu itp., a także automatyzują tworzenie użytkowników (w tym obsługę MFA) i eskalację uprawnień na podstawie modyfikowalnych niestandardowych atrybutów, użytecznych poświadczeń puli tożsamości, roli do przyjęcia w tokenach identyfikacyjnych itp.
Opis funkcji modułów znajduje się w części 2 wpisu na blogu. Instrukcje instalacji znajdują się na głównej stronie Pacu.
Użycie
Przykładowe użycie narzędzia cognito__attack do próby tworzenia użytkownika i wszystkich wektorów eskalacji uprawnień dla określonej puli tożsamości i klienta 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:
Ten polecenie wyświetli wszystkie dostępne informacje o pulach użytkowników, klientach pul użytkowników, pulach tożsamości i użytkownikach w bieżącym koncie AWS.
Cognito Scanner to narzędzie wiersza poleceń napisane w języku Python, które implementuje różne ataki na Cognito, w tym niechciane tworzenie kont i eskalację puli tożsamości.
Instalacja
Użycie
Aby uzyskać więcej informacji, sprawdź https://github.com/padok-team/cognito-scanner
Uzyskiwanie dostępu do ról IAM
Bez uwierzytelnienia
Jedyną rzeczą, jakiej atakujący potrzebuje, aby uzyskać poświadczenia AWS w aplikacji Cognito jako nieuwierzytelniony użytkownik, jest Identity Pool ID, a ten ID musi być wpisany na stałe w aplikacji webowej/mobilnej, aby ją używać. ID wygląda tak: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(nie można go zgadywać metodą brute force).
Domyślnie utworzona rola IAM Cognito dla nieuwierzytelnionych użytkowników nazywa się Cognito_<nazwa Identity Pool>Unauth_Role
Jeśli znajdziesz wpisane na stałe Identity Pool ID i pozwala on na uwierzytelnienie nieuwierzytelnionych użytkowników, możesz uzyskać poświadczenia AWS za pomocą:
Lub możesz użyć następujących poleceń aws cli:
Zauważ, że domyślnie nieuwierzytelniony użytkownik Cognito NIE MOŻE mieć żadnych uprawnień, nawet jeśli zostały mu przypisane za pomocą polityki. Sprawdź następującą sekcję.
Rozszerzony przepływ uwierzytelniania vs podstawowy przepływ uwierzytelniania
Poprzednia sekcja przedstawiała domyślny rozszerzony przepływ uwierzytelniania. Ten przepływ ustawia ograniczającą politykę sesji dla generowanej sesji roli IAM. Ta polityka pozwoli tylko na korzystanie z usług z tej listy (nawet jeśli rola miała dostęp do innych usług).
Jednak istnieje sposób na obejście tego, jeśli pula tożsamości ma włączony "Podstawowy (klasyczny) przepływ", użytkownik będzie mógł uzyskać sesję korzystając z tego przepływu, który nie będzie miał tej ograniczającej polityki sesji.
Jeśli otrzymujesz ten błąd, oznacza to, że podstawowy przepływ nie jest włączony (domyślnie)
An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.
Posiadając zestaw poświadczeń IAM, powinieneś sprawdzić jakie masz uprawnienia i spróbować zwiększyć uprawnienia.
Uwierzytelniony
Pamiętaj, że uwierzytelnieni użytkownicy prawdopodobnie będą mieli różne uprawnienia, dlatego jeśli możesz zarejestrować się w aplikacji, spróbuj to zrobić i uzyskaj nowe poświadczenia.
Dla uwierzytelnionych użytkowników uzyskujących dostęp do puli tożsamości mogą być dostępne również role.
W tym celu możesz potrzebować dostępu do dostawcy tożsamości. Jeśli jest to Cognito User Pool, być może możesz wykorzystać domyślne zachowanie i utworzyć nowego użytkownika samodzielnie.
Domyślnie utworzona rola uwierzytelnionego IAM Cognito nazywa się Cognito_<nazwa puli tożsamości>Auth_Role
W każdym razie poniższy przykład zakłada, że już zalogowałeś się w Cognito User Pool, który jest używany do uzyskania dostępu do puli tożsamości (nie zapomnij, że mogą być również skonfigurowane inne typy dostawców tożsamości).
Możliwe jest skonfigurowanie różnych ról IAM w zależności od dostawcy tożsamości, z którego użytkownik jest logowany lub nawet w zależności od użytkownika (używając claimów). Dlatego, jeśli masz dostęp do różnych użytkowników za pośrednictwem tego samego lub różnych dostawców, może warto zalogować się i uzyskać dostęp do ról IAM wszystkich z nich.
Last updated