Injection de codage shell
Aperçu : Le shellcode fait généralement référence à un petit morceau de code machine autonome (instructions binaires) conçu pour être injecté dans la mémoire d’un autre processus et exécuté. Il est souvent indépendant de la position, ce qui signifie qu’il peut fonctionner correctement peu importe où il est placé en mémoire. Nommé à l’origine pour son usage courant dans les exploits visant à générer un shell de commande (), le terme couvre désormais largement toute charge utile injectée de cette manière, comme le code pour télécharger et exécuter des logiciels malveillants, établir une connexion inverse ou, dans un contexte de triche, manipuler directement les fonctions ou données du jeu. L’injection de shellcode est le processus consistant à insérer ce code dans un processus cible et à déclencher son exécution.
cmd.exeMécanisme d’évasion : Le procédé implique généralement un injecteur (qui peut être un procédé autonome ou un autre compromis) effectuant les étapes suivantes :
.exeAcquisition par procédé cible : Obtenir un handle pour le processus cible (par exemple, celui du jeu ) en utilisant avec suffisamment d’autorisations (comme , , ).
javaw.exeOpenProcessPROCESS_VM_OPERATIONPROCESS_VM_WRITEPROCESS_CREATE_THREADAllocation de la mémoire : Allouer une région de mémoire dans l’espace d’adressage virtuel du processus cible en utilisant . Cette région doit se voir accorder des permissions d’exécution (par exemple, ).
VirtualAllocExPAGE_EXECUTE_READWRITEÉcriture de shellcode : Copiez le code-shell de la mémoire de l’injecteur dans la région nouvellement allouée au sein du processus cible en utilisant .
WriteProcessMemoryDéclencheur d’exécution : Faire en sorte que le processeur commence à exécuter le shellcode injecté. Les méthodes courantes incluent :
CreateRemoteThread: Démarre un nouveau thread dans le processus cible, avec son adresse de départ fixée au début du shellcode injecté. (Méthode classique).Détournement de thread : suspendre un thread existant dans la cible (), modifier son pointeur d’instruction (via /) pour pointer vers le shellcode, puis reprendre le thread ().
SuspendThreadGetThreadContextSetThreadContextResumeThreadAppels de procédures asynchrones (APC) : Mettez un APC () en file d’attente vers un thread cible. Le shellcode s’exécute lorsque le thread entre en état d’attente alertable.
QueueUserAPCD’autres méthodes impliquant des rappels ou des mécanismes de crochet.
Pourquoi les tricheurs l’utilisent :
Livraison de charges utiles sans fichiers : Le shellcode lui-même s’exécute directement depuis la mémoire, souvent sans nécessiter qu’un fichier malveillant correspondant (.exe ou .dll) soit présent sur le disque au moment de l’exécution (bien que le shellcode puisse télécharger ou supprimer ces fichiers plus tard). Cela évite les scans antivirus basés sur des fichiers et les simples vérifications d’artefacts.
Furtivité: Exécuter dans le cadre d’un processus légitime (ou du jeu) permet de dissimuler l’activité malveillante aux listes de processus de base et aux outils de surveillance.
Flexibilité: Le shellcode peut être relativement petit et conçu pour effectuer une action initiale spécifique, comme la mise en place d’une communication ou le chargement réflexif d’une charge utile plus importante du second étage.
Détection: La détection de l’injection de shellcode repose fortement sur l’analyse de la mémoire et la surveillance comportementale :
Analyse de la mémoire (Volatility/System Informer) : Utilisez des outils comme ceux de Volatility ou inspectez manuellement la mémoire des processus (via System Informer) pour détecter des régions de mémoire exécutables () qui ne sont pas sauvegardées par des fichiers légitimes sur le disque (mémoire) et contiennent des motifs de code machine suspects. Le shellcode a souvent une entropie élevée et peut manquer d’en-têtes PE typiques s’il s’agit de code brut.
malfindPAGE_EXECUTE_READWRITEPrivateNumérisation YARA : Analysez la mémoire des processus en utilisant des règles YARA conçues pour détecter des schémas shellcode courants, des stubs packer ou des séquences d’octets spécifiques associées à des charges utiles malveillantes connues.
Surveillance API (ProcMon) : Recherchez les séquences d’appels API caractéristiques utilisées pour l’injection : -> -> -> (ou APIs de détournement de threads) provenant d’un processus inattendu et ciblant le processus du jeu.
OpenProcessVirtualAllocExWriteProcessMemoryCreateRemoteThreadDump en direct du noyau : Le processus ou script injecteur utilisé pour initier l’injection de shellcode peut laisser des traces de commandes, de chemins ou d’artefacts d’appel API dans le dump du noyau.
Mis à jour
