Domanda:
Cosa succede quando una DLL viene aggiunta a AppInit_DLL
amccormack
2013-03-29 23:58:11 UTC
view on stackexchange narkive permalink

Ho un esempio di malware che aggiunge una DLL alla chiave di registro HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs . Sono presenti funzionalità dannose nella DLL a cui fa riferimento la chiave di registro, ma questo esempio di malware non carica o chiama la DLL, né presenta altri comportamenti dannosi.

Perché il malware dovrebbe aggiungere una DLL a questa chiave di registro ?

Due risposte:
#1
+8
0xea
2013-03-30 00:06:52 UTC
view on stackexchange narkive permalink

Fondamentalmente, tutte le DLL elencate in quella chiave di registro vengono caricate all'avvio di qualsiasi processo. Per ulteriori informazioni, vedere Utilizzo del valore di registro AppInit_DLLs.

Tutte le DLL specificate in questo valore vengono caricate da ciascuna applicazione basata su Microsoft Windows in esecuzione in la sessione di accesso corrente.

Di solito vengono utilizzati da codice dannoso (anche se non deve essere dannoso) come metodo di iniezione di DLL, ad esempio per agganciare funzioni. Per essere più precisi , le DLL AppInit vengono effettivamente caricate solo dai processi che collegano user32.dll. , come sottolinea peter ferrie, le DLL AppInit vengono caricate da user32.dll dopo che è stato caricato. Il percorso effettivo del registro è diverso tra la versione del sistema operativo a 64 bit e quella a 32 bit.

Quindi per DLL a 32 bit su sistemi a 32 bit il percorso è:

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

Per DLL a 64 bit su sistemi a 64 bit:

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

Per DLL a 32 bit su sistema a 64 bit:

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

Più voci sono divise con spazio o virgola e il percorso della DLL non deve contenere spazi per ovvi motivi. In Vista e versioni successive, le DLL AppInit devono essere firmato, anche se il valore di registro RequireSignedAppInit_DLLs può essere impostato su 0, il che disabilita questo requisito.

È più corretto affermare che la dll AppInit_DLL viene caricata da user32.dll quando viene caricato lo stesso user32.dll, e ciò può avvenire dinamicamente (caricamento ritardato o caricamento manuale). Ci può essere anche più di una DLL registrata.
Per quanto ne so `RequireSignedAppInit_DLLs` è stato aggiunto in Vista / Windows7 ma era ancora disattivato per impostazione predefinita e attivato solo per impostazione predefinita con un aggiornamento di Windows 10.
Non penso che funzioni più su Windows 10.
#2
+8
Remko
2013-03-31 03:33:24 UTC
view on stackexchange narkive permalink

L'implementazione di AppInit DLL in Windows 7 è la seguente:

In user32.dll! ClientThreadSetup l'esportazione di LoadAppInitDlls da kernel32.dll è viene chiamato per qualsiasi processo eccetto LogonProcess.

kernel32.dll! LoadAppInitDlls controlla la chiave di registro LoadAppInit_DLLs e, se impostato, chiama BasepLoadAppInitDlls (tranne quando l'offset 3 del PEB ha valore 2).

BasepLoadAppInitDlls chiama LoadLibraryEx per ogni set di DLL nella chiave di registro AppInit_DLLs . Se è richiesta la firma (quando il valore di registro RequireSignedAppInit_DLLs è impostato) il flag LOAD_LIBRARY_REQUIRE_SIGNED_TARGET viene passato a LoadLibraryEx.

Quindi, impostando questa chiave di registro, il Il dll di malware verrà inserito in ogni processo avviato dopo aver impostato questa chiave. Nelle versioni precedenti del sistema operativo le DLL di AppInit non erano chiamate per processi non gui / console ma almeno su Windows 7 sono chiamate anche per processi non gui.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...