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

Come assicurarsi che il database MySQL sia protetto

Alcune informazioni di base prima di iniziare:

Fonte:Oracle MySQL Community Server 5.7

di Center for Internet Security (CIS).

Sistema operativo: Windows 10

Dove eseguire: riga di comando

mysql -u USERNAME -p

Applicazione target: Oracle MySQL Community Server 5.7

Auditing e registrazione per i sistemi informativi

I log svolgono un ruolo cruciale per la sicurezza in caso di sospetto attacco informatico. Una revisione manuale dei registri è scrupolosa per il personale di sicurezza e deve utilizzare strumenti di revisione dei registri per estrarre informazioni e analizzarle. I registri devono utilizzare una tecnologia di archiviazione e crittografia WORM (write once read many) per evitare il danneggiamento e la perdita dei dati di registro. Inoltre, i registri dovrebbero avere un formato standardizzato per facilitare la manutenzione, l'accesso e il confronto.

Assicurati che "log_error" non sia vuoto

comando:

SHOW variables LIKE ‘log_error’;

I log degli errori contengono dati sugli eventi all'avvio o all'arresto di mysqld. Mostra anche quando una tabella deve essere valutata o riparata. Deve generare un “valore”. Il motivo per abilitare la registrazione degli errori è che aiuta ad aumentare la capacità di rilevare tentativi dannosi contro MySQL e altri messaggi vitali.

Assicurati che i file di registro siano archiviati su una partizione non di sistema

comando:

SELECT @@global.log_bin_basename;

I file di registro di MySQL possono essere archiviati ovunque nel filesystem e impostati utilizzando la configurazione di MySQL. Inoltre, è consigliabile assicurarsi che i registri nel filesystem non siano ingombrati da altri registri come i registri delle applicazioni. È necessario assicurarsi che il valore restituito non indichi che si trova nella radice "('/')", "/var" o "/usr". Il motivo è che il partizionamento ridurrà la probabilità di negazione del servizio se lo spazio su disco disponibile per il sistema operativo è esaurito.

Assicurati che "log_error_verbosity" non sia impostato su "1"

comando:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

Questo controllo fornisce informazioni aggiuntive su quali funzionalità ha o ha abilitato il log MySQL sui messaggi di errore. Un valore di 1 abilita la registrazione dei messaggi di errore. Un valore di 2 abilita sia la registrazione dei messaggi di errore che di avviso. Un valore di 3 abilita la registrazione di messaggi di errore, avviso e nota. Questo aiuta a rilevare comportamenti dannosi registrando errori di comunicazione e connessioni interrotte.

Assicurati che la registrazione di controllo sia abilitata

L'abilitazione della registrazione di controllo è fondamentale per l'ambiente di produzione per le sessioni utente interattive e le sessioni dell'applicazione. Con la registrazione dell'audit, aiuta a identificare chi ha cambiato cosa e quando. Può anche aiutare a identificare ciò che un aggressore ha fatto e può anche essere utilizzato come prova nelle indagini.

comando:

SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;

comando:

SET GLOBAL general_log = ‘ON’ ;

comando: CREA UTENTE 'user1'@'localhost' IDENTIFICATO DA PASSWORD 'non-so-secret';

Il percorso del registro in Windows 10 può essere trovato utilizzando l'applicazione Servizi, verificando se MySQL è in esecuzione e facendo clic con il pulsante destro del mouse su Proprietà.

Il registro nel sistema dell'autore si trovava in:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log

Autenticazione per il sistema informativo

L'autenticazione assicura che le credenziali fornite dall'utente o dalla macchina corrispondano al database degli utenti autorizzati in un sistema operativo locale o in un server di autenticazione. L'autenticazione è quindi seguita dall'autorizzazione, che viene concessa da un amministratore a utenti o macchine. Un'autenticazione comunemente utilizzata nelle reti pubbliche e private è l'autenticazione basata su password.

Assicurati che le password non siano memorizzate nella configurazione globale

La sezione [client] di un file di configurazione MySQL consente di creare un utente e una password da impostare. Il controllo è importante perché consentire un utente e una password nel file di configurazione ha un impatto negativo sulla riservatezza della password dell'utente.

Per eseguire l'audit, apri il file di configurazione di MySQL ed esamina la sezione [client]:non deve essere memorizzata alcuna password. Nessuna password è stata impostata nel sistema dell'autore (vedi figura sotto). Se è stata impostata una password nel file di configurazione, utilizzare mysql_config_editor per memorizzare le password nel formato crittografato in .mylogin.cnf.

Assicurati che 'sql_mode' contenga 'NO_AUTO_CREATE_USER'

"no_auto_create_user" è un'opzione per impedire la creazione automatica dell'utente quando non vengono fornite le informazioni di autenticazione.

comando:

SELECT @@global.sql_mode;

comando:

SELECT @@session.sql_mode;

Assicurati che le password siano impostate per tutti gli account MySQL

Un utente può creare una password vuota. Avere una password vuota è rischioso in quanto chiunque può semplicemente assumere l'identità dell'utente, inserire l'ID di accesso dell'utente e connettersi al server. Questo bypassa l'autenticazione, il che non è valido.

comando:

SELECT User,host FROM mysql.user WHERE authentication_string=’’;

Assicurati che 'default_password_lifetime' sia minore o uguale a '90'

La modifica della durata della password a 90 giorni riduce il tempo a disposizione dell'autore dell'attacco per comprometterla e quindi diminuisce la probabilità di essere attaccato.

comando:

SHOW VARIABLES LIKE ‘default_password_lifetime’;

comando:

SET GLOBAL default_password_lifetime=90;

Assicurati che la complessità della password sia a posto

La complessità delle password aggiunge forza di sicurezza alle autenticazioni e include l'aggiunta o l'aumento di lunghezza, maiuscole e minuscole, numeri e caratteri speciali. Più complessa è la password, più difficile per gli aggressori utilizzare la forza bruta per ottenere la password. Le password deboli si ottengono facilmente in un dizionario di password.

comando:

SHOW VARIABLES LIKE ‘validate_password%’;

Assicurati che nessun utente abbia nomi host con caratteri jolly

Agli utenti con nomi host con caratteri jolly (%) viene concessa l'autorizzazione a qualsiasi posizione. È meglio evitare di creare nomi host con caratteri jolly. Invece, crea utenti e fornisci loro posizioni specifiche da cui un determinato utente può connettersi e interagire con il database.

comando:

SELECT user, host FROM mysql.user WHERE host = ‘%’;

Assicurati che non esistano account anonimi

Gli utenti possono avere un nome utente anonimo (vuoto o vuoto). Questi nomi utente anonimi non hanno password e qualsiasi altro utente può utilizzare quel nome utente anonimo per connettersi al server MySQL. La rimozione di questi account anonimi garantisce che solo gli utenti identificati e affidabili possano accedere al server MySQL.

comando:

SELECT user,host FROM mysql.user WHERE user = ‘’;

Connessione di rete al server MySQL

La connessione di rete gioca un ruolo importante per la comunicazione tra l'utente e il server MySQL. Le connessioni di rete non sicure sono molto vulnerabili agli attacchi. Di seguito sono riportati i controlli per la sicurezza della connessione di rete.

Assicurati che "have_ssl" sia impostato su "YES"

Per evitare che attaccanti dannosi facciano capolino all'interno del tuo sistema, è meglio utilizzare SLL/TLS per tutto il traffico di rete quando si utilizzano reti non attendibili.

comando:

WHERE variable_name = ‘have_ssl’;

Assicurati che 'ssl_type' sia impostato su 'ANY', 'X509', o "SPECIFICATO" per tutti gli utenti remoti

SSL/TLS deve essere configurato per utente. Ciò impedisce ulteriormente l'intercettazione di malintenzionati.

comando:

SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);

Replica

Il controllo dello stato di replica consente di monitorare le prestazioni e le vulnerabilità della sicurezza. Microsoft SQL Server Management Studio dispone dei seguenti strumenti per monitorare la replica:

  1. visualizza lo stato dell'agente snapshot,
  2. visualizza lo stato dell'agente del lettore di log e
  3. visualizza lo stato della sincronizzazione.

Assicurati che il traffico di replica sia protetto

Replica il traffico tra i server deve essere protetto. Durante i trasferimenti di replica, le password potrebbero perdere.

Per controllare, controlla se stanno usando:una rete privata, una VPN, SSL/TLS o un tunnel SSH. Si spera che il sistema dell'autore stia utilizzando una rete privata. Correggere in caso contrario e proteggere utilizzando la rete privata, una VPN, SSL/TLS o un tunnel SSH.

Assicurati che 'MASTER_SSL_VERIFY_SERVER_CERT' sia impostato su 'YES' o '1'

'MASTER_SSL_VERIFY_SERVER_CERT' controlla se la replica deve verificare o meno il certificato del primario. La replica deve verificare il certificato del primario per autenticare il primario prima di continuare la connessione.

comando:

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;

Assicurati che 'master_info_repository' sia impostato su 'TABLE'

Il "master_info_repository" determina dove la replica registra lo stato del primario e le informazioni sulla connessione. La password è archiviata nel repository di informazioni principale che è un file di testo normale. Memorizzare la password nella TABLE master_info è più sicuro.

comando:

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;

Assicurati che "super_priv" non sia impostato su "Y" per gli utenti di replica

Il Il privilegio "SUPER" ("super_priv") che si trova nella tabella "mysql.user" ha funzioni come "CHANGE", "MASTER TO", "KILL", "mysqladmin kill", "PURGE BINARY LOGS", "SET GLOBAL", "mysqladmin debug" e altri controlli di registrazione. Assegnare a un utente il privilegio "SUPER" consente all'utente di visualizzare e terminare le istruzioni SQL attualmente in esecuzione, anche per la gestione delle password. Se l'attaccante sfrutta e ottiene il privilegio "SUPER", può disabilitare, alterare o distruggere i dati di registrazione.

comando:

SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;

Assicurati che nessun utente di replica abbia nomi host con caratteri jolly

MySQL consente di concedere autorizzazioni a nomi host con caratteri jolly. I nomi host con caratteri jolly dovrebbero essere evitati e dovresti creare o modificare utenti e fornire loro posizioni specifiche da cui un determinato utente può connettersi e interagire con il database.

Conclusione

I seguenti controlli vengono effettuati per un singolo ambiente di lavoro utilizzando MySQL come sistema informativo sia lato applicazione che lato utente.

La valutazione è fondamentale per verificare la registrazione standard di MySQL e l'abilitazione di funzioni di registrazione aggiuntive (consente anche di verificare le vulnerabilità di autenticazione). I controlli di rete sono importanti per impedire ad altri utenti con intenzioni dannose di sbirciare nella tua rete. Implementa sempre SSL/TLS per crittografare. È necessario garantire il trasferimento di sola andata. La protezione del traffico di replica aggiunge un livello difensivo.

Il risultato della valutazione può informarti se il sistema è in grado di operare a un livello di fiducia.

Grazie per aver letto il mio blog! Ora hai avviato il percorso per proteggere il tuo database MySQL.=)