GCPへの攻撃を考える。権限昇格について
はじめに
前回の記事では、どうやって認証情報を得てGCPへの初期アクセスを行うかというのが主題でした。
GCPへの攻撃を考える。認証情報の窃取(gcloudコマンド)編
https://zenn.dev/fire_fire_2/articles/e7484c7ca3702b
さて、ここで取得した認証情報の権限は、高権限のものもあるでしょうが、大抵の場合そこまで権限がついてないもののほうが多いと思います。ということで、攻撃者が次の攻撃につなげるために行いたいのが権限昇格です。
GitLab RedTeamのChris Moberly氏が、GCPで初期アクセス後、攻撃者が行うであろう、情報列挙、権限昇格、侵害の目的達成の概説をブログで紹介しています。
Tutorial on privilege escalation and post exploitation tactics in Google Cloud Platform environments | GitLab
https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/
権限昇格とは
簡単に権限昇格について説明すると、低い権限しか付与されていないアカウントにおいて、付与されてる権限の悪用やシステムの脆弱性を悪用し、他のアカウントの認証情報を取得したり、自分に高位の権限を付与したりすることを指します。
GCPの場合、アカウントに割り当てられているロールに割り当てられている権限、を悪用することになります。
付与されている権限の確認方法
GCPのアカウントにどのような権限が割り当てらているのかは、自分のロールを確認し、そのロールにどのような権限が割り当てられているのかを確認します。
$ gcloud projects get-iam-policy <PROJECT_ID>
$ gcloud iam roles describe <ROLE_NAME>
ただ、この確認を行うには、projectのresourcemanagerやiam関連を閲覧する権限が必要です。
これらの権限がないアカウントの場合、それぞれのAPIに対して利用可能な権限のテストを行う必要があります。
権限のテスト | Cloud IAM のドキュメント | Google Cloud
権限昇格手法と悪用可能な権限
ではどの権限が付与されていたら、権限昇格される恐れがあるか(先人たちの記事を)を紹介します。
この手のセキュリティ情報の公開で有名な、Rhino Security Labsが、Githubにて悪用可能な権限の一覧を公開しています。
https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation
それぞれの手法について、細かく検証したレポートがブログで公開されているので参考になります。
Cloud Build系
GCP Penetration Testing Working-As-Intended: RCE to IAM Privilege Escalation in GCP Cloud Build
https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/
# 権限
cloudbuild.builds.create
IAM系
Privilege Escalation in Google Cloud Platform – Part 1 (IAM)
https://rhinosecuritylabs.com/gcp/privilege-escalation-google-cloud-platform-part-1/
# 権限
deploymentmanager.deployments.create
iam.roles.update
iam.serviceAccounts.getAccessToken
iam.serviceAccountKeys.create
iam.serviceAccounts.implicitDelegation
iam.serviceAccounts.signBlob
iam.serviceAccounts.signJwt
cloudfunctions.functions.create
cloudfunctions.functions.update
compute.instances.create
run.services.create
cloudscheduler.jobs.create
非IAM系
Privilege Escalation in Google Cloud Platform – Part 2 (Non-IAM)
https://rhinosecuritylabs.com/cloud-security/privilege-escalation-google-cloud-platform-part-2/
# 権限
orgpolicy.policy.set
storage.hmacKeys.create
serviceusage.apiKeys.create
serviceusage.apiKeys.list
Cloud Storage系
Google Cloud Platform (GCP) Bucket Enumeration and Privilege Escalation
https://rhinosecuritylabs.com/gcp/google-cloud-platform-gcp-bucket-enumeration/
おまけ:GKE系
GKE Kubelet TLS Bootstrap Privilege Escalation
https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/
権限昇格スキャナー
これらの権限がついているアカウントを列挙できるスキャナーも公開されています。
https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation/tree/master/PrivEscScanner
使い方は、簡単です。
# アクセストークンの取得
$ gcloud auth print-access-token
# 権限一覧JSONの取得(アクセストークンは上記で取得したものを入力)
$ python enumerate_member_permissions.py --project-id <PROJECT_ID>
# 上記JSONと同じフォルダ内で実行
$ python check_for_privesc.py
まとめ
今回は、悪用されうる権限とその権限を悪用した権限昇格の手法を公開しているサイトを紹介しました。
また、これらの権限が付与されているかどうかのスキャナーの利用方法についてお伝えしました。すでにシステムが稼働していて権限を急には外せなかったりといった場合もあると思うので、どのアカウントにおいて権限昇格の可能性があるのか確認するという意味で、ご自分の環境でもチェックしてみておくといいと思います。
また、この中の手法の1つを実際に検証してみましたので、次回はそれについて書ければと思います。
参考文献
Blog - Rhino Security Labs
https://rhinosecuritylabs.com/blog/?category=gcp
Discussion