MySQL è uno dei più popolari sistemi di gestione di database relazionali che è un jackpot per gli aggressori che cercano di intrufolarsi nei database. Un server di database MySQL appena installato può presentare molte vulnerabilità e scappatoie. Poiché la sicurezza dei dati è di grande importanza, è obbligatorio comprendere ogni aspetto della sicurezza di MySQL.

Questo articolo si concentra sul controllo e sulla sicurezza del database MySQL e fornisce nove suggerimenti per rafforzarne la sicurezza.

1. Evita le concessioni di privilegi non necessarie

MySQL consente diverse dichiarazioni di privilegio che, se assegnate inutilmente a un utente non privilegiato, possono portare alla lettura/scrittura di file e alla sovversione di altri privilegi utente. Alcune delle istruzioni di privilegio più potenzialmente rischiose sono FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN e così via. Puoi leggere di più su questi dalla documentazione ufficiale di MySQL. Pertanto, non assegnare privilegi di superutente come FILE, GRANT, SUPER e PROCESS ad account non amministrativi. È possibile revocare queste autorizzazioni globali, database e a livello di tabella non necessarie come segue:

instagram viewer

REVOCA TUTTO SU *.* DA 'nome_utente'@'nome_host'; #Privilegi globali
REVOCA CREATE, DROP ON database_name.* FROM 'user_name'@'host_name'; #Privilegi del database
REVOCA INSERT, AGGIORNAMENTO, CANCELLA SU nome_database.nome_tabella DA 'nome_utente'@'nome_host'; #Privilegi tavola
privilegi di svuotamento;

2. Limita gli accessi remoti

L'accesso remoto facilita il lavoro degli amministratori di database, ma mette a rischio il server di potenziali vulnerabilità ed exploit. È possibile disabilitare l'accesso remoto per tutti i tipi di account utente MySQl aggiungendo una variabile skip-networking al file di configurazione principale e riavviando il servizio.

[mysqld]
salta rete
sudo servizio mysql riavvio

Allo stesso modo, è necessario disabilitare l'accesso all'account root, se non tutto per limitare gli accessi remoti all'account root. Questa precauzione impedisce la forzatura bruta dell'account root di MySQL.

mysql> elimina da mysql.user dove user='root' e host non in ('localhost', '127.0.0.1', '::1'); mysql> privilegi di svuotamento; 

3. Disabilita le funzioni (load_file, outfile, dumpfile)

Un'altra precauzione per proteggere MySQL dall'iniezione di file locali è disabilitare le funzioni accessibili solo tramite il privilegio di concessione FILE. FILE è un'opzione che consente agli utenti con privilegi bassi con opzioni di comando globali di leggere o scrivere file sul server.

  • caricamento_file

La funzione load_file carica il contenuto del file dal server come stringa. Ad esempio, il comando seguente caricherà tutto il contenuto da /etc/passwd file come segue:

seleziona load_file('/etc/passwd')
  • file in uscita

Allo stesso modo, la funzione outfile scrive il contenuto nei file del server locale. Gli aggressori possono utilizzare questa funzione per scrivere un payload nel file nel server, come segue:

seleziona 'Iniezione SQL del file locale' nel file di uscita '/tmp/file.txt';
cat /tmp/file.txt

Produzione:

Iniezione SQL di file locali
  • File spazzatura

Questa funzione utilizza la causa selezionata per scrivere nel file senza restituire l'output sullo schermo.

cat /tmp/file.txt
seleziona "Ciao mondo!" nel file di dump '/tmp/world';

Produzione:

Query OK, 1 riga interessata (0,001 sec)

È possibile disabilitare queste funzioni revocando il privilegio FILE come segue:

revoca FILE su *.* da 'nome_utente'@'localhost';

Imparentato: Una guida per principianti a Metasploit in Kali Linux (con esempi pratici)

4. Disabilita la porta predefinita

Sappiamo che i servizi MySQL vengono eseguiti sulla porta 3306 e gli aggressori scansionano le porte per controllare i servizi in esecuzione sulla rete. Per aggiungere sicurezza tramite oscurità e modificare la porta MySQL predefinita modificando la variabile di sistema della porta nel suo file di configurazione principale, dovrai inserire quanto segue:

vim /etc/mysql/my.cnf
porta=XXXX
sudo servizio mysql riavvio

5. Evita i caratteri jolly nei nomi degli account

I nomi degli account in MySQL sono costituiti da due parti che sono un utente e un nome host "nome_utente"@"nome_host". Consente all'amministratore di creare account per gli utenti con lo stesso nome che si connettono da host diversi. Tuttavia, la parte host di un nome account consente convenzioni con caratteri jolly che possono essere un punto di accesso al database da qualsiasi luogo.

L'uso facoltativo del nome host o del valore dell'indirizzo IP è equivalente a 'nome_utente'@'%' dove % corrisponde all'operazione LIKE di corrispondenza del modello MySQL e % indica qualsiasi nome host. Nel frattempo, l'accesso dal "192.168.132.%" significa qualsiasi tentativo dalla rete di classe C. Inoltre, chiunque può accedere al database nominando la parte host come '192.18.132.mysql.com'.

Per evitare tali tentativi, MySQL consente di definire una netmask con il valore host per identificare i bit di rete di un indirizzo IP:

client-ip_add & netmask = nome_host

La sintassi per creare un hostname è host_ip/netmask:

CREA UTENTE 'jhon'@'192.168.132.0/255.255.255.0'; 

Il valore host sopra abilita l'utente John per accedere al database da qualsiasi IP compreso nell'intervallo 192.168.132.0-192.168.132.255. Allo stesso modo, i valori host di 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 consentiranno host dalle reti di classe A e B. Mentre 192.168.132.5 consentirà l'accesso solo dall'IP specifico.

6. Disabilita l'accesso esplicito

Il nome utente in MySQL è un nome con cui i database accettano connessioni in entrata o un nome utente vuoto "@"host_name" che crea un utente anonimo. Tuttavia, la presenza di un utente anonimo può sfruttare gli aggressori per accedere al server di database. Inoltre, le versioni di MySQL precedenti a MySQL 5.7 creano un insieme anonimo di utenti e l'installazione dopo l'aggiornamento della versione aggiunge ancora questi utenti.

seleziona utente, host, password da mysql.user dove utente come '';

Puoi notare che le colonne utente e password sono vuote e l'accesso è limitato a localhost. Tuttavia, non si desidera che nessuno acceda al database. Utilizzare il comando seguente per eliminare gli utenti anonimi:

trascina utente " "@"localhost"
privilegi di svuotamento;

7. Imposta un account non root come proprietario o gruppo

L'impostazione di un account utente non root non è correlato all'utente root di MySQL. L'installazione di MySQL nei sistemi Linux/Unix dai pacchetti tar e tar.gz consente al server di essere eseguito da qualsiasi utente non privilegiato. Questo è uno svantaggio di sicurezza perché qualsiasi utente con l'opzione di concessione FILE può modificare o creare file sul server. Tuttavia, restituisce un errore quando un utente tenta di accedervi senza il -utente=root errore.

Puoi evitarlo esercitandoti con la regola pratica dell'accesso al server del database come utente Linux separato. Per eseguire mysqld come un normale utente Linux, arrestare il server e modificare permessi di lettura/scrittura del server MySQl su mysql, come segue:

chown -R mysql /percorso/di/mysql/datadir

Apri il file di configurazione principale di MySQL, aggiungi un nuovo utente mysql e riavvia il servizio per evitare accessi non richiesti al server:

vim /etc/mysql/my.cnf
utente=mysql
sudo servizio mysql riavvio

8. Imposta la password per l'account root

L'installazione di MySQL tramite una shell interattiva nelle distribuzioni Linux basate su Debian crea l'account utente root e ti chiede di impostare una password. Tuttavia, ciò non accade nell'installazione della shell non interattiva e nelle distribuzioni basate su Red Hat. Come indicato sopra, un utente non root di una macchina Linux può accedere all'account utente root mysql utilizzando il file -utente=root opzione. Puoi evitarlo impostando la password come segue:

sudo mysqladmin password
vim /etc/mysql/my.cnf
password=
sudo servizio mysql riavvio

9. Garantisci la crittografia dei dati in transito e inattivi

La comunicazione predefinita non crittografata tra il client e il server pone un rischio di intercettazione dei dati da parte di qualsiasi uomo nel mezzo. Allo stesso modo, i dati utente non crittografati nel database mettono a rischio la riservatezza e l'integrità dell'utente. MySQL supporta la crittografia dei dati tra il client e il server tramite il protocollo TLS/SSL, mentre la comunicazione non crittografata è accettabile solo quando entrambe le parti in comunicazione si trovano all'interno della stessa rete.

MySQL ora supporta la crittografia a riposo per proteggere i dati archiviati nel server anche in caso di violazione del sistema.

Sicurezza avanzata MySQL: proteggiti

Garantire di avere i massimi livelli di sicurezza online è fondamentale e questo articolo ti fornirà alcuni utili suggerimenti nella giusta direzione. I passaggi precedenti sono utili per proteggere il server del database, ma è essenziale anche imparare come assegnare autorizzazioni minime agli utenti non amministrativi.

Guida per principianti alla scrittura di schemi di database MySQL

Crea il tuo database MySQL con un semplice editor di testo e questa struttura di base, o "schema".

Leggi Avanti

CondividereTwittaE-mail
Argomenti correlati
  • Programmazione
  • Sicurezza
  • Programmazione
  • Suggerimenti per la sicurezza
  • Sicurezza
Circa l'autore
Rumaisa Niazi (15 articoli pubblicati)

Rumaisa è una scrittrice freelance al MUO. Ha indossato molti cappelli, da matematica a appassionata di sicurezza informatica, e ora lavora come analista SOC. I suoi interessi includono la lettura e la scrittura di nuove tecnologie, distribuzioni Linux e tutto ciò che riguarda la sicurezza delle informazioni.

Altro da Rumaisa Niazi

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti