TL;DR
Cos’ è un dropper? Con il termine dropper si fa riferimento a un software o script apparentemente innoquo, che non contiene al suo interno il codice malevolo da eseguire ma funge da vettore di attacco.
Perché il nome “Stargate dropper”? Perché mentre lo sviluppavo, il tipo di trasferimento del payload dal server remoto al dispositivo di destinazione mi ricordava molto lo “Stargate” dell’omonimo film, quel portale che permetteva di trasferire tramite persone o cose da un punto all’altro dell’universo tramite una specie di tunnel spazio-temporale.
Panoramica
Il sistema mira a bypassare eventuali sistemi di detection (es. EDR) trasferendo il payload da installare nel sistema vittima codificandolo in una shellcode in javascript e rileggendolo tramite browser nel sistema di destinazione.
L’obiettivo è quello di sfruttare eventuali debolezze del sistema di detection per quanto riguarda l’analisi del codice javascript nelle pagine web.
Nel sistema di esempio ho testato la possibilità di “droppare” ed eseguire il software “calc.exe”. ll contenuto del file eseguibile è stato convertito in shellcode tramite un semplice tool che ho sviluppato preventivamente.
Dettagli
Fase 1 - Creazione gate di origine
Ho creato una semplice pagina web dove risiede, nidificata all’interno di una porzione di codice Javascript, una variabile contenente la shellcode del software da inviare al sistema di destinazione.
Fase 2 - Creazione gate di destinazione
Ho creato il dropper vero e proprio. Il sistema è sviluppato in .NET e utilizza il componente “CefSharp” per creare il gate di arrivo dal sistema di origine.
Tralasciando la parte di inserimento e inizializzazione del componente “CefSharp”, il fulcro del sistema è racchiuso in due parti principali: il recupero del payload da impiantare e la sua decodifica.
Fase 2.1 - Recupero payload
Il contenuto della variabile contenente il payload viene recuperato eseguendo un semplice codice Javascript che non fa altro che eseguire una funzione che come valore di ritorno ha il contenuto della variabile della shellcode.
Così facendo si aumenta anche il livello di difficoltà della detection, in quanto andrebbero “valutate” le azioni svolte dalla funzione che viene eseguita.
Fase 2.2 - Decodifica payload
Il valore restituito dalla funzione di recupero del payload viene salvato all’interno di un oggetto .NET generico; più precisamente una lista di oggetti. Di conseguenza, lo step successivo è quello di riconvertirlo in un array di byte per poterlo rendere utilizzabile.
Conclusione
Arrivati a questo punto, abbiamo a disposizione il nostro payload da impiantare. Dato che lo scopo di questo articolo non è quello di dimostrare eventuali tecniche di esecuzione per evadere i sistemi di sicurezza, la dimostrazione del sistema termina qui, anche perché altrimenti si aprirebbero miliardi di scenari sul post-download che magari discuterò in altri articoli.
Eventuali migliorie
Questa è la versione semplificata del sistema che mira a dimostrarne la funzionalità. E’ chiaro che il sistema si potrebbe migliorare notevolmente. Un esempio al volo potrebbe essere quello di codificare in base64 la shellcode presente nella pagina web, ma come sempre, il limite è solo la fantasia.