DataSunrise Consegue la Certificazione AWS DevOps Competency per AWS DevSecOps e Monitoraggio, Logging e Performance

Sbloccare la Sicurezza del Database MySQL: Best Practices

Sbloccare la Sicurezza del Database MySQL: Best Practices

MySQL è uno dei database open-source più popolari che gira su una varietà di piattaforme. È relativamente facile da configurare, semplice firewall e mostra buone caratteristiche di prestazione anche sotto carichi significativi ma presenta ancora una vasta gamma di problemi di configurazione rilevanti per la sicurezza.

Best Practices per la Sicurezza del Database MySQL

La miglior pratica nella gestione della sicurezza è essere paranoici e prevedere un attacco in ogni momento e da ogni direzione, ma se si adottano alcune misure precauzionali, non sarà un lavoro così arduo. Le linee guida seguenti vi aiuteranno a ridurre sostanzialmente la superficie delle possibili minacce.

Prima di tutto, leggete le linee guida sulla sicurezza su http://dev.mysql.com/doc/refman/5.7/en/security.html e controllate regolarmente gli aggiornamenti. Sono state recentemente scoperte diverse vulnerabilità serie per MySQL RDBMS con exploit liberamente disponibili. Sfruttate gli aggiornamenti che aggiungono nuove funzionalità e, cosa più importante, correggono falle di sicurezza.

Monitorate regolarmente i database delle vulnerabilità. Essere sempre consapevoli delle nuove minacce scoperte per il vostro sistema.

Sistema Operativo

  1. Disattivare i demoni e i servizi non necessari. Meno componenti possono essere accessibili agli attaccanti, minori sono le possibilità che trovino una falla da sfruttare per ottenere l’accesso al sistema. Mantenendo la configurazione dell’host semplice si riduce lo sforzo necessario per gestire il sistema e mitigare il rischio di omissioni di sicurezza.
  2. Assicurarsi che gli utenti di MySQL non possano accedere ai file al di fuori di un insieme limitato di directory. I file dei dati di MySQL non dovrebbero essere letti da nessun utente eccetto gli account root o amministratore.
  3. Disabilitare o limitare l’accesso remoto. Nel caso abbiate bisogno che il vostro MySQL sia accessibile in remoto, configurare l’istruzione GRANT, che viene utilizzata per impostare l’utente, richiedendo SSL.
  4. Assicurarsi che nessun utente diverso dall’utente MySQL possa leggere i file di configurazione e i file di log di MySQL. File come my.cnf, my.ini e master.info contengono comunemente nomi utente e password non crittografati. Se c’è un file di log delle query, è probabile che contenga anche password. Alcuni file di configurazione di MySQL possono anche contenere nomi utente e password in chiaro. Assicurarsi che questi file siano protetti da utenti indesiderati.
  5. Eseguire MySQL con l’opzione –chroot. Fornisce un’eccellente mitigazione del potere del privilegio sui file. La funzione chroot viene utilizzata per limitare l’accesso ai file da parte di un processo a una directory determinata. Anche con l’opzione chroot, un attaccante che ottiene il privilegio sui file sarà comunque in grado di leggere tutti i dati MySQL e probabilmente sarà ancora in grado di eseguire UDF.
  6. Eliminate regolarmente il file .mysql_history o collegatelo permanentemente a /dev/null. Di default sui sistemi Unix, troverete un file .mysql_history nella vostra directory home. Contiene un log con tutte le query che avete digitato nel client della riga di comando di MySQL. Eseguite il seguente comando per cancellare la cronologia:
cat /dev/null > ~/.mysql_history

Utenti

Dopo aver configurato il sistema operativo, è necessario costruire un modello di privilegi e assegnare gli account utente.

  1. Durante la fase di configurazione iniziale, rimuovere tutti gli utenti MySQL non root, in modo da sapere esattamente quali utenti hanno accesso al database. Il modo migliore è partire da zero e aggiungere utenti man mano che si ha bisogno.
  2. Rinominare il nome utente root e modificare la password utilizzando numeri e caratteri diversi. Potete cambiare il nome utente dell’amministratore con il seguente comando nella console di MySQL: mysql> RENAME USER root TO nuovo_nome;
  3. Non concedere privilegi agli account che non ne hanno realmente bisogno, in particolare File_priv, Grant_priv e Super_priv. Considerare la creazione di un account MySQL separato che l’applicazione può utilizzare per l’interazione con il filesystem all’interno di MySQL. Tenete presente che questo utente avrà accesso a tutti i dati MySQL, inclusi gli hash delle password.
  4. Se possibile, creare un utente MySQL per ciascuna applicazione web o per ciascun ruolo all’interno di ciascuna applicazione web. All’interno di questa applicazione assegnare i privilegi solo per i comandi richiesti. Può sembrare noioso, ma ha senso quando si tratta di stabilire un sistema di sicurezza completo.
  5. Nel caso in cui le connessioni remote siano abilitate, specificare REQUIRE SSL nell’istruzione GRANT utilizzata per configurare l’utente. Alcuni script di exploit non funzionano senza il supporto SSL. Inoltre, il protocollo SSL garantisce la riservatezza della sequenza di risposta del passaporto. Potete anche stabilire restrizioni basate su un certificato lato client utilizzato per l’autenticazione con SSL. Un’altra misura di sicurezza utile è che la conoscenza di una password non sarà sufficiente, verrà richiesto anche un certificato specificato.
  6. Non dare a nessuno l’accesso alla tabella mysql.user (eccetto gli utenti con privilegi root).

Configurazione MySQL

  1. Disabilitare il comando LOAD DATA LOCAL INFILE. È una costruzione che aiuta a importare file locali in una tabella, ha una particolarità che in certe circostanze può portare al recupero del contenuto del file /etc/passwd. L’exploit per questo è liberamente disponibile dal 2013. Aggiungere set-variable=local-infile=0 al file my.cnf.
  2. Sbarazzarsi di qualsiasi UDF non utilizzata. Anche le UDF rappresentano minacce per la sicurezza del database. Se vedete UDF non utilizzate nella tabella mysql.func, rimuovetele.
  3. Se state utilizzando solo connessioni locali e non è necessario che gli host remoti si connettano a MySQL, disabilitare le connessioni TCP/IP attraverso l’opzione –skip-networking.
  4. Rimuovere il database di test. Esiste un database di test di default a cui chiunque può accedere. Rimuoverlo o limitare i privilegi.
  5. Rimuovere gli account anonimi. Non lasciare alcun utente con password vuote.

    Potete trovare gli utenti anonimi con questo comando:

    select * from mysql.user where user=””;
  6. Assicurarsi che il traffico MySQL sia crittografato.
  7. Abilitare la registrazione tramite l’opzione –log. Secondo la documentazione MySQL “il log delle query generali” è una funzionalità di debug, ma potete anche usarla come misura di sicurezza. Registra connessioni riuscite e query eseguite. Di default il log delle query è disabilitato, è possibile attivarlo utilizzando l’opzione –log.

Tenete presente che i log delle query e i log degli errori sono anche una fonte di informazioni per un attaccante. Assicurarsi che il file di log sia visibile solo all’amministratore o all’account root del sistema. Inoltre, non registra i risultati delle query e i dati recuperati, ma ci sono soluzioni speciali per il monitoraggio delle attività del database per questo.

Monitorare regolarmente i log delle query e cercare attacchi di SQL injection e l’uso di sintassi di file di caricamento, infile e outfile.

Installare software antivirus e antispam. Distribuire un firewall per controllare il traffico di rete in entrata e in uscita e proteggere dagli attacchi.

Un sistema di sicurezza del database MySQL completo è costruito combinando una grande quantità di modifiche alla configurazione non intrusive. Ogni dettaglio è importante. Non c’è modo di garantire il 100% di sicurezza, ma il perseguimento della massima protezione è un must nell’era dei crimini informatici.

Successivo

Interfaccia a Riga di Comando Facile

Interfaccia a Riga di Comando Facile

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Informazioni generali:
[email protected]
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
[email protected]