Yra vietos įterpti kodą tarp programos ir jos išorinių bibliotekų. Tai daryti nėra blogai, bet tai puikus būdas pakenkti.

Kai kūrėjams reikia išplėsti programos, kuriai jie neturi šaltinio kodo, funkcionalumą, jie dažnai kreipiasi į DLL pririšimą. Tai neįprastas būdas priversti programą daryti tai, ko jai neketinama.

Reikalas tas, kad įsilaužėliai taip pat naudoja šią techniką dėl visų netinkamų priežasčių, pvz., ginkluoti nekenksmingas programas ar nulaužti programinę įrangą. Taigi, kas yra DLL prijungimas ir kaip tai iš tikrųjų veikia?

Kas yra DLL?

Kiekviena programa priklauso nuo kai kurių failų, nepriklausančių jos baziniam kodui. Šiuose išoriniuose failuose yra kodas ir duomenys, kurių programai reikia tinkamai veikti. Kai dingsta kuris nors iš šių išorinių failų, programa gali turėti stabilumo problemų arba visiškai atsisakyti paleisti.

„Windows“ operacinėje sistemoje šie išoriniai failai vadinami DLL arba dinaminių nuorodų bibliotekomis. Dinaminių nuorodų bibliotekos yra esminiai „Windows“ operacinės sistemos komponentai, teikiantys daugkartinį kodą ir išteklius, kuriuos galima bendrinti keliose programose.

instagram viewer

Išoriniai failai sistemoje Windows yra žinomi kaip bibliotekos. Yra dviejų tipų bibliotekos: dinaminės ir statinės. Dinaminės bibliotekos įkeliamos vykdymo metu, o statinės bibliotekos įkeliamos kompiliavimo metu. DLL yra dinamiška biblioteka.

Kas yra DLL prijungimas?

DLL prijungimas yra metodas, apimantis programų ar procesų funkcijų skambučių perėmimą ir keitimą į DLL. Iš esmės „Man-in-The-Middle“ sąranka nustatoma, kai tarp programos ir jos iškviečiamų DLL yra kabliukas. Tada atsekami ir pakeičiami visi arba tiksliniai funkcijų iškvietimai.

Štai DLL užkabinimo atakos darbo eigos pavyzdys:

  1. Užpuolikas analizuoja programos atliekamus funkcijų iškvietimus ir DLL failus, nuo kurių ji priklauso.
  2. Užpuolikas sukuria kabliuką naudodamas vieną iš daugelio diegimo metodų, pvz., IAT užkabinimas, tiesioginis užkabinimas, COM užkabinimas ir kt.
  3. Įvyksta savavališkas kodo vykdymas.
  4. Pradinis funkcijos iškvietimas gali įvykti arba neįvykti.
  5. Užpuolikas paslepia savo pėdsakus ištrindamas kabliuką ir grąžindamas visus atliktus pakeitimus.

DLL prijungimas yra sudėtinga technika, kurią galima panaudoti tiek naudos tikslais (pvz., programos funkcionalumo išplėtimas, derinimas ir registravimas) arba dėl blogų (pvz., saugumo priemonių apeiti, neskelbtinų duomenų vagystės, savavališko kodo vykdymas ir vaizdo žaidimo rašymas įsilaužimai).

Kaip veikia DLL prijungimas?

Prieš pasinerdami į DLL prijungimo diegimą, svarbu išsiaiškinti pagrindus. Ženkime žingsnį atgal ir supraskime, kas nutinka, kai programa iškviečia funkciją DLL.

Kai programa iškviečia funkciją DLL, operacinė sistema pirmiausia ieško funkcijos pavadinimo programos importavimo adresų lentelę ir gauna funkcijos adresą iš DLL eksportavimo adreso Lentelė.

Nustačius funkcijos adresą, programa gali pereiti prie funkcijos adreso, kad ją pasiektų ir paleistų. DLL prijungimas sukasi apie šio proceso perėmimą ir funkcijos iškvietimo nukreipimą į kitą funkciją. Yra keletas būdų, kaip įdiegti DLL užkabinimą. Pažvelkime į dažniausiai naudojamus jo įgyvendinimo būdus.

Tai gali būti gana techniška, todėl gali padėti yra „Windows“ galingas vartotojas ar kitaip gerai išmanyti Windows vidines dalis.

IAT užkabinimas

IAT prikabinimas yra veiksminga technika, kurią plačiai naudoja kenkėjiškų programų autoriai, norėdami apeiti saugos priemones ir išvengti aptikimo. Importavimo adresų lentelė (IAT) yra duomenų struktūra, kuri įkeliama į atmintį, kai sukuriamas naujas procesas. IAT yra visų importuotų funkcijų iškvietimų pavadinimai ir jų atminties adresai.

Kai programa iškviečia funkciją DLL, funkcijos pavadinimo pirmiausia ieškoma IAT ir, jei IAT nerandamas minėtos funkcijos atminties adresas, tada jis nustatomas iš DLL eksportavimo adreso Lentelė.

Tai duomenų struktūra, kurioje visos DLL eksportuotos funkcijos yra susietos su jų atminties adresais. Prisijungdamas IAT, priešas gali pakeisti proceso IAT ir pakeisti teisėtus funkcijų susiejimus su kenkėjiškomis, taip sutrikdydami numatytą veiklą ir priversdami programą vykdyti savavališkai kodas.

Štai kaip atrodo bendras atakų srautas naudojant IAT:

  1. Programa iškviečia funkciją.
  2. Funkcijos adresas yra IAT.
  3. Kadangi IAT buvo užsikabinęs; funkcijos adresas buvo pakeistas ir įkeliama kenkėjiškos funkcijos atminties vieta.
  4. Programa peršoka į kenkėjiškos funkcijos vietą ir vykdomas savavališkas kodas.
  5. Galiausiai vykdomas pradinis funkcijos iškvietimas.

Inline Hooking

Inline hooking yra DLL užkabinimo technika, apimanti tikslinės funkcijos šaltinio kodo pakeitimą, siekiant nukreipti jos vykdymą į specialią funkciją. Inline Hooking, priešingai nei IAT pririšimas, tiesiogiai pakeičia tikslinės funkcijos kodą, todėl užpuolikas gali tiksliau valdyti, kaip veikia tikslinė funkcija.

Aukščiau pateiktoje diagramoje stebėkite, kaip buvo sugadinta teisėta funkcija, kad būtų nurodyta kenkėjiška funkcija. Kai visos kenkėjiškos funkcijos instrukcijos yra įvykdomos, siunčiama šuolio instrukcija, kad grįžtų į teisėtą funkciją, kad jos vykdymas būtų baigtas.

Priešininkai naudoja tiesioginį užkabinimą, kad padarytų ilgalaikius programos pakeitimus, pvz., pakeistų parametrus arba funkcijos grąžinamąją reikšmę.

„Microsoft“ aplinkkeliai

„Microsoft Research“ sukūrė vidinį DLL prijungimo paketą „Detours“. Tai leidžia programuotojams sekti ir keisti programos skambučius. Apvažiavimai gali būti naudojami atliekant įvairias užduotis, įskaitant, bet neapsiribojant: prietaisus, testavimą ir klaidų taisymą.

Priešininkai naudoja aplinkkelius, kad vykdytų DLL įpurškimo ir užkabinimo atakas, o kūrėjai dažnai tai naudoja norėdami išplėsti savo programų funkcionalumą. Daugiau apie apvažiavimų paketą galite sužinoti adresu oficiali „GitHub“ saugykla.

Dabar jūs žinote, kaip veikia DLL prijungimas

DLL prijungimas yra sudėtinga technika, kuri, naudojant dėl ​​tinkamų priežasčių, gali padidinti jūsų programos galimybes arba padėti derinti ir optimizuoti programinę įrangą. Deja, užkabinimas dažniausiai naudojamas kaip priešiška, o ne tobulinimo technika. Taigi svarbu, kad priimtumėte ir laikytumėtės geriausios saugos praktikos ir užtikrintumėte, kad jūsų programos būtų saugios ir be atakų, pvz., užkabinimo ir injekcijos.