MariaDB audit plugin

Questa paginetta riporta i passi per l'installazione e configurazione dell'audit plugin di MariaDB per MySQL (utilizzabile sia per MySQL Community che per MariaDB).

La registrazione degli accessi e delle attivita' (AUDIT) e' importante sia per ragioni di sicurezza che per ottemperare alle leggi ed ai regolamenti sulla gestione delle basi dati.

Anche MySQL ha la funzionalita' di audit ed in questo documento vediamo come installare ed utilizzare il plugin di MariaDB per la registrazione delle attivita'.

Nel seguito sono riportate alcune informazioni di interesse organizzate in paragrafi specifici: Introduzione, Installazione, Configurazione, Esempi, Obblighi di legge, Varie ed eventuali.

Introduzione

La rilevazione delle attivita' svolte su MySQL tradizionalmente veniva svolta attivando il general log che registra ogni operazione. Si abilita con
 SET GLOBAL general_log = 'ON';
e disabilita con
 SET GLOBAL general_log = 'OFF';
Tuttavia la grande mole di dati generati ed il notevole impatto sulle prestazioni rendevano tale modalita' di raccolta utilizzabile solo per periodi di tempo molto limitati nella maggior parte dei casi [NdA qualche secondo su DB particolarmente attivi].

Dalla versione 5.5 di MySQL e' disponibile l'Audit Plugin API che viene utilizzato per raccogliere le attivita' svolte sul DB.
L'MySQL Enterprise Audit utilizza tale API ed e' inclusa nella MySQL Enterprise Edition, ma non fa parte della Community Edition.

MariaDB e' un fork del diffusissimo database MySQL ed e' presente su molte distribuzioni Linux come database di default.
Tra le molte funzionalita' presenti vi e' quella del plugin di AUDIT che e' una implementazione Open Source. Il plugin di MariaDB puo' essere utilizzato su tutte le release MySQL e sui fork (MariaDB e Percona).

In questo documento vediamo come configurare l'audit plugin di MariaDB su MySQL Community Edition [NdE che e' l'edizione piu' utilizzata]. Le versioni di riferimento sono quelle di produzione piu' recenti del plugin [NdA 1.4], di MariaDB [NdA 10.2] e di MySQL [NdA 5.7].

Installazione

Il plugin di AUDIT fa parte dei diversi plugin contenuti nella distribuzione di MariaDB. Basta scaricare il SW corrispondente alla propria piattaforma dal sito ufficiale MariaDB ed estrarre il file server_audit.so contenuto nella directory plugin.

Il file va copiato, con le permission corrette, nella directory dei plugin MySQL. Per individuarla basta il comando show variables like '%plugin_dir%'; per un CentOS 7.3 e MySQL 5.7 si tratta di /usr/lib64/mysql/plugin. Per installare il plugin il comando e':

mysql> install plugin server_audit soname 'server_audit.so';

Il comando carica la libreria e registra il plugin in mysql.plugin: verra' attivato automaticamente in tutti i sucessivi avvii di MySQL. Se il comando precedente non da errori e' possibile verificare se l'installazione e' avvenuta correttamente con:

mysql> show plugins; +----------------------------+----------+--------------------+-----------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+-----------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | ... | SERVER_AUDIT | ACTIVE | AUDIT | server_audit.so | GPL | +----------------------------+----------+--------------------+-----------------+---------+ mysql> show variables like '%audit%'; +-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | server_audit_events | | | server_audit_excl_users | | | server_audit_file_path | server_audit.log | | server_audit_file_rotate_now | OFF | | server_audit_file_rotate_size | 1000000 | | server_audit_file_rotations | 9 | | server_audit_incl_users | | | server_audit_loc_info | | | server_audit_logging | OFF | | server_audit_mode | 1 | | server_audit_output_type | file | | server_audit_query_log_limit | 1024 | | server_audit_syslog_facility | LOG_USER | | server_audit_syslog_ident | mysql-server_auditing | | server_audit_syslog_info | | | server_audit_syslog_priority | LOG_INFO | +-------------------------------+-----------------------+ 16 rows in set (0.00 sec)

Siamo pronti a configurare il Plugin!

Configurazione

La configurazione di base del plugin e' molto semplice e si effettua impostando i seguenti parametri:

set global server_audit_file_path='/u1/mysql/server_audit.log';
set global server_audit_events='CONNECT,QUERY_DCL';
set global server_audit_incl_users='root';

set global server_audit_logging=on;

I parametri utili per la personalizzazione delle varie opzioni sono diversi... vediamo in dettaglio i piu' significativi!
server_audit_file_path ovviamente e' il path del file di auditing; server_audit_events specifica la lista di eventi da registrare; i valori ammessi sono: CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML, QUERY_DCL; server_audit_incl_users e server_audit_excl_users permettono di includere/escludere utenti dall'auditing, l'evento di CONNECT registra comunque tutte le utenze; server_audit_output_type consente di specificare il tipo di logging: file o syslog; global server_audit_logging abilita o disabilita il logging.

Esempi

L'utilizzo del plugin e' effettivamente banale.

Cosa succede se effettuiamo una connessione errata e, dopo esserci connessi correttamente, creiamo un nuovo utente con:

create user if not exists 'pippo'@'%' identified by 'ciao'; drop user if exists pippo;

Ecco cosa troveremo:

# tail server_audit.log
20170621 11:56:29,tst-mysql57,root,localhost,66170,0,FAILED_CONNECT,,,1045

20170621 11:57:38,tst-mysql57,root,localhost,66172,0,CONNECT,,,0
20170621 11:57:42,tst-mysql57,root,localhost,66172,35,QUERY,,'CREATE USER IF NOT EXISTS \'pippo\'@\'%\' IDENTIFIED WITH \'mysql_native_password\' AS \'*F44445443BB93ED07F5FAB7744B2FCE47021238F\'',0
20170621 11:57:42,tst-mysql57,root,localhost,66172,36,QUERY,,'drop user if exists pippo',0
20170621 11:57:45,tst-mysql57,root,localhost,66172,0,DISCONNECT,,,0

Il file di log contiene i seguenti campi: timestamp,serverhost,username,host,connectionid, queryid,operation,database,object,retcode.

Per default con l'output su file viene utilizzata la log rotation (fino a 9) basata sulla dimensione del file: naturalmente e' possibile modificare questa impostazione a seconda delle proprie esigenze.

Se si imposta il parametro server_audit_output_type=syslog l'output anziche su file viene inviato al syslog.

Per impedire che il plugin di audit venga disinstallato si possono aggiungere le seguenti direttive nel file my.cnf:

[mysqld]
plugin-load=server_audit.so
audit-log=FORCE_PLUS_PERMANENT

Il parametro server_audit_excl_users consente di escludere gli utenti trusted dall'auditing. E' molto utile per gli accessi applicativi massivi che non sarebbero significativi.

Questo plugin di audit non consente la definizione di filtri su oggetti specifici della base dati. Tuttavia e' sempre possibile utilizzare i trigger per questo tipo di necessita'.

Obblighi di legge

Ci sono diverse leggi e regolamenti che richiedono l'auditing sull'accesso ai dati...

La legge in vigore in Italia e' il codice in materia di protezione dei dati personali (d.lg. 30 giugno 2003, n. 196) nonche' il disciplinare tecnico in materia di misure minime di sicurezza di cui all'allegato B del medesimo codice. Tale legge inquadra in modo completo la materia ma, dal punto di vista pratico, il riferimento sono i provvedimenti del Garante. I dettagli sono riportati su questa pagina: in pratica dal 15 Dicembre 2009 vanno registrati tutti gli accessi amministrativi ai sistemi ed alle basi dati!

Inoltre il 27 aprile 2016 e' stato adottato il REGOLAMENTO (UE) 2016/679 DEL PARLAMENTO EUROPEO E DEL CONSIGLIO relativo alla protezione delle persone fisiche con riguardo al trattamento dei dati personali, nonche' alla libera circolazione di tali dati e che abroga la direttiva 95/46/CE (regolamento generale sulla protezione dei dati). Tale regolamento, generalmente riferito con l'acronimo inglese GDPR (General Data Protection Regulation) ha validita' di legge senza bisogno di essere approvato dal Parlamento Italiano ed entrera' in vigore il 25 Maggio 2018.
Il GDPR e' molto ampio (cfr. testo ufficiale) e prevede regole comuni per tutti i paese della comunita' europea, anzi ha validita' extraterritoriale quando i dati riguardano cittadini europei. Oltre all'inasprimento delle sanzioni con il GDPR cambia sopratutto la prospettiva d'insieme e richiede che la protezione dei dati faccia parte del progetto di sviluppo dei processi aziendali per i prodotti ed i servizi offerti dall'azienda.

Per le pubbliche amministrazioni (PA) l'AgID (Agenzia per l'Italia Digitale) ha pubblicato le linee guida da seguire [NdE 2016-04] ed e' stata quindi pubblicata la circolare 1/2017 del 17 marzo 2017 Misure minime di sicurezza informatica per la PA. Le linee gida prevedono tre livelli di attuazione; il livello minimo stabilisce i criteri di base ai quali ogni pubblica amministrazione deve essere conforme entro il 31 dicembre 2017.

Per quanto riguarda gli USA i principali obblighi sull'auditing riguardano:

E' importante sottolineare che i requisiti minimi richiesti dalle normative non si limitano all'audit... I risultati dell'audit vanno anche salvati in modo corretto e resi consultabili. Fondamentali sono anche una corretta definizione dei privilegi [NdE improntata al principio del minimo privilegio] e la crittografia [NdE sia sui dati che sulla loro trasmissione].
E' necessario procedere prima ad un assessment tecnico e funzionale della base dati e quindi a provvedere alla messa in sicurezza del database con tutti gli strumenti necessari, tra cui l'audit.

Varie ed eventuali

La documentazione ufficiale sul plugin descritto in questo documento si trova sul sito ufficiale MariaDB.

L'audit plugin di MariaDB non e' l'unico disponibile per MySQL. E' molto importante sottolineare che ve ne sono altri disponibili, ciascuno con un interessante insieme di caratteristiche:

Le MySQL Audit API sono pubbliche: in effetti e' possibile per chiunque abbia una buona competenza di linguaggio C scrivere un proprio plugin di audit. E' possibile... ma non e' cosi' semplice farlo bene!


Titolo: MariaDB audit plugin
Livello: Medio (2/5)
Data: 14 Febbraio 2017
Versione: 1.0.1 - 21 Giugno 2017
Autore: mail [AT] meo.bogliolo.name