Стековая память: особенности

cтековая память

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

Стек

Атакующие просто обожают систему, на которой могут выполнить команды. Чтобы понять, как переполнение стековой памяти предоставляет такой вид доступа, необходимо изучить важный элемент в архитектуре большинства современных компьютерных систем — стек.

Стек — структура данных, где содержится важная информация для активных процессов. Стек работает наподобие сверхоперативной памяти системы. Система делает необходимые ей пометки, которые нужно сохранить, и помещает их в стек -специальную зарезервированную область памяти. Стеки похожи на стопку посуды, так как работают по принципу «последним вошел, первым вышел» (Last-In, Firts-Out — LIFO). Когда вы собираете стопку посуды, вы кладете одну тарелку на другую. Когда же требуется убрать тарелку из стопки, сначала вы возьмете верхнюю тарелку — ту, которую вы положили последней. Аналогично, если система помещает данные в стек, элементы стека один за другим перемещаются вниз. При необходимости получить данные из стека система возьмет сначала последний помещенный ею в стек элемент.

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

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