Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-01-25 14:40:22 +00:00
parent 6c99dfa555
commit fdb65109ea
5 changed files with 318 additions and 223 deletions
@@ -23,10 +23,10 @@ Entra IDは、Microsoftのクラウドベースのアイデンティティおよ
**Microsoft 365統合:**
- Microsoft 365はIAMのためにAzure ADを利用し、複数の「ファーストパーティ」OAuthアプリケーションで構成されています。
- これらのアプリケーションは深く統合されており、相互依存するサービス関係を持っています。
- これらのアプリケーションは深く統合されており、相互依存サービス関係を持っています。
- ユーザーエクスペリエンスを簡素化し、機能を維持するために、Microsoftはこれらのファーストパーティアプリケーションに「暗黙の同意」または「事前同意」を付与します。
- **暗黙の同意:** 特定のアプリケーションは、明示的なユーザーまたは管理者の承認なしに特定のスコープへのアクセスを**自動的に付与されます**。
- これらの事前同意されたスコープは通常、ユーザーや管理者から隠されており、標準的な管理インターフェースではあまり目立ちません。
- **暗黙の同意:** 特定のアプリケーションは、明示的なユーザーまたは管理者の承認なしに特定のスコープへのアクセスを自動的に**付与されます**。
- これらの事前同意されたスコープは通常、ユーザーや管理者から隠されており、標準的な管理インターフェースではあまり目に見えません。
**クライアントアプリケーションの種類:**
@@ -43,14 +43,14 @@ Entra IDは、Microsoftのクラウドベースのアイデンティティおよ
OIDCで使用される**3種類のトークン**があります:
- [**アクセストークン**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** クライアントはこのトークンをリソースサーバーに提示して**リソースにアクセス**します。これは特定のユーザー、クライアント、およびリソースの組み合わせにのみ使用でき、**期限切れまで取り消すことはできません** - デフォルトでは1時間です。
- **IDトークン:** クライアントはこの**トークンを認可サーバーから受け取ります**。ユーザーに関する基本情報が含まれています。これは**特定のユーザーとクライアントの組み合わせに結びついています**。
- **リフレッシュトークン:** アクセストークンと共にクライアントに提供されます。**新しいアクセストークンとIDトークンを取得するために使用されます**。これは特定のユーザーとクライアントの組み合わせに結びついており、取り消すことができます。非アクティブなリフレッシュトークンのデフォルトの有効期限は**90日**で、アクティブなトークンには**有効期限がありません**(リフレッシュトークンから新しいリフレッシュトークンを取得することが可能です)。
- リフレッシュトークンは**`aud`**、いくつかの**スコープ**、および**テナント**に結びついており、そのaud、スコープ(それ以上ではなく)およびテナントのためにのみアクセストークンを生成できるべきです。しかし、これは**FOCIアプリケーショントークン**には当てはまりません。
- **IDトークン:** クライアントはこの**トークンを認可サーバーから受け取ります**。ユーザーに関する基本情報が含まれています。これは**特定のユーザーとクライアントの組み合わせにバインドされています**。
- **リフレッシュトークン:** アクセストークンと共にクライアントに提供されます。**新しいアクセストークンとIDトークンを取得するために使用されます**。これは特定のユーザーとクライアントの組み合わせにバインドされており、取り消すことができます。非アクティブなリフレッシュトークンのデフォルトの有効期限は**90日**で、アクティブなトークンには**有効期限がありません**(リフレッシュトークンから新しいリフレッシュトークンを取得することが可能です)。
- リフレッシュトークンは**`aud`**、いくつかの**スコープ**、および**テナント**に結び付けられており、そのaud、スコープ(それ以上ではなく)およびテナントのためにのみアクセストークンを生成できる必要があります。しかし、これは**FOCIアプリケーショントークン**には当てはまりません。
- リフレッシュトークンは暗号化されており、Microsoftのみがそれを復号化できます。
- 新しいリフレッシュトークンを取得しても、以前のリフレッシュトークンは取り消されません。
> [!WARNING]
> **条件付きアクセス**に関する情報は**JWT**内に**保存**されています。したがって、**許可されたIPアドレス**から**トークンを要求**すると、その**IP**トークンに**保存**され、その**許可されていないIPからリソースにアクセスするためにそのトークンを使用できます**
> **条件付きアクセス**に関する情報は**JWT**内に**保存**されています。したがって、**許可されたIPアドレス**から**トークンを要求**すると、その**IP**トークンに**保存**され、そのトークンを使用して**許可されていないIPからリソースにアクセス**できます。
### アクセストークン "aud"
@@ -144,19 +144,31 @@ scopes=["https://graph.microsoft.com/.default"],
)
pprint(new_azure_cli_bearer_tokens_for_graph_api)
```
### その他のアクセストークンフィールド
- **appid**: トークンを生成するために使用されるアプリケーションID
- **appidacr**: アプリケーション認証コンテキストクラスリファレンスは、クライアントがどのように認証されたかを示します。パブリッククライアントの場合、値は0で、クライアントシークレットが使用される場合、値は1です。
- **acr**: 認証コンテキストクラスリファレンスクレームは、エンドユーザーの認証がISO/IEC 29115の要件を満たさなかった場合は「0」です。
- **amr**: 認証方法は、トークンがどのように認証されたかを示します。「pwd」の値は、パスワードが使用されたことを示します。
- **groups**: プリンシパルがメンバーであるグループを示します。
- **iss**: 発行者は、トークンを生成したセキュリティトークンサービス(STS)を特定します。例: https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/uuidはテナントIDです)
- **oid**: プリンシパルのオブジェクトID
- **tid**: テナントID
- **iat, nbf, exp**: 発行時刻(いつ発行されたか)、使用開始前(この時間以前には使用できない、通常はiatと同じ値)、有効期限。
## FOCIトークンの特権昇格
以前に述べたように、リフレッシュトークンは生成された**スコープ**、**アプリケーション**、および**テナント**に関連付けられるべきです。これらの境界のいずれかが破られると、ユーザーがアクセスできる他のリソースやテナントに対して、元々意図されたよりも多くのスコープでアクセストークンを生成することが可能になるため、特権を昇格させることができます。
以前に述べたように、リフレッシュトークンは生成された**スコープ**、**アプリケーション**、および**テナント**に結び付けられるべきです。これらの境界のいずれかが破られると、ユーザーがアクセスできる他のリソースやテナントに対してアクセストークンを生成できるため、特権を昇格させることが可能です。
さらに、これは[Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/)Microsoft Entraアカウント、Microsoft個人アカウント、FacebookやGoogleなどのソーシャルアカウント)において**すべてのリフレッシュトークンで可能です**。なぜなら、[**ドキュメント**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens)には次のように記載されているからです。「リフレッシュトークンはユーザーとクライアントの組み合わせにバインドされていますが、**リソースやテナントに結びついていません**。クライアントは、許可されている任意のリソースとテナントの組み合わせに対してアクセストークンを取得するためにリフレッシュトークンを使用できます。リフレッシュトークンは暗号化されており、Microsoft identity platformのみがそれを読み取ることができます。」
さらに、これは[Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/)Microsoft Entraアカウント、Microsoft個人アカウント、FacebookやGoogleなどのソーシャルアカウント)において**すべてのリフレッシュトークンで可能です**。なぜなら、[**ドキュメント**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens)には次のように記載されているからです。「リフレッシュトークンはユーザーとクライアントの組み合わせに結び付けられていますが、**リソースやテナントに結び付けられていません**。クライアントは、許可されている任意のリソースとテナントの組み合わせに対してアクセストークンを取得するためにリフレッシュトークンを使用できます。リフレッシュトークンは暗号化されており、Microsoft identity platformのみがそれを読み取ることができます。」
さらに、FOCIアプリケーションは公開アプリケーションであるため、サーバーに認証するために**秘密は必要ありません**。
さらに、FOCIアプリケーションはパブリックアプリケーションであるため、サーバーに認証するために**シークレットは必要ありません**。
次に、[**元の研究**](https://github.com/secureworks/family-of-client-ids-research/tree/main)で報告された既知のFOCIクライアントは[**こちら**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv)で見つけることができます。
次に、[**元の研究**](https://github.com/secureworks/family-of-client-ids-research/tree/main)で報告された既知のFOCIクライアントは[**こちら**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv)で見つけることができます。
### 異なるスコープを取得
前の例のコードに従い、このコードでは異なるスコープの新しいトークンを要求しています
前の例のコードに続いて、このコードでは異なるスコープの新しいトークンを要求しています:
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
azure_cli_bearer_tokens_for_outlook_api = (
@@ -192,5 +204,6 @@ pprint(microsoft_office_bearer_tokens_for_graph_api)
## 参考文献
- [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research)
- [https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md](https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md)
{{#include ../../../banners/hacktricks-training.md}}