Н.Н. ЖУРАВЛЕВ, И.В. ЗЕЛЕНЧУК, Д.А. СИМОНОВ
Уральский государственный университет им. А. М. Горького, г. Екатеринбург,
Институт математики и механики УрО РАН, г. Екатеринбург
ПРОБЛЕМЫ БЕЗОПАСНОСТИ ПРИ ИСПОЛЬЗОВАНИИ МОДУЛЕЙ В ВЕБ-СЕРВЕРЕ APACHE
При использовании модулей в Apache, могут возникнуть утечки файловых де-скрипторов сервера, что позволит пользоваться ими из скриптовых веб-приложений. Команда «Хакердом» УрГУ разработала патч для PHP, решающий данную пролему.
Apache HTTP Server – является одним из популярнейших веб сер-веров с открытым исходным кодом, который используется более чем на 60% всех веб серверов в интернете. Он имеет модульную архитектуру, что позволяет без труда создавать для него новые расширения и динамически их подключать без повторной компиляции самого сервера. Подобная ар-хитектура позволяет очень гибко конфигурировать сервер. Существует более десятка различных модулей для работы с ним, это mod_proxy, mod_ssl, mod_rewrite, mod_log_config и т.д., а так же модули для обработ-ки динамического контента, таки как mod_php, mod_perl, mod_pyton и mod_ruby.
Модули являются частью самого сервера и все что они обрабаты-вают, исполняется внутри веб сервера. Таким образом, при выполнении скриптов модулями для обработки динамического контента, скрипт унас-ледует всю среду веб сервера (открытые дескрипторы, права и группу процессов и т.д.), что дает возможность манипулировать дескрипторами и управлять процессами Apache. Подобное поведение во многих ситуациях недопустимо, например, когда на веб сервере находится несколько тысяч виртуальных хостов, так как любой пользователь, который может испол-нить скрипт на сервере через модуль Apache сможет получить полный контроль над сервером.
В большинстве случаев, на многопользовательских веб серверах используется только mod_php, для обработки PHP сценариев. Сам язык PHP не позволяет работать с открытыми дескрипторами веб сервера или посылать сигналы процессам, что, по сути, снимает все проблемы связан-ные с наследованием прав и открытых дескрипторов. Однако PHP имеет несколько функций (system, exec, popen и т.д.) для вызова внешних про-грамм, которые при своей работе создают новый процесс (запуск внеш-ней программы) и передают ему всю среду работы скрипта, т.е. веб серве-ра Apache. Таким образом, используя эти функции можно вызвать про-грамму, которая, унаследовав все открытые дескрипторы Apache, подме-нит запись в лог файле веб сервера и/или займется обработкой соедине-ний на прослушиваемых веб сервером портах [1].
В PHP существует режим safe_mode, который во многом решает проблему прав, но он не распространяется на внешние программы.
Как правило, при вызове внешних программ дескрипторы закры-ваются, но разработчики PHP этого делать не хотят [2][3]. Поэтому ко-мандой «Хакердом» УрГУ (http//www.hackerdom.ru) был разработан патч, который, при запуске нового процесса закрывает все файловые дескрип-торы Apache, а затем, используя схему suexec меняет права, что позволят безопасно выполнять внешние программы из PHP сценариев. Следует отметить, что в Microsoft IIS Web-Server утечки дескрипторов нет.
Список литературы
1. Пример программы прослушивающей 80 порт:
http://hackerdom.ru/~dimmo/phpexpl.c
2. Утечка дескрипторов в mod_php:
http://bugs.php.net/bug.php?id=38915
3. Apache leaking file descriptors to cgi-bin programs:
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=82142