BeEF: Introduzione
Abbiamo iniziato a vedere negli articoli precedenti la teoria alle spalle delle vulnerabilità di tipo Cross Site Scripting e successivamente abbiamo visto come queste falle possano essere utilizzate per perseguire attacchi di un certa complessita.
Con questo articolo chiudiamo il ciclo presentando uno dei tool piu potenti a disposizione di un penetration tester per automatizzare la exploitation di XSS: BeEF (Browser Exploitation Framework).
Il funzionamente del framework è il seguente: una volta individuata una XSS in una applicazione il tester inietta un client JavaScript (hook
) che si occupa di instaurare un canale di comunicazione con il server BeEF. Il server, dopo aver fatto il fingerprint delle vittime agganciate (browser, OS, etc), mette automaticamente a disposizione del tester tramite una comoda interfaccia una serie di attacchi specifici per violare i browser delle vittime (zombies) agganciati dal client.
Installazione BeEF
BeEF è scritto in Ruby e avrete bisogno almeno dell'interprete alla versione 1.9 e la libreria bundler:
$ ruby -v ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin10.8.0] $ sudo gem install bundler
Potete scaricare il tarball (o lo zip) della versione corrente (0.4.3.3) direttamente dalla pagina ufficiale su github:
$ wget https://github.com/beefproject/beef/zipball/beef-0.4.3.3
Oppure clonare il repository:
$ git clone https://github.com/beefproject/beef.git
Una volta ottenuto il codice entriamo dentro la directory e facciamo partire l'installer:
$ cd beef/ $ bundle install
A questo punto siamo pronti ad avviare il server BeEF:
$./beef
Come si può vedere dall'immagine il server BeEF si mette in ascolto di default sulla porta 3000
Configurazione BeEF
Le due componenti principali sono il client JavaScript hook.js
da iniettare in pagine vulnerabili per agganciare le vittime e il pannello di controllo del server.
Una volta iniettato il client si accede al pannello di controllo tramite il browser (default login: beef/beef):
http://localhost:3000/ui/panel
Si può simulare l'iniezione dell'hook visitando la pagina dimostrativa:
http://localhost:3000/demos/basic.html
In questo modo possiamo testare il framework contro il nostro stesso browser (usate browser diversi per aumentare il grado di divertimento!)
L'interfaccia è molto intuitiva: a sinistra troviamo la lista dei browser agganciati suddivisi tra quelli online e quelli offline, mentre a destra, una volta selezionato un browser, viene aperta una tab con i dati della vittima e le possibili azioni che possiamo compiere
Le sezioni sono le seguenti:
- in Details troviamo i dati del fingerprint del browser selezionato.
- in Logs c'è il registro delle azioni effettuate.
- in Commands, la parte più interessante, abbiamo una lista di possibili exploit/attacchi pronti da lanciare.
- in Rider abbiamo tutti gli strumenti per utilizzare il browser vittima come proxy
- in XSSRays abbiamo uno scanner xss in javascript che analizza la pagina attualmente attiva nel browser della vittima per rilevare nuove xss. Una volta trovate è possibile forzare il browser ad aprire le pagine vulnerabile per, ad esempio, re-iniettare l'hook di beef e avere così due punti di controllo.
Exploit pronti all'uso
La sezione comandi è suddivisa in tre parti:
- a sinistra c'è un albero di tutti gli exploit/attacchi/comandi che è possibile compiere. Ogni modulo ha un icona verde ad indicare se il tale attacco è stato testato con successo contro il browser corrente, un'icona rossa se invece l'attacco è sicuramente impraticabile e una icona arancio se l'attacco può funzionare ma non è garantito il risultato (perché magari dipende da fattori esterni al browser)
- Al centro c'è il registro dei risultati degli attacchi lanciati
- A destra il pannello di configurazione dell'attacco, con una descrizione, eventuali parametri e il pulsante Execute per lanciarlo.
I comandi eseguibili spaziano dall'estrarre i cookie della vittima, eseguire exploit per specifiche vulnerabilità nel browser o nei plugin installati, estrarre la history, alterare le pagine visitate al volo (ad esempio modificando i link), effettuare il keylogin in tempo reale, eseguire JavaScript definito dal tester e molto altro.
È possibile anche istruire BeEF a lanciare determinati moduli in automatico ogni volta che viene agganciato un browser.
I moduli sono constantemente aggiornati e lo sviluppo e la condivisione di nuovi è incoraggiato dal team di sviluppo. Se siete interessati a collaborare potete prendere contatto con il team direttamente sulla mailing list per gli sviluppatori.
Proxy Tunnel
Un'altra caratteristica interessante del framework è quella di poter utilizzare i browser agganciati come proxy e costringere il browser ad effettuare richieste http a nostro piacimento.
In questo modo si può, ad esempio, navigare per conto della vittima utilizzando le sessioni di autenticazioni attualmente attive o effettuare facilmenti attacchi CSRF.
Il proxy HTTP è in ascolto di default sulla porta 6789:
http://localhost:6789
XSSRays integrato in BeEF
XSSRays è uno scanner JavaScript scritto da Gareth Heyes, per rilevare vulnerabilità Cross-Site Scripting.
Lo scanner in questione è stato integrato in BeEF per permettere al tester di automatizzare il rilevamento di nuovi punti di iniezione direttamente nelle pagine attualmente visitate dalla vittima così da poter, teoricamente, iniettare nuovamente l'hook in pagine differenti per aumentare i punti di controllo.
Conclusioni
BeEF non è solo un framework ma un vero e proprio "parco giochi". Per chi è interessato alla sicurezza web è uno di quei tool che non si può fare a meno di conoscere e padroneggiare.
Per maggiori informazioni sul progetto potete fare riferimento alla pagina ufficiale. Se volete contribuire vi consiglio di tenere d'occhio il repository su Github e per qualsiasi altra comunicazione potete seguire il progetto sul blog o su Twitter.
BeEF è sviluppato tra gli altri dall'italiano Michele Orrù (@antisnatchor), sul suo sito potete trovare diversi esempi di utilizzo ed è sempre disponibile a scambiare quattro chiacchere su BeEF.