GCP - IAM, 원칙 및 조직 정책 열거

Reading time: 8 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

서비스 계정

서비스 계정이 무엇인지에 대한 소개는 다음을 확인하세요:

GCP - Basic Information

열거

서비스 계정은 항상 프로젝트에 속합니다:

bash
gcloud iam service-accounts list --project <project>

사용자 및 그룹

GCP에서 사용자 및 그룹이 작동하는 방식에 대한 소개는 다음을 확인하세요:

GCP - Basic Information

열거

권한 serviceusage.services.enable 및 **serviceusage.services.use**가 있으면 프로젝트에서 서비스를 활성화하고 사용할 수 있습니다.

caution

기본적으로 Workspace 사용자에게는 Project Creator 역할이 부여되어 새 프로젝트를 생성할 수 있는 권한이 주어집니다. 사용자가 프로젝트를 생성하면 owner 역할이 부여됩니다. 따라서 그는 Workspace를 열거하기 위해 프로젝트에서 이러한 서비스를 활성화할 수 있습니다.

그러나 이러한 API를 호출할 수 있으려면 Workspace에서 충분한 권한이 필요하다는 점에 유의하세요.

admin 서비스활성화할 수 있고 사용자가 Workspace에서 충분한 권한을 가지고 있다면, 다음 줄을 사용하여 모든 그룹 및 사용자열거할 수 있습니다.
**identity groups**라고 하더라도 그룹이 없는 사용자도 반환됩니다:

bash
# Enable admin
gcloud services enable admin.googleapis.com
gcloud services enable cloudidentity.googleapis.com

# Using admin.googleapis.com
## List all users
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud beta identity groups preview --customer <workspace-id>

# Using cloudidentity.googleapis.com
## List groups of a user (you can list at least the groups you belong to)
gcloud identity groups memberships search-transitive-groups --member-email <email> --labels=cloudidentity.googleapis.com/groups.discussion_forum

## List Group Members (you can list at least the groups you belong to)
gcloud identity groups memberships list --group-email=<email>
### Make it transitive
gcloud identity groups memberships search-transitive-memberships --group-email=<email>

## Get a graph (if you have enough permissions)
gcloud identity groups memberships get-membership-graph --member-email=<email> --labels=cloudidentity.googleapis.com/groups.discussion_forum

tip

이전 예제에서 --labels 매개변수가 필요하므로 일반 값을 사용합니다(여기서 PurplePanda가 사용하는 것처럼 API를 직접 사용하면 필요하지 않습니다).

관리자 서비스가 활성화되어 있어도, 손상된 워크스페이스 사용자가 충분한 권한이 없기 때문에 나열하는 동안 오류가 발생할 수 있습니다:

IAM

IAM에 대한 기본 정보는 여기에서 확인하세요.

기본 권한

문서에서: 조직 리소스가 생성되면, 도메인의 모든 사용자에게 기본적으로 청구 계정 생성자프로젝트 생성자 역할이 부여됩니다. 이러한 기본 역할은 사용자가 Google Cloud를 즉시 사용할 수 있도록 하지만, 조직 리소스의 일반 운영에 사용하기 위한 것이 아닙니다.

역할권한을 부여합니다:

  • billing.accounts.createresourcemanager.organizations.get
  • resourcemanager.organizations.getresourcemanager.projects.create

또한 사용자가 프로젝트를 생성할 때, 그는 문서에 따라 자동으로 해당 프로젝트의 소유자가 됩니다. 따라서 기본적으로 사용자는 프로젝트를 생성하고 그 위에서 어떤 서비스든 실행할 수 있습니다(채굴기? 워크스페이스 나열? ...)

caution

GCP 조직에서 가장 높은 권한은 조직 관리자 역할입니다.

set-iam-policy vs add-iam-policy-binding

대부분의 서비스에서 add-iam-policy-binding 또는 set-iam-policy 메서드를 사용하여 리소스에 대한 권한을 변경할 수 있습니다. 주요 차이점은 add-iam-policy-binding이 기존 IAM 정책에 새로운 역할 바인딩을 추가하는 반면, set-iam-policy는 이전에 부여된 권한을 삭제하고 명령에 지정된 권한만 설정한다는 것입니다.

나열

bash
# Roles
## List roles
gcloud iam roles list --project $PROJECT_ID # List only custom roles
gcloud iam roles list --filter='etag:AA=='

## Get perms and description of role
gcloud iam roles describe roles/container.admin
gcloud iam roles describe --project <proj-name> <role-name>

# Policies
gcloud organizations get-iam-policy <org_id>
gcloud resource-manager folders get-iam-policy <folder-id>
gcloud projects get-iam-policy <project-id>

# MISC
## Testable permissions in resource
gcloud iam list-testable-permissions --filter "NOT apiDisabled: true" <resource>
## Grantable roles to a resource
gcloud iam list-grantable-roles <project URL>

cloudasset IAM 열거

이 서비스를 사용하여 다양한 리소스(조직, 폴더, 프로젝트 등)에서 사용자의 모든 권한을 확인하는 방법이 여러 가지 있습니다.

  • 권한 **cloudasset.assets.searchAllIamPolicies**는 리소스 내의 모든 iam 정책을 요청할 수 있습니다.
bash
gcloud asset search-all-iam-policies #By default uses current configured project
gcloud asset search-all-iam-policies --scope folders/1234567
gcloud asset search-all-iam-policies --scope organizations/123456
gcloud asset search-all-iam-policies --scope projects/project-id-123123
  • 권한 **cloudasset.assets.analyzeIamPolicy**는 리소스 내의 주체에 대한 모든 iam 정책을 요청할 수 있습니다.
bash
# Needs perm "cloudasset.assets.analyzeIamPolicy" over the asset
gcloud asset analyze-iam-policy --organization=<org-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --folder=<folder-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --project=<project-name> \
--identity='user:email@hacktricks.xyz'
  • 권한 **cloudasset.assets.searchAllResources**는 조직, 폴더 또는 프로젝트의 모든 리소스를 나열할 수 있도록 허용합니다. IAM 관련 리소스(예: 역할)가 포함됩니다.
bash
gcloud asset search-all-resources --scope projects/<proj-name>
gcloud asset search-all-resources --scope folders/1234567
gcloud asset search-all-resources --scope organizations/123456
  • 권한 **cloudasset.assets.analyzeMove**는 프로젝트와 같은 리소스에 영향을 미치는 정책을 검색하는 데에도 유용할 수 있습니다.
bash
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • cloudasset.assets.queryIamPolicy 권한은 주체의 권한을 찾는 데에도 접근을 제공할 수 있다고 생각합니다.
bash
# But, when running something like this
gcloud asset query --project=<proj> --statement='SELECT * FROM compute_googleapis_com_Instance'
# I get the error
ERROR: (gcloud.asset.query) UNAUTHENTICATED: QueryAssets API is only supported for SCC premium customers. See https://cloud.google.com/security-command-center/pricing

testIamPermissions 열거

caution

이전 방법을 사용하여 IAM 정보에 접근할 수 없는 경우 Red Team에 있다면, 도구 https://github.com/carlospolop/bf_my_gcp_perms 를 사용하여 현재 권한을 무차별 대입할 수 있습니다.

그러나 cloudresourcemanager.googleapis.com 서비스가 활성화되어 있어야 합니다.

권한 상승

다음 페이지에서 IAM 권한을 남용하여 권한을 상승시키는 방법을 확인할 수 있습니다:

GCP - IAM Privesc

인증되지 않은 열거

GCP - IAM, Principals & Org Unauthenticated Enum

포스트 익스플로잇

GCP - IAM Post Exploitation

지속성

높은 권한이 있는 경우 다음을 수행할 수 있습니다:

  • 새로운 SAs(또는 Workspace에 있는 경우 사용자) 생성
  • 자신이 제어하는 주체에게 더 많은 권한 부여
  • 취약한 SAs에 더 많은 권한 부여(SSRF in vm, vuln Cloud Function…)

조직 정책

조직 정책이 무엇인지에 대한 소개는 다음을 확인하세요:

GCP - Basic Information

IAM 정책은 역할을 통해 주체가 리소스에 대해 가지는 권한을 나타내며, 역할은 세분화된 권한을 부여합니다. 조직 정책은 이 서비스들이 어떻게 사용될 수 있는지 또는 어떤 기능이 비활성화되는지를 제한합니다. 이는 GCP 환경 내 각 리소스의 최소 권한을 개선하는 데 도움이 됩니다.

bash
gcloud resource-manager org-policies list --organization=ORGANIZATION_ID
gcloud resource-manager org-policies list --folder=FOLDER_ID
gcloud resource-manager org-policies list --project=PROJECT_ID

Privesc

다음 페이지에서 조직 정책 권한을 악용하여 권한 상승하는 방법을 확인할 수 있습니다:

GCP - Orgpolicy Privesc

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기