GCP - Privilege Escalation

Support HackTricks

Introduction to GCP Privilege Escalation

GCP는 다른 클라우드와 마찬가지로 몇 가지 주체: 사용자, 그룹 및 서비스 계정과 몇 가지 리소스: 컴퓨트 엔진, 클라우드 함수 등을 가지고 있습니다. 그런 다음 역할을 통해 리소스에 대한 주체의 권한이 부여됩니다. 이것은 GCP에서 주체가 리소스에 대해 가지는 권한을 지정하는 방법입니다. 사용자가 리소스 또는 제3자 리소스에 대해 더 많은 권한을 얻을 수 있는 특정 권한이 있으며, 이를 권한 상승이라고 합니다(또한, 더 많은 권한을 얻기 위한 취약점 악용).

따라서 GCP 권한 상승 기술을 2개 그룹으로 나누고자 합니다:

  • 주체에 대한 권한 상승: 이는 다른 주체를 가장할 수 있게 해주며, 따라서 모든 권한으로 행동할 수 있게 해줍니다. 예: _getAccessToken_을 악용하여 서비스 계정을 가장합니다.

  • 리소스에 대한 권한 상승: 이는 특정 리소스에 대해 더 많은 권한을 얻을 수 있게 해줍니다. 예: 클라우드 함수에 대해 setIamPolicy 권한을 악용하여 함수를 트리거할 수 있습니다.

  • 일부 리소스 권한은 리소스에 임의의 서비스 계정을 연결할 수 있게 해줍니다. 이는 SA와 함께 리소스를 시작하고, 리소스에 들어가서 SA 토큰을 훔칠 수 있게 해줍니다. 따라서 이는 리소스 상승을 통해 주체로 상승할 수 있게 해줍니다. 이는 이전에 여러 리소스에서 발생했지만, 지금은 덜 빈번합니다(하지만 여전히 발생할 수 있습니다).

명백히, 가장 흥미로운 권한 상승 기술은 두 번째 그룹의 기술입니다. 왜냐하면 이는 이미 일부 권한이 있는 리소스 외부에서 더 많은 권한을 얻을 수 있게 해주기 때문입니다. 그러나 리소스에서 상승하는 것민감한 정보에 대한 접근을 제공하거나 심지어 다른 주체에 대한 접근을 제공할 수 있습니다(아마도 SA의 토큰을 포함하는 비밀을 읽음으로써).

GCP 서비스 계정은 주체와 권한 모두를 포함하므로, SA에서 권한을 상승시키면 그것을 가장할 수 있게 됩니다.

괄호 안의 권한은 gcloud로 취약점을 악용하는 데 필요한 권한을 나타냅니다. API를 통해 악용할 경우 필요하지 않을 수 있습니다.

Permissions for Privilege Escalation Methodology

이것은 GCP 내에서 특정 작업을 수행하기 위해 특정 권한을 테스트하는 방법입니다.

  1. github 리포지토리 다운로드 https://github.com/carlospolop/gcp_privesc_scripts

  2. tests/에 새 스크립트 추가

Bypassing access scopes

GCP 메타데이터 서비스에서 유출된 SA의 토큰은 액세스 범위를 가지고 있습니다. 이는 토큰이 가진 권한에 대한 제한입니다. 예를 들어, 토큰이 https://www.googleapis.com/auth/cloud-platform 범위를 가지면 모든 GCP 서비스에 전체 접근할 수 있습니다. 그러나 토큰이 https://www.googleapis.com/auth/cloud-platform.read-only 범위를 가지면 SA가 IAM에서 더 많은 권한을 가지고 있더라도 모든 GCP 서비스에 대해 읽기 전용 접근만 가능합니다.

이러한 권한을 우회하는 직접적인 방법은 없지만, 손상된 호스트에서 새 자격 증명을 검색하거나, 제한 없이 OAuth 토큰을 생성하기 위한 서비스 키를 찾거나, 덜 제한된 다른 VM으로 점프하는 것을 시도할 수 있습니다.

액세스 범위가 사용될 때, 컴퓨팅 인스턴스(VM)에 대해 생성된 OAuth 토큰은 제한이 포함된 범위를 가집니다. 그러나 손상된 계정이 가진 권한을 악용하고 이 제한을 우회할 수 있을지도 모릅니다.

이 제한을 우회하는 가장 좋은 방법은 손상된 호스트에서 새 자격 증명을 찾거나, 제한 없이 OAuth 토큰을 생성하기 위한 서비스 키를 찾거나, 덜 제한된 SA가 있는 다른 VM을 손상시키는 것입니다.

키가 생성된 SA 확인:

for i in $(gcloud iam service-accounts list --format="table[no-heading](email)"); do
echo "Looking for keys for $i:"
gcloud iam service-accounts keys list --iam-account $i
done

권한 상승 기술

AWS에서 권한을 상승시키는 방법은 다른 서비스 계정/사용자/그룹의 권한에 접근할 수 있을 만큼 충분한 권한을 갖는 것입니다. 권한 상승을 연결하여 조직에 대한 관리자 액세스를 얻는 것입니다.

GCP에는 엔터티에 부여될 수 있는 수백 (아니면 수천)의 권한이 있습니다. 이 책에서는 내가 아는 모든 권한을 찾을 수 있으며, 이를 악용하여 권한을 상승시킬 수 있지만, 여기 언급되지 않은 경로를 알고 있다면 공유해 주세요.

이 섹션의 하위 페이지는 서비스별로 정렬되어 있습니다. 각 서비스에서 권한을 상승시키는 다양한 방법을 찾을 수 있습니다.

GCP를 악용하여 로컬에서 권한 상승하기

GCP의 머신 내부에 있다면 권한을 악용하여 로컬에서도 권한을 상승시킬 수 있습니다:

GCP - local privilege escalation ssh pivoting

참고 문헌

Support HackTricks

Last updated