- •Формальные модели шифров
- •Математическая модель шифра замены
- •Шифры, не распространяющие искажений типа «замена знаков»
- •Шифры, не распространяющие искажений типа «пропуск-вставка знаков»
- •Последовательность атаки
- •Переполнение буфера
- •Что такое переполнение буфера
- •Принцип действия
- •Виды переполнения буфера
- •Почему так много уязвимых программ
- •Способ защиты
- •Десять примеров переполнения буфера
- •Что такое netcat?
- •Способ применения
- •Эксплоиты для взлома nt
- •Брешь в безопасности rds службы iis
- •Совместно используемые ресурсы
- •Взлом с помощью относительного пути
- •Захват dsn с использованием утилит odbc Datasource
- •Поглощение ресурсов процессора с использованием mstask.Exe и Microsoft Internet Explorer
- •Запуск программ с помощью ie 5.X или Outlook
- •Запуск команд на Web-сервере с помощью iis 5.0
- •Возможность подмены контроллера домена в wins
- •Методы взлома unix
- •Что такое cgi-программа?
- •Принцип работы
- •Подробное описание
- •Способ применения
- •Симптомы атаки
- •Методы защиты
- •Подробное описание
- •Способ применения
- •Симптомы атаки
- •Методы защиты
- •Версия ос
- •XTest позволяет клиенту переправлять события другому клиенту. Такими событиями могут быть нажатия клавиш. При этом событие через сервер может пересьиаться другому клиенту в
- •Дополнительная информация
- •Люки и троянские кони
- •Подмена системных утилит
- •Подмена на уровне файлов
- •Защита от подмены на файловом уровне
- •Наборы утилит для nt
- •Эксплоит Brown Orifice
- •Программы слияния
- •Сокрытие следов
- •Как скрыть следы
- •Файлы журналов
- •Файлы журналов Linux
- •Взгляд со стороны взломщика
- •Invisible.С — прячет все следы работы взломщика от имени пользователя root в системе.
- •Защита файлов журналов в unix
- •Регулярное проведение резервного копирования
- •Использование одноразовых носителей
- •Кодирование
- •Регулярный просмотр файлов журналов
- •Ведение журналов в nt
- •Взгляд со стороны взломщика
- •Защита файлов журналов в nt
- •Защита от изменений информации о файле
- •Дополнительные файлы
- •Защита от размещения дополнительных файлов
- •Сокрытие следов в сети
- •Общая картина
- •Сценарии взлома
- •Сканеры телефонных линий
- •Другие типы взлома
- •Переполнение буфера в bind 8.2
- •Взлом с помощью cookie
- •Области доступа snmp
- •Анализ сетевых пакетов и dsniff
- •Взлом pgp adk
- •Уязвимость паролей cisco ios
- •1. Получить файлы настройки через snmp
- •Вклинивание в процесс передачи ключа
- •Взлом с нттр-туннелированием
Виды переполнения буфера
Учитывая принцип, по которому производятся такие атаки, злоумышленник может нанести вред системе двумя способами: атакой DoS или незаконным получением доступа. Первый способ самый легкий, при его использовании можно разрушить слаженную работу системы. При переполнении буфера в стек поступает слишком много информации, в результате уже находящиеся там данные будут перезаписаны новыми. А в стеке хранятся многие важные для нормальной работы операционной системы данные, без которых она вообще может перестать функционировать.
Как вы уже знаете из предыдущей главы, "Отказ в обслуживании", таким образом производится атака отказа в обслуживании. После него придется перезагружать компьютер, если же это будет центральный сервер сети, то последствия предугадать нетрудно.
Уже отмечалось, что еще один способ переполнения буфера заключается в выполнении подготовленного машинного кода. Если злоумышленник будет достаточно компетентен, то он сможет перезаписать в стеке указатель адреса и большую часть данных. После этого указатель передаст управление вредоносному коду вместо нормального, что позволит сделать все что угодно — от вывода файла паролей до создания новой учетной записи пользователя.
Почему так много уязвимых программ
Одна из причин переполнения буфера состоит в отсутствии контроля входных данных. Если бы программисты или разработчики выделяли дополнительное время на построение более стабильного кода (с проверкой данных), то возможностей для переполнения буфера было бы гораздо меньше.
Обычно разработчики проверяют, достаточно ли памяти для размещения там переменной с необходимыми для работы данными. Если все сходится, они умывают руки и идут дальше. Когда же злоумышленник ищет в программе возможные "дыры", то проверяется работа приложения в экстремальных условиях. Иногда бывает так, что после выпуска программы она безупречно работает несколько лет, потому что ею правильно пользовались. Затем вдруг появляется хакер и задает интригующий вопрос: "а что если я дам программе другие виды данных" или "а что будет, если ввести больше информации, чем нужно?". Довольно мало программ осуществляют нормальный контроль за ошибками, поэтому как только появляются такие любопытствующие, приложения "умирают" одно за другим..
Возьмем, к примеру, программу Ping. Верой и правдой служила она людям больше чем 20 лет, без единого нарекания. Затем какая-то светлая голова догадалась в начале 90-х отправить пакеты ping с большим количеством данных, и системы во всем мире стали валится как деревья в ураган. Эта атака теперь известна как "смертельный ping" (ping of death), и она имела значительно влияние на Internet.
Это далеко не единичный случай, программы которые работали нормально и подвергались переполнению буфера встречаются очень часто. Если приложение уже давно на рынке, то его можно считать стабильным с точки зрения функциональности, но никак не безопасности. Иногда сразу после разработки на программы совершаются успешные нападения, так как в них есть уязвимые фрагменты, чувствительные к переполнению буфера. В большей степени это касается новых версий многих операционных систем, равно как и программ для них.
Давайте как на пример переполнения буфера взглянем на программу, которая запрашивает имя пользователя и затем выводит на экран информацию о нем. Так как у большинства людей короткие имена, пусть для имени будет зарезервировано 50 символов (едва ли у кого-то будет больше). Такой размер поля вполне достаточен, но только при условии корректного использования программы. Не забывайте, в наше время нельзя полагаться только на порядочность людей. Для обеспечения безопасности необходимо вводить в программу фрагменты кода, которые будут тщательно проверять соответствие вводимых данных нужному типу и размеру. Тогда при попытке взлома злоумышленник уйдет ни с чем.
Пример переполнения буфера
Здесь представлен более конкретный пример переполнения буфера. Итак, пускай буфер рассчитан на 256 символов. Так как нет контроля за ошибками, хакер вводит в буфер 512 символов, что приводит к его переполнению. Это элементарный пример атаки DoS, злоумышленник пытается ввести в стек как можно больше данных, надеясь что это приведет к разрушению системы. Вот исходный код примера:
void func(char *str)
{
int i=0; char buffer[256];
while(str[i]!=’\0’)
{
buffer[i]=str[i];
i++;
}
buffer[i]=’\0’;
return;
}
Контейнер рассчитан на 256 символов, в него вводится 512, и готово типичное переполнение буфера.