Riprendiamo oggi un articolo scritto su elearnsecurity.

Una delle migliori caratteristiche offerte da Metasploit è l’abilità di effettuare “Pivoting“. Con questa tecnica, un attaccante può utilizzare una macchina compromessa come pivot per attaccare altre macchine nello stesso o in altri network che normalmente non potrebbe raggiungere. La maggior parte delle volte l’attaccante usa questa tecnica per compromettere altre macchine e sottoreti per arrivare al suo obiettivo finale, un database, informazioni isolate e via discorrendo.

Il Pivoting può essere fatto in Metasploit, funziona bene ed è abbastanza facile usarlo.

Quel che andiamo a vedere oggi è proprio come utilizzare il pivoting, durante il processo di post-exploitation, per scansionare una rete interna, non direttamente accessibile da noi. Andremo ad usare Nessus come vulnerability scanner.

Andiamo dunque a vedere passo passo le operazioni da compiere per fare pivoting.

Scenario

Il primo passo. Definiamo uno scenario per comprendere quelli che saranno gli step successivi.

scenario pivoting

– 199.16.45.52 è la macchina attaccante (noi).
– 192.168.78.5 è la macchina compromessa, che noi utilizzeremo per fare Pivoting.
– 192.168.78.25 è la macchina bersaglio, quella che vogliamo scansionare. Questo host non è accessibile da internet.

Dal momento che le macchine risiedono su network differenti, l’attaccante non può comunicare direttamente con il bersaglio.

Configurazione

Gli step necessari per far funzionare il Pivoting sono i seguenti:

1. Aggiungiamo una rotta verso il network bersaglio (all’interno di Meterpreter).
2. Avviamo un proxy sulla macchina compromessa (che verrà usato da Nessus).
3. Avviamo il processo di Nessus all’interno del proxy (adoperiamo strumenti come proxychains e tsocks).

Lo screen che segue mostra la sessione di meterpreter sulla macchina compromessa (192.168.75.5):

ipconfig meterpreter

Come possiamo vedere dal comando ipconfig, il network bersaglio è 192.16.78.0/24. Possiamo dunque aggiungere una rotta al network eseguendo il comando route add come segue:

add route meterpreter

Supponiamo di non conoscere quali altri host ci siano sulla rete bersaglio. Possiamo comodamente scansionare l’intero network usando la rotta appena aggiunta. Per farlo usiamo il comando run arp_scanner

arp_scan meterpreter

Come si può vedere, aggiungendo la rotta precedente, siamo già in grando di comunicare con il network bersaglio (all’interno di meterpreter).
Per esserne sicuri possiamo eseguire il modulo auxiliary/scanner/portcscan/tcp sul bersaglio:

tcp scan meterpreter

Qui sotto il traffico che va dalla macchina dell’attaccante (199.16.45.52), attraverso la sessione di meterpreter sulla macchina compromessa (192.168.78.5), e dalla macchina compromessa al bersaglio (192.168.78.25). Che si può confermare sniffando il traffico sulla macchina attaccante e quella compromessa:

tcp scan attacker

L’attaccante comunica attraverso meterpreter (guarda la porta 4444) con la macchina compromessa:

tcp_scanner_victim

La macchina compromessa (192.168.78.5) effettua una scansione sulla vittima (192.168.78.25) e comunica indietro i risultati all’attaccante.

Come da nostra assunzione, questo è impossibile fuori dalla sessione meterpreter. Se provassimo a pingare direttamente il bersaglio, quest’ultimo non darà alcuna risposta:

ping

Avviamo il Proxy

Ora che abbiamo la nostra rotta verso il bersaglio, avviamo il proxy server sulla macchina compromessa e dopo avviamo Nessus attraverso il proxy. Metasploit già possiede un modo che permette di eseguire il proxy. Parliamo del modulo auxiliary/server/socks4a. Quindi eseguiamolo e configuriamolo come segue:

meterpreter_proxy_socks4a

Questa configurazione avvierà un proxy sulla porta 1080 localhost. Ora dobbiamo configurare lo strumento che inoltrerà il traffico sul proxy. Useremo proxychains. Dunque apriamo /etc/proxychains.conf e modifichiamo l’ultima linea con la configurazione del server di socks4a e cioè: localhost sulla porta 1080.

Ora possiamo proxare qualsiasi programma. Per verificare che tutto funzioni correttamente possiamo effettuare una scansione con nmap sulla macchina bersaglio. Notare che proxychains supporta solo il tunneling TCP, quindi non possiamo utilizzare comunicazioni UDP. Quindi forziamo nmap a non effettuare scansioni tramite ping con l’opzione -PN. Dunque il comando completo è:

proxychains nmap -sTV -n -PN 192.168.78.25

nmap con proxy

E da come si può vedere, la scansione avviene senza problemi con nmap indirizzando tutto il traffico attraverso il proxy server della macchina compromessa.

Avviamo Nessus

Ora che abbiamo visto che il tunnel attraverso il proxy funziona, avviamo Nessus, nella stessa maniera vista per nmap. Ecco il comando:

proxychains nessus-service –D

Nelle nuove versioni di Nessus è possibile che il comando cambi e diventi qualcosa del tipo:

proxychains /etc/init.d/nessusd start

proxychains nessus service

Ora possiamo accedere all’interfaccia grafica di Nessus da browser come di solito facciamo attraverso: http://localhost:8834 . Una volta loggati possiamo iniziare ad effettuare una scansione, ricordandoci però di disabilitare la voce Ping Host, poichè proxychains non supporta altri protocolli oltre il TCP. Se non disattiviamo questa opzione, la scansione in pivoting non funzionerà affatto.

Impostato il tipo di scansione, con tutte le policy. Procediamo alla scansione e monitoriamo Nessus per vedere se ha trovato qualche vulnerabilità.
La scansione potrà risultare più lenta rispetto al normale, questo poichè stiamo utilizzando un proxy. E’ tutto nella norma.

Alcune note importarti riguardando la scansione in UDP. Disabilitando il Ping Host, perdiamo la possibilità di identificare eventuali vulnerabilità sull’host bersaglio che usino proprio il protocollo UDP. Molti plugin di Nessus falliranno proprio per questo motivo.

Vediamo ad esempio la differenza di una scansione con Nessus effettuata normalmente, ed una effettuata attraverso Pivoting:

nessus_pivoting_report

nessus_no_pivoting_result

Conclusione

In conclusione, questa è una tecnica avanzata e molto potente! Ogni Penetration Tester dovrebbe conoscere il Pivoting, è una tecnica fondamentale per muoversi nelle subnet. Tenete comunque bene in mente i limiti di questa tecnica.