Переполнение буфера

В статье “Виды компьютерных уязвимостей” я немного рассказывал об уязвимости “Переполнение буфера”, а в этой статье рассмотрим данную уязвимость подробнее.

Переполнение буфера (buffer overrun или buffer overflow) – это уязвимость, известная с момента появления компьютеров и существующая до сих пор. Даже первый само-распространяющийся Интернет-червь — Червь Морриса 1988 года — использовал переполнение буфера в Unix-демоне finger для распространения между машинами.

По своей сути, переполнение буфера является невероятно простым багом, происходящим из распространённой практики. Если программист захочет поместить десять байтов данных в буфер, под который выделено восемь байтов пространства, ничто не помешает это сделать, хотя результатом, скорее всего, станет аварийное завершение программы. Такая ситуация и называется переполнением буфера.

Лишние два байта данных, вышедшие за пределы отведенной области памяти, записываются вне её и стирают находящиеся там данные. Если таким образом будет уничтожен важный фрагмент данных, программа аварийно завершит работу. Рассмотрим пример уязвимой программы на языке Си:

#include <string.h>

int main(int argc, char *argv[])
{
	char buf[100];
	strcpy(buf, argv[1]);
	return 0;
}

В ней используется небезопасная функция strcpy, которая позволяет записать больше данных, чем вмещает выделенный под них массив.

Если запустить данную программу в системе Windows с аргументом, длина которого превышает 100 байт, скорее всего, работа программы будет аварийно завершена, а пользователь получит сообщение об ошибке. Следующая программа не подвержена данной уязвимости:

#include <string.h>

int main(int argc, char *argv[])
{
	char buf[100];
	strncpy(buf, argv[1], sizeof(buf));
	return 0;
}

Здесь strcpy заменена на strncpy, в которой максимальное число копируемых символов ограничено размером буфера.

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Один ответ к “Переполнение буфера”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Искусство форензики

Искусство форензики

Форензика (компьютерная криминалистика, расследование киберпреступлений) — прикладная наука о раскрытии преступлений, связанных с компьютерной информацией, об исследовании цифровых доказательств, методах поиска, получения и закрепления таких

 
Утилита IPTABLES

Утилита IPTABLES

IPTABLES – утилита межсетевого экрана, предназначенная для операционных систем Linux. Iptables основана на правилах, которые контролируют входящие и исходящие пакеты, а также использует цепочки правил

 
Установка системы мониторинга Zabbix

Установка системы мониторинга Zabbix

Zabbix — это универсальный инструмент мониторинга, способный отслеживать динамику работы серверов и сетевого оборудования, быстро реагировать на внештатные ситуации и предупреждать возможные проблемы с нагрузкой.

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: