Question:
Que se passe-t-il lorsqu'une DLL est ajoutée à AppInit_DLL
amccormack
2013-03-29 23:58:11 UTC
view on stackexchange narkive permalink

J'ai un exemple de logiciel malveillant qui ajoute une DLL à la clé de registre HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs . Il existe une fonctionnalité malveillante dans la DLL référencée par la clé de registre, mais cet exemple de logiciel malveillant ne charge ni n'appelle la DLL, et ne présente aucun autre comportement malveillant.

Pourquoi un logiciel malveillant ajouterait-il une DLL à cette clé de registre ?

Deux réponses:
#1
+8
0xea
2013-03-30 00:06:52 UTC
view on stackexchange narkive permalink

Fondamentalement, toutes les DLL répertoriées dans cette clé de registre sont chargées lorsqu'un processus est lancé. Pour plus d'informations, reportez-vous à Utilisation de la valeur de registre AppInit_DLLs.

Toutes les DLL spécifiées dans cette valeur sont chargées par chaque application Microsoft Windows exécutée dans la session de connexion en cours.

Ils sont généralement utilisés par du code malveillant (bien qu'il ne soit pas obligatoire) comme moyen d'injection de DLL, pour accrocher des fonctions par exemple. Pour être plus précis , les DLL AppInit sont en fait chargées uniquement par les processus qui lient user32.dll. , comme le souligne Peter Ferrie, les DLL AppInit sont chargées par user32.dll après son chargement. Le chemin de registre réel diffère entre les versions 64 bits et 32 ​​bits du système d'exploitation.

Donc, pour les DLL 32 bits sur les systèmes 32 bits, le chemin est:

  [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs] 

Pour une DLL 64 bits sur un système 64 bits:

  [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs]  

Pour une DLL 32 bits sur un système 64 bits:

  [HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs] 

Les entrées multiples sont séparées par un espace ou une virgule, et le chemin d'accès à la DLL ne doit pas contenir d'espaces pour des raisons évidentes.Sur Vista et versions ultérieures, les DLL AppInit doivent être signé, la valeur de registre RequireSignedAppInit_DLLs peut être définie sur 0, ce qui désactive cette exigence.

Il est plus correct de dire que la dll AppInit_DLL est chargée par user32.dll lorsque user32.dll lui-même est chargé, et que cela peut se produire de manière dynamique (chargement différé ou chargement manuel) .Il peut également y avoir plus d'une DLL enregistrée.
AFAIK `RequireSignedAppInit_DLLs` a été ajouté autour de Vista / Windows7 mais était toujours désactivé par défaut, et uniquement activé par défaut avec une mise à jour Windows 10.
Je ne pense plus que cela fonctionne sous Windows 10.
#2
+8
Remko
2013-03-31 03:33:24 UTC
view on stackexchange narkive permalink

La mise en œuvre de la DLL AppInit dans Windows 7 est la suivante:

Dans user32.dll! ClientThreadSetup , l'exportation LoadAppInitDlls de kernel32.dll est étant appelé pour tout processus à l'exception de LogonProcess.

kernel32.dll! LoadAppInitDlls vérifie la clé de registre LoadAppInit_DLLs et si elle est définie appelle BasepLoadAppInitDlls (sauf lorsque l'offset 3 du PEB a la valeur 2).

BasepLoadAppInitDlls appelle LoadLibraryEx pour chaque ensemble de DLL dans la clé de registre AppInit_DLLs . Si la signature est requise (lorsque la valeur de registre RequireSignedAppInit_DLLs est définie), l'indicateur LOAD_LIBRARY_REQUIRE_SIGNED_TARGET est passé à LoadLibraryEx.

Ainsi, en définissant cette clé de registre, le malware dll sera injecté dans chaque processus démarré après avoir défini cette clé. Sur les versions précédentes du système d'exploitation, les DLL AppInit n'étaient pas appelées pour les processus non gui / console, mais au moins sur Windows 7, elles sont également appelées pour les processus non gui.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...