ВУЗ:
Составители:
Рубрика:
ЗАЩИТА ИНФОРМАЦИИ В КОМПЬЮТЕРНЫХ СЕТЯХ 55
статочно для выполнения некоторых функций вредоносного кода.
Обычная цель взломщика — получить полный контроль над маши-
ной.
Решением может служить следующее: передача некоторому привиле-
гированному процессу данных, которые интерпретировались бы им как
код. При этом отсутствие доступа на компьютер решается передачей уда-
ленных данных через демоны. Для выбора локальных привилегирован-
ных процессов (то есть при наличии доступа) также хорошо подходят
демоны, если они запущены от имени суперпользователя или SUID root-
программы.
Таким образом, необходима привилегированная программа, которая по-
лучает какие-то входные данные от непривилегированных пользователей
и необходимо заставить программу исполнить эти данные как код. Такой
прием получил название buffer overflow (переполнение буфера в стеке).
Технология переполнения локального буфера весьма универсальна и
будет работать практически в любой ОС.
После передачи управления надо выполнить следующие шаги:
— Найти подходящую программу, которая выполняется с большими
привилегиями. Если взломщику доступны исходные тексты, то осо-
бое внимание надо обратить на программы, содержащие функции
strcat(), strcpy(), sprintf(), vsprintf(), gets(), scanf() и т. п. Если ис-
ходных текстов нет, то остается ручной поиск уязвимых программ,
то есть подача на вход длинных строк и оценка результатов.
— Определить для найденной программы, какой размер буфера надо
использовать, где в буфере должен располагаться адрес возврата и
т.п.
— Написать код, на который осуществится переход.
— Каким-то образом внедрить свой код в систему. При этом злоумыш-
леннику надо проверить, чтобы вызываемая функция при обработке
этой строки не испортила данный код.
Также важно отметить, что технология переполнения буфера, являясь
самой распространенной и эффективной для удаленного исполнения ко-
да, то есть для реализации опасных угроз раскрытия и целостности,
но требующая значительных усилий по формированию соответствующей
строки, может применяться очень эффективно и для атак «отказ в об-
служивании». Здесь нет необходимости специально подбирать буфер с
правильным адресом возврата, а подойдет любой, и возврат совершится
на некий случайный адрес, вызвав тем самым аварийную остановку про-
граммы или всей ОС в целом.
Таким образом, явно или неявно предполагалось, что:
— параметры функций передаются через стек;
— адрес возврата также помещается в стек;
— локальные переменные располагаются в стеке;
— стек растет вниз;
— данные в стеке могут интерпретироваться как команды;
— должны существовать процессы или программы, имеющие уязвимый
код, подобный функции process_data();
— некоторые процессы или функции должны иметь высокие привиле-
гии.
Страницы
- « первая
- ‹ предыдущая
- …
- 53
- 54
- 55
- 56
- 57
- …
- следующая ›
- последняя »