GCP - IAM Privesc

htARTE (HackTricks AWS Red Team Expert)을 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

IAM

IAM에 대한 자세한 정보는 다음에서 확인하세요:

pageGCP - IAM, Principals & Org Policies Enum

iam.roles.update (iam.roles.get)

해당 권한을 가진 공격자는 할당된 역할을 업데이트하고 다른 리소스에 추가 권한을 부여할 수 있습니다. 예를 들어:

gcloud iam roles update <rol name> --project <project> --add-permissions <permission>

다음은 GCP 권한 상승에 대한 내용입니다. 취약한 환경을 자동으로 생성, 악용 및 정리하는 스크립트는 여기에서 찾을 수 있으며, 이 권한을 악용하기 위한 파이썬 스크립트는 여기에서 찾을 수 있습니다. 자세한 내용은 원본 연구를 확인하십시오.

iam.serviceAccounts.getAccessToken (iam.serviceAccounts.get)

해당 권한을 가진 공격자는 서비스 계정에 속한 액세스 토큰을 요청할 수 있으므로, 우리보다 더 많은 권한을 가진 서비스 계정의 액세스 토큰을 요청할 수 있습니다.

취약한 환경을 자동으로 생성, 악용 및 정리하는 스크립트는 여기에서 찾을 수 있으며, 이 권한을 악용하기 위한 파이썬 스크립트는 여기에서 찾을 수 있습니다. 자세한 내용은 원본 연구를 확인하십시오.

iam.serviceAccountKeys.create

해당 권한을 가진 공격자는 서비스 계정에 대한 사용자 관리 키를 생성할 수 있으며, 이를 통해 해당 서비스 계정으로 GCP에 액세스할 수 있습니다.

gcloud iam service-accounts keys create --iam-account <name> /tmp/key.json

gcloud auth activate-service-account --key-file=sa_cred.json

다음은 GCP 권한 상승에 대한 내용을 포함한 해킹 책의 내용입니다. 다음 내용은 /hive/hacktricks-cloud/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-iam-privesc.md 파일에서 가져온 것입니다. 관련된 영어 텍스트를 한국어로 번역하고, 정확히 동일한 마크다운 및 HTML 구문을 유지한 채 번역을 반환하세요. 코드, 해킹 기법 이름, 해킹 관련 용어, 클라우드/SaaS 플랫폼 이름(예: Workspace, aws, gcp...) 및 'leak', pentesting, 마크다운 태그와 같은 요소는 번역하지 마세요. 또한 번역 및 마크다운 구문 이외의 추가 내용은 추가하지 마세요.


다음은 취약한 환경의 생성, 악용 및 정리를 자동화하는 스크립트를 찾을 수 있는 링크입니다: 여기. 또한 이 권한을 악용하는 파이썬 스크립트는 여기에서 찾을 수 있습니다. 자세한 내용은 원본 연구를 확인하세요.

참고로, iam.serviceAccountKeys.update는 SA의 키를 수정하는 데 사용할 수 없습니다. 키를 수정하려면 iam.serviceAccountKeys.create 권한도 필요합니다.

iam.serviceAccounts.implicitDelegation

iam.serviceAccounts.implicitDelegation 권한을 가진 서비스 계정이 세 번째 서비스 계정에 iam.serviceAccounts.getAccessToken 권한을 가지고 있는 경우, implicitDelegation을 사용하여 해당 세 번째 서비스 계정을 위한 토큰을 생성할 수 있습니다. 다음은 이를 설명하기 위한 다이어그램입니다.

다음은 취약한 환경의 생성, 악용 및 정리를 자동화하는 스크립트를 찾을 수 있는 링크입니다: 여기. 또한 이 권한을 악용하는 파이썬 스크립트는 여기에서 찾을 수 있습니다. 자세한 내용은 원본 연구를 확인하세요.

참고로, 문서에 따르면 위임은 generateAccessToken() 메서드를 사용하여 토큰을 생성하는 데만 작동합니다.

iam.serviceAccounts.signBlob

위 권한을 가진 공격자는 GCP에서 임의의 페이로드를 서명할 수 있습니다. 따라서 대상이 되는 SA의 서명되지 않은 JWT를 생성한 다음 blob으로 보내 JWT를 서명받을 수 있습니다. 자세한 내용은 여기를 참조하세요.

다음은 취약한 환경의 생성, 악용 및 정리를 자동화하는 스크립트를 찾을 수 있는 링크입니다: 여기. 또한 이 권한을 악용하는 파이썬 스크립트는 여기여기에서 찾을 수 있습니다. 자세한 내용은 원본 연구를 확인하세요.

iam.serviceAccounts.signJwt

위 권한을 가진 공격자는 올바르게 구성된 JSON 웹 토큰(JWT)을 서명할 수 있습니다. 이전 방법과의 차이점은 구글이 JWT를 포함한 blob을 서명하는 대신 이미 JWT를 기대하는 signJWT 메서드를 사용한다는 것입니다. 이를 사용하면 더 쉽게 사용할 수 있지만, 임의의 바이트 대신 JWT만 서명할 수 있습니다.

다음은 취약한 환경의 생성, 악용 및 정리를 자동화하는 스크립트를 찾을 수 있는 링크입니다: 여기. 또한 이 권한을 악용하는 파이썬 스크립트는 여기에서 찾을 수 있습니다. 자세한 내용은 원본 연구를 확인하세요.

iam.serviceAccounts.setIamPolicy

위 권한을 가진 공격자는 서비스 계정에 IAM 정책을 추가할 수 있습니다. 이를 악용하여 서비스 계정을 위장할 수 있는 필요한 권한을 부여할 수 있습니다. 다음 예제에서는 흥미로운 SA에 대해 roles/iam.serviceAccountTokenCreator 역할을 부여합니다.

gcloud iam service-accounts add-iam-policy-binding "${VICTIM_SA}@${PROJECT_ID}.iam.gserviceaccount.com" \
--member="user:username@domain.com" \
--role="roles/iam.serviceAccountTokenCreator"

여기에서 취약한 환경의 생성, 악용 및 정리를 자동화하는 스크립트를 찾을 수 있습니다.

iam.serviceAccounts.actAs

iam.serviceAccounts.actAs 권한AWS의 iam:PassRole 권한과 유사합니다. 이는 Compute Engine 인스턴스를 시작하는 등의 작업을 실행하는 데 필수적이며, 서비스 계정을 "actAs"할 수 있는 권한을 부여하여 안전한 권한 관리를 보장합니다. 이 권한이 없으면 사용자가 불필요한 액세스를 얻을 수 있습니다. 또한, iam.serviceAccounts.actAs를 악용하는 것은 여러 가지 방법이 있으며, 각 방법마다 일련의 권한이 필요하므로 다른 방법과 대조됩니다.

서비스 계정 위장

서비스 계정 위장은 새로운 및 더 나은 권한을 얻기 위해 매우 유용할 수 있습니다. 다른 서비스 계정을 위장하는 세 가지 방법이 있습니다:

  • RSA 개인 키를 사용한 인증 (위에서 다룸)

  • Cloud IAM 정책을 사용한 권한 부여 (여기에서 다룸)

  • GCP 서비스에 작업 배포 (사용자 계정 침해와 더 관련됨)

iam.serviceAccounts.getOpenIdToken

위에서 언급한 권한을 가진 공격자는 OpenID JWT를 생성할 수 있습니다. 이는 신원을 주장하기 위해 사용되며, 리소스에 대한 암묵적인 인가를 반드시 갖지는 않습니다.

흥미로운 게시물에 따르면, 토큰을 사용하여 인증하려는 서비스 (토큰을 사용하려는 서비스)를 지정해야 하며, 구글에서 서비스 계정과 JWT의 대상을 나타내는 서명된 JWT를 받게 됩니다.

액세스 권한이 있는 경우 다음과 같이 OpenIDToken을 생성할 수 있습니다:

# First activate the SA with iam.serviceAccounts.getOpenIdToken over the other SA
gcloud auth activate-service-account --key-file=/path/to/svc_account.json
# Then, generate token
gcloud auth print-identity-token "${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" --audiences=https://example.com

그럼 당신은 다음과 같이 서비스에 액세스하기 위해 그것을 사용할 수 있습니다:

curl -v -H "Authorization: Bearer id_token" https://some-cloud-run-uc.a.run.app

이러한 종류의 토큰을 통해 인증을 지원하는 일부 서비스는 다음과 같습니다:

서비스 계정을 대신하여 OpenID 토큰을 생성하는 예제는 여기에서 찾을 수 있습니다.

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요!

HackTricks를 지원하는 다른 방법:

最終更新