GCP Pentesting

Support HackTricks

Basic Information

GCP 환경에서 펜테스팅을 시작하기 전에, 어떻게 작동하는지에 대한 몇 가지 기본 사항을 알아야 합니다. 이는 당신이 무엇을 해야 하는지, 잘못된 구성은 어떻게 찾는지, 그리고 그것들을 어떻게 악용하는지 이해하는 데 도움이 됩니다.

조직 계층, 권한 및 기타 기본 개념은 다음에서 설명됩니다:

Labs to learn

GCP Pentester/Red Team Methodology

GCP 환경을 감사하기 위해서는 어떤 서비스가 사용되고 있는지, 무엇이 노출되고 있는지, 누가 무엇에 접근할 수 있는지, 그리고 내부 GCP 서비스와 외부 서비스가 어떻게 연결되어 있는지를 아는 것이 매우 중요합니다.

Red Team 관점에서, GCP 환경을 침해하기 위한 첫 번째 단계는 일부 자격 증명을 얻는 것입니다. 다음은 이를 수행하는 방법에 대한 몇 가지 아이디어입니다:

  • github (또는 유사한 곳)의 유출 - OSINT

  • 사회적 공학 (페이지 Workspace Security 확인)

  • 비밀번호 재사용 (비밀번호 유출)

  • GCP 호스팅 애플리케이션의 취약점

  • 서버 측 요청 위조 메타데이터 엔드포인트에 접근

  • 로컬 파일 읽기

  • /home/USERNAME/.config/gcloud/*

  • C:\Users\USERNAME\.config\gcloud\*

  • 제3자 침해

  • 내부 직원

또는 인증되지 않은 서비스침해하여:

또는 검토를 수행하는 경우, 다음 역할로 자격 증명 요청을 할 수 있습니다:

자격 증명을 얻은 후, 그 자격 증명이 누구에게 속하는지그들이 무엇에 접근할 수 있는지 알아야 하므로, 몇 가지 기본 열거 작업을 수행해야 합니다:

Basic Enumeration

SSRF

GCP 메타데이터를 열거하는 방법에 대한 자세한 정보는 다음 HackTricks 페이지를 확인하세요:

Whoami

GCP에서는 자신이 누구인지 추측하기 위해 여러 옵션을 시도할 수 있습니다:

#If you are inside a compromise machine
gcloud auth list
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=$(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/tokeninfo
gcloud auth print-identity-token #Get info from the token

#If you compromised a metadata token or somehow found an OAuth token
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=<token>" https://www.googleapis.com/oauth2/v1/tokeninfo

사용자는 /userinfo API 엔드포인트를 사용하여 사용자에 대한 더 많은 정보를 얻을 수 있습니다:

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth $(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/userinfo

curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth <access_token>" https://www.googleapis.com/oauth2/v1/userinfo

조직 열거

# Get organizations
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud resource-manager folders list --organization <org_number> # Get folders
gcloud projects list # Get projects

Principals & IAM Enumeration

충분한 권한이 있다면, GCP 계정 내 각 엔티티의 권한을 확인하는 것은 당신과 다른 아이덴티티가 무엇을 할 수 있는지, 그리고 어떻게 권한을 상승시킬 수 있는지 이해하는 데 도움이 됩니다.

IAM을 열거할 충분한 권한이 없다면, 무차별 대입 공격을 통해 알아낼 수 있습니다. 열거 및 무차별 대입 공격을 수행하는 방법은 다음에서 확인하세요:

이제 자신의 자격 증명에 대한 정보가 있는 상태입니다 (그리고 레드 팀이라면 발견되지 않았기를 바랍니다). 환경에서 어떤 서비스가 사용되고 있는지 파악할 시간입니다. 다음 섹션에서는 일반 서비스 열거 방법을 확인할 수 있습니다.

Services Enumeration

GCP는 놀라운 양의 서비스를 제공합니다. 다음 페이지에서는 기본 정보, 열거 치트 시트, 탐지를 피하는 방법, 지속성 확보 및 기타 사후 활용 트릭에 대한 정보를 찾을 수 있습니다:

모든 작업을 수동으로 수행할 필요는 없다는 점에 유의하세요. 이 게시물 아래에서 자동 도구에 대한 섹션을 찾을 수 있습니다.

또한, 이 단계에서 인증되지 않은 사용자에게 노출된 더 많은 서비스를 발견했을 수 있으며, 이를 악용할 수 있습니다:

Privilege Escalation, Post Exploitation & Persistence

클라우드 자격 증명을 얻거나 클라우드 내에서 실행 중인 서비스를 손상시킨 후 가장 일반적인 방법은 잘못 구성된 권한을 악용하는 것입니다. 따라서 가장 먼저 해야 할 일은 자신의 권한을 열거하는 것입니다.

또한, 이 열거 과정에서 권한은 "조직"의 가장 높은 수준에서 설정될 수 있다는 점을 기억하세요.

Publicly Exposed Services

GCP 서비스를 열거하는 동안 일부 서비스가 인터넷에 요소를 노출하고 있는 것을 발견했을 수 있습니다 (VM/컨테이너 포트, 데이터베이스 또는 큐 서비스, 스냅샷 또는 버킷...). 펜테스터/레드 팀원으로서 항상 민감한 정보/취약점을 찾을 수 있는지 확인해야 합니다. 이는 AWS 계정에 대한 추가 접근을 제공할 수 있습니다.

이 책에서는 노출된 GCP 서비스 찾기 및 확인 방법에 대한 정보를 찾을 수 있습니다. 노출된 네트워크 서비스의 취약점 찾기에 대해서는 특정 서비스를 검색할 것을 권장합니다:

GCP <--> Workspace Pivoting

하나의 플랫폼에서 주체를 손상시키는 것은 공격자가 다른 플랫폼을 손상시킬 수 있게 할 수 있습니다, 확인하세요:

Automatic Tools

# Install
git clone https://github.com/google/gcp_scanner.git
cd gcp_scanner
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
# Execute with gcloud creds
python3 __main__.py -o /tmp/output/ -g "$HOME/.config/gcloud"
  • gcp_enum: gcloud cli를 사용하여 GCP 환경을 열거하고 결과를 파일에 저장하는 Bash 스크립트입니다.

  • GCP-IAM-Privilege-Escalation: 높은 IAM 권한을 열거하고 이를 악용하여 GCP에서 권한을 상승시키는 스크립트입니다 (열거 스크립트를 실행할 수 없었습니다).

  • BF My GCP Permissions: 권한을 무작위 대입하는 스크립트입니다.

gcloud config & debug

# Login so gcloud can use your credentials
gcloud auth login
gcloud config set project security-devbox
gcloud auth print-access-token

# Login so SDKs can use your user credentials
gcloud auth application-default login
gcloud auth application-default set-quota-project security-devbox
gcloud auth application-default print-access-token

# Update gcloud
gcloud components update

Capture gcloud, gsutil... network

gcloud CLI와 함께 --log-http 매개변수를 사용하여 도구가 수행하는 요청출력할 수 있다는 점을 기억하세요. 로그에서 토큰 값을 수정하지 않으려면 gcloud config set log_http_redact_token false를 사용하세요.

또한, 통신을 가로채려면:

gcloud config set proxy/address 127.0.0.1
gcloud config set proxy/port 8080
gcloud config set proxy/type http
gcloud config set auth/disable_ssl_validation True

# If you don't want to completely disable ssl_validation use:
gcloud config set core/custom_ca_certs_file cert.pem

# Back to normal
gcloud config unset proxy/address
gcloud config unset proxy/port
gcloud config unset proxy/type
gcloud config unset auth/disable_ssl_validation
gcloud config unset core/custom_ca_certs_file

OAuth 토큰을 gcloud에서 구성하기

메타데이터 엔드포인트에서 유출된 서비스 계정 OAuth 토큰을 사용하기 위해 다음과 같이 하면 됩니다:

# Via env vars
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
gcloud projects list

# Via setup
echo "<token>" > /some/path/to/token
gcloud config set auth/access_token_file /some/path/to/token
gcloud projects list
gcloud config unset auth/access_token_file

References

HackTricks 지원하기

Last updated