SOP e Cookies

S

NOVITA’ 2019!

Parliamoci chiaro: non puoi pensare di diventare un ETHICAL HACKER senza conoscere almeno un LINGUAGGIO DI PROGRAMMAZIONE!

Accedi adesso al corso “PYTHON PER HACKER – 2019”

Oltre 10 ORE di VIDEO LEZIONI e oltre 100 CODICI PRONTI DA ESEGUIRE!




La SOP (Same Origin Policy) è un concetto fondamentale nel mondo delle Web Application, è la base di tutti i principi di sicurezza all’interno di un browser.

Se non ci fosse la SOP, ogni utente di un sito Internet, potrebbe accedere alle informazioni degli utenti di un altro sito Internet: in pratica, dobbiamo impedire che un certo sito A, possa accedere alla informazioni di un altro differente sito B.

Molti attacchi, come il Cross Site Scripting (XSS) e il Cross Site Request Forgery (CSRF) si basano sul tentativo di violare la SOP.

Cos’è la Same Origin?

Supponiamo che un utente stia consultando la pagina web “A” tramite il proprio browser: gli SCRIPT in esecuzione su questa pagina “A” possono leggere (o scrivere) il contenuto di una pagina “B” se e solo questi hanno la STESSA ORIGINE (SAME ORIGIN).

Come possiamo verificare se due siti internet condividono la stessa origine? Ci basiamo su 3 fattori:

  • PROTOCOLLO
  • HOSTNAME
  • PORTA

In altre parole, per verificare se uno script può accedere ad una certa risorsa, PROTOCOLLO, HOSTNAME e PORTA devono corrispondere all’origine ovvero essere uguali.

Cerchiamo di chiarire meglio il concetto con un esempio. Uno script presente sul sito web https://www.esempio.com:890 può leggere risorse da:

  • https://www.esempio.com:890/immagini
  • https://www.esempio.com:890/immagini/fiori

Può farlo perchè PROTOCOLLO (HTTPS), HOSTNAME/DOMINIO (www.esempio.com) e PORTA (890) sono gli stessi.

Lo stesso script, invece, non può leggere risorse da:

  • http://www.esempio.com:890
  • https://www.esempio2.com/immagini:890
  • https://www.esempio.com:895

Nel primo caso cambia il PROTOCOLLO.
Nel secondo caso cambia l’HOSTNAME/DOMINIO.
Nel terzo caso cambia la PORTA.

E’ utile far presente che la SOP si applica solo ai browser che stanno eseguendo script e quindi lato CLIENT. Non ha alcun effetto relativamente alla parte SERVER.

A questo punto una domanda può nascere spontanea: perchè quindi prendiamo precauzioni solo per la parte CLIENT e non per quella SERVER? La risposta ce la forniranno i COOKIES che vedremo tra poco.

Oltre a questo, a noi non interessa tanto prevenire che una web application possa accedere a risorse di altri siti, ma quanto impedire che una web application, possa accedere ad informazioni personalizzate per utente (concetto di COOKIES) e fortemente sensibili da altri siti web.

I produttori di browser, danno la possibilità di bypassare la SOP sotto determinate circostanze. Facciamo un esempio: l’utilizzo dell’elemento “SRC” dà la possibilità di caricare uno script da un’altra location in Internet:

< script src=”http://www.sitoB.it/scriptA.js” / >

Se io sono il proprietario del sito B allora il problema non sussiste, ma se non lo sono, devo fare attenzione: lo script eseguito dal sito B potrebbe essere malevolo.

I cookies

Perchè abbiamo bisogno dei cookies? La risposta si riscontra nel fatto che il protocollo HTTP è STATELESS ovvero non mantiene una connnessione.

Se due utenti effettuano una richiesta HTTP verso un web server, quest’ultimo non sarà in grado di stabilire chi dei due ha effettuato la richiesta e quindi NON può mantenere nessuno stato. Per questi motivi è necessario modificare adeguatamente la richiesta HTTP.

Un COOKIE è un file di testo contenente informazioni e parametri. Il cookie viene inviato dal server al browser dell’utente che memorizzerà quest’ultimo nella “memoria” interna del browser.

Il browser invierà poi, per le successive richieste, il cookie al web server così da validare le informazioni ed i parametri contenuti in quest’ultimo.

Schematizzando il concetto abbiamo che:

  • Il browser invia la richiesta -> GET / HTTP/1.1
  • Il Server imposta il cookie -> SET-COOKIE: PHPID: 4REFER56
  • Il browser invia nuovamente il cookie nelle richieste successive -> GET /login.cgi?user=pippo PHPID=4REFER56

Un cookie può essere utile nei seguenti contesti:

  • Tracciare il comportamento di un utente (cookie di profilazione)
  • Mantenere un utente loggato all’interno di un certo sito web
  • Mantenere il carrello aggiornato su un sito di e-commerce

Oltre al valore stesso del cookie, abbiamo anche altri parametri impostati dal web server:

  • DOMAIN
  • PATH
  • HTTP ONLY
  • SECURE
  • EXPIRES

HTTP-ONLY: utile per mitigare possibili attacchi di tipo XSS (vedremo nei prossimi capitoli). Se impostato il cookie non può essere dedotto da script lato client (Javascript).

SECURE FLAG: se impostato il cookie può essere inviato solo tramite un canale sicuro di comunicazione (SSL,TLS).

DOMAIN: specifica il dominio verso il quale il cookie deve essere inviato.

PATH: se questo campo è impostato, il cookie verrà inviato dove specificato in quest’ultimo.

Estensioni utili per la gestione dei COOKIE

La prima estensione, per il browser Google Chrome, che vi suggerisco è: HttpWatch che serve per visualizzare ed analizzare il traffico web HTTP e HTTPS.

Ad esempio, utilizziamo l’estensione per visualizzare il traffico web prodotto dal sito Amazon:

Come si osserva, sono presenti tutte le richieste GET effettuate.

La seconda estensione si chiama EditThisCookie ed è un gestore di cookie che permette di aggiungere, eliminare e modificare i cookie.

Vediamo adesso un esempio pratico di installazione dei COOKIE.

Partiamo da una situazione iniziale in cui nessun cookie è presente sul browser.

Per visualizzarlo basta cliccare sul bottone creato dall’estensione EditThisCookie.

Connettiamoci adesso ad un sito web, ad esempio www.repubblica.it e apriamo nuovamente la finestra dei cookie:

Come si osserva, sono stati installati diversi cookie, ognuno con le proprie caratteristiche:

Se, ad esempio, clicchiamo sull’accettazione dei cookie di profilazione:

Questo è quello che accade:

Vengono installati molti altri cookie e quindi ci sarà una raccolta più massiva delle nostre informazioni personali.

Aggiungi un commento

Articoli recenti

Categorie