Kysymys:
Mitä tapahtuu, kun DLL lisätään AppInit_DLL-tiedostoon
amccormack
2013-03-29 23:58:11 UTC
view on stackexchange narkive permalink

Minulla on haittaohjelmanäyte, joka lisää DLL-rekisteriavaimen HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ AppInit_DLLs . Rekisteriavaimen viittaamassa DLL: ssä on haittaohjelmia, mutta tämä haittaohjelmanäyte ei lataa tai soita DLL: ää, eikä sillä ole muuta haitallista käyttäytymistä.

Miksi haittaohjelma lisäisi DLL tähän rekisteriavaimeen ?

Kaksi vastused:
0xea
2013-03-30 00:06:52 UTC
view on stackexchange narkive permalink

Kaikki kyseisessä reg-avaimessa luetellut DLL-tiedostot ladataan, kun jokin prosessi käynnistetään. Lisätietoja on kohdassa Työskentely AppInit_DLLs-rekisteriarvon kanssa.

Kaikki tässä arvossa määritetyt DLL-tiedostot ladataan jokaisessa Microsoft Windows-pohjaisessa sovelluksessa, joka on käynnissä nykyinen kirjautumisistunto.

Niitä käyttää yleensä haitallinen koodi (joten sen ei tarvitse olla ilkeä) keinona DLL-injektoinnille esimerkiksi toimintojen kytkemiseen. Tarkemmin sanottuna , AppInit-DLL-tiedostot ladataan tosiasiallisesti vain prosesseista, jotka linkittävät käyttäjän user32.dll. , kuten Peter Ferrie huomauttaa, user32.dll lataa AppInit-DLL-tiedostot sen lataamisen jälkeen. Todellinen rekisteripolku eroaa käyttöjärjestelmän 64- ja 32-bittisissä versioissa.

Joten 32-bittisten järjestelmien 32-bittiselle DLL: lle polku on:

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

64-bittinen DLL 64-bittisessä järjestelmässä:

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

32-bittiselle DLL: lle 64-bittisessä järjestelmässä:

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

Useat merkinnät on erotettu välilyönnillä tai pilkulla, eikä DLL: n polku saa sisältää ilmeisiä syitä ilmeisistä syistä. Vistassa ja uudemmissa AppInit-DLL-tiedostojen on allekirjoitettuna, rekisteriarvoksi RequireSignedAppInit_DLLs voidaan asettaa 0, joka poistaa tämän vaatimuksen käytöstä.

On oikein sanoa, että user32.dll lataa AppInit_DLL dll: n, kun user32.dll itse ladataan, ja se voi tapahtua dynaamisesti (viive- tai manuaalinen lataus). Myös siellä voi olla useita rekisteröityjä DLL-tiedostoja.
AFAIK `RequireSignedAppInit_DLLs 'lisättiin Vista / Windows7: n ympärille, mutta se oli edelleen oletusarvoisesti pois päältä ja oletusarvoisesti käytössä vain Windows 10 -päivityksen kanssa.
En usko, että tämä toimii enää Windows 10: ssä.
Remko
2013-03-31 03:33:24 UTC
view on stackexchange narkive permalink

AppInit DLL: n toteutus Windows 7: ssä on seuraava:

Kohdassa user32.dll! ClientThreadSetup LoadAppInitDlls viedään kernel32.dll-tiedostosta kutsutaan muuhun prosessiin kuin LogonProcess.

kernel32.dll! LoadAppInitDlls tarkistaa LoadAppInit_DLLs -rekisteriavaimen ja jos se on asetettu, soittaa BasepLoadAppInitDlls (paitsi kun PEB: n offsetilla 3 on arvo 2).

BasepLoadAppInitDlls kutsuu LoadLibraryEx jokaiselle DLL-ryhmälle rekisterikoodissa AppInit_DLLs . Jos allekirjoitus vaaditaan (kun RequireSignedAppInit_DLLs -rekisteriarvo on asetettu), LOAD_LIBRARY_REQUIRE_SIGNED_TARGET -lippu välitetään LoadLibraryEx: lle.

Joten asettamalla tämä rekisteriavain, haittaohjelma dll ruiskutetaan kaikkiin prosesseihin, jotka aloitetaan tämän avaimen asettamisen jälkeen. Aikaisemmissa käyttöjärjestelmäversioissa AppInit-DLL-tiedostoja ei vaadittu muille kuin gui / konsoli -prosesseille, mutta ainakin Windows 7: ssä sitä kutsutaan myös muiksi kuin gui-prosesseiksi.



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...