Nicholas Giordano

Cloud Arch. & Full Stack Developer

BeEF: Browser Exploitation Framework

Di cosa stiamo parlando?

BeEF è l’abbreviazione di The Browser Exploitation Framework. È uno strumento di test di penetrazione che si concentra sui web browser (chrome, firefox, ecc.).

Amid growing concerns about web-borne attacks against clients, including mobile clients, BeEF allows the professional penetration tester to assess the actual security posture of a target environment by using client-side attack vectors. Unlike other security frameworks, BeEF looks past the hardened network perimeter and client system, and examines exploitability within the context of the one open door: the web browser. BeEF will hook one or more web browsers and use them as beachheads for launching directed command modules and further attacks against the system from within the browser context.

In parole povere è un software che ci permette di “attaccare” un client utilizzando come unico vettore il browser web del client stesso.

Struttura di base dell’attacco:

  1. Creo una sessione di BeEF su una macchina ad ip statico connessa alla rete web globale
  2. Infetto il client tramite sito web contenente codice malevolo/invio un link manevolo
  3. Controllo la macchina client infettata tramite del codice js incapsulato nel punto 2

Utilizzando come vettore un web browser, questo attacco funziona su qualsiasi dispositivo dotato di web browser (smartphone compresi!)

Portare avanti l’attacco:

E’ fondamentale aver installato BeEF su una macchina remota, ad ip statico e che sia raggiungibile dal client, questa macchina si occuperà di propagare l’infezione sul client incapsulando codice malevolo all’interno di una pagina web infettata o di un sito malevolo creato ad hoc. Una volta fatto ciò tramite la GUI di BeEF sarà possibile visionare un elenco dei client (browser web) infettati e sarà possibile controllarli o ottenerne dati/informazioni in vari modi.

Creazione della macchina BeEF:

Possiamo hostare BeEF ovunque, per comodità utilizzeremo un server linux in cloud, per garantirci di avere un ip statico ed una macchina connessa ad internet. Possiamo farlo (a scopo di test) utilizzando und droplet basata su ubuntu all’interno di digitalocean (o qualsiasi altro provider) seguendo la guida ufficiale per ubuntu, oppure caricandola come container docker all’interno di un qualsiasi host in cui docker sia in esecuzione. In maniera alternativa, se vogliamo un’ installazione rapida e del tutto guidata, possiamo utilizzare lo script di installazione presente nella repository GitHub ufficiale.

Per prima cosa dobbiamo collegarci alla macchina remota su cui vogliamo installare BeEF:

$ ssh [email protected]

Potremo poi procedere a scaricare il sorgente di BeEF tramite git:

$ git clone https://github.com/beefproject/beef.git
$ cd beef

Una volta fatto ciò potremo lanciare l’installer, per avviare la procedura guidata di installazione, per farlo, una volta dentro la cartella della repository ci basta fare

$ ./install

Una volta terminata l’installazione è obbligatorio configurare delle credenziali per accedere al pannello di controllo di BeEF (per farlo basta modificare il file config.yaml presente nella cartella in cui stiamo operando) e possiamo quindi procedere a lanciare il software con il comando ./beef. Se tutto è andato a buon fine possiamo ora aprire un qualsiasi browser e accedere al pannello di controllo di BeEF recandoci su http://IP-Macchina-Remota:3000/ui/panel dove sarà possibile fare l’autenticazione ed iniziare ad usare il software.

schermata principale di BeEF dopo il primo login

Attaccare (attaccarsi) ad un web browser

Una volta installato beef possiamo procedere ad infettare un client, ci sono modi avanzati di creare url che siano credibili, o è possibile inserire del codice malevolo in qualsiasi pagina web. Di default BeEF ci mette a disposizione due modelli pronti per effettuare il test, come riportato nella schermata principale. Abbiamo due url che permettono di effettuare l’attacco:

  • http://IP-Macchina-Remota:3000/demos/basic.html
  • http://IP-Macchina-Remota:3000/demos/butcher/index.html

Per effettuare un test basta uno qualsiasi di questi url di prova, la differenza tra i due è che il secondo ha le sembianze di un sito web più “reale”.

Per portare avanti l’attacco non ci resta che inviare quindi uno di questi due link al client remoto, che dovrà unicamente aprirli con il proprio browser.

Una volta che il client avrà aperto il link inviato questo risulterà all’interno del nostro pannello di controllo:

client “vittima” connesso

Una volta che uno o più client hanno cliccato sul link, ci basterà cliccare sul nome del client per vedere una vasta serie di dettagli o per eseguire un qualsiasi comando utilizzando l’opzione “commands”

schermata comandi per client remoto

Le cose che possiamo fare sono tante, non tutte sono compatibili con tutti i client, ma sicuramente tutte le funzioni a disposizione permettono di effettuare un test di sicurezza molto robusto, utilizzando come vettore il software più usato di tutti (il “web browser”).

Questa tipologia di attacco è particolarmente interessante e “preoccupante”, paradossalmente mentre leggete questa pagina potrebbe essere in esecuzioni del codice js che ha appena “agganciato” il vostro browser ad una mia ipotetica sessione di BeEF. (Non vi preoccupate, non è così).

La domanda nasce spontanea: come ci si difende? La risposta a questa domanda non è facile, potremmo ispezionare ogni singola pagina web alla ricerca di script malevoli, ma sarebbe una ricerca realisticamente infruttuosa. La cosa migliore che conviene fare è non aprire url sospetti e in linea generale prestare grande attenzione a quando si naviga sul web o si accede a siti particolari.

😀