Возвратно-ориентированное программирование: все ли кодовые последовательности заканчиваются «ret» потенциальными «гаджетами» для ROP-атаки?

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

Итак, я думаю, что теоретически все последовательности кода asm, заканчивающиеся на ret, могут использоваться в качестве гаджетов в ROP-атаке?

Это неправильно? Может ли кто-нибудь привести мне пример противодействия?


person lllllllllllll    schedule 09.04.2014    source источник
comment
_1 _, _ 2_ последовательность вам не очень пригодится :)   -  person Egor Skriptunoff    schedule 09.04.2014
comment
@EgorSkriptunoff ага! крайний, но приемлемый пример :) Но действительно ли они используются в сгенерированном gcc asm-коде?   -  person lllllllllllll    schedule 09.04.2014
comment
Возможно, не так, как предполагалось в инструкциях, но вы не ограничены исходными границами инструкции. hlt; ret будет всего лишь двухбайтовой последовательностью F4 C3, которая может случайно появиться в какой-либо другой инструкции. Например, jmp .-15367 это E9 F4 C3 FF FF.   -  person Jester    schedule 10.04.2014


Ответы (1)


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

Но опять же, все, что заканчивается на ret, нельзя использовать в качестве эффективных гаджетов.

Например, «nop; ret» - самый бесполезный гаджет, о котором я могу думать. Я не думаю, что вы можете использовать это как полезный гаджет, но, тем не менее, это гаджет.

person Jayakrishna Menon    schedule 26.06.2015