Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   FAQ:Безопасность web сервера (https://forum.antichat.xyz/showthread.php?t=35753)

zl0ba 17.03.2007 21:11

FAQ:Безопасность web сервера
 
У меня есть хостинг (Free BSD) и на нём хоститься несколько маленьких проектов.
На них постоянно идут (D)Dos,sql inl,xss,php-include атаки, могу ли я обезопасить
сервер от этих атак?


Многие из нас знакомы с распределенной атакой отказа в доступе (Distributed Denial of Servece Attack).
Как говориться, от этой собаки спасенье нет. Или эффективной sql inj, а также xss и межсайтового скриптинга.
К решению этой проблемы на помощь к нам приходит, знаменитый модуль mod_security!
Download : http://www.modsecurity.org/download/modsecurity-apache-1.9.2.tar.gz


Код:

<IfModule mod_security.c>

    # On or Off движка фильтра
    SecFilterEngine On

    # Включения проверки правильности кодирования URL
    SecFilterCheckURLEncoding On

    # Использования байтов их этого диапазона
    SecFilterForceByteRange 32 126

    # Ведения логов для подозрительных запросов
    SecAuditEngine RelevantOnly

    # Имя файла лога
    SecAuditLog logs/audit_log

    # Вывод отладочной информации
    SecFilterDebugLog logs/modsec_debug_log
    SecFilterDebugLevel 0

    # Проверка POST запросов
    SecFilterScanPOST On

    # Запись подозрительных запросов (по дефолту пишет в лог)
    # возрат http ответа с кодом 406
    SecFilterDefaultAction "deny,log,status:406"

    # Redirect user on filter match
    SecFilter xxx redirect:http://www.webkreator.com

    # Execute the external script on filter match
    SecFilter yyy log,exec:/home/ivanr/apache/bin/report-attack.pl

    # Simple filter
    SecFilter 111
   
    # Only check the QUERY_STRING variable
    SecFilterSelective QUERY_STRING 222

    # Only check the body of the POST request
    SecFilterSelective POST_PAYLOAD 333

    # Only check arguments (will work for GET and POST)
    SecFilterSelective ARGS 444

    # Test filter
    SecFilter "/cgi-bin/keyword"

    # Another test filter, will be denied with 404 but not logged
    # action supplied as a parameter overrides the default action
    SecFilter 999 "deny,nolog,status:404"

    # Раскритие конфигов
    SecFilter /etc/password

    # Чтения выше корня
    SecFilter "\.\./"

    # Межсайтовый скриптинг
    SecFilter "<( |\n)*script"
    SecFilter "<(.|\n)+>"

    # Защита от sql inj
    SecFilter "delete[[:space:]]+from"
    SecFilter "insert[[:space:]]+into"
    SecFilter "select.+from"

    # Атаки с использованием cookie
    SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"

    # Forbid file upload
    SecFilterSelective "HTTP_CONTENT_TYPE" multipart/form-data

    # Only watch argument p1
    SecFilterSelective "ARG_p1" 555

    # Watch all arguments except p1
    SecFilterSelective "ARGS|!ARG_p2" 666

    # Only allow our own test utility to send requests (or Mozilla)
    SecFilterSelective HTTP_USER_AGENT "!(mod_security|mozilla)"

    # Do not allow variables with this name
    SecFilterSelective ARGS_NAMES 777

    # Do now allow this variable value (names are ok)
    SecFilterSelective ARGS_VALUES 888

    # Скажи спаму нет!
    <Location /cgi-bin/FormMail>
        SecFilterSelective "ARG_recipient" "!@webkreator.com$"
    </Location>

    # Фильтрация форматов изображения
    <Location /fileupload.php>
        SecFilterInheritance Off
        SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)"
    </Location>

</IfModule>


Также ставим модуль mod_evasive, который поможет уменьшить активность (D)Dos атаки.
Download: http://www.nuclearelephant.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz

Конфигурируем модуль:

/etc/apache2/modules.d/mod_evasive20.conf

Код:

<IfModule mod_evasive20.c>
            DOSHashTableSize 3097
            DOSPageCount 2
            DOSSiteCount 50
            DOSPageInterval 1
            DOSSiteInterval 1
            DOSBlockingPeriod 10
        </IfModule>


Как мне запретить запуск программ в /tmp, на тот случай если взломщик проник на мой сервер?

Для этого Вам надо вынести /var/tmp в отдельную файловую систему, при этом /tmp сделаем симлинком
на /var/tmp. Идём в /etc/fstab ищем строчку для /var/tmp и в опциях добавляем noexex.
После проделанной операции , запуск программ из /tmp будет не возможна.



Как мне можно скрыть названия ОС и Apache от всяких (x-toolz) сканеров?

Apache 1.3.x and 2.x :

Для Apache 1.3.x мы лезем в src/include/httpd.h и меняем:

Код:

# define SERVER_BASEPRODUCT "Apache"
# define SERVER_BASEREVISION "7.7.7"

На :

Код:

# define SERVER_BASEPRODUCT "Tamagochi"
# define SERVER_BASEREVISION "1.1.1"

Для второй ветки Apache, идём в httpd.conf и добавляем:

Header set Server "version not listed"

При этом отключаем службу индексации каталогов в
/etc/httpd/conf/httpd.conf :

Код:

ServerSignature Off

Надо поменять системные переменные sysctl:

Код:

# sysctl net.inet.ip.random_id=1
# sysctl net.inet.tcp.blackhole=2
# sysctl net.inet.udp.blackhole=1
# sysctl -w net.inet.icmp.maskrepl=1

Далее в /etc/pf.conf вносим директивы:

Код:

scrub in all fragment reassemble
pass in quick proto tcp from to
$my_ip port $ports flags S/SA
synproxy state block quick all

Я слышал о модуле "mod_rewrite". Зачем же нужен этот модуль?
//материал взят с http://blog.excode.ru/post13-protect_site_sql_injection_mod_rewrite.html
Этот модуль используется в Apache и используется для разных вещей. Кто то делает ссылки более красивыми,
но использовать его можно для разных целей. А одни используют для защиты своего сайта от sql inj.
Рассмотрим пример с паролем администратора. Пускай переменная $idmd передаёт GET запрос
http://mysite.ru/script.php?idmd=4k55hk34ghkdf6kh7khf5
Нам нужно заменить адрес http://mysite.ru/script_4k55hk34ghkdf6kh7khf5.html на адрес
http://mysite.ru/script.php?idmd=4k55hk34ghkdf6kh7khf5

Делается это следующей строкой:
Код:

RewriteRule http://mysite.ru/script_([a-z0-9]*).html http://mysite.ru/script.php?idmd=$1
Выражение ([a-z0-9]*) означает, что в данном месте может находиться
последовательность из цифр и букв любой длины. [a-z0-9] - перечисление
допустимых символов (в данном примере заданы диапазоны), знак * означает что таких
символов может быть несколько. Выражение которое соответствует маске находящейся в
скобках присваивается переменной $1 (цифра обозначает номер скобок) и вставляется
в адрес на который будем заменять входящий адрес.В результате этой манипуляции после того
как пользователь введет в строке адреса
http://mysite.ru/script_4k55hk34ghkdf6kh7khf5.html он автоматически попадет на страницу
http://mysite.ru/script.php?idmd=4k55hk34ghkdf6kh7khf5. И конечно же переменная $idmd
будет содержать значение "4k55hk34ghkdf6kh7khf5".Теперь давайте рассмотрим, что же
произойдет если пользователь попытается ввести
http://mysite.ru/script_'%20or%20login='admin'#.html (%20 - тоже самое что и пробел).
В результате этого запроса адрес попадет модулю mod_rewrite, который проанализирует его,
т.к. выражение '%20or%20login='admin'# не подходит под маску ([a-z0-9]*), т.к.
содержит недопустимые символы, то mod_rewrite ничего не сделает, так как будто его вообще нет,
очевидно, что в этом случае пользователю будет возвращена ошибка 404 Page not found
(404 страница не найдена).
Это и есть защита. Она не идеальна и имеет минусы, но есть и плюсы.
Главный минус - это то, что в скрипты, все же можно передать вредоносную информацию,
но для этого придется воспользоваться методом POST, а не GET. Второй минус - mod_rewrite
немного нагружает сервер, как и любые регулярные выражения. Главный плюс - пользователь не видит,
как называются ваши переменные.


Теперь с помощью mod_rewrite мы сделаем адрес на более красивый, а заодно и реализуем проверку на входные данные.
Для того чтобы использовать модуль mod_rewrite вам необходимо создать файл .htaccess в корневом каталоге:

Код:

RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^.htaccess$ - [F]

Например, чтобы нам подменить адрес http://mysite.ru/blabla.html на http://mysite.ru/xek.html необходимо написать:

Код:

RewriteRule http://mysite.ru/blabla.html  http://mysite.ru/xek.html

Constantine 17.03.2007 21:24

Незнаю как начало, но mod_rewrite сдут с http://webscript.ru/stories/07/02/01/2099269 (просто узнал), причем линков на источники и списка используемых матерьялов нет
А как остальное?

zl0ba 17.03.2007 21:41

Согласен, не было времени писать свои мысли по поводу mod_rewrite. Но что же писать когда я напишу тоже самое, прость другими словами.

Talisman 17.03.2007 21:43

4k55hk34ghkdf6kh7khf5
4k2jhk34jhkjh6kh7kh33

не сильно отличаются, неправда? :))
ЗЫ: неуказание источников наказывается, а вот сбор инфы и ее переработка - приветствуется, хотябы поиск по ачату поюзал:
http://forum.antichat.ru/thread27498.html - тут лучше про мод реврайт написано.
ИМХО.

Connor 18.03.2007 03:30

От народ ранимый пошел,ненужно писать чегото в чем неуверен,а если уже написал тогда слушай поправки другх и исправляйся.

Underwit 18.03.2007 05:54

Цитата:

Как говориться, от этой собаки спасенье нет. Или эффективной sql inj, а также xss и межсайтового скриптинга.
XSS и межсайтовый скриптинг это разве не одно и тоже или я ошибаюсь???

Constantine 18.03.2007 14:35

Это одно и тоже, просто "аффтор", видимо, этот кусок перепечатывал своими словами

Nova 09.05.2007 16:10

Маленькое дополнение
 
Установка mod_security на apache22

переходим в каталог [root@gw-server]cd /usr/ports/www/mod_security2

набираем make install clean
возможно у вас появиться такая ошибка как появилась у меня

Код:

[root@gw-server /usr/ports/www/mod_security2]# make install clean
===>  Building for mod_security2-2.1.0
===>  Generating apache plist
/usr/local/build-1/libtool --silent --mode=compile cc -prefer-pic -O2 -fno-strict-aliasing -pipe    -I/usr/local/include/apache22  -I/usr/local/include/apr-1  -I/usr/local/include/apr-1 -I/usr/local/include  -c -o apache2_config.lo apache2_config.c && touch apache2_config.slo
In file included from modsecurity.h:37,
                from apache2_config.c:15:
msc_pcre.h:18:18: pcre.h: No such file or directory
apache2_config.c: In function `cmd_audit_log_relevant_status':
apache2_config.c:583: error: `PCRE_DOTALL' undeclared (first use in this function)
apache2_config.c:583: error: (Each undeclared identifier is reported only once
apache2_config.c:583: error: for each function it appears in.)
apxs:Error: Command failed with rc=65536
.
*** Error code 1

Stop in /usr/ports/www/mod_security2.
[root@gw-server /usr/ports/www/mod_security2]#

для коректной установки понадобаиться добавить pcre

переходим в /usr/ports/devel/pcre и набираем make install clean

после того как соберёться сможем собрать наконец наш mod_security

delay(0) 09.05.2007 17:32

Цитата:

в опциях добавляем noexex.
Ошибка... noexeC
Также, не понятно, зачем
Цитата:

Вам надо вынести /var/tmp в отдельную файловую систему
Права поменять разве нельзя?
Ещё хороший метод защиты сервера: использование chroot-окружения.
Статья так се, если честно...

p-range 10.05.2007 21:33

Во-первых.
Цитата:

http://mysite.ru/script_'%20or%20login='admin'#.html (%20 - тоже самое что и пробел).
откуда взялась эта решетка #? здесь поидее должен быть комментарий /* или --.

Во-вторых, методов котороые здесь описаны, недостаточно для нормальной безопасности веб-сервера.
имхо, на faq не тянет \=


Время: 22:49