web-dev-qa-db-fra.com

Façons d'injecter des dlls malveillantes vers un fichier exe et de l'exécuter

J'essaie de trouver toutes les vulnérabilités dans mon système donné.

Supposons qu'un utilisateur malveillant a l'exécutable (.exe fichier) de mon application .NET (C #) et un malveillant DLL il ou elle a créé. Peut-on le DLL être injecté dans mon exécutable à exécuter Code contenu dans la DLL?

5
Mr. Question

Le article Wikipedia concernant l'injection DLL a bien fait un résumé de différentes techniques.

Résumer:

  • Vous pouvez répertorier une DLL sous HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs et il sera chargé dans chaque processus (nouveau) qui relie User32.dll (c'est-à-dire à peu près tous les processus en mode utilisateur)
  • Exploitation d'une faiblesse dans une fonction qui charge une bibliothèque par voie de trajectoire incorrecte (typiquement, placer une DLL chargée par le processus cible plus élevé dans le chemin de recherche) ou simplement remplacer une bibliothèque existante par vous-même.
  • VIA Createremotethread ou Createremotethreadex . Ceci est un peu plus complexe (et intéressant) mais vous permet de le faire pour les processus existants.
  • Via Setwindowshookex . C'est le moyen le plus simple de le faire pour un processus de course à pied imnsho.
  • Suspension d'un fil et commutation de son contexte à votre propre code.
  • Écrire A Shim .
4
Stephane

Oui, il y a plusieurs possibilités de faire cela et une très grande partie des attaques repose sur DLL accrochaing.

Et c'est aussi la cause, pourquoi les versions Windows plus récentes et les plus récentes contiennent des politiques normalement plus strictes et plus strictes sur la manipulation DLL.

L'objectif principal est de construire un faux DLL, qui n'envoie que certaines des appels d'API dans sa DLL d'origine et fait également une autre chose. L'objectif de l'attaquant est dans ce cas de laisser charger la fausse DLL par l'application à craquer, contre sa version originale.

L'alternative à cette solution est que lorsque la DLL d'origine obtient un type de hack binaire. C'est plus difficile.

Le fonctionnement interne de la DLL accrochée est ce qui suit:

  • à OUVERT: Il s'ouvre également la DLL d'origine, non modifiée avec un appel dllopen() Appelez et trouve l'adresse des appels de l'API également.
  • il contient également la fausse version des appels d'API accrochés

Comment pouvez-vous injecter la DLL accrochée dans l'application?

La solution la plus courante consiste uniquement à mettre cela dans le même répertoire où l'EXE à accrocher une vie. Sur le point de départ d'un exécutable, Windows recherche ses DLL toujours dans le même répertoire d'abord. C'est ce qui se fait par la plupart des fissures de protection/activation de copie logicielles.

Une deuxième possibilité est de mettre la dll enveloppe quelque part sur le chemin, mais pourtant avant C:\windows\.... Les DLL sont recherchées dans le chemin, comme les exécutables également.

Une troisième possibilité est d'utiliser un débogueur ou l'API Windows initialement destiné au débogage. Avec cela, vous pouvez manipuler le code d'ouverture DLL de l'exe exécutant. C'est aussi dur aussi bien, bien que cela soit aussi vraiment utile.