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 è una famiglia di prodotti gestiti, sicuri e intelligenti che utilizzano il **motore di database SQL Server nel cloud Azure**. Questo significa che non devi preoccuparti dell'amministrazione fisica dei tuoi server e puoi concentrarti sulla gestione dei tuoi dati.
|
||||
Azure SQL è una famiglia di prodotti gestiti, sicuri e intelligenti che usano il **motore di database SQL Server nel cloud Azure**. Questo significa che non devi preoccuparti dell'amministrazione fisica dei tuoi server e puoi concentrarti sulla gestione dei tuoi dati.
|
||||
|
||||
Azure SQL consiste in quattro offerte principali:
|
||||
|
||||
1. **Azure SQL Server**: È necessario un server per il **deployment e la gestione** dei database SQL Server.
|
||||
2. **Azure SQL Database**: Questo è un **servizio di database completamente gestito**, che ti consente di ospitare database individuali nel cloud Azure.
|
||||
3. **Azure SQL Managed Instance**: Questo è per implementazioni su larga scala, a livello di intera istanza SQL Server.
|
||||
4. **Azure SQL Server su Azure VMs**: Questo è il migliore per architetture in cui desideri **controllo sul sistema operativo** e sull'istanza SQL Server.
|
||||
1. **Azure SQL Server**: Un server è necessario per il **deployment e la gestione** dei database SQL Server.
|
||||
2. **Azure SQL Database**: Questo è un servizio di database **completamente gestito**, che ti permette di ospitare database singoli nel cloud Azure.
|
||||
3. **Azure SQL Managed Instance**: Questo è per deployment su scala più ampia, a livello dell'intera istanza SQL Server.
|
||||
4. **Azure SQL Server on Azure VMs**: Questo è il meglio per architetture in cui vuoi **controllo sul sistema operativo **e sull'istanza SQL Server.
|
||||
|
||||
### Caratteristiche di Sicurezza di SQL Server
|
||||
### SQL Server Security Features
|
||||
|
||||
**Accesso di rete:**
|
||||
**Network access:**
|
||||
|
||||
- Endpoint pubblico (può limitare l'accesso a reti specifiche).
|
||||
- Endpoint privati.
|
||||
- È anche possibile limitare le connessioni in base ai nomi di dominio.
|
||||
- È anche possibile consentire ai servizi Azure di accedervi (come per utilizzare l'editor di query nel portale o per consentire a una VM Azure di connettersi).
|
||||
- Public endpoint (può limitare l'accesso a specifiche reti).
|
||||
- Private endpoints.
|
||||
- È anche possibile restringere le connessioni in base ai nomi di dominio.
|
||||
- È anche possibile consentire ad Azure services di accedervi (ad esempio per usare il Query editor nel portal o per permettere a una Azure VM di connettersi).
|
||||
- Se un SQL Server ha *Allow Azure services and resources to access this server* impostato su "Enabled", Azure creerà automaticamente una hidden firewall rule che consente a tutto il traffico di rete proveniente da Azure di connettersi al SQL Server — incluse le risorse di qualsiasi tenant.
|
||||
- Questo significa che, se ottieni credenziali SQL valide, puoi connetterti al victim Azure SQL Server da una Azure VM all'interno del tuo tenant controllato dall'attacker. [The MS docs explains this](https://learn.microsoft.com/en-us/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services)
|
||||
|
||||
**Metodi di autenticazione:**
|
||||
**Authentication Methods:**
|
||||
|
||||
- Autenticazione **solo Entra di Microsoft**: Devi indicare i principi Entra che avranno accesso al servizio.
|
||||
- Autenticazione **sia SQL che Microsoft Entra**: Autenticazione SQL tradizionale con nome utente e password insieme a Microsoft Entra.
|
||||
- Autenticazione **solo SQL**: Consente l'accesso solo tramite utenti del database.
|
||||
- Microsoft **Entra-only** authentication: Devi indicare i principal di Entra che avranno accesso al servizio.
|
||||
- **Both SQL and Microsoft Entra** authentication: Autenticazione SQL tradizionale con username e password insieme a Microsoft Entra.
|
||||
- **Only SQL** authentication: Consenti l'accesso solo tramite database users.
|
||||
|
||||
Nota che se è consentita qualsiasi autenticazione SQL, è necessario indicare un utente admin (nome utente + password) e se viene selezionata l'autenticazione Entra ID è anche necessario indicare almeno un principio con accesso admin.
|
||||
Nota che se è consentita qualsiasi SQL auth, è necessario indicare un admin user (username + password) e se è selezionata l'auth Entra ID è anche necessario indicare almeno un principal con accesso admin.
|
||||
|
||||
**Crittografia:**
|
||||
**Encryption:**
|
||||
|
||||
- Si chiama “Crittografia dei dati trasparente” e crittografa database, backup e log a riposo.
|
||||
- Come sempre, viene utilizzata per impostazione predefinita una chiave gestita da Azure, ma potrebbe essere utilizzata anche una chiave di crittografia gestita dal cliente (CMEK).
|
||||
**Identità Gestite:**
|
||||
- Si chiama “Transparent data encryption” e cifra database, backup e logs at rest.
|
||||
- Come sempre, per default viene usata una Azure managed key, ma potrebbe essere usata anche una customer managed encryption key (CMEK).
|
||||
**Managed Identities:**
|
||||
|
||||
- È possibile assegnare identità gestite di sistema e utente.
|
||||
- Utilizzate per accedere alla chiave di crittografia (se viene utilizzata una CMEK) e ad altri servizi dai database.
|
||||
- Per alcuni esempi dei servizi Azure che possono essere accessibili dal database, controlla [questa pagina della documentazione](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
|
||||
- Se viene assegnata più di una UMI, è possibile indicare quella predefinita da utilizzare.
|
||||
- È possibile configurare un'identità client federata per l'accesso cross-tenant.
|
||||
- È possibile assegnare system e user managed MIs.
|
||||
- Usate per accedere alla encryption key (se viene usata una CMEK) e ad altri servizi dai databases.
|
||||
- Per alcuni esempi dei servizi Azure che possono essere accessibili dal database, controlla [this page of the docs](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-data-source-transact-sql)
|
||||
- Se viene assegnata più di una UMI, è possibile indicare quella di default da usare.
|
||||
- È possibile configurare una federated client identity per l'accesso cross-tenant.
|
||||
|
||||
Alcuni comandi per accedere alle informazioni all'interno di uno storage blob da un database SQL:
|
||||
Alcuni comandi per accedere alle info dentro una blob storage da un SQL database:
|
||||
```sql
|
||||
-- Create a credential for the managed identity
|
||||
CREATE DATABASE SCOPED CREDENTIAL [ManagedIdentityCredential]
|
||||
@@ -69,59 +71,60 @@ GO
|
||||
```
|
||||
**Microsoft Defender:**
|
||||
|
||||
- Utile per “mitigare potenziali vulnerabilità del database e rilevare attività anomale”
|
||||
- Parleremo di Defender in una lezione a parte (può essere abilitato in diversi altri servizi Azure)
|
||||
- Useful for “mitigating potential database vulnerabilities, and detecting anomalous activities”
|
||||
- We will talk about Defender in its own lesson (it can be enabled in several other Azure services)
|
||||
|
||||
**Backup:**
|
||||
- La frequenza dei backup è gestita nelle politiche di retention.
|
||||
**Backups:**
|
||||
- La frequenza dei backup è gestita nelle policy di retention.
|
||||
|
||||
**Database eliminati:**
|
||||
- È possibile ripristinare i DB che sono stati eliminati dai backup esistenti.
|
||||
**Deleted databases:**
|
||||
- È possibile ripristinare DB che sono stati eliminati da backup esistenti.
|
||||
|
||||
## Azure SQL Database
|
||||
|
||||
**Azure SQL Database** è una **piattaforma di database completamente gestita come servizio (PaaS)** che fornisce soluzioni di database relazionali scalabili e sicure. È costruita sulle ultime tecnologie di SQL Server ed elimina la necessità di gestione dell'infrastruttura, rendendola una scelta popolare per le applicazioni basate su cloud.
|
||||
**Azure SQL Database** is a **fully managed database platform as a service (PaaS)** che offre soluzioni di database relazionali scalabili e sicure. È costruito sulle più recenti tecnologie SQL Server ed elimina la necessità di gestire l'infrastruttura, rendendolo una scelta popolare per applicazioni cloud-based.
|
||||
|
||||
Per creare un database SQL è necessario indicare il server SQL dove sarà ospitato.
|
||||
Per creare un SQL database è necessario indicare il SQL server in cui verrà ospitato.
|
||||
|
||||
### Caratteristiche di Sicurezza del Database SQL
|
||||
### SQL Database Security Features
|
||||
|
||||
- **Sempre Aggiornato**: Funziona sull'ultima versione stabile di SQL Server e riceve automaticamente nuove funzionalità e patch.
|
||||
- **Caratteristiche di sicurezza ereditate da SQL Server:**
|
||||
- Autenticazione (SQL e/o Entra ID)
|
||||
- Identità gestite assegnate
|
||||
- Restrizioni di rete
|
||||
- Crittografia
|
||||
- Backup
|
||||
- **Always Up-to-Date**: Esegue l'ultima versione stabile di SQL Server e riceve automaticamente nuove funzionalità e patch.
|
||||
- **Inherited SQL Server security features:**
|
||||
- Authentication (SQL and/or Entra ID)
|
||||
- Assigned Managed Identities
|
||||
- Network restrictions
|
||||
- Encryption
|
||||
- Backups
|
||||
- …
|
||||
- **Ridondanza dei dati:** Le opzioni sono locale, zona, Geo o Geo-Zona ridondante.
|
||||
- **Ledger:** Verifica crittograficamente l'integrità dei dati, assicurando che qualsiasi manomissione venga rilevata. Utile per organizzazioni finanziarie, mediche e qualsiasi organizzazione che gestisce dati sensibili.
|
||||
- **Data redundancy:** Le opzioni sono local, zone, Geo o Geo-Zone redundant.
|
||||
- **Ledger:** Verifica crittograficamente l'integrità dei dati, garantendo che qualsiasi manomissione venga rilevata. Utile per organizzazioni finanziarie, mediche e qualsiasi organizzazione che gestisce dati sensibili.
|
||||
|
||||
Un database SQL potrebbe far parte di un **elastic Pool**. Gli elastic pool sono una soluzione economica per gestire più database condividendo risorse di calcolo (eDTUs) e di archiviazione configurabili tra di loro, con prezzi basati esclusivamente sulle risorse allocate piuttosto che sul numero di database.
|
||||
|
||||
#### Sicurezza a Livello di Colonna (Mascheramento) e Sicurezza a Livello di Riga di Azure SQL
|
||||
Un SQL database potrebbe far parte di un **elastic Pool**. Gli elastic pools sono una soluzione conveniente per gestire più database condividendo risorse di compute configurabili (eDTUs) e storage tra di essi, con un pricing basato solo sulle risorse allocate e non sul numero di database.
|
||||
|
||||
Il **mascheramento dei dati dinamico** di Azure SQL è una funzionalità che aiuta a **proteggere le informazioni sensibili nascondendole** agli utenti non autorizzati. Invece di alterare i dati reali, maschera dinamicamente i dati visualizzati, assicurando che dettagli sensibili come i numeri di carta di credito siano oscurati.
|
||||
#### Azure SQL Column Level Security (Masking) & Row Level Security
|
||||
|
||||
Il **Mascheramento dei Dati Dinamico** influisce su tutti gli utenti tranne quelli che sono non mascherati (questi utenti devono essere indicati) e sugli amministratori. Ha l'opzione di configurazione che specifica quali utenti SQL sono esenti dal mascheramento dinamico dei dati, con **amministratori sempre esclusi**.
|
||||
**Azure SQL's dynamic** data masking è una feature che aiuta a **proteggere le informazioni sensibili nascondendole** agli utenti non autorizzati. Invece di alterare i dati reali, maschera dinamicamente i dati mostrati, garantendo che dettagli sensibili come i numeri di carta di credito siano oscurati.
|
||||
|
||||
La **Sicurezza a Livello di Riga di Azure SQL (RLS)** è una funzionalità che **controlla quali righe un utente può visualizzare o modificare**, assicurando che ogni utente veda solo i dati rilevanti per lui. Creando politiche di sicurezza con predicati di filtro o blocco, le organizzazioni possono applicare un accesso dettagliato a livello di database.
|
||||
Il **Dynamic Data Masking** influisce su tutti gli utenti tranne quelli che sono unmasked (questi utenti devono essere indicati) e gli amministratori. Ha l'opzione di configurazione che specifica quali utenti SQL sono esenti dal dynamic data masking, con **gli amministratori sempre esclusi**.
|
||||
|
||||
**Azure SQL Row Level Security (RLS)** è una feature che **controlla quali righe un utente può visualizzare o modificare**, garantendo che ogni utente veda solo i dati rilevanti per lui. Creando security policies con filter o block predicates, le organizzazioni possono applicare un access a granularità fine a livello di database.
|
||||
|
||||
### Azure SQL Managed Instance
|
||||
|
||||
Le **Azure SQL Managed Instances** sono per distribuzioni su larga scala, a livello di intera istanza di SQL Server. Forniscono quasi il 100% di compatibilità con l'ultima versione del motore di database SQL Server on-premises (Enterprise Edition), che offre un'implementazione nativa della rete virtuale (VNet) che affronta le comuni preoccupazioni di sicurezza, e un modello di business favorevole per i clienti di SQL Server on-premises.
|
||||
**Azure SQL Managed Instances** sono pensate per deployment su larga scala, scoped a una intera istanza SQL Server. Offrono una compatibilità vicina al 100% con il più recente SQL Server on-premises (Enterprise Edition) Database Engine, che fornisce una implementazione nativa di virtual network (VNet) che affronta le comuni preoccupazioni di sicurezza, e un modello di business favorevole per i clienti SQL Server on-premises.
|
||||
|
||||
### Azure SQL Virtual Machines
|
||||
|
||||
Le **Azure SQL Virtual Machines** consentono di **controllare il sistema operativo** e l'istanza di SQL Server, poiché una VM verrà avviata nel servizio VM che esegue il server SQL.
|
||||
**Azure SQL Virtual Machines** permettono di **controllare il sistema operativo** e l'istanza SQL Server, poiché una VM verrà spawn nel servizio VM eseguendo il SQL server.
|
||||
|
||||
Quando viene creata una SQL Virtual Machine, è possibile **selezionare tutte le impostazioni della VM** (come mostrato nella lezione sulla VM) che ospiterà il server SQL.
|
||||
- Questo significa che la VM accederà a alcune VNet, potrebbe avere **Identità Gestite collegate** ad essa, potrebbe avere condivisioni di file montate… rendendo un **pivoting dal SQL** alla VM molto interessante.
|
||||
- Inoltre, è possibile configurare un ID app e un segreto per **consentire al SQL di accedere a un specifico key vault**, che potrebbe contenere informazioni sensibili.
|
||||
Quando viene creata una SQL Virtual Machine è possibile **selezionare tutte le impostazioni della VM** (come mostrato nella lezione sulle VM) che ospiterà il SQL server.
|
||||
- Questo significa che la VM accederà a una o più VNet, potrebbe avere **Managed Identities attached** a essa, potrebbe avere file shares montate… rendendo un **pivoting from the SQL** alla VM super interessante.
|
||||
- Inoltre, è possibile configurare un app id e un secret per **permettere al SQL di accedere a uno specifico key vault**, che potrebbe contenere informazioni sensibili.
|
||||
|
||||
È anche possibile configurare cose come **aggiornamenti SQL automatici**, **backup automatici**, **autenticazione Entra ID** e la maggior parte delle funzionalità degli altri servizi SQL.
|
||||
È anche possibile configurare cose come **automatic SQL updates**, **automatic backups**, **Entra ID authentication** e la maggior parte delle feature degli altri servizi SQL.
|
||||
|
||||
## Enumerazione
|
||||
## Enumeration
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -258,7 +261,7 @@ Get-AzSqlVM
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
Inoltre, se desideri enumerare il Dynamic Data Masking e le politiche a livello di riga all'interno del database, puoi eseguire la seguente query:
|
||||
Inoltre, se vuoi enumerare i Dynamic Data Masking e le policy Row Level all'interno del database, puoi eseguire la query:
|
||||
```sql
|
||||
--Enumerates the masked columns
|
||||
SELECT
|
||||
@@ -285,7 +288,7 @@ ON sp.object_id = sp2.object_id;
|
||||
```
|
||||
### Connettersi ed eseguire query SQL
|
||||
|
||||
Potresti trovare una stringa di connessione (contenente credenziali) dall'esempio [enumerando un Az WebApp](az-app-services.md):
|
||||
Potresti trovare una stringa di connessione (contenente credenziali) dall'esempio [enumerating an Az WebApp](az-app-services.md):
|
||||
```bash
|
||||
function invoke-sql{
|
||||
param($query)
|
||||
@@ -304,18 +307,18 @@ $Connection.Close()
|
||||
|
||||
invoke-sql 'Select Distinct TABLE_NAME From information_schema.TABLES;'
|
||||
```
|
||||
Puoi anche utilizzare sqlcmd per accedere al database. È importante sapere se il server consente connessioni pubbliche `az sql server show --name <server-name> --resource-group <resource-group>`, e anche se la regola del firewall consente al nostro IP di accedere:
|
||||
Puoi anche usare sqlcmd per accedere al database. È importante sapere se il server consente connessioni pubbliche `az sql server show --name <server-name> --resource-group <resource-group>`, e anche se la regola del firewall permette al nostro IP di accedere:
|
||||
```bash
|
||||
sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passworkd> -d <database>
|
||||
```
|
||||
## Riferimenti
|
||||
## References
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/azure-sql-iaas-vs-paas-what-is-overview?view=azuresql)
|
||||
- [https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/database/single-database-overview?view=azuresql)
|
||||
- [https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview?view=azuresql)
|
||||
- [https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql](https://learn.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/sql-server-on-azure-vm-iaas-what-is-overview?view=azuresql)
|
||||
|
||||
## Escalation dei privilegi
|
||||
## Privilege Escalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-sql-privesc.md
|
||||
@@ -327,7 +330,7 @@ sqlcmd -S <sql-server>.database.windows.net -U <server-user> -P <server-passwork
|
||||
../az-post-exploitation/az-sql-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
### Persistenza
|
||||
### Persistence
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-sql-persistence.md
|
||||
|
||||
Reference in New Issue
Block a user