In questa lezione parleremo di Metasploit, lo strumento principe tra quelli che consentono di preparare e mettere in funzione un exploit all’interno di Kali Linux. Una guida dettagliata al suo funzionamento esula dagli scopi di questa lezione introduttiva, che vi guiderà nei primi passi al suo utilizzo. Tuttavia, una volta letti i contenuti di questa lezione, è possibile prendere visione della guida ufficiale, disponibile sul sito web della Offensive Security.
Requisiti
Metasploit è preinstallato nell’ultima distribuzione di Kali. Fondamentalmente, non dovremo far altro che avviarlo, cliccado sull’icona del tool (mostrata in figura):
Dovrebbe a questo punto avviarsi la shell seguente:
A questo punto non saremo ancora pronti ad utilizzare Metasploit. Infatti, uno dei problemi principali quando si utilizza un tool di exploitation, è trovare un host “vittima” su cui effettuare i propri esperimenti. Per questo motivo il team di Metasploit ha messo a disposizione una macchina vulnerabile, chiamata “Metasploitable”, sulla quale condurre i nostri test. L’immagine può essere scaricata ed eseguita con uno strumento di virtualizzazione (ad esempio Virtualbox). Il link per il download è questo.
Come raccomandazione generale, è bene limitare l'uso di Metasploitable all’interno della rete locale, in modalità NAT e possibilmente mentre si è disconnessi da Internet.
Architettura di Metasploit
Metasploit è installato sulle macchine Kali, all’interno della directory /usr/share/metasploit-framework. Il filesystem ha la struttura mostrata in figura:
Troveremo dunque le seguenti cartelle:
- Data: contiene i dati utilizzati dagli exploit
- Documentation: contiene la documentazione del framework
- Lib: contiene il codice di metasploit
- Modules: contiene il codice degli exploit, consistenti in script scritti in linguaggio Ruby
- Plugins, scripts, tools: contengono strumenti di ausilio al framework (es. Meterpreter)
Infine, l’architettura di Metasploit può essere riassunta nella seguente immagine:
Tutti i moduli Metasploit sono classi scritte in Ruby. I moduli di particolare interesse per questa guida, sono la console, ed i moduli riportati all’interno del box penetration modules, denominati exploits e payloads.
La console di metasploit
La riga di comando di Metasploit è chiamata “MSFconsole”, mentre nelle versioni precedenti, era denominata "MSFcli". Una volta avviata, avremo a disposizione una serie di utili comandi, riassunti di seguito:
- Connect: si connette ad un host remoto utilizzando il comando netcat
- Exit: esce dalla console
- Resource: esegue i comandi memorizzati all’interno di un file
- Search: effettua la ricerca tra i moduli disponibili
- Info: fornisce informazioni su un modulo
- Help: menu di help
- Use: utilizza un dato modulo
- Set/Get: configura/ottiene il valore delle variabili per il modulo correntemente utilizzato
Exploit
Gli exploit in Metasploit appartengono a due categorie: "attivi" e "passivi". Gli exploit attivi vengono eseguiti fino al loro completamento. In caso di errore verranno terminati fornendo istruzioni sull’errore incontrato.
Gli exploit passivi attendono che l’host remoto avvii l’esecuzione dell’exploit; per tale motivo, questi exploit sono usualmente eseguiti in background in attesa che accada qualcosa.
Utilizzo di un exploit
Per prima cosa dobbiamo conoscere l’exploit che vogliamo utilizzare. Supponiamo di volere attaccare una macchina su piattaforma “OSX”. Cerchiamo tra gli exploit disponibili e digitiamo dunque il seguente comando:
search type:exploit platform:osx
Otterremo dunque la lista degli exploits mirati a sistemi osx. A questo punto, selezioniamo uno tra gli exploits disponibili, per esempio, la remote ssh code execution:
use exploit/multi/ssh/sshexec
Verifichiamo le opzioni a disposizione di questo exploit, digitando:
show options
Settiamo dunque le opzioni principali per eseguire l’exploit (meramente a scopo di esempio):
set username test_user
set password test_pwd
set rhost 10.0.0.1
Lanciamo infine l’exploit digitando:
exploit
Payload
Gli exploit di Metasploit vengono gestiti tramite il concetto di “payload”. Il payload rappresenta il codice dell’exploit, che può essere caricato sull’host remoto in tre modi differenti: "single", "stager / stage" e "meterpreter".
Prima di tutto, quando eseguiremo un exploit, avremo la possibilità di settare il tipo di payload, tramite il seguente comando:
set PAYLOAD nome_payload
Payload Single
Un payload single contiene interamente il codice dell’exploit. Questo tipo di payload garantisce stabilità nell’esecuzione del codice, dal momento che non verrà frammentato prima dell'invio verso la macchina remota.
Quali sono, però, gli svantaggi nell’utilizzo di questo tipo di payload? Il “single” payload può essere facilmente rilevato da strumenti di protezione, poiché il codice da eseguire viene inviato in modo lineare e facilmente rilevabile da strumenti che possiedono la signature per lo stesso tipo di exploit. In particolare, strumenti di rilevazione delle intrusioni intelligenti quali Next-Generation Firewalls, endpoint clients e così via non hanno difficoltà a scoprire che del codice malevolo sta per essere eseguito sull'host.
Il nostro consiglio è di utilizzarlo per cominciare a sperimentare le capacità di Metasploit, ma difficilmente riusciremo ad eseguirlo su una macchina "reale".
Payload stager
Un payload più difficile da rilevare che lavora in congiunzione con i payload di tipo “stage”, esegue il task in diversi passi. Fondamentalmente, dopo che l’exploit verrà eseguito sull’host remoto, verrà richiesto il codice vero e proprio del malware da installare. In questo modo si cercherà di “confondere” eventuali strumenti di rilevazione di codice malevolo, suddividendo l'attacco in più fasi.
Payload Meterpreter
La categoria di payload più avanzata. Un payload di questo tipo opera tramite la tecnica della "dll injection", direttamente sulla RAM dell’host remoto, evitando di alterare file sul disco. In questo modo si cercherà di coprire le eventuali tracce, rilevabili solo da strumenti di protezione. Gli exploit caricati con payload di tipo “meterpreter” possono essere modificati e disattivati in qualunque momento, rendendo il compito della loro rilevazione estremamente complesso.
La peculiarità più importante di Meterpreter è che il codice dell’exploit viene caricato nel processo compromesso e non crea ulteriori processi che potrebbero essere facilmente rilevati; oltre a ciò le comunicazioni con l’host origine sono sempre cifrate, rendendo ancora più complessa la rilevazione per uno strumento di network monitoring.
La sequenza di operazioni che vengono eseguite può essere riassunta come segue:
- Il client carica la DLL tramite una socket verso l’host remoto
- Il server eseguito sulla macchina remota carica il codice malevolo in memoria e lo inizializza
- Il codice dell'exploit effettua la registrazione con il client
- Il cilent carica le API per controllare la macchina remota e richiamare le funzionalità offerte per l’esecuzione del codice malevolo
Va infine segnalato che nel 2015, Meterpreter è stato esteso dando la possibilità di caricare ed eseguire codice Python. Per eseguire il codice Python sarà dunque sufficiente eseguire il comando seguente, dopo l'esecuzione dell'exploit:
python_import -f malicious_code.py