
Remote BOF Runner est un framework d'extension Havoc pour l'exécution à distance de fichiers d'objet Beacon (BOF) en utilisant un chargeur PIC fait avec Crystal Palace.
Un framework d'extension Havoc pour l'exécution à distance de fichiers objet Beacon (BOF) en utilisant un chargeur PIC réalisé avec Crystal Palace.
Remote BOF Runner permet l'exécution sécurisée de BOFs dans des processus arbitraires en exploitant le chargeur PIC Crystal Palace. Ce framework implémente un mécanisme sophistiqué de communication inter-processus (IPC) via des tubes nommés pour transférer de manière transparente la sortie des beacons des processus injectés vers le serveur de commande et contrôle (C2).
Assurez-vous que l'extension est installée dans le répertoire des extensions d'Havoc :
YOUR_HAVOC_FOLDER + /data/extensions/
Pour compiler le chargeur PIC, les outils et bibliothèques suivants doivent être installés sur votre système :
Pour des instructions d'installation détaillées, consultez le Guide d'installation WSL.
sudo apt-get update
sudo apt-get install mingw-w64
sudo apt-get install make
sudo apt-get install openjdk-11-jdk
sudo apt-get install zip
Le composant BOF est responsable de :
Le chargeur PIC se compose de :
┌───────────────────────────────────────────────────────────────────┐
│ 1. Processus Beacon (Havoc) │
│ ├─ Exécuter l'injecteur BOF │
│ ├─ Créer un processus factice (suspendu) │
│ ├─ Injecter le chargeur PIC + BOF distant │
│ └─ Créer un tube nommé IPC │
└────────────┬──────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────┐
│ 2. Exécution du chargeur PIC │
│ ├─ Chargeur Crystal Palace │
│ ├─ Effectue l'allocation de la section BSS │
│ ├─ Initialise le contexte UI (pour la compatibilité .NET) │
│ └─ Hooke les fonctions beacon (BeaconPrintf, BeaconOutput, etc.)│
└────────────┬──────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────┐
│ 3. Exécution du BOF distant │
│ ├─ Exécuter le BOF cible (whoami, ipconfig, etc.) │
│ ├─ Le BOF appelle les fonctions beacon hookées │
│ ├─ Les fonctions hookées redirigent la sortie vers le tube IPC│
│ └─ La sortie s'accumule dans le processus beacon via le tube │
└────────────┬──────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────┐
│ 4. Collecte et transmission de la sortie │
│ ├─ Le beacon attend la fin du processus distant │
│ ├─ Accumule toute la sortie du tube IPC │
│ ├─ Agrège les messages fragmentés (tampon de 8 Ko) │
│ ├─ Filtre les délimiteurs de protocole (@START@, @END@) │
│ └─ Transmet la sortie consolidée au serveur d'équipe │
└───────────────────────────────────────────────────────────────────┘
Le cas d'utilisation principal est l'exécution de BOFs dans des processus .NET natifs :
Pourquoi le chargement direct du CLR dans Beacon est risqué : Charger des assemblies .NET directement dans le processus beacon est intrinsèquement dangereux et détectable :
Une solution possible : injection dans un processus .NET natif : Au lieu de charger le CLR dans le beacon, nous injectons et exécutons notre BOF inline-execute-assembly dans un processus déjà natif .NET :
// ❌ DÉTECTABLE : Exécution directe dans le beacon
beacon.exe (natif) → charger ClrCreateInstance → charger assembly .NET → ALERTE EDR
// ✅ DISCRÈTE : Exécution dans un processus .NET natif
dotnet.exe (.NET natif) → injecter BOF → inline-execute-assembly →
exécuter assembly .NET dans un contexte CLR déjà présent → comportement normal
Cette approche exploite le fait qu'exécuter du .NET dans un processus .NET est impossible à distinguer d'un comportement normal d'application.
remote-bof-runner whoami
remote-bof-runner ipconfig
remote-bof-runner cacls C:\Windows\System32
remote-bof-runner reg-query DC01 HKLM SYSTEM\CurrentControlSet
remote-bof-runner reg-query HKLM SYSTEM\CurrentControlSet\Control\Lsa
remote-bof-runner reg-query HKLM SYSTEM\CurrentControlSet\Control\Lsa RunAsPPL
remote-bof-runner execute-assembly --dotnetassembly "/Payloads/Rubeus.exe" --assemblyargs "triage"
Exemple de sortie :

⚠️ Important : Ce projet est une preuve de concept et ne donne PAS la priorité à l'OPSEC par défaut.
L'injecteur BOF et le chargeur PIC nécessitent tous deux un renforcement significatif pour les simulations adverses :
Cet outil est fourni à des fins éducatives et de tests de sécurité autorisés uniquement. L'accès non autorisé aux systèmes informatiques est illégal. Les utilisateurs sont responsables du respect de toutes les lois et réglementations applicables.