Mysql
 sql >> Database >  >> RDS >> Mysql

Sicurezza del database 101:sicurezza nei database open source

La sicurezza dei dati è uno degli aspetti più significativi dell'amministrazione di un database. A seconda della struttura organizzativa, se si gestisce il database di produzione, è necessario monitorare l'accesso e l'utilizzo non autorizzati. Questo vale anche per l'host sottostante. In questo blog spiegheremo la sicurezza nei database open source.

Sicurezza generale

Dopo aver installato il software del database, è necessario eseguire alcuni controlli preliminari per evitare gli errori di sicurezza più comuni.

Le linee guida generali sono le seguenti:

  • Non concedere mai a nessuno l'accesso root/admin ad altri! Questo è fondamentale.

  • Scopri come funziona il sistema dei privilegi di accesso al database. Non concedere più privilegi del necessario. Non concedere mai privilegi a tutti gli host.

  • Non memorizzare le password in chiaro nel database. Invece di utilizzare SHA2() o qualche altra funzione di hashing unidirezionale e memorizzare il valore hash.

  • Non utilizzare le porte predefinite e assicurati che la porta scelta non sia accessibile da un host non attendibile.

  • Metti il ​​database open source dietro un firewall. Questo ti protegge da almeno il 50% di tutti i tipi di exploit in qualsiasi software.

Controllo accessi e gestione account

Una delle funzioni primarie del database è autenticare un utente che si connette da un determinato host e associare quell'utente con privilegi su un database. Per controllare quali utenti possono connettersi, a ciascun account possono essere assegnate credenziali di autenticazione come una password.
 

Ruoli utente 

Un ruolo di database è una raccolta di un numero qualsiasi di privilegi che possono essere assegnati a uno o più utenti. Nei moderni database open source, la maggior parte degli utenti ha ruoli predefiniti.

Gestione password 

L'accesso al database richiede agli utenti di autenticarsi con un nome utente e una password. Il database applica la stessa funzione hash sulla password immessa dall'utente e la confronta con l'hash memorizzato nel database. Se entrambi corrispondono, viene concessa l'autorizzazione. La scadenza della password è richiesta per tutti gli utenti del database per modificare periodicamente le password. E la generazione di password casuali è richiesta per le password letterali specificate dall'amministratore esplicito. Una cosa importante da monitorare è la password errata/il monitoraggio degli errori di autenticazione, si consiglia di abilitare il blocco temporaneo dell'account dopo troppi errori consecutivi di accesso con password errata.

Gestione delle password scadute

Una volta scaduta la password, il server del database disconnette una connessione client con password scaduta.

Esempio 
[[email protected] vagrant]# mysql -u severalnies -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.

 

Limitazione delle risorse 

Limita l'uso da parte di un client delle risorse del server di database, limitando il numero di connessioni simultanee che possono essere effettuate da qualsiasi account utente. Ad esempio, possiamo limitare il numero di query che un utente può eseguire all'ora o il numero di volte in cui un utente può connettersi al server all'ora.

Connessioni crittografate 

I database di solito supportano connessioni crittografate tra client e server utilizzando alcuni protocolli di sicurezza. Utilizzando SSL, crittograferà le connessioni tra i client e il server. Ciò trasforma i dati in un formato illeggibile sul livello di rete ed evita le intercettazioni di rete. Una volta abilitato SSL sul database, inizia a supportare le connessioni crittografate e non consentirà connessioni non crittografate.

Componenti di sicurezza e plugin

I componenti di sicurezza sono facilmente integrabili con il database. Ad esempio mysql include diversi componenti e plugin che implementano funzionalità di sicurezza.

Plugin di autenticazione:questi plug-in sono tentativi di autenticazione da parte dei client di connettersi al server MySQL. Possiamo integrarci facilmente con il nostro server di database.

Plugin password:questo plug-in verifica se la password corrente è complessa e rifiuta le password considerate deboli.

Plugin Keyring - Questo plug-in crittografa i tablespace. Questa tecnica di crittografia funziona sulla base di file di chiavi rotanti. Ecco un esempio su come crittografare MySQL 8.0.

Registro di controllo - Il controllo è il processo di monitoraggio e registrazione dell'attività in corso sul server del database. Viene utilizzato per registrare chi sta facendo cosa, ad es. operazioni del database da parte di utenti, connessioni o tentativi di accesso non riusciti. Se stai utilizzando un sistema di bilanciamento del carico per accedere al database, dovresti monitorare anche quello. Per impostazione predefinita, i file di registro di controllo sono archiviati nella directory dei dati mysql.

Registri di esempio 
20210306 02:30:06,centos14,root,localhost,519,1832,QUERY,,'select sleep(5)',0
20210306 02:30:08,centos14,s9smysqlchk,localhost,571,0,DISCONNECT,,,0
20210306 02:30:09,centos14,root,localhost,519,1867,QUERY,,'show schemas',0

Se desideri archiviare i file di registro di controllo in posizioni diverse, puoi aggiungere questo parametro nel tuo file di configurazione "server_audit_file_path".

Monitoraggio dei log - Il monitoraggio dei log offre al team operativo un maggiore livello di visibilità nell'ambiente del database, che comprende le istanze del database ma anche i sistemi di bilanciamento del carico. Aiuta a identificare le anomalie, quando si verificano queste anomalie e la frequenza con cui si verificano.

Plugin per la convalida della password

La password è come parole, numeri e stringhe di caratteri. Sul lato database e server, il nome utente e la password erano necessari per determinati accessi. Ad esempio, se la password fornita come valore di testo non crittografato, il plug-in validate_password confronta la password con la politica della password corrente e rifiuta la password se è debole.

La validate_password_policy ha tre valori LOW, MEDIUM o STRONG. Il valore di LOW controlla solo la lunghezza della password, la policy MEDIUM aggiunge alcune condizioni e la policy STRONG aggiunge la condizione che le sottostringhe delle password composte da 4 o più caratteri non devono corrispondere a parole in un file dizionario che può essere specificato modificando la variabile validate_password_dictionary_file.

Plugin LDAP

Il plug-in LDAP consente al server database di accettare connessioni da utenti definiti nelle directory LDAP. Nell'autenticazione LDAP, i plug-in lato client e lato server comunicano la password come testo non crittografato. Si consiglia una connessione sicura tra il client e il server per prevenire l'esposizione della password. Se il nome utente del client e il nome host non corrispondono, il database rifiuterà la connessione.

 La configurazione LDAP è molto semplice in ClusterControl. In questo post abbiamo spiegato i passaggi di configurazione utilizzando ClusterControl.

Protezione dei backup del database 

I backup dei dati sono importanti quando si tratta di proteggere i tuoi dati. È ancora più importante garantire che i backup siano protetti e disponibili per un ripristino più rapido. ClusterControl fornisce un supporto completo per il processo di gestione del backup, inclusa la crittografia dei file di backup utilizzando l'algoritmo di crittografia AES-256 prima della spedizione fuori sede.

Accesso VPN alla rete jump host 

Per accedere al database open source della rete privata da locale, il metodo migliore è utilizzare la VPN. VPN fornisce privacy e sicurezza agli utenti per creare una connessione di rete privata su una rete pubblica. Un jump host è un host intermedio o un gateway SSH per accedere a server di rete remoti. Il server di salto funge da intermediario per connettere entrambe le estremità, rendendolo così un host di "salto" per accedere all'altro lato. Questo è uno dei modi più diffusi per proteggere il server dal mondo esterno. Possiamo utilizzare il tunneling SSH per accedere a una rete remota in modo sicuro, con uno sforzo minore rispetto alla configurazione di un server VPN.

Gestione dell'accesso al database tramite Jump host

Per accedere ai server di database di produzione in modo più sicuro, è necessario un jump server dedicato. Questo jump server dedicato fornisce l'accesso a una rete privata da una rete esterna o pubblica, come Internet. Fornisce un approccio a più livelli per consentire a qualsiasi utente di raggiungere la tua rete privata, riducendo al minimo le possibilità di un potenziale attacco al server.

Come possiamo raggiungere questo obiettivo?

La procedura migliore consiste nell'impostare un jump server per la connessione ai database da una macchina Linux, anche se l'istanza database si trova su una rete privata. Dopo aver creato l'host Jump, segui le linee guida seguenti

  • Limita l'accesso pubblico ai tuoi database con sottoreti private.

  • Limita il gateway Internet nelle tabelle di instradamento.

  • Crea un nuovo VPC o aggiungi il tuo host di salto allo stesso VPC dell'istanza del database. Quindi aggiungi un gateway Internet al tuo jump server con sottoreti pubbliche.

  • Consenti solo porte database specifiche agli IP richiesti.

Poi possiamo creare un tunneling SSH per accedere a un server di database in modo sicuro.

SELinux

SELinux è un insieme di modifiche al kernel e strumenti per lo spazio utente e ha alcuni moduli di policy. I moduli delle politiche sono contesti SELinux per definire regole su come processi, file, porte e altri oggetti di sistema interagiscono tra loro. L'interazione tra oggetti di sistema è consentita solo se una regola dei criteri lo consente.

Gli utenti del sistema non saranno in gran parte a conoscenza di SELinux. Solo gli amministratori di sistema devono considerare quanto rigida sia una politica da implementare per il proprio ambiente server. Questo dettaglio fornisce al kernel SELinux un controllo completo e granulare sull'intero sistema.