Контакты

Для связи с нами можно использовать:
irc://irc.chatnet.ru:#gfs
icq://546460
email://cobalt[@]gfs-team.ru

Все материалы предоставлены только с ознакомительной целью
ГлавнаяСтатьиПереводыБезопасность Apache2: Шаг-за-Шагом
© перевод Cobalt 13.07.2006 статья не оптимизирована

 Перед вами перевод четвертой статьи Артура Маджа из цикла Шаг-за-Шагом -
Безопасность Apache 2. Перевод осуществлен в рамках проекта GFS. Перевел Cobalt.
Оригинал статьи на английском можно найти тут:
http://www.securityfocus.com/infocus/1786 В случае выбора вебсервера, Apache имеет ряд приимуществ перед конкурентами. Среди них стабильность и открытый исходный код. Но вот выбрать версию сервера, далеко не так просто. С одной стороны, наилучшим решением кажется использование самой популярной версии используемой миллионами потребителей - 1.3, но с другой, может стоит воспользоваться улучшеной 2.0 ? Несмотря на то что новая версия имеет на много более улучшеные характеристики, некоторые люди все еще выбирают версию 1.3, потому что по их мнению эта ветвь более стабильна. Конечно в таком мнении есть своя доля истины. Из-за того что 1.3 в течении довольно длительного времени использовалась миллионами пользовате- лей, новые уязвимости найти в ней довольно-таки не просто. В то время, как 2.0 может иметь их в себе довольно много. В продолжение серии Шаг-за-Шагом (Securing Apache, Securing PHP, and Securing MySQL)(прим. переводчика: все их переводы имеются на нашем сайте), эта статья рассказывает как установить и настроить Apachw 2.0 с наименьшим риском второжения в случае обнаружения новых уязвимостей в этом програмном продукте. Таким образом, вы сможете насладиться новыми характеристиками Apache не тревожась о своей безопасности, будь эта угроза мнимой, или реальной. Функциональные требования В мире безопасности есть несколько золотых правил, которые всегда должны выполняться. Одно из этих правил состоит в том, что только обсолютно необхолдимые части софта должны быть использованы. Все остальные компоненты должны быть задисэйблены, сделаны труднодоступными или даже неустановлеными вовсе. Логика стоящая за таким правилом довольно проста - если будет установлен софт имеющий много дополнительных компонентов, то обнаружение уязвимости в одном из них, ставит под угрозу атаки всю систему. С другой стороны, если будут включены только самые необходимые компоненты, в случае обнаружения нового бага, не будет гарантии что все ПО уязвимо - потому что найденый баг может затрагивать неподключенные или неустановленные компоненты. Вероятность взлома в этом случае очевидно меньше чем при дефолтовой установке. И так, перед установкой Apache 2.0, очень важно знать, какие конкретно функцио- нальные возможности от него потребуются. Это поможет составить список необходи- мых модулей. Изходя из вышеописанного правила, мы будем применять самую основную конфигура- цию сервера: * Только статические HTML страницы будут на сервере. * Сервер должен потдерживать виртуальные хосты. * Доступ к некоторым страницам будет разрешен только с определенных IP или определенным пользователям (базовая аутентификация) * Сервер должен вести логи всех запросов (включая информацию о браузере) Как вы наверно заметили, приведенная конфигкрация не потдерживает CGI скриптов, SSL протокола или других расширеных функций апача. Это потому что главная цель данной статьи заключается в том чтобы показать метод защиты апача, не отвлекаясь на практические элементы. Если же понадобится дополнительная функцио- нальность, читатель может использовать приведенное решение как точку отсчета, наращивая дополнительные модуля, например, mod_ssl, mod_cgi или другие. Требования безопасности Чтоб обеспечить как можно болшей уровень безопасности, и втожевремя сохранить совместимость с другими ОС, будут применены следующие требования: Сетевое окружение * Вебсервер будет защищен фаерволом; правила которого будут разрешать входящий трафик на 80/tcp и весь исходящий HTTP трафик. За исключением некоторох ICMP сообщений (таких как source-quench, time-exceed, parameter-problem, destination-unreachable), все остальные пакеты должны блокироваться. * Должна использоваться система обнаружения вторжения. Также необходимо контролировать логи апача. Опреационная система * Операционная система должна быть как можно более защищенной; все неиспользуемые компоненты должны быть удалены. * Если потдерживается такая возможность, то ОС недолжна позволять выполнять программы в стеке. * Все неиспользуемые сетевые сервисы должны быть отключены. * Количство SUID/SGID файлов должно быть минимальным. Вебсервер Apache * Только обсалютно необходимые модуля должны быть включены; остальные должны быть отключены. * Все диагностические вебстраницы и автоматическая индексация директорий должны быть отключены. * Сервер по возможности должен показывать как можно меньшее кол-во информации о себе. Это покрайне мере затруднит злоумышлиннику его задачу. * Веб сервер должен быть запущен под выделенным UID/GID, неиспользуемыми никакими другими процессами. * Процессы апача, должны иметь ограниченный доступ к системе (chrooting) * В чрутовом окружении апача, недолжно быть никаких командных оболочек (/bin/sh, /bin/bash) -- это сделает затруднительным процесс использо- вания эксплойтов. Установка Опреационной Системы Первым и самым важным шагом, будут выбор ОС под которой будет запущен вебсервер. Далее будет рассказано как защитить Apache на FreeBSD (5.1), но читатель свободен в выборе любой Unix-like системы. В соответствии с нашими требованиями безопасности, после установки операционная система должна бать защищена от удаленных и локальных атак. В случае выбора UNIX/Linux/BSD дистрибутивов, довольно легко установить только ядро, и минимальный набор необходимых компонентов. Установить последние патчи на ядро и ПО тоже не должно составить ни какого труда. Также рекомендуется переодически синхронизировать системные часы с сервером времени используя Network Time Protocol (NTP), и отсылать логи на удаленный выделеный сервер. После того как система подготовлена, мы можем приступить к установке Apache 2.0 Первым шагом будет создание выделенных UID/GID. Для примера на FreeBSD это делается так: pw groupadd apache pw useradd apache -c "Apache Server" -d /dev/null -g apache -s /sbin/nologin Дочерние процессы апача будут запускаться под правами пользователя и группы apache. Выделение отдельного акаунта под Apache проведет разделение прав, и защитит нас от возможных проблем безопасности, когда разные процессы запускаются под одним аккаунтом (например nobody). Скачивание софта Дальше, скачаем и распакуем последнюю версию апача. Выше говорилось, что мы отключим некоторые модули в процессе компиляции, поэтому необходимо скачать именно исходники а не бинарники. Также желательно проверить PGP сигнатуру скачанного софта, чтобы убедиться что он полный и не измененный. lynx http://httpd.apache.org/download.cgi gpg --import KEYS gpg httpd-2.0.49.tar.gz.asc gpg: Good signature from "Sander Striker "
tar zxvf httpd-2.0.49.tar.gz
cd ./httpd-2.0.49/

Выбор модулей Apache После того как Apache скачен и рапакован, мы должны выбрать какие модуля будут включены, а какие удалены. Краткое описание всех модулей Apache 2.0 вы можете найти на http://httpd.apache.org/docs-2.0/mod/ Для выполнения требований по функциональности и безопасности, мы будем компилировать только следущие модули: core - Ядро Apache. Требуется в любом случае. http_core - Ядро http. Требуется для Apache 2.0. prefork - Multi-Processing Module (MPM) обеспечивает многозадачность. Может быть заменен другими модулями т.к. worker , threadpool etc. MPM требуется для Apache 2.0. mod_access - Контролирует доступ основываясь на клиентсокм hostname, IP или других характеристиках клиентского запроса. Поэтому что этот модуль нужен для потдержки "order", "allow" и "deny" директивы, он должен быть включен. mod_auth - Требуется как инструмент для аутентификации пользователей с исполь- зованием текстовых файлов(HTTP Basic Authentication), как определено в функциональных требованиях. mod_dir - Требуется для поиска и использования индексных файлов: "index.html", "default.htm", etc. mod_log_config - Требуется для возможности настройки логгинга. mod_mime - Требуется для установки характеристик, кодировки контента, заголовка, языка, и MIME типов документов. В виду того что мы хотим включить только минимальное число модулей, мы скомпилируем их статически. Благодаря этому, мы исключим возможность обнаружения уязвимостей в модуле mod_so. Компиляция и установка софта Теперь мы нвстроим, соберем и установим вебсервер Apache: ./configure --prefix=/usr/local/apache2 --with-mpm=prefork --disable-charset-lite --disable-include --disable-env --disable-setenvif --disable-status --disable-autoindex --disable-asis --disable-cgi --disable-negotiation --disable-imap --disable-actions --disable-userdir --disable-alias --disable-so make su umask 022 make install chown -R root:sys /usr/local/apache2 После установки, мы должны убедиться что только необходимые модуля включены: /usr/local/apache2/bin/httpd -l Compiled in modules: core.c mod_access.c mod_auth.c mod_log_config.c prefork.c http_core.c mod_mime.c mod_dir.c Настройка Apache Перед первым запуском, нам также надо изменить конфигурационный файл апача. Нам надо сделать это, потому что в дефолтовом файле используются модуля которые мы отключили и без изменения Apache не запустится. Итак, нам надо удалять старый /usr/local/apache2/conf/httpd.conf, и создать новый httpd.conf, поместив в него следущее: # ================================================= # Basic settings # ================================================= Listen 0.0.0.0:80 User apache Group apache ServerAdmin webmaster@www.ebank.lab UseCanonicalName Off ServerSignature Off HostnameLookups Off ServerTokens Prod ServerRoot "/usr/local/apache2" DocumentRoot "/www" PidFile /usr/local/apache2/logs/httpd.pid ScoreBoardFile /usr/local/apache2/logs/httpd.scoreboard DirectoryIndex index.html # ================================================= # HTTP and performance settings # ================================================= Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxClients 150 MaxRequestsPerChild 0 # ================================================= # Access control # ================================================= Options None AllowOverride None Order deny,allow Deny from all Order allow,deny Allow from all Order allow,deny Allow from all # ================================================= # MIME encoding # ================================================= TypesConfig /usr/local/apache2/conf/mime.types DefaultType text/plain AddEncoding x-compress .Z AddEncoding x-gzip .gz .tgz AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-tar .tgz # ================================================= # Logs # ================================================= LogLevel warn LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent ErrorLog /usr/local/apache2/logs/error_log CustomLog /usr/local/apache2/logs/access_log combined # ================================================= # Virtual hosts # ================================================= NameVirtualHost * DocumentRoot "/www/www.ebank.lab" ServerName "www.ebank.lab" ServerAlias "www.e-bank.lab" ErrorLog logs/www.ebank.lab/error_log CustomLog logs/www.ebank.lab/access_log combined DocumentRoot "/www/www.test.lab" ServerName "www.test.lab" ErrorLog logs/www.test.lab/error_log CustomLog logs/www.test.lab/access_log combined Можно заметить следущие отличия от файла по умолчанию: * Количество подключеных модулей сведено к минимуму. * Процесы Apache настроены на запуск под выделенными UID/GID * Информация о сервере сведена к минимуму. * Установлены более жесткие права доступа к серверу. Как было заявлено в наших требованиях функцианальности, было создано два виртуальных хоста: * www.ebank.lab (alias: www.e-bank.lab) * www.test.lab Содержимое данных хостов, физически должно находится в /www, поэтому перед запуском апача, надо создать там папки с простыми вебстраницами: mkdir -p /www/www.ebank.lab mkdir -p /www/www.test.lab echo "eBank.lab works!" > /www/www.ebank.lab/index.html echo "Test.lab works!" > /www/www.test.lab/index.html chmod -R 755 /www chown -R root:sys /www Наконец, мы можем запустить Apache и протестировать его рабочие св-ва: /usr/local/apache2/bin/apachectl start Если созданые сайты доступны из браузера, ожно его остановить /usr/local/apache2/bin/apachectl stop и начать процесс чрутинга. Если же что-то не работает, проанализируйте лог файлы, или запустите truss (или strace): truss /usr/local/apache2/bin/httpd Замечу, что для пользователей Linux, необходимо запускать stace. Проанализировав вывод этих команд можно понять и устранить причину неисправности. Чрутинг Сервера Следующим нашим шагом станет ограничение доступа апачевских процессов к системе. Технология чрутинга довольно подробно описана в одной из предыдущих статей. Вообщем, создадим структуру директорий: mkdir -p /chroot/httpd/dev mkdir -p /chroot/httpd/etc mkdir -p /chroot/httpd/var/run mkdir -p /chroot/httpd/usr/lib mkdir -p /chroot/httpd/usr/libexec mkdir -p /chroot/httpd/usr/local/apache2/bin mkdir -p /chroot/httpd/usr/local/apache2/lib mkdir -p /chroot/httpd/usr/local/apache2/logs/www.ebank.lab mkdir -p /chroot/httpd/usr/local/apache2/logs/www.test.lab mkdir -p /chroot/httpd/usr/local/apache2/conf mkdir -p /chroot/httpd/usr/local/lib mkdir -p /chroot/httpd/www Владельцем директорий будет root, и всем остальным будет запрещено что-либо менять в этом дереве: chown -R root:sys /chroot/httpd chmod -R 0755 /chroot/httpd Дальше, мы создадим специальное уст-во /dev/null: ls -al /dev/null crw-rw-rw- 1 root wheel 2, 2 Mar 14 12:53 /dev/null mknod /chroot/httpd/dev/null c 2 2 chown root:sys /chroot/httpd/dev/null chmod 666 /chroot/httpd/dev/null Также нам надо создать устройство /chroot/httpd/dev/log чтобы наш сервер мог работать. В случае FreeBSD надо добавить следущую строку к /etc/rc.conf: syslogd_flags="-l /chroot/httpd/dev/log" Для того чтобы внесенные изменения вступили в силу, надо перестартовать syslog демон с новыми параметрами: kill `cat /var/run/syslog.pid` /usr/sbin/syslogd -ss -l /chroot/httpd/dev/log Следующим шагом станет копирование необходимых программ, библиотек и конфигов в новое дерево директорий. Для FreeBDS 5.1 список будет таким: cp /usr/local/apache2/bin/httpd /chroot/httpd/usr/local/apache2/bin/ cp /usr/local/apache2/lib/libaprutil-0.so.9 /chroot/httpd/usr/local/apache2/lib/ cp /usr/local/apache2/lib/libapr-0.so.9 /chroot/httpd/usr/local/apache2/lib/ cp /usr/local/apache2/conf/mime.types /chroot/httpd/usr/local/apache2/conf/ cp /usr/local/apache2/conf/httpd.conf /chroot/httpd/usr/local/apache2/conf/ cp /usr/local/lib/libexpat.so.4 /chroot/httpd/usr/local/lib/ cp /usr/lib/libc.so.5 /chroot/httpd/usr/lib/ cp /usr/lib/libcrypt.so.2 /chroot/httpd/usr/lib/ cp /usr/lib/libm.so.2 /chroot/httpd/usr/lib/ cp /usr/libexec/ld-elf.so.1 /chroot/httpd/usr/libexec/ cp /var/run/ld-elf.so.hints /chroot/httpd/var/run/ cp /etc/hosts /chroot/httpd/etc/ cp /etc/nsswitch.conf /chroot/httpd/etc/ cp /etc/resolv.conf /chroot/httpd/etc/ cp /etc/group /chroot/httpd/etc/ cp /etc/master.passwd /chroot/httpd/etc/passwords Для других UNIX-like систем, список требуемых файлов можно составить используя такие команды как ldd, strace, truss или strings как это описано в предыдущей статье. После того как это все сделано, нам надо подготовить базу паролей. Для этого из /chroot/httpd/etc/passwords и /chroot/httpd/etc/group мы должны удалить все строки за исключением содержащих apache. Теперь построим базу: cd /chroot/httpd/etc pwd_mkdb -d /chroot/httpd/etc passwords rm -rf /chroot/httpd/etc/master.passwd Приведенные команды применимы к FreeBSD Для других систем может быть достаточно только отредактировать файлы. Наконец, нам надо скопировать вебсайты: cp -R /www/* /chroot/httpd/www/ и протестировать коректность запуска апача в новом окружении. chroot /chroot/httpd /usr/local/apache2/bin/httpd Завершающие шаги Если ваш сервер работает нормально, единственное что остается, это создать сценарий, по которому он будет запускатся во время загрузки операционной системы. #!/bin/sh CHROOT=/chroot/httpd HTTPD=/usr/local/apache2/bin/httpd PIDFILE=/usr/local/apache2/logs/httpd.pid echo -n " apache" case "$1" in start) /usr/sbin/chroot $CHROOT $HTTPD ;; stop) kill `cat ${CHROOT}/${PIDFILE}` ;; *) echo "" echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0 Назовите его apache.sh и поместите в директорию со сценариями загрузки вашей ОС. Для FreeBSD это будет /usr/local/etc/rc.d/. Права на этот файл надо поставить такие: chown root:sys /usr/local/etc/rc.d/apache.sh chmod 711 /usr/local/etc/rc.d/apache.sh Заключение Главная цель данной статьи помочь читателю снизить риск проникновения при использовании Apache 2.0, когда в нем будут найдены новые уязвимости. Было показано как установить апач с минимальным кол-вом модулей, как настроить все более защищенно, и как добится снижения вероятности угроз, перенеся серверп в чрутовое окружение. И хоть ни какой из методов не может гарантировать 100% безопасности, описаный метод дает максимальную защиту от злоумышленников. © Artur Maj



© перевод Cobalt 13.07.2006 статья не оптимизирована

e-Commerce Partners Network
Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
20.09.2017 08:47:03 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Здравствуйте,...
Предупреждение
20.09.2017 08:20:25 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Мое...
Новая статья
20.09.2017 08:15:19 Avito777jeax написал:
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b> <b>Приветствую...
Новый релиз
Реклама

Тут должна была быть ваша реклама, но мы потеряли глиняную табличку с ее текстом. SapeId: 665044

Rambler's Top100