Password
    
 К титульной странице  |  Форум  |  О проекте  |  Поиск товаров  |  Сделать стартовой  |  Добавить в Избранное   
Авторизация
Забыли пароль?
Регистрация 
 
Программирование
Безопасность
Демосцена
Игры
WEB-мастерская
Программное обеспечение
Аппаратное обеспечение

Webshop Search

Последние материалы
  The Chronicles of Riddick: Escape from Butcher bay

  Что такое хорошо и что такое плохо, или FAQ по LCD-мониторам

  Организация удаленного доступа

  Инсталляция программного обеспечения используя GPO

  Smarty в веб-разработке

  BioShock или кафе разбитых надежд...



Последние новости
  Конференция Разработчиков Видеоигр, 1979

  Более шустрый и динамичный Mail.lv

  Интернет магазин даром

  Price-Less.eu совсем скоро будет искать на латышском

  Запущена первая публичная бета версия поисковой системы товаров Price-Less.eu

  В Google создали инструмент для борьбы с детской порнографией



Charitable advertising
Њл ­г¦¤ Ґ¬бп ў ў иҐ© Ї®¬®йЁ!



Ziedot.lv

Penn State Child Life Program



Безопасность --> Защита и нападение
Безопасный Apache 2: Шаг-за-Шагом
  
Автор: Artur Maj
Источник:Group of Freedom Search
Опубликовано: [2006-11-17 00:41]
В случае выбора вебсервера, Apache имеет ряд преимуществ перед конкурентами. Среди них стабильность и открытый исходный код. Но вот выбрать версию сервера, далеко не так просто. С одной стороны, наилучшим решением кажется использование самой популярной версии используемой миллионами потребителей - 1.3, но с другой, может стоит воспользоваться улучшеной 2.0?

Перед вами перевод четвертой статьи Артура Маджа из цикла Шаг-за-Шагом -Безопасность Apache 2. Перевод осуществлен в рамках проекта GFS. Перевел Cobalt.Оригинал статьи на английском можно найти тут.

Несмотря на то, что новая версия имеет намного более улучшеные характеристики, некоторые люди все еще выбирают версию 1.3, потому что по их мнению эта ветвь более стабильна. Конечно, в таком мнении есть своя доля истины. Из-за того что 1.3 в течении довольно длительного времени использовалась миллионами пользователей, новые уязвимости найти в ней довольно-таки не просто. В то время, как 2.0 может иметь их в себе довольно много.

В продолжение серии Шаг-за-Шагом (Securing Apache, Securing PHP, and Securing MySQL)(прим. переводчика: все их переводы имеются на нашем сайте), эта статья рассказывает как установить и настроить Apache 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.gzcd ./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





Перейти к рубрике --> Защита и нападение

Наши друзья
Juridiskie pakalpojumi  
IT Works
Проект Самоучка Codenet - всё для программиста
Скачать программы, игры Бесплатные электронные книги
• Hi-tech NEWS • InCube e-mag
ZONEHOSTER.com Программисты, Вам сюда!
КомментарииВсего:0


Только зарегистрированные пользователи могут оставлять здесь комментарии. Зарегистрироваться можно здесь. Если вы уже зарегистировались ранее, то можете войти в систему здесь.


© Mihail Chernov (MiHack) Обмен ссылками
Видеотехника
  *Видеокамеры
  *DVD проигрыватели
  *Телевизоры и аксессуары
Телефония и cвязь
  *Радиотелефоны
  *Портативные радиостанции
  *Смартфоны
  *Мобильные телефоны
Программное обеспечение
  *Компьютерные игры
  *Прикладное ПО
  *Электронные издания
Автопринадлежности
  *Автомагнитолы
  *Автозапчасти
Одежда и обувь
  *Женская
  *Мужская
Бытовая техника
  *Холодильники
  *Стиральные машины
  *Микроволновые печи
  *Посудомоечные машины
  *Пылесосы
  *Кондиционеры
  *Электрические и газовые плиты
  *Водонагреватели и бойлеры
  *Прочее
Спорт и туризм
  *Тренажёры
  *Спорт инвентарь
Компьютеры
  *Офисная техника
  *Мониторы
  *Персональные компьютеры
  *Ноутбуки
  *Серверы
  *Сетевое оборудование
  *Игровые консоли
  *Аксессуары
Фототехника
  *Фотоаппараты
  *Аксессуары
Детские товары
  *Игрушки
  *Детские коляски
  *Детские автокресла
  *Всё для детской комнаты
Аудиотехника
  *MP3 плееры
  *Музыкальные центры
  *CD-проигрыватели
  *Наушники и микрофоны
  *Радио тюнеры
  *Усилители
  *Аккустические системы
  *Запись звука
Сантехника и отопление
  *Ванна и туалет
  *Отопление
  *Котлы
  *Насосы
Для дома и сада
  *Мебель
  *Для сада и огорода
  *Для строительства и хозяйства
Красота и здоровье
  *Косметические средства
  *Маникюр
  *Массажёры
  *Эпиляторы
-->