web-dev-qa-db-fra.com

Un cheval de Troie peut-il se cacher pour que son activité n'apparaisse pas dans le processus du gestionnaire de tâches?

Un logiciel malveillant peut-il se cacher, de sorte que son activité n'apparaît pas dans la liste des processus du Gestionnaire des tâches? Peut-il se cacher de sorte que lorsque quelqu'un contrôle votre ordinateur, même si vous ouvrez le Gestionnaire des tâches, vous ne verrez aucune activité suspecte?

Si oui, comment peut-il faire cela? Quelles techniques peut-on utiliser pour se cacher de cette façon?

22
Steve

Oui. Il existe plusieurs façons:

  • Corrigez directement le processus du Gestionnaire des tâches au moment de l'exécution afin que son code d'énumération ignore votre processus.
  • Exécutez "sans processus", en chargeant un DLL dans un processus (par exemple via AppInit_DLLs) ou injecter du code dans la mémoire de processus et démarrer un thread (via VirtualAllocEx/WriteProcessMemory/CreateRemoteThread).
  • Accrochez le Process32First/Process32Next fonctionne dans chaque processus (y compris le gestionnaire de tâches) pour "ignorer" votre processus lorsque l'énumération est effectuée.
  • Crochet CreateToolhelp32Snapshot pour que la mémoire de la section mappée (voir ici pour le fonctionnement des instantanés) soit modifiée à l'avance, de sorte que Process32First/Process32Next finissent par lire à partir de fausses données.
  • Crochet ntdll.dll!NtQuerySystemInformation et, si SystemProcessInformation est passé, corrigez les résultats pour ignorer votre processus. Il s'agit d'un crochet de niveau inférieur aux appels ci-dessus.
  • Chargez un pilote en mode noyau qui accroche le gestionnaire en mode noyau pour les requêtes SystemProcessInformation. Je ne connais pas le vrai nom de ceci dans Windows (ce n'est pas documenté) mais essentiellement il y a une table de gestionnaires que NtQuerySystemInformation recherche à cet effet, et vous n'avez qu'à accrocher le bon. Voici l'implémentation ReactOS du gestionnaire réel. En cela, vous ne feriez que jouer avec les structures retournées pour que votre processus ne soit pas affiché.
  • Accrochez le SSDT pour intercepter la transition entre le mode utilisateur et le mode noyau lorsque diverses API d'énumération de processus sont appelées.
  • Utilisez Manipulation directe des objets du noya (DKOM) pour modifier les structures EPROCESS en mémoire afin que votre processus soit entièrement caché au noyau. Le noyau maintient une liste de structures reliées de façon circulaire qui représentent tous les processus en cours, avec les champs FLink et BLink comme pointeurs avant et arrière respectivement. En manipulant ces pointeurs pour sauter par-dessus votre processus, puis en manipulant les pointeurs de votre processus pour revenir à lui-même, le noyau sautera votre processus pendant l'énumération. Il s'agit d'une technique de rootkit courante.
47
Polynomial

Certainement - il existe plusieurs façons de se cacher du gestionnaire de tâches. Le plus simple est de se cacher à la vue du processus nommé quelque chose d'inoffensif. Une autre option consiste à masquer en tant que sous-processus qui n'apparaît alors pas.

Il pourrait également être installé en tant que service, toujours avec un nom innocent. Il apparaîtrait dans la liste des services mais ne serait pas affiché séparément dans la liste des tâches. Il y aura, j'en suis sûr, d'autres méthodes plus complexes qu'une recherche Google afficherait.

4
Julian Knight