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:
- visualizza lo stato dell'agente snapshot,
- visualizza lo stato dell'agente del lettore di log e
- 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.=)