Постоји простор за убацивање кода између апликације и њених екстерних библиотека. То није само по себи лоше, али је одличан начин да нанесете штету.
Када програмери треба да прошире функционалност програма за који немају изворни код, често се окрећу повезивању ДЛЛ-а. Ово је неортодоксан начин да се програм натера да уради нешто за шта није намењен.
Ствар је у томе да хакери такође користе ову технику из свих погрешних разлога, као што је оружје безопасних апликација или софтвер за крековање. Дакле, шта је ДЛЛ закачење и како то заправо функционише?
Шта је ДЛЛ?
Свака апликација зависи од неких датотека изван свог основног кода за покретање. Ове екстерне датотеке садрже код и податке који су програми потребни да би правилно функционисао. Када било која од ових спољних датотека нестане, програм може имати проблема са стабилношћу или потпуно одбити да се покрене.
У оперативном систему Виндовс, ове спољне датотеке се називају ДЛЛ или библиотеке динамичких веза. Библиотеке са динамичким везама су основне компоненте оперативног система Виндовс, обезбеђујући код за вишекратну употребу и ресурсе који се могу делити у више апликација.
Спољне датотеке у оперативном систему Виндовс познате су као библиотеке. Постоје две врсте библиотека: динамичке и статичке. Динамичке библиотеке се учитавају у време извођења, а статичке библиотеке се учитавају у време компајлирања. ДЛЛ је динамичка библиотека.
Шта је ДЛЛ хоокинг?
ДЛЛ хоокинг је техника која укључује пресретање и измену позива функција које програми или процеси упућују ДЛЛ-у. У суштини поставка Човек у средини се успоставља тамо где се кука налази између програма и ДЛЛ-ова које позива. Сви или циљани позиви функција се затим прате и мењају.
Ево примера тока рада ДЛЛ закаченог напада:
- Нападач анализира позиве функција које је направио програм и ДЛЛ датотеке од којих зависи.
- Нападач креира хоок користећи једну од многих техника имплементације као што су ИАТ хоокинг, инлине хоокинг, ЦОМ хоокинг, итд.
- Дешава се произвољно извршење кода.
- Извршење оригиналног позива функције може, али не мора да се деси.
- Нападач прикрива њихове трагове брисањем куке и враћањем свих учињених измена.
Повезивање ДЛЛ-а је софистицирана техника која се може користити за оба добра (као што је проширење функционалности програма, отклањање грешака и евидентирање) или лоше (као што је заобилажење безбедносних мера, крађа осетљивих података, извршавање произвољног кода и писање видео игрица хакови).
Како функционише ДЛЛ хоокинг?
Пре него што пређете на имплементацију ДЛЛ повезивања, важно је да разјасните основе. Хајде да направимо корак уназад и разумемо шта се дешава када програм упути позив функције ДЛЛ-у.
Када програм позове функцију у ДЛЛ-у, оперативни систем прво тражи назив функције табела адреса увоза програма и добија адресу функције из ДЛЛ адресе за извоз Сто.
Када се адреса функције разреши, програм може да скочи на адресу функције да би јој приступио и извршио. ДЛЛ хоокинг се врти око пресретања овог процеса и преусмеравања позива функције на другу функцију. Постоји неколико начина за имплементацију повезивања ДЛЛ-а. Хајде да погледамо најчешће коришћене технике за његову имплементацију.
Ово може бити прилично техничко, тако да вам може помоћи су напредни корисник Виндовс-а или на неки други начин имају добро разумевање Виндовс унутрашњих делова.
ИАТ Хоокинг
ИАТ хоокинг је ефикасна техника коју широко користе аутори злонамерног софтвера да заобиђу безбедносне мере и избегну откривање. Импорт Аддресс Табле (ИАТ) је структура података која се учитава у меморију кад год се креира нови процес. ИАТ садржи имена свих увезених позива функција и њихове меморијске адресе.
Када програм позове функцију у ДЛЛ-у, прво се тражи име функције у ИАТ-у и ако је меморијска адреса поменуте функције није пронађена у ИАТ-у, а затим се успоставља из ДЛЛ адресе за извоз Сто.
То је структура података у којој су све функције које извози ДЛЛ мапиране на њихове меморијске адресе. У ИАТ хоокинг-у, противник може модификовати ИАТ процеса и заменити легитимна мапирања функција са злонамерним који на тај начин ометају предвиђену операцију и чине да се програм извршава произвољно код.
Ево како изгледа општи ток напада у ИАТ хоокингу:
- Програм врши позив функције.
- Адреса функције се налази у ИАТ-у.
- Пошто је ИАТ закачен; адреса функције је промењена, а меморијска локација злонамерне функције је учитана.
- Програм скаче на локацију злонамерне функције и извршава се произвољни код.
- Коначно, оригинални позив функције се извршава.
Инлине Хоокинг
Инлине хоокинг је техника повезивања ДЛЛ-а која укључује промену изворног кода циљне функције како би се њено извршење усмерило на специјалну функцију. Инлине хоокинг, за разлику од ИАТ хоокинга, директно мења код циљне функције, дајући нападачу прецизнију контролу над начином на који се циљна функција понаша.
У дијаграму изнад, погледајте како је легитимна функција манипулисана да би указала на злонамерну функцију. Када се изврше све инструкције у злонамерној функцији, врши се инструкција за скок да се врати на легитимну функцију да би завршила са извршавањем.
Противници користе инлине хоокинг да би направили трајне промене у програму као што је промена параметара или повратне вредности функције.
Мицрософт Детоурс
Мицрософт Ресеарцх је развио интерни пакет за повезивање ДЛЛ-а, Детоурс. Омогућава програмерима да прате и мењају позиве функција које је направио програм. Заобилазнице се могу користити за различите задатке, укључујући, али не ограничавајући се на: инструментацију, тестирање и исправљање грешака.
Противници користе Детоурс да изведу ДЛЛ ињекције и нападе закачења, а програмери га често користе да прошире функционалност својих апликација. Више о пакету Детоурс можете сазнати на званично ГитХуб спремиште.
Сада знате како ДЛЛ хоокинг функционише
Повезивање ДЛЛ-а је софистицирана техника која, када се користи из правих разлога, може повећати могућности ваше апликације или вам помоћи да отклоните грешке и оптимизујете софтвер. Нажалост, закачење се чешће посматра као техника супротстављања, а не као развојна техника. Дакле, важно је да усвојите и придржавате се најбољих безбедносних пракси како бисте осигурали да су ваше апликације безбедне и без напада као што су закачење и убризгавање.