I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

I penetration tester principianti, in particolare, pongono meno enfasi sulla sicurezza del database in generale. Un'applicazione senza una configurazione del database e test di sicurezza non può essere sicura. Potresti già utilizzare il software MySQL, un sistema di gestione del database, quindi come puoi renderlo più sicuro? Ecco sette passaggi che devi seguire.

1. Usa il tunneling SSH invece della connessione remota

Il servizio MySQL viene eseguito sulla porta 3306 per impostazione predefinita. Quando installi MySQL, vedrai che la porta 3306 è in modalità di ascolto per tutte le connessioni. Allo stato attuale, il porting di MySQL è aperto al mondo esterno. Ecco perché dovresti impostare il servizio MySQL in modo che ascolti solo l'indirizzo locale.

Poiché i server vengono solitamente eseguiti su una distribuzione Linux, gli esempi seguenti sono basati su una distribuzione Debian. Il file che devi usare per il tunneling SSH invece della connessione remota e per chiudere la porta predefinita verso il mondo esterno è

instagram viewer
/etc/mysql/my.cnf. In questo file, devi aprire un campo chiamato [mysqld] e scrivi il seguente comando:

[mysqld]
legamento-indirizzo=127.0.0.1

Dopo questo processo, non dimenticare di salvare questo file e riavviare il servizio con il seguente comando:

sudo systemctl riavvia mysqld
# O
sudosystemctlricominciamariadb.servizio

Con questo, il servizio MySQL ascolterà solo l'indirizzo locale.

Se stai usando MariaDB, puoi anche esaminare /etc/mysql/mariadb.conf.d/50-server.cnf e controlla se c'è una definizione per bind-indirizzo.

Ora che hai impostato l'indirizzo di bind su 127.0.0.1, che è localhost, puoi eseguire una scansione Nmap e controllare l'output:

Puoi vedere la porta MySQL come 127.0.0.1 rappresenta il localhost che vedi. Puoi provare a modificare nuovamente l'indirizzo di bind per assicurarti che funzioni:

[mysqld]
legamento-indirizzo=127.5.5.1

Quindi salva il file /etc/mysql/my.cnf file e riavviare il servizio MySQL. Se esegui una scansione Nmap di nuovo in questa fase, non dovresti vedere questo indirizzo di bind su localhost.

Una volta che sai che funziona, torna alle impostazioni dal primo passaggio e reimposta l'indirizzo di bind su 127.0.0.1 e salva di nuovo.

2. Impostare una barriera di accesso ai file locali

MySQL può comunicare con il file system locale. Con le query, puoi vedere il contenuto di un testo nel file system locale o masterizzare il risultato della query su un disco. Per impedire a malintenzionati di utilizzare questa funzionalità, è necessario impedire a MySQL di comunicare con il file system locale.

Puoi usare una funzione chiamata local-infile per prendere precauzioni. Ad esempio, immagina di avere un file chiamato "/etc/secretfile.txt" e di avere una password in questo file. Se il valore della funzione local-infile nel file /etc/mysql/my.cnf è 1, allora l'accesso è aperto. Quindi puoi accedere al file secretfile.txt.

Il valore della funzione local-infile è 1. Riavvia il database MySQL affinché le modifiche abbiano luogo. Ora, connettiti a MySQL con il seguente comando e controlla se riesci a vedere il file secretfile.txt:

SELEZIONARECARICA_FILE("/etc/secretfile.txt");

Non è difficile catturare le informazioni in qualsiasi file sul tuo computer.

Per risolvere questo problema, modifica il valore local-infile nel tuo file /etc/mysql/my.cnf come segue:

[mysqld]
Locale-infile=0

Riavvia il servizio MySQL. Riconnettiti a MySQL e ripeti il ​​passaggio precedente; non dovresti più essere in grado di vedere il contenuto del file.

Se gli utenti non dispongono già di autorizzazioni di lettura e scrittura sui file locali, non saranno in grado di visualizzare questo file. Tuttavia, è ancora qualcosa che dovresti controllare nei test di penetrazione e nella sicurezza del database.

3. Impostare gli utenti e le password dell'applicazione

L'utente di gestione del database e l'utente MySQL che accede al database devono essere diversi l'uno dall'altro. In altre parole, connettere applicazioni a MySQL con utenti root è estremamente pericoloso. Se possibile, definire gli utenti delle applicazioni che non funzionano Operazioni UPDATE o INSERT separatamente.

Un'altra cosa da considerare a questo punto sono le password degli utenti. Come in quasi tutti i campi, le password per gli utenti MySQL devono essere complesse e imprevedibili. Se hai bisogno di aiuto con questo, ci sono ottimi sistemi di generazione di password che puoi usare.

4. Elimina utenti anonimi

Quando installi MySQL per impostazione predefinita, si verificano alcuni utenti anonimi. Devi eliminarli e bloccarne l'accesso. Per un server MySQL sicuro, non dovresti ottenere alcuna risposta come risultato della seguente query:

SELEZIONARE * DA mysql.utente DOVEUTENTE="";
# Esempio di output
Vuoto impostato (0,001 secondi)

Se ci sono risultati, dovresti eliminare questi utenti anonimi. Ad esempio, se ci fosse un account anonimo chiamato "anonuser" in un ambiente chiamato "localhost", dovresti usare un comando come il seguente per eliminare questo account:

ABBANDONA UTENTE 'anonuser'@'localhost';

5. Controlla le autorizzazioni per i file locali di MySQL

Immagina di essere un amministratore di database e di voler tornare ai dati di una settimana fa. In questo caso, potrebbe essere necessario connettersi al server del database tramite SSH e modificare i file MySQL desiderati. Durante questa operazione, potresti aver utilizzato i privilegi di utente root di Linux; ovvero, la proprietà e le autorizzazioni dei file di dati possono cambiare. Non lo vuoi.

Guarda la directory /var/lib/mysql per verificare le autorizzazioni concesse. Quello che devi controllare qui è se il proprietario di tutti i file è l'utente MySQL. Il seguente comando farà il trucco:

sudo ls -al /var/lib/mysql

I permessi di lettura e scrittura dei file dovrebbero essere solo per l'utente MySQL. Nessun altro utente dovrebbe avere alcuna autorizzazione.

6. Usa MySQL SSL

Pensare a un esempio concreto è il modo migliore per comprendere l'utilizzo di MySQL e SSL. Immagina che uno dei server nella regione ABC, dove ci sono molti server diversi, venga rilevato da hacker malintenzionati. Gli hacker effettueranno una scansione interna nella regione ABC. In questo modo, raccolgono informazioni sui server.

Se rilevano un server MySQL durante questo processo, possono eseguire a Attacco Man-in-the-Middle (MitM) al server di destinazione, nel senso che possono rubare le informazioni sulla sessione delle applicazioni e degli utenti che si connettono a questo server. Uno dei modi migliori per evitarlo è farlo abilitare SSL sul server MySQL.

7. File di registro e cronologia

Utilizzi i log MySQL per analizzare e trovare gli errori. Puoi modificare dove sono conservati questi registri inserendo my.cnf come segue:

# /etc/mysql/mio.cnf
[mysqld]
tronco d'albero =/var/tronco d'albero/mylogfiles

È possibile modificare il nome o la posizione di mylogfiles come si desidera. C'è un altro file che devi controllare. Quando ti connetti al server MySQL in un terminale Linux e digiti vari comandi, queste query vengono salvate nel file mysql_history. Se esegui il seguente comando, puoi vedere le query che stai utilizzando nel terminale MySQL:

cat ~/.mysql_history

È necessario eliminare il contenuto di questo file se non si desidera fornire informazioni sul tipo di query che si stanno effettuando all'interno del server. Utilizzare il seguente comando per eliminare il contenuto del file:

sudo eco "puliti"> ~/.mysql_history

È quindi possibile controllare nuovamente il contenuto del file.

Chi possiede il database possiede il sistema

Indipendentemente dal settore in cui lavori, il tuo database contiene sempre informazioni importanti. Questi possono essere i tuoi clienti, conti bancari e password. Gli aggressori malintenzionati conoscono l'importanza e il valore di questi. Gli sviluppatori e gli amministratori di database devono conoscere almeno le nozioni di base che incontreranno nei test di penetrazione per battere gli hacker.