Prijavite se pomoću Microsoft naloga
Prijavite se ili kreirajte nalog.
Zdravo,
Izaberite drugi nalog.
Imate više naloga
Odaberite nalog pomoću kojeg želite da se prijavite.

Podrška za Windows Vista servisni paket 1 (SP1) završava se 2011 12. Da biste nastavili da primate bezbednosne ispravke za Windows, uverite se da koristite Windows Vista sa servisnim paketom 2 (SP2). Za više informacija pogledajte ovu Microsoft Veb stranicu: podrška se završava za neke verzije operativnog sistema Windows.

Kada aplikacija dinamički učita dinamičku biblioteku veze (DLL) bez preciziranja potpuno kvalifikovane putanje, Windows pokušava da pronađe DLL pomoću dobro definisanog skupa direktorijuma. Ako napadač dobije kontrolu nad jednim od direktorijuma, može da nametne aplikaciju tako da učita zlonamernu kopiju DLL-a umesto DLL-a koju je očekivala. Ovi napadi su poznati kao "DLL pretpunive napade" i najčešći su svi operativni sistemi koji podržavaju dinamičko učitavanje deljenih DLL biblioteka. Efekti takvih napada mogu da budu da napadač može da izvrši kôd u kontekstu korisnika koji pokreće aplikaciju. Kada se aplikacija pokrene kao administrator, to može dovesti do lokalnog ponošenja privilegija. Znamo da je obnovljeno interesovanje za ove napade. Da biste ograničili efekat koji ovaj problem sadrži na naše zajedničke klijente, objavljućemo ovaj dokument zajednici programera da bismo se uverili da oni znaju za ovaj problem i da imaju neophodne alatke za rešavanje problema u njihovim aplikacijama.

Ukupne

Opis prepunive DLL-ova

Napadi zasnovani na sistemu

Kada aplikacija dinamički učita DLL bez navođenja potpuno kvalifikovane putanje, Windows pokušava da pronađe ovaj DLL pomoću linka linijeg pretraživanja kroz dobro definisani komplet direktorijuma, poznat kao DLL redosled pretrage. Ako Windows pronađe DLL u okviru DLL naloga za pretraživanje, on će učitati tu DLL datoteku. Međutim, ako Windows ne pronađe DLL u bilo kom direktorijumu u DLL redosledu pretrage, on će vratiti neuspeh u operaciji "DLL". Sledi DLL redosled pretrage za funkcije loadbibliotekarkei Loadbibliotekararyex, koje se koriste za dinamičko učitavanje DLL-ova:

  1. Direktorijum iz kog je aplikacija učitana

  2. Sistemski direktorijum

  3. 16-bitni sistemski direktorijum

  4. Windows direktorijum

  5. Trenutni radni direktorijum (CWD)

  6. Direktorijumi koji su navedeni u promenljivoj okruženja PUTANJE



Razmotrite sledeći scenario:


  • Aplikacija učitava DLL datoteku bez navođenja potpuno ugrađene putanje koju očekuje u CWD aplikaciji.

  • Aplikacija je potpuno pripremljena za rukovanje slučajem kada ne pronađe DLL.

  • Napadač zna ove informacije o aplikaciji i kontroliše CWD.

  • Napadač kopira sopstvenu posebno izratu verziju DLL-a u CWD. To pretpostavlja da napadač ima dozvolu za to.

  • Windows pretražuje direktorijume u DLL porudžbini za pretraživanje i pronalazi DLL u CWD aplikaciji.

U ovom scenariju, posebno napravljen DLL se pokreće unutar aplikacije i dobija privilegije trenutnog korisnika.

Preporuka

da se spreči ovaj napad, aplikacije mogu da uklone trenutni radni direktorijum (cwd) iz DLL putanje pretrage tako što će pozvati Kudlldirectory API pomoću prazne niske (""). Ako aplikacija zavisi od učitavanja DLL-a iz trenutnog direktorijuma, nabavite trenutni radni direktorijum i koristite ga da biste prosledii u potpuno kvalifikovanu putanju učitavanja biblioteke.



Takođe smo svesni da neki programeri koriste LoadLibrary da bi proverili da li je određen DLL prisutan kako bi odredio koju verziju operativnog sistema Windows pokreće korisnik. Trebalo bi da znate da to može da učini aplikaciju ranjivom. Ako ta biblioteka zaista ne postoji u operativnom sistemu Windows izdanje na koje je aplikacija izvršena, napadač može da uvede biblioteku sa istim imenom u CWD. Preporučujemo da ne koristite ovu tehniku. Umesto toga, koristite preporučene tehnike koje su opisane u MSDN članku, "Preuzimanje verzije sistema"

. Aplikacija koja učitava dodatne komponente nezavisnih proizvođača i koje ne mogu da nametnu dodatne komponente za korišćenje kvalifikovane putanje za otpremanje poziva treba da pozovu SetDllDirectory ("") da ukloni CWD i nazove SetDllDirectory ("lokacija za dodatnu instalaciju") da biste dodali programski dodatak za instalaciju aplikacije DLL-u.

Napadi zasnovani na putanjom

Sličan napad postoji kada aplikacija koristi API za Pretraživaza pronalaženje DLL-a i dinamički učita putanju koju vraća search. Sledi podrazumevani redosled pretrage za API za SearchPath:

  • Direktorijum iz kog je aplikacija učitana

  • Trenutni radni direktorijum (CWD)

  • Sistemski direktorijum

  • 16-bitni sistemski direktorijum

  • Windows direktorijum

  • Direktorijumi koji su navedeni u promenljivoj okruženja PUTANJE

Ovaj obrazac ne preporučuje se zato što nije bezbedan. Funkcija SearchPath ne preporučuje se kao metod pronalaženja. dll datoteke ako je namenjena upotreba izlaza u programu Call for funkcija. Ovo može da dovede do pronalaženja pogrešne. dll datoteke zato što se redosled pretrage funkcije SearchPath razlikuje od redosleda za pretragu koju koristi funkcija LoadLibrary. Ako morate da pronađete i učitate. DLL datoteku, koristite funkciju Load library.

Љellexeslatkih i CreateProcess


Varijante ovih problema takođe mogu da postoje kada programeri pozivaju slične funkcije kao što su Shellex Eslatkihi createprocessza učitavanje spoljnih izvršnih izvršnih tabela. Preporučujemo da razvojni timovi budu oprezni prilikom učitavanja binovna i naveli potpuno kvalifikovanu putanju. To bi trebalo da predstavlja manje složenost kada učitate binarnu datoteku umesto biblioteke.

Preporučuje se korake za programere softvera

Preporučujemo da programeri rade sledeće:

  • Verifikujete njihove aplikacije za instance nepotrebne biblioteke (primeri svakog se dobijaju kasnije u ovom članku). Sledeće:

    • Korišćenje lokacije Search za identifikovanje lokacije biblioteke ili komponente.

    • Korišćenje radne biblioteke za identifikovanje verzije operativnog sistema.

  • Koristite potpuno kvalifikovane putanje za sve pozive na Učitavanje biblioteke, CreateProcess i Shellekeslatke gde možete.

  • Primena poziva u Sedlldirectory sa praznom niskom ("") da biste uklonili trenutni radni direktorijum iz podrazumevane DLL porudžbine za pretragu gde je to potrebno. Imajte u vidu da Sedlldirectory utiče na ceo proces. Zato to treba da uradite jednom ranije u pokretanju procesa, ne pre i posle poziva u Učitavanje biblioteke. Budući da funkcija Sedlldirectory utiče na ceo proces, više grešaka koje pozivaju Sedlldirectory sa različitim vrednostima mogu uzrokovati nedefinisano ponašanje. Pored toga, ako je proces osmišljen tako da učita DLL-ove nezavisnog proizvođača, testiranje će biti potrebno da biste utvrdili da li će podešavanje cele procese uzrokovati nekompatibilnost. Poznati problem je to što kada aplikacija zavisi od programa Visual Basic for Applications, postavka sa sirom procesa može dovesti do nekompatibilnosti.

  • Koristite funkciju Setsearchpathrežim da biste omogućili pristupačnijerežim pretrage procesa. To premešta trenutni radni direktorijum na poslednje mesto na listi pretraga putanje za trajanje procesa.

  • Izbegavajte korišćenje pretrage da biste provjerili postojanje DLL-a bez navođenja potpuno kvalifikovane putanje, čak i ako je režim sigurne pretrage omogućen, zato što to i dalje može da dovede do Prepunive datoteke.

Uputstva za identifikovanje nebezbedne biblioteke

U izvornom kodu, slede primeri nebezbedne biblioteke:

  • U sledećem kodu primer, aplikacija traži "schannel.dll" pomoću najmanje bezbedne putanje pretrage. Ako napadač može da stavi schannel.dll u CWD, učitaće se čak i pre nego što aplikacija pretražuje Windows direktorijume za odgovarajuću biblioteku.

    DWORD retval = SearchPath(NULL, "schannel", ".dll", err, result, NULL); 
    HMODULE handle = LoadLibrary(result);
  • U sledećem primeru koda aplikacija pokušava da učita biblioteku iz različitih lokacija aplikacije i operativnih sistema opisane na početku ovog dokumenta za poziv za učitavanje biblioteke (). Ako postoji rizik da datoteka nije prisutan, aplikacija može pokušati da učita datoteku iz trenutnog radnog direktorijuma. Ovaj scenario je malo manje opasan od prethodnog primera. Međutim, korisnik aplikacije i dalje uvodi korisnika u rizik ako okruženje nije potpuno predvidljivo.

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




Slede primeri boljeg, bezbednijeg biblioteke:

  • U sledećem primeru koda, biblioteka se direktno učitava pomoću potpune kvalifikovane putanje. Ne postoji opasnost da napadač uvede zlonamerni kôd, osim ako već nema dozvole za pisanje u odredišni direktorijum aplikacije.

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



    Napomena za informacije o tome kako da utvrdite sistemski direktorijum pogledajte sledeće resurse:

    getsystemdirectory

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

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

  • U sledećem primeru koda, trenutni radni direktorijum se uklanja sa putanje pretraživanja pre pozivanja biblioteke za učitavanje. To značajno smanjuje rizik, jer bi napadač morao da kontroliše direktorijum aplikacije, Windows direktorijum ili bilo koji direktorijumi koji su navedeni na putanji korisnika da bi koristili DLL-ove koji se preopterećuju.

    SetDllDirectory ("");
    HMODULE handle = LoadLibrary("schannel.dll");
  • Na svim sistemima koji su instalirali bezbednosnu ispravku 963027 (opisano u MS09-014), sledeći kôd će trajno premestiti cwd na poslednje mesto u redosledu pretrage. Bilo koji kasniji pozivi na funkciju Setsearchpathrežim iz unutrašnjosti procesa koji pokuša da promeni režim pretrage neće uspeti.

    SetDllDirectory ("");
    HMODULE handle = LoadLibrary("schannel.dll");
  • U sledećem primeru koda, trenutni radni direktorijum se uklanja sa putanje pretraživanja pre pozivanja biblioteke za učitavanje. To značajno smanjuje rizik, jer bi napadač morao da kontroliše direktorijum aplikacije, Windows direktorijum ili bilo koji direktorijumi koji su navedeni na putanji korisnika da bi koristili DLL-ove koji se preopterećuju.

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

Korišćenje monitora procesa za dinamičko otkrivanje nebezbednih opterećenja

Microsoft objavljuje alatku koja se zove monitor procesa. Ova alatka omogućava programerima i administratorima da pažljivo prate ponašanje pokrenutog procesa. Nadgledanje procesa može se koristiti za dinamičko otkrivanje toga da li je neka od aplikacija podložna ovoj vrsti problema.

  • Da biste preuzeli monitor procesa, posetite sledeću Microsoft Veb stranicu:

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

  • Pokušajte da pokrenete aplikaciju tako što ćete koristiti CWD komplet na određeni direktorijum. Na primer, kliknite dvaput na datoteku koja ima oznaku čiji je rukovalac datotekom dodeljen aplikaciji.

  • Podešavanje monitora procesa pomoću sledećih filtera:



    alternativni tekst

  • Ako se izvrši ranjiva putanja, videćete nešto što je slično sledećem: alternativni tekst

    pozivu u deljenje udaljene datoteke da bi se UČITALA DLL ukazuje na to da je ovo ranjiv program.

Više informacija

Više informacija potražite u sledećim Microsoft Veb stranicama:

redosled pretrage biblioteke dinamičkih karika

http://msdn.Microsoft.com/en-US/library/ms682586 (VS. 85). aspxMSDN dokumentacija u funkciji SearchPath

http://msdn.Microsoft.com/en-US/library/aa365527 (VS. 85). aspxMSDN dokumentacija u funkciji "otpremanje biblioteke"

http://msdn.Microsoft.com/en-US/library/ms684175 (VS. 85). aspxMSDN dokumentacija u funkciji SetDllDirectory

http://msdn.Microsoft.com/en-US/library/ms686203 (VS. 85). aspxMSDN dokumentacija na funkciji Setsearchpathrežim

http://msdn.Microsoft.com/en-US/library/dd266735 (VS. 85). aspxObjava na blogu od Davida Leblanka, glavnog bezbednosnog inženjera sa sistemom Microsoft Office

http://blogs.msdn.com/b/david_leblanc/archive/2008/02/20/dll-preloading-attacks.aspxObjava na blogu od Andrew Roita, MSRC inženjerskog tima u DLL-u

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

Dodatni resursi

Da li vam je potrebna dodatna pomoć?

Želite još opcija?

Istražite pogodnosti pretplate, pregledajte kurseve za obuku, saznajte kako da obezbedite uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na pitanja, dajete povratne informacije i čujete mišljenje od stručnjaka sa bogatim znanjem.

Da li su vam ove informacije koristile?

Koliko ste zadovoljni kvalitetom jezika?
Šta je uticalo na vaše iskustvo?
Kada kliknete na dugme Prosledi“, vaše povratne informacije će se koristiti za poboljšanje Microsoft proizvoda i usluga. Vaš IT administrator će moći da prikupi ove podatke. Izjava o privatnosti.

Hvala vam na povratnim informacijama!

×