GCP - IAM, Principals & Org Policies Enum

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로에서 영웅까지 AWS 해킹 배우기**!

HackTricks를 지원하는 다른 방법:

서비스 계정

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

pageGCP - Basic Information

열거

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

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

사용자 및 그룹

GCP에서 사용자 및 그룹이 작동하는 방법에 대한 소개는 다음을 확인하십시오:

pageGCP - Basic Information

열거

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

기본적으로 Workspace 사용자에게는 프로젝트 생성자 역할이 부여되어 새 프로젝트를 생성할 수 있는 액세스 권한이 부여됩니다. 사용자가 프로젝트를 생성하면 해당 프로젝트에 대한 owner 역할이 부여됩니다. 따라서 사용자는 Workspace을 열거할 수 있도록 프로젝트에서 이러한 서비스를 활성화할 수 있습니다.

그러나 이러한 API를 호출할 수 있도록 Workspace에서 충분한 권한이 있어야 합니다.

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

# 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

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

관리 서비스를 활성화해도, kompromised된 워크스페이스 사용자가 충분한 권한을 갖고 있지 않기 때문에 열거하는 동안 오류가 발생할 수 있습니다:

IAM

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

기본 권한

문서에 따르면, 조직 리소스가 생성되면 기본적으로 도메인의 모든 사용자에게 Billing Account CreatorProject Creator 역할이 부여됩니다. 이러한 기본 역할은 사용자가 Google Cloud를 즉시 사용할 수 있도록 허용하지만 조직 리소스의 정기적인 운영에는 사용되지 않습니다.

이러한 역할은 다음 권한을 부여합니다:

  • billing.accounts.createresourcemanager.organizations.get

  • resourcemanager.organizations.getresourcemanager.projects.create

또한 사용자가 프로젝트를 생성하면 문서에 따라 해당 프로젝트의 소유자가 자동으로 부여됩니다. 따라서 기본적으로 사용자는 프로젝트를 생성하고 해당 프로젝트에서 서비스를 실행할 수 있습니다 (마이너? Workspace 열거? ...)

GCP 조직에서 가장 높은 권한은 Organization Administrator 역할입니다.

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

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

열거

# 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 정책을 요청할 수 있습니다.

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 정책을 요청할 수 있습니다.

# 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 관련 리소스가 포함됩니다.

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 권한은 프로젝트와 같은 리소스에 영향을 주는 정책을 검색하는 데도 유용할 수 있습니다.

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • 나는 권한 **cloudasset.assets.queryIamPolicy**가 주체의 권한을 찾는 권한에도 접근할 수 있다고 생각합니다.

# 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 enumeration

이전 방법을 사용하여 IAM 정보에 액세스할 수 없는 경우 Red Team에 속해 있다면 현재 권한을 브루트 포스할 수 있는 https://github.com/carlospolop/bf_my_gcp_perms 툴을 사용할 수 있습니다.

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

Privesc

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

pageGCP - IAM Privesc

Unauthenticated Enum

pageGCP - IAM, Principals & Org Unauthenticated Enum

Post Exploitation

pageGCP - IAM Post Exploitation

Persistence

고 권한을 가지고 있다면 다음을 수행할 수 있습니다:

  • 새로운 SAs 생성 (또는 Workspace에서 사용자 생성)

  • 자체적으로 제어하는 주체에게 더 많은 권한 부여

  • 취약한 SAs에 더 많은 권한 부여 (vm에서 SSRF, 취약한 Cloud Function 등)

  • ...

Org Policies

Org Policies에 대한 소개는 다음을 확인하십시오:

pageGCP - Basic Information

IAM 정책은 역할을 통해 주체가 리소스에 대해 가지는 권한을 나타내며, 이는 세분화된 권한이 할당됩니다. 조직 정책은 서비스를 사용하는 방법을 제한하거나 비활성화된 기능을 결정합니다. 이는 GCP 환경의 각 리소스의 최소 권한을 향상시키는 데 도움이 됩니다.

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

권한 상승

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

pageGCP - Orgpolicy Privesc

最終更新