Как приближается модифицированный адрес возврата в атаке переполнения буфера на основе стека? - PullRequest
6 голосов
/ 03 апреля 2011

Я понимаю, что типичная полезная нагрузка атаки переполнения буфера в стеке выглядит примерно так:

(обратный адрес) (обратный адрес) ... (обратный адрес) (обратный адрес) (обратный адрес) (обратный адрес) (NOP) (NOP) (NOP) (NOP) ... (NOP) (NOP) (NOP) (NOP) (ОБОЛОЧКА)

Я также понимаю, что успешное выполнение шелл-кода зависит от нескольких вещей:

  1. Повторяющаяся часть обратного адреса полезной нагрузки должен перезаписать возвратный указатель этого стекового фрейма
  2. Этот обратный адрес должен быть адрес какой-то части NOP слайд (или начало Шеллкод)

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

Являются ли эти два обычно довольно детерминированными? Например, если злоумышленник проведет несколько сеансов проб и ошибок, пока не заработает на своем компьютере, будет ли эта же полезная нагрузка работать на всех других компьютерах с точно такими же двоичными файлами?

Ответы [ 3 ]

6 голосов
/ 04 апреля 2011

Точность определения структуры памяти полностью зависит от кадра стека функции, который вы портите. Иногда смещения могут быть очень точными, и даже сани не требуются, но в любом случае это хорошая идея. Если вы пару раз вызываете проблему в отладчике, вы можете понять, насколько хаотичен стек. Другие факторы могут влиять на размер смещения. Например, если смещение может измениться для разных версий программы, таких как эксплойт, написанный для windows 2000 и windows xp . Различные языковые распределения приложения также могут влиять на размер смещения.

Однако ASLR вызывает серьезные проблемы для этого метода эксплуатации. Распыление кучи обычно используется браузерными эксплойтами для обхода ASLR.

6 голосов
/ 03 апреля 2011

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

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

(нормально работает, немного оптимистично. Допустим, шелл-код должен быть запущен. Эффективность атаки может зависеть от других факторов ..)

0 голосов
/ 03 апреля 2011

Конечно, адрес не всегда будет одинаковым в зависимости от системы и двоичного файла. Один из способов взлома, который используют вредоносные программы для повышения своего шанса, состоит в том, чтобы сгенерировать несколько полезных данных, используя разные обратные адреса (например, +10 с шагом при 10 NOPS) и попробоватьих все, пока это не сработало.

...