Di attacchi “SQL Injection” abbiamo spesso parlato. Anche nella classifica stilata da OWASP (ved. questa pagina), le cosiddette “injection flaws” sono al vertice tra i problemi che uno sviluppatore deve tenere in considerazione. E non è male nemmeno se l’utente normale sia consapevole dell’esistenza e della natura di simili minacce.
Da tempo molti siti web vengono “bersagliati” con l’aggiunta di codice nocivo – generalmente contenuto all’interno di IFRAME e spesso “offuscato” -. Un esempio di attacco “SQL Injection” è stato sferrato nelle scorse ore quando migliaia di siti web si sono ritrovati con un riferimento ad un JavaScript dannoso inserito nelle loro pagine. Un’indicazione della dimensione del problema è restituita da Google che, fino a qualche ora fa, segnalava decine di migliaia di siti Internet contenenti una traccia della medesima infezione.
Rammentiamo che si chiama “SQL injection” una particolare pratica di attacco che mira a colpire applicazioni web che si appoggiano a DBMS (ad esempio, Access, SQL Server, MySQL, Oracle e così via) per la memorizzazione e la gestione di dati. L’attacco si concretizza quando l’aggressore riesce ad inviare alla web application, semplicemente usando il browser, una query SQL arbitraria. Quando i dati ricevuti in ingresso dalla pagina web dinamica non vengono opportunamente filtrati, l’interrogazione SQL posta in input dall’aggressore – direttamente nell’URL richiamato da client -, potrebbe essere “agganciata” alla query legittima effettuata a livello server dall’applicazione web. I risultati possono essere drammatici: l’aggressore, nel caso in cui l’attacco vada a buon fine, può essere in grado di alterare dati memorizzati nel database, aggiungere informazioni maligne nelle pagine web dinamiche generate a partire dal contenuto della base dati, modificare username e password.
Come si evince in questa analisi (sconsigliamo di visitare i siti web infetti riportati nella pagina), gli aggressori hanno posto – in calce all’URL uno statement DECLARE anteponendovi i caratteri ';
. In questo modo è stato possibile chiudere la query precedente ed abbinare un’altra interrogazione (maligna) sfruttando la possibilità, da parte dei siti web basati ad esempio su SQL Server, di eseguire più query consecutive. Evidentemente l’ultimo parametro ricevuto in input dall’applicazione web non è stato adeguatamente filtrato in fase di sviluppo ed, inoltre, l’uso del DECLARE non è stato impedito nel caso dell’utente anonimo che si connette al sito web.
Effettuando più operazioni di decodifica del DECLARE si è potuto verificare come il recente attacco “di massa” effettui una visita iterativa a tutte le tabelle contenute nel database aggiungendo lo script maligno in coda ai dati già presenti. Ed ecco come, per un errore di programmazione, un malintenzionato può riuscire a scrivere all’interno di un database – pur non conoscendone la struttura e non disponendo, ovviamente, delle credenziali di accesso -.
Una volta condotto in porto l’attacco, le applicazioni web prese di mira – attingendo alla base dati ormai compromessa – hanno iniziato a proporre agli utenti collegati pagine contenenti il codice JavaScript malevolo.
Come spiega Sophos, il JavaScript maligno tenta il download automatico di una serie di componenti dannosi. Spesso, nel caso in cui l’utente non abbia provveduto ad applicare le patch critiche per evitare di esporsi a rischi, si verificherebbe un’immediata infezione del sistema in uso.