Problematiche di sicurezza su database
MySQL

I database mantengono i principali dati aziendali e debbono essere adeguatamente protetti.
Questa breve pagina riporta le problematiche piu' diffuse per quanto riguarda le basi dati ed i piu' comuni errori sulla sicurezza dei database ma sopratutto... indica come risolverle con il database MySQL!

Nel seguito sono riportate le informazioni di interesse organizzate in paragrafi specifici: Introduzione, Matrice delle soluzioni, Controllo accessi, Controllo SQL, Protezione dati, Configurazione sicura, Varie ed eventuali.

Introduzione

Le piu' recenti normative per la sicurezza dei dati hanno posto l'attenzione di tutte le aziende sulla protezione dei dati: GDPR (General Data Protection Regulation, per la protezione dei dati personali), SOX (Sarbanes-Oxley Act of 2002, per la protezione dei dati finanziari), PCI-DSS (Payment Card Industry Data Security Standard, standard internazionale a protezione dei dati delle carte di credito), HIPAA (Health Insurance Portability and Accountability Act, legge USA a protezione dei dati personali e sanitari), ...

Problematiche sicurezza database I database mantengono i principali dati aziendali e debbono essere adeguatamente protetti. Questo documento presenta quelli che sono le problematiche di sicurezza piu' comuni relativamente ai database e come possono essere risolte. A seconda dei casi verranno presentate soluzioni introducendo Best Practice di programmazione o di progettazione, utilizzando funzionalita' standard MySQL, utilizzando l'Enterprise Edition di MySQL, utilizzando strumenti o pacchetti esterni.

Tra i molti elenchi di problematiche da cui partire... ne abbiamo scelto uno italiano che ha anche il pregio di avere le virtu' Calviniane dell'esattezza e della rapidita'. L'elenco sulle problematiche di sicurezza piu' comuni per i database e' quello contenuto nel Rapporto 2016 preparato dal Clusit (Associazione Italiana per la Sicurezza Informatica) su aziende italiane ed e' quindi uno specchio reale della situazione presente nella maggioranza delle imprese.

Le problematiche emerse nella ricerca sono state suddivise nelle seguenti categorie:

Nel resto del documento analizzeremo le tecnologie disponibili in MySQL per risolvere le problematiche di sicurezza dei dati su ciascuna delle categorie citate.

Matrice delle soluzioni

La tabella seguente riporta come approcciare le diverse problematiche di sicurezza con MySQL. Nella tabella si fa riferimento alle funzionalita' presenti nella Community Edition (perche' e' di gran lunga la piu' utilizzata) nelle ultime versioni 5.7 e 8.0 [NdA che introduce nuove funzionalita' anche dal punto di vista di sicurezza]. Quando significativo si citeranno anche le versioni, l'Enterprise Edition ed i principali fork.
La matrice e' volutamente sintetica e riassuntiva. E' importante sottolineare che molte problematiche non possono essere solo risolte a livello di tecnologia ma richiedono un preciso processo aziendale. La tabella riporta se il DB fornisce un supporto per gestire la problematica, quanto il supporto e' completo e se sono necessari componenti esterni o opzionali.

# Problematica Supporto DB Opzioni, estensioni, strumenti esterni Note
ACDB Access Control Controllo accessi

Definizione dell'accesso ai dati ai soli utenti autorizzati e controllo di quando, dove e come i dati sono acceduti.

AC1No distinction between Application User and Schema Owner Full MySQL fornisce i GRANT SQL standard. Non sempre le applicazioni su MySQL separano bene tra i diversi ruoli ma il DB lo consentirebbe.
AC2 Application user credential not protected in the application server External Funzionalita' esterna rispetto all'RDBMS.
AC3 Developers use application user credential External Processo esterno all'RDBMS.
AC4 DBAs do not have personal accounts and use technical accounts External Processo esterno all'RDBMS, MySQL non presenta alcun vincolo per la creazione di utenze personali.
AC5 Technical accounts defined with a human algorithm and never changed External Processo esterno all'RDBMS.
AC6 End users have direct access to the DB bypassing the application External Processo esterno all'RDBMS. Con MySQL e' facile verificare gli accessi correnti e storici alla base dati.
AC7No lifecycle management for DB users Full MySQL gestisce la scadenza delle password.
AC8OS administrators can escalate their privileges to DBA Partial Le utenze di OS e del database sono separate con MySQL, ma un utente esperto puo' modificare la configurazione.
AC9DBAs have full access to users' data Partial Di norma i DBA hanno accesso a tutti i dati. Per evitarlo e' necessario implementare una crittografazione applicativa.
LGMonitoring / Blocking and Audit Controllo SQL

Analisi delle transazioni che avvengono sulla base dati ed visualizzazione le attivita' correnti e storiche.

LG1No preventive SQL controls Partial Con proxy esterni e' possibile implementare controlli preventivi sull'SQL. Sono disponibili linee guida per evitare l'SQL-injection.
LG2No or partial and inconsistent logs Full Il logging di MySQL e' migliorato nell'ultima versione e riporta gli eventi piu' significativi.
LG3Logs are not analyzed External Processo esterno al DB. E' tipicamente compito di un SIEM (Security Information and Event Management)...
LG4Logs are not managed External Processo esterno al DB. E' tipicamente compito di un SIEM...
LG5No DB user accountability Full MySQL fornisce la funzionalita' di Auditing.
LG6No end user accountability Full MySQL fornisce la funzionalita' di Auditing.
DPData Protection Protezione dati

Processi e controlli sulla trasmissione, sull'accesso e la memorizzazione delle informazioni per tutto il ciclo di vita dei dati.

DP1Applications do not encrypt External Processo esterno al DB. MySQL fornisce un ampio insieme di funzioni di crittografia.
DP2No datafile encryption Full L'Engine InnoDB fornisce la tablespace encryption.
DP3 No storage encryption External Processo esterno all'RDBMS. Su molti sistemi operativi e' una funzionalita' disponibile. Anche i sistemi di storage forniscono spesso tale funzionalita'.
DP4No network encryption Full MySQL supporta la crittografia delle trasmissioni e viene configurata automaticamente.
DP5No backup / export encryption External MySQL non fornisce la funzionalita' di crittografazione del backup ma questa puo' essere effettuata semplicemente con un comando esterno.
DP6Production data copied to development environments External Possono essere realizzati script ad hoc o utilizzati strumenti esterni.
DP7Unnecessary data are not hidden/masked Full Con viste ed opportuni GRANT da MySQL e' possibile mascherare i dati non necessari: la maggior difficolta' e' nell'analisi che richiede competenze sui dati/applicazioni e che spesso non viene eseguita.
SCSecure Configuration Configurazione sicura

Processi e controlli per garantire la corretta configurazione dei Database.

SC1Obsolete DB / OS releases Full Le release supportate sono ben note. La compatibilita' applicativa e' abbastanza semplice da mantenere.
SC2No DB / OS hardening Full Le impostazioni di default di MySQL sono generalmente sicure [NdA nell'ultima versione! Per le precedenti non era cosi]. Sono documentate le Best Practices sulla sicurezza.
SC3No patching Full MySQL emette aggiornamenti con cadenza trimestrale che e' fortemente consigliato applicare.
SC4 Poor SDLC production promotion and SoD External Processo esterno all'RDBMS (SDLC: Systems Development Life Cycle, SoD: Separation/Segregation of Duties). Il completo sistema di GRANT di MySQL fornisce tutto il supporto necessario.
SC5 No production user, privileges, db objects change control External Processo esterno all'RDBMS.

Dalla tabella e' chiaro che molti dei punti sono da gestire con processi o con strumenti esterni al Database. Quando la problematica riguarda il database il supporto fornito da MySQL e' sempre adeguato; in qualche caso e' opportuno l'utilizzo di tool esterni oppure dell'edizione Enterprise.
Nei prossimi capitoli vengono riportati maggiori dettagli su ciascuna delle soluzioni tecniche disponibili in MySQL.

DB Access Control

Per il principio del minimo privilegio (least privilege) vanno utilizzate le utenze con i diritti minori possibili per svolgere le diverse attivita'. Questo e' particolarmente importante per le utenze applicative che debbono svolgere tipicamente solo operazioni CRUD, a cui non servono i privilegi per operazioni di DDL e sono tipicamente maggiormente soggette ad attacchi e meno protette. E' quindi necessario che le utenze utilizzate dagli Application Server o dai Web Server non siano proprietarie dello schema dati.

Sono molteplici le soluzioni tecnologiche fornite da MySQL per quanto riguarda il controllo degli accessi:

Le altre problematiche riportate in questa categoria vengono risolte definendo ed applicando opportune policy di sicurezza.
Ad esempio non ci sono ragioni tecniche su MySQL per far utilizzare l'utenza applicativa agli sviluppatori negli ambienti di produzione. Una corretta definizione degli ambienti (eg. sviluppo, collaudo, produzione) e delle procedure per la messa in esercizio delle applicazioni e' necessaria per disporre di sistema sicuro nel suo complesso.

Monitoring / Blocking and Audit

Sono molteplici le soluzioni tecnologiche fornite da MySQL per quanto riguarda il monitoraggio delle attivita' correnti sulla base dati (eg. show processlist).
MySQL fornisce una vista completa delle attivita' svolte sulla base dati sui database performance_schema (5.5) e SYS (5.7).

Data protection

Sono molteplici le soluzioni tecnologiche fornite da MySQL per quanto riguarda la protezione dei dati:

Secure Configuration

In MySQL le versioni piu' recenti hanno configurazioni di default molto sicure ma non e' altrettanto vero per le versioni precedenti.

8.0

La nuova versione MySQL 8.0 [NdE 19 Aprile 2018] introduce parecchie novita' alcune delle quali significative per la sicurezza.

Finalmente sono disponibili i ROLES, utilizzati nel definire gli accessi alla base dati.
La password history impedisce che l'utente utilizzi sempre le stesse password, vanificando le politiche di expiration.
Il nuovo plugin caching_sha2_password utilizza un protocollo efficiente piu' sicuro nello scambio e per la memorizzazione della password. Anche se ci vorra' un po' di tempo prima che possa essere utilizzato appieno poiche' debbono essere aggiornate anche le librerie client...
Infine con dalla versione 8.0 e' possibile effettuare l'encryption dei Redo Log e degli Undo che in precedenza non potevano essere crittografati; viene arricchita cosi' la datafile encryption gia' presente nelle versioni precedenti.

Varie ed eventuali

Va sottolineato che, delle attivita' di messa in sicurezza evidenziate, solo alcune sono legate all’acquisto di nuovi prodotti. Spesso per risolvere la maggioranza delle problematiche e' sufficiente un buon uso della versione Community di MySQL e l'applicazione di adeguati processi aziendali, il tutto dopo una corretta e completa analisi di sicurezza.

Il riferimento ufficiale per la sicurezza di MySQL e' sul sito ufficiale che riporta anche indicazioni per la scrittura corretta delle applicazioni. Va riportato pero' che l'importanza e la complessita' della materia sono notevoli gli interventi di messa in sicurezza di MySQL vanno quindi approcciati con la necessaria competenza ed esperienza.

Tra gli strumenti utili per la raccolta delle configurazioni di sistema e dei dati prestazionali: ux2html (raccolta configurazione sistemi Unix/Linux), my2html (raccolta configurazione MySQL), MySAT (MySQL Security Assessment Tool), ...


Titolo: Risolvere gli errori di sicurezza sui database MySQL
Livello: Medio (2/5)
Data: 1 Ottobre 2017
Versione: 1.0.2 - 25 Maggio 2018
Autori: mail [AT] meo.bogliolo.name