通過普通使用者訪問Azure AD管理門戶洩露的活動目錄資訊
為了應對日益複雜的安全問題,微軟採用了各種技術、服務、整合、應用程式和配置。雖然這樣做的效果很好,但與此同時,卻產生了另外一個問題,即管理越來越複雜和精細,而管理上稍有不慎,就有可能發生各種連鎖後果。雖然將所有內容都轉移到雲端,可以在可擴充套件性、功能性甚至效率方面降低這種管理的複雜性,但卻可能出現其他的問題。為此,在過去的一年裡,有研究者就以微軟作為他們的雲提供商,來測試其中可能出現的漏洞。
事實上,測試者讀的關於微軟產品和服務的說明書越多,測試者就越覺得失落。雖然在過去的一年裡,測試者能夠靈活運用這些技術,預防各種攻擊,但其中的一些概念卻還是令他們感到疑惑。比如,預設配置是什麼?是預設提供的嗎?這種配置是同步的嗎?當測試者私下分享了其中的一些技巧後,一個新問題就會隨之而來。
微軟的安全環境的變化
運行了多年的Microsoft Active Directory和Exchange on-prem,可以快速給Office客戶提供一些內部應用程式的webmail門戶、Sharepoint和SSO的訪問許可權。在此過程中,如果企業決定將業務遷移到office365,則再正常不過了! 而企業的所有使用者都可以使用他們的網路憑據進行身份驗證。此時,微軟勢必會提供數量驚人的整合,但是企業怎麼知道他們是否正確的管理了一切?
各種複雜情況的出現
管理Microsoft AD,可以利用Azure AD,而管理郵件,則有Exchange on-prem。如果你想要完整的Microsoft Office套件,用office365就可以了。由於Office 365是付費的,企業還可以獲得Skype和OneDrive等服務。雖然SMS令牌是預設的傳遞機制,但出於某種原因,企業的使用者仍然可以使用Outlook進行身份驗證,而不需要 Azure MFA多重身份驗證。
而在上述的例子中,就會出現了許多問題,比如在防禦或應對多種不同的攻擊方面,包括遠端轉儲活動目錄、繞過甚至劫持使用者的多因素身份驗證,企業幾乎無任何招架之力。
瞭解誰是組織部門內的人員通常是在通過第三方服務(如LinkedIn或其他OSINT技術)參與的偵察階段完成的。對於攻擊者,他們要做的就是了解組織的許多深度細節,比如企業內網配置了哪些組以及這些組的成員。這對於成功選擇攻擊的計算機目標並根據使用者的訪問目標定位使用者至關重要。但是,如果攻擊者不在內部網路中,就需要費很大的力氣確定目標使用者?那如果組織的詳細資訊託管在雲中,且攻擊者根無法訪問內部網路,那是不是就安全了呢?
對於微軟來說,如果你利用Active Directory (on-prem或Azure)使用任何微軟的雲服務(Office 365, Exchange Online等),攻擊者只需利用一個登陸憑證,就可以通過Azure AD盜取你的整個Active Directory結構。步驟如下:
1. 對企業的Webmail門戶進行身份驗證(即ofollow,noindex">https://webmail.domain.com/ );
2.將瀏覽器URL更改為:https://azure.microsoft.com/ ;
3.從活動會話中選擇目標帳戶;
4.選擇Azure Active Directory;
如果測試者們能夠匯出所有使用者和組,則他們就會有一個非常完整的企業員工表單,以及他們所屬的組。測試者們還可以瞭解到VPN、域管理、資料庫訪問、雲伺服器或財務資料登入的具體組。Azure AD的另一個特點是它可以儲存每個使用者的裝置資訊,這樣測試者們就可以看到他們是否在使用Mac、Windows或iPhone,以及具體的版本資訊,比如Windows 10.0.16299.0。除此之外,測試者們還可以瞭解到所有業務應用程式及其終端、服務名稱、其他域名,甚至使用者可以訪問的虛擬資源(即虛擬機器、網路、資料庫)。
對Azure門戶進行身份驗證的另一個漏洞是,攻擊者可以建立一個後門,即 “Guest” 帳戶。步驟如下
1.點選 “Azure Active Directory”;
2.在“管理”一欄下單擊“使用者”
3.點選“New Guest User” 邀請自己;
根據裝置的配置,攻擊者可能會同步到內部網路,也可能不會同步到內部網路。事實上,預設情況下,建立“Guest” 帳戶時會啟用同步過程,並允許“Guest” 帳戶通過身份驗證,在內部註冊裝置和VPN。這是一個重要的配置元件,因為它可能會造成非常大的漏洞。
Azure的資訊洩露過程
通過web瀏覽器訪問Azure門戶時,測試者是沒有找到直接匯出資訊的方法。於是測試者開始編寫一個可以進行身份驗證的工具,它會以一種自動化的方式進行驗證,但這個過程還是很麻煩。以下是測試者利用的一些方法:
Azure CLI (AZ CLI)
作為一個Linux使用者,測試者很自然地被AZ CLI所吸引。部分原因是因為測試者會將盡可能多的資料匯入到單行程式中,另一部分原因是因為測試者在.NET中編寫的工具。而使用AZ CLI是一種針對Azure的OAUTH進行身份驗證的快速簡便方法,同時還可以快速匯出原始資料。在本文中,測試者們將重點討論這個解決方案。
Azure Powershell
隨著強大的Powershell工具,如Powershell Empire和MailSniper的興起,測試者很驚訝Azure Powershell還沒有成為類似的工具。有大量的Active Directory cmdlet可供互動,如果要使用Azure Powershell,只需安裝Azure RM Powershell,然後執行:Connect-AzureRmAccount
Azure .NET
讓Azure .NET庫與Active Directory互動是非常有創意的,不過測試者還沒有深入研究這些庫,但從更高層次來看,這些庫似乎是Active Directory Graph API的某種包裝器。
正如前面提到的那樣,本文將重點討論如何測試者使用AZ CLI與Azure進行互動。測試前,他們必須首先使用Azure建立一個活動會話。對於使用微軟或谷歌服務的企業來說,攻擊者很少嘗試直接訪問內部網路上的shell。所以,測試者通常會使用一個他們自己編寫的名為CredSniper的工具來獲取網路憑證和多因素令牌,然後在追蹤敏感電子郵件、檔案、訪問資訊和VPN。
只有這樣,測試者們才會假設他們已經以某種方式獲得了有效憑證。
安裝AZ CLI
測試者需要將Microsoft原始碼新增到apt(假設是Linux),安裝Microsoft簽名金鑰,然後安裝Azure CLI。
AZ_REPO=$(lsb_release -cs) echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | sudo tee /etc/apt/sources.list.d/azure-cli.list curl -L https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - sudo apt-get install apt-transport-https sudo apt-get update && sudo apt-get install azure-cli
通過Web會話進行身份驗證
在正確安裝之後,測試者需要使用已經獲得的憑據為Azure建立一個會話。最簡單的方法是在普通瀏覽器中使用ADFS或OWA認證。
az login
這將在本地生成OAUTH令牌,開啟身份驗證頁面的瀏覽器選項卡,讓測試者根據已經通過身份驗證的帳戶選擇一個帳戶。選擇好帳戶後,伺服器將驗證本地OAUTH令牌,除非它們過期或被銷燬,否則測試者不必再次執行此操作。測試者還可以傳遞-use-device-code標誌,該標誌將生成他們提供給https://microsoft.com/devicelogin 的令牌。
轉儲使用者
現在進入測試者最喜歡的部分——轉儲使用者。目前有許多技術可以提取GAL,例如在OWA中使用FindPeople和GetPeopleFilter web服務方法。這些技術對於測試者來說是很好的資源,但是這些技術在提取可用的資料、列舉使用者時需要很長時間,再加上所需的web請求數量很大。所以使用AZ CLI,可以非常輕鬆地提取每個使用者的所有目錄資訊。在下面的示例中,測試者使用JMESPath過濾器 來提取感興趣的資料,除此之外,提取的資料還可以匯出為表格、JSON或TSV格式。
轉儲全部使用者
az ad user list --output=table --query='[].{Created:createdDateTime,UPN:userPrincipalName,Name:displayName,Title:jobTitle,Department:department,Email:mail,UserId:mailNickname,Phone:telephoneNumber,Mobile:mobile,Enabled:accountEnabled}'
轉儲感興趣的使用者
如果你知道目標帳戶的UPN,則可以通過傳入-upn標誌來檢索特定帳戶。如果你想要深入瞭解特定帳戶的Active Directory資訊,那麼這很方便。在下面的示例中,測試者提供的是JSON格式,而不是表格形式。
az ad user list --output=json --query='[].{Created:createdDateTime,UPN:userPrincipalName,Name:displayName,Title:jobTitle,Department:department,Email:mail,UserId:mailNickname,Phone:telephoneNumber,Mobile:mobile,Enabled:accountEnabled}' --upn='<upn>'
轉儲組
測試者利用轉儲組函式,可以瞭解企業如何使用組,來對業務領域、使用者和管理員身份進行管理。AZ CLI提供了一些有用的命令,可以幫助測試者實現這一目的。
轉儲所有組
測試者通常做的第一件事就是匯出所有組,然後才對某些關鍵詞進行grep處理,比如Admin、VPN、Finance、Amazon、Azure、Oracle、VDI、Developer等。雖然還有組的其他元資料可用,但測試者傾向於只獲取名稱和描述。
az ad group list --output=json --query='[].{Group:displayName,Description:description}'
轉儲感興趣的組的使用者
一旦測試者匯出了這些組並挑選了他們感興趣的,接下來就可以轉儲這些組的使用者了,而這些目標將是網路釣魚的主要目標。與流行觀點相反,測試者並不認為公司裡頭銜高的人就有很多訪問許可權,他們認為後端工程師和研發團隊人員,往往擁有最多的訪問許可權,因為他們往往利用外部網路就可以進入內部系統。
az ad group member list --output=json --query='[].{Created:createdDateTime,UPN:userPrincipalName,Name:displayName,Title:jobTitle,Department:department,Email:mail,UserId:mailNickname,Phone:telephoneNumber,Mobile:mobile,Enabled:accountEnabled}' --group='<group name>'
轉儲應用程式和服務
微軟提供的另一個很好的特性是能夠讓使用者註冊使用SSO/ADFS或與其他技術整合的應用程式。許多公司將其用於內部應用程式,對於攻擊者來說,這也是個攻擊突破口,因為與應用程式相關的元資料可以提供更加精細的目標資訊,比如url。
轉儲所有應用程式
az ad app list --output=table --query='[].{Name:displayName,URL:homepage}'
轉儲感興趣的應用程式
在下面的截圖中,你可以看到測試者通過檢查與Azure中註冊應用程式關聯的元資料獲得了Splunk例項的URL。
az ad app list --output=json --identifier-uri='<uri>'
所有服務的負責人
az ad sp list --output=table --query='[].{Name:displayName,Enabled:accountEnabled,URL:homepage,Publisher:publisherName,MetadataURL:samlMetadataUrl}'
具體服務的負責人
az ad sp list --output=table --display-name='<display name>'
使用JMESPath進行高階過濾
在上面的例子中,你可能已經注意到測試者試圖限制返回的資料量。這主要是因為測試者只需獲得需要的東西,而不是一切可見的內容。AZ CLI處理此問題的方法是將-query標誌與JMESPath查詢一起使用,這是用於與JSON互動的標準查詢語言。在將查詢標誌與'show'內建函式結合使用時,測試者確實注意到AZ CLI中的一些錯誤。另一件需要注意的事情是,預設的響應格式是JSON,這意味著如果攻擊者打算使用查詢過濾器,你需要指定正確的區分大小寫的命名規則。因為不同格式的名稱命名規則卻是會有有一點不一致,如果使用表格格式,當JSON該小寫的時候,它可能會變成大寫。
禁用對Azure門戶的訪問
測試者花了一些時間試圖弄清楚什麼該禁用、如何阻止訪問、如何限制、監控什麼,才能起到更好的安全防護。在此,測試者將提供一種禁用Azure Portal訪問使用者的方法。不過這種方法,測試者還沒有親自測試過它的可靠性,也不確定該方法是否也會禁用AZ CLI、Azure RM Powershell和Microsoft Graph API。步驟如下:
1.使用全域性管理員帳戶https://portal.azure.com 登入到Azure;
2.在左側面板上,選擇“Azure Active Directory”;
3.選擇“使用者設定”;
4.選擇“限制對Azure廣告管理門戶的訪問”;
另一種方法是檢視條件訪問策略:https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/overview
總結
現在有很多不同的工具可以測試AWS環境的安全性,甚至是最近出現的用於捕獲SharpCloud等雲憑據的新工具也可以,而云環境似乎是一個經常被忽視的攻擊載體。
目前,測試者已經發佈一個用於與雲環境互動的攻擊框架,名為CloudBurst 。它是一個可插入的框架,使滲透測試者能夠與不同的雲提供商互動,以捕獲、破壞和盜取其中的資料。