#ос #уязвимости #ассемблер
Приветствую. Есть такая штука, как переполнение буффера: мы затираем адрес возврата в стеке на какой-то другой, по которому расположены инструкции, которые мы хотим выполнить. И скорее всего на адрес, который принадлежит сегменту стека (ну или кучи). Почему процессор, когда EIP указывает на адрес не из сегмента кода, не паникует и не выдает ошибку сегментации? Разве это не отслеживается флагами в дескрипторе сегментов? Википедия говорит, что такой защиты нет, но тогда возникает разумный вопрос, почему?
Ответы
Ответ 1
По поводу дискуссии, развернувшейся в комментариях (о случайном расположении стека в памяти), можно почитать про Address Space Layout Randomization. По поводу возможности или невозможности исполнения памяти мне было интересно почитать о PaX. Случайно наткнулся на статью Касперски Переполнение буфера на системах с неисполняемым стеком, теперь знаю много умных слов :)
Комментариев нет:
Отправить комментарий