Има място за инжектиране на код между приложение и неговите външни библиотеки. Да го правиш не е лошо по своята същност, но е чудесен начин да навредиш.
Когато разработчиците трябва да разширят функционалността на програма, за която нямат изходния код, те често се обръщат към закачане на DLL. Това е неортодоксален начин да накарате програма да направи нещо, за което не е предназначена.
Работата е там, че хакерите също използват тази техника по всички погрешни причини, като използване на безвредни приложения като оръжие или кракване на софтуер. И така, какво е закачане на DLL и как всъщност работи?
Какво е DLL?
Всяко приложение зависи от някои файлове извън неговия базов код, за да се изпълнява. Тези външни файлове съдържат код и данни, необходими на програмата, за да функционира правилно. Когато някой от тези външни файлове изчезне, програмата може да има проблеми със стабилността или направо да откаже да работи.
В операционната система Windows тези външни файлове се наричат DLL или библиотеки с динамични връзки. Библиотеките с динамични връзки са основни компоненти на операционната система Windows, предоставящи многократно използваем код и ресурси, които могат да се споделят между множество приложения.
Външните файлове в Windows са известни като библиотеки. Има два вида библиотеки: динамични и статични. Динамичните библиотеки се зареждат по време на изпълнение, а статичните библиотеки се зареждат по време на компилиране. DLL е динамична библиотека.
Какво е DLL закачане?
Закачането на DLL е техника, която включва прихващане и промяна на извиквания на функции, които програми или процеси правят към DLL. По същество настройка на Man-in-The-Middle се установява, когато кука седи между програма и DLL-ите, които извиква. Всички или целеви извиквания на функции след това се проследяват и променят.
Ето пример за работен процес на DLL hooking атака:
- Нападателят анализира извикванията на функции, направени от програмата и DLL файловете, от които тя зависи.
- Нападателят създава кука, използвайки една от многото техники за внедряване като IAT закачане, вградено закачане, COM закачане и т.н.
- Случва се изпълнение на произволен код.
- Изпълнението на първоначалното извикване на функция може или не може да се случи.
- Нападателят прикрива следите си, като изтрива куката и връща всички направени промени.
Закачането на DLL е сложна техника, която може да се използва както за добро (като разширяване на функционалността на програмата, отстраняване на грешки и регистриране) или за лошо (като заобикаляне на мерки за сигурност, кражба на чувствителни данни, изпълнение на произволен код и писане на видео игра хакове).
Как работи закачането на DLL?
Преди да се потопите в прилагането на DLL закачане, е важно да изясните основите. Нека направим крачка назад и разберем какво се случва, когато се направи извикване на функция към DLL от програма.
Когато програма извиква функция в DLL, операционната система първо търси името на функцията таблицата с адреси за импортиране на програмата и получава адреса на функцията от адреса за експортиране на DLL Таблица.
След като адресът на функцията бъде разрешен, програмата може да премине към адреса на функцията, за да получи достъп и да я изпълни. Закачането на DLL се върти около прихващане на този процес и пренасочване на извикването на функция към друга функция. Има няколко начина за прилагане на закачане на DLL. Нека да разгледаме най-често използваните техники за прилагането му.
Това може да стане доста технически, така че може да ви помогне, ако сте опитен потребител на Windows или по друг начин да имате добро разбиране на вътрешните функции на Windows.
IAT закачане
IAT закачането е ефективна техника, широко използвана от авторите на зловреден софтуер за заобикаляне на мерките за сигурност и избягване на откриването. Таблицата с адреси за импортиране (IAT) е структура от данни, която се зарежда в паметта всеки път, когато се създава нов процес. IAT съдържа имената на всички импортирани извиквания на функции и техните адреси в паметта.
Когато програма извиква функция в DLL, името на функцията първо се търси в IAT и ако адресът на паметта на споменатата функция не е намерен в IAT, тогава той е установен от адреса за експортиране на DLL Таблица.
Това е структура от данни, в която всички функции, експортирани от DLL, са картографирани към техните адреси в паметта. При IAT закачане, противникът може да модифицира IAT на процес и да замени легитимните съпоставяния на функции със злонамерени, като по този начин прекъсват предвидената операция и карат програмата да се изпълнява произволно код.
Ето как изглежда общият поток на атака при IAT закачане:
- Програмата прави извикване на функция.
- Адресът на функцията се намира в IAT.
- Тъй като IAT е закачен; адресът на функцията е променен и местоположението на паметта на злонамерена функция е заредено.
- Програмата скача до местоположението на злонамерената функция и се изпълнява произволен код.
- Накрая се изпълнява оригиналното извикване на функция.
Вградено закачане
Вграденото закачане е техника за закачане на DLL, която включва промяна на изходния код на целевата функция, за да се насочи нейното изпълнение към специална функция. Inline Hooking, за разлика от IAT hooking, променя директно кода на целевата функция, като дава на атакуващия по-прецизен контрол върху това как се държи целевата функция.
В диаграмата по-горе вижте как легитимната функция е била подправена, за да посочи злонамерена функция. След като всички инструкции в злонамерената функция бъдат изпълнени, се прави инструкция за прескачане за връщане към легитимната функция, за да завърши изпълнението.
Противниците използват вградено закачане, за да направят трайни промени в програма, като промяна на параметрите или върнатата стойност на функция.
Отбивки на Microsoft
Microsoft Research разработи вътрешен пакет за закачане на DLL, Detours. Той позволява на програмистите да проследяват и променят извиквания на функции, направени от програма. Отклоненията могат да се използват за различни задачи, включително, но не само: инструменти, тестване и коригиране на грешки.
Противниците използват Detours за извършване на инжектиране на DLL и атаки за закачане, а разработчиците често го използват, за да разширят функционалността на своите приложения. Можете да научите повече за пакета Detours на официално хранилище на GitHub.
Сега знаете как работи закачането на DLL
Закачането на DLL е сложна техника, която, когато се използва по правилните причини, може да увеличи възможностите на вашето приложение или да ви помогне да отстраните грешки и оптимизирате софтуера. За съжаление, закачането по-често се използва като противопоставяща се техника, а не като такава за развитие. Така че е важно да възприемете и да се придържате към най-добрите практики за сигурност, за да гарантирате, че вашите приложения са безопасни и свободни от атаки като закачане и инжектиране.