
emp3r0r v4.7.1
Maillage de type gossip C2 auto‑réparant avec découverte assistée de pairs, exécution BOF multiplateforme et agents scriptables.
emp3r0r
Maillage Gossip Mesh C2 auto-réparateur avec découverte assistée des pairs, exécution BOF multiplateforme et agents scriptables.
Qu'est-ce que emp3r0r ?
emp3r0r est un framework avancé de post-exploitation et un système de commande & contrôle (C2) zéro confiance conçu pour les environnements cibles Linux et Windows. Conçu de zéro pour fonctionner dans des environnements à haute sécurité, emp3r0r combine maillage réseau gossip autonome, exécution fileless en mémoire uniquement, chargement BOF multiplateforme, transfert de fichiers inter-agents et agents scriptables en mémoire pour offrir une furtivité, un contrôle opérationnel et une sécurité opérationnelle (OPSEC) supérieurs.
Points clés et fonctionnalités uniques
🐍 Agents scriptables (moteur Starlark intégré et proxy API Win32)
Les agents emp3r0r disposent d'un moteur de script Starlark intégré (un dialecte Python implémenté purement en Go). Les scripts s'exécutent sans fichier en mémoire sans nécessiter Python, Bash ou PowerShell installé sur la cible.
- Zéro dépendance hôte : Exécute des scripts autonomes sans lancer d'interpréteurs de commandes (
/bin/sh,powershell.exe) ni dépendre de runtimes installés. - API Go intégrées de l'agent : Fonctions exposées pour les opérations sur le système de fichiers (
read_file,write_file,list_dir,mkdir,remove,exists), les réseaux HTTP (http_get,http_post), l'exécution de commandes (exec_cmd) et le hachage (crypto_hash). - Proxy API Win32 dynamique : Sur les cibles Windows, les scripts Starlark peuvent charger dynamiquement des DLL système et exécuter des API Win32 natives (
win_call,win_alloc,win_free,win_read_mem) directement depuis le code du script sans compiler de code C natif. - Intégration modulaire : Les scripts Starlark sont définis à l'aide de manifestes JSON (
config.json) pour un parsing transparent des paramètres CLI et leur distribution.
Pourquoi c'est important : Les modules de script C2 traditionnels nécessitent des interpréteurs hôtes ou le lancement de processus, laissant des traces lourdes sur disque ou dans l'exécution de commandes. Les agents scriptables d'emp3r0r exécutent une logique complexe entièrement en mémoire avec une interaction native avec le système.
🔐 Épinglage cryptographique d'identité TOFU
emp3r0r impose le Trust-On-First-Use (TOFU) avec un épinglage strict UUID et clé publique lors de l'enrôlement des agents.
- Liaison immuable : Une fois enrôlé, l'UUID d'un agent est épinglé à sa clé publique cryptographique. Un ré-enrôlement avec des identifiants modifiés est rejeté comme tentative d'usurpation.
- Réinitialisation contrôlée : La désinscription nécessite une autorisation explicite de l'opérateur via
forget_agent.
Pourquoi c'est important : Empêche le détournement de session, le clonage d'agents et la dérive silencieuse d'identité entre environnements opérationnels.
🔒 Secret de transmission parfait (PFS)
Toutes les communications C2 et entre pairs imposent un échange de clés ECDH avec des clés de session dérivées de HKDF.
- Clés éphémères : Chaque session génère des clés de chiffrement uniques.
- Sécurité découplée : Compromettre les clés à long terme ou un agent individuel ne peut pas compromettre les communications passées ou parallèles.
Pourquoi c'est important : Empêche le déchiffrement rétrospectif des captures réseau interceptées.
🕸️ Réseau maillé gossip P2P autonome
Les agents dans des segments réseau restreints en sortie ou isolés découvrent de manière autonome leurs pairs et tunnelisent le trafic via un réseau maillé basé sur le gossip (Memberlist).
- Transports de pairs enfichables : Prise en charge du camouflage mTLS 1.3 (avec certificats éphémères) et KCP (UDP fiable).
- Chiffrement de bout en bout : Tous les sauts maillés inter-agents sont enveloppés dans un chiffrement AES-GCM.
- Faible empreinte réseau : Le relais direct agent-à-agent élimine le bruit de diffusion inutile et les points de congestion de connexion C2 centralisés.
Pourquoi c'est important : Le pivotement à travers des réseaux segmentés se produit de manière autonome sans nécessiter une intervention constante de l'opérateur ou des configurations de proxy statiques.
📂 Système de fichiers P2P
Partage de fichiers direct agent-à-agent via le transport de relais P2P (mTLS/KCP) pour accélérer la livraison de fichiers sur les réseaux internes.
- Tunnels P2P chiffrés : Tunnelise les transferts entre pairs en utilisant mTLS/KCP pour contourner les restrictions de sortie et réduire les goulots d'étranglement de bande passante C2 centralisés.
- Cache de fichiers intelligent en mémoire : Les fichiers sont mis en cache dans la mémoire de l'agent sous forme de blobs chiffrés ; ils peuvent être servis de manière transparente pour que d'autres agents les téléchargent à la demande. Lorsqu'ils demandent un fichier, les agents consultent leur memfs local, puis les autres pairs, et enfin le C2.
- Repli automatique du relais C2 : Si un pair cible ne possède pas le fichier demandé, il le récupère dynamiquement et le diffuse depuis le serveur C2 à la demande.
Pourquoi c'est important : Le partage de fichiers direct agent-à-agent maximise les vitesses de transfert, contourne les points de congestion réseau et réduit la visibilité du trafic C2 direct.
📡 Écouteurs multi-protocoles et stagers enfichables
Stagers de téléchargement Stage 0 flexibles et écouteurs de protocoles pour l'accès initial et la livraison de charges utiles.
- Écouteurs multi-protocoles : Écouteurs HTTP, TCP et UDP intégrés et autonomes avec cadrage fiable d'accusé de réception de séquence et profils HTTP personnalisables. L'écouteur autonome prend en charge TLS optionnel (
-tls), générant automatiquement un certificat auto-signé lorsqu'aucune paire cert/clé n'est fournie. - Stager de téléchargement C autonome : Construit avec des appels système Linux directs et indépendants de libc pour une compatibilité entre distributions sans erreurs de symboles.
- Livraison de stage chiffrée : L'écouteur chiffre la charge utile stagée avec RC4 en utilisant une clé dérivée d'un secret fourni par l'opérateur ; le stager la déchiffre en mémoire avant le chargement réflexif.
- Transports de stagers enfichables : Système de transport modulaire permettant aux opérateurs d'ajouter des modules de transport C personnalisés (
transport_<name>.c). Les options autonomes intégrées incluent HTTP, TCP et UDP via des appels système bruts, ainsi que des transports de bibliothèques dynamiques (par ex.libcurlvia résolution de symboles à l'exécution).- Avantages : Contourne le filtrage de sortie et la détection réseau en intégrant de manière transparente le trafic dans des canaux système légitimes (par ex.
libcurlnatif ou implémentations de protocoles personnalisées) sans modifier la logique principale du stager.
- Avantages : Contourne le filtrage de sortie et la détection réseau en intégrant de manière transparente le trafic dans des canaux système légitimes (par ex.
- Packers auto-dépaquetants enfichables : Interface de module stub et packer extensible (
pack_<name>.py+unpack_stub_<name>.c). Les opérateurs peuvent écrire des algorithmes de packing/obfuscation personnalisés (les options intégrées incluent le chiffrement de flux RC4 et la compression LZSS gourmande) avec correction automatique des en-têtes à l'exécution.- Avantages : Brise les règles YARA statiques AV/EDR et la correspondance de signatures en chiffrant/compressant la charge utile Stage 0 avec des clés ou algorithmes uniques, auto-dépaquetage dans une mémoire lecture/écriture qui est ensuite basculée en lecture/exécution avant l'exécution.
- Taille de charge utile minuscule : Alors que les binaires d'agent emp3r0r font ~20 Mo sans compression, ce stager fait 2 Ko ; la charge utile de type sRDI qu'il récupère depuis l'écouteur emp3r0r fait ~8 Mo (compressée depuis le binaire d'agent au format objet partagé ELF).
- Formats flexibles : Compile en shellcode brut indépendant de la position (
.bin), shellcode packé auto-dépaquetant (packed), exécutables ELF autonomes ou objets partagés (.so). - Durcissement en mémoire : Alloue la mémoire du stage en lecture/écriture, désobfusque les charges utiles, puis impose lecture/exécution avant le chargement réflexif. L'auto-dépaqueteur ne mappe jamais RWX (lecture/écriture → dépaquetage → lecture/exécution), et l'état mutable du stager vit dans une page lecture/écriture dédiée plutôt que dans du code inscriptible.
🧩 Prise en charge native multiplateforme BOF et PICO (COFF, ELF et PICO)
Exécutez des modules binaires en mémoire sur les cibles Windows et Linux :
- Chargeurs COFF Windows : Exécutez des binaires BOF Windows sans fichier avec un packing de paramètres typé (
int,short,cstr,wstr,binary). - Chargeurs d'objets ELF Linux : Chargez des fichiers objets relocalisables ELF (
.o) directement dans la mémoire de l'agent sur Linux. - Modules PICO Crystal-Kit et spoofing de pile : Chargeurs et packers PICO (Position-Independent Code Object) intégrés avec le spoofing de désynchronisation de pile d'appels SilentMoonwalk pour une évasion avancée.
- Suites BOF groupées : Prise en charge intégrée des collections de modules Kerbeus-BOF, Remote-OPs et Situational Awareness (SA).
Pourquoi c'est important : Élimine la surcharge de création de processus et contourne la surveillance de ligne de commande et de pile d'appels en exécutant des modules C compilés dans le processus avec spoofing de pile d'appels.
🔑 Manipulation de jetons Windows à la demande
Les agents sous Windows peuvent voler, mettre en cache et usurper des jetons d'accès de processus en cours d'exécution — entièrement dans le processus en utilisant des appels système NT indirects.
- Vol et mise en cache :
steal_token --pid <PID>duplique un jeton de processus viaNtOpenProcess+NtDuplicateTokenet le stocke en mémoire par SID. Optionnellement, enchaînez l'usurpation avec--token <sid>pour escalader d'une identité volée à une autre. - Énumération :
list_tokensaffiche tous les jetons mis en cache avec les nomsDOMAIN\User (SID). - Usurpation universelle : Référencez un jeton mis en cache par SID (
--token <sid>) dans n'importe quel module — Go, Starlark, COFF/BOF. L'usurpation au niveau du thread (NtSetInformationThread) est appliquée autour des opérations sensibles. - Starlark conscient des jetons : Les fonctions intégrées (
read_file,write_file,exec_cmd, proxy API Win32, etc.) usurpent automatiquement par appel système lorsqu'un jeton est défini, etexec_cmdpeut lancer des processus enfants sous l'identité volée viaCreateProcessWithTokenW.
Pourquoi c'est important : Aucun outil externe, aucun artefact disque, aucun bruit de création de processus. Le vol et la réutilisation de jetons se produisent entièrement dans le processus en utilisant des appels système indirects, avec des jetons volés immédiatement consommables par chaque module intégré.
🎭 Transport C2 enfichable, évasion JA3 uTLS et protocole CBOR
- Modes C2 enfichables : Beaconing flexible (
http_poll) avec profils HTTP malléables et streaming (h2conn) sur HTTP/2. - Randomisation de signature JA3 : Utilise uTLS pour randomiser les empreintes TLS Client Hello, déjouant les signatures réseau statiques.
- Protocole filaire binaire : Utilise CBOR (Concise Binary Object Representation) pour toutes les données de contrôle et la sérialisation filaire, réduisant la taille des charges utiles réseau de 30 à 40 % par rapport à JSON.
💾 Stockage chiffré mémoire d'abord
- Système de fichiers virtuel chiffré en mémoire : Toutes les opérations de fichiers de l'agent utilisent un système de fichiers virtuel AES-GCM en mémoire. Les grandes données débordent automatiquement vers un stockage disque chiffré sans en-têtes ni extensions identifiables.
- Cache intelligent alimenté par P2P : Chaque agent compatible P2P met en cache les fichiers qu'il récupère depuis le C2 dans memfs ; puis les rend disponibles pour les autres pairs, minimisant l'empreinte du trafic C2 tout en exploitant les connexions inter-agents rapides.
Démarrage rapide
1. Installation du serveur C2
La construction d'emp3r0r nécessite Docker ou Podman sur l'hôte. Aucune chaîne d'outils Go locale n'est requise.
# Cloner le dépôt
git clone --depth=1 https://github.com/jm33-m0/emp3r0r.git && cd emp3r0r
# Construire dans un conteneur et installer localement
./install.py
L'installateur compile les binaires principaux dans un conteneur jetable, génère le emp3r0r-operator-kit.tar.zst précompilé, configure les capacités Linux requises (setcap) et configure les répertoires système d'exécution.
Options :
./install.py [--debug] [--disable-garble] [--prefix /usr/local] [--skip-build] \
[--lightweight] [--targets linux/amd64,windows/amd64]
Utilisez --lightweight pour construire uniquement les cibles exe/dll linux/amd64 et windows/amd64 (le plus rapide, pour les déploiements x86-64 uniquement), ou --targets OS/ARCH,... pour compiler un ensemble spécifique de types de charges utiles.
Lancez le serveur C2 :
emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377
Note : Si installé avec l'utilisateur root au lieu du sudo standard, votre utilisateur actuel pourrait ne pas être en mesure de lancer emp3r0r car les permissions ne peuvent pas être correctement définies par l'installateur. Cela s'applique également à vos machines opérateur.
2. Configuration de la machine opérateur
Transférez le emp3r0r-operator-kit.tar.zst généré vers votre machine opérateur et exécutez l'installateur :
tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.py
Connectez le client opérateur au serveur C2 en utilisant les identifiants du tunnel WireGuard affichés par le serveur :
emp3r0r client --c2-port 13377 \
--server-wg-key '<SERVER_WG_KEY>' \
--server-wg-ip '<SERVER_WG_IP>' \
--operator-wg-ip '<OPERATOR_WG_IP>' \
--operator-wg-key '<OPERATOR_WG_KEY>' \
--c2-host 1.2.3.4
3. Générer les charges utiles d'agent
Utilisez la commande generate dans l'interface opérateur emp3r0r pour créer des charges utiles.
Agent C2 direct :
generate --type linux_executable --arch amd64 --cc your.domain.com
Agent passerelle maillée :
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --direct-c2 --p2p-transport mtls
Pair intermédiaire maillé :
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --p2p-transport mtls --peers 1.2.3.4
Documentation et ressources
- 📝 Politique de sécurité : SECURITY.md
- 📜 Journal des modifications : CHANGELOG.md
- 🛠️ Guide de développement de modules : core/modules/module_development_guide.md
Soutenir le développement
Si emp3r0r s'est avéré précieux dans vos recherches et tests de sécurité, envisagez de soutenir son développement continu via GitHub Sponsors.