1

По умолчанию при запуске приложений они ограничены объемом ОЗУ, к которому им разрешен доступ? Технически мой VLC не мог получить доступ к адресам памяти, используемым Chrome. Но как операционная система / компилятор может ошибочно разрешить доступ к адресу, код которого не разрешен? Я знаю, что многие «эксплойты» и «полезные нагрузки» используют этот факт и создают переменные, которые занимают слишком много места и «переполняются» на другие адреса, но как это происходит на самом деле?

Некоторые программы более склонны к этому, чем другие? Имеет ли значение, на каком языке они закодированы? Например, я знаю, что C может играть с памятью, а Java - нет.

Кроме того, каковы преимущества этого? Что если кто-то напишет вредоносный код для доступа к памяти, что он сможет сделать? Единственное, о чем я могу думать, это пароли / ключи, хранящиеся в оперативной памяти.

PS Я думал о том, чтобы поместить это в переполнение стека, но мой вопрос гораздо шире, чем просто связанный с перспективой программирования. Если я поместил это в неправильном месте, извините.

2 ответа2

2

Особый момент: «переполнение», обычно представляющее интерес, не позволяет одному приложению (процессу) перезаписать другое; скорее это просто данные, которые обрабатывает процесс, заставляя программу перезаписывать части себя (обычно стека, возможно, косвенно) этими данными, что затем позволяет захватить этот процесс.

Затем этот процесс может взаимодействовать с помощью обычного IPC и системных вызовов, чтобы получить доступ ко всему, что есть у вашей учетной записи. VLC не может получить доступ к области памяти Chrome с обычным адресом, но он может:

  • Притворись отладчиком, присоединяйся к процессу Chrome и модифицируй его.
  • Перепишите все ваши файлы и настройки учетной записи, чтобы каждый раз при входе в систему запускался его код.
  • Открытые сетевые подключения и распространение себя на другие машины.

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

1

как ни странно, это включает в себя переполнение - переполнение стека - использование тщательно созданного процесса, чтобы использовать пространство, превышающее необходимое, для изменения поведения целевой prpgramme или для ее сбоя

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .