F-Secure: migliaia di siti infettati tramite SQL injection

di Fabio Gozzo, pubblicata il 29 Aprile 2008, alle 12:12 nel canale Sicurezza

“Secondo una ricerca della software house finlandese, sono oltre 500.000 i siti infettati tramite SQL injection. La causa principale delle infezioni? la scarsa qualità del codice sorgente dei siti”



Commenti (43)

Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - Info
Per contattare l'autore del pezzo, così da avere una risposta rapida, si prega di utilizzare l'email personale (vedere in alto sotto il titolo). Non è detto che una domanda diretta inserita nei commenti venga verificata in tempi rapidi. In alternativa contattare la redazione a questo indirizzo email.
Commento # 21 di: tomminno pubblicato il 29 Aprile 2008, 17:14
Originariamente inviato da: LNdemon
Scusami, ma da quello che hai detto, mi fa pensare che non conosci molto bene questo mondo.
Partiamo dal primo punto: ASP.NET è un linguaggio lato server mentre HTML e Javascript sono lato client. Quindi ASP.NET o meno, per sviluppare web, questi linguaggi li devi conoscere assolutamente.


Sembra quasi che sia te a non conoscere ASP.NET visto che potresti fare un intero sito senza mettere mano all'HTML.
Conosco diversi sviluppatori ASP.NET che non conoscono i tag HTML semplicemente perchè non li hanno mai usati (o non li usano più da anni) essendosi sempre rivolti ai controlli messi a disposizione da .NET.
Mentre non ne conosco nessuno che ne sia all'oscuro sviluppando in PHP.
E mi pare ovvio il perchè.

Le SQL Injection vengono grazie alla porca accortezza nel scrivere query SQL, query ( domande ) che saranno volte al database cotenente ( che contiene tutti i dati del sito ) per estrapolare/modificare/inserire/cancellare dati.
ASP.NET, PHP, JAVA, C ... Per usare un database che usa l'sql come query-engine, il conoscere come costruire queste domande ti è indispensabile e, se lo fai male, ecco che una possibile conseguenza possono essere le sql-injection.


L'SQL injection è dovuto alla non validazione dei parametri non dalla bontà della query sottostante.

E poi, scusami un attimo, ma sarebbe alquanto scorretto che esistesse un linguaggio che faccia tutto "da solo, senza alcuna conoscenza" come dici tu.
Perchè allora non ci sarebbe più possibilità agli sviluppatori di svolgere il proprio lavoro dopo tanti anni di sacrificio ad acquisire le sue conoscenze.
Ti piacerebbe che, tutto d'un tratto, uscisse un qualcosa che faccia in modo automatico il tuo lavoro e quindi, come molti altri, non ci sarebbe più bisogno di te ?


Per eseprienze e conoscenze professionali ho visto che un programmatore PHP è mediamente più preparato di uno ASP.NET per quanto riguarda la programmazione web.
Commento # 22 di: LNdemon pubblicato il 29 Aprile 2008, 17:22
Originariamente inviato da: tomminno
Sembra quasi che sia te a non conoscere ASP.NET visto che potresti fare un intero sito senza mettere mano all'HTML.
Conosco diversi sviluppatori ASP.NET che non conoscono i tag HTML semplicemente perchè non li hanno mai usati (o non li usano più da anni) essendosi sempre rivolti ai controlli messi a disposizione da .NET.
Mentre non ne conosco nessuno che ne sia all'oscuro sviluppando in PHP.
E mi pare ovvio il perchè.

E' proprio questo il problema ! Uno sviluppatore web dovrebbe conoscere l'html per principio !
E poi in ASP.NET chissà che codice pulito e validato che ne esce fuori utilizzando i controlli messi a disposizione
L'SQL injection è dovuto alla non validazione dei parametri non dalla bontà della query sottostante.

L'SQL Injection è dovuto alla bontà della query. Lo dice stesso la parola SQL Injection
Si va ad aggiungere alla query.
Per eseprienze e conoscenze professionali ho visto che un programmatore PHP è mediamente più preparato di uno ASP.NET per quanto riguarda la programmazione web.


Scusa una cosa, ma non riesco a capire tu per quale linguaggio sia a pro
Commento # 23 di: DevilsAdvocate pubblicato il 29 Aprile 2008, 18:00
Gente non litigate, è ovvio che se questo problema è sentito solo ed
esclusivamente da Microsoft IIS e non da MySQL/PostgreSQL un motivo c'è,
sia questo:

a) che IIS è vulnerabile oppure
b) che tutti gli "utenti" incapaci di scrivere codice robusto o proprio inetti scelgono Microsoft IIS e non MySQL/PostgreSQL .

Quale delle due sia, non fa poi tutta questa differenza

P.S.: ma se la maggior parte del codice vulnerabile viene "generata" da ASP.NET
invece che scritta a manina, non è possibile che invece la vulnerabilità stia lì???
Commento # 24 di: SuperSandro pubblicato il 29 Aprile 2008, 18:01
A proposito di ignoranza

Scusate, forse c'entra come un cavolo a merenda, ma vorrei avere una vostra conferma:

Gestisco il mio sito Internet interamente statico (cioè HTML puro), per di più con nomedominio.mio.personale (non di quelli gratuiti, per intenderci).

Domanda:

Dal momento che non ho inserito form di nessun tipo (al massimo qualche banalissimo script in Javascript per abbellimenti) rischio qualcosa?

Io spero proprio di no.

PS: è proprio il potenziale pericolo di inserimenti non autorizzati tramite banali form che mi ha finora suggerito di stare alla larga da cose che non conosco
Commento # 25 di: tomminno pubblicato il 29 Aprile 2008, 18:15
Originariamente inviato da: LNdemon
E' proprio questo il problema ! Uno sviluppatore web dovrebbe conoscere l'html per principio !


Mi trovi perfettamente d'accordo!

E poi in ASP.NET chissà che codice pulito e validato che ne esce fuori utilizzando i controlli messi a disposizione


Non per dire ma mi è capitato di dover mostrare una tabella in asp.net di 100 righe e di ritrovarmi una pagina di 180kB senza immagini
Simpaticamente ogni cella della tabella ha lo stile duplicato.

L'SQL Injection è dovuto alla bontà della query. Lo dice stesso la parola SQL Injection
Si va ad aggiungere alla query.


Per me bontà di una query indica che è scritta bene dal punto di vista dell'SQL (ricerche su chiave primaria o indici, evitare full join, ecc), non che qualcun altro ha sbagliato nel validare i parametri, perchè altrimenti nessuna query
è scritta bene visto che puoi sempre mettere in un parametro del codice iniettato.

Scusa una cosa, ma non riesco a capire tu per quale linguaggio sia a pro


Purtroppo per quello in cui lavoro di meno, ovvero PHP.
Commento # 26 di: tomminno pubblicato il 29 Aprile 2008, 18:22
Originariamente inviato da: DevilsAdvocate
Gente non litigate, è ovvio che se questo problema è sentito solo ed
esclusivamente da Microsoft IIS e non da MySQL/PostgreSQL un motivo c'è,
sia questo:


Paragonare un Web server con dei DBMS non è il massimo della correttezza non sono minimamente paragonabili

P.S.: ma se la maggior parte del codice vulnerabile viene "generata" da ASP.NET
invece che scritta a manina, non è possibile che invece la vulnerabilità stia lì???


Il problema è in come usi ASP.NET e nella conoscenza delle problematiche web di chi sviluppa.
Ovunque metti una textbox il cui valore finirà in una query hai un problema di sql injection.
Invece se usi il controllo login di asp.net non devi preoccuparti della validazione dei dati, è inclusa nel controllo stesso.
Poi spesso viene dimenticato il doppio controllo lato client e lato server, per cui in tante pagine trovi solo il validator javascript e niente lato server.

PHP ci mette una pezza con il magic quote e quindi fa da sè anche se non ci hai pensato.
Commento # 27 di: LNdemon pubblicato il 29 Aprile 2008, 18:24
Originariamente inviato da: tomminno
Per me bontà di una query indica che è scritta bene dal punto di vista dell'SQL (ricerche su chiave primaria o indici, evitare full join, ecc), non che qualcun altro ha sbagliato nel validare i parametri, perchè altrimenti nessuna query
è scritta bene visto che puoi sempre mettere in un parametro del codice iniettato.

Beh, io intendevo il modo in cui si passavano i valori alla stringa SQL da inviare, quindi stavamo ragionando su dua cose differenti =P
Purtroppo per quello in cui lavoro di meno, ovvero PHP.

[/QUOTE]
Scusami, non avevo compreso l'ironia dei primi post, pensavo stessi elogiando ASP.NET che mitico linguagigo di programmazione come fanno molti
Commento # 28 di: r.chiodaroli pubblicato il 29 Aprile 2008, 19:10
Precisazioni

Mi sembra opportuna fare alcune precisazioni in merito all'argomento:

1) Pulizia del codice HTML generato da ASP.NET: questo fenomeno era stato riscontrato nelle prime versioni (anni 2002 e 2003) mentre è stato ampiamente corretto e migliorato nelle seguenti (dal novebre 2005). Tra l'altro, il markup è di default XHTML 1.0 compliant e completamente integrato con CSS 2.1.

2) Eventuali bug di IIS: ecco il link di Secunia per IIS 6 (versione più diffusa e presente su Windows 2003 Server):

http://secunia.com/product/1438/

Riporto anche un post interessante sull'argomento, ricco anche di link e indagini:

http://feeds.feedburner.com/~r/blog...lite-acuta.aspx

In ultimo, vorrei invitare tutti a non sottovalure il problema, anche perché è una piaga largamente diffusa:
http://secunia.com/advisories/29965/
Commento # 29 di: sierrodc pubblicato il 29 Aprile 2008, 19:44
Mah...

rimane il fatto che secondo me:
- con asp.net perdo mooolto poco tempo per fare il rendering della pagina e impiego il tempo da altre parti.
- tutti i database sono affetti da sqlinjection! cosa vuol dire usare MySql o Oracle o altro...
- Non credo che tutti qui sul forum sono immuni da SqlInjection! Ricordate: Qualcuno ne sa sempre qualcosa di più di voi! quindi occhio...

Per rispondere al tipo "basta togliere i numeri e le lettere e basta" tramite regex beh... cosa fare se una si registra con il nome "Dell'acqua" ??? e password più strong no???

Secondo me tutti quelli che hanno scritto fino ad ora sottovalutano troppo il problema!
Commento # 30 di: sierrodc pubblicato il 29 Aprile 2008, 19:49
E poi...

Si certo, basta usare prodotti già fatti...
http://www.tomshw.it/news.php?newsid=13881

non dico altro. Gli utenti si sopravvalutano troppo, tanto quanto si lamentano!
« Pagina Precedente     Pagina Successiva »