• О проекте
  • Услуги
  • Заказать услугу
  • Новости
  • Блог
  • Глоссарий
  • Контакты
  • Блог

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

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

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

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

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

    Переполнение буфера, широко используется в тех программах, которые написаны на низкоуровневых языках программирования, таких как С, С++ или ассемблер. Этим языкам необходимо самостоятельное управление размерами выделяемой памяти, что выполняется вручную, самим программистом. В отличии, например, от Java и Lisp, которые в свою очередь выполняют выделение памяти автоматически и используют возможность проведения статического анализа и проверки корректности операций, которые произвела программа. Это делает ошибки, которые были непосредственно связаны с переполнением буфера, маловероятными и практически невозможными, хотя все равно их библиотеки и системы времени выполнения могут быть подвержены такой проблеме, как переполнение буфера.