
По умолчанию, когда приложения запускаются, они ограничены в объеме оперативной памяти, к которой им разрешен доступ, верно? Технически мой VLC не мог получить доступ к адресам памяти, используемым Chrome. Но как операционная система/компилятор могут ошибочно разрешить доступ к адресу, который коду не разрешен? Я знаю, что множество «эксплойтов» и «полезных нагрузок» используют этот факт и создают переменные, которые занимают слишком много места и «переполняются» на другие адреса, но как это происходит на самом деле?
Некоторые программы более склонны к этому, чем другие? Имеет ли значение, на каком языке они написаны? Например, я знаю, что в C разрешено играть с памятью, а в Java — нет.
Кроме того, какие преимущества это дает? А если кто-то написал вредоносный код для доступа к какому-то месту в памяти, что он может сделать? Единственное, что приходит мне на ум, это пароли/ключи, хранящиеся в оперативной памяти.
ПСЯ думал разместить это в Stack Overflow, но мой вопрос гораздо шире, чем просто связанный с перспективой программирования. Если я разместил его не в том месте, извините.
решение1
как ни странно, это действительно связано с переполнением -переполнение стека- использование тщательно продуманного процесса для использования пространства сверх положенного, чтобы изменить поведение целевой программы или вызвать ее сбой
решение2
Конкретный момент: «переполнения», которые обычно представляют интерес, не позволяют одному приложению (процессу) перезаписывать другое; скорее, они представляют собой просто данные, которые обрабатывает процесс, заставляя программу перезаписывать части самой себя (обычно стек, возможно, косвенно) этими данными, что затем позволяет перехватить управлениеэтот процесс.
Затем этот процесс может взаимодействовать с помощью обычного IPC и системных вызовов, чтобы захватить все остальное, к чему у вашей учетной записи есть доступ. VLC не может получить доступ к пространству памяти Chrome с помощью обычного адреса, но онможет:
- Притворитесь отладчиком, подключитесь к процессу Chrome и измените его.
- Перепишите все ваши файлы и настройки учетной записи так, чтобы их код запускался в будущем каждый раз при входе в систему.
- Открывает сетевые соединения и распространяется на другие машины.
За редкими исключениями, современные операционные системы, к сожалению, предполагают, что вы полностью доверяете каждой программе, которую запускаете, со всем, что есть в вашей учетной записи. Это предположение не было верным со времен несетевых систем с разделением времени, используемых исключительно экспертами (где защита, предоставляемая ОСзащищал пользователей друг от друга, а не из собственного программного обеспечения).