Projet RS Manager
Command & Control (C2) Asyncio
Contexte du projet
rs_manager est un système de "Command & Control" (C2) léger, développé pour explorer les mécanismes profonds de la programmation réseau. L'objectif était de sortir des frameworks web classiques pour construire une architecture client-serveur robuste "from scratch" utilisant des sockets bruts.
Contrairement aux solutions traditionnelles reposant sur des bases de données lourdes, ce projet opère entièrement en mémoire vive (RAM), privilégiant la volatilité, la discrétion et la performance immédiate pour l'administration d'un parc de machines.
Architecture Système
L'application repose sur une architecture asynchrone utilisant la bibliothèque standard
asyncio de Python, permettant de gérer simultanément de multiples connexions sans
blocage.
Diagramme de Séquence
Flux d'exécution d'une commande, de l'admin vers le bot.
Architecture Logicielle
Diagramme de classes simplifié montrant le polymorphisme.
classDiagram
class Core {
+start_server()
+session_manager : Manager
}
class Manager {
-sessions : List~Session~
-commands : Dict
+active_session : Session
+broadcast(cmd)
+exec(cmd)
+select(id)
}
class Session {
+reader : StreamReader
+writer : StreamWriter
+ip : str
+port : int
+send(msg)
+recv()
}
class Request {
+type : str
+data : dict
+send(session)
}
class Exec {
+command : str
}
class Upload {
+filename : str
+content : bytes
}
Core --> Manager : possède
Manager o-- Session : gère
Manager ..> Request : instancie
Request <|-- Exec : hérite
Request <|-- Upload : hérite
Concepts Clés
- Boucle d'événements : Gestion non-bloquante des I/O
(
asyncio) pour supporter de multiples connexions. - Console Admin : Interface CLI pour piloter les sessions et envoyer des commandes.
- State-less (RAM) : Toutes les sessions et l'état sont maintenus en mémoire pour une empreinte minimale.
Serveur (C2)
- Asyncio Server : Écoute et gestion d'un event loop pour multi-connections.
- Gestion des sessions : Table en mémoire des sessions [id, ip, port].
- Console Admin : Interface CLI pour sélectionner et piloter les sessions.
L'Agent (Client)
- Reverse Shell : Connexion sortante vers le serveur pour contourner le NAT/Pare-feu.
- Persistance de contexte : Un sous-processus shell maintenu en vie
permet de garder l'état (ex:
cd /tmpest mémorisé pour la commande suivante). - Discrétion : Empreinte minimale sur le système hôte.
Protocole de Communication
- Sockets TCP Bruts : Pas de HTTP/HTTPS, communication bas niveau.
- Encapsulation JSON : Structure des commandes (
id,type,data) pour la flexibilité. - Délimiteurs : Utilisation de marqueurs
EOMpour gérer la fragmentation TCP.
Fonctionnalités Clés
- Administration Centralisée : Visualisation et sélection des "bots" connectés via une table de session dynamique.
- Exécution de Commandes : Envoi de commandes shell arbitraires et récupération du flux standard (stdout/stderr) en temps réel.
- Système de Fichiers : Upload et Download de fichiers binaire/texte via le canal TCP établi.
- Polymorphisme : Architecture code orientée objet avec une classe abstraite
Requestdérivée enExec,Upload, etc.
Défis Techniques & Apprentissages
Programmation Asynchrone
Core ArchitectureMaîtrise de l'Event Loop Python et du modèle de "cooperative
multitasking". Comprendre comment await suspend l'exécution pour laisser la
main à d'autres clients connectés, permettant à un seul thread de gérer des dizaines de
connexions.
Gestion des Sockets
ProtocoleImplémentation d'un buffer de lecture robuste. Sur TCP, les données arrivent par flux (streams) et non par paquets discrets. Il a fallu gérer la concaténation et le découpage des messages via des délimiteurs propriétaires.
Interaction Système
SystèmeUtilisation avancée du module subprocess pour manipuler les pipes
(stdin/stdout) d'un shell système de manière programmatique, simulant une véritable
interaction utilisateur.