Aggiornato al : mag 31, 2008



In questo articolo verranno riassunte le varie tecniche utili a proteggersi in maniera efficace da un attacco di SQL injection. Si parlerà, in particolare, dell’utilizzo di alcuni accorgimenti nel dare in pasto ad una query le informazioni fornite da un utente e della configurazione adeguata del DBMS e successivamente verranno invece analizzati alcuni tool, utili ad individuare e combattere la SQL injection.
Si è visto che, nella maggior parte delle applicazioni web, le query al database SQL vengono create in maniera dinamica, dalla fusione tra i comandi inseriti in principio dallo sviluppatore della stessa applicazione ed i parametri forniti dall’utente. Grazie agli esempi µe stato possibile sottolinerare l’importanza di un opportuno filtraggio e di un controllo adeguato delle informazioni ottenute in
ingresso. L’insieme delle operazioni, atte a rendere l’input dell’utente utilizzabile in maniera sicura per l’interrogazione di un database SQL, prende il nome di input
sanitizing e si puµo riassumere nei seguenti passi:

  • Escaping dei caratteri potenzialmente dannosi;
  • Filtraggio dei dati mediante regular expressions;
  • Controllo del tipo di dato ricevuto ed eventuale casting.

Un primo passo consiste quindi nell’utilizzare la funzione mysql real escape string() (disponibile in MySQL, ma con analoghe funzioni per gli altri DBMS) che consente di filtrare opportunamente caratteri come n r, gli apici singoli e doppi e così via, facendoli precedere da un backslash. In tal modo è possibile annullare gran parte del codice malevolo iniettato durante un attacco. Tuttavia, tale approccio non è sufficiente.
Come già visto nell’articolo precedente, infatti, esso ha effetto qualora i parametri vengano utilizzati in presenza di apici, come nel caso delle stringhe. È quindi buona norma introdurre gli apici anche in presenza di valori numerici, in modo da rendere comunque effcace l’operazione di escaping.
Molti linguaggi di scripting, come ad esempio il PHP, che consentono di interfacciarsi con i comandi SQL e di eseguire le relative query, presentano inoltre svariati strumenti per il filtraggio delle informazioni provenienti dall’utente, secondo particolari regole appositamente predisposte. Si parla quindi di regular expressions, ovvero di controlli che consentono di stabilire se i dati in input presentano un set di caratteri predefinito e nella forma corretta. Nel linguaggio PHP, ad esempio, la funzione ereg consente di verificare che una stringa accettata in ingresso contenga esclusivamente caratteri alfanumerici o rispetti altre regole definite dal programmatore.
Di importanza fondamentale è anche il controllo dei tipi, i vari linguaggi offrono operazioni di casting con le quali è possibile neutralizzare alcuni tipi di attacchi.
In ogni caso, è opportuno rifiutare un input dell’utente che non rispecchi quanto richiesto.
Esistono svariate funzioni che consentono di ottenere il medesimo obiettivo, ciò che è importante è verificare sempre la natura dei dati forniti dall’utente.
L’approccio migliore è spesso controllare che l’input rispecchi ciò che si richiede, piuttosto che tentare di respingere tutto ciò che è reputato dannoso.
L’altro aspetto fondamentale per la protezione da attacchi di SQL injection è la corretta configurazione del server SQL. L’utilizzo delle stored procedures può essere, come già detto, utile alfine di limitare l’accesso dell’utente al codice SQL, tuttavia è necessario eliminare o disabilitare tutte quelle procedure potenzialmente dannose o inutilizzate, come ad esempio l’xp cmdshell.

È altresì importante non connettersi mai al database con privilegi di root: è necessario utilizzare utenti creati appositamente, con diritti molto limitati sul database. Allo stesso modo, non bisogna far girare il DBMS su un sistema con privilegi di amministratore, per limitare il raggio d’azione di eventuali attaccanti. Ciò comporta anche la rimozione di tutti gli account inutilizzati ed il potenziamento della sicurezza delle password per quelli in uso.
Seppure potrebbe sembrare banale, è fondamentale non diffondere alcuna informazione sulla struttura interna del database: gli esempi hanno evidenziato cosa puµo fare un attaccante che µe in possesso di tali informazioni.
Un’altra tecnica per proteggersi dalla SQL injection consiste nell’opportuna configurazione dei messaggi di errore forniti dal server all’utente. Si è visto che le informazioni in essi contenute possono essere di grande aiuto all’attaccante per perseguire i propri obiettivi.

È oltretutto importante considerare che strumenti come firewall o gli IDS (Intrution Detection Systems) forniscono una protezione inadeguata nei confronti di attacchi web su larga scala, come la SQL injection. Proprio perchµe l’applicazione web dev’essere pubblica ed accessibile dagli utenti esterni, tali sistemi consentiranno qualsiasi traffico (attraverso la porta 80) per la comunicazione con il database mediante l’applicazione web. La configurazione di tali strumenti ed il loro aggiornamento µe quindi certamente fondamentale ma non sufficiente per proteggersi da attacchi di SQL injection.
Infine, può essere di valido aiuto l’utilizzo di appositi tool per l’analisi delle possibili vulnerabilitµa cui è esposto un server.

Continua a Leggere :
«»

Pages: 1 2



You may be the one to comment first. Please leave your message below.