GreenSQL: un reverse proxy contro gli attacchi SQL injection
by admin on Apr.29, 2009, under Linux, Sicurezza, Tools
Un attacco di tipo SQL injection consiste nell’inserimento (injection) di una particolare query SQL nei dati passati in input ad una applicazione da parte di un client allo scopo di provocare l’ esecuzione di comandi SQL predefiniti. Un exploit di tipo SQL injection se coronato da successo può rivelare dati sensibili da un database, modificarli, eseguire operazioni amministrative sul database (come uno shutdown od un backup), e talvolta anche impartire comandi al sistema operativo sottostante. GreenSQL è un database firewall Open Source utilizzabile per proteggere le basi di dati da attacchi di tipo SQL injection, operando come un proxy per comandi SQL, e con integrato il supporto per MySQL.
La sua logica operativa si basa sulla valutazione dei comandi SQL, sia utilizzando una matrice di indici di rischio, sia bloccando comandi amministrativi del db (DROP, CREATE, etc).
GreenSQL opera come un reverse proxy per le connessioni MySQL. Vale a dire che invece del server MySQL, le applicazioni si connettono al server GreenSQL, che analizzerà le queries SQL e le inoltrerà al server MySQL di back-end.
L’immagine seguente descrive l’intero processo.

GreenSQL chiama il reale database server per fargli eseguire i comandi SQL e la web application si connette al server GreenSQL come se fosse il reale database server.
GreenSQL può venire installato insieme al database server sullo stesso computer oppure può venire usato come server separato.
Per default GreenSQL si pone in ascolto sulla porta locale 127.0.0.1:3305 redirigendo le richieste SQL a 127.0.0.1:3306 (quella di default per MySQL).
Tali impostazioni possono essere modificate utilizzando GreenSQL Console, disponibile in un tarball distinto.
GreenSQL db firewall può venire impiegato in una varietà di modi:
- Simulation Mode (database IDS)
- Blocco Comandi Sospetti (database IPS)
- Learning mode
- Protezione attive da queries sconosciute (db firewall)
Durante il Simulation Mode nulla viene effettivamente bloccato e GreenSQL opera come un IDS (Intrusion Detection System).
Durante questa fase viene fatto uso del “risk scoring matrix engine” per rilevare queries sospette e notificare la cosa all’ amministratore del database tramite la console di gestione (GreenSQL Management Console).
Quando il sistema viene configurato per bloccare comandi sospetti utilizza il proprio motore euristico per rilevare le queries “illegali” e bloccarle automaticamente.
Questo di fatto lo trasforma in un database IPS (IPS sta per Intrusion Prevention System).
Se la query dovesse venire considerata illegale, viene controllata una whitelist.
Nel caso in cui fosse presente nella whitelist, verrà rediretta normalmente all’autentico server MySQL.
In caso contrario verrà restituito alla applicazione un result set vuoto.
Occorre tenere presente che tale modalità può talvolta generare falsi positivi o falsi negativi.
Per eliminare gli svantaggi dei metodi precedenti è raccomandabile abilitare il Learning Mode ed una volta trascorso il periodo di apprendimento passare alla modalità di Protezione Attiva da queries sconosciute.
Durante il learning mode tutte le queries vengono automaticamente aggiunte alla whitelist.
Si tratta in sostanza di una modalità da “database firewall”.
GreenSQL rileva le queries sospette usando diversi metodi:
- Intercetta comandi SQL di tipo amministrativo o sensibile.
- Calcola il rischio che la query comporta.
GreenSQL usa un meccanismo di “pattern matching” per trovare comandi considerati “illegali”, un sottosistema signature-based simile a quello che impiegano gli antivirus.
Per esempio, vengono considerati “illegali” i seguenti comandi:
- comandi amministrativi del database;
- comandi che cercano di alterare la struttura del db;
- comandi utilizzati per accedere a files di sistema.
Gli amministratori possono inoltre “approvare” una query “illegale” aggiungendola alla whitelist o alterando il file di configurazione con una lista di patterns.
Per ogni query GreenSQL calcola il fattore di rischio. Sostanzialmente si tratta di un sottosistema per il rilevamento di anomalie.
Una volta calcolato il rischio GreenSQL può bloccare la query o limitarsi a generare un messaggio di avvertimento (dipende dalla modalità operativa assunta).
Viene utilizzato un certo numero di criteri euristici per il calcolo del rischio. Per esempio, incrementano il coefficiente di rischio:
- Accesso a tabelle contenenti dati sensibili (users, accounts, info_finanziarie)
- Commenti inseriti nei comandi SQL
- Uso di una stringa vuota come password
- Ritrovamento del token “or” all’interno della query
- Utilizzo di espressioni SQL che restituisce sempre true (SQL tautology)
- Comparazione di valori costanti (SQL tautology)
Nella ricerca di anomalie, GreenSQL utilizza il proprio analizzatore lessicale di linguaggio SQL per trovare i tokens SQL. Quando GreenSQL determina che una query dovrebbe essere bloccata, genererà un resultset vuoto restituendolo alla applicazione richiedente in modo che possa continuare regolarmente. GreenSQL viene distribuito sotto licenza GPL. Lo si può ottenere da qui. Riguardo all’ installazione è disponibile un certo numero di opzioni, ovvero:
- Utilizzare un package specifico, disponibile per molte distribuzioni
- Generare un package installabile personale.
- Installazione manuale: compilando e installando da sorgente.
Se la propria distribuzione preferita non fosse elencata nella pagina di download del progetto, si può tentare di generare un package adhoc per la propria piattaforma, utilizzando uno speciale script in grado di effettuare automaticamente tutti i passaggi necessari per l’allestimento di un package per le distribuzioni Linux più diffuse. Automaticamente vengono generati packages di tipo deb/rpm/bsd. Per procedere:
# wget http://www.greensql.net/download/greensql-fw-X.X.X.tar.gz # tar -xzvf greensql-fw-X.X.X.tar.gz # cd greensql-fw # ./build.sh L’ultimo script (build.sh) costruisce il package specifico per l’ OS. Una volta installato il package appena creato, occorre installare un db di configurazione per GreenSQL:
# greensql-create-db.sh Il passo seguente consiste nell’avviare l’ applicazione, cosa che può essere fatta dando il comando seguente come utente root:
# /etc/init.d/greensql-fw start A scopo di troubleshooting si può esaminare il file di log:
# tail -f /var/log/greensql.log Prima di installare la applicazione, occorre compilarla:
# tar -xzvf greensql-fw-X.X.X.tar.gz # cd greensql-fw # ./build.sh Vi sono ancora dei passaggi da effettuare per terminare l’installazione. Essi sono:
- Creare un utente dedicato per il servizio greensql
- Creare in MySQL il db config e quello user.
- Impostare i files di configurazione.
- Impostare il file di log.
- Configurare gli scripts di start up
Allo scopo di create sia un gruppo che uno user greensql:
# groupadd greensql # useradd -M -g greensql -s /dev/null greensql In alternativa si possono eseguire i seguenti comandi:
# cd scripts/ # ./setup_user.sh Per creare automaticamente il database di configurazione:
# cd scripts/ # ./greensql-create-db.sh Lo script di start up di GreenSQL si aspetta di trovare i files di configurazione nella directory /etc/greensql/ Basta copiare i files presenti nella sottodirectory ./conf in /etc/greensql:
# mkdir -p /etc/greensql # cp ./conf/* /etc/greensql/ -r # chown greensql:greensql /etc/greensql -R # chmod 700 /etc/greensql In alternativa, si può eseguire lo script setup_conf.sh, presente nelle directory degli scripts directory.
# cd scripts/ # ./setup_conf.sh Il passo successivo consiste nella modifica del file /etc/greensql/greensql.conf specificando dbname, server, porta, user e password corretti. Per default greensql prevede un log file in /var/log/greensql.log E’ opportuna che la rotazione del log file venga abilitata. Lo si fa con i seguenti comandi:
# touch /var/log/greensql.log # chown greensql:greensql /var/log/greensql.log # chmod 600 /var/log/greensql.log # cp scripts/greensql.rotate /etc/logrotate.d/greensql In alternativa si può eseguire lo script setup_log.sh, presente nella sottodirectory scripts. Come passo finale c’è bisogno di copiare il binario greensql-fw nella directory /usr/sbin/ oppure nella /sbin/ e di copiare lo script di inizializzazione del servizio greensql nella directory /etc/init.d/:
# cp greensql-fw /usr/sbin/ # cp scripts/rc.greensql /etc/init.d/greensql Una alternativa consiste nel mandare in esecuzione lo script setup_binary.sh, anch’esso presente nella sottodirectory scripts. Dopodiché è finalmente possibile avviare l’ applicazione col comando seguente:
# /etc/init.d/greensql start e terminarla con:
# /etc/init.d/greensql stop Per un controllo granulare del funzionamento:
# tail -f /var/log/greensql.log

