Frage:
Was passiert, wenn eine DLL zu AppInit_DLL hinzugefügt wird?
amccormack
2013-03-29 23:58:11 UTC
view on stackexchange narkive permalink

Ich habe ein Malware-Beispiel, das dem Registrierungsschlüssel eine DLL hinzufügt. HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs . Die DLL, auf die der Registrierungsschlüssel verweist, enthält schädliche Funktionen, aber dieses Malware-Beispiel lädt oder ruft die DLL nicht auf und zeigt auch kein anderes böswilliges Verhalten.

Warum sollte Malware diesem Registrierungsschlüssel eine DLL hinzufügen? ?

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

Grundsätzlich werden alle in diesem Registrierungsschlüssel aufgeführten DLLs geladen, wenn ein Prozess gestartet wird. Weitere Informationen finden Sie unter Arbeiten mit dem Registrierungswert AppInit_DLLs.

Alle in diesem Wert angegebenen DLLs werden von jeder Microsoft Windows-basierten Anwendung geladen, die ausgeführt wird Die aktuelle Anmeldesitzung.

Sie werden normalerweise von bösartigem Code (obwohl er nicht böswillig sein muss) als Methode zur DLL-Injektion verwendet, um beispielsweise Funktionen zu verknüpfen. Genauer gesagt, werden AppInit-DLLs tatsächlich nur von den Prozessen geladen, die user32.dll verknüpfen. Strike> Wie Peter Ferrie hervorhebt, werden AppInit-DLLs von user32.dll nach dem Laden geladen. Der tatsächliche Registrierungspfad unterscheidet sich zwischen der 64-Bit- und der 32-Bit-Version des Betriebssystems.

Für 32-Bit-DLLs auf 32-Bit-Systemen lautet der Pfad also:

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

Für 64-Bit-DLLs auf 64-Bit-Systemen:

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

Für 32-Bit-DLLs auf 64-Bit-Systemen:

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

Mehrere Einträge werden mit Leerzeichen oder Komma geteilt, und der Pfad zur DLL darf aus offensichtlichen Gründen keine Leerzeichen enthalten. Unter Vista und höher müssen die AppInit-DLLs signiert werden, kann der Registrierungswert RequireSignedAppInit_DLLs auf 0 gesetzt werden, wodurch diese Anforderung deaktiviert wird.

Es ist richtiger zu sagen, dass die AppInit_DLL-DLL von user32.dll geladen wird, wenn user32.dll selbst geladen wird, und dies kann dynamisch geschehen (verzögertes Laden oder manuelles Laden). Es kann auch mehr als eine registrierte DLL geben.
AFAIK `RequireSignedAppInit_DLLs` wurde um Vista / Windows7 hinzugefügt, war aber standardmäßig immer noch deaktiviert und nur standardmäßig mit einem Windows 10-Update aktiviert.
Ich glaube nicht, dass dies unter Windows 10 funktioniert.
#2
+8
Remko
2013-03-31 03:33:24 UTC
view on stackexchange narkive permalink

Die Implementierung der AppInit-DLL in Windows 7 lautet wie folgt:

In user32.dll! ClientThreadSetup lautet der Export von LoadAppInitDlls aus kernel32.dll Wird für jeden Prozess außer dem LogonProcess aufgerufen.

kernel32.dll! LoadAppInitDlls überprüft den Registrierungsschlüssel LoadAppInit_DLLs und ruft beim Aufrufen BasepLoadAppInitDlls auf Code> (außer wenn Offset 3 des PEB den Wert 2 hat).

BasepLoadAppInitDlls ruft LoadLibraryEx für jeden DLL-Satz auf im Registrierungsschlüssel AppInit_DLLs . Wenn eine Signatur erforderlich ist (wenn der Registrierungswert RequireSignedAppInit_DLLs festgelegt ist), wird das Flag LOAD_LIBRARY_REQUIRE_SIGNED_TARGET an LoadLibraryEx übergeben.

Durch Setzen dieses Registrierungsschlüssels wird der Malware-DLL wird in jeden Prozess eingefügt, der nach dem Setzen dieses Schlüssels gestartet wird. In früheren Betriebssystemversionen wurden AppInit-DLLs nicht für Nicht-GUI / Konsolen-Prozesse aufgerufen, aber zumindest unter Windows 7 werden sie auch für Nicht-GUI-Prozesse aufgerufen.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...