XSS (Cross-Site Scripting)

La vulnerabilità XSS (Cross-Site Scripting) è una vulnerabilità che affligge quei siti in cui non vi sono sufficienti controlli degli input nei form. In altre parole, in questi casi è possibile inserire quello che si chiama JavScript, ovvero del codice malevolo che reindirizza alcuni dati verso un indirizzo. Un eventuale Cracker potrebbe dirottare verso la propria macchina una serie di informazioni personali reperite solo grazie al fatto che un utente ignaro ha involontariamente cliccato un pop-up (una pagina a comparsa) controllata dal malintenzionato.

Un esempio di attacco è il seguente:

alert(‘XSS’)

Se il sito è vulnerabile, all’avvio della pagina in cui viene inserito questo script apparirà una finestra pop-up con la scritta “XSS” come la seguente immagine:

image6

Questo è un chiarissimo esempio di pop-up che si limita solo ad avvisarci che la vulnerabilità è presente e che bisogna assolutamente porvi rimedio. Un eventuale Cracker non avrebbe di certo utilizzato un messaggio simile: egli avrebbe scritto qualcosa che attiri l’attenzione del client affinchè egli cliccasse “OK” e reindirizzare delle informazioni al pc attaccante quali utenze, password, dati riservati, persino utenze sui siti in cui abbiamo effettuato login. Insomma come avrete capito non è una cosa da sottovalutare, quindi attenzione quando navigando in rete ci si aprono delle pagine a cui bisogna cliccare qualcosa per farle scomparire.

Come porvi rimedio: è sufficiente aggiungere nella pagina web delle funzioni che permettono di “controllare” (il termine corretto è “fare una escape”) dei caratteri presenti nell’input affinchè vengano individuati eventuali caratteri che possono dare luogo ad una vulnerabilità XSS. Le funzioni sono tre e si chiamano:

  • Htmlspecialchars()
  • Htmlentities()
  • Strip_tags()

Vi rimando alla pagina Wikipedia che tratta questo argomento per maggiori chiarimenti. Come al solito mi scuso per i più esperti di non essere troppo dettagliato ma lo scopo di queste pagine è puramente illustrativo ed accademico, nulla di avanzato.

https://it.wikipedia.org/wiki/Cross-site_scripting

SQL Injection

Con questo articolo vogliamo spiegare in consa consiste un attacco SQL Injection e come fronteggiarlo.

La prima cosa che c’è da sapere quando si ha davanti una pagina di login di un qualsiasi sito web è che dietro vi è sicuramente un database contenente le informazioni che voi richiedete nel momento in cui vengono inseriti Username e Password.

Anche se non si vede, inserire i vostri dati equivale a mandare un messaggio al database in questione con il seguente linguaggio:

“SELECT * FROM users WHERE user='”.$_POST[‘user’].”‘ AND pwd='”.$_POST[‘pwd’].”‘”

Si lo so per alcuni di voi potrebbe sembrare aramaico antico, in realtà la “traduzione” è la seguente:

“Seleziona TUTTO (* significa All) dalla tabella USERS dove il valore user è “il vostro username” e la password è “la vostra password”.

In poche parole si sta richiedendo al database di restituire tutte i dati a cui voi, con il vostro username e la vostra password avere accesso. Il significadel del valore POST per i più curiosi è che lo scambio di pacchetti tra client (voi) e il server a cui state facendo richiesta di accesso avviene in modo cifrato, così da evitare un altro tipo di attacco chiamato MiTM (Man in The Middle).

Ora qui entra in gioco la nostra vulnerabilità SQL Injection: nei siti affetti da questo problema, si può “injettare” (gergo tecnico) quinti iniettare del codice malevolo con lo scopo di ingannare il server ed ottenere le informazioni che altrimenti sarebbero per noi inaccessibili. Per motivi di sicurezza non posso esporre tutto il procedimento o dettagli precisi per cui vi chiedo un grande sforzo di fiducia J
Posso tuttavia illustrare l’idea attraverso cui viene attuato l’attacco. Come alcuni probabilmente avranno notato, ci sono degli apici all’interno della richiesta precedente (in gergo si chiama Query): quegli apici non sono casuali, essi determinano l’inizio e la fine di una stringa, ovvero di qualcosa che il nostro database deve interpretare ed eseguire. Senza di essi, oppure ponendoli in modo errato, le richieste non avrebbero senso e otterremmo solo messaggi di errore.

Il gioco della SQL Injection quindi è il seguente: dare ordine al database di tirar fuori le informazioni che vogliamo sfruttando il fatto che il nostro sito internet non riconosce quando vengono inseriti dei caratteri speciali all’interno della richiesta dell’utente, ovvero all’interno dei campi di user e password. E qui che bisogna intervenire per fronteggiare questa vulnerabilità. Supponiamo che un programmatore abbia configurato male la query del database e che esso non riconosca i caratteri speciali, un Cracker (così si chiamano coloro che fanno hack a scopo malevolo) potrebbe injettare determinate informazioni per ottenere utenze, password, informazioni varie, qualsiasi cosa!

Come si previene quindi? Semplice, configurando bene la query e facendo si che:

  • I caratteri inseriti all’interno dei campi di username e password siano accettabili e non contengano caratteri speciali che possano in qualche modo alterare le richieste
  • Non mostrare con messaggi di errore che sono stati rilevati caratteri speciali, questo potrebbe far capire all’attaccante che il sito potrebbe presentare delle vulnerabilità

Questo è in breve una vulnerabilità SQL Injection, ovviamente per varie questioni ho semplificato moltissimo ciò che avviene in realtà, ma l’idea dovrebbe essere questa.

Ovviamente per i più esperti queste brevi righe non saranno gran che soddisfacenti ma in caso servisse qualche altri chiarimento non esitate a chiedere commentando questo articolo. Vi allego inoltre il link per accedere alla pagina di Wikipedia riguardo alla SQL Injection,

https://it.wikipedia.org/wiki/SQL_injection

Introduzione alla Web Security

Primi passi:

Al giorno d’oggi il mondo del web è talmente vasto che è impossibile riuscire a controllarlo tutto (per fortuna oserei dire). Navigando in rete possiamo trovare qualsiasi cosa di cui abbiamo bisogno: informazioni, oggetti da acquistare, persone da conoscere etc..

La domanda in questione ora è: ovunque riusciamo a spostarci con un semplice click all’interno del web, è sempre tutto sicuro?

La risposta ovviamente è “NO”. All’interno della rete si nascondono innumerevoli pericoli che vanno molto al di la del banale Parental Control per bambini. In giro per il mondo ci sono milioni di persone che, armate di cattive intenzioni, cercheranno di rubare i vostri soldi, o di penetrare nel vostro sito, o chissà quant’altro!

E’ bene sapere a cosa si va incontro se decidiamo di aprirci un sito personale, o se decidiamo di lasciare dei nostri dati salvati all’interno di un sito internet.

Per questa breve introduzione mi limito a spiegare il concetto base su cui si forma il mondo della Web Security. La parola chiave è “VULNERABILITA'”. Con questa parola si intende un qualcosa che potrebbe per esempio essere un errore di configurazione di un sito, di una app, o di molte altre cose. Quando si dice che “un sito è vulnerabile” significa che esso potrebbe essere soggetto dal alcuni attacchi da parte di malintenzionati per sottrarre informazioni riservare. Dobbiamo tuttavia fare una precisazione: la frase precedente (“un sito è vulnerabile”) non ha molto senso se lasciata così com’è. Nel mondo del web ogni vulnerabilità ha un nome, per così dire, che ne identifica il tipo e, quindi, il vettore d’attacco.

Per concludere, elencherò le principali vulnerabilità che si possono trovare su internet (l’ordine è casuale, non di pericolosità! Sono TUTTI pericolosi):

  • SQL Injection
  • XSS (una cui “variante” è l’XST)
  • DOS (o DDOS)
  • MiTM (Man in The Middle)
  • Overflow
  • Gain Privileges of Information