mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-sql.
This commit is contained in:
@@ -4,45 +4,47 @@
|
||||
|
||||
## Azure SQL
|
||||
|
||||
Azure SQL est une famille de produits gérés, sécurisés et intelligents qui utilisent le **moteur de base de données SQL Server dans le cloud Azure**. Cela signifie que vous n'avez pas à vous soucier de l'administration physique de vos serveurs, et vous pouvez vous concentrer sur la gestion de vos données.
|
||||
Azure SQL est une famille de produits gérés, secure et intelligents qui utilisent le **moteur de base de données SQL Server dans le cloud Azure**. Cela signifie que vous n’avez pas à vous soucier de l’administration physique de vos serveurs, et que vous pouvez vous concentrer sur la gestion de vos données.
|
||||
|
||||
Azure SQL se compose de quatre principales offres :
|
||||
Azure SQL se compose de quatre offres principales :
|
||||
|
||||
1. **Azure SQL Server** : Un serveur est nécessaire pour le **déploiement et la gestion** des bases de données SQL Server.
|
||||
2. **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.
|
||||
3. **Azure SQL Managed Instance** : C'est pour des déploiements à plus grande échelle, à l'échelle de l'ensemble de l'instance SQL Server.
|
||||
4. **Azure SQL Server sur des machines virtuelles Azure** : C'est le meilleur pour les architectures où vous souhaitez **contrôler le système d'exploitation** et l'instance SQL Server.
|
||||
1. **Azure SQL Server** : un serveur est nécessaire pour le **déploiement et la gestion** des bases de données SQL Server.
|
||||
2. **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.
|
||||
3. **Azure SQL Managed Instance** : destiné aux déploiements à plus grande échelle, au niveau d’une instance SQL Server entière.
|
||||
4. **Azure SQL Server on Azure VMs** : c’est le mieux adapté aux architectures où vous voulez **un contrôle sur le système d’exploitation **et l’instance SQL Server.
|
||||
|
||||
### Fonctionnalités de sécurité de SQL Server
|
||||
### SQL Server Security Features
|
||||
|
||||
**Accès réseau :**
|
||||
**Network access:**
|
||||
|
||||
- Point de terminaison public (peut limiter l'accès à des réseaux spécifiques).
|
||||
- Point de terminaison public (peut limiter l’accès à des réseaux spécifiques).
|
||||
- Points de terminaison privés.
|
||||
- Il est également possible de restreindre les connexions en fonction des noms de domaine.
|
||||
- Il est également possible de permettre aux services Azure d'y accéder (comme pour utiliser l'éditeur de requêtes dans le portail ou pour permettre à une machine virtuelle Azure de se connecter).
|
||||
- Il est aussi possible de restreindre les connexions en fonction des noms de domaine.
|
||||
- Il est aussi possible d’autoriser les services Azure à y accéder (par exemple pour utiliser l’éditeur Query dans le portail ou pour permettre à une Azure VM de se connecter).
|
||||
- Si un SQL Server a *Allow Azure services and resources to access this server* défini sur "Enabled", Azure créera automatiquement une règle de firewall cachée qui autorise tout le trafic réseau provenant d’Azure à se connecter au SQL Server — y compris les ressources de n’importe quel tenant.
|
||||
- Cela signifie que si vous obtenez des identifiants SQL valides, vous pouvez vous connecter au SQL Server Azure de la victime depuis une Azure VM dans votre propre tenant contrôlé par l’attaquant. [La documentation MS l’explique](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services)
|
||||
|
||||
**Méthodes d'authentification :**
|
||||
**Authentication Methods:**
|
||||
|
||||
- Authentification **Entra uniquement** de Microsoft : Vous devez indiquer les principaux Entra qui auront accès au service.
|
||||
- Authentification **à la fois SQL et Microsoft Entra** : Authentification SQL traditionnelle avec nom d'utilisateur et mot de passe, en plus de Microsoft Entra.
|
||||
- Authentification **uniquement SQL** : Autoriser l'accès uniquement via des utilisateurs de base de données.
|
||||
- Authentification Microsoft **Entra-only** : vous devez indiquer les principals Entra qui auront accès au service.
|
||||
- Authentification **Both SQL and Microsoft Entra** : authentification SQL traditionnelle avec nom d’utilisateur et mot de passe, en plus de Microsoft Entra.
|
||||
- Authentification **Only SQL** : autoriser uniquement l’accès via des database users.
|
||||
|
||||
Notez que si une authentification SQL est autorisée, un utilisateur administrateur (nom d'utilisateur + mot de passe) doit être indiqué et si l'authentification Entra ID est sélectionnée, il est également nécessaire d'indiquer au moins un principal avec un accès administrateur.
|
||||
Notez que si une authentification SQL est autorisée, un utilisateur admin (nom d’utilisateur + mot de passe) doit être indiqué, et si l’authentification Entra ID est sélectionnée, il faut aussi indiquer au moins un principal avec des droits admin.
|
||||
|
||||
**Chiffrement :**
|
||||
**Encryption:**
|
||||
|
||||
- Cela s'appelle "Chiffrement des données transparent" et il chiffre les bases de données, les sauvegardes et les journaux au repos.
|
||||
- Comme toujours, une clé gérée par Azure est utilisée par défaut, mais une clé de chiffrement gérée par le client (CMEK) peut également être utilisée.
|
||||
**Identités gérées :**
|
||||
- Cela s’appelle “Transparent data encryption” et cela chiffre les bases de données, les backups et les logs au repos.
|
||||
- Comme toujours, une Azure managed key est utilisée par défaut, mais une customer managed encryption key (CMEK) peut aussi être utilisée.
|
||||
**Managed Identities:**
|
||||
|
||||
- Il est possible d'assigner des identités gérées système et utilisateur.
|
||||
- Utilisé pour accéder à la clé de chiffrement (si un CMEK est utilisé) et à d'autres services depuis les bases de données.
|
||||
- Pour quelques exemples des services Azure qui peuvent être accessibles depuis la base de données, consultez [cette page de la documentation](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
|
||||
- Si plus d'une UMI est assignée, il est possible d'indiquer celle par défaut à utiliser.
|
||||
- Il est possible de configurer une identité de client fédéré pour un accès inter-locataire.
|
||||
- Il est possible d’assigner des MIs système et utilisateur.
|
||||
- Utilisées pour accéder à la clé de chiffrement (si une CMEK est utilisée) et à d’autres services depuis les bases de données.
|
||||
- Pour quelques exemples des services Azure accessibles depuis la base de données, consultez [cette page de la documentation](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
|
||||
- Si plus d’une UMI est assignée, il est possible d’indiquer celle à utiliser par défaut.
|
||||
- Il est possible de configurer une federated client identity pour l’accès cross-tenant.
|
||||
|
||||
Quelques commandes pour accéder aux informations à l'intérieur d'un stockage blob depuis une base de données SQL :
|
||||
Quelques commandes pour accéder aux informations à l’intérieur d’un blob storage depuis une base de données SQL :
|
||||
```sql
|
||||
-- Create a credential for the managed identity
|
||||
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
|
||||
@@ -69,59 +71,60 @@ GO
|
||||
```
|
||||
**Microsoft Defender :**
|
||||
|
||||
- Utile pour « atténuer les vulnérabilités potentielles de la base de données et détecter des activités anormales »
|
||||
- Utile pour “mitigating potential database vulnerabilities, and detecting anomalous activities”
|
||||
- Nous parlerons de Defender dans sa propre leçon (il peut être activé dans plusieurs autres services Azure)
|
||||
|
||||
**Sauvegardes :**
|
||||
- La fréquence des sauvegardes est gérée dans les politiques de rétention.
|
||||
**Backups :**
|
||||
- La fréquence des backups est gérée dans les politiques de rétention.
|
||||
|
||||
**Bases de données supprimées :**
|
||||
- Il est possible de restaurer des bases de données qui ont été supprimées à partir des sauvegardes existantes.
|
||||
**Deleted databases :**
|
||||
- Il est possible de restaurer des DBs qui ont été supprimées à partir de backups existants.
|
||||
|
||||
## 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 **fully managed database platform as a service (PaaS)** qui fournit des solutions de base de données relationnelles évolutives et sécurisées. Elle est construite sur les dernières technologies SQL Server et élimine le besoin de gérer l'infrastructure, ce qui en fait un choix populaire pour les applications cloud.
|
||||
|
||||
Pour créer une base de données SQL, il est nécessaire d'indiquer le serveur SQL où elle sera hébergée.
|
||||
Pour créer une SQL database, il faut indiquer le SQL server où elle sera hébergée.
|
||||
|
||||
### Fonctionnalités de sécurité de la base de données SQL
|
||||
### SQL Database Security Features
|
||||
|
||||
- **Toujours à jour** : Fonctionne sur la dernière version stable de SQL Server et reçoit automatiquement de nouvelles fonctionnalités et correctifs.
|
||||
- **Fonctionnalités de sécurité héritées de SQL Server :**
|
||||
- Authentification (SQL et/ou Entra ID)
|
||||
- Identités gérées assignées
|
||||
- Restrictions réseau
|
||||
- Chiffrement
|
||||
- Sauvegardes
|
||||
- **Always Up-to-Date**: S'exécute sur la dernière version stable de SQL Server et reçoit automatiquement les nouvelles fonctionnalités et patches.
|
||||
- **Inherited SQL Server security features:**
|
||||
- Authentication (SQL and/or Entra ID)
|
||||
- Assigned Managed Identities
|
||||
- Network restrictions
|
||||
- Encryption
|
||||
- Backups
|
||||
- …
|
||||
- **Redondance des données :** Les options sont locales, zone, géo ou géo-zone redondantes.
|
||||
- **Registre :** Il vérifie cryptographiquement l'intégrité des données, garantissant que toute falsification est détectée. Utile pour les organisations financières, médicales et toute organisation gérant des données sensibles.
|
||||
- **Data redundancy:** Les options sont local, zone, Geo ou Geo-Zone redundant.
|
||||
- **Ledger:** Vérifie cryptographiquement l'intégrité des données, garantissant que toute altération soit détectée. Utile pour les organisations financières, médicales et toute organisation gérant des données sensibles.
|
||||
|
||||
Une base de données SQL pourrait faire partie d'un **pool élastique**. Les pools élastiques sont une solution rentable pour gérer plusieurs bases de données en partageant des ressources de calcul (eDTUs) et de stockage configurables entre elles, avec une tarification basée uniquement sur les ressources allouées plutôt que sur le nombre de bases de données.
|
||||
|
||||
#### Sécurité au niveau des colonnes Azure SQL (Masquage) & Sécurité au niveau des lignes
|
||||
Une SQL database peut faire partie d'un **elastic Pool**. Les elastic pools sont une solution économique pour gérer plusieurs databases en partageant entre elles des ressources de calcul configurables (eDTUs) et de stockage, avec une tarification basée uniquement sur les ressources allouées plutôt que sur le nombre de databases.
|
||||
|
||||
Le **masquage dynamique** des données d'Azure SQL est une fonctionnalité qui aide à **protéger les informations sensibles en les cachant** des utilisateurs non autorisés. Au lieu de modifier les données réelles, il masque dynamiquement les données affichées, garantissant que des détails sensibles comme les numéros de carte de crédit sont obscurcis.
|
||||
#### Azure SQL Column Level Security (Masking) & Row Level Security
|
||||
|
||||
Le **masquage dynamique des données** affecte tous les utilisateurs sauf ceux qui sont non masqués (ces utilisateurs doivent être indiqués) et les administrateurs. Il dispose de l'option de configuration qui spécifie quels utilisateurs SQL sont exemptés du masquage dynamique des données, avec **les administrateurs toujours exclus**.
|
||||
Le **dynamic** data masking d'Azure SQL est une fonctionnalité qui aide à **protéger les informations sensibles en les masquant** aux utilisateurs non autorisés. Au lieu de modifier les données réelles, elle masque dynamiquement les données affichées, garantissant que des détails sensibles comme les numéros de carte bancaire soient obscurcis.
|
||||
|
||||
La **sécurité au niveau des lignes Azure SQL (RLS)** est une fonctionnalité qui **contrôle quelles lignes un utilisateur peut voir ou modifier**, garantissant que chaque utilisateur ne voit que les données qui le concernent. En créant des politiques de sécurité avec des prédicats de filtrage ou de blocage, les organisations peuvent appliquer un accès granulaire au niveau de la base de données.
|
||||
Le **Dynamic Data Masking** affecte tous les utilisateurs sauf ceux qui sont unmasked (ces utilisateurs doivent être indiqués) et les administrateurs. Il dispose d'une option de configuration qui spécifie quels utilisateurs SQL sont exemptés du dynamic data masking, avec les **administrateurs toujours exclus**.
|
||||
|
||||
**Azure SQL Row Level Security (RLS)** est une fonctionnalité qui **contrôle quelles lignes un utilisateur peut voir ou modifier**, garantissant que chaque utilisateur ne voit que les données qui le concernent. En créant des security policies avec des filtres ou des block predicates, les organisations peuvent appliquer un contrôle d'accès fin au niveau de la database.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
Les **instances gérées Azure SQL** sont destinées aux déploiements à grande échelle, à l'échelle de l'ensemble de l'instance SQL Server. Elles offrent une compatibilité presque totale avec le dernier moteur de base de données SQL Server sur site (édition Entreprise), qui fournit une mise en œuvre native de réseau virtuel (VNet) répondant aux préoccupations de sécurité courantes, et un modèle commercial favorable aux clients SQL Server sur site.
|
||||
Les **Azure SQL Managed Instances** sont destinées à des déploiements à grande échelle, à l'échelle de l'instance SQL Server entière. Elles offrent une compatibilité proche de 100% avec le dernier moteur de database SQL Server on-premises (Enterprise Edition), ce qui fournit une implémentation native en virtual network (VNet) qui répond aux préoccupations courantes de sécurité, ainsi qu'un modèle économique favorable pour les clients SQL Server on-premises.
|
||||
|
||||
### Machines virtuelles Azure SQL
|
||||
### Azure SQL Virtual Machines
|
||||
|
||||
Les **machines virtuelles Azure SQL** permettent de **contrôler le système d'exploitation** et l'instance SQL Server, car une VM sera lancée dans le service VM exécutant le serveur SQL.
|
||||
**Azure SQL Virtual Machines** permet de **contrôler le système d'exploitation** et l'instance SQL Server, car une VM sera créée dans le service VM exécutant le SQL server.
|
||||
|
||||
Lorsqu'une machine virtuelle SQL est créée, il est possible de **sélectionner tous les paramètres de la VM** (comme indiqué dans la leçon sur les VM) qui hébergera le serveur SQL.
|
||||
- Cela signifie que la VM accédera à certains VNet, pourra avoir des **identités gérées attachées** à elle, pourrait avoir des partages de fichiers montés… rendant un **pivotement du SQL** vers la VM très intéressant.
|
||||
- De plus, il est possible de configurer un ID d'application et un secret pour **permettre au SQL d'accéder à un coffre-fort de clés spécifique**, qui pourrait contenir des informations sensibles.
|
||||
Lorsqu'une SQL Virtual Machine est créée, il est possible de **sélectionner tous les paramètres de la VM** (comme montré dans la leçon sur les VM) qui hébergera le SQL server.
|
||||
- Cela signifie que la VM accédera à un ou plusieurs VNet(s), pourra avoir des **Managed Identities attached** à elle, pourrait avoir des file shares montés… rendant un **pivoting from the SQL** vers la VM très intéressant.
|
||||
- De plus, il est possible de configurer un app id et un secret pour **allow the SQL to access an specific key vault**, qui pourrait contenir des informations sensibles.
|
||||
|
||||
Il est également possible de configurer des éléments tels que **mises à jour SQL automatiques**, **sauvegardes automatiques**, **authentification Entra ID** et la plupart des fonctionnalités des autres services SQL.
|
||||
Il est aussi possible de configurer des éléments comme les **automatic SQL updates**, les **automatic backups**, l'authentification **Entra ID** et la plupart des fonctionnalités des autres services SQL.
|
||||
|
||||
## Énumération
|
||||
## Enumeration
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -258,7 +261,7 @@ Get-AzSqlVM
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
De plus, si vous souhaitez énumérer le Dynamic Data Masking et les politiques de niveau de ligne dans la base de données, vous pouvez interroger :
|
||||
De plus, si vous voulez énumérer les politiques Dynamic Data Masking et Row Level à l'intérieur de la base de données, vous pouvez interroger :
|
||||
```sql
|
||||
--Enumerates the masked columns
|
||||
SELECT
|
||||
@@ -283,9 +286,9 @@ JOIN sys.security_predicates AS sp2
|
||||
ON sp.object_id = sp2.object_id;
|
||||
|
||||
```
|
||||
### Connecter et exécuter des requêtes SQL
|
||||
### Se 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 credentials) à partir de l’exemple [enumerating an Az WebApp](az-app-services.md):
|
||||
```bash
|
||||
function invoke-sql{
|
||||
param($query)
|
||||
@@ -304,7 +307,7 @@ $Connection.Close()
|
||||
|
||||
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 firewall autorise notre IP à accéder :
|
||||
```bash
|
||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||
```
|
||||
@@ -321,7 +324,7 @@ sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passwork
|
||||
../az-privilege-escalation/az-sql-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Post-exploitation
|
||||
## Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-sql-post-exploitation.md
|
||||
|
||||
Reference in New Issue
Block a user