GCP Pentesting

htARTE (HackTricks AWS Red Team 전문가)로부터 제로에서 영웅까지 AWS 해킹 배우기

HackTricks를 지원하는 다른 방법:

기본 정보

GCP 환경을 펜테스팅하기 전에, 무엇을 해야 할지, 미스컨피규레이션을 찾는 방법 및 어떻게 악용할지를 이해하는 데 도움이 되는 몇 가지 기본 사항이 있습니다.

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

pageGCP - Basic Information

학습을 위한 랩

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

GCP 환경을 감사하기 위해서는 사용 중인 서비스, 노출된 것, 누가 무엇에 액세스 권한이 있는지, 내부 GCP 서비스와 외부 서비스가 어떻게 연결되어 있는지를 알아야 합니다.

레드팀 관점에서 GCP 환경을 침해하는 첫 번째 단계는 일부 자격 증명을 획들하는 것입니다. 다음은 그를 위한 몇 가지 아이디어입니다:

  • 깃허브(또는 유사한 곳)의 누설 - OSINT

  • 사회 공학 (페이지 Workspace Security를 확인하세요)

  • 비밀번호 재사용 (비밀번호 누설)

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

  • 서버 측 요청 위조 메타데이터 엔드포인트에 액세스

  • 로컬 파일 읽기

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

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

  • 3rd parties 침해

  • 내부 직원

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

pageGCP - Unauthenticated Enum & Access

또는 검토를 수행 중이라면 다음 역할로 자격 증명을 요청할 수 있습니다:

pageGCP - 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

조직 열거

# 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

원칙 및 IAM 열거

충분한 권한이 있다면 GCP 계정 내 각 엔터티의 권한을 확인하여 본인 및 다른 신원이 무엇을 할 수 있는지, 그리고 권한을 승격하는 방법을 이해하는 데 도움이 됩니다.

IAM을 열거할 충분한 권한이 없다면 무차별 대입 공격을 통해 그것들을 파악할 수 있습니다. 열거 및 무차별 대입 공격 방법은 다음에서 확인할 수 있습니다:

pageGCP - IAM, Principals & Org Policies Enum

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

서비스 열거

GCP에는 놀라운 양의 서비스가 있으며, 다음 페이지에서는 기본 정보, 열거 치트시트, 감지 회피 방법, 지속성 확보, 그리고 일부 서비스에 대한 후속 공격 트릭을 찾을 수 있습니다:

pageGCP - Services

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

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

pageGCP - Unauthenticated Enum & Access

권한 상승, 후속 공격 및 지속성

클라우드 자격 증명을 얻거나 클라우드 내에서 실행 중인 일부 서비스를 침해한 후, 침해된 계정이 가질 수 있는 권한을 오용하는 것이 가장 일반적인 방법입니다. 따라서, 먼저 권한을 열거해야 합니다.

또한, 이 열거 중에 권한이 "조직"의 최상위 수준에서 설정될 수 있다는 것을 기억하십시오.

pageGCP - Privilege EscalationpageGCP - Post ExploitationpageGCP - Persistence

공개 노출된 서비스

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

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

GCP <--> Workspace 피벗

한 플랫폼에서 주체를 침해하면 공격자가 다른 플랫폼을 침해할 수 있을 수도 있습니다. 이에 대해 확인하려면 다음을 참조하십시오:

pageGCP <--> Workspace Pivoting

자동 도구

# 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에서 권한 상승을 하는 스크립트입니다 (열거 스크립트를 실행하지 못했습니다).

gcloud 구성 및 디버그

# 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

gcloud에서 OAuth 토큰 구성

메타데이터 엔드포인트에서 유출된 서비스 계정 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

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법:

最終更新