Skip to main content

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

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

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

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

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

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