Pull to refresh

Comments 21

В случае своей активности, CET будет реагировать на следующие инструкции микропроцессора, которые изменяют поток выполнения кода: CALL, INT n/INTO/INT3, JMP, RET, SYSCALL, SYSENTER, SYSEXIT, SYSRET, IRET/IRETD.

А при чём тут JMP? Он же не изменяет стек.
Имеется ввиду JMP r/m. Цель такой инструкции должна начинаться с ENDBRANCH.
Через всего каких-то 20 лет после того, как я сказал «если мы хотим безопасности, стек данных и стек адресов возврата должны стать двумя отдельными стеками», до ведущих производителей наконец-то дошло…
Они видимо ждали, пока их поисковики не проиндексируют Вашу мысль. Мои поисковики её до сих пор не проиндексировали.
>> до ведущих производителей наконец-то дошло

Merced был анонсирован в 1997

https://blogs.msdn.microsoft.com/oldnewthing/20050421-28/?p=35833

Last year I alluded to the fact that the Itanium processor has two stacks.

As already noted, one consequence of this dual-stack model is that a stack buffer overflow will not corrupt the return address, because the return address is not kept on «the stack»;
ну так, это вообще то накладные расходы, это раз. обратная совместимость это два.
В Форт (Forth) языке и процессорах (MISC архитектура) этому принципу уже много больше 40лет…
Рис. Элементы таблиц страниц Extended Page Table (EPT), в которых страница теневого стека помечена 59-м битом SSS. Используется для идентификации страниц теневого стека на уровне таблиц страниц.


Мне кажется, или на рисунке таки выделен 60-й бит?
А как будут обстоять дела с программами, в которых ROP зашит в логику? Я понимаю, что это крайне редкое явление, но такое вполне может использоваться в ручных оптимизациях «горячих» участков кода.
Я думаю, как и DEP. В заголовке исполняемого файла Windows (Portable Executable) есть флаг — включить DEP. У старых бинарников он выключен, а новые бинарники будут компилироваться со включенным флагом. При желании, разработчик модуля сможеть опцией линкера выключить флаг. Но обычно так делать не будут, а защита начнёт постепенно работать.
А что насчет Return-oriented Programming without Returns cseweb.ucsd.edu/~hovav/dist/noret.pdf? И как насчет setjmp/longjmp, будет ли это вообще работать при таком подходе? Придется вручную по-честному раскручивать стек вызовов вместо того, чтобы мгновенно перепрыгнуть?
Есть шанс, что эта концепция сделает нерабочей большинство программ с защитой от взлома и реверс-инжиниринга.
именно для этого генерируется исключения, чтобы можно было сделать настройку ос, для каких приложений включать эту защиту
Ещё немного (ведь уже больше 45 лет прошло), и Форт захватит десктопы.
Не надо путать, у форта стеки независимые, а здесь второй является контрольной копией главного, на случай порчи.
Ну это не требование, а метод обеспечения обратной совместимости.
Именно поэтому не «уже», а «ещё немного».
Ох, чувствую, с этой новой защитой в процессоре у кого-то с треском костыли отвалятся.
Sign up to leave a comment.