Можно ли запускать программы без защиты неисполняемых сегментов в современных ядрах Linux?Linux

Ответить
Anonymous
 Можно ли запускать программы без защиты неисполняемых сегментов в современных ядрах Linux?

Сообщение Anonymous »

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

Код: Выделить всё

gcc -z execstack  -o 
Раньше этого было достаточно для получения кучи исполняемых файлов в Linux, поскольку, очевидно, все читаемые страницы тогда рассматривались как исполняемые. Но в более современных ядрах с этой опцией исполняемым становится практически только стек.
Я также хотел бы упомянуть два предыдущих вопроса из сети Stackexchange, касающихся этой темы:
  • Первый: относится к системному вызову mprotect, который позволяет вручную переопределить характеристики страниц изнутри программы. К сожалению, для моих целей этот подход неприменим, так как у меня нет такого контроля над программой и я пытаюсь в первую очередь установить возможность выполнения кода.
  • Во-вторых one: отмечает, что поведение execstack в Linux действительно менялось некоторое время между версиями ядра, поэтому обходным путем может быть использование старого ядра Linux (возможно, до 5.4.0) с опцией компоновщика -z execstack при компиляции. тот двоичный. К сожалению, сам вопрос (что привело к этому изменению) остается без ответа.
Итак, есть ли какой-нибудь способ в современном Linux запустить программу без защиты исполняемости на сегментах, не меняя сам код программы? В противном случае есть ли способ хотя бы сделать сегмент кучи/данных исполняемым? Или можно сделать так, что только стек вообще можно сделать исполняемым?

Подробнее здесь: https://stackoverflow.com/questions/792 ... tection-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»