GCP Pentesting

HackTricks 지원하기

기본 정보

GCP 환경을 펜테스팅하기 전에, 작동 방식에 대한 기본적인 사항을 알아야 오류를 찾고 이를 악용하는 방법을 이해하는 데 도움이 됩니다.

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

GCP - Basic Information

학습을 위한 실습

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

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

레드 팀 관점에서 GCP 환경을 손상시키는 첫 번째 단계자격 증명을 얻는 것입니다. 다음은 그 방법에 대한 몇 가지 아이디어입니다:

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

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

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

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

  • 메타데이터 엔드포인트에 접근할 수 있는 Server Side Request Forgery

  • 로컬 파일 읽기

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

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

  • 3자 침해

  • 내부 직원

또는 노출된 인증되지 않은 서비스를 손상시켜서:

GCP - Unauthenticated Enum & Access

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

GCP - Permissions for a Pentest

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

기본 열거

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

Org Enumeration

조직 나열

# 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

이제 자격 증명에 대한 정보를 얻었으므로 (그리고 레드 팀이라면 탐지되지 않았기를 바랍니다). 환경에서 사용되는 서비스를 파악할 시간입니다. 다음 섹션에서는 일반적인 서비스를 열거하는 몇 가지 방법을 확인할 수 있습니다.

Services Enumeration

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

GCP - Services

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

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

GCP - Unauthenticated Enum & Access

Privilege Escalation, Post Exploitation & Persistence

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

또한, 이 열거 중에 권한이 "Organization"의 최고 수준에서 설정될 수 있다는 점을 기억하십시오.

GCP - Privilege EscalationGCP - Post ExploitationGCP - Persistence

Publicly Exposed Services

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

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

GCP <--> Workspace Pivoting

하나의 플랫폼에서 엔티티를 손상시키는 것이 공격자가 다른 플랫폼을 손상시키는 것을 가능하게 할 수 있습니다. 다음을 참조하십시오:

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: 권한을 brute force하는 스크립트.

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

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

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

참고 자료

HackTricks 지원하기

Last updated