L2-Community.com - Bce o Lineage II  
Главная Регистрация Справка Пользователи Поиск Сообщения за день Все разделы прочитаны
 
 

Вернуться   L2-Community.com - Bce o Lineage II > Форум Lineage II > Серверная часть > Защита серверов

Защита серверов В Этом разделе можно обсудить способы защиты серверов. Как в Web соображении так и в прогаммном...

Ответ
 
Опции темы Опции просмотра
Старый 09.02.2008, 20:16   #1
v``_
Member of L2 Community
 
Аватар для v``_
 
Регистрация: 17.01.2008
Сообщений: 48
Вы сказали Спасибо: 0
Поблагодарили: 19 раз(а) в 9 сообщениях
По умолчанию Security Apache

Цитата:
Представляю вашему вниманию перевод с английского статьи Артура Маджа. Перевод
осуществлен в рамках проекта 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 Включает трассировку ядра и показывает трассировочные данные
sotruss Solaris Трассировка вызова процедур из общих библиотек
strace/ltrace Linux Трассировка системных вызовов и сигналов
strings Все Находит печатную строку в двоичной библиотеке
trace AIX Записи выбраных показателей системы
trace (freeware) HP-UX <10.20 Печатает системные вызовы и трассеровку ядра
truss FreeBSD, 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 само по себе дает защиту от огромнейшего числа эксплойтов, т.к. в нем нет командных интерпритаторов.
(с)
v``_ вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
dyrakysa (05.03.2009)
Sponsored Links
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход




Powered by vBulletin® Version 3.7.5
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot
Advertisement System V2.5 By   Branden
L2-Community ©2008-2015


Еще можно прочесть: