Esercizio - Gestire la sicurezza

Completato

Dopo aver protetto il database SQL di Azure sui livelli di rete, autenticazione e protezione dei dati, il passaggio finale consiste nel comprendere come gestire la sicurezza in modo continuativo. La gestione della sicurezza include controllo, monitoraggio e classificazione dei dati.

Controllo

Il controllo consente di agevolare la conformità alle normative, comprendere le attività del database e ottenere informazioni su eventuali discrepanze e anomalie che potrebbero indicare potenziali violazioni della sicurezza. In questa attività: si configurerà il controllo a livello di server, ma è disponibile anche a livello di database.

In alternativa a SQL Server Audit, nel database SQL di Azure è presente il controllo di Azure SQL. È basato su SQL Server Audit e, come SQL Server, supporta azioni e gruppi di azioni di controllo. La funzionalità di controllo tiene traccia degli eventi del database e del server e scrive gli eventi in un log di controllo in un archivio di Azure, in Log Analytics o in Hub eventi di Azure. Se si punta a un account di archiviazione BLOB di Azure, è possibile archiviare e analizzare i risultati nei file XEvent. Con Log Analytics, si sblocca la possibilità di eseguire query sui log con il linguaggio di query Kusto (KQL) e di sfruttare i dashboard di controllo di Log Analytics.

Configurare il controllo

In un esercizio precedente per la distribuzione del database SQL è stato configurato il controllo a livello di server, ma è disponibile anche a livello di database. In un esercizio futuro verrà illustrato come accedere e usare i file inviati ad archiviazione BLOB di Azure, KQL e i dashboard di Log Analytics.

Completare i passaggi seguenti per configurare un'area di lavoro Log Analytics:

  1. Nella barra di ricerca del portale di Azure immettere Log Analytics e quindi selezionare Aree di lavoro Log Analytics nei risultati. Viene visualizzato il riquadro Aree di lavoro Log Analytics.

  2. Seleziona Crea. Viene visualizzato il menu Crea area di lavoro Log Analytics.

  3. Nella scheda Informazioni di base immettere i valori indicati di seguito per ogni impostazione.

    Impostazione Valore
    Dettagli del progetto
    Subscription Concierge Subscription
    Gruppo di risorse Nell'elenco a discesa selezionare [Gruppo di risorse sandbox]
    Dettagli dell'istanza
    Nome Immettere azuresql-la
    Area Selezionare il percorso più vicino dall'elenco seguente

    La sandbox gratuita consente di creare risorse in un subset delle aree globali di Azure. Selezionare un'area nell'elenco seguente durante la creazione delle risorse:

    • Stati Uniti occidentali 2
    • Stati Uniti centro-meridionali
    • Stati Uniti centrali
    • Stati Uniti orientali
    • Europa occidentale
    • Asia sud-orientale
    • Giappone orientale
    • Brasile meridionale
    • Australia sud-orientale
    • India centrale
  4. Selezionare Rivedi e crea, attendere che gli input siano stati convalidati e quindi selezionare Crea. Attendere che la risorsa venga distribuita.

  5. Selezionare Vai alla risorsa. Viene visualizzato il riquadro Panoramica per l'area di lavoro Log Analytics.

  6. Nel portale di Azure passare al database AdventureWorks.

  7. Nel menu, in Sicurezza, selezionare Controllo. Esaminare le opzioni.

    È possibile applicare il controllo a livello di server, che quindi lo applica a tutti i database all'interno del server logico del database SQL di Azure. Se si applica anche il controllo a livello di database (operazione che verrà eseguita in questa unità), entrambi i controlli vengono eseguiti in parallelo e l'uno non sostituisce l'altro.

  8. Posizionare il pulsante a scorrimento su Abilita controllo Azure SQL.

  9. Selezionare la casella di controllo Archiviazione e quindi completare i campi obbligatori:

    • Per Sottoscrizione, nell'elenco a discesa selezionare la sottoscrizione Concierge.
    • Per Account di archiviazione, nell'elenco a discesa selezionare l'account che inizia con sql seguito da una stringa casuale di lettere e numeri.
    • Lasciare il Archiviazione Tipo di autenticazione come opzione predefinita Archiviazione Chiavi di accesso.

    L'account sql di archiviazione viene usato per raccogliere i file di log XEvent, che vengono salvati come raccolta di file BLOB all'interno di un contenitore denominato sqldbauditlogs. In un'attività successiva si esaminerà il contenitore per informazioni sulle differenze tra i file di log e Log Analytics.

    Suggerimento

    Se non vengono visualizzati account di archiviazione, creare un nuovo account. Potrebbe essere necessario aggiornare la pagina dopo un paio di minuti prima che venga visualizzata.

    Se si sta per controllare l'ambiente di produzione, è consigliabile avere un account di archiviazione separato per i log di controllo.

  10. Selezionare Proprietà avanzate per espandere la sezione e impostare gli elementi di configurazione seguenti:

    • Per Conservazione (giorni) immettere 7
    • Per Chiave di accesso alle risorse di archiviazione selezionare Primaria.

    Nota

    Se non vengono visualizzate proprietà avanzate, selezionare Salva dalla barra dei comandi, quindi ripetere le istruzioni di configurazione per questa pagina.

  11. Selezionare la casella di controllo Log Analytics e completare i campi obbligatori:

    • Per Sottoscrizione selezionare La sottoscrizione Concierge nell'elenco a discesa.
    • Per Log Analytics selezionare l'area di lavoro Log Analytics creata in precedenza in questo esercizio (asuresql-la).
  12. Seleziona Salva.

    L'elaborazione della configurazione potrebbe richiedere alcuni minuti.

A questo punto è stato abilitato il controllo in un account di archiviazione e in un'area di lavoro Log Analytics. In seguito verranno illustrate in dettaglio le funzionalità di controllo di Azure SQL e verrà illustrato come analizzare i log di controllo per visualizzare tutte le modifiche apportate all'interno del modulo, oltre ad altri casi d'uso interessanti.

Libro mastro per il database SQL di Azure

La funzionalità libro mastro offre funzionalità di prova crittografica dell'integrità dei dati nel database a prova di manomissione. Questa prova può aiutare a semplificare il processo di controllo.

Il libro mastro consente di proteggere i dati da qualsiasi utente malintenzionato o utente con privilegi elevati, inclusi gli amministratori di database (DBA), gli amministratori di sistema e gli amministratori del cloud. Come per un libro mastro tradizionale, la funzionalità conserva i dati cronologici. Quando una transazione in una tabella libro mastro modifica i dati, l'evento viene sottoposto a hashing SHA-256 crittograficamente usando una struttura di dati dell'albero Merkle che crea un hash radice che rappresenta tutte le righe della transazione. Le transazioni elaborate dal database vengono poi anch’esse sottoposte alla crittografia con la variante di algoritmo SHA-256, usando una struttura di dati ad albero di Merkle. Il risultato è un hash radice che forma un blocco. Il blocco viene quindi sottoposto ad hash SHA-256 tramite l'hash radice del blocco, insieme all'hash radice del blocco precedente come input per la funzione di hash. L'hashing costituisce una blockchain. Se una riga viene aggiornata nel database, il relativo valore precedente viene mantenuto e protetto in una tabella della cronologia. Il libro mastro offre una cronologia di tutte le modifiche apportate al database nel tempo.

La funzionalità del libro mastro viene introdotta nelle tabelle in due forme:

  • Tabelle libro mastro aggiornabili, che consentono di aggiornare ed eliminare righe nelle tabelle
  • Tabelle libro mastro di sola accodamento, che consentono solo inserimenti nelle tabelle

Sia le tabelle del libro mastro aggiornabili che le tabelle del libro mastro di solo accodamento forniscono funzionalità a prova di manomissione e forensi digitali.

Esercizio per l'uso del libro mastro per il database SQL di Azure

Nell'esercizio per creare il database SQL di Azure è stato aggiunto un database denominato e creato una tabella denominata myLedgerDatabase Account.Balance. In questo esercizio verranno inseriti dati, verranno apportati aggiornamenti ai dati ed eseguire query sulla tabella di cronologia e sulle viste libro mastro per visualizzare il rilevamento che si sta verificando e la relazione tra le tabelle.

  1. Aprire SSMS e connettersi al server logico del database SQL di Azure.

  2. Fare clic con il pulsante destro del mouse sul myLedgerDatabase database, quindi scegliere Nuova query.

  3. Inserire il nome Nick Jones come nuovo cliente con un saldo di apertura pari a $ 50.

    INSERT INTO [Account].[Balance]
    VALUES (1, 'Jones', 'Nick', 50);
    
  4. Inserire rispettivamente i nomi John Smith, Joe Smith e Mary Michaels come nuovi clienti con saldo di apertura pari a $ 500, $30 e $ 200.

    INSERT INTO [Account].[Balance]
    VALUES (2, 'Smith', 'John', 500),
    (3, 'Smith', 'Joe', 30),
    (4, 'Michaels', 'Mary', 200);
    
  5. Visualizzare la tabella del libro mastro aggiornabile [Account].[Balance] e specificare le colonne GENERATED ALWAYS aggiunte alla tabella. Selezionare Esegui per eseguire la query.

    SELECT [CustomerID]
       ,[LastName]
       ,[FirstName]
       ,[Balance]
       ,[ledger_start_transaction_id]
       ,[ledger_end_transaction_id]
       ,[ledger_start_sequence_number]
       ,[ledger_end_sequence_number]
     FROM [Account].[Balance];  
    

    Nella finestra dei risultati verranno prima visualizzati i valori inseriti dai comandi T-SQL, insieme ai metadati di sistema usati per scopi di derivazione dei dati.

    • Nella colonna ledger_start_transaction_id viene annotato l'ID di transazione univoco associato alla transazione che ha inserito i dati. Dato che John, Joe e Mary sono stati inseriti usando la stessa transazione, condividono lo stesso ID di transazione.
    • Nella colonna ledger_start_sequence_number viene annotato l'ordine di inserimento dei valori dalla transazione.
  6. Aggiornare il saldo di Nick da 50 a 100.

    UPDATE [Account].[Balance] SET [Balance] = 100
    WHERE [CustomerID] = 1;
    
  7. Visualizzare la vista del libro mastro [Account].[Balance], insieme alla vista di sistema del libro mastro delle transazioni per identificare gli utenti che hanno apportato le modifiche. Selezionare Esegui per eseguire la query.

     SELECT
     t.[commit_time] AS [CommitTime] 
     , t.[principal_name] AS [UserName]
     , l.[CustomerID]
     , l.[LastName]
     , l.[FirstName]
     , l.[Balance]
     , l.[ledger_operation_type_desc] AS Operation
     FROM [Account].[Balance_Ledger] l
     JOIN sys.database_ledger_transactions t
     ON t.transaction_id = l.ledger_transaction_id
     ORDER BY t.commit_time DESC;
    

    Il saldo del conto di Nick è stato aggiornato correttamente nella tabella del libro mastro aggiornabile in 100.
    La vista del libro mastro mostra che l'aggiornamento della tabella del libro mastro è un'operazione DELETE sulle righe originali con 50. Il saldo con un'operazione INSERT corrispondente di una nuova riga con 100 mostra il nuovo saldo per Nick.

Monitoraggio

Per il monitoraggio e la gestione della sicurezza, occorre considerare due aspetti:

  • Livello di Azure
  • Livello di database o server

In Azure è possibile sfruttare strumenti come i log attività e il controllo degli accessi in base al ruolo.

Nel database SQL di Azure è possibile configurare il controllo di Azure SQL e sfruttare DMV, metriche e avvisi per monitorare gli eventi correlati alla sicurezza. Ad esempio, sys.event_log consente di tenere traccia del numero di connessioni non riuscite e riuscite e del numero di connessioni bloccate dal firewall.

Microsoft consiglia di configurare Microsoft Defender per il cloud, inclusa la configurazione degli avvisi per Advanced Threat Protection. Questi elementi di sicurezza vengono illustrati nella sezione e nell'esercizio successivi. Infine, è possibile usare Microsoft Defender for Cloud per monitorare, gestire e ricevere consigli su tutte le risorse nell'area di Azure.

Individuazione dati e classificazione

Il servizio di individuazione e classificazione dei dati costituisce un nuovo paradigma di protezione delle informazioni per database SQL di Azure. finalizzato alla protezione dei dati e non solo del database. Questo paradigma include

  • Individuazione e raccomandazioni per i dati potenzialmente sensibili che devono essere classificati
  • La possibilità di aggiungere etichette in modo permanente alle colonne usando gli attributi dei metadati
  • La possibilità di controllare ed eseguire query sull'accesso ai dati sensibili

Azure SQL offre criteri di SQL Information Protection e criteri di Microsoft Information Protection nella classificazione dei dati ed è possibile scegliere uno di questi criteri in base alle esigenze.

La visualizzazione del portale è disponibile solo per Azure SQL, ma SQL Server supporta funzionalità simili tramite una procedura guidata in SQL Server Management Studio.

Per altre informazioni, vedere Individuazione dati e classificazione.

Microsoft Defender for Cloud

Microsoft Defender for Cloud è un pacchetto unificato di funzionalità di sicurezza SQL avanzate. Rappresenta un centro di controllo unico per l'abilitazione e la gestione di queste due funzionalità principali:

  • Valutazione della vulnerabilità
  • Advanced Threat Protection

Valutazione della vulnerabilità

Al livello più alto, la valutazione della vulnerabilità SQL è un servizio di analisi che fornisce visibilità sullo stato di sicurezza e fornisce passaggi interattivi per risolvere eventuali potenziali problemi. Quando si configurano analisi ricorrenti periodiche, si consente al servizio di eseguire l'analisi dei database ogni sette giorni e di verificare la presenza di eventuali vulnerabilità. È quindi possibile scegliere di inviare tali report agli amministratori, ai proprietari della sottoscrizione o a chiunque altro possa dover ricevere una notifica delle modifiche. Per consentire il funzionamento di questo servizio, è necessario specificare un account di archiviazione per i risultati da archiviare.

Advanced Threat Protection

Advanced Threat Protection (ATP) consente di rilevare e rispondere a minacce potenziali non appena si verificano, fornendo avvisi di sicurezza sulle attività anomale. Advanced Threat Protection applica tecnologie avanzate di monitoraggio e Machine Learning per rilevare se si sono verificate le minacce seguenti:

  • SQL injection
  • Vulnerabilità SQL injection
  • Esfiltrazione di dati
  • Azione non sicura
  • Tentativo di attacco di forza bruta
  • Accesso client anomalo

Nei due esercizi successivi verranno illustrate le funzionalità che Microsoft Defender for Cloud e Azure SQL in genere, abilitano e gli scenari da cui proteggono.

Sicurezza a livello di riga

La sicurezza a livello di riga consente di usare l'appartenenza a gruppi o il contesto di esecuzione per controllare l'accesso alle righe in una tabella di database.

La sicurezza a livello di riga facilita l'implementazione delle restrizioni di accesso alle righe di dati. Ad esempio, è possibile assicurarsi che i dipendenti possano accedere solo alle righe di dati pertinenti per il loro reparto. Un altro esempio può essere la limitazione dell'accesso ai dati dei clienti solo ai dati rilevanti per l'azienda.

La logica di restrizione dell'accesso si trova sul livello del database e non su un altro livello applicazione lontano dai dati. Il sistema del database applica le restrizioni di accesso a ogni tentativo di accesso ai dati da qualsiasi livello. Il sistema di sicurezza è così più affidabile e solido, grazie alla riduzione della superficie di attacco del sistema di sicurezza.

La sicurezza a livello di riga supporta due tipi di predicati di sicurezza.

  • I predicati di filtro filtrano automaticamente le righe disponibili per le operazioni di lettura (edizione Standard LECT, UPDATE e DELETE)
  • I predicati di blocco bloccano in modo esplicito le operazioni di scrittura (AFTER IN edizione Standard RT, AFTER UPDATE, BEFORE UPDATE, BEFORE DELETE) che violano il predicato

Verifica delle conoscenze

1.

Quali dei seguenti sono i modi in cui è possibile monitorare gli eventi correlati alla sicurezza per il database SQL di Azure?