защита IIS 6.0
безопасность по умолчанию
В прошлом разработчики включали в IIS множество пакетов по умолчанию: инсталляции серверов сети с кучей различных сценариев, обработчики файлов и т.д. И все это обеспечивало администраторам необходимую гибкость и непринужденность использования. Но этот подход увеличивал шанс взлома сервера IIS. В результате, IIS 6.0 разработан так, чтобы быть более безопасным, чем его предшественники.
Следующая таблица сравнивает заданные по умолчанию особенности IIS 5.0 и IIS 6.0.
IIS Компоненты | IIS 5.0 инст. по умолч. | IIS 6.0 инст. по умолч. |
Static file support | включено | включено |
ASP | включено | отключено |
Server-side includes | включено | отключено |
Internet Data Connector | включено | отключено |
WebDAV | включено | отключено |
Index Server ISAPI | включено | отключено |
Internet Printing ISAPI | включено | отключено |
CGI | включено | отключено |
Microsoft FrontPage® server extensions | включено | отключено |
Password change interface | включено | отключено |
SMTP | включено | отключено |
FTP | включено | отключено |
ASP.NET | Нет | отключено |
Background Intelligence Transfer Service | Нет | отключено |
Наиболее значимое изменение в IIS 6.0 не входят по умолчанию в сервер Windows 2003. Другие изменения включают:
Инсталляция по умолчанию только для статических страниц HTTP. Заданная по умолчанию инсталляция IIS 6.0 конфигурирована, чтобы обслуживать только статические страницы HTML; динамические страницы не разрешаются.
Не устанавливается никаких типовых (тестовых) приложений.IIS 6.0 не содержит никаких скриптов, подобных showcode.asp и codebrws.asp . Первоначально эти программы были разработаны, чтобы позволить программистам быстро просматривать их код подключения к базе данных и осуществлять его отладку. Однако, showcode.asp и codebrws.asp корректно не проверяют ввод, чтобы гарантировать, что запрошенный файл находится в пределах корневой веб-директории. Это позволяет взломщику просматривать любые файлы (включая те, которые содержат важные настройки конфигурации) в системе. Обратитесь по следующей ссылке для получения дополнительной информации об этой уязвимости:http://www.microsoft.com/technet /treeview/default.asp?url=/technet/security/bulletin/MS99-013.asp.
Улучшенный контроль прав доступа файловой системы.Анонимные пользователи больше не имеют прав на запись в домашнею директорию веб-сервера. Кроме того, FTP-пользователи изолированы в их собственных домашних каталогах. Эти ограничения препятствуют загрузке подозрительных файов в другие части файловой системы сервера. Такие атаки могут включать "дефейс" веб-сайтов, используя загрузку файлов в корневую директорию и удаленное выполнения команд через запуск исполняемого файла, который может быть загружен в каталог /scripts.
Нет исполняемых виртуальных директорий.Виртуальные директории не имеют прав на исполнение. Это предотвращает использование многочисленных "directory traversal" уязвимостей и MDAC-эксплойтов, которые существовали в прошлом.
Удален Sub-authentication модуль.IISSUBA.dll был удален из IIS 6.0 . Любые учетные записи, который требовали эти функциональные возможности в предыдущих версиях IIS, требовали привилегий "доступ к этому компьютеру из сети". Удаление этой DLL удаляет эту зависимость и, таким образом, уменьшает плоскость нападения, проводя все идентификации непосредственно через SAM или Active Directory.
Абсолютные пути отключены.Доступ к абсолютным путям в файловой системе заблокирован по умолчанию. Это должно предотвратить "directory traversal" атаки, которые могут позволить атакующему выходить за пределы корневой веб-директории и получить доступ к важным файлам файловой системы, например SAM-файлам. Обратите внимание, что это может причинить проблемы при переносе приложений, которые использовали абсолютные пути на предыдущих версиях IIS.
защищенная внутренняя архитектура
Фундаментальные изменения, заложенные на этапе проектирования IIS 6.0, включают улучшенную проверку правильности данных, усовершенствованное протоколирование, защиту от сбоя, изоляцию приложений и приверженность принципу минимальных привилегий.
улучшенная проверка правильности данных
Главная новая особенность IIS 6.0 - это HTTP драйвер режима ядра, HTTP.sys . Он добавлен не только для увеличения производительности и универсальности веб-сервера, но и для значительного усиления безопасности. HTTP.sys действует как шлюз для пользовательских запросов на веб-сервер. Вначале он анализирует запрос, затем отправляет его соответствующим процессам пользовательского уровня. Ограничение рабочих процессов в режиме пользователя препятствует им обращаться к привилегированным ресурсам в ядре системы. Таким образом, возможности атакующего, намеревающегося получить доступ к серверу, очень ограничены.
Драйвер режима ядра имеет несколько механизмов для увеличения защищенности внутренней архитектуры IIS 6.0. Эти особенности включают в себя защиту от потенциального переполнения буфера, улучшенные механизмы ведения логов в помощь средству реагирования на инциденты и расширенный синтаксический анализ URL для проверки правильности пользовательских запросов.
Чтобы препятствовать атакам на переполнение буфера или куче других, которые могут быть обнаружены в будущем, Microsoft использовала принцип "глубокой защиты" во внутренней архитектуре IIS 6.0. Это было достигнуто добавлением определенных возможностей синтаксического анализа URL к набору возможностей включенных в HTTP.sys. Эти особенности могут настраиваться изменением определенных значений системного реестра. Следующая таблица проводит обзор наиболее важных ключей реестра (могут быть найдены здесь: HKLM\System\CurrentControlSet\Services\HTTP\Parameters).
AllowRestrictedChars | Этот ключ принимает значение типа boolean, которое позволяет HTTP.sys принимать hex-коды символов в запросе URL. Значение по умолчанию - 0. Это рекомендованное значение, облегчающее задачу проверки правильности входящих данных на уровне сервера. Если ключ равен 1, злонамеренные символы могут быть закодированы в шестнадцатеричной системе счисления в попытке обойти проверку правильности ввода. |
MaxFieldLength | Этот ключ позволяет администратору установить максимальный размер (в байтах) для каждого поля заголовка. Значение по умолчанию - 16 Кб. |
MaxRequestBytes | Этот ключ устанавливает максимальное значение строки запроса и заголовков. Значение по умолчанию также 16 Кб. |
UrlSegmentMaxCount | Этот ключ определяет максимальное количество сегментов URL, принимаемых сервером. Фактически это ограничивает число слешей, которые могут быть включены пользователем в запросе URL. Рекомендуется устанавливать это значение исходя из глубины вашей корневой директории веб. Значение по умолчанию - 255. |
UrlSegmentMaxLength | Этот ключ устанавливает максимальное количество символов в любом сегменте пути URL. Значение по умолчанию - 260. |
EnableNonUTF8 | Значение этого ключа определяет допустимый набор символов. Заданное по умолчание значение 1 позволяет HTTP.sys принимать ANSI- и DBCS-закодированные URL в дополнение к URL, закодированным в формате UTF8. |
расширенные механизмы протоколирования
Всестороннее протоколирование - основное требование для успешного обнаружения и реагирования на инциденты безопасности. Microsoft осознала эту необходимость и включила исчерпывающий и надежный механизм протоколирования в HTTP.sys . HTTP.sys пишет в log-файл перед диспетчеризацией запроса к рабочему процессу. Это гарантирует, что причина ошибки будет зарегистрирована, даже если это заставит рабочий процесс завершить работу некорректно. Начало log-файла состоит из даты и времени возникновения ошибки, IP-адресов и портов отправителя и получателя, версии протокола, HTTP-запроса, URL, состояния протокола, идентификатора сайта и комментария об ошибке. Комментарий содержит детальную информацию о причине возникновения ошибки - может ли это быть по причине тайм-аута или из-за разрыва соединения вследствие неожиданного завершения рабочего процесса.
Пример log-файла HTTP.sys может быть найден по следующей ссылке:http://www.microsoft.com /technet/treeview/default.asp?url=/technet/prodtechnol/iis/iis6/proddocs/resguide/iisrg_log_qlow.asp.
защита от сбоя
В дополнения к настройкам в системном реестре, администраторы IIS 6.0 могут настроить сервер на автоматическое завершение или перезапуск рабочих процессов, приложения которых неоднократно завершались с ошибкой (в течение определенного времени). Это дополнительная гарантия защиты приложения от повторяющихся ошибок, которые могут быть индикаторами атак. Эта возможность названа Rapid-Fail Protection.
Эта функция может быть настроена через IIS Manager следующим образом:
- вIIS Managerразверните локальный компьютер;
- выберитеApplication Pools;
- щелкните правой кнопкой мыши на приложении и выберитеProperties;
- вHealthпоставьте галочку наEnable rapid-fail protection;
- в полеFailuresнапишите допустимое количество ошибок (перед завершением процесса);
- в полеTime Periodопределите количество минут, в течение которых ошибки будут накапливаться.
изоляция приложений
В предыдущих версиях IIS (5.0 и более ранние) невозможно было изолировать друг от друга веб-приложения. Таким образом часто ошибка одного приложения имела каскадный эффект для других веб-приложений на сервере. Однако расширение возможностей и внутренней архитектуры IIS 6.0 позволило изолировать веб-приложения в отдельные модули, названные пулами приложений. Каждый пул приложений обслуживает один или более независимых рабочих процессов. Это позволяет локализовать ошибку, предотвращая ситуацию, когда сбой одного процесса воздействует на другие. Это повышает надежность сервера и, следовательно, приложений, которые на нем находятся.
принцип минимальных привилегий
IIS 6.0 придерживается фундаментального принципа защиты - принципа минимальных привилегий. Это было достигнуто путем включения всего кода, который должен выполняться с правами Local System, в HTTP.sys. Все рабочие процессы выполняются как Network Service (Сетевая служба), новый тип учетной записи в Windows 2003 с чрезвычайно ограниченными правами. Далее, IIS 6.0 позволяет использовать средства командной строки только администраторам, таким образом предотвращая использование этих средств злонамеренными эксплойтами. Такие изменения внутренней архитектуры уменьшают вероятность компрометирования сервера через потенциальную уязвимость.
заключение
IIS 6.0 - шаг Microsoft в правильном направлении, помогающий организациям повысить свою безопасность. Он обеспечивает надежную и защищенную инфраструктуру для хостинга веб приложений. Улучшенная зашита в конфигурации по умолчанию - очевидный акцент к защите в процессе разработки и расширение возможностей мониторинга и протоколирования сервера IIS 6.0. Однако, администраторы не должны получить ложное ощущение защищенности, просто перейдя на эту платформу, а объединить переход на новую платформу с созданием многократных уровней защиты. Это соответствовало бы принципу "глубокой защиты" и создало бы надежный щит от угроз подобных Code Red или Nimda.
Rohyt Belani, Michael Muckin, перевод Андрея Грекова,grekov@cyberinfo.ru.
Сетевые решения. Статья была опубликована в номере 07 за 2004 год в рубрике save ass…