谷歌云:云數據庫攻防,可造成數據庫備份公開訪問
0x01 前期偵查
1、訪問憑證泄露
在信息收集階段,通過傳統攻防下的信息收集方式,收集到目標的數據庫賬戶密碼、谷歌云平臺賬戶密碼,access token、服務賬戶憑證等。
2、備份
谷歌云具有數據庫實例導出功能,可以將整個實例或實例中的數據庫導出到Cloud Storage中,其格式可以是csv或者sql。

當該存儲桶公開訪問或泄露了服務賬戶憑證即可造成數據庫泄露。


1、訪問憑證登錄
如果在前期偵查階段收集到了數據庫的賬戶和密碼,則可以通過其直接登錄。或者在前期收集到了高權限的服務賬戶憑證,可以通過之前Compute Engine攻防中的方法去登錄谷歌云控制臺,就可以去操作Cloud SQL了。
2、弱口令
如果谷歌云數據庫存在弱口令,我們可以通過爆破的方式,得到數據庫的賬戶名和密碼,進而直接訪問數據庫。
3、空密碼
在Cloud SQL中,創建mysql數據庫的時候,可以賦予數據庫無root密碼,如果沒有 root 密碼,此實例會允許任何人以完整管理權限進行連接。請設置 root 密碼,以確保只有授權用戶才能取得此類權限。

0x03 執行
1、云廠商命令行工具
使用gcloud來查看實例信息
gcloud sql instances describe 實例名

列出實例上的所有數據庫
gcloud sql databases list --instance=實例名

2、數據庫連接工具
當知道了數據庫的賬戶和密碼后,可以使用第三方數據庫連接工具進行連接嘗試。(谷歌云需要配置已授權網絡才可以進行訪問登錄

3、Cloud SQL代理
Cloud SQL Auth 代理可讓您安全地訪問自己的實例,而無需已獲授權的網絡或配置 SSL。
如需使用 Cloud SQL Auth 代理,必須滿足以下要求:
- 必須啟用 Cloud SQL Admin API。
- 必須向 Cloud SQL Auth 代理提供 Google Cloud 身份驗證憑據。
- 必須向 Cloud SQL Auth 代理提供有效的數據庫用戶帳號和密碼。
- 實例必須具有公共 IPv4 地址,或者配置為使用專用 IP。
- 該公共 IP 地址無需可供任何外部地址訪問(無需添加為已獲授權的網絡地址)。
0x04 權限提升
1、低權限收集到高權限的憑證
當獲取了數據庫較低的權限后,訪問數據庫查找敏感信息,如用戶存儲的高權限賬戶密碼、高權限憑證等信息,然后可以通過收集到的信息就可以登錄控制臺或命令行去操作數據庫。
2、云平臺數據庫漏洞
通過云平臺數據庫自身問題去獲取高權限。
0x05 權限維持
1、添加內置身份驗證的用戶
用戶賬戶可以讓用戶和應用連接到實例,我們可以通過命令行或控制臺去添加自己的用戶賬戶,當前用戶賬戶密碼被改后,可以使用自己新建的賬戶密碼去連接數據庫。

2、修改密碼
當拿到權限后,可以直接更改數據庫實例下的用戶密碼。但實際滲透場景下不建議這么做,容易被發現。
3、添加基于Cloud IAM的用戶賬戶
在通過這種方式添加后,即可以通過自己的谷歌云賬戶去管理數據庫實例,使用 Cloud Console 將新的 IAM 用戶添加到 Cloud SQL 實例時,Cloud SQL 會自動將 Cloud SQL Instance User 角色授予該用戶用于項目中的所有實例和數據庫。系統會自動為用戶添加 IAM 政策綁定。

然后刪除,移除經過 IAM 身份驗證的用戶帳號不會撤消關聯主帳號在 IAM 中的權限。所以刪除后還是有一定的權限。


4、添加IAM級別用戶
通過IAM處添加Cloud SQL Admin的主賬戶權限,可以擁有Cloud SQL資源的完全控制權。


0x06 防御繞過
1、關閉產品通知
在用戶偏好設置中關閉產品通知,當有改動時,將不會以電子郵件的方式通知用戶。

0x07 信息收集
1、服務賬戶信息
在Cloud SQL概覽頁面可以查看該數據庫的服務賬戶。

2、數據庫信息
在Cloud SQL實例頁面可以查看實例的ID、數據庫版本、公共ip地址、存儲空間等信息。

3、用戶信息
在Cloud SQL用戶頁面可以查看內置身份驗證的用戶信息、基于Cloud IAM的主賬戶信息(包括了IAM電子郵件)

0x08 影響
1、數據庫備份可被公開訪問
在公開訪問的存儲桶中存在數據庫備份,造成了數據庫數據泄露。
2、其他影響
當數據庫被攻擊者拿下后,可以獲取數據庫的敏感信息,對數據庫進行惡意操作。
參考資料:
- https://cloud.google.com/sql/docs/mysql/sql-proxy?authuser=1&_ga=2.213776404.-1838959337.1648105721
- https://cloud.google.com/sql/docs/mysql/connect-overview?authuser=1#authentication_options
- https://cloud.google.com/sdk/gcloud/reference/sql/