Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 149

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

ПроверилCybersecurity entrepreneur & security researcher

Что такое Переполнение буфера?

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


Переполнения буфера возникают в языках вроде C и C++, когда длины входных данных не ограничиваются должным образом относительно размера целевого буфера. Лишние байты затирают соседние стековые кадры, чанки кучи, указатели на функции или адреса возврата, позволяя атакующему перехватить поток управления или утечь данные. Классический подрыв стека затирает сохранённый адрес возврата, так что функция «возвращается» в shellcode, подброшенный атакующим; переполнения кучи же повреждают метаданные аллокатора или соседние объекты, давая примитив записи.

Этот паттерн во многом сформировал историю интернета. Червь Морриса 1988 года (Morris Worm) распространялся через переполнение стека в BSD fingerd; Code Red (2001) использовал непроверенный буфер в ISAPI-фильтре .ida сервера IIS (CVE-2001-0500); а SQL Slammer (2003) эксплуатировал переполнение в SQL Server Resolution Service (MS02-039 / CVE-2002-0649), заразив около 75 000 хостов за десять минут с помощью единственного UDP-пакета размером 404 байта на порт 1434 — спустя шесть месяцев после выхода патча.

Запись за границами буфера (out-of-bounds write, CWE-787) заняла 2-е место в рейтинге CWE Top 25 за 2024 год, уступив лишь XSS. Современные меры защиты сочетают стековые канарейки, ASLR, DEP/NX, контроль целостности потока управления (Control-Flow Integrity: Intel CET, ARM PAC/BTI), более безопасные функции libc, усиление со стороны компилятора (_FORTIFY_SOURCE), фаззинг-тестирование и — всё чаще — перенос «горячего» кода на memory-safe языки вроде Rust.

flowchart TD
  A[Атакующий отправляет<br/>слишком длинный ввод] --> B{Длина проверена<br/>относительно размера буфера?}
  B -->|Да, ограничена| C[Ввод обрезан / отклонён]
  B -->|Нет проверки границ| D[Запись за концом буфера]
  D --> E[Затирание адреса возврата<br/>или указателя на функцию]
  E --> F[Поток управления перенаправлен]
  F --> G[Запускается shellcode / ROP-цепочка атакующего]
  C --> H[Программа продолжает работу безопасно]

Примеры

  1. 01

    CVE-2014-0160 (Heartbleed): переполнение чтения памяти в OpenSSL.

  2. 02

    Червь Морриса (1988): эксплуатация переполнения стека в fingerd.

Частые вопросы

Что такое Переполнение буфера?

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

Что означает Переполнение буфера?

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

Как защититься от Переполнение буфера?

Защита от Переполнение буфера обычно сочетает технические меры и операционные практики, как описано в определении выше.

Какие есть другие названия Переполнение буфера?

Распространённые альтернативные названия: Buffer overrun.

Связанные термины

См. также