近年來,我們看到Microsoft Azure服務在云服務市場中占據了更大的市場份額。雖然并沒有看到AWS的應用,但我們遇到了更多使用Microsoft Azure服務進行運維的客戶端。如果一切都正確的配置,這將是極好的事情,但是完全安全的環境是非常罕見的(這就是我們進行安全測試的原因)。鑒于Azure使用量的增加,我們希望能夠深入了解如何將標準的Azure測試任務自動化,包括公開的可用文件的枚舉。在本博文中,我們將介紹不同類型的Azure文件存儲以及我們該如何枚舉和訪問公開可用的“Blob”文件。
存儲帳戶
我們在Azure環境中發現一個用戶可以通過存儲帳戶公開的暴露文件。這些問題非常類似于公共S3存儲桶的問題(這里有一篇很好的入門文章)。“存儲帳戶” 是Microsoft在Azure中處理數據存儲的方式。在core.windows.net域中為每個存儲帳戶分配了唯一的子域。
例如,如果我創建了netspiazure存儲帳戶,系統將分配netspiazure.core.windows.net這個域名給該帳戶。

該子域名結構還可以擴展到存儲帳戶中的不同文件類型:
· Blob – netspiazure.blob.core.windows.net
· 文件服務 – netspiazure.file.core.windows.net
· 數據表 – netspiazure.table.core.windows.net
· 隊列 – netspiazure.queue.core.windows.net
Blob文件
在本文中,我們將專注于“Blob”這種文件類型的枚舉,當然其他的數據類型也很有趣。Blob是微軟的一種非結構化的數據存儲對象。最常見的是,我們會看到這種數據對象用于提供靜態公共數據,但我們發現blob會用于存儲敏感信息(配置文件,數據庫備份,憑據)。我們可以利用Google搜索Azure中的“blob.core.windows.net”子域,搜索到大約120萬個PDF,我認為這里有相當不錯的攻擊面。

權限
blob本身存儲在“Containers”中,基本上是一些文件夾。容器會分配給它們相應的訪問策略,這些策略決定了文件的公共訪問級別。

如果容器具有“容器”公開訪問策略,則匿名用戶可以列出并讀取容器中的任何文件。“Blob”公共訪問策略仍允許匿名用戶讀取文件,但無法列出容器文件列表。“Blob”權限還會阻止攻擊者通過 Azure Blob Service Rest API 對容器名稱進行基本的確認。
自動化
考慮到我們遇到的Azure環境的數量,我想將我們的枚舉公開blob文件的過程自動化。我比較偏愛PowerShell,但我寫的這個腳本可能可以被移植到其他語言中。可以在NetSPI的GitHub上找到我寫的腳本代碼 – https://github.com/NetSPI/MicroBurst腳本的核心內容是對blob.core.windows.net子域進行DNS查找,來枚舉有效的存儲帳戶,然后使用 Azure Blob Service REST API 暴力猜解容器名稱。此外,可以在該工具中使用 Bing Search API 來查找已公開的編入索引的其他存儲帳戶和容器。識別出有效的容器名稱后,我們再次使用Azure Blob API查看容器是否允許我們通過“Container”公共訪問策略列出文件列表。為了得到有效的存儲帳戶名,我們可以在基本的名稱(netspi)前面或后面拼接常見的排列詞(dev,test,qa等)來進行暴力猜解,這些排列詞保存在一個字典文件中。這個腳本的編寫思路以及部分排列詞的列表來自于AWS S3存儲桶的類似工具 – inSp3ctor
Invoke-EnumerateAzureBlobs 的用法
該腳本有五個參數:
· Base – 要在(netspi)上運行排列的基本名稱
· Permutations – 包含與Base參數一起使用的字典文件,用于查找存儲帳戶(netspidev,testnetspi等)
· Folders – 指定包含你想要暴力猜解所使用的潛在文件夾名稱的文件(文件,文檔等)
· BingAPIKey – Bing API用于查找其他公開文件的密鑰
· OutputFile – 指定將輸出寫入的文件
示例輸出:
PS C:\> Invoke-EnumerateAzureBlobs -Base secure -BingAPIKey 12345678901234567899876543210123
Found Storage Account - secure.blob.core.windows.net
Found Storage Account - testsecure.blob.core.windows.net
Found Storage Account - securetest.blob.core.windows.net
Found Storage Account - securedata.blob.core.windows.net
Found Storage Account - securefiles.blob.core.windows.net
Found Storage Account - securefilestorage.blob.core.windows.net
Found Storage Account - securestorageaccount.blob.core.windows.net
Found Storage Account - securesql.blob.core.windows.net
Found Storage Account - hrsecure.blob.core.windows.net
Found Storage Account - secureit.blob.core.windows.net
Found Storage Account - secureimages.blob.core.windows.net
Found Storage Account - securestorage.blob.core.windows.net
Bing Found Storage Account - notrealstorage.blob.core.windows.net
Found Container - hrsecure.blob.core.windows.net/NETSPItest
Public File Available: https://hrsecure.blob.core.windows.net/NETSPItest/SuperSecretFile.txt
Public File Available: https://hrsecure.blob.core.windows.net/NETSPItest/TaxReturn.pdfFound Container - secureimages.blob.core.windows.net/NETSPItest123
Empty Public Container Available: https://secureimages.blob.core.windows.net/NETSPItest123?restype=container&comp=list
默認情況下,“Permutations”和“Folders”參數都設置為腳本附帶的permutations.txt文件。你可以通過向該文件添加任何客戶端或環境特定術語來增加查找到文件的機會。添加Bing API密鑰還有助于查找包含基本單詞的其他存儲帳戶。如果你尚未設置Bing API密鑰,請導航至 Azure門戶 的“認知服務”部分,并為你的帳戶創建新的“Bing Search v7”實例。有一個免費的定價等級,每月最多可以撥打3,000個電話,這足夠用了。如果你使用Bing API密鑰,系統將提示你使用out-gridview選擇窗口來選擇你要查看的任何存儲帳戶。有一些公開索引的Azure存儲帳戶似乎在大多數公司名稱上都出現過。這些帳戶似乎是為多家公司編制索引文檔或數據,因此它們往往會出現在Bing的搜索結果中。其中一些帳戶也有公開的文件列表,因此可能會為你提供一個你并不關心的大量公開文件。到目前為止我在用我編寫的腳本時運氣都不錯,希望你也是這樣。如果你對腳本有任何問題,請隨時在GitHub頁面上發表評論或提交請求。
|