Aller au contenu

Meilleures pratiques OPSEC

Référence complète en matière de sécurité opérationnelle pour les opérateurs de Stentor. Ce guide couvre les surfaces de détection pour chaque grande catégorie de techniques, le pipeline d'obfuscation de garble, la commande de posture d'exécution opsec, une matrice de décision pour la sélection de techniques par environnement et des recommandations opérationnelles depuis le pré-engagement jusqu'au nettoyage.

OPSEC n'est pas facultatif

Chaque technique de l'arsenal de Stentor produit des artefacts médico-légaux. La question n’est jamais « est-ce que cela sera détectable ? mais plutôt "qu'est-ce qui le détecte, et cette détection est-elle présente dans cet environnement cible ?" Utilisez ce guide pour prendre des décisions éclairées en matière de risques tout au long de votre engagement.


Surface de détection par catégorie de technique

Chaque catégorie de techniques produit des artefacts médico-légaux distincts sur différentes couches de détection (télémétrie des points finaux, surveillance du réseau, analyse des journaux). Les sections ci-dessous mappent les capacités de Stentor à leurs surfaces de détection avec des références spécifiques à MITRE ATT&CK et les mesures d'atténuation recommandées.

Injection de processus

Surface de détection d'injection de processus (plus de 10 techniques dans implant/internal/modules/inject/)
Technique ATTAQUE À ONGLET&CK Vecteur de détection Gravité Atténuation
Créer un thread distant T1055.001 Rappels du noyau ETW, événement Sysmon 8 (CreateRemoteThread), analyse de la pile d'appels Élevé Utilisez plutôt QueueUserAPC ou NtMapViewOfSection ; combiner avec des appels système indirects
QueueUserAPC T1055.004 Surveillance des attentes des threads ETW pouvant être alertées, modèles d'allocation de mémoire Moyen Associez-le au module Stomping pour le support MEM_IMAGE
NtMapViewOfSection T1055.012 Création d'objets de section (Sysmon Event 9), cartographie inter-processus Moyen Utilisez des appels système indirects pour éviter la détection du hook ntdll
APC pour inscription anticipée T1055.004 Création de processus en état suspendu (corrélation Sysmon Event 1 + 8), inspection de la file d'attente APC Moyen Randomiser le processus cible ; utiliser l'usurpation d'identité PPID
Détournement de discussion T1055.003 Appels GetThreadContext/SetThreadContext (ETW), modification du pointeur d'instruction Élevé Combinez avec BeaconGate pour acheminer les API de contexte via des appels système
Module piétinant T1574.002 Modification de la section DLL .text (intégrité de la mémoire), incompatibilité de hachage de section Faible Choisissez des DLL volumineuses et rarement chargées (xpsservices.dll)

Risque d’injection primaire

Le type d’allocation de mémoire est l’indicateur le plus puissant. Les allocations MEM_PRIVATE avec PAGE_EXECUTE_READWRITE sont signalées par chaque EDR moderne. Activez toujours le piétinement du module (support MEM_IMAGE) et désactivez UseRWX (utilisez les transitions RW puis RX) pour réduire ce signal.

Accès aux informations d'identification

Surface de détection d'accès aux informations d'identification (implant/internal/modules/creds/, kerberos/, dpapi/)
Technique ATTAQUE À ONGLET&CK Vecteur de détection Gravité Atténuation
Dump SAM (registre) T1003.002 Accès par clé de registre (HKLM\SAM), événement Sysmon 12/13 Élevé Utiliser l'analyse en mémoire ; éviter la sauvegarde reg sur le disque
Accès LSASS T1003.001 Handle de processus vers lsass.exe (Sysmon Event 10), contournement de la protection PPL Critique Utilisez minidump via comsvcs.dll ou BOF ; évitez OpenProcess direct sur lsass
Kerberoast T1558.003 Événement de sécurité 4769 (demandes TGS pour le chiffrement RC4), requêtes LDAP SPN Élevé Demander des billets cryptés AES (type 17/18) ; limiter les demandes au fil du temps
Synchronisation DC T1003.006 Événement de sécurité 4662 (DS-Replication-Get-Changes-All), trafic de réplication réseau Critique Limité à des comptes spécifiques ; exécuté pendant les fenêtres de réplication
Clé principale DPAPI T1555.004 Appels API DPAPI, accès LSASS pour clé de sauvegarde de domaine Moyen Utilisez l'analyse hors ligne lorsque cela est possible ; éviter les demandes répétées de passe-partout

Le LSASS est la cible à plus haut risque

Chaque EDR surveille l’accès LSASS. Credential Credential Guard, PPL et RunAsPPL rendent l'accès direct impossible sur les systèmes renforcés. Préférez Kerberoasting (craquage hors ligne) ou DPAPI (pas de contact LSASS) lorsque cela est possible. Lorsque l'accès LSASS est requis, utilisez un BOF avec des appels système indirects et BeaconGate activé.

Mouvement latéral

Surface de détection de mouvement latéral (implant/internal/modules/lateral/)
Technique ATTAQUE À ONGLET&CK Vecteur de détection Gravité Atténuation
PsExec (service) T1021.002 Événement de création de service 7045, événement de sécurité 4624 type 3, canal nommé Élevé Utilisez des noms de service aléatoires ; supprimer le service après l'exécution ; éviter les noms de tuyaux par défaut
Exécutif WMI T1047 Journaux d'événements WMI (Microsoft-Windows-WMI-Activity), création de processus sous WmiPrvSE.exe Moyen WMI est courant dans les entreprises ; se fondre avec le trafic administratif normal
WinRM T1021.006 Journaux de gestion à distance Windows, événements de session à distance PowerShell (événement 4103/4104) Moyen Utilisez le transport HTTPS ; se fondre avec la gestion à distance existante
DCOM T1021.003 Instanciation d'objet COM, chaînes de processus parent-enfant inhabituelles Faible Varie selon l'objet DCOM ; MMC20.Application et ShellBrowserWindow sont bien connus
Passez le hachage T1550.002 Authentification NTLM Événement 4624 type 3 avec LogonProcessName : NtLmSsp Élevé Alterner entre les techniques ; éviter les PtH répétés sur la même cible
Passez le billet T1550.003 Anomalies d'authentification Kerberos, réutilisation des tickets provenant d'adresses IP inattendues Moyen Utiliser les tickets du bon contexte utilisateur ; respecter la durée de vie du billet

Corrélation du journal d'authentification

Le mouvement latéral génère des événements d'authentification (4624/4625) à la fois sur la source et sur la cible. Les SOC les corrèlent entre les systèmes. Variez les techniques, espacez les mouvements et préférez les méthodes à faible empreinte de log (WMI, DCOM) à celles à forte empreinte (PsExec avec création de service).

Persistance

Surface de détection de persistance (implant/internal/modules/persist/)
Technique ATTAQUE À ONGLET&CK Vecteur de détection Gravité Atténuation
Clés d'exécution du registre T1547.001 Événements Sysmon 13/12/14 (modification du registre), énumération d'exécution automatique Élevé Utilisez des clés moins surveillées (UserInitMprLogonScript) ; réglé pendant les périodes de faible activité
Tâches planifiées T1053.005 Événement de sécurité 4698 (tâche créée), événement Sysmon 1 (processus hôte de tâche) Élevé Utilisez des définitions de tâches XML avec des noms d'apparence légitime ; définir des temps de déclenchement distants
Création de services T1543.003 Événement Service Manager 7045, modification du registre sous HKLM\SYSTEM\CurrentControlSet\Services Élevé Imitez les conventions de dénomination de services légitimes ; utiliser les services partagés svchost.exe
Détournement de DLL T1574.001 Événements de création de fichiers (Sysmon Event 11), chargement de DLL à partir de chemins inhabituels Moyen Cibler les applications qui se chargent à partir de répertoires inscriptibles ; faire correspondre les métadonnées de la DLL
Détournement de COM T1546.015 Modification du registre dans HKCU\Software\Classes\CLSID, modifications InprocServer32 Faible Le détournement de COM est difficile à détecter sans référence ; choisissez des CLSID obscurs

Hiérarchie OPSEC de persistance

Le détournement de COM est le mécanisme de persistance le plus furtif (faible détection, par utilisateur, aucun administrateur requis). Les clés d'exécution du registre et les tâches planifiées sont les plus détectées. Choisissez en fonction du niveau de privilège requis et de la capacité de surveillance cible.

Évasion de la défense

Surface de détection d'évasion de défense (implant/internal/modules/evasion/)
Technique ATTAQUE À ONGLET&CK Vecteur de détection Gravité Atténuation
AMSI Bypass (patch en ligne) T1562.001 Analyse de l'intégrité de la mémoire de amsi.dll, événements du fournisseur ETW AMSI Moyen Utilisez des points d'arrêt matériels (hwbp amsi on) au lieu de correctifs en ligne
Mise à jour ETW T1562.006 Surveillance de la valeur de retour EtwEventWrite, détection des écarts de session ETW Moyen Utiliser des points d'arrêt matériels (hwbp etw on) ; patch sélectivement par fournisseur
Masquage du sommeil T1497.003 Analyse périodique de la mémoire pendant les fenêtres d'exécution, analyse des modèles de minuterie Faible Activez les trois masques (texte + tas + pile) pour une couverture complète
Usurpation PPID T1134.004 Événements de processus du noyau ETW (incompatibilité EventHeader.ProcessId) Faible Choisir des processus parents contextuellement appropriés
Appels système indirects T1106 Analyse du cadre de pile (appel ntdll sans exportation correspondante), ETW Threat-Intelligence Faible Combinez avec BeaconGate pour une couverture API complète
Décrochage EDR T1562.001 Vérification périodique de l'intégrité du hook par EDR, accès à la section KnownDlls Moyen Utiliser le décrochage ciblé (fonction unique) plutôt que la restauration complète des DLL

Évasion en couches

Aucune technique d’évasion n’est suffisante. Combinez appels système indirects + BeaconGate + masquage du sommeil + HWBP + module stomping pour une couverture complète. La commande opsec note votre posture actuelle et identifie les lacunes.

Découverte

Surface de détection de découverte (implant/internal/modules/discovery/)
Technique ATTAQUE À ONGLET&CK Vecteur de détection Gravité Atténuation
Numérisation réseau T1046 Détection d'anomalies réseau (modèles de balayage de port), journaux de pare-feu Élevé Taux de balayage des gaz ; cibler des ports spécifiques ; utiliser l'analyse ARP sur le sous-réseau local
Énumération LDAP T1087.002 Anomalies de volume de requêtes LDAP, modèles de base de recherche/filtre inhabituels Moyen Utiliser des requêtes ciblées (UO/groupes spécifiques) ; répartir les requêtes dans le temps
Analyse SPN T1558.003 Requêtes Kerberos TGS avec type RC4, volume de requêtes SPN inhabituel Moyen Demandez des billets AES ; limiter la portée aux SPN de grande valeur
Découverte du système local T1082 Exécution de processus (systeminfo, ipconfig, etc.), requêtes WMI Faible Utilisez des appels d'API natifs au lieu de générer des processus ; préférer l'exécution BOF
Découverte de confiance de domaine T1482 Requêtes LDAP pour les objets trustDomain, exécution de nltest.exe Faible Utilisez LDAP directement au lieu de nltest ; requête unique plutôt qu'une énumération

Découverte OPSEC

Les commandes de découverte qui génèrent des processus enfants (commandes shell) sont plus détectables que celles utilisant des API natives ou des BOF. Préférez l’exécution en ligne plutôt que le fork-and-run lorsque cela est possible. Utilisez execute-assembly avec les outils .NET compilés plutôt que les commandes shell pour l'énumération AD.


Pipeline d’obfuscation Garble

Garble est l'outil d'obscurcissement au moment de la construction de Stentor pour les binaires Go. Il supprime, crypte ou randomise les artefacts médico-légaux qui rendent les binaires Go identifiables et réversibles. Comprendre ce que Garble corrige et ce qu'il ne peut pas corriger est essentiel pour la planification OPSEC.

Créer un flux de pipeline

graph LR
    A[Payload Generation<br/>API / CNA Hook] --> B[garble<br/>-seed=random<br/>-literals -tiny]
    B --> C[ldflags<br/>-s -w -trimpath<br/>-buildid=]
    C --> D[Compiled Binary<br/>EXE / DLL]
    D --> E{Shellcode<br/>Wrapping?}
    E -->|Yes| F[Donut<br/>Position-independent<br/>shellcode]
    E -->|No| G[Final Binary<br/>Obfuscated EXE/DLL]
    F --> H[Final Payload<br/>PE headers stripped]

    style A fill:#6a1b9a,color:#fff
    style B fill:#4a148c,color:#fff
    style C fill:#311b92,color:#fff
    style D fill:#1a237e,color:#fff
    style F fill:#0d47a1,color:#fff
    style H fill:#01579b,color:#fff

Ce que Garble corrige

Artefact Risque sans confusion Drapeau brouillé Statut
Chemins d'accès aux packages (github.com/...) Chemin du dépôt source complet visible dans les chaînes -trimpath + brouillage CORRIGÉ
Noms des fonctions/symboles Tous les noms de fonctions récupérables -seed=random FIXED -- noms randomisés par build
Littéraux de chaîne (URL, erreurs, configuration) URL C2, messages d'erreur lisibles -literals FIXED -- chaînes chiffrées au moment de la compilation
Métadonnées de l'ID de build Liens binaires vers l'environnement de construction -buildid= (ldflags) FIXED -- supprimé du binaire
Taille binaire (sortie panique/débogage) Chaînes de panique, binaire de gonflement des informations de débogage -tiny RÉDUIT -- ~15 % plus petit, sortie de panique supprimée
Symboles de débogage Informations complètes sur le débogage DWARF -s -w (ldflags) FIXED -- supprimé par défaut

Limitations connues et irréparables

Il s’agit d’exigences architecturales du runtime Go. Aucun outil d'obscurcissement ne peut les supprimer sans casser le binaire.

Limitation Gravité Pourquoi irréparable Atténuation
octets magiques pclntab (0xFFFFFFF0/0xFFFFFFF1) ÉLEVÉ Requis par le runtime Go pour le déroulement de la pile, le GC et la récupération de panique L'emballage du shellcode Donut supprime entièrement les en-têtes PE ; le masque de sommeil crypte le .text pendant le sommeil
Caractéristiques des sections PE spécifiques à Go MOYEN L'éditeur de liens Go produit une disposition et un alignement distinctifs des sections .text/.data Le chargeur Donut/shellcode élimine la structure PE ; Le clonage PE (en-tête Rich) réduit le caractère unique
Aller aux goroutines d'exécution (sysmon, GC) MOYEN Les threads d'arrière-plan pour le garbage collection et la surveillance du système sont toujours en cours d'exécution Filtrage du nombre de threads ; le masque de sommeil interrompt le GC pendant le sommeil
Tapez les métadonnées pour Reflect/Interfaces FAIBLE Noms de types exportés requis pour la répartition et la réflexion de l'interface Définissez GOGARBLE pour limiter la portée ; éviter les types exportés inutiles
.text lisible pendant l'exécution MOYEN Go ne peut pas s'exécuter à partir d'une mémoire non lisible (pas d'exécution W^X uniquement) Le masque de sommeil crypte le .text pendant le sommeil ; exposé uniquement pendant l'exécution active
Aller à la version dans pclntab FAIBLE La version de la structure pclntab révèle la gamme de versions Go (1.18+ vs 1.20+) Non pratiquement exploitable au-delà de l'identification de la famille de versions Go

Exploration approfondie de pclntab

Le pclntab (Tableau des numéros de ligne du compteur de programme) est l'artefact non réparable le plus risqué. Il existe dans chaque binaire Go et contient :

  • Octets magiques qui identifient la famille de versions Go (0xFFFFFFF0 pour Go 1.18+, 0xFFFFFFF1 pour Go 1.20+)
  • Points d'entrée des fonctions (noms tronqués mais structure intacte)
  • Mappages de numéros de ligne du fichier source (chemins supprimés par -trimpath)
  • Tailles de cadre de pile pour le déroulement

Des outils comme GoReSym exploitent cette structure pour récupérer les limites des fonctions, même à partir de binaires tronqués. La structure elle-même ne peut pas être supprimée – le runtime Go panique sans elle.

Impact : Tout binaire contenant des octets magiques pclntab peut être identifié comme Go indépendamment de toute autre obscurcissement. Les analystes binaires peuvent récupérer les limites des fonctions (mais pas les noms) et reconstruire le graphe d'appel du programme.

Meilleure atténuation : Enveloppez le binaire tronqué dans le shellcode Donut. Donut convertit le binaire en code indépendant de la position, supprimant entièrement les en-têtes PE et les caractéristiques des sections. Le pclntab existe toujours en mémoire au moment de l'exécution, mais il est chiffré pendant les périodes de veille lorsque le masquage du sommeil est activé.

Modes de construction

Mode Commande Cas d'utilisation Niveau d'obscurcissement
Développement make build-implant Itération rapide, débogage Minimal (symboles supprimés, -trimpath, -buildid=)
Fabrication make build-implant-prod Déploiement de l'engagement Complet (garble -seed=random -literals -tiny)
Payloads de relais (obscurcies) API de payload avec obfuscate: true Payloads générées par l'opérateur Complet (mêmes drapeaux déformés que la production)
Payloads de relais (pas de confusion) API de payload avec obfuscate: false Tests rapides Minimal (-trimpath, -buildid= dans ldflags)

Outils de détection

Outil Auteur Capacité Efficacité contre les garbles
GoReSym Mandiant Récupère les symboles via l'analyse de la structure pclntab Élevé – récupère les limites des fonctions malgré le brouillage
GoStringUngarbler Google Vaincre le garble -literals via la correspondance de modèles Moyen -- identifie et déchiffre le chiffrement de chaîne de Garble
Indéformable Plugin Ninja binaire Analyse CFG pour inverser l'obscurcissement des confusions Moyen - le graphique de flux de contrôle récupère les informations sémantiques
Règles YARA (pclntab) Divers Détecte les binaires Go via l'analyse des octets magiques de pclntab Fonctionne toujours - exigence architecturale, ne peut pas être masquée
chaînes + grep Norme Recherche des chaînes de texte en clair en binaire Inefficace -- garble -literals crypte toutes les constantes
PE-ours / CFF Explorer Divers Analyse la structure du PE et les caractéristiques des sections Partiel : identifie la disposition des sections spécifiques à Go

Guide de l'opérateur

  • Garble est une évasion, pas une invisibilité. Cela rend l'ingénierie inverse statique beaucoup plus difficile mais ne rend pas un binaire inanalysable. Un analyste déterminé utilisant GoReSym peut toujours récupérer les limites des fonctions.

  • Les binaires Go SONT identifiables comme Go. Les octets magiques pclntab sont une exigence architecturale. Aucune dissimulation ne peut changer cela. Si "not Go" est une exigence stricte, utilisez le stager C pour l'accès initial.

  • Enveloppez l'implant tronqué dans le chargeur de shellcode. Donut convertit l'EXE tronqué en shellcode indépendant de la position, supprimant entièrement les en-têtes PE et les caractéristiques de section.

  • Le masque de sommeil protège au moment de l'exécution. Pendant le sommeil, la section .text est cryptée en mémoire, annulant ainsi l'analyse de la mémoire pour les modèles Go.

  • -seed=random signifie que chaque build est unique. Chaque compilation produit un binaire avec différents noms de symboles et clés de cryptage de chaîne, battant ainsi la détection AV basée sur les signatures.

  • La détection comportementale EDR est orthogonale au garble. Garble n'affecte que l'analyse statique. Les détections comportementales (séquences d'appels API, modèles de réseau, injection de threads) ne sont pas affectées par l'obscurcissement binaire.

  • Le stager C évite entièrement les signatures Go. Le stager MinGW C (~ 23 Ko) télécharge et exécute l'implant complet. Il n'a pas de runtime Go, pas de pclntab, pas de goroutines. Utilisez le stager C lorsque l’accès initial ne doit pas ressembler à Go.


Commande de posture OPSEC d'exécution

La commande opsec exécute l'OpsecModule (implant/internal/modules/opsec/opsec.go) et renvoie un rapport de posture noté avec 17 vérifications individuelles. Utilisez-le pour auditer la configuration d'évasion d'un beacon avant d'exécuter des opérations sensibles.

Exécuter la commande

Syntaxe du shell :

opsec

Exemple d'API :

curl -s -X POST https://stentor.app/api/v1/cockpit/shell \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "BEACON_UUID",
    "command": "opsec"
  }'

Exemple de sortie

[*] OPSEC Posture Report
[*] Score: 71/100

[+] syscall_method: indirect -- APIs routed via ntdll gadgets
[+] sleep_mask: enabled -- .text encrypted during sleep
[+] heap_mask: enabled -- Heap records encrypted during sleep
[!] stack_mask: disabled -- Thread stack visible during sleep
[+] beacon_gate: enabled (25 APIs) -- Sensitive APIs through syscall shim
[!] module_stomp: disabled -- No module stomping (MEM_PRIVATE allocations)
[+] ppid_spoof: explorer.exe -- Child processes spoofed under explorer.exe
[+] spawnto: RuntimeBroker.exe (pool: 7) -- Context-aware rotation
[+] amsi_patched: enabled -- AmsiScanBuffer patched in fork-and-run
[!] etw_patched: disabled -- ETW active in fork-and-run processes
[+] tls_fingerprint: chrome_auto -- uTLS fingerprint spoofing active
[!] sleep_method: direct -- Standard sleep (no timer queue obfuscation)
[+] drip_load_inject: enabled -- Injection memory allocated in small chunks
[+] use_rwx: disabled -- W^X compliant (RW->RX transitions)
[!] udrl: disabled -- Standard reflective loading
[-] edr_hooks: 3 hooked -- Hooked: NtAllocateVirtualMemory, NtWriteVirtualMemory, NtCreateThreadEx -- run edr_unhook
[+] hwbp_status: 2/4 DR slots active -- AMSI/ETW bypass via hardware breakpoints

Recommendations:
  - Consider enabling stack masking for additional sleep protection
  - Configure module stomping DLL for MEM_IMAGE backing
  - Consider timer_queue sleep method for Ekko-style timer-based sleep
  - Consider enabling UDRL for custom reflective loading
  - Run edr_unhook to remove EDR userland hooks before injection/credential operations

Calcul des scores

Chacun des 17 contrôles est noté en fonction de son statut :

Statut Points Indicateur Signification
good 1.0 [+] Paramètre OPSEC optimal actif
warn 0.5 [!] Acceptable mais amélioration disponible
bad 0.0 [-] Risque de détection important
info 0.0 [*] Informatif (non noté en fonction de la posture)

Formule : score = (sum of points / total checks) * 100

Un score de 100 signifie que les 17 chèques sont dans l'état good. Visez un score minimum de 70 pour les engagements standard et de 85+ pour les environnements à forte intensité EDR.

Les 17 contrôles de posture

# Vérifier Valeurs Bien Avertir Mauvais Recommandation
1 syscall_method indirect, direct, none indirect direct aucun Activer les appels système indirects pour contourner les hooks du mode utilisateur
2 sleep_mask enabled, disabled activé -- désactivé Chiffrer la mémoire du beacon pendant le sommeil
3 heap_mask enabled, disabled activé désactivé -- Activer le chiffrement de tas pour une protection supplémentaire du sommeil
4 stack_mask enabled, disabled activé désactivé -- Activer le chiffrement de la pile et l'usurpation d'identité
5 beacon_gate enabled (N APIs), disabled activé -- désactivé Acheminer les API sensibles via des appels système
6 module_stomp Nom de la DLL, disabled DLL configurée désactivé -- Utiliser le support MEM_IMAGE via le module Stomping
7 ppid_spoof nom du processus, disabled configuré désactivé -- Usurper le PID parent du processus enfant
8 spawnto exe + informations sur le pool personnalisé/piscine -- rundll32.exe Changement par rapport à rundll32.exe par défaut
9 amsi_patched enabled, disabled activé désactivé -- Corriger AMSI dans les processus fork-and-run
10 etw_patched enabled, disabled activé désactivé -- Corriger ETW dans les processus fork-and-run
11 tls_fingerprint nom de l'empreinte digitale, default configuré -- par défaut Définir l'empreinte digitale uTLS pour éviter la détection Go TLS
12 sleep_method timer_queue, direct minuterie_file d'attente direct -- Utilisez le mode veille basé sur une minuterie de style Ekko
13 drip_load_inject enabled, disabled activé désactivé -- Allouer la mémoire d'injection en petits morceaux
14 use_rwx disabled, enabled désactivé (W^X) -- activé (RWX) Désactivez RWX pour les allocations conformes à W^X
15 udrl enabled, disabled activé désactivé -- Activer le chargeur réfléchissant défini par l'utilisateur
16 edr_hooks none detected, N hooked aucun -- accro Exécutez edr_unhook avant les opérations sensibles
17 hwbp_status N/4 DR slots, inactive actif -- -- Activer HWBP pour le contournement AMSI/ETW sans correctif

Améliorer votre score

Exécutez opsec après l'enregistrement initial pour identifier les lacunes, puis utilisez les commandes d'évasion pour activer les contrôles manquants. Une séquence de durcissement typique : syscall-method indirect puis beacon_gate enable puis sleep_config sleep_mask on puis hwbp both on.


Matrice de décision : sélection de la technique par environnement

Sélectionnez les techniques d'évasion en fonction de la posture défensive de l'environnement cible. La matrice ci-dessous mappe chaque paramètre configurable à trois profils d'environnement.

Technique Laboratoire / Pas d'EDR EDR standard EDR-lourd / MDR
Méthode d'appel système none -- aucune évasion nécessaire direct -- contourne les hooks du mode utilisateur indirect -- trampoline ntdll, le plus difficile à détecter
Masquage du sommeil Désactivé : itération rapide .text uniquement -- protection de base de la mémoire .text + tas + pile -- couverture complète
Méthode de sommeil direct -- fiable, déboguable direct -- stable pour les opérations timer_queue -- évite la surveillance SleepEx
BeaconGate Désactivé - surcharge inutile Activé : couvre 25 API critiques Activé + mask_on_call -- crypte la mémoire par appel d'API
usurpation d'identité PPID Désactivé explorer.exe pour le contexte utilisateur Parent adapté au contexte (svchost pour SYSTEM, RuntimeBroker pour l'utilisateur)
Piétinement de modules Désactivé xpsservices.dll -- Support MEM_IMAGE xpsservices.dll -- essentiel pour contourner l'analyse de la mémoire
SpawnTo Par défaut (rundll32.exe) RuntimeBroker.exe ou dllhost.exe svchost.exe + usurpation d'argument + blockdll
Contournement AMSI/ETW Pas nécessaire Patch en ligne (commandes amsi / etw) Points d'arrêt matériels (hwbp both on) -- aucune modification de la mémoire
Technique d'injection CreateRemoteThread -- le plus simple QueueUserAPC ou NtMapViewOfSection Early Bird APC + module stomping + appels système indirects
Processus fork-and-run N'importe lequel RuntimeBroker.exe avec des blockdll Minimisez les « fork-and-run » ; préférer l'exécution en ligne BOF
Transport C2 HTTP -- non chiffré, rapide HTTPS avec empreinte digitale uTLS HTTPS + profil malléable + fronting de domaine
Obscurcissement des confusions Désactivé : constructions plus rapides Complet (-seed=random -literals -tiny) Encapsulation du shellcode Full + Donut + Stager C pour l'accès initial
Empreinte digitale TLS Go TLS par défaut chrome_auto -- imite Chrome chrome_auto -- essentiel pour éviter les signatures Go TLS
Injection goutte à goutte Désactivé : inutile Activé (délai de 10 ms) Activé (délai de 20 ms+) pour une allocation prudente
UtiliserRWX Soit – pas de surveillance EDR Désactivé (W^X : RW puis RX) Désactivé : les pages RWX sont des signaux d'alarme immédiats

Profils d'évasion complets

Utilisez ces profils copier-coller comme points de départ pour chaque type d'environnement.

Configuration minimale pour une itération et des tests rapides.

sleep 5
syscall-method none

Aucun paramètre d'évasion n'est nécessaire. Concentrez-vous sur les tests de fonctionnalités.

Évasion modérée pour les environnements avec CrowdStrike, SentinelOne, Defender for Endpoint ou similaire.

sleep 60 25
syscall-method indirect
sleep_config sleep_mask on
sleep_config heap_mask on
beacon_gate enable
ppid explorer.exe
spawnto x64 %windir%\sysnative\RuntimeBroker.exe
blockdlls start
hwbp both on

Évasion maximale pour les environnements fortement surveillés avec SOC actif, analyse de la mémoire et analyse comportementale.

sleep 300 40
syscall-method indirect
sleep_config sleep_mask on
sleep_config heap_mask on
sleep_config stack_spoof on
sleep_config stack_depth 0
sleep_config method timer_queue
beacon_gate enable
beacon_gate mask_on_call true
ppid explorer.exe
spawnto x64 %windir%\sysnative\dllhost.exe
blockdlls start
hwbp both on
argue net1.exe /enum /domain

Compromis de stabilité

Les paramètres d'évasion maximum (masquage de pile, veille timer_queue, masque sur appel) augmentent la surcharge du processeur et peuvent interagir avec le runtime Go dans les cas extrêmes. Testez minutieusement dans un miroir de laboratoire de l’environnement cible avant le déploiement. Utilisez opsec pour vérifier que la configuration est appliquée correctement.

Workflow de sélection de profil

  1. Exécutez une reconnaissance pour identifier les produits EDR sur la cible (utilisez edr_query ou une énumération manuelle)
  2. Sélectionnez le profil approprié dans la matrice ci-dessus
  3. Appliquer les paramètres via les commandes d'évasion après l'enregistrement initial du beacon
  4. Exécutez opsec pour vérifier la configuration et vérifier votre score de posture
  5. Ajustez les paramètres individuels en fonction des recommandations du rapport de posture

Garde-corps d'exécution

Les garde-fous d'exécution imposent des limites opérationnelles à l'exécution des beacons. Configurez-les au moment de la génération de le payload pour empêcher les beacons de s'exécuter dans des environnements non autorisés, après les délais d'engagement ou en dehors des fenêtres opérationnelles.

Date de mise à mort

Le beacon vérifie la date actuelle par rapport à la date d'élimination configurée à chaque cycle d'interrogation. Après la date d'arrêt, le beacon exécute CleanupArtifacts (supprime les tâches planifiées, les clés de registre et s'auto-supprime), puis se termine.

kill_date: 2026-03-31

Fixez toujours une date de mise à mort

Chaque payload d'engagement doit avoir une date de mise à mort. Les beacons oubliées qui s’enregistrent après la fin d’un engagement sont un handicap. Définissez la date de mise à mort sur la date de fin de l'engagement plus une période tampon (généralement 7 jours).

Heures de travail

Limitez l’activité du beacon à des heures et des jours spécifiques. En dehors de la fenêtre configurée, le beacon calcule le temps restant jusqu'à la prochaine période de travail et se met en veille pendant cette durée dans un seul appel de veille obscurci (et non dans une boucle de vérification-veille rapide).

working_hours: 08:00-18:00
working_days: Mon-Fri
timezone: America/New_York

Le mappage des fuseaux horaires Windows couvre 16 zones communes. Le beacon résout le nom du fuseau horaire Windows en décalage UTC au démarrage.

Géolocalisation

Restreindre l’exécution à des environnements réseau spécifiques. Le beacon vérifie ces contraintes au démarrage et revérifie tous les 10 cycles d'interrogation.

Contrainte Méthode de vérification Action en cas de non-concordance
Plage IP IP des adaptateurs locaux par rapport à la liste CIDR Sortie + nettoyage
Nom d'hôte os.Hostname() par rapport à la liste autorisée Sortie + nettoyage
Domaine Barre oblique inverse dans l'heuristique du nom d'utilisateur Sortie + nettoyage
Nom d'utilisateur Utilisateur actuel par rapport à la liste autorisée Sortie + nettoyage
{
  "geofence_ips": ["10.10.10.0/24", "192.168.1.0/24"],
  "geofence_hostnames": ["WS01", "WS02"],
  "geofence_domains": ["corp.local"],
  "geofence_usernames": ["labuser"]
}

Détection DNS Canary

Configurez un domaine DNS Canary que le beacon résout au démarrage. Si le domaine est résolu (indiquant que le binaire a été soumis à un bac à sable qui résout automatiquement le DNS), le beacon déclenche le point de terminaison Canary et se termine.

dns_canary: canary.yourdomain.com

Le point final du voyage Canary n'est pas authentifié (accessible au relais sans jeton JWT), de sorte que le beacon peut signaler avant même l'enregistrement C2 complet. La résolution Canary utilise net.Resolver (multiplateforme, aucune beacon de build nécessaire).

Vérifications OPSEC préalables à la tâche

Lorsque anti_analysis est activé, le beacon exécute des vérifications d'environnement avant d'exécuter des tâches sensibles :

  1. Détection EDR - 10 signatures de processus de fournisseurs (CrowdStrike, SentinelOne, Defender, Carbon Black, Cylance, ESET, Kaspersky, Sophos, Trend Micro, Symantec)
  2. Indicateurs du bac à sable – Faible nombre de processeurs, faible RAM, installation récente du système d'exploitation, noms d'utilisateur du bac à sable connus
  3. Détection du débogueur -- IsDebuggerPresent, NtQueryInformationProcess(ProcessDebugPort)
  4. Indicateurs VM – Clés de registre pour VMware/VirtualBox/Hyper-V, préfixes MAC connus

Un seuil d'indicateur 2+ est requis pour le déclenchement (un seul indicateur est ignoré pour réduire les faux positifs). Voir Anti-Analysis pour la configuration d'exécution.

Nettoyage à la sortie

Lorsqu'un garde-corps se déclenche ou que la date de mise à mort est atteinte, CleanupArtifacts effectue :

  1. Supprime 3 noms de tâches planifiées connues utilisées par la persistance
  2. Nettoie 3 modèles de clés de registre utilisés par la persistance
  3. Supprime automatiquement le binaire du beacon via un fichier batch (cmd /c del /q /f <path>)

Recommandations opérationnelles

Pré-Engagement

La sécurité opérationnelle commence avant que la première payload ne touche le réseau cible.

Configuration de l'infrastructure :

  • Catégorisation des domaines : Enregistrez les domaines plus de 30 jours avant l'engagement. Soumettez-les aux services de catégorisation (Bluecoat, McAfee, Palo Alto) pour une classification légitime. Les domaines datant de moins de 7 jours sont signalés par la plupart des proxys Web.
  • Certificats TLS : Utilisez Let's Encrypt ou achetez des certificats légitimes. Les certificats auto-signés sont signalés par les appareils d'inspection SSL et génèrent des avertissements du navigateur.
  • Redirecteurs : Placez les redirecteurs Apache/nginx entre le trafic de l'implant et le serveur d'équipe. Configurez les règles de redirection pour filtrer les sondages des analystes (user-agent, plages IP, timing).
  • Profils malléables : utilisez un profil C2 malléable qui imite les modèles de trafic légitimes (Microsoft 365, Slack, CDN). Testez le profil par rapport aux bases de données d'empreintes digitales JA3/JA4.

Tests de payload :

  • Construire avec garble : Utilisez toujours obfuscate: true pour les payloads d'engagement. Testez les taux de détection par rapport à l’AV/EDR de la cible dans un environnement miroir.
  • Définissez des garde-fous : configurez des garde-fous d'adresse IP, de nom d'hôte, de domaine ou de nom d'utilisateur pour empêcher l'exécution sur les sandbox d'analyste.
  • Définissez les dates d'arrêt : Chaque payload d'engagement doit avoir une date d'arrêt définie sur la date de fin de l'engagement plus une période tampon.
  • Vérifiez la sortie tronquée : Exécutez strings sur le binaire tronqué pour confirmer qu'il ne reste aucune URL C2 en texte clair, message d'erreur ou chemin de package.

Liste de contrôle des infrastructures

Âge du domaine > 30 jours, certificat TLS valide, redirecteur avec règles de filtrage, profil malléable testé par rapport aux bases de données JA3, garde-fous définis, date de mise à mort configurée. L’absence de l’un de ces éléments augmente considérablement le risque de détection lors de l’accès initial.

Accès initial

La première exécution de le payload est le moment le plus risqué. Un binaire inconnu exécuté pour la première fois déclenche l'analyse la plus agressive.

  • Utilisez le stager C pour éviter la signature Go. Le stager MinGW C (~ 23 Ko) n'a pas de runtime Go, pas de pclntab, pas de goroutines. Il télécharge et exécute l'implant complet en mémoire. Utilisez-le lorsque le compte-gouttes initial ne doit pas être identifié comme Go.
  • Sélectionnez le transport avec soin. HTTPS avec empreinte digitale uTLS (chrome_auto) est la valeur par défaut la plus sûre. DNS C2 est utile pour les environnements qui bloquent le HTTPS direct mais ont une bande passante inférieure. SMB est destiné uniquement au pivotement interne (pas à l'accès initial).
  • Utilisez des profils malléables. Un profil malléable bien configuré fait apparaître le trafic C2 comme HTTPS légitime pour les appareils d'inspection. Sans cela, les modèles HTTP par défaut sont facilement signés.
  • Réduisez l'empreinte initiale. Exécutez opsec immédiatement après le premier enregistrement. Appliquez le profil d'évasion approprié avant d'exécuter des commandes post-exploitation.

Post-Exploitation

Chaque commande exécutée via le beacon génère des artefacts. Minimisez l’empreinte en choisissant soigneusement les méthodes d’exécution.

  • Préférez BOF plutôt que fork-and-run. Les fichiers objets Beacon s'exécutent en ligne dans le processus Beacon : pas de création de processus enfant, pas d'injection, pas de terminaison de processus sacrificiel. Fork-and-run génère un processus enfant visible que EDR surveille.
  • Préférez inline-execute à execute-assembly. Pour les outils .NET, l'exécution en ligne évite les artefacts de chargement CLR détectés par le profilage .NET au niveau du processus.
  • Gérer les intervalles de veille. Le mode interactif (veille 0) génère un trafic réseau continu. Utilisez sleep 5 pour les opérations actives et revenez à sleep 60+ lorsque vous êtes inactif. La gigue empêche la détection de modèles.
  • Surveillez la génération du journal des événements. Chaque technique génère des événements Windows spécifiques. Soyez conscient des événements que votre opération actuelle produit (voir les tableaux des surfaces de détection ci-dessus).

Fork-and-run est l'opération la plus bruyante

Chaque opération fork-and-run crée une chaîne de processus visible : le beacon génère un processus sacrificiel, injecte du code, capture la sortie, termine le processus. Cela génère les événements Sysmon 1 (création de processus), 8 (CreateRemoteThread), 5 (fin de processus) et potentiellement 10 (accès au processus). Utilisez des BOF ou une exécution en ligne dans la mesure du possible.

Mouvement latéral

Le déplacement entre les systèmes génère des événements d'authentification que les SOC mettent en corrélation dans l'ensemble de l'environnement.

  • Évitez de répéter PtH sur la même cible. La transmission du hachage au même système à partir de la même source génère un modèle détecté par la corrélation automatisée. Varier les beacons sources et les techniques.
  • Nettoyer les services après PsExec. PsExec crée un service (événement 7045) qui persiste après l'exécution. Supprimez le service immédiatement après utilisation.
  • Soyez conscient des horodatages. Les mouvements latéraux en dehors des heures d'ouverture (connexion à 3h00 depuis le poste de travail) génèrent des alertes. Faites correspondre l'activité aux heures d'ouverture prévues pour le compte cible.
  • Préférez WMI ou DCOM à PsExec. L'exécution WMI et les abus DCOM génèrent moins d'artefacts distinctifs que l'exécution basée sur les services. WMI est particulièrement efficace car l’activité WMI est courante dans les environnements d’entreprise.
  • Utilisez l'usurpation d'identité de jeton pour un contexte légitime. Volez les jetons des processus appartenant aux utilisateurs qui accéderaient légitimement au système cible, puis déplacez-vous latéralement dans ce contexte.

Persistance et longue distance

Les opérations de longue durée nécessitent une attention particulière aux modèles de comportement des beacons.

  • Gestion des intervalles de sommeil. Les beacons longue distance doivent utiliser des intervalles de sommeil de plus de 300 secondes avec une gigue de 30 à 40 %. Les modèles d'enregistrement lents et faibles sont beaucoup plus difficiles à détecter via la détection des anomalies du réseau.
  • Rotation des transports. Si vous travaillez sur plusieurs jours, envisagez une rotation entre les transports (HTTPS vers DNS ou entre différents points de terminaison HTTPS) pour éviter une détection de modèles cohérente.
  • Modèles d'enregistrement des beacons. Même en cas de gigue, un beacon qui s'enregistre à des intervalles parfaitement réguliers se démarque. La combinaison sommeil + instabilité crée une variation naturelle, mais sachez que les engagements extrêmement longs peuvent présenter des tendances globales.
  • Diversité des mécanismes de persistance. Ne comptez pas sur un seul mécanisme de persistance. Utilisez le détournement de COM (furtif, faible détection) comme tâche principale et une tâche planifiée (fiable, haute détection) comme sauvegarde. Testez la survie de la persistance lors des redémarrages en laboratoire.
  • Actualisation des informations d'identification. Les tickets Kerberos et les sessions NTLM expirent. Planifiez des intervalles d'actualisation des informations d'identification et disposez d'une procédure pour obtenir à nouveau l'accès si la persistance survit mais que les informations d'identification mises en cache expirent.

Nettoyage

Le nettoyage de l'engagement est une obligation de l'OPSEC. Supprimez ou documentez tous les artefacts laissés sur les systèmes cibles.

Conscience du journal des événements :

Chaque technique génère des événements Windows spécifiques. Événements clés à connaître :

Technique Événements générés Remarques
Injection de processus Sysmon 1, 8, 10 CreateRemoteThread enregistré avec les PID source/cible
Création de services Sécurité 7045 Nom du service, chemin binaire, compte visible
Tâche planifiée Sécurité 4698 Définition XML de tâche enregistrée
Modification du registre Sysmon 12, 13, 14 Chemin de clé, anciennes/nouvelles valeurs enregistrées
Authentification (latérale) Sécurité 4624, 4625 Type de connexion, IP source, nom de compte enregistré
Requêtes Kerberos Sécurité 4768, 4769 SPN, type de cryptage, options de ticket enregistrées
Accès LSASS Sysmon 10 Processus source, masque d'accès accordé enregistré
PowerShell Événement 4103, 4104 Journalisation complète en ligne de commande et en blocs de script

Vous ne pouvez pas supprimer les journaux d'événements de sécurité sans laisser de trace

L'effacement du journal des événements de sécurité génère l'événement 1102 (le journal d'audit a été effacé). La suppression sélective (evtdelete) génère toujours l'événement 1102/104 et laisse des espaces vides dans l'ID d'enregistrement. La seule façon d'éviter cela est de ne pas générer l'événement en premier lieu : choisissez des techniques avec des empreintes de journal inférieures.

Suppression des artefacts :

  • Supprimez les fichiers supprimés. Supprimez tous les exécutables, DLL ou scripts placés sur le disque. Utilisez timestomp pour restaurer les horodatages d'origine sur les répertoires auxquels vous avez accédé.
  • Supprimez les mécanismes de persistance. Supprimez les clés de registre, les tâches planifiées, les services et les entrées de piratage COM. Vérifiez la suppression avec une deuxième vérification.
  • Nettoyer les artefacts de service. Les services PsExec, les abonnements WMI et les enregistrements DCOM doivent tous être supprimés.
  • Utilisez timestomp pour les opérations sur les fichiers. La commande timestomp (T1070.006) modifie les horodatages des fichiers pour qu'ils correspondent aux fichiers environnants, réduisant ainsi l'efficacité de l'analyse de la chronologie. Voir opérations sur les fichiers pour plus de détails.
  • Documentez ce qui ne peut pas être supprimé. Certains artefacts (entrées du journal des événements, traces ETW, enregistrements d'audit au niveau du noyau) ne peuvent pas être supprimés après l'exécution. Documentez-les dans votre rapport de mission afin que le client puisse réinitialiser les références.

Indicateurs de risque du menu contextuel

Le menu contextuel du cockpit affiche un point de risque OPSEC coloré à côté de chaque technique, donnant aux opérateurs une évaluation du risque en un coup d'oeil avant l'exécution.

Couleur Niveau de risque Signification
🟢 Faible Énumération passive, lectures de configuration, appels API bénins. Génère une télémétrie minimale. Sûr pour la reconnaissance initiale.
🟡 Moyen Opérations actives avec empreinte de détection modérée. Fork-and-run, manipulation de tokens, opérations fichiers, contournement UAC, LOLBins.
🔴 Élevé Opérations touchant des ressources fortement surveillées : LSASS, SAM, NTDS, injection de processus, vol de credentials, PowerShell, opérations destructives. La plupart des EDR les signalent immédiatement.

Utilisez les indicateurs de risque pour planifier votre approche

Commencez un engagement avec des techniques d'énumération vertes (faible risque) pour cartographier l'environnement avant de passer aux techniques jaunes et rouges. Cela réduit le risque de détection précoce et vous donne le temps d'identifier quelles défenses sont actives.

Les niveaux de risque sont définis dans les métadonnées YAML de la base de connaissances (server/knowledge_base/techniques/) et servis via l'API -- ils ne sont pas codés en dur dans l'interface et peuvent être ajustés par engagement.

Voir le Guide du menu contextuel pour la liste complète des indicateurs visuels incluant les badges de privilège et le filtrage par OS.


Références croisées

  • Kits d'évasion -- Options d'évasion au moment de la construction, kits personnalisés (artefact, ressource, UDRL, masque de sommeil) et tableau de référence complet des options d'évasion.
  • Commandes d'évasion -- Syntaxe des commandes d'évasion d'exécution, exemples d'API et profils recommandés pour chaque commande
  • Injection de processus -- Détails de la technique d'injection, méthodes prises en charge et considérations OPSEC par technique
  • Accès aux informations d'identification -- Commandes de collecte d'informations d'identification avec conseils OPSEC par technique
  • Profils malléables -- OPSEC au niveau du réseau via la mise en forme du trafic, le masquage d'empreintes digitales TLS et la transformation HTTP