Что такое переполнение буфера памяти


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

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

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

Когда процессор встречает такую команду, он приостанавливается, а затем загружает следующую команду. У каждого процессора есть один или более типов команд, реализующих N О Р, чтобы процессор выждал некоторое время, прежде чем переходить к выполнению следующей команды cpa сети. Атакующие перед своим кодом в стеке поместят несколько таких NOP. В зависимости от размера буфера будут включены сотни или даже тысячи команд NOP.

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

Таким образом, NOP увеличивают вероятность того, что указатель возврата покажет правильное место в памяти, чтобы реализовать код атакующего. Без применения NOP программа должна переместиться непосредственно к началу кода атакующего, то есть указателю возврата будет присвоено определенное значение. Если же использовать команды NOP, она может перейти к любой из них.

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


Системы обнаружения вторжений и переполнение стековой памяти



Многие IDS обнаруживают атаку переполнения стековой памяти, сравнивая сигнатуры. Эти системы ищут команды NOP, которые обычно используются в коде атакующего, либо указатели возврата, связанные с известными атаками переполнения трафиком буфера. Любой из названных элементов атаки переполнения буфера легко выявляется IDS.

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


Автор: pimka21

Еще советуем:
  • Безопасность компьютера: обман IDS
  • Защита от переполнения буфера памяти
  • Стековая память: как защитить ее от переполнения
  • Атаки переполнения стековой памяти
  • Безопасность компьютера: атаки на приложения и операционные системы