Вступ до переповнення буфера

Переповнення буфера також відоме як перевиконання буфера, це стан комп'ютера, де програма намагається зберігати більше даних у буферній пам'яті, ніж розмір пам'яті. Це призводить до того, що дані зберігаються у сусідньому сховищі, яке іноді може перезаписувати наявні дані, спричиняючи потенційну втрату даних, а іноді й збої в системі. Це звичайна помилка програмування, яку більшість розробників невідомо вчиняють. Найчастіше це використовують хакери, щоб отримати доступ до небажаних даних.

Що таке буферна пам'ять?

Відмінне запитання. Буферна пам'ять або буфер - це просто послідовна частина оперативної пам’яті, відведеної для тимчасового зберігання даних під час її передачі з одного місця в інше - місце, яке зазвичай є пристроєм введення або виводу. Це робиться для компенсації різниці швидкостей, з якими працюють пристрої.

Наприклад, коли ви даєте деякі документи для друку, ваш останній процесор i7 досить швидкий для виконання команди друку за наносекунди, тоді як поганий старий принтер не оснащений цим швидким процесором. Отже, документи зберігаються в буферній пам'яті і передаються на принтер зі швидкістю, яку приймає принтер. Це звільняє оперативну пам’ять вашого процесора для інших завдань.

Атака переповнення буфера

Тепер, коли з комп’ютерами виявлена ​​вразливість, хакери зобов’язані її використовувати і намагаються атакувати різні системи за допомогою атак переповнення буфера. Тепер виникає питання, як хакер здійснює таку атаку і які наслідки?

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

Атака переповнення буфера може бути в основному класифікована на два типи

  • На основі стека: коли атака відбувається на розподіл пам'яті на основі стека. Це простіше експлуатувати і, отже, більш схильне до атак.
  • На основі купи: Коли атака здійснюється на розподіл пам'яті на основі купи. Це не так просто експлуатувати, і тому набагато рідше.

Мови, найбільш уразливі до атак переповнення буфера, - це C, C ++, Fortran і Assembly, оскільки вони використовують методи розподілу пам'яті на основі стека.

Ліки

Після пошкодження даних просто неможливо відновити вихідні дані. Більше того, інтенсивність нападу багато в чому визначає вилікування. Якщо атака є мізерною і зачіпає лише частину пам'яті ізольованої машини, простий системний формат може стати ліком. Оскільки, якщо напад є широкомасштабним і скомпрометував дані на кількох машинах, форматування всієї мережі не допоможе, якщо не буде виправлена ​​програма, яка вводить шкідливий код.

Профілактика краще, ніж лікування

Як розробники, ми несемо відповідальність за перевірку наявності переповнення буфера в нашому коді. Якщо переповнення буфера обробляються в самому коді, захист системи не перешкоджає атакам переповнення буфера.

Нижче наведено кілька простих запобіжних заходів, які можуть запобігти переповненню буфера.

  • Обробка винятків повинна використовуватись для виявлення переповнення буфера та запобігання виконанню коду у разі його.
  • Виділіть достатньо великий розмір для буфера, щоб неналежний об'єм даних оброблявся належним чином.
  • Уникайте використання функцій бібліотеки чи сторонніх методів, які не є перевіреними на предмет переповнення буфера. Найпоширенішими прикладами таких функцій, яких слід уникати, є get (), scanf (), strcpy () Вони в основному на мові C / C ++.
  • Тестування коду повинно враховувати такі вразливості та жорстко перевіряти код та виправляти помилки, які можуть призвести до переповнення.
  • Сучасні мови програмування, операційні системи та компілятори коду еволюціонували, щоб зупинити виконання команд у разі переповнення буфера. Це стало найнадійнішим способом автоматичного виявлення переповнення буфера.

Спробуйте самі …

Ви так багато зрозуміли про Buffer Overflow та Buffer Attacks, чому б не спробувати самостійно кодувати щось шкідливе?

Відмова від відповідальності - Наступна програма призначена лише для ілюстрації та не повинна використовуватися для нанесення будь-якої шкоди. Будь-яка схожість зі шкідливим кодом є просто випадковою. Більше того, операційні системи в наш час досить розумні, щоб проводити перевірку буфер-атаки.

Нижче представлена ​​програма C, яка може викликати перевищення потенційного буфера. Чому вибір мови С? Це пояснюється тим, що більш досконалі мови програмування були розроблені для вирішення проблеми перевищення буфера лише під час компіляції. Хоча, зараз компілятори C також мають певні перевірки, щоб уникнути виявлення переповнення буфера. Отже, ви бачили б лише повідомлення про помилку, яке вказує на виявлення перевищення буфера.

#include
#include
#include
int main(int argc, char *argv())
(
char mybuffer(8);
// copy the user input to mybuffer, without any bound checking
printf("Storing user input to mybuffer…\n");
strcpy(mybuffer, argv(1));
printf("mybuffer content= %s\n", mybuffer);
return 0;
)

Що сталося, коли 123456789 був заданий програмою як аргумент командного рядка? Програма створила помилку, яка видається, коли компілятор виявляє переповнення буфера. На сьогодні компілятори та операційні системи мають додатковий рівень захисту. Цей шар - це не що інше, але змінні, що називаються Канарами, які ініціюються до певних значень під час компіляції. Потім ці змінні зберігаються в сусідніх блоках пам'яті до буфера. Отже, кожного разу, коли буфер переповнюється, додаткові дані надходять у сусідню пам'ять і пошкоджують значення канарів. Як тільки будь-яка пошкоджена канарка виявлена, система припиняє виконання.

Ще один приклад мови C ++:

#include
using namespace std;
int main()
(
char buf(8);
cin>>buf;
return 0;
)

Вхід - 123456789

Вихід -

Висновок - перелив буфера

Отже, на сьогодні я впевнений, що ви зрозуміли б важливість обробки буфера у вашій програмі. Включіть цю практику, щоб перевірити наявність меж буфера під час написання, а також перевірити свій код. Це допоможе вам написати захищений код.

Рекомендовані статті

Це було керівництвом щодо того, що таке переповнення буфера. Тут ми обговорили визначення, запобігання, пам’ять, атаку в Buffer Overflow. Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. Що таке JavaScript?
  2. Що таке Джанго?
  3. Що таке SQL Developer?
  4. Що таке Azure?