Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
Как известно, немалая часть взломов (SQL Injection, XSS атаки, инклюдинг) происходит
по сути посредством хитрого HTTP запроса. Логично предположить, что эти самые
запросы неплохо было бы фильтровать. Решение проблемы существует в виде модуля к
Апачу, и называется оно mod_security. Ставим:
|
После установки – идем конфигурировать. Открываем любой конфиг виртуального хоста,
например 001.admin.hosting.ru, над которым мы уже экспериментировали. Все значения
надо вводить между тегами <Virtualhost *:80> и </Virtualhost>.
|
Для и для apache 1.x в httpd.conf закоментите:
|
У этого модуля – на редкость удачная дефолтная конфигурация. К ней мало, что можно
добавить, так как большинство настроек – специфичны. Общий принцип составления
правил мы рассмотрели, а остальное можно добавить по своему усмотрению.
1.2) PHP
В дополнение смотри пункт – 2.1
Рассмотрим самое уязвимое место хостинговой системы – выполняемые файлы, в частности,
PHP скрипты. Открываем конфиг PHP:
|
Меняем следующие параметры:
|
Выключить эти функции очень важно. Хоть они и недоступны при включенном safe mode,
пользователь может без труда провести успешную атаку, указав в файле .htaccess:
php_flag safe_mode off
1.3) FTP
Настройка Proftpd установите далее по разделение привилегий смотрим -2.1
в котором я указал то что вам нужно, а по Chroot см раздел 1.5 Желательно ftp
ставить на отдельный HDD чтобы непроизошло переполнения раздела и все
шайтан майфун :) а если у вас он на /etc или /var находился все хана логам и тд :)
1.4) IPFW - штатный файрволл FreeBSD
1.5) Chroot
Chroot - песочница это конечно с одной стороны хорошо с другой – потеря
производительности, для некоторых программ лишний дополнительный
модуль + конфиг к нему. Я считаю грамотный chmod дает тот же результат , но без
заморочек и потерь ресурсов. В основном к chroot прибегают, когда нужно обезопасить
сервис, который не совсем безопасный как например BIND(о нем ниже).
Jail - мы не будем это рассматривать ось внутри оси довольно заморочено и плохо
документировано, а если все вхосты придется загонять в jail то мало непокажется.
Я пока небуду jail рассматривать :)
II) Настраиваем тыл внутренние защитные меры.
2.1) Ограничения ресурсов
Бывает так кроме основного действия PHP скрипта функция N зацикливается, попутно
вычисляя некое сложное действие. Как результат – высокая загрузка процессора.
Это очень типичная ситуация для хостинга. Чтобы предотвратить подобные ненамеренные
(и намеренные) атаки, необходимо ограничивать юзера в плане ресурсов. У *BSD для
таких целей существует система профилей пользователей. Это значит, что мы можем
легко ограничить ресурсы каждого пользователя в отдельности.
Открываем /etc/login.conf и добавляем:
|
Здесь я указал лишь основные параметры.
Список всех параметров и их описание можно найти в Handbook.
Теперь перейдем к настройке операционки. Открываем /etc/sysctl.conf и пишем туда
следующее:
|
Здесь указаны не все параметры sysctl остальные смотримMAN SYSCTL(8)
Есть статья Некоторые опции sysctl но она еще не совсем дописана (просьба просить lissyara чтобы доконца перевел ;)).
Многие параметры для sysctl можно изменять и динамически:
|
Например:
|
Должно быть похоже на
|
Теперь необходимо продублировать часть настроек в /etc/rc.conf:
Дублируем настройки sysctl
|
2.3) Логи
Очень важным аспектом системного администрирования является слежение за сервера.
Но ковырять логии самому заморочено тогда для ленивых существует отличная утилита
logcheck ее и поставим.
|
Утилита написана на sh скриптах, и занимает всего 29 Кб в архиве. После установки
в /usr/local/etc у вас появятся четыре конфига: переименуй их,
убрав из названия файла «sample»:
logcheck.hacking – о каких странностях сообщать;
logcheck.violations – о каких попытках взлома сообщать;
logcheck.ignore – какие странности игнорировать;
logcheck.violations.ignore – какие попытки взлома игнорировать.
В целом и общем, первый файл от второго ничем не отличается, равно как и третий
от четвертого :).Просто разработчики скрипта решили разнести сообщения о подозрительной
активности и сообщения о явной атаке в разные конфиги.
Запускаем скрипт по крону, хотя бы раз в сутки. Дописываем в cron:
|
При большой активности хостящихся сайтов, логи веб-сервера начнут
занимать немало места. И в то же время их надо сохранять.
Можно использовать утилиту logrotate
|
III) Общие меры
3.1) HDD
Сделаем в fstab некоторые изменения для предотвращения нехороших действий.
Укажем где и что можно и нельзя делать системе.
|
noexec – эта опция дает понять что на данном разделе запрещено запускать что
либо даже правах на файл chmod 777 (Я знаю что некоторые защищенные сервера ломали
именно через /tmp :) в последствии админы советовали прикрывать эту дыру.
И незабываем, что в /tmp может писать почти любой сервис в системе)
nosuid – при этом значении система игнорирует suid-биты. Юзер не сможет сделать
#su и подняться до рута, даже если он знает его пароль рута и находится в группе
wheel (но необходимо понять что нужным юзверям которым нужно #su домашняя директория
будет /usr, а тем кого нужно ограничит директория будет /usr/home)
nodev – запрещаем создание\существование в данном разделе специальных устройств.
3.2) Доступ
Доступ к серверу следует ограничить. Т.е. серверы убрать в недоступное простым
смертным людям и закрыть на ключ. В дополнение не забываем, снять с них все причиндалы
мониторы клавы мышки и т.д. Для чего это должно быть понятно, например если я вижу
общедоступный \ физически сервер FreeBSD я тут же по любопытности хочу в него залезть
и поковыряться в нем. Но вы скажете, а как же пароль root и т.д. то слушаем дальше,
если вы забыли чужой пароль :) а так бывает то делаем так:
А) Загружаемся в однопользовательском режиме , для этого в приглашении загрузчика
введите boot –s
Б) Смонтируйте командой mount –u / корневой раздел в режим чтения-записи.
Затем с помощью mount –a примонтируем все что есть (т.е. только что указанно
в fstab без опции noauto)
B) Теперь меняйте пароль рута. :)
Чтобы люди не cмогли зайти без пароля рута в однопользовательском режиме делаем так:
|
Измените в строчке console пункт secure на insecure. Если вы сделаете это,
FreeBSD даже при загрузке в однопользовательском режиме будет запрашивать пароль root.
Будьте осторожны при изменении этого значения на insecure. Если вы забудете пароль
root, загрузка в однопользовательский режим сильно усложнится.
Это все еще возможно, но несколько более сложно.
|
3.3) DNS
Засунем DNS в песочницу
|
-u – значение UID присваемое процессу named
-t – указывает корневой каталог для демона
Незабываем, что корневой каталог недолжен, быть пустым, он должен содержать все файлы
необходимые для нормальной работы демона. Если named скомпилирован так чтобы
библиотеки компоновались статически и не нужно было думать что ему надо еще в корневую
положить чтобы он запустился :) Так же некоторые советуют в конфиге DNS убрать строчку
об версии демона дескать оно сможет помочь атакующему и т.д. я не считаю это критически
она может подсказкой и самому админу.
Литература:
1) Unix руководство системного администратора (3 изд.)
2) Хакер спец 07/68/июль/2006
3) Жизнь :)
Статья дорабатывается все пожелания\дополнения на сюда.
размещено: 2007-05-13,
последнее обновление: 2007-05-22,
автор: Raven2000
sergei vasilyev, 2007-05-23 в 13:14:18
1) Нелишне было бы дописать, что noexec на /tmp не позволит выполнить апдейт системы и поэтому перед make installworld нужно выполнить mount -u -o exec /tmp
2) Я рекомендовал бы / и /usr монтировать в ro, а /usr/local вынести на отдельный раздел.
tux, 2007-07-20 в 7:17:32
Статья толи из Хакера, толи из Спец-Хакера. Неплохо бы копирайты ставить...
Raven2000, 2007-07-23 в 13:48:20
to tux читать умеешь? см список Литература:
>Статья толи из
она то ли из хенбука толи и тд и тп она из всякой литературы + свое так что тема везде во всякой лит-ре светится так что я точно не первый :) ну и не последний :)
maserg, 2007-07-31 в 12:58:51
а кто сказал что можно в .htaccess воткнуть
php_flag safe_mode off ?
из доки:
safe_mode - тип PHP_INI_SYSTEM
PHP_INI_SYSTEM=Entry can be set in php.ini or httpd.conf
Andrew Kolchoogin, 2007-08-01 в 10:32:19
===
nosuid – при этом значении система игнорирует suid-биты. Юзер не сможет сделать
#su и подняться до рута, даже если он знает его пароль рута и находится в группе
wheel (но необходимо понять что нужным юзверям которым нужно #su домашняя директория
будет /usr, а тем кого нужно ограничит директория будет /usr/home)
===
Нет.
При наличии этого флага в fstab'е система будет игнорировать setuid-бит у бинарников, на этой файловой системе находящихся. 'su' там не лежит, и даже если у пользователя домашняя директория на этом разделе, всё будет прекрасно работать.
Viktorich, 2007-11-08 в 15:11:27
/dev/ad4s3d     /var     ufs   rw,nodev     2 2
nodev – запрещаем создание\существование в данном разделе специальных устройств.
# named –u 53 –t /var/named
разве bind в чруте не создаёт устройства ?
qbic, 2008-05-06 в 0:02:07
Что-то nodev у меня на /home и /var в седьмой версии фри
не пошел.... При загрузке ругается...
qbic, 2008-05-06 в 11:31:29
В FreeBSD 7.0 Release у mount отсутсвует опция nodev
увы и ах.
qbic, 2008-05-06 в 11:40:50
Более того при установке этой опции nodev на /home -
система перестает нормально грузиться - приходится в однопользовательском режиме монтировать / в режиме rw
и монтировать /usr чтобы убрать в fstab эту строчку.
После этих действий все начинает жить штатно.
Serj7770, 2009-01-21 в 22:40:50
Хмм
Syntax error on line 19 of /usr/local/etc/apache22/vhosts/7770.net.ru.conf:
Invalid command 'SecFilterEngine', perhaps misspelled or defined by a module not included in the server configuration
anonymous, 2009-03-23 в 13:10:40
Serj7770, модуль подключите
shirker, 2009-06-06 в 13:05:30
Не зобывам, що для апача 2 и 22 у мод_секьюрити другой синтакс: http://www.modsecurity.org/documentation/ModSecurity-Migration-Matrix.pdf
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess Off
# Handling of file uploads
# TODO Choose a folder private to Apache.
# SecUploadDir /opt/apache-frontend/tmp/
SecUploadKeepFiles Off
# Debug log
SecDebugLog /var/log/httpd/modsec_debug.log
SecDebugLogLevel 0
# Serial audit log
SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus ^5
SecAuditLogParts ABIFHZ
SecAuditLogType Serial
SecAuditLog /var/log/httpd/modsec_audit.log
SecDefaultAction "deny,log,phase:1,status:500"
# Maximum request body size we will
# accept for buffering
SecRequestBodyLimit 131072
# Store up to 128 KB in memory
SecRequestBodyInMemoryLimit 131072
# Buffer response bodies of up to
# 512 KB in length
SecResponseBodyLimit 524288
  # Перекрываем dots-bug
SecRule REQUEST_URI|QUERY_STRING "\.\./"
  # Не забываем про XSS
  SecRule REQUEST_URI|QUERY_STRING "<(.|\n)+>"
  # SQL injection, куда же без него :)
  SecRule REQUEST_URI|QUERY_STRING "<[[:space:]]*script"
  SecRule REQUEST_URI|QUERY_STRING "delete[[:space:]]+from"
  SecRule REQUEST_URI|QUERY_STRING "insert[[:space:]]+into"
  SecRule REQUEST_URI|QUERY_STRING "select.+from"
shirker, 2009-06-06 в 13:16:10
в последних строчках предыдущего поста ошибся :(
вот пример праильного правила:
# Blind SQL injection
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES|REQUEST_HEADERS|!REQUEST_HEADERS:Referer "(?:\b(??(?:ys\.(?:user_(??:t(?:ab(?:_column|le)|rigger)|object|view)s|c(?nstraints|atalog))|all_tables|tab)|elect\b.{0,40}\b(?ubstring|asci i|user))|m(?ys(??:queri|ac)e|relationship|column|object)s|ysql.user)|c(?nstraint_type|harindex)|attnotnull)\b|(?:locate|instr)\W+\()|\@\@spid\b) " \
"capture,t:replaceComments,ctl:auditLogParts=+E,log,auditlog,msg:'Blind SQL Injection Attack. Matched signature <%{TX.0}>',id:'950007',severity:'2'"
Моё имя, 2009-06-26 в 12:39:53
Исправьте опечатки в статье - ужасно мозолят глаза. Ещё просьба - обновите статью с указанными замечаниями и возможными обновлениями, а то дата последнего редактирования не внушает оптимизма и не вызывает большого доверия.
it, 2009-11-12 в 12:59:34
# Перекрываем возможность передачи переменных PHP
SecFilterSelective ARG_b2inc "!^$"
что-то мне показалось что тут только для b2 мы перекрываем, а не для всего php
BSD, 2011-06-18 в 22:44:28
Забросил автор это нужное дело похоже.. даже найденные ошибки так и не обновил... Грустно!
Raven2000, 2011-06-19 в 10:39:16
2BSD
Стыдно, буду переписывать к концу месяца. =)
Константин, 2011-06-22 в 15:57:50
Буду очень благодарен за обновление/оживление статьи.
Материал видно сырой, но если было актуальное такое пособие, было бы очень круто. Постарайся доделать ее толково, будем очень благодарны!!! :)
Мфынф, 2011-07-08 в 8:08:23
Хуйня полная.
А где же собствено защита от доса?
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [19 шт.]