C2 Distributed Network

Compte-rendu Technique : Architecture & Implémentation

Contexte : Projet Personnel / DACS Rôle : Architecte & Développeur Lead Durée : 4 semaines Stack : Java 21, TLS 1.3, Gossip, Cryptographie

Présentation Générale

Ce projet consiste en la conception et l'implémentation d'un réseau de commande et de contrôle (C2) distribué. L'objectif principal est de s'affranchir d'un serveur central vulnérable (Single Point of Failure) au profit d'un réseau overlay décentralisé résilient.

Le système assure une communication sécurisée, la découverte dynamique de pairs (Peer Discovery) et un contrôle strict de l'admission des nœuds via un système de certificats signés par une racine de confiance.

Objectifs Techniques & Contraintes

Propriétés du Système

  • Routage décentralisé : Messages propagés sans point de passage obligé.
  • Identité Durable : Chaque nœud dispose d'une identité cryptographique forte.
  • Admissibilité : Seuls les nœuds autorisés (certifiés) peuvent participer.
  • Résilience : Tolérance aux pannes et aux nœuds malveillants par redondance.

Architecture & Topologie

Le réseau n'est pas un maillage complet (full mesh) mais un graphe aléatoire partiel. Chaque nœud maintient une table de pairs limitée (6 à 12 voisins), assurant une faible consommation de ressources tout en garantissant une connectivité globale élevée.

Topologie en Graphe Aléatoire

graph TD A[Nœud A] --- B[Nœud B] A --- C[Nœud C] B --- D[Nœud D] C --- D[Nœud D] C --- E[Nœud E] D --- F[Nœud F] E --- F[Nœud F] style A fill:#ffb642,stroke:#000 style F fill:#5ec9a5,stroke:#000

Visualisation d'une portion du réseau overlay avec chemins redondants.

Modèle d'Admission & Provisioning

Pour garantir que seuls des nœuds de confiance rejoignent l'overlay, le système utilise un modèle de provisioning offline. Contrairement au Web classique, il n'y a pas de CA en ligne ; la confiance est établie lors de la création du nœud.

Flux de Provisioning

  1. Génération locale d'un bi-clés (RSA-4096).
  2. Signature du certificat par la Root Key hors-ligne.
  3. Injection du pack (Clé privée + Certificat + Root PubKey) dans le nœud.

Ce mécanisme élimine les dépendances aux serveurs de noms ou aux autorités de certification tierces, renforçant l'aspect "furtif" et autonome du réseau.

Modèle de Sécurité (DACS)

Conformément au parcours DACS, la sécurité est intégrée dès la conception (Security by Design). Tout échange est protégé par TLS 1.3 avec authentification mutuelle (mTLS).

Menace Mécanisme de Défense
Interception (MITM) Chiffrement TLS 1.3 forcé sur chaque lien.
Usurpation d'Identité Certificats pré-signés par une racine de confiance locale.
Nœud Compromis Propagation de listes de révocation signées (REVOKE_CERT).

Identité Cryptographique

L'identité d'un nœud (Node ID) est le résultat d'un hachage SHA256 de sa clé publique, rendant toute usurpation impossible sans la clé privée correspondante.

Protocole de Communication

Le protocole binaire est structuré pour être léger et extensible. Chaque paquet partage une en-tête commune.

// Structure simplifiée de l'en-tête (Header)
public class MessageHeader {
    UUID messageId;      // Identifiant unique (détection de doublons)
    MessageType type;    // PING, PONG, SYN, ACK, REVOKE
    int ttl;             // Time To Live pour limiter la propagation
    long timestamp;      // Horodatage pour la validité temporelle
    byte[] signature;    // Signature par le nœud émetteur
}

Types de Messages Clés

PING / PONG

Utilisés pour la découverte de pairs. Le PONG renvoie une liste de voisins connus pour permettre au nouvel entrant de tisser ses liens.

SYN / ACK

Messages de données et de contrôle avec acquittement, assurant la fiabilité applicative sur le réseau TCP.

Algorithmes, Propagation & NAT Traversal

Gossip Routing (Fanout)

La diffusion des informations repose sur le Gossip Routing (Fanout Routing). Lorsqu'un nœud reçoit un message inconnu, il le relaie à une sélection aléatoire de voisins (fanout=3) jusqu'à épuisement du TTL.

NAT Traversal : UDP Hole Punching

Pour permettre la communication entre des nœuds situés derrière des pare-feux restrictifs ou des NAT (Network Address Translation), le réseau implémente la technique de UDP Hole Punching.

Mécanisme de Traversée

Le processus se déroule en trois étapes clés :

  1. Signalement : Les nœuds A et B se connectent au nœud de Bootstrap qui identifie leurs adresses IP publiques et leurs ports traduits.
  2. Échange de Endpoints : Le Bootstrap transmet à chaque nœud les coordonnées publiques de l'autre.
  3. Punching : Les deux nœuds envoient simultanément un paquet UDP. Le NAT de chaque côté interprète le paquet sortant comme le début d'une session, ouvrant une "brèche" (hole) qui permet alors la communication bidirectionnelle directe.

Séquence de Découverte (Bootstrap)

Le Bootstrap est la porte d'entrée du réseau. Ce nœud, dont l'adresse est fixe et connue, permet à tout nouvel arrivant d'intégrer le graphe sans connaissance préalable de la topologie.

Le Handshake initial passe par une vérification mutuelle des certificats (mTLS) avant que le Bootstrap ne délivre une portion de sa propre table de pairs (Peer Table), permettant au nouveau nœud de commencer son propre "Gossip" et d'équilibrer ses liens.

Visualisation du Bootstrap

sequenceDiagram participant N as Nouveau Nœud participant B as Nœud Bootstrap participant P as Pairs Découverts N->>B: PING (mTLS Handshake) Note over B: Vérification Certificat B-->>N: PONG (Peer List Update + NAT Info) Note over N: Mise à jour Table de Pairs N->>P: UDP Punching / Peer PING P-->>N: ACK / Established

Diagramme de séquence détaillant l'admission et la première phase de découverte.

Phases de Réalisation

Phase 1 : Socle Réseau & TLS

Mise en place du serveur TCP et de la couche SSLContext. Gestion des KeyManagers et TrustManagers pour l'authentification mutuelle.

Phase 2 : Protocole & Sérialisation

Définition de la structure des paquets et implémentation de la sérialisation binaire efficace. Gestion des files d'attente asynchrones.

Phase 3 : Routage Gossip

Implémentation de l'algorithme de propagation probabiliste et de la détection de cycles (via le cache des MessageIDs).

Compétences & Bilan

Savoir-faire (Technique)

  • Programmation Réseau avancée (Sockets, TLS, NIO).
  • Architecture de systèmes distribués et protocoles P2P.
  • Implémentation de primitives cryptographiques (Signatures, Hachages).

Savoir-être (Soft Skills)

  • Rigueur : Gestion fine des états de connexion et des exceptions réseau.
  • Autonomie : Recherche documentaire sur les protocoles Gossip et les topologies de graphes.

Ce projet démontre ma capacité à concevoir et réaliser une infrastructure critique sécurisée de A à Z, en respectant les standards de l'industrie en matière de cryptographie et de réseau.