10.18.1 Сервер Apache и сетевая безопасность в Red Hat
Семенов Ю.А. (ГНЦ ИТЭФ)
Сервер Apache доступен бесплатно (http://www.apache.org). Сначала надо загрузить сервер после чего следует вызвать сценарий configure (включен в дистрибутив), который автоматически определяет тип операционной системы, а также устанавливает соответствующие файлы сборки проекта. Потребуется указать каталог, где должен располагаться сервер Apache. Для этого предназначена опция -prefix:
%./configure -prefix=/usr/local/apache/
Некоторые компоненты сервера Apache могут включаться и отключаться с помощью опций -enable-module= и -disable-module = сценария configure. Установленный по умолчанию набор модулей вполне приемлем, но имеются и дополнительные модули (см. табл. ниже).
Таблица. Дополнительные модули Apache, которые по умолчанию не включены
Модуль | Назначение |
auth_dbm | Использует базу данных DBM для управления доступом со стороны пользователей/групп (рекомендуется этот или следующий модуль, но не оба сразу) |
auth_db | Использует базу данных DB для управления доступом со стороны пользователей/групп |
usertrack | Позволяет отслеживать щелчки мышью в броузерах, поддерживающих технологию “cookie” |
rewrite | Переписывает URL-адреса, используя регулярные выражения |
expires | Позволяет включить в документ дату его истечения |
proxy | Конфигурирует Apache в качестве прокси-сервера |
В таблице ниже перечислены модули, которые могут быть отключены. Отключая неиспользованные модули, следует исходить из соображений безопасности и повышения производительности.
Таблица. Модули Apache, которые могут быть отключены
Модуль | Функция |
asis | Позволяет посылать файлы указанных типов без использования HTTP-заголовков |
autoindex | Индексирует каталоги, в которых отсутствует начальная HTML-страница (например, index.html) |
env | Позволяет устанавливать специальные переменные среды для >CGI-сценариев |
include | Разрешает использовать серверные вставки (старый способ создания динамического содержимого) |
userdir | Разрешает пользователям иметь собственные HTML-каталоги |
Полный перечень стандартных модулей можно найти в файле src/Configuration, входящем в дистрибутив Apache, либо по адресу www.apache.org/docs/mod/index.html.
После выполнения сценария configure запустите сценарии make и make install для фактической компиляции и установки соответствующих файлов.
После установки сервера необходимо сконфигурировать его с учетом выполняемых функций. Все файлы конфигурации находятся в каталоге /conf (например, /usr/local/apache/conf). Необходимо проверить и настроить три различных файла конфигурации: httpd.conf, srm.conf и access.conf.
Файл httpd.conf определяет, каким образом демон Apache (httpd) взаимодействует с системой. В этом файле задается TCP-порт приема запросов. На одном компьютере можно запустить несколько HTTP-серверов, подключенных к разным портам.
Ресурсы, доступ к которым необходим серверу, настраиваются в файле smr.conf. В нем располагается самая важная директива - DocumentRoot, которая задает корневой каталог для обслуживания документов. В этом файле также содержится ряд дополнительных установок, связанных с обработкой специальных URL-адресов (например, http://www.xor.com/~steve).
Параметры безопасности устанавливаются в файле access.conf. Он включает директивы, которая позволяют управлять доступом на уровне каталога или файла. Вызовы сценариев осуществляется только из каталога cgi-bin. Для установки этого ограничения следует задать опцию ExecCGI в файле srm.conf.
Если требуется, чтобы демон httpd запускался автоматически на этапе начальной загрузки, нужно вставить следующий фрагмент в функцию localrc() стартовых сценариев, либо включить его в файл /etc/rc.local, если используется отдельный локальный сценарий.
if [ -x /usr/local/apache/httpd ]; then
/usr/local/apache/apachetl start
echo =n ‘www_server’
fi
Протокол HTTP 1.1 реализует функциональные возможности виртуальных интерфейсов, в том числе не имеющих IP-адресов. Каждый из виртуальных сетевых интерфейсов может иметь доменное имя, под которым он известен пользователям Интернет. Это позволяет одному UNIX-серверу обслуживать сотни WEB-узлов. Настройка виртуального интерфейса происходит в два этапа. Сначала требуется создать виртуальный интерфейс на уровне TCP/IP. На втором этапе необходимо сообщить серверу Apache об инсталлированных виртуальных интерфейсах.
Виртуальные интерфейсы в RedHat обозначаются в том же формате интерфейс:экземпляр, что и в Solaris и HP-UX. Например, если интерфейс Ethernet называется eth0, то связанные с ним виртуальные интерфейсы конфигурируются с помощью команды ifconfig. Так команда:
# ifconfig eth0:0 128.138.243.150 netmask 255.255.255.192 up
настраивает интерфейс eth0:0 и назначает ему адрес в сети 128.138.243.128/26. Чтобы назначенные виртуальные адреса стали постоянными, необходимо создать для них файлы в каталоге /etc/sysconf/network-scripts. Файл ifcfg-eth0:0, соответствующий приведенной выше команде ifconfig, может содержать следующие строки:
DEVICE=eth0:0
IPADDR=128.138.243.150
NETMASK=255.255.255.192
NETWORK=128.138.243.128
BROADCAST=128.138.243.191
ONBOOT=yes
После создания виртуального интерфейса с помощью команды ifconfig требуется сообщить серверу Apache о том, какие документы должны обрабатываться при попытке подключения клиента к каждому интерфейсу. Это можно сделать посредством конструкции VirtualHost из файла httpd.conf. Каждому сконфигурированному виртуальному интерфейсу должна соответствовать одна конструкция VirtualHost. Например:
<VirtualHost 192.225.33.37>
ServerAdmin webmaster@www.deneg.net
DocumentRoot/usr/local/apache/htdocs/company
ServerName www.deneg.net
ErrorLog Logs/www.deneg.net-error_log
TransferLog logs/www.deneg.net-access_log
</VirtualHost>
После подключения клиента к виртуальному узлу 192.225.33.37 будет обрабатываться документы из каталога /usr/local/apache/htdocs/company.
Модель аутентификации в RedHat основана на подключаемых модулях аутентификации РАМ. В связи с этим команда passwd подчиняется набору правил имеющегося модуля, описанных в файле /etc/pam.d/passwd. Получить более подробную информацию о модулях РАМ можно по адресу:
http://pare.power.net/morgen/Linux-PAM/index.html
Единственная отличительная черта пользователя root состоит в том, что его идентификатор равен нулю. Поскольку в файле /etc/passwd может быть несколько элементов, для которых установлен этот идентификатор, то существует много способов входа в систему в качестве суперпользователя. Одним из способов, который используют хакеры, получив доступ к интерпретатору команд суперпользователя, заключается в редактировании файла passwd путем ввода в него новых регистрационных имен с идентификатором пользователя, равным нулю. Спасение от такого трюка является применение мини-сценария, подобного тому, который используется для поиска учетных записей без паролей:
perl -F: -ane ‘print if not $F[2];’ /etc/passwd
Этот сценарий отображает любые элементы файла passwd, в которых идентификатор пользователя не указан или равен нулю. Пристального внимания заслуживают элементы файла passwd, в которых нет имени пользователя, либо вместо имени стоят знаки препинания. Часто такие записи позволяют свободно входить в систему.
Источником повышенной опасности являются программы, которые запускаются с измененным идентификатором пользователя (SUID). Самым простым способом уменьшения количества проблем, связанных со сменой идентификатора, - это доведение до минимума числа таких программ.
Если нужно всего лишь ограничить доступ к файлу или базе данных, достаточно добавить в файл /etc/passwd псевдопользователя, единственным назначением которого является владение требуемыми ресурсами. Следует следовать обычным правилам по созданию псевдопользователей, используя низкое значение UID. В поле пароля прописывается звездочка, а начальным каталогом такого пользователя делается каталог /dev/null.
Полезно периодически сканировать диски на предмет выявления новых программ с установленным битом SUID. C такой задачей справится команда find:
/usr/bin/find / -ser root -perm -4000 -print |
/bin/mail -s “Setuid root files” netadmin
В данном случае пользователь netadmin по электронной почте направляется список всех файлов, принадлежащих пользователю root и имеющих установленный бит SUID. Если в вашей системе файл /dev/kmem могут читать все пользователи, немедленно исправьте этот промах. Следует проверить также права доступа к файлам /dev/drum и /dev/mem, если они присутствуют в системе.
С помощью программы nmap можно просмотреть, какие порты активированы на заданном сервере. Например:
% nmap -sT host1.uexample.com
…………….
Port | State | Protocol | Service |
7 | open | tcp | echo |
9 | open | tcp | discard |
13 | open | tcp | daytime |
19 | open | tcp | chargen |
21 | open | tcp | ftp |
23 | open | tcp | telnet |
25 | open | tcp | smtp |
… | |||
513 | open | tcp | login |
Для поиска ненадежных паролей можно использовать программу crack, доступную по адресу ftp://coast.cs.purdue.edu/pub/tools/unix/pwdutils/crack/.
Программа tcpd (ftp://ftp.porcupine.org), часто называемая пакетом “TCP-оболочек”, позволяет регистрировать подключения к таким ТСР-сервисам, как telnetd, rlogind и fingerd. Кроме того, она позволяет задавать перечень систем, которые имеют право устанавливать подключения. Программа находится в каталоге /usr/ports/security/tcp_wrapper. Программа tcpd легко инсталлируется и не требует внесения изменений в действующие утилиты. Она работает в связке с демоном inetd. Достаточно модифицировать файл /etc/inetd.conf, чтобы вместо реального сетевого сервера выполнялась tcpd.
Посредством программы tripwire можно контролировать изменения в системных файлах. Она контролирует права доступа и контрольные суммы всех важных системных файлов. Это позволяет выявлять подмененные, поврежденные и подделанные файлы.
Весьма полезным может оказаться диагностический пакет программ ТСТ (http://www.fish.com/security), позволяющих анализировать систему после проникновения в нее нарушителя.
По материалам книги Дэвида Бэндла “Защита и безопасность в сетях LINUX”, Питер, 2002.
Наиболее полезными серверами по проблемам безопасности являются в данный момент серверы: http://www.linuxberg.com/ и http://freshmeat.net/
AIDE | http://www.cs.tut.fi/~rammer/aide.html | Свободно распространяемая замена tripwire |
BASS | http://www.securityfocus.com/data/tools/network/bass-1.0.7.tar.gz | Balk Auditing Security Scanners |
Bastille Linux | http://bastille-linux.souceforge.net/ | Программа усиления защиты Red Hat |
Chech.pl | http://checkps.alcom.o.uk/ | Средство аудита разрешений доступа к файловой системе |
firesoft | http://www.unix.gr/ | Для просмотра LOG-файлов ipchain и snort |
Firewall Manager | http://www.tectrip.net/arg/ | Графический интерфейс для Firewall |
FreeS/WAN | http://www.xs4all.nl/~freeswan/ | Безопасная сеть WAN для ядер Linux |
Fwctl | http://indev.insu.com/Fwctl/ | Средство конфигурирования для пакетных фильтров Linux |
gfcc | http://icarus.autostock.co.kr/ | Firewall GTK+ (ipchains) |
gSentiel | http://zurk.netpedia.net/zfile.html | Графический интерфейс для Sentiel, основанный на GTK |
gShield | http://muse.linuxgeek.org/ | Модульный Firewall Godot |
HostSentry | http://www.psionic.com/abacus/hostsentry/ | Обнаружение анормальных подключений к системе |
hping2 | http://www.kyuzz.org/antirez/ | Аудит и тестирование сети |
ipchains | http://www.rustcorp.com/linux/ipchains/ | Управление пакетным фильтром Linux |
ipchains-firewall | http://ipchains.nerdherd.org/ | Сценарии для формирования правил ipchains и маскирования IP |
ipfa | http://www.soaring-bird.com.cn/oss_proj/ipfa/ | Управление для Firewall |
ISIC | http://expert.cc.purdue.edu/~frantzen/ | Программа посылки частично случайных пакетов для тестирования стеков IP и Firewall |
Ripper | http://www.openwall.com/john/ | Взломщик паролей |
Linux Intrusion Detection System | http://www.soaring-bird.com.cn/oss_proj/lids/ | Обнаружение проникновения злоумышленников |
Logcheck | http://www.psionic.com/ | Анализ LOG для обнаружения нарушений |
maillog | http://old.dhs.org/ | По cron передает по почте LOGs |
Mason | http://www.pobox.com/~wstearns/mason/ | Формирование Firewall на основе ipwadm или ipchain |
Nessus | http://www.nessus.org/ | Аудит безопасности |
netfilter | http://www.samba.org/netfilter/ | Программный фильтр пакетов |
nmap | http://www.insecure.org/nmap/ | Сканирование сети |
nstream | http://www.hsc.fr/cabinet/products/index | Анализатор сетевых потоков |
OpenSSH | http://www.openssh.com/ | Защищенная оболочка Secure Shell с открытым кодом |
Ping String | http://www.ksrt.org/pstring/ | Идентификатор трафика ICMP |
PMFirewall | http://www.pointman.org/ | Конфигурирование ipchains в Firewall и маскирования IP |
PortSentry | http://www.psionic.com/abacus/portsentry/ | Регистрация сканирования портов в реальном времени и реагирование |
PSPG | http://members.xoom.com/miscreants/ | Pretty Simple Password Generator/ Генерация паролей |
QIPchains | http://www.vano.odessa.net/software/ | Сценарий оболочки для быстрого добавления/удаления правила Firewall Linux |
redir | http://sammy.net/~sammy/hacks/ | Перенаправляет порт ТСР на другой IP-адрес и порт |
S/key | ftp://thumper.bellcore.com/pub/nmh/ | Система одноразовых паролей |
SAINT | http://www.wwdsi.com/saint/ | Security Administrator’s Integrated Network Tool - Инструмент администратора безопасности |
samhain | http://samhain.netpedia.net | Средство проверки целостности файлов |
SARA | http://home.arc.com/sara/index.html | Аудит безопасности (как SATAN/SAINT), если в системе установлена программа nmap |
secure delete | http://thc.pimmel.com/files/thc/secure_delete-2.1.tar.gz | Безопасное удаление файлов, безопасная перезапись виртуальной памяти и незанятого дискового пространства |
Secure Remote Password Protocol | http://srp.stanford.edu/srp/ | Протокол аутентификации и обмена ключами, основанный на использовании паролей |
Secure Shell (ssh) | ftp://ftp.cs.hut.fi/pub/ssh/ http://www.ssh.fi/ | Средство для защищенных подключений с использованием шифрования и взаимной авторизации |
Secure-Linux Patch | http://www.openwall.com/linux/ | Исправление ядра Linux для блокировки атак, основанных на переполнении стека |
Sentiel | http://zurk.netpedia.net/zfile.html | Быстрое сканирование системных файлов |
sifi | http://www.ifi.unizh.ch/ikm/SINUS/firewall | Пакетный фильтр TCP/IP для Linux, основанный на состояниях |
Slinux Kernel | http://www.slinux.cx/ | Безопасное ядро Linux |
snort | http://www.clark.net/~roesh/security.html | Система обнаружения несанкционированного проникновения |
sslwrap | http://www.rickk.com/sslwrap/ | SSL-оболочка для серверных приложений, таких как демоны РОР3/IMAP |
Sportal | http://sportal.sourceforge.net/ | Слежение за файлами с графическим интерфейсом GTK |
sXid | ftp://marcus.seva.net/pub/sxid/ | Слежение за suid/sgid, написанное на С |
TARA | http://home.arc.com/tara/index.html/ | Tiger Analytical Research Assistant - набор сценариев для проверки локальной безопасности |
Phreak Firewall | http://bewoner.dma.be/Phreak/ | Установка настройки Firewall с использованием к маскировки IP |
TheBox | http://yak.airwire.net/ | Сценарии для установки, настройки и управления маскировкой IP и прозрачного кэширования |
Triplight | http://linux.rice.edu/magic/triplight/ | Обнаружение несанкционированного проникновения и целостности файлов, использует md5 sum |
Tripwire | http://www.tripwiresecurity.com/ | Обнаружение несанкционированного доступа |
Wipe | http://gsu.linux.org.tr/wipe/ | Безопасное удаление файлов с магнитных носителей |
ya-wipe | http://www.erols.com/thomassr/zero/download/wipe | Безопасное удаление файлов |
Информацию об атаках и различных средствах противодействия читатель может найти на в:
http://www.cert.org/reports/dsit_workshop-final.html
Существует много средств для детектирования DDoS (Distributed denial-of-service). Каждое из этих средств имеет свои слабости, и ни одно не является универсальным решением. Некоторые из них можно найти:
http://www.fbi.gov/nipc/trinoo.htm
http://staff.washington.edu/dittrich/misc/stacheldraht.analysis
http://www.iss.net/cgi-bin/dbt-display.exe/db_data/press_rel/release/122899199.plt
http://www.sans.org/y2k/stacheldraht.htm
Информацию о том, как корректно сконфигурировать сеть можно найти в RFC-2267
Архив средств для детектирования DDoS атак можно найти по адресу
http://packetstorm.securify.comdistributed/
CERT/CC публикует справочные материалы и другие документы по данной проблематике, например
http://www.cert.org/advisories/CA-2000-01.html
http://www.cert.org/advisories/CA-99-17-denial-of-service-tools.html
http://www.cert.org/tech_tips