From 726418193f36f3f29e406fe8117598c5b5e574ce Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 12 Feb 2025 13:50:27 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-services/az-automati --- .../az-services/az-automation-accounts.md | 62 +++++++++---------- .../az-services/az-container-instances.md | 6 +- .../az-services/az-container-registry.md | 28 ++++----- theme/ht_searcher.js | 4 +- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md index 093255095..7a11465ca 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md +++ b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md @@ -1,24 +1,24 @@ # Az - Automation Accounts -{{#include ../../../../banners/hacktricks-training.md}} +{{#include ../../../banners/hacktricks-training.md}} ## 基本信息 -Azure Automation Accounts 是 Microsoft Azure 中的云服务,帮助 **自动化任务**,如资源管理、配置和更新,跨 Azure 和本地环境。它们提供 **Runbooks**(执行的自动化脚本)、**计划**和 **混合工作组** 来运行自动化 **作业**,实现基础设施即代码(IaC)和流程自动化,以提高管理云资源的效率和一致性。 +Azure Automation Accounts 是 Microsoft Azure 中的云服务,帮助**自动化任务**,如资源管理、配置和更新,跨 Azure 和本地环境。它们提供**Runbooks**(执行的自动化脚本)、**计划**和**混合工作组**来运行自动化**作业**,实现基础设施即代码(IaC)和流程自动化,以提高管理云资源的效率和一致性。 ### 设置 -- **凭据**:密码仅在自动化帐户内的 runbook 中可访问,用于 **安全存储用户名和密码**。 -- **变量**:用于存储可以在 runbook 中使用的 **配置数据**。这也可以是敏感信息,如 API 密钥。如果变量是 **加密存储**,则仅在自动化帐户内的 runbook 中可用。 -- **证书**:用于存储可以在 runbook 中使用的 **证书**。 -- **连接**:用于存储与外部服务的 **连接信息**。这可能包含 **敏感信息**。 -- **网络访问**:可以设置为 **公共** 或 **私有**。 +- **凭据**:密码仅在自动化帐户内的 runbook 中可访问,用于**安全存储用户名和密码**。 +- **变量**:用于存储可以在 runbooks 中使用的**配置数据**。这也可以是敏感信息,如 API 密钥。如果变量是**加密存储**的,则仅在自动化帐户内的 runbook 中可用。 +- **证书**:用于存储可以在 runbooks 中使用的**证书**。 +- **连接**:用于存储与外部服务的**连接信息**。这可能包含**敏感信息**。 +- **网络访问**:可以设置为**公共**或**私有**。 ### Runbooks 和作业 -Azure Automation 中的 Runbook 是一个 **自动执行任务的脚本**,在您的云环境中运行。Runbooks 可以用 PowerShell、Python 或图形编辑器编写。它们帮助自动化管理任务,如 VM 管理、补丁或合规检查。 +Azure Automation 中的 Runbook 是一个**自动执行任务的脚本**,在您的云环境中运行。Runbooks 可以用 PowerShell、Python 或图形编辑器编写。它们帮助自动化管理任务,如 VM 管理、补丁或合规检查。 -在 **Runbooks** 中的 **代码** 可能包含 **敏感信息**(如凭据)。 +在**Runbooks**中的**代码**可能包含**敏感信息**(如凭据)。 **作业是 Runbook 执行的一个实例**。当您运行一个 Runbook 时,会创建一个作业来跟踪该执行。每个作业包括: @@ -26,25 +26,25 @@ Azure Automation 中的 Runbook 是一个 **自动执行任务的脚本**,在 - **输出**:Runbook 执行的结果。 - **开始和结束时间**:作业开始和完成的时间。 -作业包含 **Runbook** 执行的 **输出**。如果您可以 **读取** **作业**,请这样做,因为它们 **包含** 运行的 **输出**(潜在的 **敏感信息**)。 +作业包含**Runbook**执行的**输出**。如果您可以**读取**这些**作业**,请这样做,因为它们**包含**运行的**输出**(潜在的**敏感信息**)。 ### 计划和 Webhooks -执行 Runbook 有 3 种主要方式: +执行 Runbook 有三种主要方式: -- **计划**:用于在 **特定时间** 或 **间隔** 触发 Runbooks。 -- **Webhooks**:这些是可以用于从 **外部服务** 触发 Runbooks 的 **HTTP 端点**。请注意,创建后 webhook URL **不可见**。 -- **手动触发**:您可以从 Azure 门户和 CLI **手动触发** Runbook。 +- **计划**:用于在**特定时间**或**间隔**触发 Runbooks。 +- **Webhooks**:这些是可以用于从**外部服务**触发 Runbooks 的**HTTP 端点**。请注意,创建后 webhook URL 是**不可见**的。 +- **手动触发**:您可以从 Azure 门户和 CLI 手动触发 Runbook。 ### 源控制 -它允许从 **Github、Azure Devops (Git) 和 Azure Devops (TFVC)** 导入 Runbooks。可以指示将 repo 的 Runbooks 发布到 Azure Automation 帐户,也可以指示 **将更改从 repo 同步** 到 Azure Automation 帐户。 +它允许从**Github、Azure Devops (Git) 和 Azure Devops (TFVC)**导入 Runbooks。可以指示将 repo 的 Runbooks 发布到 Azure Automation 帐户,也可以指示**将更改从 repo 同步**到 Azure Automation 帐户。 -启用同步时,在 **Github 存储库中创建一个 webhook**,以在每次发生推送事件时触发同步。Webhook URL 示例:`https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` +当同步启用时,在**Github 仓库中创建一个 webhook**,以在每次发生推送事件时触发同步。Webhook URL 的示例:`https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` -请注意,这些 webhooks 在列出与 Github repo 关联的 runbooks 的 webhooks 时 **不可见**。还要注意,一旦创建,**无法更改源控制的 repo URL**。 +请注意,这些 webhooks 在列出与 Github repo 关联的 runbooks 时**不可见**。还要注意,一旦创建,**无法更改源控制的 repo URL**。 -为了使配置的源控制正常工作,**Azure Automation Account** 需要具有 **`Contributor`** 角色的托管身份(系统或用户)。此外,要将用户托管身份分配给 Automation Account,需要在变量 **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** 中指明用户 MI 的客户端 ID。 +为了使配置的源控制正常工作,**Azure Automation Account** 需要具有**`Contributor`** 角色的托管身份(系统或用户)。此外,要将用户托管身份分配给 Automation Account,需要在变量**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**中指明用户 MI 的客户端 ID。 ### 运行时环境 @@ -57,32 +57,32 @@ Azure Automation 中的 Runbook 是一个 **自动执行任务的脚本**,在 - **Python 3.8** - **Python 2.7** -但是,也可以 **创建自己的环境**,以其中一个作为基础。在 Python 的情况下,可以将 `.whl` 包上传到将要使用的环境。在 PowerShell 的情况下,可以上传包含模块的 `.zip` 包以在运行时使用。 +但是,也可以**创建自己的环境**,以其中一个作为基础。在 Python 的情况下,可以将 `.whl` 包上传到将要使用的环境。在 PowerShell 的情况下,可以上传包含模块的 `.zip` 包以在运行时使用。 ### 混合工作组 -在 Azure Automation 中,Runbooks 的默认执行环境是 **Azure Sandbox**,这是一个由 Azure 管理的云平台,适合涉及 Azure 资源的任务。然而,这个沙箱有一些限制,例如对本地资源的访问受限以及执行时间和资源使用的限制。为克服这些限制,采用了混合工作组。混合工作组由 **安装在您自己机器上的一个或多个混合 Runbook Worker** 组成,无论是在本地、其他云环境还是 Azure VM。这种设置允许 Runbooks 直接在这些机器上执行,提供对本地资源的直接访问,能够运行更长时间和更资源密集的任务,并灵活地与超出 Azure 直接范围的环境进行交互。 +在 Azure Automation 中,Runbooks 的默认执行环境是**Azure Sandbox**,这是一个由 Azure 管理的云平台,适合涉及 Azure 资源的任务。然而,这个沙箱有一些限制,例如对本地资源的访问受限以及执行时间和资源使用的限制。为了解决这些限制,采用了混合工作组。混合工作组由**一个或多个安装在您自己机器上的混合 Runbook Worker**组成,无论是在本地、其他云环境还是 Azure VM。这种设置允许 Runbooks 直接在这些机器上执行,提供对本地资源的直接访问,能够运行更长时间和更资源密集的任务,并灵活地与超出 Azure 直接范围的环境进行交互。 -创建混合工作组时,需要指明要使用的 **凭据**。有 2 个选项: +创建混合工作组时,需要指明要使用的**凭据**。有两种选择: -- **默认凭据**:您无需提供凭据,Runbooks 将作为 **系统** 在 VM 内执行。 -- **特定凭据**:您需要提供自动化帐户内凭据对象的名称,该凭据将用于在 **VM 内执行 Runbooks**。因此,在这种情况下,可能会 **窃取有效凭据** 用于 VM。 +- **默认凭据**:您无需提供凭据,Runbooks 将作为**系统**在 VM 内执行。 +- **特定凭据**:您需要提供自动化帐户内凭据对象的名称,该凭据将用于在 VM 内执行**Runbooks**。因此,在这种情况下,可能会**窃取有效凭据**用于 VM。 -因此,如果您可以选择在 **混合工作者** 中运行 **Runbook**,您将以 **系统** 身份在外部机器上执行 **任意命令**(不错的转移技术)。 +因此,如果您可以选择在**混合工作者**中运行**Runbook**,您将以**系统**身份在外部机器上执行**任意命令**(很好的转移技术)。 -此外,如果混合工作者在 Azure 中运行并附加了其他托管身份,Runbook 将能够访问 **Runbook 的托管身份和 VM 的所有托管身份**,通过元数据服务。 +此外,如果混合工作者在 Azure 中运行并附加了其他托管身份,Runbook 将能够访问**Runbook 的托管身份和 VM 的所有托管身份**,通过元数据服务。 > [!TIP] -> 请记住,**元数据服务** 的 URL 与获取自动化帐户的托管身份令牌的服务的 URL 不同(**`IDENTITY_ENDPOINT`**)。 +> 请记住,**元数据服务**的 URL 与获取自动化帐户的托管身份令牌的服务(**`IDENTITY_ENDPOINT`**)不同(**`http://169.254.169.254`**)。 ### 状态配置 (SC) ->[!WARNING] -> 如 [文档](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) 所示,Azure Automation 状态配置将在 2027 年 9 月 30 日退役,并由 [Azure 机器配置](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview) 替代。 +> [!WARNING] +> 如[文档](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)所示,Azure Automation 状态配置将在 2027 年 9 月 30 日退役,并由[Azure 机器配置](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview)替代。 -Automation Accounts 还支持 **状态配置 (SC)**,这是一个帮助 **配置** 和 **维护** 您的 VM **状态** 的功能。可以 **创建** 和 **应用** DSC 配置到 **Windows** 和 **Linux** 机器。 +Automation Accounts 还支持**状态配置 (SC)**,这是一个帮助**配置**和**维护**您的 VM 的**状态**的功能。可以**创建**和**应用** DSC 配置到**Windows**和**Linux**机器。 -从攻击者的角度来看,这很有趣,因为它允许 **在所有配置的 VM 中执行任意 PS 代码**,从而提升到这些 VM 的托管身份,可能转移到新的网络……此外,配置可能包含 **敏感信息**。 +从攻击者的角度来看,这很有趣,因为它允许**在所有配置的 VM 中执行任意 PS 代码**,从而提升到这些 VM 的托管身份,可能转移到新的网络……此外,配置可能包含**敏感信息**。 ## 枚举 ```bash @@ -238,4 +238,4 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName -R - [https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) - [https://github.com/rootsecdev/Azure-Red-Team#runbook-automation](https://github.com/rootsecdev/Azure-Red-Team#runbook-automation) -{{#include ../../../../banners/hacktricks-training.md}} +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-instances.md b/src/pentesting-cloud/azure-security/az-services/az-container-instances.md index 0e559e417..3552da60f 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-container-instances.md +++ b/src/pentesting-cloud/azure-security/az-services/az-container-instances.md @@ -1,12 +1,12 @@ # Az - Container Instances -{{#include ../../../../banners/hacktricks-training.md}} +{{#include ../../../banners/hacktricks-training.md}} ## 基本信息 -Azure Container Instances (ACI) 提供了一种 **无服务器、按需的方式** 在 Azure 云中运行 **容器**。您可以在一个组中 **部署** 单个或多个容器,具有 **可扩展计算**、**网络选项**,以及连接到 **其他 Azure 服务**(如存储、虚拟网络或容器注册表)的灵活性。 +Azure Container Instances (ACI) 提供了一种 **无服务器、按需** 的方式在 Azure 云中运行 **容器**。您可以在一个组中 **部署** 单个或多个容器,具有 **可扩展计算**、**网络选项**,以及连接到 **其他 Azure 服务**(如存储、虚拟网络或容器注册表)的灵活性。 -由于它们是 **短暂的** 工作负载,您无需管理底层的 VM 基础设施 — Azure 会为您处理这一切。然而,从 **攻击安全的角度** 来看,了解 **权限**、**身份**、**网络配置** 和 **日志** 如何揭示攻击面和潜在的配置错误是至关重要的。 +由于它们是 **短暂** 的工作负载,您无需管理底层的 VM 基础设施 — Azure 会为您处理这一切。然而,从 **攻击安全的角度** 来看,了解 **权限**、**身份**、**网络配置** 和 **日志** 如何揭示攻击面和潜在的配置错误是至关重要的。 ### 配置 diff --git a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md index 2d44b3ed6..04ee020e1 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-container-registry.md +++ b/src/pentesting-cloud/azure-security/az-services/az-container-registry.md @@ -1,6 +1,6 @@ # Az - Container Registry -{{#include ../../../../banners/hacktricks-training.md}} +{{#include ../../../banners/hacktricks-training.md}} ## 基本信息 @@ -20,19 +20,19 @@ Azure Container Registry (ACR) 是一个安全的私有注册表,允许您 ** 还有一些 **内置角色** 可以分配,也可以创建 **自定义角色**。 -![]() +![](/images/registry_roles.png) -### 认证 +### 身份验证 > [!WARNING] > 即使注册表名称包含大写字母,您也应该始终使用 **小写字母** 登录、推送和拉取镜像,这一点非常重要。 有 4 种方法可以对 ACR 进行身份验证: -- **使用 Entra ID**:这是对 ACR 进行身份验证的 **默认** 方法。它使用 **`az acr login`** 命令对 ACR 进行身份验证。此命令将 **凭据存储** 在 **`~/.docker/config.json`** 文件中。此外,如果您在没有访问 docker 套接字的环境中运行此命令,例如在 **云终端** 中,可以使用 **`--expose-token`** 标志获取 **令牌** 以对 ACR 进行身份验证。然后,您需要使用用户名 `00000000-0000-0000-0000-000000000000` 进行身份验证,例如:`docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` -- **使用管理员帐户**:管理员用户默认是禁用的,但可以启用,然后可以使用管理员帐户的 **用户名** 和 **密码** 访问注册表,具有对注册表的完全权限。这仍然被支持,因为一些 Azure 服务使用它。请注意,为此用户创建了 **2 个密码**,并且两个都是有效的。您可以使用 `az acr update -n --admin-enabled true` 启用它。请注意,用户名通常是注册表名称(而不是 `admin`)。 -- **使用令牌**:可以创建一个具有 **特定 `scope map`**(权限)的 **令牌** 来访问注册表。然后,可以使用此令牌名称作为用户名和一些生成的密码通过 `docker login -u -p aregistry-url>` 对注册表进行身份验证。 -- **使用服务主体**:可以创建一个 **服务主体** 并分配一个角色,例如 **`AcrPull`** 来拉取镜像。然后,可以使用 SP appId 作为用户名和生成的密钥作为密码 **登录注册表**。 +- **使用 Entra ID**:这是对 ACR 进行身份验证的 **默认** 方法。它使用 **`az acr login`** 命令对 ACR 进行身份验证。此命令将 **存储凭据** 在 **`~/.docker/config.json`** 文件中。此外,如果您在没有访问 docker 套接字的环境中运行此命令,例如在 **云终端** 中,可以使用 **`--expose-token`** 标志获取 **令牌** 以对 ACR 进行身份验证。然后,您需要使用用户名 `00000000-0000-0000-0000-000000000000` 进行身份验证,例如:`docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN` +- **使用管理员帐户**:管理员用户默认情况下是禁用的,但可以启用,然后可以使用管理员帐户的 **用户名** 和 **密码** 访问注册表,具有对注册表的完全权限。这仍然被支持,因为一些 Azure 服务使用它。请注意,为此用户创建了 **2 个密码**,并且两个都是有效的。您可以使用 `az acr update -n --admin-enabled true` 启用它。请注意,用户名通常是注册表名称(而不是 `admin`)。 +- **使用令牌**:可以创建一个具有 **特定 `scope map`**(权限)的 **令牌** 来访问注册表。然后,可以使用此令牌名称作为用户名和生成的某些密码通过 `docker login -u -p aregistry-url>` 对注册表进行身份验证。 +- **使用服务主体**:可以创建一个 **服务主体** 并分配一个角色,例如 **`AcrPull`** 以拉取镜像。然后,可以使用 SP appId 作为用户名和生成的密钥作为密码 **登录到注册表**。 来自 [文档](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) 的示例脚本,用于生成具有注册表访问权限的 SP: ```bash @@ -51,11 +51,11 @@ echo "Service principal password: $PASSWORD" ``` ### 加密 -只有 **Premium SKU** 支持 **静态加密** 图像和其他工件。 +只有 **Premium SKU** 支持 **静态加密** 用于图像和其他工件。 ### 网络 -只有 **Premium SKU** 支持 **私有端点**。其他 SKU 仅支持 **公共访问**。公共端点的格式为 `.azurecr.io`,而私有端点的格式为 `.privatelink.azurecr.io`。因此,注册表的名称在所有 Azure 中必须是唯一的。 +只有 **Premium SKU** 支持 **私有端点**。其他 SKU 仅支持 **公共访问**。公共端点的格式为 `.azurecr.io`,而私有端点的格式为 `.privatelink.azurecr.io`。因此,注册表的名称必须在所有 Azure 中是唯一的。 ### Microsoft Defender for Cloud @@ -63,21 +63,21 @@ echo "Service principal password: $PASSWORD" ### 软删除 -**软删除** 功能允许您在指定的天数内 **恢复已删除的注册表**。此功能 **默认情况下是禁用的**。 +**软删除** 功能允许您在指定天数内 **恢复已删除的注册表**。此功能 **默认情况下是禁用的**。 ### Webhooks -可以在注册表中 **创建 Webhooks**。在此 Webhook 中,需要指定一个 URL,以便在执行 **推送或删除操作时发送请求**。此外,Webhooks 可以指示一个范围,以指示将受到影响的存储库(图像)。例如,'foo:*' 表示存储库 'foo' 下的事件。 +可以在注册表中 **创建 Webhooks**。在此 Webhook 中,需要指定一个 URL,以便在执行 **推送或删除操作时发送请求**。此外,Webhooks 可以指示一个范围,以指示将受到影响的存储库(图像)。例如,'foo:\*' 表示存储库 'foo' 下的事件。 从攻击者的角度来看,在注册表中 **执行任何操作之前** 检查这一点是很有趣的,并在需要时暂时删除它,以避免被检测到。 ### 连接的注册表 -这基本上允许 **将图像镜像** 从一个注册表到另一个注册表,通常位于本地。 +这基本上允许 **镜像图像** 从一个注册表到另一个注册表,通常位于本地。 它有 2 种模式:**只读** 和 **读写**。在第一种模式中,图像仅从源注册表 **拉取**,而在第二种模式中,图像也可以 **推送** 到源注册表。 -为了让客户端从 Azure 访问注册表,使用连接的注册表时会生成一个 **令牌**。 +为了让客户端从 Azure 访问注册表,当使用连接的注册表时,会生成一个 **令牌**。 ### 运行与任务 @@ -154,4 +154,4 @@ az acr cache show --name --registry - [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli) - [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager) -{{#include ../../../../banners/hacktricks-training.md}} +{{#include ../../../banners/hacktricks-training.md}} diff --git a/theme/ht_searcher.js b/theme/ht_searcher.js index 1cee01a8c..276bbfe6a 100644 --- a/theme/ht_searcher.js +++ b/theme/ht_searcher.js @@ -471,12 +471,12 @@ window.search = window.search || {}; showResults(true); } - fetch(path_to_root + 'searchindex.json') + fetch('https://raw.githubusercontent.com/HackTricks-wiki/hacktricks-cloud/refs/heads/master/searchindex.json') .then(response => response.json()) .then(json => init(json)) .catch(error => { // Try to load searchindex.js if fetch failed var script = document.createElement('script'); - script.src = path_to_root + 'searchindex.js'; + script.src = 'https://raw.githubusercontent.com/HackTricks-wiki/hacktricks-cloud/refs/heads/master/searchindex.js'; script.onload = () => init(window.search); document.head.appendChild(script); });