Files
hacktricks-cloud/src/pentesting-cloud/azure-security/README.md

14 KiB
Raw Blame History

Azure Pentesting

{{#include ../../banners/hacktricks-training.md}}

基本情報

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

{{#ref}} az-basic-information/ {{#endref}}

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

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

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

外部列挙と初期アクセス

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

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

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

{{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}}

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

  • 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サービスの誤設定を見つけて、足がかりを得ることができます:

{{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}}

Note

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

Azure & Entra IDツール

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

{{#ref}} az-enumeration-tools.md {{#endref}}

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

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

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

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

確認してください:

{{#ref}} az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}}

Whoami

Caution

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

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

{{#tabs }} {{#tab name="az cli" }}

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

{{#endtab }}

{{#tab name="Az" }}

# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup

{{#endtab }}

{{#tab name="Mg" }}

#Get the current session
Get-MgContext

{{#endtab }}

{{#tab name="AzureAD" }}

#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail

{{#endtab }} {{#endtabs }}

Entra ID 列挙と特権昇格

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

{{#ref}} az-services/az-azuread.md {{#endref}}

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

{{#ref}} az-enumeration-tools.md#automated-post-exploitation-tools {{#endref}}

Azure 列挙

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

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

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

Tip

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

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

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

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

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

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

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

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**の権限も必要です:
az role assignment list --assignee "<email>" --all --output table

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

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を直接呼び出します。

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サービスとそれらを列挙する方法に関する情報を見つけることができます:

{{#ref}} az-services/ {{#endref}}

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

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

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

{{#ref}} az-privilege-escalation/ {{#endref}}

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

{{#ref}} az-post-exploitation/ {{#endref}}

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

{{#ref}} az-persistence/ {{#endref}}

{{#include ../../banners/hacktricks-training.md}}