Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы и средства защиты информации.doc
Скачиваний:
9
Добавлен:
17.04.2019
Размер:
780.8 Кб
Скачать

Прикладные программы

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

Ошибки активно ищутся группами "хакеров" практически во всем более или менее распространенном ПО, однако, наибольшую известность приобретают, конечно, исследования программ, установленных почти у каждого пользователя. Так, например, в одной из недавних версий MicroSoft Internet Explorer'а была обнаружена ошибка, связанная с переполнением буфера, которая приводила к тому, что часть URL-адреса попадала на "исполнение" и трактовалась как последовательность команд процессора. При этом длины этого участка хватало, например, для того, чтобы загрузить на ЭВМ из сети троянскую программу и передать ей управление. В последующей версии ошибка была исправлена. Программа ICQ – самый популярный электронный пейджер в сети Интернет – в очередной своей версии была снабжена своими создателями возможностью поддерживать миниатюрный WWW-сервер. Однако, ошибка в его реализации позволяла при добавлении слева точек в имени первого каталога получать доступ ко всем файлам жесткого диска – открывался полный (!) сетевой доступ по чтению.

Многие атаки используют не только непосредственные ошибки в реализации ПО, но и непродуманные разработчиками аспекты использования стандартных возможностей программы. Так, пожалуй, самым ярким примером этого являются MACRO-вирусы в документах системы MicroSoft Office. Возможность исполнения макросов была встроена в эту систему из самых благих побуждений, но тот факт, что макросы могут запускаться на определенные события (например, открытие документа) и получать доступ на модификацию к другим документам, сразу же был использован создателями вирусов отнюдь не в благих целях.

К подобным же примерам следует отнести возможность запуска исполнимых DLL-файлов из HLP-файлов. Казалось бы, открывается безобидный текстовый файл справки, а оказывается он может честно инициировать вызов из прилагающейся DLL-библиотеки да еще и безо всякого уведомления об этом пользователя.

Моралью этого параграфа является правило "семь раз отмерь – один отрежь" на этапе разработки собственного программного обеспечения.

Ошибки, приводящие к возможности атак на информацию

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

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

Для целых и дробных чисел, значений времени и тому подобных типов данных запись производится всегда в фиксированном объеме (2 байта, 4 байта, 10 байт). А вот для строк и массивов данных проверки длины перед операциями записи необходимы. Для того, чтобы заставить ЭВМ выполнить код или записать данные туда, куда у него нет прав записи, злоумышленник специально заставляет систему обрабатывать строки очень большой длины, либо помещать в массив количество элементов большее, чем его объем. В случае успеха возможно либо попадание части строки в сегмент кода или стека с последующим исполнением, либо модификация каких-либо служебных данных, что позволит затем злоумышленнику войти в систему в обход системы защиты. Естественно, что содержимое конца строки (оказывающееся после переполнения буфера в ненадлежащей области памяти) подбирается специальным образом. Сами данные или строки можуг быть абсолютно бессмысленными.

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

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