- •Формальные модели шифров
- •Математическая модель шифра замены
- •Шифры, не распространяющие искажений типа «замена знаков»
- •Шифры, не распространяющие искажений типа «пропуск-вставка знаков»
- •Последовательность атаки
- •Переполнение буфера
- •Что такое переполнение буфера
- •Принцип действия
- •Виды переполнения буфера
- •Почему так много уязвимых программ
- •Способ защиты
- •Десять примеров переполнения буфера
- •Что такое 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
- •Вклинивание в процесс передачи ключа
- •Взлом с нттр-туннелированием
Переполнение буфера
В наше сумасшедшее время программисты связаны очень жесткими сроками при создании новых приложений. Компании — производители программного обеспечения вынуждены сокращать время разработки, пытаясь придерживаться совершенно нереального графика. Плюс ко всему, иногда в самый последний момент добавляются новые возможности и элементы, дабы обойти ближайших конкурентов. Объединяем все эти факторы — и в итоге перед нами вечно чем-то занятые программисты, все делающие в последнюю минуту и не успевающие провести хотя бы минимальную проверку системы.
Разработчики представляют пользователю приложение, в котором работает большинство функций, а если что-то и барахлит, то для этого в компании есть консультанты и прочие специалисты из службы поддержки.
Главная связанная с этим проблема (кроме, конечно, того, что большинство покупателей крайне недовольны обилием ошибок и неисправностей, ведь они считают, что за полную цену приобрели протестированный продукт) состоит в угрозе безопасности всей системы.
Разработчики просто физически не успевают сделать программу достаточно устойчивой, что влечет за собой многие неприятности. Одна их них — это отсутствие нормальной проверки ошибок. Контроль входных данных заключается в проверке и анализе той информации, что поступает к программе. Например, если программа ожидает ввод цифр, а вместо этого поступают буквы, система контроля проверяет входные данные, и если они неправильные, не допускает их к дальнейшей обработке, выводя сообщение об ошибке. Основная задача такой проверки состоит в предотвращении обработки неправильных данных. Без нее программа принимает информацию и допускает ее к переработке, что приводит к переполнению буфера и другим неприятностям. Проверка ошибок может проводится двумя способами: либо самой программой, что предпочтительнее, либо внешней оболочкой, которая вызывает приложение. Последний способ получил широкое распространение в технологиях Internet, таких, как CGI (Common Gateway Interface). Большинство программ CGI вызываются не прямым обращением, а через Web-страницу, которая получает введенные пользователем данные и направляет их на дальнейшую обработку к программе CGI. В этом случае оболочкой служит Web-страница, она осуществляет проверку соответствия введенной информации. При этом контроль может проводить и сама CGI-программа, если такая возможность в ней предусмотрена.
Я считаю, что проверка ошибок должна проводится в обоих случаях. Один из основных постулатов безопасности — многоуровневая защита, т.е. для эффективной защиты информации должно быть несколько механизмов безопасности, взаимно дополняющих друг друга. Так что если контроль за ошибками будет проводится в двух местах, надежность программы резко увеличится.
Подобная проверка нужна не только для защиты от неопытных или безалаберных пользователей. Ведь если бы все работали, как того требуют правила использования приложений, то наша жизнь стала бы немного проще. Однако раз люди не всегда делают то, что от них ожидает программа (не важно, случайно или умышленно), приложение может завершить работу, и это еще не самое худшее. В книге мы будем встречаться с описанием разных проблем, вызванных отсутствием корректного контроля над ошибками в программе, что может привести в том числе и к переполнению буфера, о котором речь пойдет далее в этой главе.