The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..., opennews (??), 19-Июн-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


13. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +/
Сообщение от keyemail (??), 19-Июн-17, 22:41 
Я правильно понимаю что, стек можно определить двумя адресами - начало и конец.
Также и с кучей(наверное можно обойдись только началом?).
Почему нельзя просто проверять границы?
if((operation == new and Addr < HeapStartAddr) or
(operation == stack and StackStartAddr < Addr < StackEndAddr)
) cout << "Error";

Там же неверняка накладные расходы на реализацию защищенной страницы не меньше?
Объясните, а то для моих скудных познаний stack guard-page выглядит слишком костыльно.

Ответить | Правка | Наверх | Cообщить модератору

15. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +/
Сообщение от keyemail (??), 19-Июн-17, 22:43 
Конечно же код неправильный - границы стека и кучи меняются. При выделении памяти надо проверять, что не заходим за чужой диапазон. Но суть вопроса остается.
Ответить | Правка | Наверх | Cообщить модератору

16. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +/
Сообщение от 123 (??), 19-Июн-17, 22:48 
>>Там же неверняка накладные расходы на реализацию защищенной страницы не меньше?

Этим вроде как менеджер памяти ОС должен заниматься. Поэтому меньше должно быть.

Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

17. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +/
Сообщение от Аноним84701 (ok), 19-Июн-17, 22:52 
>>>Там же неверняка накладные расходы на реализацию защищенной страницы не меньше?
> Этим вроде как менеджер памяти ОС должен заниматься. Поэтому меньше должно быть.

Оно по-любому меньше будет, потому как в первом случае проверка при каждой операции, а вот при использовании guard-page - только непосредственно при обращении к данному региону.


Ответить | Правка | Наверх | Cообщить модератору

20. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +/
Сообщение от 123 (??), 19-Июн-17, 23:08 
>>только непосредственно при обращении к данному региону.

"Обращение к региону" это выход push за пределы страницы? Пойду побью себя Таненбаум-ом по голове, освежу основы на всякий случай.

Ответить | Правка | Наверх | Cообщить модератору

22. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +/
Сообщение от Аноним84701 (ok), 19-Июн-17, 23:14 
> "Обращение к региону" это выход push за пределы страницы?

Ну да, а что?
Я толком правда уже не помню, но вроде как прилетает pagefault-эксепшн со стороны железа (x86) при попытке чтения, записи и т.д. без соответсвующего флажка страницы.

Ответить | Правка | Наверх | Cообщить модератору

19. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +/
Сообщение от Аноним84701 (ok), 19-Июн-17, 23:00 
> Там же неверняка накладные расходы на реализацию защищенной страницы не меньше?
> Объясните, а то для моих скудных познаний stack guard-page выглядит слишком костыльно.

http://wiki.osdev.org/Paging
Если вкратце, то проверки страниц проводятся так или иначе (причем, при каждом обращении программы к памяти -- взять ту же NX-фичу, которой уже лет эдак пятнадцать. Т.е. скорость проверки соответсвует потребностям)  и "guard" - это просто-напросто страница памяти без каких либо разрешений.


     PROT_NONE       No permissions at all.
     PROT_READ       The pages can be read.
     PROT_WRITE      The pages can be written.
     PROT_EXEC       The pages can be executed

И кончено, оно наамного быстрее костылей с проверками при каждой операции.
Единственно, памяти "тратится" минимум PAGE_SIZE

getconf PAGE_SIZE                                                            
4096

и поэтому лепить для защиты стековых переменных/фрейма выходит вроде как все еще несколько накладно.


Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

32. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +2 +/
Сообщение от Аноним (-), 20-Июн-17, 06:58 
>[оверквотинг удален]
>      PROT_EXEC      
> The pages can be executed
> И кончено, оно наамного быстрее костылей с проверками при каждой операции.
> Единственно, памяти "тратится" минимум PAGE_SIZE
>
 
> getconf PAGE_SIZE
> 4096
>

> и поэтому лепить для защиты стековых переменных/фрейма выходит вроде как все еще
> несколько накладно.

Стоит уточнить, что «тратится» из-за сторожевых страниц не просто память, а именно виртуальная; в физическую память это страницы не отображаются, поэтому все накладные расходы связаны с поддержанием служебных таблиц виртуальной памяти (чем они больше, чем чаще ЦП при обращении к ним промахивается мимо кэша и тем дольше их простой перебор).

Ответить | Правка | Наверх | Cообщить модератору

46. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +2 +/
Сообщение от Orduemail (ok), 20-Июн-17, 11:43 
> Там же неверняка накладные расходы на реализацию защищенной страницы не меньше?

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

А вот указатель стека проверять -- это реально накладные расходы, потому что стек реально реализован через регистр rbp, который указывает на вершину стека, и приложение с ним может играть как угодно. Выделить память под новый стек из кучи и нацелить rbp туда, например. Есть даже готовые функции в libc для подобной игры с rbp: о них можно почитать в info libc 'Non-Local exits'.

Большая часть софта не делает этого, оставляя всю работу со стеком компилятору. Но даже там проверки указателя стека могут оказаться накладным удовольствием. Указатель стека меняется при каждом вызове функции, при каждой инструкции push/pop, при каждом объявлении локальной переменной в C... И при этом компилятор, в общем-то, не знает границ стека, об этом наверное только компоновщик узнаёт, тот которые объектные файлы в готовый бинарь собирает. А может быть даже и он не знает, а уже динамический компоновщик устанавливает эти границы, когда грузит бинарь в память процесса. Но с этими тонкостями я не разбирался.

Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

48. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +2 +/
Сообщение от Олегemail (??), 20-Июн-17, 12:03 
rbp указывает на начало фрейма функции, на вершину стека указывает rsp
Ответить | Правка | Наверх | Cообщить модератору

49. "Раскрыты детали атаки Stack Сlash и 15 root-эксплоитов для р..."  +1 +/
Сообщение от Orduemail (ok), 20-Июн-17, 12:22 
> rbp указывает на начало фрейма функции, на вершину стека указывает rsp

Да, спасибо за поправку.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру