Обговорення:Переповнення буфера

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

шмат статті[ред. код]

Переповнення буфера (англ. Buffer Overflow) — явище, яке виникає, коли комп'ютерна програма записує дані за межами виділеного в пам'яті буфера .

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

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

Переповнення буфера може викликати аварійне завершення або зависання програми, що веде до відмови обслуговування(denial of service, DoS). Окремі види переповнення, наприклад переповнення в стековому кадрі, дозволяють зловмиснику завантажити і виконати довільний машинний код від імені програми і з правами облікового запису, від якої вона виконується.

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