Logige sisse Microsofti kontoga
Logige sisse või looge konto.
Tere!
Valige mõni muu konto.
Teil on mitu kontot
Valige konto, millega soovite sisse logida.

Windows Vista hoolduspaketi Service Pack 1 (SP1) tugi lõpeb 12 juuli 2011. Windowsi turvavärskenduste saamise jätkamiseks veenduge, et kasutate operatsioonisüsteemi Windows Vista koos hoolduspaketiga Service Pack 2 (SP2). Lisateavet leiate sellest Microsofti veebilehest: mõne Windowsi versiooni tugi hakkab lõppema.

Kui rakendus laadib dünaamiliselt lingi teegi (DLL) dünaamiliselt üle, täpsustamata täiesti sobivat teed, proovib Windows DLL-i üles leida, otsides täpselt määratletud kataloogidest. Kui ründaja saab ühe kataloogidest ülevaate, võivad nad sundida rakendust laadima DLL-i pahatahtliku koopia selle asemel, et seda oodata. Neid rünnakuid tuntakse kui "DLL eellaadimise rünnakud" ja need on ühised kõigi operatsioonisüsteemide jaoks, mis toetavad dünaamiliselt jagatud DLL-teekide laadimist. Selliste rünnakute mõju võib olla see, et ründaja saab koodi käivitada rakenduse kasutaja kontekstis. Kui rakendus käivitatakse administraatorina, võib see põhjustada kohaliku õiguse taseme tõstmist. Me teame, kuidas nende rünnakute eest uut huvi leida. Selle probleemi lahendamiseks meie vastastikustel klientidel saadame selle dokumendi arendajate kogukonnale, et nad teaksid, kas nad teavad sellest probleemist, ja neil on vajalikud tööriistad selle probleemi lahendamiseks oma rakendustes.

Kokkuvõte

DLL-i eellaadimise rünnakute kirjeldus

LoadLibrary-põhiseid rünnakuid

Kui rakendus laadib dünaamiliselt DLL-i, täpsustamata täiesti sobivat teed, proovib Windows leida selle DLL-i, otsides lineaarselt täpselt määratletud kataloogide kogumit, mida tuntakse DLL-i otsingu tellimusena. Kui Windows otsib dll-faili üles DLL-i otsingus, laaditakse see DLL üles. Kui aga Windows ei leia DLL-i dll-i otsingu järjestuses olevat DLL-i, tagastatakse DLL-i laadimise toiming. Järgmine on DLL-i LoadLibraryja LoadLibraryExfunktsioonid, mida kasutatakse dll-failide dünaamiliseks laadimiseks:

  1. Kataloog, kust rakendus laaditi

  2. Süsteemi kataloog

  3. 16-bitise süsteemi kataloog

  4. Windowsi kataloog

  5. Praegune töö kataloog (KURTUMUSE)

  6. TEE keskkonnamuutuja ' s loetletud kataloogid



Arvestage järgmise stsenaariumiga.


  • Rakendus laadib DLL-i välja, täpsustamata täiesti sobivat teed, mida ta ootab rakenduse KURTUMUSE.

  • Rakendus on täiesti valmis juhtumiga tegelema, kui see ei leia DLL-i.

  • Ründaja teab seda teavet rakenduse kohta ja kontrollib KURTUMUSE.

  • Ründaja kopeerib oma spetsiaalselt formuleeritud versiooni DLL-i KURTUMUSE. See eeldab, et ründajal on õigus seda teha.

  • Windows otsib DLL-otsingus olevad kataloogid läbi ja otsib rakenduse KURTUMUSE DLL-i.

Selle stsenaariumi korral töötab spetsiaalselt formuleeritud DLL rakenduse sees ja annab praeguse kasutaja õigused.

Soovitus selle

rünnaku vältimiseks võivad rakendused eemaldada dll-kurtumuse praeguse töö kataloogi (), kui helistate SetDllDirectory API-d kasutades tühja stringi (""). Kui rakendus sõltub praegusest kataloogist DLL-i laadimisest, Hankige praegune töökataloog ja kasutage seda LoadLibrarytäielikuks kvalifitseeritud tee.



Oleme teadlikud ka sellest, et mõned arendajad kasutavad LoadLibrary, et kontrollida, kas mõni konkreetne DLL on olemas, et määrata, millist Windowsi versiooni kasutaja kasutab. Peaksite teadma, et see võib rakenduse haavatavaks muuta. Kui mõjutatud teeki pole olemas Windowsi väljalaskes, kus rakendus on käivitatud, võib ründaja lisada sama nimega teegi KURTUMUSE. Soovitame tungivalt kasutada seda tehnikat. Selle asemel kasutage soovitatavaid meetodeid, mida on kirjeldatud MSDN-i artiklis, "süsteemi versiooni hankimine".

Rakendus, mis laadib kolmanda osapoole pluginaid ja kes ei saa sundida pluginaid kasutama oma LoadLibrary kõnede jaoks kvalifitseeritud teed, peaks helistama SetDllDirectory (""), et eemaldada KURTUMUSE ja seejärel helistada SetDllDirectory ("plugina installimise asukoht"), et lisada plugina installimise kataloogi DLL-i teel.

SearchPath-põhiseid rünnakuid

Sarnast rünnakut esineb siis, kui rakendus kasutab SearchPath API-d DLL-i leidmiseks ja SearchPathtagastatud tee dünaamiliseks laadimiseks. Järgmine on SearchPath API vaike-otsingu järjekord.

  • Kataloog, kust rakendus laaditi

  • Praegune töö kataloog (KURTUMUSE)

  • Süsteemi kataloog

  • 16-bitise süsteemi kataloog

  • Windowsi kataloog

  • TEE keskkonnamuutuja ' s loetletud kataloogid

Me ei soovita seda mustrit, sest see pole turvaline. Me ei soovita SearchPath. dll-faili leidmise meetodil, kui väljundi kavandatav kasutus on kõnes funktsiooni LoadLibrary. See võib põhjustada vale dll-failide leidmist, kuna funktsiooni SearchPath otsinguväli erineb funktsiooni LoadLibrary kasutatavast otsingust. Kui peate üles leidma ja laadima dll-faili, kasutage funktsiooni LoadLibrary.

ShellExecute ja CreateProcess


Nende probleemide variatsioonid võivad olla ka siis, kui arendajad helistavad sarnaste funktsioonide (nt ShellExecuteja CreateProcess) väliste Täitmisfailide laadimiseks. Soovitame arendajatel olla ettevaatlik, kui nad laadivad kahendfaile ja määravad täielikult kvalifitseeritud tee. See peaks kujutama endast vähem keerukust, kui laadite teegi asemel binaarse.

Soovitatavad juhised tarkvaraarendajatele

Soovitame arendajatel teha järgmist.

  • Veenduge, et nende rakendused ei töötaks ebaturvaliste teekide laadide korral (iga selle artikli näited on esitatud allpool). Need hõlmavad järgmist.

    • SearchPath kasutamine teegi või komponendi asukoha tuvastamiseks.

    • LoadLibrary kasutamine operatsioonisüsteemi versiooni tuvastamiseks.

  • Kõigi kõnede korral saate kasutada LoadLibrary, CreateProcess ja ShellExecute.

  • Rakendage kõned SetDllDirectory tühja stringiga (""), et eemaldada praegune töökataloog vaikimisi DLL-i otsingu tellimusest, kui see on nõutav. Pange tähele, et SetDllDirectory mõjutab kogu protsessi. Seetõttu peaksite seda tegema protsessi lähtestamise ajal, mitte enne ja pärast kõnesid LoadLibrary. Kuna SetDllDirectory mõjutab kogu protsessi, võib mitu eri väärtusega SetDllDirectory, mis võivad põhjustada määratlemata käitumist. Lisaks, kui protsess on mõeldud kolmanda osapoole DLL-i laadimiseks, on vaja testida, kas kogu protsessi hõlmava seadistuse tegemisel on vastuolud. Teadaolev probleem on see, et kui rakendus sõltub rakenduse Visual põhirakenduse rakendustest, võib kogu protsessi hõlmava sätte korral tekkida vastuolu.

  • Kasutage funktsiooni SetSearchPathMode, et lubada protsessi jaoks turvalise protsessi otsingu režiim. Selle toimingu käigus teisaldatakse praegune töökataloog viimasele kohale SearchPath otsingute loendis.

  • Vältige SearchPath kasutamist, et kontrollida DLL-i olemasolu, täpsustamata täiesti sobivat teed, isegi kui ohutu otsingu režiim on lubatud, sest see võib endiselt viia DLL-i eellaadimise rünnakute.

Juhised ebaturvaliste teegis olevate raskuste tuvastamiseks

Allika koodis on järgmised näited ebaturvaliste teegi laadide kohta.

  • Järgmise koodi näites otsib rakendus "schannel.dll" vähemalt turvaliste otsingute abil. Kui ründaja saab paigutada schannel.dll KURTUMUSE, laaditakse see ka enne, kui rakendus otsib Windowsi kataloogidest vastava teegi jaoks.

    DWORD retval = SearchPath(NULL, "schannel", ".dll", err, result, NULL); 
    HMODULE handle = LoadLibrary(result);
  • Järgmises näites püüab rakendus laadida teegist välja mitmesuguste rakenduse ja opsüsteemide asukohtadest, mida on kirjeldatud selle dokumendi LoadLibrary () kõne alguses. Kui esineb oht, et faili ei ole olemas, võib rakendus proovida laadida faili praegusest töökataloogist. See stsenaarium on veidi vähem ohtlik kui eelmine näide. Siiski seab rakenduse kasutaja ohtu, kui keskkond pole täielikult prognoositav.

    HMODULE handle = LoadLibrary("schannel.dll");




Järgnevalt on toodud näited paremate turvalisema teegi laadide kohta.

  • Järgmises näites laaditakse teeki otse, kasutades selleks täiesti kvalifitseeritud teed. Ründajal pole pahatahtlikku koodi, välja arvatud juhul, kui tal on rakenduse sihtüksuse kataloogis juba õigus kirjutada.

    HMODULE handle = LoadLibrary("c:\\windows\\system32\\schannel.dll");



    Lisateavet süsteemi kataloogi määramise kohta leiate järgmistest allikatest:

    GetSystemDirectory

    http://msdn.microsoft.com/en-us/library/ms724373%28VS.85%29.aspxSHGetKnownFolderPath

    http://msdn.microsoft.com/en-us/library/bb762188%28v=VS.85%29.aspx

  • Järgmises näites eemaldatakse praegusest töökataloogist otsingu tee enne LoadLibrary kõnet. See vähendab oluliselt riski, sest ründajal peab olema kas rakenduse kataloog, Windowsi kataloog või mis tahes kataloogid, mis on määratud kasutaja Tees, et kasutada DLL-i eellaadimise rünnakut.

    SetDllDirectory ("");
    HMODULE handle = LoadLibrary("schannel.dll");
  • Kõigis süsteemides, kus on installitud turvavärskenduse 963027 (kirjeldatud rakenduses MS09-014), liigub järgmine kood kurtumuse jäädavalt viimasele kohale. Mis tahes hilisemad kõned SetSearchPathMode funktsiooni sees, mis proovivad muuta otsingu režiimi, ei õnnestu.

    SetDllDirectory ("");
    HMODULE handle = LoadLibrary("schannel.dll");
  • Järgmises näites eemaldatakse praegusest töökataloogist otsingu tee enne LoadLibrary kõnet. See vähendab oluliselt riski, sest ründajal peab olema kas rakenduse kataloog, Windowsi kataloog või mis tahes kataloogid, mis on määratud kasutaja Tees, et kasutada DLL-i eellaadimise rünnakut.

    SetSearchPathMode (BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE | BASE_SEARCH_PATH_PERMANENT );
    HMODULE handle = LoadLibrary("schannel.dll");

Protsessi monitori kasutamine dünaamiliselt ebaturvaliste raskuste tuvastamiseks

Microsoft avaldab tööriista nimega Process Monitor. See tööriist võimaldab arendajatel ja administraatoritel jälgida töötava protsessi käitumist. Protsessi monitori abil saab dünaamiliselt tuvastada, kas mõni rakendus võib olla selle laadi probleemile tundlik.

  • Protsessi jälgimise allalaadimiseks külastage järgmist Microsofti veebilehte:

    http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

  • Proovige rakendust käivitada, kasutades KURTUMUSE, mis on määratud konkreetsele kaustale. Näiteks topeltklõpsake faili, mis sisaldab laiendit, mille jaoks on teie rakenduse jaoks määratud faili ohjur.

  • Seadistage protsessi Monitor järgmiste filtritega:



    Alternatiivne tekst

  • Kui haavatav tee on tabanud, kuvatakse midagi sarnast, mis sarnaneb järgmisega: Alternatiivne tekstfaili ühiskasutusse andmiseks on vaja,

    et see on tundlik programm.

Lisateave

Lisateabe saamiseks külastage järgmisi Microsofti veebilehti:

dünaamilise lingi teegi otsingu järjekord

http://MSDN.microsoft.com/en-us/Library/ms682586 (VS. 85). aspxMSDN-i dokumentatsioon funktsioonis SearchPath

http://MSDN.microsoft.com/en-us/Library/aa365527 (VS. 85). aspxMSDN-i dokumentatsioon funktsioonis LoadLibrary

http://MSDN.microsoft.com/en-us/Library/ms684175 (VS. 85). aspxMSDN-i dokumentatsioon funktsioonis SetDllDirectory

http://MSDN.microsoft.com/en-us/Library/ms686203 (VS. 85). aspxMSDN-i dokumentatsioon funktsioonis SetSearchPathMode

http://MSDN.microsoft.com/en-us/Library/dd266735 (VS. 85). aspxBlogi postitus David LeBlanc, peamine Microsoft Office ' i turvalisuse insener

http://blogs.msdn.com/b/david_leblanc/archive/2008/02/20/dll-preloading-attacks.aspxBlog Post by Andrew Roths, MSRC Engineering Team DLL eellaadimise rünnakud

http://blogs.technet.com/b/srd/archive/2009/04/14/ms09-014-addressing-the-safari-carpet-bomb-vulnerability.aspx

Lisaressursid

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.

Kogukonnad aitavad teil küsimusi esitada ja neile vastuseid saada, anda tagasisidet ja saada nõu rikkalike teadmistega asjatundjatelt.

Kas sellest teabest oli abi?

Kui rahul te keelekvaliteediga olete?
Mis mõjutas teie hinnangut?
Kui klõpsate nuppu Edasta, kasutatakse teie tagasisidet Microsofti toodete ja teenuste täiustamiseks. IT-administraator saab neid andmeid koguda. Privaatsusavaldus.

Täname tagasiside eest!

×