通过AzureHound分析Microsoft Entra ID安全(二)之采集导出 Azure AD数据
AzureHound支持通过“用户名/密码组合”“JWT(JSON Web Token)”“刷新令牌”“服务主体密钥”或“服务主体证书”等多种认证方式来采集Microsoft Entra ID(Azure AD)数据,我们可在实际场景中选择对应的认证方式来采集数据,如果当前已获取到权限的租户开启配置了MFA多因素验证或者其他无密码身份验证访问策略,我们则无法使用已获取的用户名密码与AzureHound进行身份验证,在这种情况下,我们可在Powershell命令行中执行如下命令调用AzureAPI来获取租户的刷新令牌,并将刷新令牌传递给AzureHound来间接完成身份认证。
1.手动执行如下powershell脚本,来执行Azure AD设备代码流并生成刷新令牌,执行结果如下图所示。
$body = @{
"client_id" = "1950a258-227b-4e31-a9cf-717495945fc2" # az powershell client ID
"resource" = "https://graph.microsoft.com" # Microsoft Graph API
}
$UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
$Headers=@{}
$Headers["User-Agent"] = $UserAgent
$authResponse = Invoke-RestMethod `
-UseBasicParsing `
-Method Post `
-Uri "https://login.microsoftonline.com/common/oauth2/devicecode?api-version=1.0" `
-Headers $Headers `
-Body $body
$authResponse
2.随后使用浏览器访问 https://microsoft.com/devicelogin地址,如下图所示,输入上图中所生成的“user_code"设备代码,点击“下一步”。
3.在此输入我们已经获取到的Azure AD租户登录账号密码,并点击登录,当看到如下图所示的提示信息后,即可证明我们已经在当前Powershell应用程序中进行了身份验证,并允许了设备代码流的请求登录。
4.返回刚才执行powershell脚本的窗口,将如下脚本内容复制到powershell脚本窗口中。该脚本主要的作用是在没有浏览器的情况下,使用设备代码授权流程进行Azure AD身份验证,并通过“设备代码授权”的方式获取访问令牌。在该脚本中,我们首先创建了一个包含身份验证请求参数且名称为“$body”的变量对象。该$body变量对象中包括client_id(Azure AD 中注册的客户端应用程序ID)、grant_type(授权类型,此处设置的参数为"urn:ietf:params:oauth:grant-type:device_code",表示“设备代码授权流程”)和 code(设备代码,此处为上一执行脚本返回的device_code变量值)请求参数。随后,我们使用Invoke-RestMethod Cmdlet向Azure AD发送POST请求,来向请求令牌的URL端点("https://login.microsoftonline.com/Common/oauth2/token?api-version=1.0")请求访问令牌。最后执行“$Tokens”命令来将Invoke-RestMethod调用后的访问请求响应结果打印出当前屏幕中。如下图所示,我们可以看到由Invoke-RestMethod调用后的访问请求响应结果内容,在该访问请求响应结果内容中,其中输出了多种类型的Token(令牌),包括“Access Token”“Refresh Token”和“ID Token”,这三种Token(令牌)。
$body=@{
"client_id" = "1950a258-227b-4e31-a9cf-717495945fc2"
"grant_type" = "urn:ietf:params:oauth:grant-type:device_code"
"code" = $authResponse.device_code
}
$Tokens = Invoke-RestMethod `
-UseBasicParsing `
-Method Post `
-Uri "https://login.microsoftonline.com/Common/oauth2/token?api-version=1.0" `
-Headers $Headers `
-Body $body
$Tokens
由Invoke-RestMethod调用出的访问请求响应结果内容
5.随后,执行如下命令,使AzureHound通过上述生成的指定Refresh Token来进行身份验证,列出目标Azure AD租户中所有资源,并最终将结果保存为JSON格式的文件。该命令中的“-r”参数选项指定“Azure AD Refresh Token”值;“-list”参数选项指定AzureHound执行操作,在这里表示列出目标Azure AD租户中所有资源;“-tenand”参数指定要查询的Azure AD租户,即目标租户主要域;“-o”参数选项指定输出结果的文件名和格式,在本命令中用于将结果保存到名为output.json文件中。命令执行结果如下图所示。
azurehound.exe -r "0.AUoAXIJzmsjHR0yXI8bXoT_jtViiUBl7IjFOqc9xdJWUX8KJAEI.AgABAAEAAADnfolhJpSnRYB1SVj-Hgd8AgDs_wUA9P-hHbQYmmwUvZMfPpLCcHKaU4gBgOnaqw8SinbdkQja785idweM_95tP73ZM_nYSnZgxTCC4brtcstMFMmH3yrxPKrG3q-VCOfFHvtAJAKiV19wUlmFaZFhQ3qlofR-Bc1JUy7Co2KpKyu0E69m8Scrn0L9gye5mVgX30ZE7ltFQ2Rkl4O5zRTIGEMrX-D0p9XCLKr32oR_pty3rL25OKe96xcCBmqXLiAhK-jplM59WnLwq7c4yZvvbRzRq4LxFR9gvrXyxWC36WAolDedRUQ8BNaib2OgHFoaetaIOdpLloB07K_1__N3emP-4aVh399uuaZ-A2oCssUvdJB25PdGiL7YKKdvJnQVId3S4WOoNwQu9ns4UABV9qOthcypO5KQ_EyUuLE_Htj_t3vat4FlOShE50X8mKyH1ZFBJffutG8PIwqVKbighbFb5fL6Zv4KZvQ1Vwjf_-XtTa7jXmmsR68ffnoBRQOlNjmqnz8N3xjobdP_IxZ6kCjPjUwL6UQ9NTiVKEJyBKnZ1K33NbY4d0TgG8LXAsOkVG6kPV0B31wdJaahRhxO9Z9Ip6fD7x4FQWyNUbHx1NnwVE62lSbLbx8-ls2Ka6W4BcoguPKsxcNus1LCWadDfS_mkfm41InSKRDe_E2gtOAaRpj47IpeD8lKhRTPI721Idslg_O8uKKEtUDf8599zo8hDKmaZ12xEWKgOyKjksTsQYI" list --tenant "9a73825c-c7c8-4c47-9723-c6d7a13fe3b5" -o output.json