Помилки сегментації і безпека: купа

Помилки сегментації і безпека: купа
Схожим чином можна організувати і атаки на переповнення буферів, розташованих в купі. Адже один із часто використовуваних типів даних - це покажчик на функцію, і некоректна зміна будь-якого покажчика може привести до краху програми або викликом «несподіваною» функції.

З перезаписью потрібних змінних в купі можуть виникнути складності, оскільки при розподілі пам`яті в купі можуть застосовуватися досить складні алгоритми і гарантовано обчислити взаємне розташування змінних в пам`яті можна не завжди. Тому далеко не всяку помилку сегментації в купі легко перетворити на мету для атаки.

Втім, якщо атакується буфер розташовується «недалеко» від змінної, яку потрібно перезаписати (наприклад, всередині однієї структури або класу), то проблем виникнути не повинно.

Наприклад, розглянемо наступний код:
#include
void f () {



printf ( "Here I am! n");
}
struct A {char str [2] - void (* func) (void);



} A;
void main () {
a.func = f-
gets (a.str) -
a.func ();
}

Тут ми зчитуємо за допомогою функції gets () в поле a.str рядок, ніяк не контролюючи її довжину, в той час як розмір поля становить всього два байта. У процесі виконання програми прочитується рядок буде записуватися в структуру А починаючи з першого байта поля str. Починаючи з деякого розміру рядка, вона перекриє поле funo (в залежності від розрядності вашої системи і опцій компіляції, що впливають на вирівнювання полів структур в пам`яті, критична довжина рядка може виявитися різною). В результаті, при виклику a.funo () процесор спробує виконати аж ніяк не функцію f (). Неважко підібрати такий рядок, яка перезапише поле a.funo чимось осмисленим. Наприклад, в моїй робочій системі мені вдалося підібрати рядок, введення якої приводив до повторного виклику gets ().

На закінчення зазначу, що крім стека і динамічних змінних в купі, популярної метою для атак є таблиці GOT (Global Offset Table) і PLT (Procedure Linkage Table). Такі таблиці є у кожного процесу, що використовує динамічно скомпоновані бібліотеки (практично всі бінарні додатки в дистрибутивах Linux використовують ті чи інші бібліотеки). Таблиці GOT і PLT вказують, за якими адресами в пам`яті процесу знаходяться бібліотечні дані і функції. Вони розташовуються в області даних процесу і можуть бути змінені зловмисником, в результаті чого адреса деякої бібліотечної функції буде підмінений адресою шкідливої процедури.



Подібні правила до захисту безпеки застосовуються і до сервера, які здійснюють таку популярну нині операцію як розсилка смс (https://redsms.ru/). Затребуваність даної послуги на сучасному ринку зрозуміла - рекламодавець отримує сотні потенційних клієнтів, безпосередньо зацікавлених в пропонований товар, за сущі копійки!

ІНШЕ

Обробка подій в juce фото

Обробка подій в juce

Відео: Уроки javascript | Урок №13 - Події і обробник подій Переважна більшість тулкіта для С ++ (Gtk +, Qt,…

Ultimate ++: схеми баз даних фото

Ultimate ++: схеми баз даних

Відео: Бази даних, лекція №1 (2013) Об`єкти SqlExp кардинально полегшують створення запитів, але створення самих…

Взаємодія chaiscript з c ++ фото

Взаємодія chaiscript з c ++

Відео: Jason Turner: Why and How To Add ScriptingІдеологія взаємодії ChaiScript і С ++ Скриптова мова ChaiScript…

» » Помилки сегментації і безпека: купа