X

MySQL illegale in Italia da Luglio 2009

Riporto con piacere l’appello di My B Side riguardo il problema della privacy riferito all’utilizzo di DBMS.

Il Garante ha scritto nelle sue FAQ che

19) La registrazione degli accessi è relativa al sistema operativo o anche ai DBMS?
Tra gli accessi logici a sistemi e archivi elettronici sono comprese le autenticazioni nei confronti dei
data base management systems (DBMS), che vanno registrate.
e
Le registrazioni (
access log) devono avere caratteristiche di completezza, inalterabilità e possibilità di verifica della loro integrità adeguate al raggiungimento dello scopo di verifica per cui sono richieste.

Questo significa, per chi ha un mysql server, che bisogna aggiungere a my.cnf
log = /var/log/mysql/mysql.log
Il problema qual è ? Il problema è che così facendo mysql logga tutto: connect, query, quit

Time Id Command Argument
090611 21:33:43 1 Connect debian-sys-maint@localhost on
1 Quit
2 Connect debian-sys-maint@localhost on
2 Quit
3 Connect debian-sys-maint@localhost on
3 Query show /*!40003 GLOBAL */ variables
3 Quit
4 Connect debian-sys-maint@localhost on mysql
4 Query select @@version_comment limit 1
4 Query show variables like ‘datadir’
4 Quit
5 Connect debian-sys-maint@localhost on
5 Query select @@version_comment limit 1
5 Query SELECT count(*) FROM mysql.user WHERE user=’root’ and password=’password’
5 Quit
6 Connect debian-sys-maint@localhost on
6 Query select @@version_comment limit 1
6 Query select concat(”select count(*) into @discard from `”,
TABLE_SCHEMA, “`.`”, TABLE_NAME, “`”)
from information_schema.TABLES where ENGINE=”MyISAM”

Ovviamente l’installazione di un semplice cms tipo joomla/drupal/wordpress implica una serie di query ben maggiori e quindi overhead diffusi, memoria sprecata, I/O ridotto, cpu più carica. Non parliamo poi del requisito relativo all’integrità dei log… mysql scrive su un file di testo quindi pure qui direi che non ci siamo.
Una grossa azienda non avrà problemi ma una piccola azienda, magari una start-up, dovrà farsi carico di questi COSTI maggiori e in generale i responsabili IT saranno responsabili penalmente di ciò.
Le soluzioni ?
1) Migrare verso altri prodotti con relativi costi e tempo sprecato.
2) Lasciare tutto così sperando di non esser beccati.
3) Usare qualche prodotto di terze parti che comunque non può coprire tutti i requisiti di questa legge.
4) Migrare il proprio portale verso un cms che utilizzi file di testo al posto di database tipo FlatNuke
..

Io vorrei tanto sapere chi è stato consultato per emanare questa norma e queste FAQ ma credo che non lo saprò mai per via della… privacy !

Non posso che appoggiare le perplessità di questo utilizzatore di DBMS di MySQL in particolare (il problema si pone a prescindere dal tipo di db).
E’ proprio vero che un certo garantismo arruffone non garantisce proprio nessuno.

Invito i colleghi informatici e gli utilizzatori a proporre soluzioni e iniziative.

Link: MySQL illegale in Italia da Luglio 2009

Sergio Gandrus: Da febbraio 2024 lavoro come CTO presso Deva Connection Il mio stack è PHP/MySQL/Git/Docker. Lavoro con Agile (Scrum) e utilizzo principalmente AWS come cloud provider. Sono papà e marito. Nel tempo libero mi piace leggere, il buon vino e viaggiare.

View Comments (17)

  • Per me la cosa non ha senso. Nel caso dei vari cms/crm/etc, l'accesso al database non e' effettuato da parte dell'utente finale, ma da parte del framework del sito, quindi e' un processo interno del sistema.
    Altrimenti, con la stessa logica, bisognerebbe loggare:
    - Gli accessi al pam/ldap/qualsiasi altro backend di autenticazione usato dal server ftp
    - Gli accessi ai diversi db usati dai vari moduli di spamassassin (bayes, stats)
    - Gli accessi al db da vpopmail
    - Gli accessi all'authdaemon di courier
    - etc.
    E poi come la mettiamo con gli utenti windows server che si collegano ad un db access attraverso odbc? O quelli di linux che si collegano a pervasive via iodbc?

    Quindi, a parte le difficolta tecniche, sospetterei che il log di accesso al dbms serve solo quando l'utente finale lavora direttamente sul database (che non e' un caso raro, se usciamo dal contesto web).

  • Ad ogni modo, se si dovesse implementare il log degli accessi su mysql, non sarebbe niente di difficile.
    Basta attivarlo come spiegato nell'articolo, fare un piccolo script che estragga solo le righe rilevanti, lasciando stare le query, e schedularlo. Ovviamente si possono anche zippare per la questione spazio. Il tutto in 10 min di lavoro da parte di un tecnico competente.

  • @Bubi: con questa norma quando l'amministratore di sistema/dba si collega ad un database deve essere registrato su un "access log" il suo collegamento e il relativo quit. Non deve essere loggato il collegamento "applicativo" (punto 22 delle faq). Inoltre la soluzione proposta da te (lo script) non ti permette d'avere quelle caratteristiche di "completezza, inalterabilità e possibilità di verifica della loro integrità" perchè vai ad alterare o ad estrarre una parte dei log originati dal dbms.

  • @MyBSide, i p.10, 11, 12 del faq ti contraddicono. Riporto qui la parte piu' importante:
    Comunque è sempre possibile effettuare un'estrazione o un filtraggio dei logfiles al fine di selezionare i soli dati pertinenti agli AdS.

  • @Bubi: mmm quindi tu dici sostanzialmente di abilitare il logging, poi fare un rotatelog, usare uno script con grep | awk | sed | ecc... girare tutto su un altro file, firmarlo digitalmente e siamo a posto ?

    Però... mmm non va in contrasto con il punto 16 ?


    La raccolta dei log serve per verificare anomalie nella frequenza degli accessi e nelle loro modalità (orari, durata, sistemi cui si è fatto accesso…). L'analisi dei log può essere compresa tra i criteri di valutazione dell'operato degli amministratori di sistema.

    Se io amministratore faccio uno script che mi estrae dei dati da un log... volendo posso anche non metterci dentro un accesso che non voglio venga loggato, no ?
    Forse non ho capito io o forse si è espresso male il garante ma per me i concetti di inalterabilità e integrità vanno in contrasto con un'estrapolazione (fatta con uno script o a mano)...

    Infine il punto nr. 10 lo *interpreto* come: in caso di richiesta da parte dell'autorità, io devo fornire i dati d'accesso al database, nel caso in cui il file di quel giorno sia troppo grande allora posso fornire solo un estratto ma il log di per sè non deve subire alterazioni e deve essere sempre possibile verificarne l'integrità.

    Cmq grazie per il tuo punto di vista, fammi sapere che ne penso del mio ;)

  • @MyBSide, naturalmente non posso avere la certezza che il mio punto di vista sia quello giusto, e lo stesso vale per il tuo. E cmq, vista l'assurdità del provvedimento stesso, non mi stupisce il fatto che vi siano delle parti interpretabili in diversi modi.
    Quindi parlando di contrasti, personalmente considero l'intera iniziativa come un contrasto con la realtà; l'amministratore di sistema, sopratutto se è unico, potrà sempre manomettere il log di qualsiasi cosa. Mi chiedo come mai sia nata l'idea, magari il garante o chi per lui, avrà visto un sistemista aggirarsi per i corridoi indossando la famosa maglietta "i read your mail" :-)

    Tornando alla parte tecnica, io non vedo altre soluzioni tranne il filtraggio dal file. MySQL non supporta i trigger sui SELECT, e non esiste la possibilità di loggare solo le connessioni. Dalla versione 5.1.qualcosa, dovrebbero aver implementato la possibilità di scrivere i log in una tabella e non su file, cosa che faciliterebbe il filtraggio ma aumenterebbe l'overhead. Ovviamente si potrebbe modificare il sorgente (in caso di installazioni compilate direttamente sulla macchina), ma ciò renderebbe difficile/richiederebbe più tempo per aggiornare in futuro il software.
    Oppure si potrebbe utilizzare un trucco, implementare il log al livello application logic. Tipo il root potrebbe connettersi non direttamente con un client, ma con un wrapper che scriva un log e faccia poi partire il client. Ma questo potrebbe andare in contrasto con qualche punto del provvedimento.

    Io penso che ignorerò tutta questa assurdità. Ho appena dato un occhiata alle statistiche di uno dei server più carichi (hosting web), sono ~250 query al secondo. Quindi si tratta di più di 20 mln al giorno e più di mezzo miliardo al mese. Aldilà del filtraggio successivo, trovo criminale loggare tutto questo, anche se la macchina (multiprocessore/multicore/raid) reggerebbe.
    E poi, di norma uso phpmyadmin per fare qualsiasi cosa su mysql, quindi in questo caso andrebbe loggato (lo fa già apache) il mio accesso al phpmyadmin, perché la parte phpmyadmin->mysqld potrebbe essere classificabile come un "collegamento applicativo" :-)

  • @Bubi: beh sull'assurdità siamo d'accordo credo :) Il problema è che tanti faranno così. Tanti... almeno quelli che trattano dati sensibili + mysql. Io al posto d'usare phpmyadmin userò cmq "l'applicazione mysql" (virgolettata stile laserone di Austin Powers) e quindi rientrerò pure io nel “collegamento applicativo” ;)

    Il vero casino però è che tu fai hosting web e se uno dei tuoi clienti vorrà trattare dati sensibili con il tuo mysql...

    Mboh facci sapere nel caso :(
    Grazie cmq per la risposta ! Ehehe

  • Ah per la cronaca... è stato rilasciato ieri

    Zen Cart 1.3.8 Remote SQL Execution Exploit

    Pensate che bello quando uno lavora, viene loggato il suo accesso e "certificato" mentre da fuori accedono al db e magari fanno delle frodi...

    In questo caso un colpevole certo esiste...

  • @MyBSide, normalmente nei contratti firmati dai clienti, ci sono diverse clausole liberatorie sui dati gestiti, che servono per parare le chiappe al hoster, quindi la situazione è meno incasinata di quanto potrebbe sembrare :-)

    Per quanto riguarda il caso dei software open bucati, ci sono due casi: se lo installa il hoster, e non lo aggiorna in tempo/non limita i danni, la colpa e' appunto del hoster, ed e' giusto che sia cosi'. Se invece e' il cliente ad installarsi qualcosa e viene hackato, sono anche cavoli suoi :-) .

    Se vogliamo continuare a fare altri esempi di quanto sia assurda la questione circa il salvataggio degli access log, ecco un altro: Io ho la workstation in ufficio sempre accesa e con le sessioni ssh, verso i server in datacenter, sempre attive. Fino a qualche raro reboot. Quindi il /var/log/secure sui server, con una decina di connect all'anno, e' sicuramente molto utile per l'audit...