Подтвердить что ты не робот

Как работает сани NOP?

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

Какой простой пример, иллюстрирующий этот метод?

Что означают термины типа 128-байтных nop саней?

4b9b3361

Ответ 1

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

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

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

128-байтный NOP-сани - это всего лишь группа NOP-схем шириной 128 байтов.

ПРИМЕЧАНИЕ # 1: NOP (No-OPeration) - это инструкция, доступная в большинстве (всех?) архитектур, которая ничего не делает, кроме занимаемой памяти и некоторой среды выполнения.

ПРИМЕЧАНИЕ # 2: в архитектурах с инструкциями переменной длины инструкция NOP обычно имеет длину всего один байт, поэтому ее можно использовать в качестве удобного дополнения команд. К сожалению, это также облегчает выполнение санки NOP.

Ответ 2

Поскольку я не могу ответить, добавьте к объяснению Родриго. Даже с салазками NOP приблизительное местоположение буфера в памяти должно быть предсказано заранее. Одним из методов аппроксимации расположения памяти является использование соседнего местоположения стека в качестве системы координат. Вычитая смещение от этого местоположения, можно получить относительный адрес любой переменной.

SIDENOTE: в архитектуре x86 инструкция NOP эквивалентна шестнадцатеричному байту 0x90, поэтому заполненный буфер эксплойта может выглядеть примерно так:

| NOP санки | Шелководство | Повторный обратный адрес |

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