ARM - более безопасный набор инструкций? - PullRequest
5 голосов
/ 02 марта 2010

Я прочитал, что «нормальные» инструкции ARM имеют фиксированную длину - 32 бита. И что никакая инструкция ARM не может перейти в середину другой инструкции, что легко сделать с помощью инструкций x86.

(Для x86 Google NaCl пытается «исправить» это путем выравнивания инструкций по 32-байтовым границам.)

Делает ли это программы ARM более безопасными или более устойчивыми к определенным атакам?

Если это так, распространяется ли это на инструкции Thumb и Java?

Ответы [ 2 ]

3 голосов
/ 02 марта 2010

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

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

Это короткий и, вероятно, неточный ответ. Для более точного ответа, посмотрите на это сообщение в блоге в отличном блоге matasano

1 голос
/ 02 марта 2010

Вы думаете о том, что атака сжимает адрес возврата стека или подобный, чтобы он перешел в полезную нагрузку? Я полагаю, что выравнивание слов не очень помогает или мешает - вам просто нужно выровнять полезную нагрузку в 4 байта. Да, а x64 требует 16-байтового выравнивания инструкций.

Это то, что вы имели в виду? Спасибо!

...