Cognito User Pools
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
μ¬μ©μ νμ Amazon Cognitoμ μ¬μ©μ λλ ν 리μ λλ€. μ¬μ©μ νμ μ¬μ©νλ©΄ μ¬μ©μκ° Amazon Cognitoλ₯Ό ν΅ν΄ μΉ λλ λͺ¨λ°μΌ μ±μ λ‘κ·ΈμΈνκ±°λ μ 3μ μ μ μ 곡μ(IdP)λ₯Ό ν΅ν΄ μ°ν©ν μ μμ΅λλ€. μ¬μ©μκ° μ§μ λ‘κ·ΈμΈνλ μ 3μλ₯Ό ν΅ν΄ λ‘κ·ΈμΈνλ , μ¬μ©μ νμ λͺ¨λ ꡬμ±μμ SDKλ₯Ό ν΅ν΄ μ‘μΈμ€ν μ μλ λλ ν 리 νλ‘νμ κ°μ§κ³ μμ΅λλ€.
μ¬μ©μ νμ λ€μμ μ 곡ν©λλ€:
κ°μ λ° λ‘κ·ΈμΈ μλΉμ€.
μ¬μ©μλ₯Ό λ‘κ·ΈμΈμν€κΈ° μν λ΄μ₯ν, μ¬μ©μ μ μ κ°λ₯ν μΉ UI.
Facebook, Google, Amazon λ‘κ·ΈμΈ, Apple λ‘κ·ΈμΈ λ° μ¬μ©μ νμ SAML λ° OIDC μ μ μ 곡μλ₯Ό ν΅ν μμ λ‘κ·ΈμΈ.
μ¬μ©μ λλ ν 리 κ΄λ¦¬ λ° μ¬μ©μ νλ‘ν.
λ€λ¨κ³ μΈμ¦(MFA), μμλ μ격 μ¦λͺ νμΈ, κ³μ νμ·¨ λ°©μ§, μ ν λ° μ΄λ©μΌ νμΈκ³Ό κ°μ 보μ κΈ°λ₯.
AWS Lambda νΈλ¦¬κ±°λ₯Ό ν΅ν μ¬μ©μ λ§μΆ€ν μν¬νλ‘μ° λ° μ¬μ©μ λ§μ΄κ·Έλ μ΄μ .
μμ© νλ‘κ·Έλ¨μ μμ€ μ½λλ μΌλ°μ μΌλ‘ μ¬μ©μ ν IDμ ν΄λΌμ΄μΈνΈ μμ© νλ‘κ·Έλ¨ ID(λλλ‘ μμ© νλ‘κ·Έλ¨ λΉλ°?)λ₯Ό ν¬ν¨νλ©°, μ΄λ μ¬μ©μκ° Cognito μ¬μ©μ νμ λ‘κ·ΈμΈνλ λ° νμν©λλ€.
λ±λ‘: κΈ°λ³Έμ μΌλ‘ μ¬μ©μλ μμ μ λ±λ‘ν μ μμΌλ―λ‘ μμ μ μν μ¬μ©μλ₯Ό μμ±ν μ μμ΅λλ€.
μ¬μ©μ μ΄κ±°: λ±λ‘ κΈ°λ₯μ μ¬μ©νμ¬ μ΄λ―Έ μ‘΄μ¬νλ μ¬μ©μ μ΄λ¦μ μ°Ύμ μ μμ΅λλ€. μ΄ μ 보λ λ¬΄μ°¨λ³ λμ 곡격μ μ μ©ν μ μμ΅λλ€.
λ‘κ·ΈμΈ λ¬΄μ°¨λ³ λμ : μΈμ¦ μΉμ μλ μ¬μ©μκ° λ‘κ·ΈμΈνλ λ° νμν λͺ¨λ λ°©λ²μ΄ λμ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ μ ν¨ν μ격 μ¦λͺ μ μ°ΎκΈ° μν΄ λ¬΄μ°¨λ³ λμ μ μλν μ μμ΅λλ€.
Pacuλ μ΄μ κ³μ μ λͺ¨λ Cognito μμ°μ μ΄κ±°νκ³ μ½ν ꡬμ±, μ‘μΈμ€ μ μ΄μ μ¬μ©λλ μ¬μ©μ μμ± λ±μ νλκ·Ένλ cognito__enum
λ° cognito__attack
λͺ¨λμ ν¬ν¨ν©λλ€. λν MFA μ§μμ ν¬ν¨ν μ¬μ©μ μμ± λ° μμ κ°λ₯ν μ¬μ©μ μ μ μμ±, μ¬μ© κ°λ₯ν μ μ ν μ격 μ¦λͺ
, ID ν ν°μ κ°μ κ°λ₯ν μν μ κΈ°λ°ν κΆν μμΉμ μλνν©λλ€.
λͺ¨λ κΈ°λ₯μ λν μ€λͺ
μ λΈλ‘κ·Έ κ²μλ¬Ό 2λΆλ₯Ό μ°Έμ‘°νμμμ€. μ€μΉ μ§μΉ¨μ μ£Όμ Pacu νμ΄μ§λ₯Ό μ°Έμ‘°νμμμ€.
Cognito Scannerλ μμΉ μλ κ³μ μμ± λ° κ³μ μ€λΌν΄μ ν¬ν¨νμ¬ Cognitoμ λν λ€μν 곡격μ ꡬννλ νμ΄μ¬ CLI λꡬμ λλ€. μμΈν λ΄μ©μ μ΄ λ§ν¬λ₯Ό νμΈνμΈμ.
CognitoAttributeEnum: μ΄ μ€ν¬λ¦½νΈλ μ¬μ©μμ λν μ ν¨ν μμ±μ μ΄κ±°ν μ μκ² ν΄μ€λλ€.
User Poolsλ κΈ°λ³Έμ μΌλ‘ μ μ¬μ©μλ₯Ό λ±λ‘ν μ μλλ‘ νμ©ν©λλ€.
μ¬μ©μμ λν μμΈν μ 보λ₯Ό μ 곡ν΄μΌ νλ€λ μ€λ₯ λ©μμ§λ₯Ό λ°κ²¬ν μ μμ΅λλ€:
λΉμ μ λ€μκ³Ό κ°μ JSONμΌλ‘ νμν μΈλΆμ 보λ₯Ό μ 곡ν μ μμ΅λλ€:
μ΄ κΈ°λ₯μ μ¬μ©νμ¬ κΈ°μ‘΄ μ¬μ©μλ₯Ό μ΄κ±°ν μλ μμ΅λλ€. ν΄λΉ μ΄λ¦μΌλ‘ μ΄λ―Έ μ¬μ©μκ° μ‘΄μ¬ν λμ μ€λ₯ λ©μμ§λ λ€μκ³Ό κ°μ΅λλ€:
μ΄μ λͺ λ Ήμμ μ¬μ©μ μ μ μμ±μ΄ "custom:"λ‘ μμνλμ§ μ£Όλͺ©νμΈμ. λν λ±λ‘ν λ μ¬μ©μμκ² μλ‘μ΄ μ¬μ©μ μ μ μμ±μ μμ±ν μ μλ€λ μ μ μμλμΈμ. κΈ°λ³Έ μμ±(νμ μμ±μ΄ μλλλΌλ)κ³Ό μ§μ λ μ¬μ©μ μ μ μμ±μλ§ κ°μ μ 곡ν μ μμ΅λλ€.
λλ ν΄λΌμ΄μΈνΈ IDκ° μ‘΄μ¬νλμ§ ν μ€νΈνκΈ° μν΄μμ λλ€. ν΄λΌμ΄μΈνΈ IDκ° μ‘΄μ¬νμ§ μμ κ²½μ°μ μ€λ₯λ λ€μκ³Ό κ°μ΅λλ€:
μ΄ μ€λ₯κ° λ°μνλ©° μ¬μ©μλ₯Ό λ±λ‘νκ±°λ μ΄κ±°ν μ μμ΅λλ€:
Cognitoλ μ μ¬μ©μλ₯Ό μ΄λ©μΌ λλ μ νλ²νΈλ‘ νμΈνμ¬ κ²μ¦ν μ μμ΅λλ€. λ°λΌμ μ¬μ©μλ₯Ό μμ±ν λ μΌλ°μ μΌλ‘ μ΅μν μ¬μ©μ μ΄λ¦κ³Ό λΉλ°λ²νΈ, κ·Έλ¦¬κ³ μ΄λ©μΌ λ°/λλ μ νλ²νΈκ° νμν©λλ€. λΉμ μ΄ μ μ΄νλ νλλ₯Ό μ€μ νλ©΄ μ΄λ κ² μλ‘ μμ±λ μ¬μ©μ κ³μ μ νμΈνκΈ° μν μ½λλ₯Ό λ°μ μ μμ΅λλ€:
λΉλ‘ κ°μ μ΄λ©μΌκ³Ό μ νλ²νΈλ₯Ό μ¬μ©ν μ μλ κ²μ²λΌ 보μ΄μ§λ§, μμ±λ μ¬μ©μλ₯Ό νμΈν΄μΌ ν λ Cognitoλ κ°μ μ 보λ₯Ό μ¬μ©νλ€κ³ λΆννλ©° κ³μ μ νμΈν μ μκ² λ©λλ€.
κΈ°λ³Έμ μΌλ‘ μ¬μ©μλ μμ μ μμ± κ°μ μμ ν μ μμ΅λλ€:
μ¬μ©μ μ μ μμ±(μ: isAdmin
)μ΄ μ¬μ©λκ³ μλ κ²μ λ°κ²¬ν μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ μμ μ μμ± κ°μ λ³κ²½ν μ μμΌλ―λ‘, κ°μ μ§μ λ³κ²½νμ¬ κΆνμ μμΉμν¬ μ μμ΅λλ€!
μ¬μ©μμ μ΄λ©μΌ λ° μ νλ²νΈλ₯Ό μμ νλ λ° μ¬μ©ν μ μμ§λ§, κ³μ μ΄ μ¬μ ν νμΈλ μνλΌλ ν΄λΉ μμ±μ νμΈλμ§ μμ μνλ‘ μ€μ λ©λλ€(λ€μ νμΈν΄μΌ ν¨).
μ΄λ©μΌμ΄λ μ νλ²νΈλ‘λ λ‘κ·ΈμΈν μ μμ§λ§, μ¬μ©μ μ΄λ¦μΌλ‘λ λ‘κ·ΈμΈν μ μμ΅λλ€.
μ΄λ©μΌμ΄ μμ λμκ³ νμΈλμ§ μμλλΌλ email
νλ λ΄μ ID ν ν°μ λνλλ©°, email_verified
νλλ falseκ° λ©λλ€. κ·Έλ¬λ μ±μ΄ κ·Έκ²μ νμΈνμ§ μλλ€λ©΄ λ€λ₯Έ μ¬μ©μλ₯Ό κ°μ₯ν μ μμ΅λλ€.
λν, μ΄λ¦ μμ±μ μμ νμ¬ name
νλμ 무μμ΄λ λ£μ μ μλ€λ μ μ μ μνμμμ€. μ΄λ€ μ΄μ λ‘ μ±μ΄ email
(λλ λ€λ₯Έ μμ±) λμ ν΄λΉ νλλ₯Ό νμΈνκ³ μλ€λ©΄, λ€λ₯Έ μ¬μ©μλ₯Ό κ°μ₯ν μ μμ΅λλ€.
μ΄μ¨λ , μ΄λ€ μ΄μ λ‘ μ΄λ©μΌμ μ μ΄λ©μΌλ‘ λ³κ²½ν κ²½μ°, ν΄λΉ μ΄λ©μΌ μ£Όμλ‘ λ°μ μ½λλ‘ μ΄λ©μΌμ νμΈν μ μμ΅λλ€:
μ νλ²νΈ
λμ **μ΄λ©μΌ
**μ μ¬μ©νμ¬ μ μ νλ²νΈλ₯Ό λ³κ²½/νμΈν©λλ€.
κ΄λ¦¬μλ μ¬μ©μκ° μ νΈνλ μ¬μ©μ μ΄λ¦μΌλ‘ λ‘κ·ΈμΈνλ μ΅μ μ νμ±νν μλ μμ΅λλ€. μ΄ κ°μ λ€λ₯Έ μ¬μ©μλ₯Ό κ°μ₯νκΈ° μν΄ μ΄λ―Έ μ¬μ© μ€μΈ μ¬μ©μ μ΄λ¦μ΄λ μ νΈνλ μ¬μ©μ μ΄λ¦μΌλ‘ λ³κ²½ν μ μλ€λ μ μ μ μνμΈμ.
λΉλ°λ²νΈλ₯Ό 볡ꡬνλ κ²μ μ¬μ©μ μ΄λ¦(λλ μ΄λ©μΌ λλ μ νλ²νΈλ νμ©λ¨)μ μκ³ μκ³ , κ·Έκ³³μΌλ‘ μ½λκ° μ μ‘λλ―λ‘ μ κ·Όν μ μλ κ²½μ° κ°λ₯ν©λλ€:
μλ²μ μλ΅μ νμ κΈμ μ μΌ κ²μ΄λ©°, λ§μΉ μ¬μ©μ μ΄λ¦μ΄ μ‘΄μ¬νλ κ²μ²λΌ 보μ λλ€. μ΄ λ°©λ²μ μ¬μ©νμ¬ μ¬μ©μλ₯Ό μ΄κ±°ν μ μμ΅λλ€.
μ½λλ₯Ό μ¬μ©νμ¬ λΉλ°λ²νΈλ₯Ό λ³κ²½ν μ μμ΅λλ€:
λΉλ°λ²νΈλ₯Ό λ³κ²½νλ €λ©΄ μ΄μ λΉλ°λ²νΈλ₯Ό μμμΌ ν©λλ€:
μ¬μ©μ νμ λ€μν μΈμ¦ λ°©λ²μ μ§μν©λλ€. μ¬μ©μ μ΄λ¦κ³Ό λΉλ°λ²νΈκ° μλ κ²½μ°μλ λ‘κ·ΈμΈν μ μλ λ€μν λ°©λ²μ΄ μ§μλ©λλ€. λν, μ¬μ©μκ° νμμ μΈμ¦λλ©΄ 3κ°μ§ μ νμ ν ν°μ΄ μ 곡λ©λλ€: ID ν ν°, μ‘μΈμ€ ν ν°, 리νλ μ ν ν°μ λλ€.
ID ν ν°: μΈμ¦λ μ¬μ©μμ μ μμ λν μ£Όμ₯μ ν¬ν¨νλ©°, name
, email
, phone_number
μ κ°μ μ 보λ₯Ό ν¬ν¨ν©λλ€. ID ν ν°μ 리μμ€ μλ² λλ μλ² μ ν리μΌμ΄μ
μ μ¬μ©μ μΈμ¦μ μν΄ μ¬μ©ν μλ μμ΅λλ€. μΈλΆ μ ν리μΌμ΄μ
μμ μ¬μ©ν κ²½μ° ID ν ν° λ΄λΆμ μ£Όμ₯μ μ λ’°νκΈ° μ μ ID ν ν°μ μλͺ
μ κ²μ¦ν΄μΌ ν©λλ€.
ID ν ν°μ μ¬μ©μμ μμ± κ°μ ν¬ν¨νλ ν ν°μΌλ‘, μ¬μ©μ μ μ μμ±λ ν¬ν¨λ©λλ€.
μ‘μΈμ€ ν ν°: μΈμ¦λ μ¬μ©μμ λν μ£Όμ₯, μ¬μ©μμ κ·Έλ£Ή λͺ©λ‘, λ²μ λͺ©λ‘μ ν¬ν¨ν©λλ€. μ‘μΈμ€ ν ν°μ λͺ©μ μ μ¬μ©μ ν λ΄μμ API μμ μ μΉμΈνλ κ²μ λλ€. μλ₯Ό λ€μ΄, μ‘μΈμ€ ν ν°μ μ¬μ©νμ¬ μ¬μ©μμκ² μ¬μ©μ μμ±μ μΆκ°, λ³κ²½ λλ μμ ν μ μλ κΆνμ λΆμ¬ν μ μμ΅λλ€.
리νλ μ ν ν°: 리νλ μ ν ν°μ μ¬μ©νλ©΄ 리νλ μ ν ν°μ΄ μ ν¨ν λμ μ¬μ©μμ λν μλ‘μ΄ ID ν ν°κ³Ό μ‘μΈμ€ ν ν°μ μ»μ μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘, 리νλ μ ν ν°μ μ¬μ©μκ° μ¬μ©μ νμ λ‘κ·ΈμΈν ν 30μΌ νμ λ§λ£λ©λλ€. μ¬μ©μ νμ λν μ ν리μΌμ΄μ μ μμ±ν λ μ ν리μΌμ΄μ μ 리νλ μ ν ν° λ§λ£λ₯Ό 60λΆμμ 10λ μ¬μ΄μ κ°μΌλ‘ μ€μ ν μ μμ΅λλ€.
μλ² μΈ‘ μΈμ¦ νλ¦μ λ€μκ³Ό κ°μ΅λλ€:
μλ² μΈ‘ μ ν리μΌμ΄μ
μ΄ AdminInitiateAuth
API μμ
μ νΈμΆν©λλ€ (λμ InitiateAuth
). μ΄ μμ
μ cognito-idp:AdminInitiateAuth
λ° cognito-idp:AdminRespondToAuthChallenge
κΆνμ΄ ν¬ν¨λ AWS μ격 μ¦λͺ
μ΄ νμν©λλ€. μ΄ μμ
μ νμν μΈμ¦ 맀κ°λ³μλ₯Ό λ°νν©λλ€.
μλ² μΈ‘ μ ν리μΌμ΄μ
μ΄ μΈμ¦ 맀κ°λ³μλ₯Ό μ»μ ν, AdminRespondToAuthChallenge
API μμ
μ νΈμΆν©λλ€. AdminRespondToAuthChallenge
API μμ
μ AWS μ격 μ¦λͺ
μ μ 곡ν λλ§ μ±κ³΅ν©λλ€.
μ΄ λ°©λ²μ κΈ°λ³Έμ μΌλ‘ νμ±νλμ΄ μμ§ μμ΅λλ€.
λ‘κ·ΈμΈνλ €λ©΄ μμμΌ ν μ¬ν:
μ¬μ©μ ν ID
ν΄λΌμ΄μΈνΈ ID
μ¬μ©μ μ΄λ¦
λΉλ°λ²νΈ
ν΄λΌμ΄μΈνΈ λΉλ° (μ±μ΄ λΉλ°μ μ¬μ©νλλ‘ κ΅¬μ±λ κ²½μ°μλ§)
μ΄ λ°©λ²μΌλ‘ λ‘κ·ΈμΈν μ μμΌλ €λ©΄ ν΄λΉ μ ν리μΌμ΄μ
μ΄ ALLOW_ADMIN_USER_PASSWORD_AUTH
λ‘ λ‘κ·ΈμΈν μ μλλ‘ νμ©ν΄μΌ ν©λλ€.
λν, μ΄ μμ
μ μννλ €λ©΄ cognito-idp:AdminInitiateAuth
λ° cognito-idp:AdminRespondToAuthChallenge
κΆνμ΄ μλ μ격 μ¦λͺ
μ΄ νμν©λλ€.