La sicurezza dei database è in mano agli sviluppatori

Agli sviluppatori delle applicazioni che usano i database, ovviamente.

Dark Reading raccoglie in un articolo un decalogo di consigli per gli sviluppatori che vogliono mitigare i problemi di sicurezza delle applicazioni che utilizzano database (tipicamente SQL, ma non necessariamente).

Alcune norme sono ovvie e ne abbiamo parlato anche noi: la prima in assoluto è la SQL injection, molto più diffusa di quello che si possa credere. Basta, infatti, che un solo campo di un’intera applicazione non venga opportunamente sanificato per mettere a repentaglio la sicurezza dell’intero progetto.

Leggi tutto “La sicurezza dei database è in mano agli sviluppatori”

SQL injection

Questo articolo è per chi non sa cosa sia la SQL injection.

Con questo termine si identifica una classe di vulnerabilità dei software che consente ad un utente qualsiasi di aggirare i controlli del software e inviare direttamente al server comandi SQL.

Prima della diffusione dei server SQL i dati venivano archiviati e recuperati utilizzando funzioni di libreria del linguaggio di programmazione. Esisteva un comando/funzione del linguaggio per aprire un archivio di dati, uno per cercare un record, un altro per aggiornare i dati, un altro ancora per cancellarli e così via. Con questo sistema era di fatto impossibile portare attacchi tipo SQL injection perché i comandi relativi al trattamento dei dati erano parte del programma. In altre parole, le azioni che avevano come oggetto i dati erano cablate nel programma e non c’era modo di cambiarle se non cambiando il programma (e ricompilarlo).

La diffusione capillare dei server SQL ha cambiato le carte in tavola.

Leggi tutto “SQL injection”

Non è colpa degli hacker

Ultimamente ci sono stati molti episodi di attacchi informatici a vari siti, a partire dal noto caso di Sony, di cui credo si sia perso il conto dei siti compromessi.

The Hacker News segnala un errore nel sito di CNN che sono riuscito a riprodurre senza problemi.

Se si visita l’URL http://cgi.money.cnn.com/tools/collegecost/collegecost.jsp?college_id='7966 (notare l’apicino) esce il bel messaggio d’errore

ERROR!
SELECT G.NAME, G.STATE_CODE, G.CITY, E.TUIT_OVERALL_FT_D, E.TUIT_AREA_FT_D, E.TUIT_STATE_FT_D, E.TUIT_NRES_FT_D, E.FEES_FT_D, E.RM_BD_D, E.RM_ONLY_D FROM COLLEGE_EXPENSES E, COLLEGE_GENERAL G WHERE G.INUN_ID = '7966 AND G.INUN_ID = E.INUN_ID (+) ORDER BY E.ACAD_YR DESC
java.sql.SQLException: ORA-01756: quoted string not properly terminated

e la videata riprodotta a qui sopra.

Questo non è un sofisticato attacco di un esperto programmatore contro un sito dotato di tutte le normali difese che il buon senso richiede.

Si tratta, invece, del più banale degli esempi di SQL Injection, così ovvio che è citato nella Wikipedia.

Come narra la cronaca, la maggior parte degli attacchi contro vari siti ha avuto successo non perché portati da gente esperta, ma perché c’era una porta lasciata colpevolmente aperta che attendeva solamente che qualcuno entrasse.

Un’ultima cosa:  visualizzare all’utente trace e dettaglio degli errori in un ambiente di produzione non è la più furba delle idee.

mysql.com e sun.com attaccati con una MySQL injection

Gli host mysql.com, www.reman.sun.com e www.ibb.sun.com sono stati attaccati con successo con una blind SQL injection.

Un post sulla lista Full Disclosure rivela l’elenco delle tabelle di alcuni database e il dump di mysql.user di mysql.com

Una pagina su BayWorlds rivela alcuni dati estratti attraverso l’attacco agli host di sun.com.