Articoli Manifesto Tools Links Canali Libri Contatti ?
Sicurezza / Web

The Fake Poll - Il sondaggio falso

Abstract
Illustrando le debolezze della maggior parte dei sondaggi web e con la spiegazione di qualche possibile soluzione, questo articolo vuole essere di aiuto a tutta la gente che non sa come funziona un sondaggio web ed in particolar modo ai webmaster che vogliono utilizzare sul loro sito un sondaggio: "VERO" e "SICURO".
Data di stesura: 08/06/2004
Data di pubblicazione: 21/06/2004
Ultima modifica: 04/04/2006
di Donato Ferrante Discuti sul forum   Stampa

Introduzione

Al giorno d'oggi è molto frequente trovare su un sito web un qualche sondaggio, del tipo:
      ----------------------
    /| Sondaggio del giorno |\
-----------------------------------
| "Qual'è il tuo O.S. preferito?" |
-----------------------------------
|
o GNU/Linux
|
o Windows
|
o Altro
|
|
-----------------------------------
|                           [Vota]|
-----------------------------------
Normalmente non si ha particolare interesse nell'esprimere una qualche preferenza in un certo sondaggio. Ma qualche volta le cose possono cambiare...

Infatti qualcuno, come una persona dagli intenti non troppo "nobili" può falsare il risultato del sondaggio usando alcuni trucchi.

Tipi di sondaggio

In giro sul web si trova una varietà enorme di sondaggi (a livello di implementazione), che possono o meno adottare stratagemmi atti a preservare la loro "affidabilità".

Di seguito elencherò brevemente i modi più comuni di implementare un sondaggio web:

  • a. voto diretto
  • b. voto diretto (con cookie)
  • c. voto diretto (con controllo sul browser utilizzato)
  • d. voto controllato (con autenticazione dell'utente s.a.p.i. [1])
  • e. voto controllato (con autenticazione dell'utente u.p.p.i. [2])
[1] s.a.p.i. : Server Autogenerated Password + Id
significa che la password e l' id dell'utente sono assegnati automaticamente dal server usando un qualche algoritmo.

[2] u.p.p.i. : User Personal Password + Id
significa che la password e l'id utente sono scelti dallo stesso utente senza la mediazione del server o di terze parti.

a) voto diretto, l'utente può aggiungere il suo voto al sondaggio, semplicemente connettendosi al sito web ed accedendo al sondaggio senza alcun tipo di autenticazione.

b) voto diretto con cookie, come il punto a. ma non appena l'utente ha votato, un cookie viene salvato nella cartella dei cookie del suo browser.

c) voto diretto con controllo del browser, questo controllo è davvero strano. Praticamente il sondaggio web fà un controllo sul browser utilizzato dell'utente prima di permettere all'utente di votare.

d) voto controllato s.a.p.i., l'utente prima di votare deve aspettare di ricevere un id utente ed una password validi dal server dopodichè può esprimere la sua preferenza.

e) voto controllato u.p.p.i., l'utente può accedere al sondaggio solo dopo un' autenticazione basata su password ed id personali.

Limiti

Ognuno dei metodi elencati sopra ha una o più protezioni che possono essere bypassate per alterare il risultato del sondaggio.

Vedremo ora i limiti per ogni categoria, dopodichè passeremo ad esaminare come una persona "non nobile" agisce per falsare i risultati di un sondaggio.

a) voto diretto, troppo semplice, un utente può aggiungere più voti semplicemente aggiornando il proprio browser web, oppure clicckando ripetutamente sul pulsante di voto.
Come si può facilmente notare questo è un metodo di gestire un sondaggio web davvero poco intelligente!

b) voto diretto con cookie, come il punto a. ma dopo il primo voto l'utente deve rimuovere il cookie salvato per poter votare nuovamente.

c) voto diretto con controllo del browser, questo metodo usa di norma il punto b. ed ha le stesse limitazioni del punto b. ma in più ha un controllo per evitare (davvero ?) l'utilizzo di programmi di "voto automatico".

d) voto controllato con s.a.p.i., questo metodo sembra a prima vista "robusto"... ma non è così. Infatti è possibile scoprire l'algoritmo che il server usa per autogenerare la coppia: password ed id, ed è a quel punto possibile scavalcare anche questo tipo di protezione facilmente. Nota che a volte per risalire all'algoritmo stesso basta semplicemente osservare un certo numero di coppie valide. Quindi fate attenzione all'algoritmo che utilizzate!

e) voto controllato con u.p.p.i., l' utente deve autenticarsi prima di poter votare. In aggiunta all'autenticazione, vi possono essere altre protezioni quali ad esempio quelle adottate nei metodi illustrati precedentemente. Qui la limitazione è, ovviamente, l' "utente". Perchè? Risponderò a questa domanda osservando due casi.

  1. Bisogna avere un account per poter votare.
    "Ma qualcuno può essere qualcun altro". Mi spiego, l'affermazione precedente equivale a dire che è sempre possibile crearsi un nuovo account con delle false credenziali e guadagnare così un nuovo accesso al sondaggio.
  2. L'accesso è limitato ad un certo numero di persone.
    Questa volta l'utente che vuole falsare il sondaggio, deve avere accesso a dati personali sensibili, quali password ed id, degli utenti autorizzati, ciò è possibile effettuando il cosiddetto social engineering oppure qualche sessione di sniffing.

I falsi voti

Adesso è il momento di mostrare come una persona dagli intenti "non nobili" procede per aggiungere un voto usando delle "richieste false". Il metodo che illustrerò funziona senza problemi con tutti i sondaggi che implementano un qualsivoglia tipo di "voto diretto".

Il lavoro è diviso in due parti:

1. Reperire le informazioni

Prima di tutto bisogna conoscere le informazioni necessarie per aggiungere un voto valido su un sondaggio web. La via più semplice per ottenere queste informazioni, è aprire uno sniffer ed esaminare il contenuto del pacchetto, inviato dal browser al sondaggio, per aggiungere un voto al sondaggio stesso.

Consideriamo il caso in cui il nostro sondaggio web salvi un cookie nella cookie directory del browser.

Osserviamo la prima richiesta:

POST /poll/myChoise.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpg, */*
Referer: http://localhost
Accept-Language: en
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: localhost
Content-Length: 34
Connection: Keep-Alive
Cache-Control: no-cache
- - -
Poll=Choise0&Submit=someOtherThing
a questo punto eseguiamo una nuova richiesta di voto, ma questa volta la richiesta non sarà considerata valida dal sondaggio web... andiamo a scoprire il "perchè"...

La risposta è, come prevedibile, nel nuovo pacchetto inviato al sondaggio:

POST /poll/myChoise.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpg, */*
Referer: http://localhost
Accept-Language: en
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: localhost
Content-Length: 34
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: someCookie=aValue
- - -
Poll=Choise0&Submit=someOtherThing
Possiamo notare come il sondaggio abbia salvato un cookie sul nostro pc osservando, nella seconda richiesta, la presenza della seguente riga:
Cookie: someCookie=aValue

2. Creare la richiesta

Abbiamo capito che il browser non è intelligente, infatti è cookizato (vogliate scusarmi il termine) nelle sue richieste.
Quindi il miglior modo per bypassare questa limitazione è non usare il browser per le richieste di voto, ma usare richieste "fatte a mano".

Per esempio si potrebbe inviare una richiesta "falsa ma valida", simile alla seguente:

POST /poll/myChoise.php HTTP/1.1
Host: http://localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 34

Poll=Choise0&Submit=someOtherThing
Gli effetti di una tale richiesta sono:
  1. il voto aggiunto è sempre valido.
  2. non si hanno problemi di cookie.

Soluzioni

Il problema principale è che tutte le richieste verso un sondaggio web che un utente fà sono visibili all'utente stesso.

Si rende quindi necessario adottare un valido metodo di protezione. A mio avviso una buona idea potrebbe essere la seguente:

  1. Autenticazione dell'utente (con il metodo u.p.p.i.)
  2. Gestione dei cookie server side.
Voglio ricordare che questi due punti sono e devono essere esclusivamente un punto di partenza nell'implementare o nell'adottare un buon servizio di sondaggio per il proprio sito web.

Informazioni sull'autore

Donato Ferrante, classe 84. Programmatore e bug-researcher. Il suo sito web è: http://www.autistici.org/fdonato/

È possibile consultare l'elenco degli articoli scritti da Donato Ferrante.

Altri articoli sul tema Sicurezza / Web.

Risorse

  1. L'articolo originale in inglese.
    http://www.siforge.org/articles/2004/06/21-the_fake_poll_en.html
  2. Copia in inglese disponibile sul sito dell'autore.
    http://www.autistici.org/fdonato/articles/The_Fake_Poll_en.txt
  3. Copia disponibile sul sito dell'autore.
    http://www.autistici.org/fdonato/articles/The_Fake_Poll_ita.txt
  4. Paper originale in inglese disponibile sul sito dell'autore.
    http://www.autistici.org/fdonato/papers/The_Fake_Poll.txt
Discuti sul forum   Stampa

Cosa ne pensi di questo articolo?

Discussioni

Questo articolo o l'argomento ti ha interessato? Parliamone.