GCP Pentesting

Reading time: 9 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 환경에서 펜테스팅을 시작하기 전에, 어떻게 작동하는지에 대한 몇 가지 기본 사항을 알아야 합니다. 이는 잘못된 구성 요소를 찾고 이를 악용하는 방법을 이해하는 데 도움이 됩니다.

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

GCP - Basic Information

학습을 위한 실습

GCP 펜테스터/레드 팀 방법론

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

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

  • github(또는 유사한 곳)에서의 유출 - OSINT
  • 소셜 엔지니어링 (페이지 Workspace Security 확인)
  • 비밀번호 재사용 (비밀번호 유출)
  • GCP 호스팅 애플리케이션의 취약점
  • 서버 측 요청 위조 메타데이터 엔드포인트에 접근
  • 로컬 파일 읽기
  • /home/USERNAME/.config/gcloud/*
  • C:\Users\USERNAME\.config\gcloud\*
  • 제3자 유출
  • 내부 직원

또는 인증되지 않은 서비스를 타격하여:

GCP - Unauthenticated Enum & Access

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

GCP - Permissions for a Pentest

note

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

기본 열거

SSRF

GCP 메타데이터를 열거하는 방법에 대한 자세한 정보는 다음 해킹 트릭 페이지를 확인하십시오:

Cloud SSRF - HackTricks

Whoami

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

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

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

bash
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

조직 열거

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

GCP - IAM, Principals & Org Policies Enum

note

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

Services Enumeration

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

GCP - Services

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

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

GCP - Unauthenticated Enum & Access

Privilege Escalation, Post Exploitation & Persistence

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

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

GCP - Privilege Escalation

GCP - Post Exploitation

GCP - Persistence

Publicly Exposed Services

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

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

HackTricks - HackTricks

GCP <--> Workspace Pivoting

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

GCP <--> Workspace Pivoting

Automatic Tools

bash
# 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: GCP 환경을 gcloud cli를 사용하여 열거하고 결과를 파일에 저장하는 Bash 스크립트입니다.
  • GCP-IAM-Privilege-Escalation: 높은 IAM 권한을 열거하고 이를 악용하여 GCP에서 권한을 상승시키는 스크립트입니다 (열거 스크립트를 실행할 수 없었습니다).
  • BF My GCP Permissions: 권한을 무작위로 시도하는 스크립트입니다.

gcloud config & debug

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

gcloud, gsutil... 네트워크 캡처

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

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

bash
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 token configure in gcloud

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

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

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 지원하기