GCP - local privilege escalation ssh pivoting

HackTricks ์ง€์›ํ•˜๊ธฐ

์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” Compute Engine ํ”„๋กœ์ ํŠธ ๋‚ด์˜ VM์—์„œ ๋น„ํŠน๊ถŒ ๊ณ„์ •์„ ์นจํ•ดํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋†€๋ž๊ฒŒ๋„, ์นจํ•ดํ•œ Compute Engine์˜ GCP ๊ถŒํ•œ์ด ๋จธ์‹  ๋‚ด์—์„œ ๋กœ์ปฌ ๊ถŒํ•œ์„ ์ƒ์Šน์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ํ•ญ์ƒ ์œ ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•„๋Š” ๊ฒƒ์€ ์ข‹์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ ์ฝ๊ธฐ

Compute Instances๋Š” ์•„๋งˆ๋„ ์„œ๋น„์Šค ๊ณ„์ •์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

IAM์ด ์„ธ๋ถ„ํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ณ„์ •์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชฉ๋ก ๊ถŒํ•œ์€ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์˜ ํ›Œ๋ฅญํ•œ ๊ฐ€์ƒ ์˜ˆ๋Š” instance82736-long-term-xyz-archive-0332893๋ผ๋Š” ์Šคํ† ๋ฆฌ์ง€ ๋ฒ„ํ‚ท์— ๋ฐฑ์—…์„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” Compute Instance์ž…๋‹ˆ๋‹ค.

๋ช…๋ น์ค„์—์„œ gsutil ls๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์œผ๋ฉฐ, ์„œ๋น„์Šค ๊ณ„์ •์ด storage.buckets.list IAM ๊ถŒํ•œ์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ gsutil ls gs://instance82736-long-term-xyz-archive-0332893๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋กœ์ปฌ Linux ๊ณ„์ •์ด ๋ถ€์กฑํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํ‰๋ฌธ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๋Š” ์ „์ฒด ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐฑ์—…์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„ํ‚ท ์ด๋ฆ„์€ ์Šคํฌ๋ฆฝํŠธ(์˜ˆ: bash, Python, Ruby ๋“ฑ) ๋‚ด์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

๊ด€๋ฆฌ์ž๋Š” ์ธ์Šคํ„ด์Šค ๋ฐ ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ž„์˜์˜ ํ‚ค/๊ฐ’ ์Œ์„ ์ธ์Šคํ„ด์Šค๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ์‹œ์ž‘/์ข…๋ฃŒ ์Šคํฌ๋ฆฝํŠธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋จธ์‹ ์ด ์‹œ์ž‘๋˜๊ฑฐ๋‚˜ ์žฌ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋ฉฐ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—”๋“œํฌ์ธํŠธ์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ์ •๋ณด๋Š” ๋‹ค์Œ์„ ํ™•์ธํ•˜์„ธ์š”:

IAM ๊ถŒํ•œ ๋‚จ์šฉํ•˜๊ธฐ

๋‹ค์Œ์— ์ œ์•ˆ๋œ ๋Œ€๋ถ€๋ถ„์˜ ๊ถŒํ•œ์€ ๊ธฐ๋ณธ Compute SA์— ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ ์•ก์„ธ์Šค ๋ฒ”์œ„๊ฐ€ SA๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ cloud-platform ๋ฒ”์œ„๊ฐ€ ํ™œ์„ฑํ™”๋˜๊ฑฐ๋‚˜ compute ๋ฒ”์œ„๋งŒ ํ™œ์„ฑํ™”๋˜๋ฉด, ์ด๋ฅผ ๋‚จ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ถŒํ•œ์„ ํ™•์ธํ•˜์„ธ์š”:

ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํ‚ค ๊ฒ€์ƒ‰ํ•˜๊ธฐ

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ•์Šค ๋‚ด์—์„œ gcloud์— ๋กœ๊ทธ์ธํ•˜๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ž๊ฒฉ ์ฆ๋ช…์„ ๋‚จ๊ฒผ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:

sudo find / -name "gcloud"

์ด๊ฒƒ๋“ค์€ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ํŒŒ์ผ๋“ค์ž…๋‹ˆ๋‹ค:

  • ~/.config/gcloud/credentials.db

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/adc.json

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto

  • ~/.credentials.json

๋” ๋งŽ์€ API ํ‚ค ์ •๊ทœ ํ‘œํ˜„์‹

TARGET_DIR="/path/to/whatever"

# Service account keys
grep -Pzr "(?s){[^{}]*?service_account[^{}]*?private_key.*?}" \
"$TARGET_DIR"

# Legacy GCP creds
grep -Pzr "(?s){[^{}]*?client_id[^{}]*?client_secret.*?}" \
"$TARGET_DIR"

# Google API keys
grep -Pr "AIza[a-zA-Z0-9\\-_]{35}" \
"$TARGET_DIR"

# Google OAuth tokens
grep -Pr "ya29\.[a-zA-Z0-9_-]{100,200}" \
"$TARGET_DIR"

# Generic SSH keys
grep -Pzr "(?s)-----BEGIN[ A-Z]*?PRIVATE KEY[a-zA-Z0-9/\+=\n-]*?END[ A-Z]*?PRIVATE KEY-----" \
"$TARGET_DIR"

# Signed storage URLs
grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
"$TARGET_DIR"

# Signed policy documents in HTML
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"

References

HackTricks ์ง€์›ํ•˜๊ธฐ

Last updated