Контакты

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

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

 Представляю вашему вниманию перевод с английского статьи Артура Маджа. Перевод
осуществлен в рамках проекта GFS. Оригинал статьи находитья
по адресу http://www.securityfocus.com/infocus/1694 Перевел Cobalt. Эта статья в пошаговом режиме расскажет вам о том как установить и сконфигури- ровать веб сервер Apache 1.3.x чтобы смягчить или исключить угрозу взлома вашего сервера, когда в этом продукте будут найдены новые уязвимости. Функциональнолсть Перед тем как мы начнем заниматься безопасностью Apache, мы должны определить какие нам требуются функции от нашего сервера. Разнообразие возможносых конфигураций Апача делает давольно сложной задачу написания уневерсальной проце- дуры для защиты сервера во всех случаях. Именно по этому мы будем основываться на следующей конфигурации: * Сервер должен быть доступен из интернета, и, * Только статические HTML страницы будут использоваться * Сервер будет поддерживать основанный на именах механизм виртуального хостинга * Определенные вебстраницы могут быть доступны только со специальных IP-адресов или определенным пользователям (базавая аутентификация). * Вебсервер будет логировать все запросы (включая информацию о браузере). Необходимо подчеркнуть, что приведенная конфигурация на поддерживает PHP,JSP, CGI и других технологий которые делают возможным интерактивный вебсервис. Использование этих технологий увеличит угрозу безопасности ваших приложений. Так даже маленький, несложный сценарий, может радикально уменьшить уровень безопас- ности вашего сервера. Почему? Во-первых, ASP/CGI приложения могут содержать уязвимости (например SQL-injkection или Cross-Site-Scripting). Во-вторых, технологии могут быть опасными сами по себе (например уязвимости в PHP, в Perl модулях и т.п.). Вот почему я настоятельно рекомендую исполльзовать эти технологии только тогда, когда без интерактивного режима общения пользователя с сервером не обойтись. Предположения Безопасности Одрим из самвх важных элементов любого компьютерного проекта является определение предположений безопасности. Это должно быть выполнено перед снабжением проекта. Для нашего сервера предположения безопасности будут следующими: * Операционную систему необходимо максимально обезопасить от удаленных и локальных атак. * На сервере не должно быть ни каких сервисов кроме HTTP (80/tcp) * Удаленный доступ к этому серверу должен фильтроваться фаерволом, который будет блокировать все исходящие соединения и разрешать входящие только на 80-й порт вебсервера. * Apache должен быть единственным сервисом в данной системе. * Только обязательные модуля апача должны быть включены. * Любые диагностические страницы и автоматическое индексирование директ- орий должно быть выключено. * Сервер должен выдавать как можно меньше информации о себе. * Apache должен быть запущен под уникальными UID/GID, который не используют другие сервисы в системе. * Процессы апача должны иметь ограниченный доступ к файловой системе (chroot) и, * Не должно присутствовать командных интерпритаторов в в апачевом окружении chroot (т.к. /bin/sh, /bin/bash и т.п.). Установка операционной системы Перед установкой Apache, мы должны выбрать операционную систему под которой он будет работать. Сдесь у нас давольно большая альтернатива, потому что Apache может работать практически под всеми ОС. Далее мы будем говорить об установке Apache на FreeBSD (4.7), однако описаный метод вполне сгодится и для других Unix/Linux систем. Единственная операционная система на которую я категорически не рекомендовал бы ставить Apache - это MS Windows. По моему мнению она имеет довольно-таки ограниченный средства для безопасности сервера. Первым шагом к безопасному веб серверу является непробиваеммость операционной системы. Споры о том какая же ОС самая непробиваемая, выходят за рамки этой статьи. Однако, довольно много документов в Сети описывают этот вопрос. Читатель может сам поднять подобную дискуссию на одном из форумов. После того как система установлена и защищена, мы добавим новую группу и пользователя "apache". Во FreeBSD это делается так: pw groupadd apache pw useradd apache -c "Apache Server" -d /dev/null -g apache -s /sbin/nologin По умолчанию, Apache запущен под правами пользователя nobody (исключая главный процесс который запущен под root) и группы nogroup. Это может представлять значительную угрозу безопасности. В случае проникновения, нарушитель может получить доступ ко всем остальным процессам которые доступны этим UID/GID. Следовательно, оптимальным решением будет запуск апача под уникальными пользователем и группой. Подготовка програм Следующим шагом будет скачивание последний версии Apache Web Server. Некоторые опции сервера могут быть включены только на стадии компилирования, поэтому важно скачать исходный код вместо бинарной версии. После скачивания софта, мы должны распаковать его. Следующим шагом мы должны решить, какие модули оставить включенными. Короткое описание всех модулей можно найти тут: http://httpd.apache.org/docs/mod/ Модуля Apache Выбор модулей - важнейший шаг на пути к безопасности Apache. Мы будем следовать следущему правилу: ЧЕМ МЕНЬШЕ,ТЕМ ЛУЧШЕ. Для выполнения требований функциональности и предположений безопасности, следущие модуля должны быть обязательно включены:
Имя модуляОписание
httpd_coreЯдро Apache. Требуется во всех инсталяциях.
mod_accessПроводит контроль доступа основаный на кленском хосте, IP-адресе, или других характеристиках клиентского запроса. Поскольку этот модуль нужен для использования "order", "allow" и "deny" дериктив, он должен быть включен.
mod_authТребуется как инструмент обеспечения пользовательской аутентификации с использованием текстовых фалов (HTTP Базовая Аутентификация), которая определена в функциональном предположении.
mod_dirТребуется для поиска и использования индексов по умолчанию: "index.html", "default.htm", etc.
mod_log_configТребуется как инструмент логирования запросов к серверу.
mod_mimeТребуется для установки характеристик сервера, кодировки содержимого, заголовков, языка страниц и MIME типов документов.
Все остальные модуля апача должны быть отключены. Мы можем без опасения их выключить т.к. они нам не нужны. Путем отключения ненужных модулей мы можем избежать потенциального проникновения когда в одном из них найдут новую багу. Существуют два модуля которые могут быть опаснее остальных: mod_autoindex и mod_info. Первый из них проводит автоматическую индексацию директорий и включен по умолчанию. Когда этот модуль запущен, Apach выдает содержимое директории если в ней нет индексного файла. Второй модуль, mod_info, никогда не должен быть доступен из Интернет. Потому что он показывает конфигурацию серера. Следующий вопрос - как скомпилировать модули. Наиболее предпочтительным выбором кажеться статический метод. Если новые уязвимости будут найдены, мы мождем пере- компилировать уязвимый модуль, а не все программу. При статической компиляции мы исключаем необходимость использования модуля mod_so. Компиляция программы Во-первых, если присутствуют какие-либо патчи по безопасности, они должны быть подключены. Потом сервер будет скомпилирован и установлен следующим образом: ./configure --prefix=/usr/local/apache --disable-module=all --server-uid= apache --server-gid=apache --enable-module=access --enable-module =log_config --enable-module=dir --enable-module=mime --enable-module=auth make su umask 022 make install chown -R root:sys /usr/local/apache Chroot Следующий шаг заключается в ограничении апачу доступа к файловой системе сервера Этого можно достигнуть применяя chroot. Технология chroot позволяет создать новую рутовую директорию, скопировать в нее все файлы демона, и запускать демон уже из нового окружения. Благодаря этому, демон и все дочерние процессы будут иметь доступ только к директории chroot. И так, начнем процесс по созданию виртуальной root директории в папке /chroot/httpd: 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/apache/bin mkdir -p /chroot/httpd/usr/local/apache/logs mkdir -p /chroot/httpd/usr/local/apache/conf mkdir -p /chroot/httpd/www Владельцкм всех созданых директорий должен быть root, и права на них необходимо установить в 0755. Далее, мы создадим специальное устройство /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 Мы должны перестартовать систему или syslogd lдля того чтобы изменения вступили в силу. О том как создать устройство /chroot/httpd/dev/log в других ОС необходимо смотреть в man syslogd. Следующим шагом станет копирование httpd со всеми необходимыми бинарниками и библиотеками в новое дерево директорий. Для этого надо подготовить список всех требуемых файлов. Это можно сделать используя следующие команды:
КомандаОСОписание
lddВсеВыводит динамические зависимости запускаемых файлов или общих библиотек
ktrace/ktruss/kdump*BSDВключает трассировку ядра и показывает трассировочные данные
sotrussSolarisТрассировка вызова процедур из общих библиотек
strace/ltraceLinuxТрассировка системных вызовов и сигналов
stringsВсеНаходит печатную строку в двоичной библиотеке
traceAIXЗаписи выбраных показателей системы
trace (freeware)HP-UX <10.20Печатает системные вызовы и трассеровку ядра
trussFreeBSD, Solaris, AIX 5L, SCO UnixwareТрассировка системных вызовов и сигналов
tusc (freeware)HP-UX>11Трассировка системных вызовов и сигналов
Для примера покажу как использовать ldd, strings и truss: localhost# ldd /usr/local/apache/bin/httpd /usr/local/apache/bin/httpd: libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x280bd000) libc.so.4 => /usr/lib/libc.so.4 (0x280d6000) localhost# strings /usr/local/apache/bin/httpd | grep lib /usr/libexec/ld-elf.so.1 libcrypt.so.2 libc.so.4 localhost# truss /usr/local/apache/bin/httpd | grep open (...) open("/var/run/ld-elf.so.hints",0,00) = 3 (0x3) open("/usr/lib/libcrypt.so.2",0,027757775370) = 3 (0x3) open("/usr/lib/libc.so.4",0,027757775370) = 3 (0x3) open("/etc/spwd.db",0,00) = 3 (0x3) open("/etc/group",0,0666) = 3 (0x3) open("/usr/local/apache/conf/httpd.conf",0,0666) = 3 (0x3) (...) Приведенные команды применимы не только для Apache, а также для всех библиотек и бинарников которые требуют для своей работы другие модули. При использовании FreeBSD вам понадобиться скопировать следующие файлы: cp /usr/local/apache/bin/httpd /chroot/httpd/usr/local/apache/bin/ cp /var/run/ld-elf.so.hints /chroot/httpd/var/run/ cp /usr/lib/libcrypt.so.2 /chroot/httpd/usr/lib/ cp /usr/lib/libc.so.4 /chroot/httpd/usr/lib/ cp /usr/libexec/ld-elf.so.1 /chroot/httpd/usr/libexec/ Как вы наверно уже догадались, в chroot окружении также должны присутствовать файлы конфигурации: cp /etc/hosts /chroot/httpd/etc/ cp /etc/host.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 cp /usr/local/apache/conf/mime.types /chroot/httpd/usr/local/apache/conf/ Примечательно, что из /chroot/httpd/etc/passwords мы можем удалить все строки кроме "nobody" и "apache". Правда в этом случае надо также удалить все кроме "apache" и "nogroup" из /chroot/httpd/etc/group. Дальше мы построем базу паролей: cd /chroot/httpd/etc pwd_mkdb -d /chroot/httpd/etc passwords rm -rf /chroot/httpd/etc/master.passwd Следующим шагом станет проверка. Если httpd успешно запустился в новом окружении, то мы скопируем дефолтовый апачевский конфиг и index.html: cp /usr/local/apache/conf/httpd.conf /chroot/httpd/usr/local/apache/co nf/ cp /usr/local/apache/htdocs/index.html.en /chroot/httpd/www/index.html После копирования, вышеуказаных файлов, мы должны изменить DocumentRoot как показано ниже: DocumentRoot "/www" Теперь мы можем попробовать запустить наш сервер: chroot /chroot/httpd /usr/local/apache/bin/httpd Если в ходе запуска произошли какие-то проблемы, я рекомендую проанализировать логи (/chroot/httpd/usr/local/apache/logs). Если же чтение логов не помогает, можно воспользоваться следующей программой: truss chroot /chroot/httpd /usr/local/apache/bin/httpd Она покажет все проблемы возникающие при запуске. После того как будут исключены все недостатки, можно приступать к конфигурации Apache. Конфигурация Apache Первым шагом станет удаление файла /chroot/httpd/usr/local/apache/conf/httpd.conf и создание нового: # ================================================= # Базовые настройки # ================================================= ServerType standalone ServerRoot "/usr/local/apache" PidFile /usr/local/apache/logs/httpd.pid ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard ResourceConfig /dev/null AccessConfig /dev/null # ================================================= # Performance settings # ================================================= Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxClients 150 MaxRequestsPerChild 0 # ================================================= # Apaches modules # ================================================= ClearModuleList AddModule mod_log_config.c AddModule mod_mime.c AddModule mod_dir.c AddModule mod_access.c AddModule mod_auth.c # ================================================= # General settings # ================================================= Port 80 User apache Group apache ServerAdmin Webmaster@www.ebank.lab UseCanonicalName Off ServerSignature Off HostnameLookups Off ServerTokens Prod DirectoryIndex index.html DocumentRoot "/www/vhosts" # ================================================= # 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/apache/conf/mime.types DefaultType text/plain AddEncoding x-compress Z AddEncoding 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/apache/logs/error_log CustomLog /usr/local/apache/logs/access_log combined # ================================================= # Virtual hosts # ================================================= NameVirtualHost * DocumentRoot "/www/vhosts/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/vhosts/www.test.lab" ServerName "www.test.lab" ErrorLog logs/www.test.lab/error_log CustomLog logs/www.test.lab/access_log combined Приведенная конфигурация включает только те команды, которые необходимы для выполнения предположений по безопасности и функциональности. В конфигурации присутствуют два виртуальных хоста поддерживаемых сервером: - www.ebank.lab (www.e-bank.lab) - www.test.lab Содержимое этих сайтов будет в следущих директориях: - /chroot/httpd/www/vhosts/www.ebank.lab - /chroot/httpd/www/vhosts/www.test.lab Каждый из них ведет свой лог: - /chroot/httpd/usr/local/apache/logs/www.ebank.lab - /chroot/httpd/usr/local/apache/logs/www.test.lab Эти директории должны быть созданы перед запуском апача, иначе он не запустится корректно. Владелец директорий должен быть root:sys, а права установлены в 0755. Какие мы изменения внесли в сравнении с дефолтовым конфигом: * уменьшили кол-во подключеных модулей * Apache не выдает информацию о его версии * Процессы апача запускаются под уникальными идентификаторами * Apache разрешает доступ только к тем директориям, которые указаны в конфигурационном файле. * Ведутся более полные логи об HTTP запросах Финальный Шаг И наконец мы создадим загрузочный скрипт "apache.sh": #!/bin/sh CHROOT=/chroot/httpd/ HTTPD=/usr/local/apache/bin/httpd PIDFILE=/usr/local/apache/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 Приведенный скрипт необходимо скопировать в правильную директорию, где содержаться сценарии загрузки. В случае FreeBSD это будет /usr/local/etc/rc.d. Выводы Приведенный метод позволяет значительно повысить безопасность сервера. Благодаря тому, что подключены только самые необходимые модуля, обнаружение новых уязвимостей в одном из них, не скажется на работе сервера в целом. Отключеная информация о версии, автоиндекс директорий, и включеный chroot делают проникновение в систему очень сложным. Окружение chroot само по себе дает защиту от огромнейшего числа эксплойтов, т.к. в нем нет командных интерпритаторов. © Artur Maj Немного об авторе: Artur Maj работает главным инженером по разработке програмного обеспечения для Oracle Corporation в EMEA Mobile, Wireless & Voice Center of Expertise. Он испытаный консультант по компьютерным системам, поверяющим и потдерживающим безопасность. Он является автором многих статей и публикаций посвященных безопасности систем и средствам програмного обеспечения по борьбе со злоумышленниками.



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

e-Commerce Partners Network
Ник:

Текст:
P Br B I Qute



Код: обновить
Последние комментарии
27.06.2017 11:20:12 DonDib написал:
НужHа поmощь B продаже аBтомобиля? Нужнo быcтро прoдать дoM, yчасток земли...
Взлом E-mail (email, почты, мыла)
26.06.2017 07:33:17 DeweyAloma написал:
If you have a desire to learn how to earn from...
XSS Часть II
26.06.2017 07:09:03 DeweyAloma написал:
If you have a desire to learn how to earn from...
Взлом приложений WEB 2.0 из Firefox
Реклама

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

Rambler's Top100