Cognito User Pools
Temel Bilgiler
Kullanıcı havuzu, Amazon Cognito'da bir kullanıcı dizinidir. Bir kullanıcı havuzu ile kullanıcılarınız, Amazon Cognito üzerinden web veya mobil uygulamanıza giriş yapabilir veya üçüncü taraf bir kimlik sağlayıcı (IdP) aracılığıyla federasyon yapabilir. Kullanıcılarınız doğrudan veya üçüncü taraf aracılığıyla giriş yapmış olsun, kullanıcı havuzunun tüm üyeleri, bir SDK aracılığıyla erişebileceğiniz bir dizin profiline sahiptir.
Kullanıcı havuzları, aşağıdakileri sağlar:
Kayıt olma ve giriş yapma hizmetleri.
Kullanıcıların giriş yapması için yerleşik, özelleştirilebilir bir web arayüzü.
Facebook, Google, Amazon ile Giriş Yap ve Apple ile Giriş Yap, SAML ve OIDC kimlik sağlayıcıları aracılığıyla sosyal giriş yapma ve kullanıcı havuzunuzdan.
Kullanıcı dizini yönetimi ve kullanıcı profilleri.
Çok faktörlü kimlik doğrulama (MFA), tehlikede olan kimlik bilgileri için kontrol, hesap ele geçirmeye karşı koruma ve telefon ve e-posta doğrulama gibi güvenlik özellikleri.
Özelleştirilebilir iş akışları ve AWS Lambda tetikleyicileri aracılığıyla kullanıcı göçü.
Uygulamaların kaynak kodu genellikle ayrıca bir Cognito Kullanıcı Havuzuna giriş yapmak için gereken kullanıcı havuzu kimliği ve istemci uygulama kimliğini (ve bazen uygulama gizli anahtarını?) içerir.
Potansiyel saldırılar
Kayıt: Varsayılan olarak bir kullanıcı kendini kaydedebilir, bu nedenle kendisi için bir kullanıcı oluşturabilir.
Kullanıcı numaralandırma: Kayıt işlevselliği, zaten var olan kullanıcı adlarını bulmak için kullanılabilir. Bu bilgi, brute-force saldırısı için faydalı olabilir.
Giriş brute-force: Kimlik doğrulama bölümünde, bir kullanıcının giriş yapması gereken yöntemlerin tümüne sahipsiniz, bunları brute-force deneyebilir ve geçerli kimlik bilgilerini bulabilirsiniz.
Pentest için araçlar
Pacu, AWS istismar çerçevesi, artık bir hesaptaki tüm Cognito varlıklarının numaralandırılmasını otomatikleştiren "cognito__enum" ve "cognito__attack" modüllerini içerir ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı özniteliklerini vb. işaretler, ayrıca değiştirilebilir özel öznitelikler, kullanılabilir kimlik havuzu kimlik bilgileri, id belgelerindeki rol assumable roller vb. temelinde kullanıcı oluşturmayı (MFA desteği de dahil olmak üzere) ve ayrıcalık yükseltmeyi otomatikleştirir.
Modüllerin işlevlerinin açıklaması için blog yazısının ikinci bölümüne bakın. Kurulum talimatları için ana Pacu sayfasına bakın.
Kullanım
Belirli bir kimlik havuzu ve kullanıcı havuzu istemcisi için kullanıcı oluşturma ve tüm ayrıcalık yükseltme vektörlerini denemek için örnek cognito__attack kullanımı:
Mevcut AWS hesabında görünen tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. toplamak için örnek cognito__enum kullanımı:
Bu komut, AWS hesabında bulunan tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını ve kullanıcıları listeleyecektir.
Cognito Scanner, Cognito üzerinde istenmeyen hesap oluşturma ve hesap oracle gibi farklı saldırıları uygulayan bir Python tabanlı bir CLI aracıdır.
Kurulum
Kullanım
Açıklama
Bu araç, belirli bir AWS Cognito kullanıcı havuzunda kullanıcıları listelemek için kullanılır. Aracın çalışması için, kullanıcı havuzu kimliği (-u
), bölge (-r
) ve geçerli bir erişim belirteci (-t
) sağlanmalıdır.
Örnekler
Bu örnekte, us-west-2
bölgesindeki us-west-2_abcd1234
kimlikli kullanıcı havuzundaki kullanıcıları listeleyecektir. Erişim belirteci olarak eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
kullanılacaktır.
Daha fazla bilgi için https://github.com/padok-team/cognito-scanner adresini kontrol edin.
Kayıt
Kullanıcı Havuzları, varsayılan olarak yeni kullanıcıları kaydetmeye izin verir.
Eğer herhangi biri kayıt olabilirse
Kullanıcı hakkında daha fazla ayrıntı sağlamanız gerektiğini belirten bir hata ile karşılaşabilirsiniz:
Aşağıdaki gibi gerekli bilgileri bir JSON ile sağlayabilirsiniz:
Bu işlevselliği aynı zamanda mevcut kullanıcıları sıralamak için de kullanabilirsiniz. Bu, kullanıcı adıyla zaten mevcut olan bir kullanıcı olduğunda alınan hata mesajıdır:
Önceki komutta özel özniteliklerin "custom:" ile başladığına dikkat edin. Ayrıca, kayıt olurken kullanıcı için yeni özel öznitelikler oluşturamazsınız. Yalnızca varsayılan özniteliklere (zorunlu olmasalar bile) ve belirtilen özel özniteliklere değer verebilirsiniz.
Veya sadece bir istemci kimliğinin var olup olmadığını test etmek için. İstemci kimliği mevcut değilse bu hata mesajı alınır:
Sadece yönetici kullanıcıları kaydedebilirse
Bu hatayı bulacaksınız ve kullanıcıları kaydetme veya sıralama yapamayacaksınız:
Kayıt Doğrulama
Cognito, yeni bir kullanıcıyı e-posta veya telefon numarasını doğrulayarak doğrulamanıza izin verir. Bu nedenle, genellikle bir kullanıcı oluştururken en azından kullanıcı adı ve şifre ile birlikte e-posta ve/veya telefon numarası gereklidir. Sadece kontrol ettiğiniz birini belirleyin, böylece yeni oluşturulan kullanıcı hesabınızı doğrulamak için kodu alırsınız:
Görünüşe göre aynı e-posta ve telefon numarasını kullanabilirsiniz, ancak oluşturulan kullanıcıyı doğrulamak için Cognito aynı bilgiyi kullanmanızı engelleyecek ve hesabı doğrulamanıza izin vermeyecektir.
Yetki Yükseltme / Öznitelikleri Güncelleme
Varsayılan olarak, bir kullanıcı öznitelik değerini değiştirebilir. Bunun için şu şekilde bir şey yapabilir:
Özel öznitelik ayrıcalığı yükseltme
Varsayılan olarak kendi öznitelik değerlerinizi değiştirebileceğiniz için, isAdmin gibi özel öznitelikler bulabilirsiniz. Bu durumda, değeri kendiniz değiştirerek ayrıcalıkları yükseltebilirsiniz!
E-posta/kullanıcı adı değiştirme ayrıcalığı yükseltme
Bu yöntemi kullanarak bir kullanıcının e-posta ve telefon numarasını değiştirebilirsiniz, ancak hesap doğrulanmış kalsa bile bu öznitelikler doğrulanmamış durumda olacaktır (yeniden doğrulamanız gerekmektedir).
E-posta veya telefon numarasıyla giriş yapamayacaksınız, ancak kullanıcı adıyla giriş yapabileceksiniz.
E-posta değiştirildiyse ve doğrulanmadıysa, ID Token içinde email
alanında görünecektir ve email_verified
alanı false olacaktır, ancak uygulama bunu kontrol etmiyorsa başka kullanıcıları taklit edebilirsiniz.
Ayrıca, name
alanına herhangi bir şey yazabilirsiniz, sadece ad özniteliğini değiştirerek. Bir uygulama, email
(veya başka bir öznitelik) yerine bu alanı kontrol ediyorsa, başka kullanıcıları taklit etme olasılığınız olabilir.
Neyse ki, e-postanızı örneğin yeni bir e-posta adresine değiştirdiyseniz, o e-posta adresinde aldığınız kodu kullanarak e-postayı onaylayabilirsiniz:
email
yerine phone_number
kullanarak yeni bir telefon numarası değiştirmek/doğrulamak için kullanılır.
Yönetici, kullanıcının tercih ettiği bir kullanıcı adıyla giriş yapma seçeneğini etkinleştirebilir. Bu değeri başka bir kullanıcıyı taklit etmek için kullanılan herhangi bir kullanıcı adı veya tercih edilen kullanıcı adı olarak değiştiremezsiniz.
Şifre Kurtarma/Değiştirme
Şifreyi sadece kullanıcı adını (veya e-postayı veya telefonu) bilerek kurtarmak mümkündür ve bir kod oraya gönderilecektir:
Sunucunun yanıtı her zaman olumlu olacak, sanki kullanıcı adı mevcutmuş gibi. Bu yöntemi kullanarak kullanıcıları sıralayamazsınız.
Kod ile şifreyi değiştirebilirsiniz:
Şifreyi değiştirmek için önceki şifreyi bilmek gerekmektedir:
Kimlik Doğrulama
Bir kullanıcı havuzu, farklı kimlik doğrulama yöntemlerini destekler. Eğer bir kullanıcı adı ve şifre varsa, giriş yapmak için farklı yöntemler de desteklenir. Ayrıca, bir kullanıcı Havuzunda kimlik doğrulandığında 3 tür belirteç verilir: Kimlik Belirteci (ID Token), Erişim belirteci (Access Token) ve Yenileme belirteci (Refresh Token).
Kimlik Belirteci (ID Token): Kimlik doğrulanmış kullanıcının
ad
,e-posta
vetelefon numarası
gibi bilgileri içeren talepleri içerir. Kimlik belirteci ayrıca, kullanıcıları kaynak sunucularınıza veya sunucu uygulamalarınıza kimlik doğrulamak için de kullanılabilir. Kimlik belirtecinin içindeki herhangi bir talebe güvenebilmeniz için, dış uygulamalarda kullanıyorsanız kimlik belirtecinin imzasını doğrulamanız gerekmektedir.Kimlik Belirteci, kullanıcının özellik değerlerini içeren belirteçtir, hatta özel olanları bile.
Erişim Belirteci (Access Token): Kimlik doğrulanmış kullanıcı hakkında talepleri, kullanıcının gruplarının bir listesini ve kapsamların bir listesini içerir. Erişim belirtecinin amacı, kullanıcı havuzundaki kullanıcının bağlamında API işlemlerini yetkilendirmektir. Örneğin, erişim belirteci kullanarak kullanıcının, kullanıcı özelliklerini eklemesine, değiştirmesine veya silmesine izin verebilirsiniz.
Yenileme Belirteci (Refresh Token): Yenileme belirteçleriyle kullanıcı için yeni Kimlik Belirteci ve Erişim Belirteci alabilirsiniz, yenileme belirteci geçersiz olana kadar. Varsayılan olarak, yenileme belirteci, uygulama kullanıcınızın kullanıcı havuzuna giriş yaptıktan 30 gün sonra süresi dolmaktadır. Kullanıcı havuzunuz için bir uygulama oluşturduğunuzda, uygulamanın yenileme belirteci süresini 60 dakika ile 10 yıl arasında herhangi bir değere ayarlayabilirsiniz.
ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH
Bu, sunucu tarafı kimlik doğrulama akışıdır:
Sunucu tarafındaki uygulama,
AdminInitiateAuth
API işlemini çağırır (InitiateAuth
yerine). Bu işlem,cognito-idp:AdminInitiateAuth
vecognito-idp:AdminRespondToAuthChallenge
izinlerini içeren AWS kimlik bilgilerini gerektirir. İşlem, gerekli kimlik doğrulama parametrelerini döndürür.Sunucu tarafındaki uygulama, kimlik doğrulama parametrelerine sahip olduktan sonra
AdminRespondToAuthChallenge
API işlemini çağırır.AdminRespondToAuthChallenge
API işlemi, yalnızca AWS kimlik bilgilerini sağladığınızda başarılı olur.
Bu yöntem, varsayılan olarak etkin değildir.
Giriş yapmak için aşağıdakileri bilmelisiniz:
kullanıcı havuzu kimlik bilgisi
istemci kimliği
kullanıcı adı
şifre
istemci sırrı (uygulama bir sır kullanacak şekilde yapılandırılmışsa)
Bu yöntemle giriş yapabilmek için, uygulamanın ALLOW_ADMIN_USER_PASSWORD_AUTH
ile giriş yapmaya izin vermesi gerekmektedir.
Ayrıca, bu işlemi gerçekleştirmek için cognito-idp:AdminInitiateAuth
ve cognito-idp:AdminRespondToAuthChallenge
izinlerine sahip kimlik bilgilerine ihtiyacınız vardır.
Last updated