Injection de code sous Windows

Je suis tombé sur un POC de c0de90e7 sur Rootkit.com qui exposait une nouvelle technique d’injection de code dans un processus qui emploi une technique plus furtive que celles utilisées jusqu’alors.
Avant d’expliquer en détail le procédé très astucieux employé par cette personne, je vais d’abord rappeler quelques notions techniques.

I. CreateRemoteThread

Cette API est présente sous Windows NT, 2000, XP, Vista semble-t-il. Comme son nom l’indique celle-ci permet de créer un thread dans un autre processus.

Son prototype:

1
2
3
4
5
6
7
8
9
HANDLE WINAPI CreateRemoteThread( //Renvoi un Handle sur le thread créé.
  HANDLE hProcess, //Handle sur le processus cible.
  LPSECURITY_ATTRIBUTES lpThreadAttributes, //Pointeur sur un déscripteur de sécurité choisi pour le thread
  SIZE_T dwStackSize, //Spécifie la taille de la pile à l'initialisation du thread.
  LPTHREAD_START_ROUTINE lpStartAddress, //Adresse du début de la routine.
  LPVOID lpParameter, //Pointeur sur des paramètres éventuels.
  DWORD dwCreationFlags, //Flags servant par exemple a créer le thread sans le lancer : CREATE_SUSPENDED...
  LPDWORD lpThreadId //Pointeur sur un DWORD pour recevoir l'ID du thread créé.
);

Continue la lecture