Яркой иллюстрацией инерции мышления могут служить запутанные движения планет, трактуемые астрологами как божественные предзнаменования. Однако еще в древности находились философы, замечающие, а не являются ли сложные перемещения на небе отражением совершенных траекторий в пространстве?
Проблема заключается в том, что неверное объяснение часто воспринимается истинным и в дальнейшем становиться настолько привычным, что и в голову не приходит перепроверить или рассмотреть его под другими углом зрения.
Так, например, давным-давно был написан простейший командный файл “test-cgi”, позволяющий с помощью “echo” контролировать переданные серверу переменные окружения. Казалось бы, в приведенной ниже программе (на диске, прилагаемом к книге, она находится в файле “/SRC/test-cgi”) просто не в чем ошибиться:
В таком (или почти в таком) виде скрипт прилагался ко многим WEB-серверам и широко распространился по сети. Администраторы без малейших опасений помещали его в исполняемую директорию и открывали доступ всем желающим. В конечном счете, это привело к внезапному росту успешных взломов. Механизм атаки заключался в «подсовывании» символа-джокера внешне безобидному скрипту “test-cgi”. Команда “echo” интерпретировала его как указание вывести список файлов, отвечающих заданному шаблону.
Например, список всех остальных скриптов в текущем каталоге можно было просмотреть так: “GET /cgi-bin/test-cgi?*”. На первый взгляд, в этом ничего опасного в это нет, но на самом деле, просмотр содержимого каталогов, открывает возможность для целенаправленной атаки. В сочетании с возможностью использования перенаправления ввода в почтовых адресах, передаваемых приложению SendMail, простор содержимого директорий, приводит к угрозе целенаправленной атаки.
Пример, приведенный ниже, демонстрирует просмотр содержимого корневого каталога одного из серверов - http://www.project.aha.ru [292]. Если в адресной строке браузера набрать “http://www.project.aha.ru/cgi/test-cgi?/usr/*” [293], то ответ сервера должен выглядеть приблизительно так [294] (жирным шрифтом выделено содержимое поля QUERY_STRING, возвращающее результат обработки запроса):
·
Проблему решили установкой кавычек вокруг “$QUERY_STRING” [295]. Какое-то время это сдерживало злоумышленников, но инерция мышления подвела разработчиков и на этот раз. Считалось, что “$QUERY_STRING”, это единственный параметр, который передается серверу пользователем, поэтому на все остальные не обратили никакого внимания. Но оказалось, что большинство серверов (включая самый распространенный из них - Apache) не проверяют синтаксической корректности содержимого поля «версия HTTP», указываемой при передаче запроса. В результате этого появляется возможность подставить вместо нее любую строку, например, “/etc/*”. Демонстрация такой атаки приведена ниже [296] (жирным шрифтом выделено поле “SERVER_PROTOCOL”, которое при нормальном развитии событий должно содержать версию HTTP, используемую клиентом, а в данном случае список файлов и папок директории “/etc”):
После исправления этой ошибки, настал черед “REMOTE_USER”, “CONTENT_TYPE”, “USER_AGENT” и т.д.
Отсюда вытекает ряд неутешительных заключений. Нельзя полагаться ни на какие стандартные библиотеки и творения сторонних разработчиков. Массовость и идентичность - вот основное оружие злоумышленников. Чтобы исследовать скрипт, прежде всего, необходимо получить его исходный код. На правильно сконфигурированном сервере это невозможно, но никакая защита не в состояние предотвратить анализ общедоступных программ. А, получив в свое распоряжение общедоступный скрипт, злоумышленник может попытаться обнаружить содержащиеся в нем ошибки. А, обнаружив, атаковать жертву, использующую такой скрипт.
Возникает противоречивая ситуация. Программировать самому не рекомендуется, ввиду отсутствия у подавляющего большинства необходимого опыта и навыков создания безопасных приложений. Но и фирменные разработки не застрахованы от ошибок. Так, поистине огромное количество ошибок содержится в расширениях к FrontPage (FPE).
При установке FrontPage 1.1, файлы /_vti_pvt.administrator.pwd, /_vti_pvt/authors.pwd и /_vti_pvt/service.pwd по умолчанию становятся общедоступными и не требуют от пользователя авторизации.
После установки FPE на Apache, открывается доступ к директории /_vti_bin, с правами записи и исполнения файлов даже для неавторизированных пользователей.
Интуитивно кажется, - свои скрипты должны оказаться надежнее: какие бы ошибки не были допущены, недоступность исходного текста программы не позволит злоумышленнику их обнаружить (или, по крайней мере, чрезвычайно затруднит их поиск). Однако практика доказывает обратное. И не удивительно, - ведь программисты склонны к одним и те же типовым ошибкам.