Рассмотрим составляющие программы взлома посредством переполнения буфера подробнее. Какие действия в конечном итоге приводят к переполнению? Очевидно, что атакующий должен отправить машинный код, чтобы выполнились определенные команды, а также послать такую информацию, которая перезаписала бы указатель возврата, адресующий информацию стека, где располагается код атакующего.
Очень важно, чтобы указателю возврата было присвоено верное значение: указание на неверную область памяти может привести к аварийному отказу программы или неверному выполнению кода атакующего. Но что еще больше усложняет работу хакера, так это периодическая смена места расположения стека в памяти компьютера. Следовательно, атакующему часто приходится угадывать ту область памяти, куда должна перейти программа для выполнения нужного кода.
Для решения этой немаловажной задачи - добиться, чтобы указатель возврата представлял ту область памяти, которую нужно, - атакующие часто добавляют в начале своего кода несколько команд NOP. Эти команды просто приказывают процессору ничего не делать.
Когда процессор встречает такую команду, он приостанавливается, а затем загружает следующую команду. У каждого процессора есть один или более типов команд, реализующих N О Р, чтобы процессор выждал некоторое время, прежде чем переходить к выполнению следующей команды cpa сети. Атакующие перед своим кодом в стеке поместят несколько таких NOP. В зависимости от размера буфера будут включены сотни или даже тысячи команд NOP.
В программе взлома по переполнению буфера набор подобных команд иногда называют выжиданием NOP. Следовательно, при переполнении буфера в стек отправляются данные, состоящие из выжидания NOP, машинного кода, содержащего те команды, которые атакующий хочет выполнить, и указателя возврата.
Таким образом, NOP увеличивают вероятность того, что указатель возврата покажет правильное место в памяти, чтобы реализовать код атакующего. Без применения NOP программа должна переместиться непосредственно к началу кода атакующего, то есть указателю возврата будет присвоено определенное значение. Если же использовать команды NOP, она может перейти к любой из них.
Если атакующий задал такое значение указателя возврата, что партнерская программа обратилась к одной из команд NOP, процессор станет последовательно выполнять NOP, пока не дойдет до кода атакующего. Затем будет загружен и этот код, и атака по переполнению буфера завершится. Именно по данной причине в большинстве атак переполнения буфера задействуются команды NOP.
Системы обнаружения вторжений и переполнение стековой памяти
Многие IDS обнаруживают атаку переполнения стековой памяти, сравнивая сигнатуры. Эти системы ищут команды NOP, которые обычно используются в коде атакующего, либо указатели возврата, связанные с известными атаками переполнения трафиком буфера. Любой из названных элементов атаки переполнения буфера легко выявляется IDS.
Отслеживая поток информации, проходящий по сети, и выискивая группу NOP, обычный код взлома или типичные указатели возврата, IDS может вычислить атаку и предупредить администратора. Наиболее популярные сигнатуры IDS для определения атаки переполнения буфера учитывают посылку команд NOP.
Автор: pimka21
Еще советуем: