Che cos’è una backdoor e come rilevarla da riga di comando

Quando un aggressore scopre una vulnerabilità in un sito, il più delle volte tenta di sfruttarla installandovi una backdoor, ossia uno script, generalmente in PHP, progettato con l’intento di garantire un accesso remoto al server anche dopo che la vulnerabilità è stata risolta.

Una backdoor può essere richiamata dal browser come una normale pagina web, e fornisce all’attaccante la possibilità di compiere diverse operazioni, tra cui visualizzare e prelevare dati sensibili, creare nuove directory e caricare altri script.

Rientrando nella definizione di malware, le backdoors non sono facilmente identificabili, poiché, una volta installate, si confondono con i file di sistema attraverso nomi apparentemente innocui e funzioni utilizzate anche dagli sviluppatori.

Qui di seguito, mostro un metodo molto utile per verificare se sul proprio server Linux è presente codice potenzialmente dannoso. Avendo accesso alla macchina remota via SSH, possiamo eseguire comandi ed avviare programmi direttamente da una shell.

Find e grep

Tramite questi due tools , si utilizza la tecnica del pattern matching su stringhe al fine di individuare i file che contengono le funzioni PHP sospette, come eval(), gzinflate(), base64_decode(), str_rot13() ecc. L’output del comando verrà inviato all’interno di /tmp/potential_malware.txt:

sshcl2

Con un qualsiasi editor di testo possiamo aprire il file per vedere se la ricerca ha dato riscontri:

sshcl5

Sfruttamento di una code injection (parte 2): dimostrazione pratica

N.B.: le informazioni contenute in questo post sono a carattere didattico e illustrativo, pertanto non mi assumo alcuna responsabilità in merito ad eventuali usi scorretti. Tutti i test sono stati effettuati in un ambiente appositamente predisposto su macchine fisiche e virtuali di mia proprietà.

Nell’esempio che segue mostrerò come lanciare un attacco client-side tramite il modulo  ausiliario HTTP JavaScript Keylogger di Metasploit, che imposta un server web in grado di comunicare con un payload .js e catturare tutto ciò che la vittima digita sulla tastiera.

Dopo aver avviato Metasploit Framework e caricato il modulo, è necessario settare alcuni parametri, come l’ip del nostro listener, la porta e l’uripath (facoltativo):
drivebypost3
Nella sua forma più semplice, il payload da incorporare utilizza la seguente sintassi:
xsspost2
Tuttavia, in uno scenario reale, è molto probabile che l’attaccante nasconda il codice dannoso per renderlo meno visibile al rilevamento umano e automatico. Tale processo prende il nome di “obfuscation” e sfrutta diverse tecniche di encoding/scrambling. Ad esempio, il codice sopra, se offuscato diventa:
xsspost33
A questo punto, non ci resta che iniettarlo nella pagina vulnerabile e vedere cosa accade sul server quando la vittima viene agganciata:
xsspost465

Sfruttamento di una code injection (parte 1): attacchi drive-by-download

Le web applications poggiano su un codice sorgente che viene elaborato e visualizzato nel client. Quello che l’utente finale vede quando naviga sui siti Internet, non è altro che il risultato del codice che il browser interpreta per fornire contenuti testuali, immagini, video, forms e tutto ciò che lo sviluppatore vuole che venga mostrato. Molte web applications richiedono un input da parte dell’utente attraverso interfacce grafiche (GUI) che accettano dati dall’esterno restituendo come output una determinata risorsa. L’esempio più classico è quello di un motore di ricerca incorporato in un sito: in base alle informazioni fornite dall’utente, il server effettuerà una query al database per l’individuazione dei contenuti richiesti.

In un ambiente adeguatamente protetto, saranno presenti filtri per garantire che i dati in ingresso corrispondano al formato che l’applicazione prevede. Ciò significa, per esempio, che se l’applicazione si aspetta un valore numerico, non dovrebbe accettare lettere e caratteri speciali. Uno scarso controllo sui dati forniti dall’utente in input innesca una vulnerabilità nota come “iniezione di codice” (o code injection). Poiché abbiamo detto che il browser è in grado di elaborare gli script incorporati nelle pagine web, un attaccante con le giuste conoscenze può iniettare codice dannoso compromettendo la sicurezza di chi naviga nel sito.

Ad oggi, le tecniche di code injection rappresentano il principale metodo di propagazione dei malware, e vengono costantemente utilizzate per infettare il maggior numero di sistemi in tutto il mondo. Sfruttando una o più vulnerabilità nella web application, l’aggressore inserisce un payload (di solito scritto in JavaScript) che comunica con un server remoto dove sono ospitati i contenuti malevoli. Sebbene tradizionalmente sia necessaria l’interazione della vittima per eseguire codice arbitrario (per esempio aprire un allegato di posta elettronica o installare un falso aggiornamento), negli ultimi anni si è assistito ad un nuovo tipo di attacco che va sotto il nome di drive-by-download. La sua pericolosità sta nel fatto di essere completamente silenzioso, poiché il malware viene scaricato in background senza che né l’utente finale né il gestore del sito (il più delle volte un sito legittimo) sappiano cosa sta accadendo.

In un tipico attacco drive-by-download, la semplice visita ad una pagina infetta può portare alla compromissione del sistema. L’aggressore acquista il controllo pressoché totale sulla macchina, rubando password, codici bancari ed altre informazioni sensibili. Negli ultimi anni, diversi “financial malware” come Zbot e Dridex sono stati diffusi attraverso sofisticati attacchi lato client, sfruttando alcune vulnerabilità nei plug-in più popolari. Per questo motivo, è importante aggiornare il browser con tutti i suoi componenti, e in generale l’intera parte software che gira sul dispositivo. L’utilizzo di programmi antivirus può aiutare a ridurre i rischi, ma una protezione multiforme e stratificata è un principio imprescindibile nella moderna sicurezza informatica.