Browser come Botnet, o Coming War sul tuo browser web

Un pomeriggio di primavera stavo pranzando con Nick Briz in una piccola trattoria di quartiere vicino al nostro studio a Chicago. Stavamo gettando idee per un'imminente conferenza a Brooklyn a cui abbiamo partecipato negli ultimi anni chiamato Radical Networks. L'evento riunisce artisti, educatori, giornalisti e attivisti di tutto il mondo per favorire la discussione e l'impegno con argomenti di reti di comunicazione e infrastrutture Internet attraverso seminari, spettacoli, oratori invitati e una mostra d'arte.

Cosa accadrebbe se i siti Web prendessero in prestito risorse di calcolo dai dispositivi dei loro visitatori mentre navigavano come mezzo di elaborazione distribuita?

Entrambi abbiamo partecipato alla mostra d'arte sin dall'inizio del festival, ma quest'anno mi sono sentito obbligato a entrare nella pista degli altoparlanti. In particolare, stavo divertendo l'idea di presentare un'idea che avevo avuto qualche giorno prima, "e se i siti Web prendessero in prestito risorse di calcolo dai dispositivi dei loro visitatori mentre navigavano come mezzo di elaborazione distribuita?"

A causa del modo in cui il Web è stato progettato, per visitare un sito Web è necessario che il browser Web scarichi ed esegua il codice pubblicato da quel sito Web sul dispositivo. Quando navighi su Facebook, il loro codice JavaScript viene eseguito nel tuo browser web sul tuo computer. Il codice che viene eseguito nel tuo browser è, naturalmente, assunto come codice relativo alla funzionalità del sito che stai visitando. Netflix offre codice che consente al browser di accedere al database dei film e lo streaming di contenuti video, Twitter offre codici che consentono di pubblicare, visualizzare e commentare tweet, ecc ...

Tecnicamente, tuttavia, non c'è nulla che impedisce a un sito Web di pubblicare codice arbitrario che non ha nulla a che fare con la tua esperienza di navigazione. Il tuo browser eseguirà ciecamente qualsiasi codice JavaScript che riceve dal sito Web che stai navigando. Cosa impedisce ai siti ad alto traffico come Facebook e Google di abusare di questa funzione del Web, raccogliendo gratuitamente enormi risorse di calcolo dalle loro centinaia di migliaia di utenti connessi contemporaneamente? Questa idea era davvero fattibile in pratica? In tal caso, veniva utilizzato in natura?

Questo post è un resoconto del mio viaggio in questa tana di coniglio di un'idea e un riassunto del discorso che ho finito per tenere a Radical Networks a seguito di quella ricerca.

Fare un passo indietro, un po 'di calcolo distribuito

Prima di approfondire le implicazioni del prendere in prestito le risorse di calcolo dell'utente mentre navigano inconsapevolmente sul Web, voglio toccare il motivo per cui sarebbe vantaggioso farlo in primo luogo. Lo scenario di esempio che ho proposto rientra in un campo dell'informatica chiamato Informatica distribuita. Il calcolo distribuito è la pratica di dividere un problema in piccoli blocchi e di eseguirlo su molti computer diversi in parallelo, riducendo significativamente il tempo necessario per calcolare il problema. In generale, il calcolo distribuito offre abbondanti risorse di calcolo come molte CPU, elevata larghezza di banda di rete e una serie diversificata di indirizzi IP. Per alcune attività, il calcolo distribuito offre l'opportunità a 1.000 computer di lavorare insieme per risolvere un'attività 1.000 volte più velocemente di quanto richiederebbe un computer per risolvere quella stessa attività lavorando da solo.

Elaborazione seriale (in alto) vs elaborazione distribuita (in basso)

Il calcolo distribuito ha una ricca storia che risale ad ARPANET negli anni '60, con una serie di progetti scientifici di comunità e cittadini volontari sorti alla fine degli anni '90 e all'inizio degli anni 2000 (in parte grazie a Berkeley Open Infrastructure for Network Computing o BOINC Software). Progetti come SETI @ Home, Folding @ Home, GIMPS e molti altri che consentono agli utenti di computer di donare tempo di inattività sui propri computer per curare le malattie, studiare il riscaldamento globale, trovare grandi numeri primi, cercare la vita aliena e fare molti altri tipi di ricerca scientifica.

Una botnet è una rete di elaborazione distribuita in cui i proprietari dei computer partecipanti non sanno che i loro computer partecipano alla rete.

Di fronte l'idea del calcolo distribuito volontario è il concetto di Botnet. Una botnet, il portmanteau di "Robot" e "Rete", è una rete di calcolo distribuita in cui i proprietari dei computer partecipanti non sanno che i loro computer stanno partecipando alla rete. Sono associati all'hacking e all'attività criminale e sono conosciuti soprattutto per il loro uso in attività nefaste come DDoS (Distributed Denial of Service), spamming via e-mail, spyware, frodi sui clic e, più recentemente, mining di criptovaluta. Il software Botnet viene solitamente installato sulla macchina di un utente come Trojan o worm e può persistere per mesi o anni senza che il proprietario lo sappia, fornendo nel contempo cicli di calcolo e larghezza di banda a una terza parte anonima. Occasionalmente queste botnet crescono di dimensioni fino a quando non controllano decine di milioni di computer degli utenti insospettati e vengono riconosciute in modo informale e nominate dai membri della comunità della sicurezza informatica.

Botnet con nome

Botnet basate su browser

Immagina una situazione in cui il tuo computer partecipa come nodo a una botnet, solo che questa volta il malware non è installato come programma sul tuo computer. Piuttosto, si verifica sullo sfondo della stessa scheda del browser che hai aperto leggendo questo post del blog. Questo metodo darebbe al codice JavaScript dannoso pieno accesso all'API del browser Web sandbox, un insieme sempre più potente di tecnologie Web. Sarebbe anche transitorio e difficile da rilevare una volta che l'utente ha navigato al di fuori del sito Web, fornendo risorse di calcolo alla botnet pari al numero di visitatori simultanei del sito Web in qualsiasi momento. Cosa impedisce ai siti Web ad alto traffico di attirare risorse dai loro visitatori gratuitamente per la durata del tempo in cui visitano un sito Web?

Un po 'di ricerche ha rivelato che questa non era un'idea particolarmente nuova e che la gente parlava apertamente di questa tecnica almeno dal 2012. I MWR Labs hanno condotto ricerche sull'argomento applicato al cracking distribuito dell'hash sul web (un'idea che io elaborato in una demo durante il mio discorso, codice qui) e Jeremiah Grossman e Matt Johansen hanno tenuto un grande discorso al Black Hat USA nel 2013 sull'argomento. Entrambi i gruppi di ricerca hanno distribuito i loro esperimenti a utenti ignari in modo particolarmente subdolo e ingegnoso: le reti pubblicitarie.

I metodi tradizionali di elaborazione distribuita coinvolgono volontari o virus, ma il panorama è abbastanza diverso per le botnet basate su browser. Con il nostro approccio, dobbiamo distribuire il nostro codice al maggior numero possibile di browser Web contemporaneamente. Abbiamo alcune opzioni:

  • Gestisci un sito Web popolare
  • Scrivi un tema Wordpress / Tumblr e incorpora il nostro codice dannoso nella fonte
  • Esegui un server proxy gratuito (o nodo di uscita TOR) e immetti il ​​nostro codice nel traffico non HTTPS
  • Sii un ISP e fai lo stesso ^
  • Incorpora il nostro codice dannoso in siti Web popolari con persistente cross-site scripting (XSS) (illegale)
  • Acquista un banner pubblicitario

Come quelli prima di me, mi sono avventurato lungo il sentiero oscuro della pubblicità su Internet. Sapevi che quei fastidiosi banner pubblicitari che ti seguono in giro per il web sono spesso iframe, uno speciale elemento HTML che ti consente di incorporare pagine Web in altre pagine Web? Quella squallida foto a innesco nella parte superiore del tuo sito torrent preferito potrebbe non essere l'innocente .JPG pensi che sia, ma piuttosto una pagina web a sé stante, con la possibilità di fornire codice JavaScript personalizzato che viene eseguito nel tuo browser .

Ecco l'idea: le reti pubblicitarie collegano gli editori di contenuti web (ad esempio blog, siti di notizie, siti porno, forum) agli inserzionisti. Gli inserzionisti pagano la rete pubblicitaria per clic (CPC) o per impressione / visualizzazione (CPM). La rete rimuove i soldi dalla parte superiore prima di inviarli agli editori che ospitano gli annunci sulle loro piattaforme. Quando un inserzionista crea una creatività dinamica di terze parti (un nome di fantasia per un annuncio