web-dev-qa-db-fra.com

Les virus peuvent-ils réellement injecter leur code dans d'autres processus?

Un virus peut-il vraiment injecter son propre code dans un processus afin qu'il reste sur votre ordinateur en permanence? Le seul moyen de supprimer réellement c'est pour réinstaller votre système d'exploitation. Ma question est de savoir comment peut-il faire cela sans endommager le fichier ou le processus?

12
moomonkey

Vous pouvez utiliser DLL injection au code d'injecter dans d'autres processus sans affecter d'autres données
[.____] (Selon la méthode, bien sûr).

Les autres moyens incluent le renommer et le déplacer des fichiers légitimes et la remplacer par des versions infectées, des entrées de démarrage, etc., mais elles sont facilement amovibles manuellement.

La seule façon de penser à infecter définitivement sans personnellement à l'aide des correctifs d'exploitation ou d'autres modifications de données consiste à utiliser une entrée de démarrage pour charger un pilote rootkit tel que Migbot ou FU qui comprend également des crochets de fonction Pour masquer les fichiers et les entrées de registre, il est impossible de supprimer manuellement.

Toutefois, ce type de rootkit utilise généralement des correctifs de noyau, qui modifient les données du système d'exploitation binaire sur le disque (faisant réinstallation nécessaire pour désinfecter complètement) et défait l'objectif de ne pas modifier les données.

La seule alternative consiste à rester en dehors du noyau et à utiliser un processus normal pour exécuter les logiciels malveillants et à utiliser des crochets de message Windows ou quelque chose de similaire pour appliquer des crochets sans modification de données.

Il y a un inconvénient de cette approche si ... Les crochets Usevol sont très faciles à détecter, par rapport aux correctifs du os du noyau.

Donc, donc, il est donc possible d'avoir des logiciels malveillants qui ne modifient pas les données, mais il est facilement détecté et supprimé par tout logiciel antivirus/ROOKIT à demi conscient, ce qui signifie que peu nombreux (le cas échéant!) Dans le malware sauvage utilisera non -Masting approches parce que les correctifs et tels sont bien meilleurs d'un point de vue furtif (et parfois encore plus facilement que les crochets non modifiés!).

12
Nate Koppenhaver

Vous posez environ deux problèmes différents.

Les virus peuvent-ils réellement injecter leur code dans d'autres processus?

La réponse est: Oui, ils peuvent. Vous pouvez injecter votre code dans d'autres processus avec injection DLL . Cela ne garantit pas que le virus chargera chaque fois que l'ordinateur démarre ou que le virus sera indétectable/non attachéable. Cela signifie simplement que le virus fonctionnera de l'espace d'adressage d'un autre processus (possible PE ).

Le fait que les virus injectent leur code dans d'autres processus assurent-ils qu'ils seront "attachés au système d'exploitation" jusqu'à une réinstallation?

Non, à moins d'avoir des capacités rootkit . Il y a quelques méthodes par lesquelles les rootkits se fixent à votre système. Vous pouvez lire sur l'une des méthodes d'un article sur TDL4 qui s'écriture de la touche MBR afin de se lancer, ainsi S'assurer que le code malveillant fonctionnera avant le début du système d'exploitation.

Si le virus est connu, la plupart des avions devraient reconnaître son comportement et nettoyer votre machine. Pour de nouvelles variantes de virus/rootkits, il peut être très complexe de supprimer le code malveillant avec des outils réguliers. Les rootkits sont passés à partir de la bague 0 (mode du noyau) en tant que pilote que vous devrez trouver et désactiver (faites-le à partir d'un système d'exploitation non infecté!).

7
YSY

Oui, c'est vraiment vrai. Oui, un virus peut infecter votre machine afin qu'il reste infecté jusqu'à ce que vous réinstallez le système d'exploitation.

Par exemple, le virus peut s'installer dans le dossier de démarrage afin qu'il soit automatiquement redémarré chaque fois que vous démarrez l'ordinateur. Il peut également modifier les fichiers exécutables stockés sur disque pour les remplacer par une version infectée, de sorte que chaque fois que vous lancez le programme, il est lancé avec un virus qui l'infectait déjà.

Vous n'avez pas dit pourquoi vous pensez que les virus ne modifieront rien sur le système de fichiers et ne modifieront pas le processus. Certains virus font certainement l'une ou les deux.

5
D.W.

Je pense que cela mérite d'être de comprendre ce que l'exécution d'un processus sur un système d'exploitation signifie d'abord.

La plupart des systèmes d'exploitation utilisent quelque chose appelé paging à la demande. En Linux, c'est l'effet de PROT_READ | PROT_WRITE | MMAP_PRIVATE Sur l'appel système mmap() Système. Plus précisément, les processus ne sont pas entièrement copiés en mémoire - les segments de code sont, tandis que le reste est mappé sur le système de fichiers. Si l'une de ces pages est modifiée en mémoire, elle est copiée en mémoire en premier. Ceci est également appelé "copie sur l'écriture". L'implication ici est que toute modification d'un processus en cours d'exécution ne soit pas écrite sur le disque automatiquement via mmap() (ou l'équivalent Windows).

Le résultat final est que vous devriez imaginer qu'il existe efficacement deux choses: une copie du programme sur disque (ci-après une image disque) et une copie du processus en mémoire, résident dans sa boîte à sable de la mémoire virtuelle (ci-après "espace d'adresses").

Un espace d'adressage de processus ne fait que compromettre le programme lui-même - il inclut également des bibliothèques partagées (DLL) et dans de nombreux cas, la moitié de l'espace d'adressage virtuel inclut des éléments du système d'exploitation que vous ne pouvez pas obtenir (voir mode 2GB Split VS 4GB/4GB. . Je me demande toujours pourquoi les processus sous Windows sont limités à 2 Go? C'est pourquoi). Les données de programme telles que la pile et le "tas" sont également présentes dans l'espace d'adresses virtuel - ces deux contiennent des données de programme.

Alors maintenant, nous avons des antécédents, voici les deux manières que vous pouvez modifier un processus:

Modifications de l'heure d'exécution

C'est en fait moins de modification que vous ne pourriez penser - généralement, votre objectif est d'exploiter une mauvaise codage et d'utiliser une méthode d'entrée pour obtenir une pièce d'entrée spécialement conçue dans l'espace d'adressage de processus, généralement appelé "code shell" dont l'objectif est de donner un Attaquant distant une invite de terminal (donc "coquille"). Ce n'est pas la seule action que vous puissiez prendre si vous pouvez faire n'importe quoi, de télécharger des fichiers distants pour modifier les paramètres de registre. Si vous ne manipulez pas les invites d'administrateur à des boîtes distantes, votre objectif est le plus susceptible de livrer une charge utile plus grande que possible dans la mémoire tampon d'entrée et d'exécuter que (le lecteur par téléchargement fonctionne de cette manière en exploitant des plug-ins de navigateur).

Il existe diverses variantes sur ce technique, mais toutes impliquent toutes les flux d'exécution pour obtenir quelque chose d'inattendu et généralement bénéfiques pour l'attaquant, se produira. À la suite de la configuration Copy-On-Write, l'original, sur l'image du disque de l'exécutable reste intact, mais il est probable que vous changez du processus que vous venez d'exploiter, sinon produisez un problème. C'est dur, mais pas impossible, de produire un exploit silencieux.

Pourquoi tout le monde continue à mentionner DLL injection?

Eh bien, il s'avère que certains programmes sont écrits avec la sécurité dans le cadre de leur processus de développement et nous ne pouvons pas les nourrir d'une entrée des ordures et les amener à l'exécuter. Donc, d'autres techniques sont nécessaires. =DLL injection, ou LD_PRELOAD Sous Linux-speak, est le processus d'obtention d'un objet partagé à charger avant tous les autres dans tous les autres, ou un seul processus d'adresses de processus. Ce vous donne du code à l'intérieur de la mémoire virtuelle d'un processus cible qui peut alors "accrocher" (rediriger) certaines parties du programme. Les tutoriels pour cela sont assez facileà trouver . "Re puis capable d'exploiter le processus à vos propres extrémités. Cependant, vous aurez besoin du DLL sur le disque la plupart du temps.

Il s'avère que cela ne suffisait pas pour ceux personnes agréables à Metasploit qui ont développé MeterProtter, un coquillage capable de télécharger un DLL en mémoire et . Ensuite l'injectant dans le système.

Modification des images de disque

Vous allez probablement utiliser la technique ci-dessus ou ses variantes pour entrer dans un système et que vous allez probablement livrer une charge utile quelque part et vous assurer qu'il est exécuté. Cependant, quelque chose d'autre que vous pouvez faire est d'écrire une nouvelle image disque, modifiée avec la charge utile choisie, sur un programme connu installé sur le système. Pour ce faire, vous devez avoir soigneusement inverser l'ingénieur au code d'origine et insérer votre exploit. Il y a trois problèmes potentiels:

  1. Si vous faites une erreur, le programme s'effondrera probablement.
  2. Vous avez des problèmes de citation en mouvement si vous ciblez une composante très variable. Votre modification fonctionnera-t-elle dans toutes les instances et tous les scénarios?
  3. Certains programmes sont spécifiquement conçus pour résister aux tentatives d'ingénierie inverse ou de les patcher. C'est une pratique assez courante dans l'industrie du jeu pour empêcher la copie des disques. Vous ne pensez peut-être pas que vous utilisez quelque chose d'écrit de cette façon, auquel cas je vous invite à avoir une lecture de la vanille Skype partie 1 et partie 2 efforts. Il s'avère que les auteurs de Skype ne le souhaitent pas d'inverse. Ce niveau de protection rend beaucoup plus difficile à modifier avec succès l'exécutable.

Kernel Patching - Qu'est-ce que c'est?

Le correctif est un peu un mot étrange à utiliser. Appliqué au noyau, il signifie généralement modifier les structures de données à l'intérieur d'un espace d'adressage du fil de noyau afin de cacher quelque chose ou d'atteindre une autre extrémité, telle que la surveillance.

Cependant, les noyaux eux-mêmes ont également des images de disque, il est donc possible de corriger les composants du noyau, y compris les pilotes, de cette façon. Encore une fois, la modification des images de disque est difficile, mais pas impossible.

sur la persistance et la requête de réinstallation

La persistance nécessite une écriture sur le disque à un moment donné. Si l'ordinateur redémarre, vous aurez besoin de votre malware stocké quelque part. Exploitez le code qui se trouve dans un espace d'adresses de processus (ou de noyaux) sera perdu comme tout RAM est compris entre les redémarrages, vous devez donc une manière dont vous avez besoin d'une certaine manière, si vous souhaitez persister le redémarrage, pour recharger votre code, pour recharger votre code. . Cela inclut les rootkits, qui devront également s'assurer qu'elles sont également rechargées.

Vous n'avez pas techniquement besoin de réinstaller votre système d'exploitation, même si des pièces critiques sont modifiées - tout ce que vous avez à faire est de remplacer ces pièces critiques avec des versions propres (c'est-à-dire à partir de votre disque d'installation Windows). Rien de logiciels malveillants ne nécessite que vous DOIT faire une réinstallation. Il s'agit de savoir combien vous devez décompresser et quelle est la probabilité que vous ayez supprimé tout le mauvais code. En tant que tel, il est plus sûr de réinstaller. C'est ce que je ferais et ce que je conseillerais quelqu'un d'autre.

Dites-moi qu'il y a des défenses ?!

Oui. authencitrice est conçu pour empêcher les modifications de tout ancien programme d'aller non détecté. protection du patch du noya ( Wikipedia ) ( FAQ ) protège les structures de données du noyau de modification par les pilotes. w ^ x , [~ # ~] aslr [~ # ~ ~] , pile canaries , pile non exécutable etc Protégez les programmes d'exécution des modifications évidentes. Aucun de ceux-ci n'est parfait, mais utilisé correctement, ils font de l'exploitation plus difficile.

5
user2213

Votre hypothèse de base est incorrecte - vous avez demandé comment un virus peut "faire cela sans endommager le fichier ou le processus?"

Plusieurs fois, il ne s'agit pas de dommages souvent survient. Cela n'est souvent pas une préoccupation de l'écrivain viral - tout dépend de leurs objectifs. Peut-être qu'ils veulent que le virus soit très furtif - auquel cas ils vont essayer de l'écrire plus attentivement, il n'y a donc aucun impact évident. D'autres fois, ils peuvent simplement vouloir que le virus se propage rapidement et que vous puissiez obtenir un virus très bruyant qui endommageait beaucoup le système d'exploitation/application sur son chemin.

3
Rory Alsop

En plus des excellentes réponses, considérez également qu'il est possible d'avoir des logiciels malveillants même persister au-delà de la réinstallation du système d'exploitation. Si le système est infecté au niveau du micrologiciel (par exemple http://www.theregister.co.uk/2011/09/14/bios_rootkit_discouverte ) Aucune quantité de réinstallation du système d'exploitation vous réparera. Ce type d'attaque fonctionne en dehors du système d'exploitation et réussit à modifier les composants que l'OS fait généralement confiance implicitement.

1
zedman9991