Azure Pentesting

Support HackTricks

AZUREメソドロジーをまだ構築中です

基本情報

Az - Basic Information

Azure Pentester/Red Team Methodology

AZURE環境を監査するためには、どのサービスが使用されているか、何が公開されているか、誰が何にアクセスできるか、内部のAzureサービスと外部サービスがどのように接続されているかを知ることが非常に重要です。

Red Teamの観点から見ると、Azure環境を侵害する最初のステップは、Azure ADの資格情報を取得することです。以下にその方法のいくつかを示します:

  • github(または類似のもの)でのリーク - OSINT

  • ソーシャルエンジニアリング

  • パスワードの再利用(パスワードリーク)

  • Azureホストアプリケーションの脆弱性

  • Server Side Request Forgery メタデータエンドポイントへのアクセス

  • ローカルファイル読み取り

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • az cli 2.30以前の**accessTokens.json**ファイル - 2022年1月 - クリアテキストでアクセストークンを保存

  • azureProfile.jsonファイルにはログインユーザーの情報が含まれています。

  • **az logout**はトークンを削除します。

  • 古いバージョンの**Az PowerShellTokenCache.datクリアテキストアクセストークンを保存していました。また、AzureRmContext.jsonクリアテキストServicePrincipalSecretを保存します。Save-AzContextコマンドレットを使用してトークン**を保存できます。 Disconnect-AzAccountを使用して削除します。

  • 第三者の侵害

  • 内部従業員

  • 一般的なフィッシング(資格情報またはOauthアプリ)

攻撃しているAzureテナント内のユーザーを侵害していない場合でも、そこからいくつかの情報を収集できます:

Az - Unauthenticated Enum & Initial Entry

資格情報を取得した後、それらの資格情報が誰に属しているか、および何にアクセスできるかを知る必要があるため、基本的な列挙を行う必要があります:

基本的な列挙

列挙の最も騒がしい部分はログインであり、列挙自体ではありません。

SSRF

Azure内のマシンでSSRFを見つけた場合は、このページでトリックを確認してください:

ログイン条件の回避

有効な資格情報を持っているがログインできない場合、以下のような一般的な保護が行われている可能性があります:

  • IPホワイトリスト -- 有効なIPを侵害する必要があります

  • 地理的制限 -- ユーザーが住んでいる場所や会社のオフィスがある場所を見つけ、その都市(または少なくとも国)のIPを取得します

  • ブラウザ -- 特定のOS(Windows、Linux、Mac、Android、iOS)からのブラウザのみが許可されている可能性があります。被害者/会社が使用しているOSを見つけます。

  • Service Principalの資格情報を侵害することも試みることができます。通常、制限が少なく、ログインがあまり監視されていません。

回避した後、元の設定に戻ることができ、引き続きアクセスできます。

サブドメインの乗っ取り

Whoami

Az - AzureADセクションでaz cli、AzureAD、Az PowerShellのインストール方法を学びます。

最初に知るべきことの一つは、自分が誰であるか(どの環境にいるか)です:

az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default

Azureを列挙するための最も重要なコマンドの一つは、Az PowerShellの**Get-AzResource**です。これにより、現在のユーザーが可視化できるリソースを知ることができます

同じ情報はウェブコンソールでも取得できます。https://portal.azure.com/#view/HubsExtension/BrowseAllにアクセスするか、「All resources」を検索してください。

AzureAD Enumeration

デフォルトでは、どのユーザーもユーザー、グループ、ロール、サービスプリンシパルなどを列挙するのに十分な権限を持っているはずですデフォルトのAzureAD権限を確認してください)。 ガイドはこちらにあります:

Az - AzureAD (AAD)

資格情報についての情報を得た(そして赤チームであれば検出されていないことを願っています)ので、次は環境で使用されているサービスを特定する時です。 次のセクションでは、一般的なサービスを列挙する方法をいくつか確認できます。

Service Principal and Access Policy

Azureサービスは、システムアイデンティティ(サービス自体の)を持つか、ユーザー割り当てのマネージドアイデンティティを使用することができます。このアイデンティティは、例えばKeyVaultからシークレットを読み取るためのアクセスポリシーを持つことができます。これらのアクセスポリシーは制限されるべきですが(最小特権の原則)、必要以上の権限を持っている可能性があります。通常、App ServiceはKeyVaultを使用してシークレットや証明書を取得します。

したがって、これらのアイデンティティを調査することは有用です。

App Service SCM

App Service 'コンテナ'にログインするためのKuduコンソール。

Webshell

portal.azure.comを使用してシェルを選択するか、shell.azure.comを使用してbashまたはpowershellを使用します。このシェルの「ディスク」はストレージアカウントにイメージファイルとして保存されます。

Azure DevOps

Azure DevOpsはAzureとは別物です。リポジトリ、パイプライン(yamlまたはリリース)、ボード、ウィキなどがあります。変数グループは変数値やシークレットを保存するために使用されます。

Automated Recon Tools

cd ROADTools
pipenv shell
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather
roadrecon gui

Import-Module monkey365
Get-Help Invoke-Monkey365
Get-Help Invoke-Monkey365 -Detailed
Invoke-Monkey365 -IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction Continue
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML

# Start Backend
cd stormspotter\backend\
pipenv shell
python ssbackend.pyz

# Start Front-end
cd stormspotter\frontend\dist\spa\
quasar.cmd serve -p 9091 --history

# Run Stormcollector
cd stormspotter\stormcollector\
pipenv shell
az login -u test@corp.onmicrosoft.com -p Welcome2022!
python stormspotter\stormcollector\sscollector.pyz cli
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)

# You need to use the Az PowerShell and Azure AD modules:
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
Connect-AzAccount -Credential $creds

Import-Module AzureAD\AzureAD.psd1
Connect-AzureAD -Credential $creds

# Launch AzureHound
. AzureHound\AzureHound.ps1
Invoke-AzureHound -Verbose

# Simple queries
## All Azure Users
MATCH (n:AZUser) return n.name
## All Azure Applications
MATCH (n:AZApp) return n.objectid
## All Azure Devices
MATCH (n:AZDevice) return n.name
## All Azure Groups
MATCH (n:AZGroup) return n.name
## All Azure Key Vaults
MATCH (n:AZKeyVault) return n.name
## All Azure Resource Groups
MATCH (n:AZResourceGroup) return n.name
## All Azure Service Principals
MATCH (n:AZServicePrincipal) return n.objectid
## All Azure Virtual Machines
MATCH (n:AZVM) return n.name
## All Principals with the ‘Contributor’ role
MATCH p = (n)-[r:AZContributor]->(g) RETURN p

# Advanced queries
## Get Global Admins
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
## Owners of Azure Groups
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
## All Azure Users and their Groups
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
## Privileged Service Principals
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
## Owners of Azure Applications
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
## Paths to VMs
MATCH p = (n)-[r]->(g: AZVM) RETURN p
## Paths to KeyVault
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
## Paths to Azure Resource Group
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
## On-Prem users with edges to Azure
MATCH  p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
## All Azure AD Groups that are synchronized with On-Premise AD
MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n

# You should use an account with at least read-permission on the assets you want to access
git clone https://github.com/nccgroup/azucar.git
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File

PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000

# resolve the TenantID for an specific username
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com

Import-Module .\MicroBurst.psm1
Import-Module .\Get-AzureDomainInfo.ps1
Get-AzureDomainInfo -folder MicroBurst -Verbose

Connect-AzAccount
ipmo C:\Path\To\Powerzure.psd1
Get-AzureTarget

# Reader
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails

# Contributor
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
$ Execute-MSBuild -VM Win10Test  -ResourceGroup Test-RG -File "build.xml"
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk

# Owner
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest

# Administrator
$ Create-Backdoor, Execute-Backdoor
HackTricksをサポートする

Last updated