Torna indietro   Hardware Upgrade Forum > Networking e sicurezza > Antivirus e Sicurezza > AV e sicurezza in generale

Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-07-2009, 00:25   #1
Sisupoika
Registered User
 
Iscritto dal: Nov 2006
Città: Espoo, Finland
Messaggi: 1631
Non sempre disabilitare JavaScript equivale a migliore sicurezza: un esempio

Come gia' spiegato nel precedente post, in questo momento sto lavorando alla implementazione, in un framework sul quale sto lavorando, di un numero di pratiche per la prevenzione dalla maggior parte dei possibili attacchi.

Mentre testavo un paio di cose in uno scenario con JavaScript disabilitato o "castrato" con NoScript (che, come detto spesso, odio perche' non e' la soluzione, e per lo piu' ha l'unico effetto di portare il web indietro di anni), e mi e' venuta in mente una considerazione del tipo di quelle che a volte passano per la testa ma sulle quali non ci si sofferma, di solito, nei dibattimenti, e che solitamente rimangono non documentate, non discusse, spesso ignorate.

C'e una pratica sulla quale molti appassionati (come si puo' spesso notare anche in questo stesso forum) concordano forse all'unanimita', spesso con quella particolare forma di "entusiasmo" che deriva da un falso senso di sicurezza, a sua volta a causa - imho - di scarsita' di informazione ecc.

E' quella di disabilitare JavaScript by default, nella convizione che JavaScript disabilitato sia sinonimo di maggiore sicurezza.

Naturalmente, non sono d'accordo, come gia' detto in diverse occasioni quando si e' parlato di numerose possibilita' di attacco che con JavaScript hanno nulla a che vedere - di recente di parlava di alcune varianti di Click Jacking, e ci fu un certo clamore. Un po' come la colossale balla, in cui molti purtroppo credono, secondo cui un sito che faccia uso di SSL / HTTPS sia sicuro.

Bene, forse non molti si saranno resi conto che c'e' almeno un aspetto, legato a possibili attacchi di tipo XSRF o di simile classificazione, che rende piu' sicuri con JavaScript abilitato.

Mi riferisco alla Same origin policy di cui si e' spesso parlato, incluso il mio precedente post.
Assumo si sara' ormai inteso che molti attacchi di vario tipo fanno uso di tags in una pagina maligna che, di nascosto, inducono il browser ad effettuare delle richieste HTTP verso un sito vittima. O meglio: la vittima e' l'utente, poiche' si cerca di fargli, in pratica, compiere azioni a sua insaputa.

Ci sono moltissime varianti, ma in genere questo tipo di roba e' chiamata request forgery.

Bene, senza ripetere cose di cui si e' parlato piu' in dettaglio in apposite sedi, voglio soltanto ricordare che questi attacchi, generalmente parlando, per funzionare con successo hanno bisogno che:

- il sito attaccato utilizzi cookies per verificare se una richiesta e' autenticata oppure no (cioe' se l'utente per conto del quale essa viene operata, e' loggato oppure no). E cio' viene per mezzo di cookies di autenticazione

- l'utente abbia una sessione attiva al sito attaccato (cioe', anche se non e' sul sito in quel momento, e' sufficiente che il browser conservi un cookie di autenticazione ancora valido, non scaduto, ecc)

Ricordo anche che questo e' necessario affinche' request forgery funzioni nelle sue principali varianti: infatti, nel momento in cui una richiesta viene effettuata di nascosto verso il sito attaccato in una delle modalita' descritte negli altri threads, il browser invia assieme alla richiesta i cookie che conserva per il dominio del sito attaccato. E' questo funzionamento base del web che rende l'attacco possibile poiche' la richiesta viene autenticata come se l'utente l'avesse generata durante l'uso del sito attaccato stesso.

Veniamo dunque alla considerazione: il browser, nell'inviare il cookie di autenticazione assieme alla richiesta nascosta, non si preoccupa di verificare il dominio della pagina dalla quale quella richiesta e' stata generata. Questo perche' il protocollo HTTP di per se' non prevede restrizioni come quelle dettate dalla same origin policy, per l'effettuazione delle semplici richieste GET/POST ecc.

A precindere se JavaScript e' disabilitato o meno in quel momento, quel cookie di autenticazione verra' inviato comunque e la richiesta verra' soddisfatta per molte varianti di XSRF (non tutte, come e' stato spiegato nell'altro post).
Questo, a meno che l'applicazione verifichi il referer (in breve, il referrer e' un header inviato con la richiesta, che identifica l'indirizzo che ha originato la richiesta stessa. Se per esempio nella pagina http://miosito.com/pagina.html c'e' uno SCRIPT tag che genera un' altra richiesta per scaricare lo script, il referrer per questa seconda richiesta sara' http://miosito.com/pagina.html).

Ma controllare il referrer e' qualcosa che quasi nessuno fa, e comunque sarebbe poco utile perche' alcune estensioni nei browsers, o proxy in alcuni casi, eliminano il referrer. E' anche molto facile fare "spoofing" del referrer in molti casi. Quindi controllare il referrer non e' molto pratico.

Dunque rimane che a prescindere da JavaScript, il cookie di autenticazione viene inviato con la richiesta anche se tale richiesta e' generata da un dominio diverso.

Cosa accade invece se JavaScript e' disponibile?

Accade che e' possibile ovviare a quel problema, e far si' con un piccolo trucchetto che la same origin policy venga rispettata, e che il cookie di autenticazione, o meglio le informazioni di autenticazione in esso contenute, vengano correttamente inviate con la richiesta soltanto se la richiesta e' originata dallo stesso dominio dell'indirizzo di destinazione della richiesta stessa.

Come? Semplice (e' una delle mille pratiche che sto implementando nel mio framework )

Invece di verificare - server side - il cookie di autenticazione direttamente, le informazioni di autenticazione possono essere passate alla richiesta mediante JavaScript:

1) JavaScript legge, client side, il cookie che contiene le informazioni di autenticazione

2) estrae dal contenuto del cookie l'informazione necessaria per l'autenticazione

3) calcola l'hash con MD5 o altro (l'importante e' usare un argomento abbastanza veloce, visto che esso deve essere elaborato col lento JavaScript)

4) appende l'hash calcolato alla richiesta, ad esempio come parametro nella query string per richieste GET, oppure come campo nascosto nei form POST.

5) l'applicazione server side leggera' il contenuto del cookie, calcolera' allo stesso modo l'hash MD5 dell'informazione di autenticazione in esso contenuta, e ne comparira' il valore con quello inviato come parametro direttamente con la richiesta.

Perche' funziona?

Funziona perche' JavaScript rispetta* la same origin policy.

Caso A: La richiesta viene effettuata dal sito originale:

JavaScript puo' leggere il cookie dal dominio attraverso document.domain, proprio grazie al fatto che il codice JavaScript viene eseguito nello stesso dominio nel quale il cookie di autenticazione e' stato salvato dalla applicazione. Pertanto l'MD5 potra' essere calcolato e il valore confrontato server side come spiegato. Autenticazione OK! La richiesta puo' essere esaudita.

Caso B: La richiesta viene effettuata di nascosto, ecc, da un altro sito, quello dell'attaccante:

Il codice JavaScript eseguito nella pagina del sito attaccante - dominio diverso - non puo' leggere il contenuto del cookie del sito attaccato con document.domain, a causa della same origin policy.
Pertanto non sara' in grado di calcolare l'MD5 giusto, e il confronto server side fallira'.
Risultato: i dati richiesti non verranno inviati al client.

Note per chi non ha famigliarita' con alcuni termini:
- MD5 e' un algoritmo che, come altri consente di (detta in parole mooolto semplici) giungere ad una stringa B a partire da una stringa A. Caratteristiche: e' molto semplice, e richiedere piccolo sforzo computazionale il passaggio A -> B. Ottenere B da A e' invece una mostruosita' in termini di sforzo computazionale e dunque di tempo necessario.
Un attaccante che pure, in qualche modo, riesca a "catturare" un numero sufficiente di valori cosi' generati, non sarebbe in grado di determinare i valori di partenza e dunque capire come essi vengono generati e gestiti.
- Come spiegato in un altro post, esiste la possibilita' di ottenere cookies da un dominio diverso anche con JavaScript, ma questa possibilita' e' attuabile soltanto in determinate condizioni e per le ragioni descritte nel post, e' un problema probabilmente destinato a scomparire nell'immediato futuro.

Questo e' soltanto un esempio di casi in cui JavaScript disabilitato non significa automaticamente migliore sicurezza.

A questo punto, in chiusura, i piu' attenti si saranno chiesti:
OK, se JavaScript e' disabilitato e dunque il trucchetto MD5 eccetera non puo' essere usato, il cookie di autenticazione viene passato, la richiesta viene autenticata correttamente, e i dati richiesti inviati al client.
Ma non e' comunque necessario JavaScript per accedere ai dati ottenuti?


La risposta e': non necessariamente
Durante esperimenti e ricerche, ho trovato due siti vulnerabili (uno l'ho trovato attraverso la signature di un utente qui sul forum! ) grazie al fatto che questi siti si comportano in maniera diversa a seconda se JavaScript e' abilitato oppure meno.
Non scendo nei dettagli perche' sto ancora sperimentando ma anche perche' non ricordo di aver letto di tecniche simili, quindi per ovvie ragioni.

ciaps
Sisupoika è offline   Rispondi citando il messaggio o parte di esso
Old 19-07-2009, 18:03   #2
riazzituoi
Bannato
 
Iscritto dal: Aug 2007
Messaggi: 3847
.

Ultima modifica di riazzituoi : 28-04-2010 alle 17:07.
riazzituoi è offline   Rispondi citando il messaggio o parte di esso
Old 19-07-2009, 19:18   #3
Sisupoika
Registered User
 
Iscritto dal: Nov 2006
Città: Espoo, Finland
Messaggi: 1631
A quali specifiche ti riferisci di preciso?
Sisupoika è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Qualcomm HBC supera la validazione in la...
Tachyum avvia la procedura di fallimento...
La sonda spaziale NASA Lucy ha raggiunto...
Le GeForce RTX 5000 scarseggiano, tornan...
Raspberry Pi 5, il prezzo è ormai...
I frigoriferi dei supermercati diventano...
Le vecchie fotocamere digitali compatte ...
La Cina potrebbe rinviare il ritorno del...
Verizon non è preoccupata della c...
RDNA 5 sulle APU AMD, ma non per tutti: ...
Marvell acquisisce Lumentum per 115 mili...
La febbre dei data center fa impennare i...
ECOVACS T90S OMNI crolla a 499€ su Amazo...
In Cina i camion elettrici hanno gi&agra...
Attacchi hacker ai supermercati in Europ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v