Per chi non lo sapesse, una botnet è una rete composta da software (bot) in grado di agire in maniera autonoma o coordinata. A differenza delle botnet tradizionali, che sono composte da malware e pensate principalmente per attacchi di tipo DDOS, nelle social botnet ogni bot impersona un social account, utilizzando in maniera automatizzata gli strumenti della piattaforma su cui opera.
Gli utilizzi di una rete del genere sono molti e con diversi gradi di legalità (o illegalità). Nella variante più innocua, una botnet può essere usata per aumentare i follower di un’azienda o per distribuire link e pubblicità a scopo di marketing.
Indice degli argomenti
Social botnet: quando l’utilizzo è illegale
All’altro estremo, ci sono le campagne di phishing e di malware, in cui i bot diffondono link malevoli. In questo caso l’attaccante potrebbe sfruttare il malware inoculato, tipicamente un ransomware, per estorcere richieste di denaro o per rubare dati sensibili (per esempio degli account bancari). Talvolta le informazioni ottenute, anziché essere usate nell’immediato, vengono raccolte e rivendute a terzi per essere impiegate in un secondo momento.
A metà strada ci sono gli spam bot, che pubblicizzano prodotti di dubbia origine, come pillole magiche per la dieta, finti Viagra o videochat. A volte questi bot usano hashtag di marche famose per attirare più utenti. In questo caso si parla di hijacking hashtag.
Discorso a parte lo meritano poi quelle reti progettate per raccogliere informazioni su target specifici o per influenzare le opinioni degli utenti. A questo proposito, basti ricordare i sospetti sulla presunta botnet di provenienza russa che avrebbe contribuito a influenzare le ultime elezioni americane.
Così si costruisce una social botnet
Dopo aver scelto la piattaforma social su cui agire, per costruire una social botnet occorrono sostanzialmente due elementi:
- un certo numero di account validi
- l’automazione degli account, ovvero la creazione e il controllo dei bot
Per il nostro esperimento abbiamo scelto Twitter, ma i concetti esposti di seguito sono applicabili a qualsiasi altro social network. Al nostro fianco c’è Python, linguaggio d’elezione per chi si occupa di sicurezza informatica, grazie alla sua semplicità, flessibilità e al vastissimo numero di librerie messe a disposizione dalla sua attivissima community.
Iniziamo dunque dagli account.
Il primo passo da fare è generare una serie di identità fittizie, che useremo per le iscrizioni su Twitter. A questo scopo esistono diversi siti che generano profili casuali e mantengono nella sessione web un indirizzo mail temporaneo che possiamo usare per ricevere e confermare i link di attivazione. Noi abbiamo usato fakena.me.
Un finto account appena generato usando il servizio on-line fakena.me
Con uno script abbiamo eseguito lo scraping del sito, salvando su file i dati generati.
Con uno script appositamente realizzato abbiamo effettuato lo scraping del sito
Passiamo a Twitter. Per creare gli account abbiamo sfruttato la potenza di selenium-python, un modulo che permette di impersonare un browser ed interagire con i vari componenti delle pagine web quali form, pulsanti e via dicendo.
Usando Firefox, abbiamo creato un altro script con cui siamo riusciti a compilare automaticamente i form di iscrizione e ottenere un account.
Tuttavia a questo punto è sorto un problema: Twitter permette l’iscrizione di massimo due account dallo stesso IP, dopodiché per ogni account aggiuntivo è richiesta una conferma telefonica, il che per noi non va bene.
Per aggirare questa limitazione possiamo appoggiarci ai servizi di server in cloud, come ad esempio le istanze Spot di Amazon AWS. Un’istanza Spot è una particolare istanza che sfrutta la capacità di calcolo inutilizzata del cloud AWS, può essere soggetta a brevi interruzioni di servizio e perciò offerta a prezzi particolarmente convenienti rispetto alle normali istanze server.
Per interagire con le istanze di Amazon ci viene in aiuto il modulo python Boto3, che permette di automatizzare l’operazione: possiamo generare le nostre istanze in zone geografiche diverse e lanciare il driver, aggirando così il controllo IP di Twitter.
Account fasulli sulle social botnet: come usarli
Ora che disponiamo degli account, dobbiamo stabilire come utilizzarli. Le possibilità sono due: continuare a usare selenium, impersonando quindi un utente che accede tramite browser, oppure utilizzare le API (Application Programming Interface, interfaccia di programmazione di un’applicazione) che Twitter ci mette a disposizione.
Abbiamo optato per la seconda: ciò richiede un’ulteriore operazione da compiere, tuttavia l’utilizzo delle API ci consente una maggiore flessibilità di utilizzo, svincolandoci inoltre dalla necessità di avere un browser e permettendoci di agire direttamente tramite console.
Il sistema di autenticazione delle API di Twitter si basa su Oauth2 (https://oauth.net/) che in estrema sintesi è un protocollo standardizzato basato su token, nato per gestire l’autenticazione e l’autorizzazione di applicazioni terze verso dati e operazioni di un account. Nel nostro caso, i dati dell’account sono la timeline, la lista degli amici, i tweet postati, mentre le operazioni sono la pubblicazione o la ricerca di un tweet, la ricerca di hashtag e così via.
Twitter prevede due modalità di autenticazione, l’application-only e la user:
- l’application-only authentication permette di accedere ai soli dati pubblici di Twitter (per esempio cercare e leggere i tweet pubblicati);
- la user authentication permette di assumere il controllo totale delle operazioni a disposizione dell’utente (per esempio postare un tweet).
A queste modalità corrispondono rispettivamente due coppie di chiavi:
- la consumer key e la consumer secret;
- l’access token e l’access token secret.
Così come abbiamo già fatto per la creazione degli account, possiamo utilizzare selenium per accedere a https://apps.twitter.com/ e farci rilasciare entrambe le coppie di chiavi di ciascun account creato.
Ora che abbiamo anche i token di accesso alle API siamo finalmente pronti per iniziare ad usare i bot.
Il nostro bot usa Tweepy per accedere in maniera facile e conveniente alle numerose API di Twitter.
Innanzitutto è consigliabile personalizzare l’immagine profilo. Infatti i profili “egg“, ovvero quelli con l’immagine di default a forma di uovo sono facilmente riconoscibili come bot, specie se hanno un elevato tasso di attività.
Pertanto abbiamo dotato il bot di una funzione che scarica un’immagine random e la imposta nel profilo. Noi abbiamo usato Picsum, una sorta di generatore casuale di immagini. Siamo pronti a pubblicare il nostro primo post, un saluto non si nega a nessuno!
La social botnet entra in azione
Finiti i convenevoli è ora di mettersi al lavoro.
Le API di Twitter si dividono in due categorie principali:
- le API di tipo RESTful, con cui facciamo il pull dei dati senza mantenere informazioni sulla sessione;
- le API di tipo streaming, con cui “restiamo in ascolto”, per avere un feed in real-time su tutto ciò che accade.
Per il nostro esempio abbiamo immaginato di istruire la botnet a diffondere link malevoli (malware spreading) e quindi le API RESTful sono tutto ciò che ci occorre.
In caso di reti particolarmente estese, risulta scomodo aggiornare e comandare i bot singolarmente, perciò possiamo pensare di usare Twitter anche come canale di comando e controllo. Il gioco funziona così: il bot che coordina la rete (il master bot) pubblica un tweet apparentemente innocuo che in realtà nasconde un comando da eseguire. Gli altri bot, che periodicamente controllano la presenza di nuovi tweet del master, decodificano il contenuto del tweet ed eseguono il comando in esso contenuto.
Questo tipo di coordinamento è in realtà tanto semplice quanto difficile da intercettare e bloccare. Per esempio, il master bot potrebbe pubblicare un tweet di questo tipo:
Un esempio di tweet pubblicato dal master bot
I bot accedono alla timeline del master bot, leggono il tweet e interpretano come di seguito:
Ecco come i bot leggono e interpretano il tweet pubblicato dal master bot
Cos’è successo? Il bot ha letto il messaggio e ne ha fatto il “parsing”, ovvero lo ha tradotto così: cari bot, fate reply alle conversazioni che contengono gli hashtags #books e #publishing. Inoltre, il testo del messaggio da twittare si trova su pastebin e il link da postare su tinyurl:
- l’hashtag #re è un comando prestabilito di reply;
- gli altri hashtag indicano i topic delle conversazioni a cui agganciarsi;
- la keyword p_ precede il suffisso dell’url di pastebin, codificato in ROT-13 (https://it.wikipedia.org/wiki/ROT13). Una volta decodificato, diventa “vFcur2Za” e l’url risultante contiene il messaggio da postare: “buy this book and become a black hat!” (lo trovate qui: https://pastebin.com/raw/vFcur2Za);
- la keyword t_ precede il suffisso dell’url di tinyurl, anch’esso codificato in ROT-13. Decodificandolo, il bot è in grado di comporre l’url corretto: https://tinyurl.com/ybv7b8ql.
Quest’ultimo è un url “shortened”. Per vedere dove ci reindirizza è possibile usare uno short-url checker, per esempio CheckShortURL, che rivela il link originale: http://my-malware.com (ovviamente non c’è nessun malware qui, e il link è inesistente).
Se il link malevolo dovesse venire bloccato, o se l’attaccante volesse semplicemente modificare le modalità di attacco, basterà postare un altro tweet con le nuove “coordinate”. Semplice no?
I consigli per stare alla larga dalle social botnet
Naturalmente la comunicazione e il comportamento dei bot possono essere resi molto più sofisticati, ma il concetto di fondo non cambia. E la raccomandazione principale nemmeno: attenzione a dove fate clic!
Per i più curiosi: https://gist.github.com/vegaviz ospita parte del codice citato nell’articolo. In particolare: scrapefakes.py per lo scraping delle fake id, twitterdriver.py per l’iscrizione automatizzata e simplebot.py per il nostro semplice modello di bot.
Disclaimer: le opinioni e i contenuti riportati dall’autore sono formulati a titolo esclusivamente personale. Si declina ogni responsabilità derivante dall’utilizzo delle informazioni contenute o linkate nel presente articolo.