9 gennaio 2008

Exploit di massa mediante SQL injection

Sul sito dell'Internet Storm Center del SANS Institute si parla di un exploit di massa che ha infettato decine di migliaia di siti internet mediante la tecnica di SQL injection. Per chi non lo sapesse, questa tipologia di attacco colpisce le applicazioni web che per funzionare si appoggiano a un database e che consentono agli utenti di inserire dati (tipo login e password). Questi dati normalmente completano una query dinamica che viene inviata al database. Se l'input non viene validato un aggressore può inserire codice ad hoc nella query per compiere azioni non previste da chi ha sviluppato l'applicazione.

Dall'analisi del
Sans ISC risulta che l'attacco è simile a un altro già tentato lo scorso novembre, con risultati minori. Questa volta invece la SQL injection appare più sofisticata. In breve l'attacco:

  • individua siti internet vulnerabili ad attacchi di tipo SQL injection;
  • inserisce una stringa di attacco mascherata in esadecimale per evitare eventuali filtri su parole chiave (in linguaggio tecnico si parla di offuscamento) mediante un operatore CAST;

  • la stringa offuscata seleziona dalla tabella sysobjects tutte le righe corrispondenti a user table; scansiona questi oggetti alla ricerca del tipo varchar (stringa) ; per ognuno di questi oggetti esegue un comando UPDATE che aggiunge del codice che rimanda gli utenti dei siti compromessi a uno specifico indirizzo web (in una seconda ondata dell'attacco il sito risultava diverso, ma il codice è lo stesso);

  • il codice del sito di destinazione tenterà di sfruttare alcune vulnerabilità note dei browser degli utenti dirottati per installare sui loro pc un trojan di qualche genere.

L'attacco ha colpito solo SQL Server perché il codice maligno opera espressamente sulla tabella sysobjects di quel DBMS. In realtà avrebbe potuto avere effetti più generali se avesse sfruttato le viste ANSI standard information_schema, presenti in tutti i DBMS principali.

Come suggerisce Ryan Barrett sul suo Web Security Blog, le soluzioni da adottare sono due:
  1. filtrare l'operazione di CAST, o nella configurazione di Apache o con direttive apposite nei SQL firewall;

  2. modificare i propri siti web affinché tutti i dati in input nei form vengano regolarmente validati prima di essere passati in forma di stringa SQL al DMBS.

Nessun commento: