SQL Injection

La SQL injection è una tecnica di code injection che aggredisce applicazioni web facenti utilizzo di un database SQL: andando ad inserire frammenti malevoli di codice SQL all’interno di campi di input si va modificare il comportamento delle query sul database all’insaputa dello sviluppatore.
La SQL injection sfrutta, nella maggioranza dei casi, vulnerabilità del codice dell’applicazione, come: una mancata validazione degli input, un mancato filtraggio dei dati mandati da un client al server, oppure una costruzione errata di query all’interno della nostra applicazione, con parametri non fortemente tipizzati.

Il suo utilizzo è, per quanto appena detto, spesso veicolato da applicazioni web, ma in realtà può essere usato per attaccare qualsiasi tipo di database SQL.
Questa tecnica è stata considerata da Open Web Application Security Project una delle 10 maggiori vulnerabilità delle applicazioni web nel 2007 e nel 2010, mentre dal 2013 ad oggi è stato considerato il numero uno degli attacchi sulla OWASP top 10.
Il “primato” è dovuto sostanzialmente a 3 fattori:

  • Facilità di identificazione: Quasi tutte le fonti input di dati possono essere un vettore di iniezione. Capire l’effettiva vulnerabilità, come vedremo successivamente, è molto semplice e rapido.
  • Facilità di sfruttamento: Basta una basilare conoscenza di SQL o l’utilizzo di numerosi tool gratuiti reperibili in rete per poter effettuare un attacco.
  • Pericolosità: varia a seconda del business dell’applicazione ma, in linea generale, la manomissione, perdita o divulgazione dei dati presenti nel nostro DB è uno dei peggiori scenari a cui potremmo dover far fronte.

Negli ultimi anni alcuni attacchi di questo tipo dimostratosi particolarmente gravi hanno messo in luce come, pur avendo a disposizione strumenti sempre più avanzati per ovviare a tale vulnerabilità, tantissimi software tuttora non utilizzino soluzioni allo stato dell’arte per garantire sicurezza sotto questo aspetto.
Come detto precedentemente, una delle principali fonti di preoccupazione verso un attacco SQL Injection è la sua pericolosità e di seguito sono riportati gli ambiti in cui un attacco come questo può agire:

  • Confidenzialità: informazioni sensibili potrebbero entrare in possesso del soggetto attaccante non autorizzato. Questo può avvenire qualora, oltre all’essere stati attaccati in maniera efficace, non avessimo adottato efficaci algoritmi di criptaggio permettendo così all’attaccante di avere le informazioni in un formato intelligibile.
  • Disponibilità: l’attacco potrebbe rendere il nostro servizio non utilizzabile (a seconda dell’entità ed alla tipologia dell’attacco stesso). In questa casistica rientrano gli attacchi DoS, dove si fanno esaurire deliberatamente le risorse di un sistema informatico fino a renderlo non più in grado di erogare il servizio ai client. Esempi possono essere script che effettuano inserimenti o update massivi di dati, “lock” su tabelle, o query molto dispendiose come SELECT su tabelle molto grandi.
  • Integrità: rientra in questa casistica l’attacco che porta alla manomissione (inserimento, modifica, cancellazione) dei dati presenti sul nostro database. A seconda del tipo di business dell’applicazione, questa situazione spesso può comportare anche una mancata disponibilità del servizio stesso poiché si è costretti a metterlo offline fino ad un restore completo di dati affidabili.

Prossima pagina: tipologie di attacco

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *