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

Sbloccare la Sicurezza del Database MySQL

Sbloccare la Sicurezza del Database MySQL

MySQL è uno dei database open-source più popolari che funziona su una varietà di piattaforme. È relativamente facile da configurare, semplice firewall e mostra buone caratteristiche di prestazioni anche sotto un carico significativo, ma ha ancora una vasta gamma di problemi di configurazione rilevanti per la sicurezza.

Migliori Pratiche di Sicurezza del Database MySQL

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

Innanzitutto, legga le linee guida sulla sicurezza su http://dev.mysql.com/doc/refman/5.7/en/security.html e controlli regolarmente per eventuali aggiornamenti. Recentemente sono state trovate diverse vulnerabilità gravi per il RDBMS MySQL che hanno exploit disponibili gratuitamente. Approfitti degli aggiornamenti che aggiungono nuove funzionalità e, più importante ancora, correggono difetti di sicurezza.

Monitori regolarmente i database delle vulnerabilità. Sia sempre consapevole delle nuove minacce trovate per il suo sistema.

Sistema Operativo

  1. Disattivi i demoni e i servizi non necessari. Meno componenti gli aggressori possono accedere, minore è la probabilità che trovino un difetto che può essere utilizzato per accedere al sistema. Mantenendo semplice la configurazione dell’host riduce lo sforzo necessario per gestire il sistema e mitiga il rischio di omissioni di sicurezza.
  2. Si assicuri che gli utenti MySQL non possano accedere ai file al di fuori di un insieme limitato di directory. I file dei dati MySQL non devono essere letti da nessun utente tranne l’amministratore di sistema o gli account root.
  3. Disattivi o limiti l’accesso remoto. Nel caso debba far accedere il suo MySQL da remoto, configuri l’istruzione GRANT, che viene utilizzata per impostare l’utente, per richiedere SSL.
  4. Si assicuri che nessun utente diverso dall’utente MySQL possa leggere i file di configurazione e i log di MySQL. I file my.cnf, my.ini e master.info di solito contengono nomi utente e password non crittografati. Se c’è un file di log delle query, potrebbe contenere anche password. Alcuni file di configurazione MySQL possono anche contenere nomi utente e password in chiaro. Si assicuri che questi file siano protetti da utenti non autorizzati.
  5. Esegua MySQL con l’opzione –chroot. Fornisce un’eccellente mitigazione al potere del privilegio file. Chroot viene utilizzato per limitare l’accesso ai file da parte di un processo a una directory specifica. Anche con l’opzione chroot, un aggressore che ottiene il privilegio file sarà in grado di leggere tutti i dati di MySQL e probabilmente potrà ancora eseguire UDF.
  6. Cancelli regolarmente il file .mysql_history o lo colleghi permanentemente a /dev/null. Per impostazione predefinita nei sistemi Unix, troverà un file .mysql_history nella sua directory home. Contiene un log con tutte le query che ha digitato nel client della riga di comando MySQL. Esegua il seguente comando per cancellare la cronologia:
cat /dev/null > ~/.mysql_history

Utenti

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

  1. Durante la fase di configurazione iniziale, rimuova tutti gli utenti MySQL non root, in modo da sapere dove si trova in termini di utenti che hanno accesso al database. Il modo migliore è partire da zero e creare utenti man mano che ne ha bisogno.
  2. Rinomini il nome utente root e modifichi la password utilizzando numeri e caratteri diversi. Può cambiare il nome utente dell’amministratore con il seguente comando nella console MySQL: mysql> RENAME USER root TO new_name;
  3. Non conferisca privilegi agli account che non ne hanno effettivamente bisogno, specialmente File_priv, Grant_priv, e Super_priv. Consideri la creazione di un account MySQL separato che la sua applicazione può utilizzare per interagire con il filesystem all’interno di MySQL. Tenga presente che questo utente avrà accesso a tutti i dati MySQL, comprese le hash delle password.
  4. Se possibile, crei un utente MySQL per ciascuna applicazione web o per ciascun ruolo all’interno di ciascuna applicazione web. All’interno di questa applicazione assegni privilegi utente solo per i comandi necessari. Può sembrare tedioso, ma ha senso quando si tratta di stabilire un sistema di sicurezza completo.
  5. Se le connessioni remote sono abilitate, specifichi REQUIRE SSL nell’istruzione GRANT utilizzata per impostare l’utente. Alcuni script di exploit non funzioneranno poiché non hanno il supporto SSL. Inoltre, il protocollo SSL garantisce la riservatezza della sequenza di risposta della password. Può anche stabilire restrizioni basate su un certificato client utilizzato per autenticarsi con SSL. Un’altra misura di sicurezza utile, la conoscenza di una password non sarà sufficiente, sarà necessario anche un certificato specificato.
  6. Non conceda a nessuno l’accesso alla tabella mysql.user (eccetto agli utenti con privilegi root).

Configurazione MySQL

  1. Disabiliti il comando LOAD DATA LOCAL INFILE. È una costruzione che aiuta a importare file locali in una tabella, ha una particolarità che in determinate circostanze può portare al recupero del contenuto del file /etc/passwd. Un exploit per questo è stato liberamente disponibile dal 2013. Aggiunga set-variable=local-infile=0 al file my.cnf.
  2. Rimuova qualsiasi UDF non utilizzato. Gli UDF rappresentano anche minacce per la sicurezza del database. Se vede UDF inutilizzati nella tabella mysql.func, li rimuova.
  3. Se utilizza solo connessioni locali e non è necessario che gli host remoti si connettano a MySQL, disabiliti le connessioni TCP/IP tramite l’opzione –skip-networking.
  4. Rimuova il database di test. C’è un database di test di default che può essere accessibile da chiunque. Lo rimuova o ne limiti i privilegi.
  5. Rimuova gli account anonimi. Non lasci alcun utente con password vuote.

    Può trovare utenti anonimi con questo comando:

    select * from mysql.user where user=””;
  6. Si assicuri che il traffico MySQL sia crittografato.
  7. Abiliti il logging tramite l’opzione –log. Secondo la documentazione MySQL, “general query log” è una funzionalità di debug, ma può usarla anche come misura di sicurezza. Registra connessioni riuscite e query eseguite. Per impostazione predefinita, il log delle query è disabilitato, può abilitarlo usando l’opzione –log.

Tenga presente che i log delle query e i log degli errori sono anche una fonte di informazioni per un aggressore. Si assicuri 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 specifiche per il monitoraggio delle attività sul database per questo scopo.

Monitori regolarmente i log delle query e cerchi attacchi di SQL injection e l’uso della sintassi load_file, infile e outfile del filesystem.

Installi software antivirus e antispam. Implementi un firewall per controllare il traffico di rete in entrata e in uscita e proteggersi dagli attacchi.

Un sistema completo di sicurezza del database MySQL si costruisce combinando una grande quantità di modifiche di configurazione non intrusive. Ogni dettaglio è importante. Non è possibile garantire la sicurezza al 100%, ma il perseguimento della massima protezione è un obbligo 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]