Захист від переповнення буфера

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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

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


Існує декілька реалізацій захисту від переповнення буфера для різних компіляторів: GNU Compiler Collection, LLVM, Microsoft Visual Studio.

Огляд[ред. | ред. код]

Канарки[ред. | ред. код]

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

Джерела[ред. | ред. код]