x

ATTACCO FTP

Aspetti legali (D.lgs 196/03 e BS 7799)
indietro
avanti

SICUREZZA INFORMATICA SUL WEB
by Nanni Bassetti

SQL Injection:

 

Sempre utilizzando la stringa sql usata dal software per autenticare l'utente, si può inviare una “iniezione di SQL”.

x

Ecco come:

1)    Visualizziamo il codice HTML della pagina web e guardiamo come si chiamano i campi di LOGIN

2)    Es. <input type=”text” name=”user”> 
<input type=”password”  name=”pw”>

3)    Guardiamo l'action del form 
<form action=”login.asp” method=”post”>

4)    A questo punto proviamo ad inserire nella textbox USERID la seguente frase: 
%' or user like ‘% e nella textbox password: %' or pw like ‘%

5)    Se i campi del database si chiamano come i campi di INPUT allora avremo che nel software la stringa SQL che sarà eseguita diventerà:
select * from utenti where user='%' or user like ‘%' and pw='%' or pw like ‘%'
Che vale a dire prendi l'utente che ha come user il valore % oppure user è “like ‘%'” che in SQL significa tutti (come il Jolly nelle carte da gioco), idem per il campo pw.

6)    Questo causerà un nostro ingresso nel sistema con l'account del primo utente del database.

7)    Una volta entrati potremo avere i poteri di quell'utente e fare quello che possiamo fare.

 

Altre SQL injection sono fatte così:

‘ or 1=1 -- (dato che 1 è sempre uguale a se stesso ed il – commenta ciò che segue della stringa sql originale)

 

In caso la login fosse un codice numerico basterebbe la stringa:

0 or 1=1 --

oppure

0 or user>=0

così da si entra dato che se il codice utente è un numero e noi imponiamo che user sia >=0 allora l'affermazione è vera sempre.

 CONTROMISURA: la SQL Injection si evita

1)     sempre rimpiazzando l'apice col doppio apice o con l'apice rovescio (come negli esempi precedenti)

2)     Rimpiazzando i trattini con lo spazio

3)     Rimpiazzando tutti i caratteri delimitatori del dialetto SQL del database usato con caratteri vuoti

4)     In ASP.NET la SQL Injection si vanifica senza dover ricorrere a controlli di validità sui parametri passati, ma inserendo questi ultimi nella collezione dei parametri dell'oggetto Command.

5)     Configurare i Firewall o gli IDS (Intrusion Detection System) con delle regole che intercettino delle stringhe particolari che possono realizzare le SQL Injection.
Alcuni possono usare la traduzione esadecimale delle stringhe di iniezione Es:

%27%20%6F%72%20%31%3D%31%20%2D%2D

è il codice esadecimale della stringa:

' or 1=1 –

Casi di difficoltà della SQL Injection:

1)    I campi user e password sono “corti” ossia il web designer ha inserito l'attributo “size” nel campo <INPUT> Es.:<input type=”password” name=”pw” size=”8”>. 
In questo modo non possiamo scrivere la nostra injection !
Ma basta salvare la pagina HTML sul nostro hard disk e cambiare l'ation del form con un indirizzo assoluto Es.: 
<form action=http://www.sito.com/login.asp method=”post”>
Poi aprire col browser la pagina, scrivere l'injection e schiacciare il tasto di SUBMIT ed il gioco è fatto !

2)    I campi del database hanno nomi diversi dai nomi dei tag INPUT.
Allora provate ugualmente una injection e magari potrebbe apparire un errore del tipo:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Driver ODBC Microsoft Access] Errore di sintassi nella stringa nell'espressione della query  username='%' or user like ‘% 

si capisce che il campo user si chiama realmente username.

CONTROMISURA: usare sempre l'intercettazione dell'errore nello script così da non visualizzare gli errori di sistema (Es. On error resume next in VBScript)

 

Referenze:

1. SQL Injection http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf

2. Cross Site Scripting FAQ http://www.cgisecurity.com/articles/xss-faq.shtml

3. The Snort IDS http://www.snort.org

4. Perl-compatible regular expressions (pcre) http://www.pcre.org

5. Web application proxy, Achilles http://achilles.mavensecurity.com

3. Advanced SQL Injection http://www.nextgenss.com/papers/advanced_sql_injection.pdf

7. Secure Programming HOWTO, David Wheeler www.dwheeler.com

8. Threats and Countermeasures, MSDN, Microsoft http://msdn.microsoft.com

istrator potreste pure entrare nelle cartelle del server.

x

Insomma la morale della favola è questa: "è impossibile entrare in un sistema senza conoscere la username e la password !"

Ci sono dei software (Brute force attack) che provano a indovinare la password inviando moduli da 2, 3 o 5 o 10 ecc. caratteri al sistema in modo casuale (tra lettere e numeri) ma per provare tutte le permutazioni possibili ci vorrebbero mesi di attacco continuato e attenzione non è come nei film, cioè che si indovina un carattere alla volta, ma bisogna indovinare tutta la stringa che compone la password !

Per esempio: se la password è pippo123 ed il software di attacco invia paxtr222 non è che la "p" comincia a lampeggiare e si ferma mentre il software cerca di indovinare gli altri caratteri.

Però questi software di attacco hanno dei dizionari (multilingue) che inviano tutte le parole del dizionario al sistema quindi se avete usato come password la parola "montagna", probabilmente il software la becca subito perché prova con tutte le parole contenute nel dizionario italiano, quindi attenti a scegliere sempre password senza senso compiuto.

 

CONTROMISURA: non usare password piccole e con senso compiuto, in qualsiasi lingua e disabilitare l’accesso anonimo al server FTP.