diff --git a/src/pentesting-cloud/azure-security/az-services/az-sql.md b/src/pentesting-cloud/azure-security/az-services/az-sql.md index cebe084b5..0d2f9f2e5 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-sql.md +++ b/src/pentesting-cloud/azure-security/az-services/az-sql.md @@ -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 --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 --resource-group `, e anche se la regola del firewall permette al nostro IP di accedere: ```bash sqlcmd -S .database.windows.net -U -P -d ``` -## 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 .database.windows.net -U -P