[Daily Issue] Sql Injection, ASP classic, e la storia

Mi ricollego a questo post di Massimiliano riguardo gli ultimi attacchi di Sql Injection che stanno subendo un pò tutti.

Ricercando su goggle per 'www.bigadnet.com', vedrete subito una quantità di siti impressionante, tutti purtroppo sviluppati con il vecchio ASP 3.0. Molti, sempre purtroppo, riguardano siti istituzionali che fortunatamente sono stati già messi a posto, per ora. Se si conta che bigadnet è solo uno dei domini che si occupano di mandare in giro certe schifezze... a questo indirizzo trovate una lista aggiornata di altri domini.

Il meccanismo di injection è piuttosto semplice anche se raffinato: si concentrano sugli id numerici, quindi tutte le funzioni di controllo che siamo abituati ad avere sul vecchio ASP, se ne vanno a donne di facili costumi. Anche qualsiasi tag stripping, ovviamente, non funziona, visto che la stringa è encodata come ha dimostrato Massimiliano. Inoltre, l'attacco si scatena sulle querystring, che molti sviluppatori (sigh) sono abituati a considerare "sicure" (eh, tanto chi mai si metterà a giocare con le querystring?? eh? eh... :P).

Praticamente, al web server arriva una richiesta di questo genere:

pagina.asp?IdNumerico=888;DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST([..CUT della mappazza])--

Come ho detto prima, ne controllo apici ne tag stripping ci mettono a posto, quindi tutta la mappazza arriva bella diretta sul nostro db.
Gli attacchi sono di due tipi, uno che come ha mostrato massimiliano si "limita" a cambiare tutti i campi di un certo tipo aggiungendo la famosa stringa, e l'altro che oltre a questo crea un paio di tabelle temporanee e fa il dump del filesystem del SQL su tabella, che poi restituisce in output.

Il secondo problema si può facilmente risolvere configurando in maniera coerente gli accessi al database (niente sa, niente dbowner, niente di niente :D).
Per il primo problema, invece, l'unica soluzione reale è utilizzare stored procedures con parameters: una soluzione che nel 1999/2000 utilizzavano in due e che ora è un must-have.
Purtroppo riscrivere un intero sito utilizzando stored procedures può non essere semplicissimo, soprattutto in caso di ecommerce o applicativi complessi.
In questi casi una soluzione possibile è controllare ogni imput utilizzando regular expression (tipo regEx.Pattern = "[^0-9a-zA-Z]" per filtrare qualsiasi cosa non sia un numero o una lettera) o una lista di "bad words", inserendo per esempio "CAST", "VARCHAR", etc. Purtroppo, si corre il rischio di filtrare anche contenuti corretti, soprattutto in caso di CMS... li bisogna controllare di volta in volta il singolo caso, rimboccarsi le maniche e... convincere il cliente a migrare il sito del 1999 in ASP.NET!!!!! :D

P.S.: Si, ho scritto tutto questo perchè il piu vecchio applicativo residente sui miei server è stato ovviamente attaccato! Se qualcuno avesse dei problemi a ripulire il DB, mi sono fatto una consolle application che con sprezzo di select si occupa di girarsi tutti i campi e rimettere a posto le cose. Se a qualcuno serve, mi contatti: ovviamente non mi prendo responsabilità :P

Print | posted on sabato 21 giugno 2008 11.37

Comments on this post

# re: [Daily Issue] Sql Injection, ASP classic, e la storia

Requesting Gravatar...
Con ByUnique disintegrato e CalcioFlash in oblio, chi potrebbe mai essere? DDV?
Left by Andrea Saltarello on giu 21, 2008 2.51

# re: [Daily Issue] Sql Injection, ASP classic, e la storia

Requesting Gravatar...
Salve, dalla fine di maggio ho continui attacchi di Sql Injection al database. Ormai sono 3 volte che ripulisco manualmente il database che è piuttosto grande(sostituisco la stringa maligna con una stringa vuota) . Sono alla stremo. Sto cercando, anche dietro compenso, un procedura, magari in asp che esegua le query per individuare e pulire le tabelle e le colonne infette. Ho letto il tuo post, puoi aiutarmi? Ti ringrazio anticipatamente. Ciao Anna
Left by Anna De Faveri on giu 21, 2008 5.00

# re: [Daily Issue] Sql Injection, ASP classic, e la storia

Requesting Gravatar...
anche a me farebbe molto piacere ricevere il tuo script pulisci tabelle. Meglio prevenire che curare ma quando si deve curare e meglio avere gli strumenti giusti.
Left by Vincenzo on giu 22, 2008 11.56

# Re: [Daily Issue] Sql Injection, ASP classic, e la storia

Requesting Gravatar...
Anche qui da noi i vecchi siti fatti in ASP stanno subendo attacchi continui da tempo e il genere di attacchi è esattamente quello da te indicato.
Oltre ai controlli e alle soluzioni da te indicate vorrei citare una soluzione molto più semplice: un bel Cint o CLng sui parametri numerici della querystring con la gestione dell'errore eventuale.
Chiaramente il vero problema è fare la modifica su tutti i punti vulnerabili che spesso e volentieri sono parecchi.
Left by Alessandro Sorcinelli on giu 23, 2008 8.27

# re: [Daily Issue] Sql Injection, ASP classic, e la storia

Requesting Gravatar...
Ciao, anch'io ho avuto in questi giorni un attacco, su di un vecchio sito, che mi ha infestato completmanete il db di <script src=http://www.adsitelo.com/b.js> ecc. Ti chiedo se puoi, di farmi avere notizie sugli script "pulisci tabelle".
Ciao e grazie.
Left by Valerio on lug 06, 2008 11.30

Your comment:

 (will show your gravatar)
 
Please add 5 and 6 and type the answer here: