From 34b0963621f770ce8e366544827ef64775574850 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 18 Aug 2025 14:07:57 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito- --- .../cognito-identity-pools.md | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md index ea290fbb9..09e4aa223 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md @@ -4,13 +4,13 @@ ## Basic Information -Identity pools는 사용자가 **임시 자격 증명**을 획득할 수 있도록 하여 중요한 역할을 합니다. 이러한 자격 증명은 Amazon S3 및 DynamoDB를 포함한 다양한 AWS 서비스에 접근하는 데 필수적입니다. Identity pools의 주목할 만한 기능은 익명 게스트 사용자와 사용자 인증을 위한 다양한 신원 제공자를 지원한다는 점입니다. 지원되는 신원 제공자는 다음과 같습니다: +Identity pools는 사용자가 **임시 자격 증명**을 획득할 수 있도록 하여 중요한 역할을 합니다. 이러한 자격 증명은 Amazon S3 및 DynamoDB를 포함한 다양한 AWS 서비스에 접근하는 데 필수적입니다. Identity pools의 주목할 만한 기능은 익명 게스트 사용자와 사용자 인증을 위한 다양한 ID 공급자를 모두 지원한다는 점입니다. 지원되는 ID 공급자는 다음과 같습니다: - Amazon Cognito user pools - Facebook, Google, Login with Amazon, Sign in with Apple과 같은 소셜 로그인 옵션 -- OpenID Connect (OIDC) 호환 제공자 -- SAML (Security Assertion Markup Language) 신원 제공자 -- 개발자 인증 신원 +- OpenID Connect (OIDC) 호환 공급자 +- SAML (Security Assertion Markup Language) ID 공급자 +- 개발자 인증 ID ```python # Sample code to demonstrate how to integrate an identity provider with an identity pool can be structured as follows: import boto3 @@ -35,15 +35,15 @@ print(response) ``` ### Cognito Sync -Identity Pool 세션을 생성하려면 먼저 **Identity ID를 생성해야** 합니다. 이 Identity ID는 **해당 사용자의 세션 식별자**입니다. 이러한 식별자는 최대 20개의 데이터 세트를 가질 수 있으며, 각 데이터 세트는 최대 1MB의 키-값 쌍을 저장할 수 있습니다. +Identity Pool 세션을 생성하려면 먼저 **Identity ID를 생성해야** 합니다. 이 Identity ID는 **해당 사용자의 세션 식별자**입니다. 이러한 식별자는 최대 20개의 데이터 세트를 가질 수 있으며, 최대 1MB의 키-값 쌍을 저장할 수 있습니다. 이는 **사용자의 정보를 유지하는 데 유용합니다** (항상 동일한 Identity ID를 사용하는 사용자). -또한, 서비스 **cognito-sync**는 **이 정보를 관리하고 동기화하는** 서비스를 제공합니다 (데이터 세트에서, 스트림 및 SNS 메시지로 정보를 전송하는 등). +게다가, 서비스 **cognito-sync**는 **이 정보를 관리하고 동기화하는** 서비스를 제공합니다 (데이터 세트에서, 스트림 및 SNS 메시지로 정보를 전송하는 등). ### Tools for pentesting -- [Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS 취약점 탐지 프레임워크로, 이제 "cognito\_\_enum" 및 "cognito\_\_attack" 모듈이 포함되어 있어 계정의 모든 Cognito 자산을 자동으로 열거하고 약한 구성, 접근 제어에 사용되는 사용자 속성 등을 플래그하며, 사용자 생성(여기에는 MFA 지원 포함) 및 수정 가능한 사용자 정의 속성, 사용 가능한 Identity Pool 자격 증명, ID 토큰에서 가정 가능한 역할 등을 기반으로 한 권한 상승을 자동화합니다. +- [Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS 취약점 탐지 프레임워크로, 이제 "cognito\_\_enum" 및 "cognito\_\_attack" 모듈이 포함되어 있어 계정의 모든 Cognito 자산을 자동으로 열거하고 약한 구성, 접근 제어에 사용되는 사용자 속성 등을 플래그하며, 사용자 생성(여기에는 MFA 지원 포함) 및 수정 가능한 사용자 정의 속성, 사용 가능한 Identity Pool 자격 증명, ID 토큰에서 가정 가능한 역할에 기반한 권한 상승을 자동화합니다. 모듈 기능에 대한 설명은 [블로그 게시물](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 2부를 참조하십시오. 설치 지침은 주요 [Pacu](https://github.com/RhinoSecurityLabs/pacu) 페이지를 참조하십시오. @@ -61,7 +61,7 @@ Pacu (new:test) > run cognito__enum ``` - [Cognito Scanner](https://github.com/padok-team/cognito-scanner)는 원치 않는 계정 생성 및 아이덴티티 풀 상승을 포함하여 Cognito에 대한 다양한 공격을 구현하는 파이썬 CLI 도구입니다. -#### Installation +#### 설치 ```bash $ pip install cognito-scanner ``` @@ -75,7 +75,7 @@ $ cognito-scanner --help ### 인증되지 않음 -공격자가 인증되지 않은 사용자로서 Cognito 앱에서 **AWS 자격 증명**을 얻기 위해 알아야 할 유일한 것은 **Identity Pool ID**이며, 이 **ID는 웹/모바일** **애플리케이션**에 하드코딩되어 있어야 사용될 수 있습니다. ID는 다음과 같이 보입니다: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (무작위 대입 공격이 불가능합니다). +인증되지 않은 사용자로서 Cognito 앱에서 **AWS 자격 증명**을 **얻기 위해** 공격자가 알아야 할 유일한 것은 **Identity Pool ID**이며, 이 **ID는 웹/모바일** **애플리케이션**에 하드코딩되어 있어야 사용될 수 있습니다. ID는 다음과 같이 보입니다: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (무작위 대입 공격이 불가능합니다). > [!TIP] > 기본적으로 **IAM Cognito 인증되지 않은 역할은** `Cognito_Unauth_Role`로 호출됩니다. @@ -106,7 +106,7 @@ r = requests.post(url, json=params, headers=headers) print(r.json()) ``` -다음 **aws cli 명령어**를 사용할 수도 있습니다: +다음 **aws cli 명령어**를 사용할 수 있습니다: ```bash aws cognito-identity get-id --identity-pool-id --no-sign aws cognito-identity get-credentials-for-identity --identity-id --no-sign @@ -116,7 +116,7 @@ aws cognito-identity get-credentials-for-identity --identity-id -- ### Enhanced vs Basic Authentication flow -이전 섹션은 **기본 향상된 인증 흐름**을 따랐습니다. 이 흐름은 생성된 IAM 역할 세션에 **제한적인** [**세션 정책**](../../aws-basic-information/index.html#session-policies)을 설정합니다. 이 정책은 세션이 [**이 목록의 서비스만 사용할 수 있도록**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) 허용합니다 (역할이 다른 서비스에 접근할 수 있었더라도). +이전 섹션은 **기본 향상된 인증 흐름**을 따랐습니다. 이 흐름은 생성된 IAM 역할 세션에 **제한적인** [**세션 정책**](../../aws-basic-information/index.html#session-policies)을 설정합니다. 이 정책은 세션이 [**이 목록의 서비스만 사용하도록 허용**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)합니다 (역할이 다른 서비스에 접근할 수 있더라도). 그러나 **Identity pool에 "Basic (Classic) Flow"가 활성화되어 있으면**, 사용자는 해당 흐름을 사용하여 **제한적인 세션 정책이 없는** 세션을 얻을 수 있습니다. ```bash @@ -131,45 +131,59 @@ aws cognito-identity get-open-id-token --identity-id --no-sign aws sts assume-role-with-web-identity --role-arn "arn:aws:iam:::role/" --role-session-name sessionname --web-identity-token --no-sign ``` > [!WARNING] -> 이 **오류**가 발생하는 경우, **기본 흐름이 활성화되지 않았기 때문입니다 (기본값)** +> 이 **오류**가 발생하는 이유는 **기본 흐름이 활성화되지 않았기 때문입니다 (기본값)** > `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.` -IAM 자격 증명이 있는 경우 [어떤 접근 권한이 있는지 확인하고](../../index.html#whoami) [권한 상승을 시도하세요](../../aws-privilege-escalation/index.html). +IAM 자격 증명이 설정되어 있다면 [어떤 접근 권한이 있는지 확인하고](../../index.html#whoami) [권한 상승을 시도하세요](../../aws-privilege-escalation/index.html). ### 인증된 사용자 > [!NOTE] -> **인증된 사용자**는 아마도 **다른 권한**이 부여될 것이므로, **앱 내에서 가입할 수 있다면**, 그렇게 시도하여 새로운 자격 증명을 얻으세요. +> **인증된 사용자**는 아마도 **다른 권한**이 부여될 것이므로, **앱 내에서 가입할 수 있다면** 그렇게 시도하여 새로운 자격 증명을 얻으세요. -**Identity Pool**에 접근하는 **인증된 사용자**를 위한 **역할**도 있을 수 있습니다. +**인증된 사용자**가 **Identity Pool**에 접근할 수 있는 **역할**이 있을 수도 있습니다. -이를 위해 **아이덴티티 제공자**에 접근해야 할 수 있습니다. 만약 그것이 **Cognito User Pool**이라면, 기본 동작을 악용하여 **직접 새로운 사용자를 생성할 수 있을지도 모릅니다**. +이를 위해서는 **아이덴티티 제공자**에 접근할 수 있어야 합니다. 만약 그것이 **Cognito User Pool**이라면, 기본 동작을 악용하여 **직접 새로운 사용자를 생성할 수 있을지도 모릅니다**. > [!TIP] > **IAM Cognito 인증 역할은 기본적으로** `Cognito_Auth_Role`로 생성됩니다. -어쨌든, **다음 예제**는 **Identity Pool**에 접근하기 위해 사용되는 **Cognito User Pool**에 이미 로그인했다고 가정합니다 (다른 유형의 아이덴티티 제공자도 구성될 수 있다는 점을 잊지 마세요). +어쨌든, **다음 예제**는 이미 **Identity Pool**에 접근하기 위해 사용된 **Cognito User Pool**에 로그인한 상태를 가정합니다 (다른 유형의 아이덴티티 제공자도 구성될 수 있다는 점을 잊지 마세요). -
aws cognito-identity get-id \
+

+# 업데이트된 형식
+aws cognito-identity get-id \
 --identity-pool-id  \
---logins cognito-idp..amazonaws.com/=
+--logins '{"cognito-idp..amazonaws.com/": ""}'
 
-# 이전 명령 응답에서 identity_id를 가져옵니다
 aws cognito-identity get-credentials-for-identity \
 --identity-id  \
---logins cognito-idp..amazonaws.com/=
+--logins '{"cognito-idp..amazonaws.com/": ""}'
 
-
-# IdToken에서 사용자가 User Pool 그룹으로 접근할 수 있는 역할을 찾을 수 있습니다
-# --custom-role-arn을 사용하여 특정 역할에 대한 자격 증명을 가져옵니다
 aws cognito-identity get-credentials-for-identity \
 --identity-id  \
-    --custom-role-arn  \
-    --logins cognito-idp..amazonaws.com/=
+--custom-role-arn  \
+--logins '{"cognito-idp..amazonaws.com/": ""}'
+
+ +> **더 이상 사용되지 않는 형식** — 현재 AWS CLI와 함께 작동하지 않을 수 있습니다: +

+aws cognito-identity get-id \
+--identity-pool-id  \
+--logins cognito-idp..amazonaws.com/=
+
+aws cognito-identity get-credentials-for-identity \
+--identity-id  \
+--logins cognito-idp..amazonaws.com/=
+
+aws cognito-identity get-credentials-for-identity \
+--identity-id  \
+--custom-role-arn  \
+--logins cognito-idp..amazonaws.com/=
 
> [!WARNING] -> 사용자가 로그인하는 아이덴티티 제공자에 따라 **다른 IAM 역할을 구성할 수 있으며**, 심지어 **사용자**에 따라 (클레임을 사용하여) 다를 수 있습니다. 따라서 동일한 또는 다른 제공자를 통해 다양한 사용자에 접근할 수 있다면, **모든 사용자의 IAM 역할에 로그인하고 접근하는 것이 가치가 있을 수 있습니다**. +> 사용자가 로그인하는 아이덴티티 제공자에 따라 **다른 IAM 역할을 구성할 수 있습니다** 또는 **사용자**에 따라 (클레임을 사용하여). 따라서 동일한 또는 다른 제공자를 통해 다양한 사용자에 접근할 수 있다면, **모든 사용자의 IAM 역할에 로그인하고 접근하는 것이 가치가 있을 수 있습니다**. {{#include ../../../../banners/hacktricks-training.md}}