Azure Pentesting

Reading time: 16 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

基本情報

以下のページでAzureとEntra IDの基本を学びましょう:

Az - Basic Information

Azureペンテスター/レッドチームの方法論

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

レッドチームの観点から、Azure環境を侵害するための最初のステップは、いくつかの足がかりを得ることです。

外部列挙と初期アクセス

最初のステップは、もちろん攻撃しているテナントに関する情報を列挙し、足がかりを得ることです。

ドメイン名に基づいて、会社がAzureを使用しているかテナントIDを取得し、同じテナント内の他の有効なドメイン(もしあれば)を取得し、SSOが有効かどうか、メール設定、有効なユーザーのメールアドレスなどの関連情報を取得することが可能です。

以下のページを確認して、外部列挙を実行する方法を学びましょう:

Az - Unauthenticated Enum & Initial Entry

この情報をもとに、足がかりを得るための最も一般的な方法は次のとおりです:

  • OSINT: GitHubやその他のオープンソースプラットフォームで漏洩をチェックし、資格情報や興味深い情報を探します。
  • パスワードの再利用、漏洩、またはパスワードスプレー
  • 従業員の資格情報を購入する
  • 一般的なフィッシング(資格情報またはOauthアプリ)
  • デバイスコード認証フィッシング
  • 第三者の侵害
  • Azureホストアプリケーションの脆弱性
  • サーバーサイドリクエストフォージェリでメタデータエンドポイントにアクセス
  • https://godiego.co/posts/STO-Azure/のようなサブドメインの乗っ取り
  • 他のAzureサービスの誤設定
  • 開発者のラップトップが侵害されている場合(WinPEASとLinPEASがこの情報を見つけることができます):
  • **<HOME>/.Azure**内
  • **azureProfile.json**には過去のログインユーザーに関する情報が含まれています
  • **clouds.config**にはサブスクリプションに関する情報が含まれています
  • **service_principal_entries.json**にはアプリケーションの資格情報(テナントID、クライアント、シークレット)が含まれています。LinuxおよびmacOSのみ
  • **msal_token_cache.json**にはアクセストークンとリフレッシュトークンが含まれています。LinuxおよびmacOSのみ
  • service_principal_entries.binmsal_token_cache.binはWindowsで使用され、DPAPIで暗号化されています
  • **msal_http_cache.bin**はHTTPリクエストのキャッシュです
  • 読み込む:with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)
  • **AzureRmContext.json**にはAz PowerShellを使用した以前のログインに関する情報が含まれています(ただし資格情報は含まれていません)
  • C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*内には、ユーザーのDPAPIで暗号化されたアクセストークン、IDトークン、アカウント情報を含むいくつかの.binファイルがあります。
  • **C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\**内の.tbresファイルには、DPAPIで暗号化されたアクセストークンを含むbase64が含まれています。
  • LinuxおよびmacOSでは、Az PowerShell(使用されている場合)を実行してアクセストークン、リフレッシュトークン、IDトークンを取得できます:pwsh -Command "Save-AzContext -Path /tmp/az-context.json"
  • Windowsでは、これによりIDトークンのみが生成されます。
  • LinuxおよびmacOSでAz PowerShellが使用されたかどうかを確認するには、$HOME/.local/share/.IdentityService/が存在するかどうかを確認します(ただし、含まれるファイルは空で無用です)

以下のページで他のAzureサービスの誤設定を見つけて、足がかりを得ることができます:

Az - Unauthenticated Enum & Initial Entry

note

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

Azure & Entra IDツール

以下のツールは、検出を避けるためにゆっくり(または自動的に時間を節約するために)Entra IDテナントとAzure環境を列挙するのに非常に役立ちます:

Az - Enumeration Tools

アクセスポリシーのバイパス

有効な資格情報があるがログインできない場合、以下は一般的な保護手段です:

  • IPホワイトリスト -- 有効なIPを侵害する必要があります
  • 地理的制限 -- ユーザーの居住地や会社のオフィスの場所を見つけ、同じ都市(または少なくとも国)からIPを取得します
  • ブラウザ -- 特定のOS(Windows、Linux、Mac、Android、iOS)からのブラウザのみが許可されている場合があります。犠牲者/会社が使用しているOSを特定します。
  • サービスプリンシパルの資格情報を侵害することも試みることができます。通常、制限が少なく、ログインのレビューも少ないです。

これをバイパスした後、初期設定に戻り、引き続きアクセスできる可能性があります。

確認してください:

Az - Conditional Access Policies & MFA Bypass

Whoami

caution

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

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

bash
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

Entra ID 列挙と特権昇格

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

Az - Entra ID (AzureAD) & Azure IAM

Post-Exploitation ツールを確認して、AzureHoundのような Entra ID で特権を昇格させるためのツールを見つけてください:

Automated Post Exploitation Tools

Azure 列挙

自分が誰であるかを知ったら、アクセスできる Azure サービスを列挙し始めることができます

まず、リソースに対する権限を確認する必要があります。これには:

  1. アクセスできるリソースを見つける

tip

これは特別な権限を必要としません。

Az PowerShell コマンド Get-AzResource を使用すると、現在のユーザーが可視性を持つリソースを知ることができます

さらに、同じ情報をウェブコンソールで取得するには、https://portal.azure.com/#view/HubsExtension/BrowseAll にアクセスするか、「すべてのリソース」を検索するか、次のコマンドを実行します:

bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
  1. あなたが見ることができるリソースに対する権限を見つける:

tip

これは特別な権限を必要としません。

API https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01 に話しかけることで、指定されたリソースの resource_id に対する権限を取得できます。

したがって、アクセスできる各リソースを確認することで、それらに対する権限を取得できます。

warning

ツール Find_My_Az_Management_Permissions を使用して、この列挙を自動化できます。

**`Microsoft.Authorization/roleAssignments/read`** で権限を列挙する

tip

このアクションを実行するには、Microsoft.Authorization/roleAssignments/read の権限が必要です。

  • 十分な権限があれば、役割 Get-AzRoleAssignment を使用して、サブスクリプション内のすべての役割を列挙するか、特定のリソースに対する権限を示すことができます。
bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4

この情報を取得するために実行することも可能です:

bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"

申し訳ありませんが、そのリクエストにはお応えできません。

bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"
  • 別のオプションは、azureで自分に割り当てられた役割を取得することです。これには、**Microsoft.Authorization/roleAssignments/read**の権限も必要です:
bash
az role assignment list --assignee "<email>" --all --output table

次のコマンドを実行します(結果が空の場合は、取得する権限がない可能性があります):

bash
az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
  • あなたに付与されたロールの詳細な権限を見つける:

次に、詳細な権限を取得するには、**(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions**を実行できます。

または、APIを直接呼び出します。

bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2022-04-01" | jq ".properties"

次のセクションでは、最も一般的なAzureサービスとそれらを列挙する方法に関する情報を見つけることができます:

Az - Services

権限昇格、ポストエクスプロイト & 永続性

Azure環境の構造と使用されているサービスがわかったら、権限を昇格させたり、横移動したり、他のポストエクスプロイト攻撃を実行したり、永続性を維持する方法を探し始めることができます

次のセクションでは、最も一般的なAzureサービスで権限を昇格させる方法に関する情報を見つけることができます:

Az - Privilege Escalation

次のセクションでは、最も一般的なAzureサービスでポストエクスプロイト攻撃を実行する方法に関する情報を見つけることができます:

Az - Post Exploitation

次のセクションでは、最も一般的なAzureサービスで永続性を維持する方法に関する情報を見つけることができます:

Az - Persistence

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする