Ir vieta, kur ievadīt kodu starp lietojumprogrammu un tās ārējām bibliotēkām. Šāda rīcība pēc būtības nav slikta, taču tas ir lielisks veids, kā nodarīt ļaunumu.
Ja izstrādātājiem ir jāpaplašina tādas programmas funkcionalitāte, kurai viņiem nav avota koda, viņi bieži izmanto DLL piesaisti. Tas ir neparasts veids, kā likt programmai darīt to, ko tai nav paredzēts darīt.
Lieta ir tāda, ka hakeri izmanto šo paņēmienu arī nepareizu iemeslu dēļ, piemēram, nekaitīgu lietojumprogrammu ieroci vai programmatūras uzlaušanu. Tātad, kas ir DLL piesaiste un kā tas faktiski darbojas?
Kas ir DLL?
Katra lietojumprogramma ir atkarīga no dažiem failiem ārpus tās bāzes koda. Šajos ārējos failos ir kods un dati, kas nepieciešami, lai programma darbotos pareizi. Ja kāds no šiem ārējiem failiem pazūd, programmai var būt stabilitātes problēmas vai tie var atteikties palaist.
Operētājsistēmā Windows šos ārējos failus sauc par DLL vai dinamisko saišu bibliotēkām. Dinamiskās saites bibliotēkas ir būtiskas Windows operētājsistēmas sastāvdaļas, kas nodrošina atkārtoti lietojamu kodu un resursus, ko var koplietot vairākās lietojumprogrammās.
Ārējos failus sistēmā Windows sauc par bibliotēkām. Ir divu veidu bibliotēkas: dinamiskā un statiskā. Dinamiskās bibliotēkas tiek ielādētas izpildes laikā, bet statiskās bibliotēkas tiek ielādētas kompilēšanas laikā. DLL ir dinamiska bibliotēka.
Kas ir DLL piesaiste?
DLL piesaiste ir paņēmiens, kas ietver programmu vai procesu funkciju izsaukumu pārtveršanu un mainīšanu DLL. Būtībā Cilvēka vidū iestatījums tiek izveidots, ja starp programmu un tās izsauktajiem DLL atrodas āķis. Pēc tam tiek izsekoti un mainīti visi vai atlasītie funkciju izsaukumi.
Šis ir DLL piesaistes uzbrukuma darbplūsmas piemērs:
- Uzbrucējs analizē programmas veiktos funkciju izsaukumus un DLL failus, no kuriem tā ir atkarīga.
- Uzbrucējs izveido āķi, izmantojot vienu no daudzajām ieviešanas paņēmieniem, piemēram, IAT piesaiste, inline piesaiste, COM piesaiste utt.
- Notiek patvaļīga koda izpilde.
- Sākotnējā funkcijas izsaukuma izpilde var notikt vai nenotikt.
- Uzbrucējs aizsedz pēdas, izdzēšot āķi un atsaucot visas veiktās izmaiņas.
DLL piesaiste ir sarežģīta tehnika, ko var izmantot gan labā (piemēram, programmas funkcionalitātes paplašināšanai, gan atkļūdošanai, gan reģistrēšana) vai slikta (piemēram, drošības pasākumu apiešana, sensitīvu datu zādzība, patvaļīga koda izpilde un videospēļu rakstīšana hacks).
Kā darbojas DLL piesaiste?
Pirms ķeraties pie DLL piesaistes ieviešanas, ir svarīgi noskaidrot pamatus. Atkāpsimies soli atpakaļ un sapratīsim, kas notiek, ja programma veic funkcijas izsaukumu uz DLL.
Kad programma izsauc funkciju DLL, operētājsistēma vispirms meklē funkcijas nosaukumu programmas importēšanas adrešu tabulu un iegūst funkcijas adresi no DLL eksporta adreses Tabula.
Kad funkcijas adrese ir atrisināta, programma var pāriet uz funkcijas adresi, lai tai piekļūtu un izpildītu to. DLL piesaiste ir saistīta ar šī procesa pārtveršanu un funkcijas izsaukuma novirzīšanu uz citu funkciju. Ir vairāki veidi, kā ieviest DLL piesaisti. Apskatīsim visbiežāk izmantotās metodes tā ieviešanai.
Tas var kļūt diezgan tehnisks, tāpēc tas var palīdzēt, ja jūs ir Windows jaudas lietotājs vai citādi labi pārziniet Windows iekšējos elementus.
IAT Hooking
IAT piesaiste ir efektīva metode, ko plaši izmanto ļaunprātīgas programmatūras autori, lai apietu drošības pasākumus un izvairītos no atklāšanas. Importēšanas adrešu tabula (IAT) ir datu struktūra, kas tiek ielādēta atmiņā ikreiz, kad tiek izveidots jauns process. IAT satur visu importēto funkciju izsaukumu nosaukumus un to atmiņas adreses.
Kad programma izsauc funkciju DLL, funkcijas nosaukums vispirms tiek meklēts IAT un, ja minētās funkcijas atmiņas adrese nav atrasta IAT, tad tā tiek noteikta no DLL eksporta adreses Tabula.
Tā ir datu struktūra, kurā visas DLL eksportētās funkcijas tiek kartētas uz to atmiņas adresēm. IAT piesaistē pretinieks var modificēt procesa IAT un aizstāt likumīgus funkciju kartējumus ar ļaunprātīgiem, tādējādi izjaucot paredzēto darbību un liekot programmai darboties patvaļīgi kodu.
Lūk, kā izskatās vispārējā uzbrukuma plūsma IAT piesaistē:
- Programma veic funkcijas izsaukumu.
- Funkcijas adrese atrodas IAT.
- Tā kā IAT ir pieķēries; funkcijas adrese ir mainīta, un tiek ielādēta ļaunprātīgas funkcijas atrašanās vieta atmiņā.
- Programma pāriet uz ļaunprātīgās funkcijas atrašanās vietu un tiek izpildīts patvaļīgs kods.
- Visbeidzot, tiek izpildīts sākotnējais funkcijas izsaukums.
Inline Hooking
Iekļautā piesaiste ir DLL piesaistes paņēmiens, kas ietver mērķa funkcijas avota koda maiņu, lai tās izpildi novirzītu uz īpašu funkciju. Inline Hooking, atšķirībā no IAT piesaistes, tieši maina mērķa funkcijas kodu, sniedzot uzbrucējam precīzāku kontroli pār mērķa funkcijas darbību.
Iepriekš redzamajā diagrammā novērojiet, kā likumīgā funkcija ir bojāta, lai norādītu uz ļaunprātīgu funkciju. Kad visi ļaunprātīgās funkcijas norādījumi ir izpildīti, tiek veikta lēciena instrukcija, lai atgrieztos pie likumīgās funkcijas, lai pabeigtu tās izpildi.
Pretinieki izmanto inline piesaisti, lai programmā veiktu ilgstošas izmaiņas, piemēram, mainītu parametrus vai funkcijas atgriešanās vērtību.
Microsoft apkārtceļi
Microsoft Research ir izstrādājis iekšēju DLL piesaistes pakotni Detours. Tas programmētājiem ļauj izsekot un mainīt programmas veiktos funkciju zvanus. Apvedceļus var izmantot dažādiem uzdevumiem, tostarp, bet ne tikai: instrumentiem, testēšanai un kļūdu labošanai.
Pretinieki izmanto apvedceļus, lai veiktu DLL ievadīšanas un piesaistīšanas uzbrukumus, un izstrādātāji to bieži izmanto, lai paplašinātu savu lietotņu funkcionalitāti. Vairāk par apkārtceļu paketi varat uzzināt vietnē oficiālā GitHub repozitorija.
Tagad jūs zināt, kā darbojas DLL piesaiste
DLL piesaiste ir izsmalcināts paņēmiens, kas, ja to izmanto pareizo iemeslu dēļ, var uzlabot jūsu lietojumprogrammas iespējas vai palīdzēt atkļūdot un optimizēt programmatūru. Diemžēl āķa piesaiste biežāk tiek uzskatīta par pretrunīgu paņēmienu, nevis kā attīstības paņēmienu. Tāpēc ir svarīgi pieņemt un ievērot drošības paraugpraksi, nodrošinot, ka jūsu lietojumprogrammas ir drošas un bez uzbrukumiem, piemēram, aizķeršanās un injekcijas.