Sicurezza tramite l'oscuramento: una scelta obbligata per il web?

Monday, 23 April 07
Una studentessa indossa un burka per un semestre per "testare" la reazione dei suoi compagni di corso e sperimenta l'isolamento Chiunque si interessi di sicurezza informatica anche solo per hobby avra' sentito dire mille volte che la sicurezza tramite l'oscuramento e' da rifiutare in favore di un approccio in cui specifiche, algoritmi e codice sorgente sono pubblici e accessibili a tutti.

L'idea su cui poggia questa tesi e' che anche quando un algoritmo o un software sono chiusi se c'e' una vulnerabilita' le analisi indirette potrebbero finire per farla emergere comunque con un po' di sforzi. Ne consegue il rischio che i dettagli della vulnerabilita' potrebbero andare a finire nelle mani di persone intenzionate ad usarle per fini illeciti che sono state disponibili ad investire per scoprirle, nelle mani di governi o di organizzazioni che sono riuscite ad ottenere le specifiche in qualche modo, o del progettista stesso che potrebbe aver inserito volontariamente una vulnerabilita'.

Se invece algoritmi e software sono pubblici lo scrutinio della comunita' di utilizzatori ed esperti finira' per far emergere velocemente quanto meno tutte le vulnerabilita' piu' evidenti, scoraggera' chi sviluppa software e algoritmi ad usare tecniche approssimative o poco testate sperando che la loro segretezza sia una protezione sufficiente, proteggera' dalle backdoor (inserimenti intenzionali di vulnerabilita'), per cui alla fine il software sara' piu' sicuro.
Questa tesi ha una sua logica, ma sono sempre stato convinto che detta in maniera cosi' semplicistica finisce per nascondere gran parte della realta'.

Eppur funziona

Prima di attaccare questa tesi da alcuni punti di vista e' meglio tenere a mente un concetto semplice ma molto spesso sottovalutato. Un dato sistema, algoritmo, software, e' comunque piu' resistente contro gli attacchi se non e' pubblico. L'oscuramento rende il processo di attacco piu' complesso di molto nella pratica, per cui se gli altri fattori quali l'analisi da parte di esperti esterni alla ricerca di vulnerabilita' non controbilanciasse la mancata sicurezza dovuta alla rinuncia dell'oscuramento sarebbe meglio tenere le cose segrete. Allora qual'e' la verita'?

Tutto dipende da chi sei

La National Security Agency (NSA), agenzia di sicurezza statunitense avvolta nel mistero, e' sicuramente il posto in cui c'e' la maggiore densita' di crittografi professionisti del mondo. Per l'NSA il discorso sulla sicurezza tramite l'oscuramento si capovolge: l'analisi da parte di crittografi esterni per loro non e' vitale, hanno al loro interno una quantita' di crittografi tra i migliori del pianeta, per cui l'oscuramento e' un valore aggiunto irrinunciabile. Se l'NSA dovesse disegnare un algoritmo crittografico per proteggere comunicazioni di importanza militare avrebbe molto senso da parte loro creare algoritmi segreti e non pubblici.
Non si tratta soltanto di rendere pubblico questo o l'altro algoritmo. Molto spesso un algoritmo reca all'interno anche i frutti di nuove scoperte nel campo. I crittografi dell'NSA possono beneficiare di tutte le pubblicazioni prodotte dai crittografi all'esterno, ed essere sempre aggiornati su qual'e' lo stato dell'arte della crittoanalisi pubblica, ma allo stesso tempo possono non rendere note le scoperte che sono fatte all'interno dell'NSA.
Quello che si crea e' un flusso unidirezionale di conoscenza che l'NSA sfrutta a proprio vantaggio. Pero' e' anche vero che l'NSA e' un caso limite, e infatti in quasi tutti i casi realistici e' molto meglio rilasciare gli algoritmi e il codice sorgente pubblicamente dal punto di vista della sicurezza, con una eccezione notevole che sembra emergere negli ultimi anni: gli algoritmi di ranking alla base di parte del web (2.0 e non).

L'oscuramento, da Google ai Social Media

Cosa accadrebbe se Google pubblicasse le specifiche del suo algoritmo di ranking? Quel giorno sarebbe la festa nazionale dei SEO.
Sembrano esserci campi in cui la pubblicazione degli algoritmi alla base della sintesi di informazioni provvede indirettamente a specificare il modo in cui creare ad arte dei dati di input per attaccare il sistema.
Se Google ci dicesse per filo e per segno cosa dovremmo fare per guadagnare posizioni nei suoi risultati di ricerca finirebbe per distruggere in un colpo solo la (gia' vacillante) qualita' dei risultati prodotti dal motore di ricerca.

Eppure in teoria la pubblicazione degli algoritmi avrebbe anche i soliti vantaggi: trasparenza e possibilita' da parte di ricercatori esterni di sperimentare versioni piu' raffinate dell'algoritmo sono un esempio. Ma in questo caso gli svantaggi della pubblicazione superano di gran lunga i vantaggi, anche per questioni di segretezza aziendale al fine di evitare che i concorrenti prendano le buone idee difficilmente osservabili indirettamente.

Lo stesso fenomeno si osserva nel caso di sistemi quali Oknotizie, nel caso specifico di quello che faccio negli ultimi tempi, ma piu' in generale di tutti i social media: Digg, Reddit, Delicious (popular), devono tutti avere al loro interno degli algoritmi che prendono decisioni sull'importanza di risorse e sul peso degli utenti in relazione ad una quantita' di parametri.
In particolare in un sistema come oknotizie la qualita' delle news in home page e' un requisito fondamentale per avere un servizio funzionante. Se la pubblicazione dei dettagli dell'algoritmo permettesse ad un attaccante di far salire qualunque notizia tra le prime posizioni, oknotizie si trasformerebbe in gran parte in una lista di spam.
E nel nostro piccolo anche noi possiamo fare lo stesso gioco dell'NSA. Quando osserviamo le vulnerabilta' scoperte contro Reddit e Digg implementiamo delle contromisure nel nostro sistema, senza per questo rendere pubblici i dettagli del nostro algoritmo o le vulnerabilita' che abbiamo scoperto da soli nel nostro sistema.

Esiste un'altra soluzione?

Eppure e' brutto che le cose stiano in questi termini, immagino che cosi' come a me dia fastidio non sapere di preciso come Google funzioni quando vedo siti pieni di spam che sono piu' in alto dei miei nelle pagine di ricerca, allo stesso modo gli utenti dei sistemi di social media potrebbe aver voglia di conoscere di preciso perche' una tale notizia o risorsa e' trionfante in home page mentre le proprie faticano ad imporsi. Pubblicare l'algoritmo sarebbe una operazione di trasparenza apprezzata da molti, ma ad oggi e' impossibile.
Sarebbe bello poter creare degli algoritmi che non possono essere violati anche se sono pubblici, come quelli crittografici ad esempio in cui la sicurezza risiede nella chiave. Nel caso degli algoritmi di ranking dei social media invece la sicurezza risiede totalmente nel meccanismo usato, e l'unica altra componente e' l'input dell'algoritmo, che in un sito fatto dal basso e' per definizione nelle mani degli utenti e di conseguenza purtroppo anche degli attaccanti.

Per approfondire

12548 views*
Posted at 05:56:45 | permalink | 18 comments | print
Do you like this article?
Subscribe to the RSS feed of this blog or use the newsletter service in order to receive a notification every time there is something of new to read here.

Note: you'll not see this box again if you are a usual reader.

Comments

timendum writes:
23 Apr 07, 06:37:04
bah, hai ragione, ma si arriverà al punto in cui gli algoritmi saranno così raffinati da non essere "violabili".
Poi IMHO con la pubblicazione si ha un salto di qualità non ignorabile, perché ognuno dirà la sua sull'algoritmo e questo subirà dei miglioramenti.
Infine tenere un algoritmo privato falsa la "concorrenza" del servizio che lo sfrutta, perché ci sarà qualcuno che ne sa di più di altri, questi avranno un'arma in più rispetto a chi non se ne intaressa.
Se invece l'algoritmo è pubblico, si "gareggia" tutti ad armi pari nell'arrivare in prima pagina.

Infine da molta più soddisfazione partecipare ad un social network in cui sai come funzionano le cose, se invece è oscuro c'è sempre il dubbio che ti stiano fregando (o che stiano falsando i risultati non so quante volte questa domanda è uscita su digg)
timendum writes:
23 Apr 07, 06:37:23
L'url nel nome non funziona :P
antirez writes:
23 Apr 07, 06:42:28
@timendum: si... tutti punti validi, ma allo stato attuale ci sono troppi svantaggi "individualistici" per l'azienda che pubblicasse la specifica dell'algoritmo. Sarebbe interessante fare un esperimento con un social media che viene rilasciato per intero come software open source, o comunque in un contesto in cui e' possibile rischiare grosso senza problemi. Ad esempio penso che la stessa Google potrebbe avere tutto quello che serve per creare una sorta di Digg con il solo scopo di provare questo processo di sviluppo pubblico dell'algoritmo di ranking. Serve una grossa azienda per farlo pero', che decide consapevolmente di rischiare in un dato campo per utilizzare le informazioni ricavate durante tale sperimentazione per gli altri servizi.

Per quanto riguarda la URL nei commenti, hai ragione, mettero' un campo 'blog' nel commento oggi stesso, e' giusto che chi commenta sia raggiungibile da chi visita il post, cosi' si crea un intreccio di blog navigabili tramite il sistema dei commenti. Mi scuso per non averlo fatto prima.
davidonzo writes:
23 Apr 07, 07:04:05
L'analisi è del tutto condivisibile. Penso però una cosa: l'algoritmo di oknotizie è il risultato di un atto comportamentale esterno all'algoritmo. Non dipende da se stesso, e soprattutto ha variabili core che stanno fuori (nella testa degli utenti :-) )
Al fine di evitare falsi positivi, l'unico modo sicuro di procedere è a consuntivo: prima scopro che qualcuno ha trovato il modo di "fregarmi", dopo mi regolo di conseguenza.

In buona sostanza, per migliorare l'algoritmo devi aspettare che qualcuno lo violi...

Se da un lato l'oscuramento permette una sostenibilità maggiore della versione usata, dall'altro la sostenibilità potrebbe essere figlia NON della bontà del codice...

Rilasciare il sorgente permette il confronto e la migliorabilità, ma, nel caso di oknotizie, potrebbe minare le basi del buon funzionamento.

Alla fine, il core qual è?
- Avere un buon algoritmo? => Rilascia il codice
- Mantenere un buon servizio? => Mantieni il codice "closed" e sviluppalo come conseguenza di comprovata vulnerabilità

IMHO la soluzione migliore non sta in nessuna delle due parti. Dipende dal risultato, e nel caso di oknotizie, il risultato primario è fornire un servizio affidabile, per cui, algoritmo chiuso (almeno per ora, considerando il contesto).
Doxaliber writes:
23 Apr 07, 08:56:37
Io non sono del tutto sicuro del fatto che un algoritmo chiuso migliori l'efficenza di Digg, Reddit, Oknotizie, Google, ed in generale di qualsiasi altro servizio web.
In realtà per "manipolare" il servizio non è nemmeno necessario conoscere a fondo l'algoritmo, basta studiarne il comportamento, fare dei tentativi e valutare i risultati.

Sono convinto che un approccio "empirico" sia decisamente efficace.
Valuto il comportamento degli utenti e la "reazione" del servizio e quindi mi regolo di conseguenza. Di solito con questi tipi di approccio si ottengono ottimi risultati.

Non a caso più o meno tutti gli algoritmi sono stati "manipolati", anche più volte, da persone che sapevano come muoversi. A volte gli sviluppatori hanno apportato delle "pezze" o migliorato l'algoritmo, ma di solito lo hanno fatto nel momento in cui si è presentato il problema, quindi anche in questo caso è valsa più "l'esperienza" sul campo (questa volta da parte degli sviluppatori dell'applicazione) che non l'approccio puramente teorico.

Ergo, nascondere l'algoritmo può dare benefici immediati, ma alla lunga non serve a niente, fino a diventare inutile quando si raggiunge una certa "massa critica" di utenti.
Doxaliber writes:
23 Apr 07, 09:00:12
@Antirez
"Sarebbe interessante fare un esperimento con un social media che viene rilasciato per intero come software open source"

Esiste questo prodotto, che è una specie di "clone" di Digg, mai provato però, non ho avuto tempo:
http://www.pligg.com/
antirez writes:
23 Apr 07, 09:07:09
@davidonzo: si... quello che dici e' assolutamente vero, si puo' provare a trovare parametri oggettivi per quanto riguarda il valore dei voti, il peso del tempo della notiza e tutte queste cose ma l'algoritmo di filtering che si occupa di individuare le frodi e' completamente ascientifico e arbitrario perche' e' appunto risposta a comportamenti scorretti specifici osservati in alcuni casi. Noi chiamiamo questa parte "algoritmo di filtering". Ancora ancora sarebbe pensabile pubblicare l'algoritmo di ranking ma quello che filtra i voti fraudolenti la vedo durissima ...
antirez writes:
23 Apr 07, 09:10:52
@Doxaliber: se l'algoritmo di filtering di oknotizie oggi fosse pubblico il servizio sarebbe praticamente impossibile da usare perche' con un po' di studio e un po' di matematica si potrebbe trovare un modo sistematico di fare andare in home le notizie in maniera fraudolenta.

Per quanto riguarda pligg, temo che non tenti in maniera particolarmente intelligente di filtrare i voti fraudolenti. Un problema pratico per un esperimento del genere e' che fino a quando il servizio non e' famoso ma viene frequentato solo da una piccola comunita' di persone per bene il tutto funziona anche con gli algoritmi piu' banali.

Su oknotizie la difficolta' e' separare i voti dati perche' in effetti c'e' un apprezzamento per una data notizia dagli altri che vengono dati per fare salire notize ad hoc. E' questa la sfida, non decidere qual'e' il metro in cui i voti buoni portano su la notizia.

Il ranking e' semplice, la formula generale e' rank = f(voti)/g(tempo) in cui f() e g() sono due funzioni che devono essere scelte con criterio.
Doxaliber writes:
23 Apr 07, 09:33:48
@Antirez

Non saprei Antirez, mi devo fidare della tua esperienza.
Io credo che a rendere valido un servizio web2 contribuiscano una serie di fattori:

- L'algoritmo, certamente svolge un compito importante

- Gli utenti, avere una base di utenti affidabili, fidelizzati al servizio, e che si comportano "bene", penalizzando gli usi fraudolenti del servizio e segnalandoli

- La velocità con cui si risolvono i problemi ed i bug che si presentano, la capacità di innovare continuamente il servizio, evitando così la perdita di interesse da parte degli utenti.

Per il resto, ripeto, bisognerebbe "provare sul campo" e verificare se effettivamente un algoritmo reso pubblico sarebbe meno efficente di un algoritmo protetto.

Un algoritmo per essere aggirato richiede fatica e comportamenti fraudolenti, tieni presente che un servizio come oknotizie richiede la registrazione dell'utente, sicuramente traccia gli IP... suppongo ci siano una serie di controlli che impediscano il "vote bombing", per cui si può anche riuscire ad aggirare il sistema, ma il trucco, imho, dura per poco tempo.
Credo che anche su ok notizie ci siano stati svariati tentativi per "manipolare" il servizio, e non credo che non abbiano avuto successo perché chi ha cercato di fare il furbo non conosceva l'algoritmo, piuttosto semplicemente perché l'algoritmo era efficace.

Naturalmente non ti dico questo per convincerti a rilasciare l'algoritmo di ok notizie ( :-DD ), diciamo che è uno scambio di opinioni che probabilmente non sarà mai "confutato" con una prova sul campo... :-)
antirez writes:
23 Apr 07, 10:35:28
@Doxaliber: prima di tutto ti ringrazio per lo scambio di opinioni :) Tengo questo blog proprio per avere un contatto con persone che si occupano/interessano a queste tematiche e tra l'altro sarei ben felice di avere soluzioni di cui sono certo, ma non e' cosi'! dunque viva lo scambio.

Un servizio di successo e' sicuramente un mix di tante cose, ma un pattern che abbiamo notato su oknotizie e' che a volte la notizia portata su in maniera fraudolenta e' perfettamente plausibile... non sembra spam, e' magari qualcosa di vagamente interessante ma che comunque non sarebbe salita da sola, senza qualche "aiuto", in queste condizioni gli utenti buoni possono fare poco, anche perche' di solito sono molto "fair player" e non votano NO a casaccio...

In questo scenario un buon algoritmo di filtering finisce per aiutare non poco. Per quanto riguarda la fatica... a volte e' incredibile cosa riescono a fare gli utenti, forse il caso piu' emblematico accaduto su oknotizie si e' avuto proprio mentre averi problemi di connettivita', ma c'era una vera e propria organizzazione (forse creata in realta' da una sola persona fisica) con alcune decine di account, diversi IP al proprio servizio e un sacco di tempo dedicato alla faccenda... dunque ormai non mi stupisco piu' di nulla :)
antirez writes:
23 Apr 07, 11:48:50
@all: il sistema dei commenti di questo blog e' ora un po' meno stupido e irriverente: permette a chi posta un commento di mettere una url che viene linkata al proprio nome e si ricorda per i prossimi commenti il nome, la URL, e la scritta limone, cosi' dobbiamo tutti solamente scrivere il commento e permere il tasto Spedisci. Se c'e' qualcosa che posso fare per rendere il commento piu' immediato saro' felice di provvedere immediatamente.
neon writes:
23 Apr 07, 12:27:02
Lo provo io...

Più che una feature che mancava al tuo weblog pensavo fosse una tua scelta.

(nella pagina di edit non è presente il campo sito)
antirez writes:
23 Apr 07, 12:30:12
Sembra funzionare, tra l'altro e' molto bello per me perche' ho desiderato di avere la possibilita' di leggere le cose che scrivono le persone che commentano qui.
antirez writes:
23 Apr 07, 12:58:44
@neon: no... non era una scelta, all'inizio non l'ho messo perche' ho fatto tutto al minimo per design ma mi sono accorto rapidamente che il link al nome dell'autore del commento e' una delle basi su cui poggia la blogosfera, permettendo una navigazione alternativa ai motori di ricerca e alle directory di blog.

Per la pagina di edit, lo sistemo subito.
antirez writes:
23 Apr 07, 13:01:03
edit sistemato
Fra_T writes:
24 Apr 07, 08:37:15
Prova commento :P
antirez writes:
24 Apr 07, 11:53:47
@Fra_T: Il proposito di salvare anche limone e' stato rafforzato dall'articolo che ho letto sul tuo blog dove si parlava dello script per auto-scriverlo :)
Fra_T writes:
26 Apr 07, 09:01:17
wow, onorato... :D
comments closed