Как повысить безопасность веб-приложений::Журнал СА 2.2006
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6413
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7117
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4395
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3086
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3882
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3897
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6385
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3234
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3529
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7364
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10726
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12445
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14096
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9192
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7142
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5446
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4683
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3495
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3212
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3449
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3090
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Как повысить безопасность веб-приложений

Архив номеров / 2006 / Выпуск №2 (39) / Как повысить безопасность веб-приложений

Рубрика: Безопасность /  Механизмы защиты

Сергей Яремчук

Как повысить безопасность веб-приложений

Хорошая вещь швейцарский нож: есть и ножницы, пилочка, отвертка и еще много нужных предметов, но вот пользоваться им не очень удобно. В повседневной жизни лучше применять индивидуальный инструмент. В мире безопасности аналогичная ситуация.

Традиционно для защиты сетевых приложений используют системы обнаружения и остановки атак, а также межсетевые экраны, работающие на третьем сетевом уровне модели OSI. В то же время такой подход имеет и недостатки. Так, при включении в разрыв необходим IP-адрес, при этом IPS (Intrusion Prevention Systems) легко обнаруживается и система сама может подвергнуться нападению. Выходом из такой ситуации является переход на более низкий, т.е. канальный уровень OSI, что с успехом и применяется в такой IPS, как hogwash [1]. Но увеличение потоков данных привело к тому, что такие системы требуют серьезной аппаратной поддержки, иначе они просто не успевают обрабатывать информацию. С другой стороны IPS, как правило, не знает, что конкретно она защищает (хотя это можно настроить, убрав лишние правила), поэтому ресурсы системы расходуются зря. Но зато она точно не владеет информацией о событиях, происходящих в конкретных приложениях. Кроме того, такие системы позволяют защитить только наиболее часто используемые приложения. Поэтому они смогут обеспечить только некий минимальный базовый уровень защиты, а учитывая, что на сегодняшний день увеличилось количество нападений на прикладном уровне, этого явно недостаточно. Для выполнения более широкого набора проверок, контроля трафика и реагирования на нападение в реальном времени, требуется поместить IPS и firewall поближе к приложению, т.е. на седьмой уровень.

Firewall веб-приложений

Судя по статистике, именно веб-сервисы привлекают сегодня нападающего. Это, впрочем, не удивительно, так как веб-технологии ориентированы в первую очередь на публичный доступ 24 часа в сутки 7 дней в неделю. Поэтому его невозможно спрятать за межсетевым экраном. Каждая из атак, направленных на этот сервис, представляет собой специально составленные запросы, которые выглядят как обычный трафик, поэтому он беспрепятственно проходит через него. Один из возможных путей решения проблемы описан в [2], но такие мероприятия можно отнести скорее к упреждающим. Для остановки атаки необходимо использовать персональные IPS – firewall веб-приложений (Web Application Firewall – WAF). Они действуют по принципу обратного прокси-сервера, стоящего между сервером и клиентами. Один такой прокси может одновременно обслуживать несколько веб-серверов, что упрощает администрирование, позволяет централизованно управлять доступом, увеличивая производительность, кэшируя запросы, сжимая информацию. Кроме того, такой подход скрывает топологию сети. Поскольку модуль расположен между клиентом и сервером, то в случае, когда он обнаружит запрос, содержащий злонамеренные данные, он вполне может отклонить, преобразовать запрос или выполнить любое другое действие. К слову сказать, на сегодняшний день нет единой устоявшейся терминологии, каждый производитель называет продукт по-своему. Поэтому в Интернете следует искать информацию в различных сочетаниях. Например, Adaptive Firewall (Proxy, Gateway), Application (level или -layer) Firewall, Web IPS или Deep Packet Inspection Firewalls и другие. Имеются как аппаратные решения, так и программные. К первым относятся такие, как TrafficShield Application Firewall [3], в котором применена так называемая положительная модель безопасности, запрещающая все, что явно не разрешено, или NetContinuum NC-2000 AG Secure Application Gateways [4], который является гибридным устройством, объединяющим в себе функции firewall веб-приложений и коммутатора седьмого уровня. Или подобный гибрид от компании Imperva Inc. SecureSphere Web Application Firewall [5], имеющий фирменную технологию Dynamic Profiling, которая формирует модель нормального поведения приложения. Такие гибридные устройства имеют подробное представление о защищаемом веб-сервере и о конкретных приложениях. Они обладают достаточной функциональностью, позволяющей надежно защитить веб-сервис, но и стоят дорого. Среди программных решений особо хотелось бы выделить основанный на OpenBSD мощный и легкий в управлении firewall веб-приложений датский продукт Profense [6], стоящий отдельного обзора. А также бесплатные Open Source продукты: написанные на Java и ориентированные на все серверы, работающие по протоколу HTTP/HTTPS Guardian@JUMPERZ.NET [8] и mod_security [9], о котором пойдет речь далее.

Проект ModSecurity

ModSecurity создан Иваном Ристиком (Ivan Ristic) в 2003 году и представляет собой firewall веб-приложений, который может использоваться как модуль веб-сервера Apache, либо работать в автономном режиме и позволяющий защитить веб-приложения как от известных, так и неизвестных атак. Его использование прозрачно, как установка, так и удаление не требует изменения настройки сервисов и сетевой топологии. Кроме того, при обнаружении уязвимого места теперь не обязательно впопыхах изменять исходный код, делая новые ошибки, достаточно на первых порах добавить новое правило, запрещающее вредную комбинацию. Modsecurity может защищать одновременно несколько веб-серверов, в том числе и отличных от Apache (рис. 1).

Рисунок 1. ModSecurity может быть установлен как отдельно, так и защищать группу разнородных веб-серверов

Рисунок 1. ModSecurity может быть установлен как отдельно, так и защищать группу разнородных веб-серверов

Кроме обычных соединений может контролировать и защищенный SSL-трафик. Гибкозадаваемые правила журналирования позволяют записать любые данные сеанса, позволяя в будущем полностью разобрать запросы, предшествующие взлому. Понимание протокола HTTP позволяет очень тонко выполнить фильтрацию, поддерживается как GET, так и POST-методы, запросы к динамическим ресурсам. Для борьбы с различными методами уклонения (ссылки на внешние сайты, закодированные URL, использование нескольких слэшей, нулевые байты и пр.) пути и параметры нормализуются. В новой версии 1.9, вышедшей в ноябре 2005 года, возможно наследование правил, используется новый формат контрольного журнала, позволяющий производить аудит в реальном времени (старый формат оставлен, но может быть удален в версии 2.0). Кроме того, в этой версии введен новый механизм, названный guardian, задачей которого является контроль запросов, производимых с одного адреса, что позволяет защититься от DOS-атак, настраивая правила iptables. Интеграция с Open Source антивирусом ClamAV дает возможность сканировать загружаемые файлы на наличие вирусов. В версии добавлена поддержка PCRE, которую теперь можно использовать вместо библиотеки regex для Apache 1.3. Количество кода по сравнению с предыдущей версией выросло на 40%. Распространяется ModSecurity под двойной лицензией: GNU GPL, как свободное Open Source приложение, также доступно несколько вариантов end-user и OEM коммерческих лицензий.

Установка ModSecurity

На момент написания статьи актуальной была версия 1.9.2, имеющая незначительные исправления. Для упрощения будем рассматривать использование ModSecurity для веб-сервера, установленного на том же компьютере, описание остальных настроек вы найдете в документации проекта. При установке из исходных текстов возможны два варианта: компиляция как динамической библиотеки и компиляция в качестве модуля веб-сервера. В первом случае распаковываем архив и заходим внутрь каталога соответствующего версии веб-сервера Apache.

$ wget –c http://www.modsecurity.org/download/modsecurity-apache-1.9.2.tar.gz

$ tar –xzvf modsecurity-apache-1.9.2.tar.gz

$ cd modsecurity-apache-1.9.2/apache2

Для сборки используется apxs – APache eXtenSion tool. Если Apache устанавливался вместе с дистрибутивом, убедитесь в наличии заголовочных файлов и утилиты apxs. В ALTLinux заголовочные файлы находятся в /usr/include/apache2. Если в вашем дистрибутиве их нет, то доустановите соответствующий devel-пакет (например, httpd-devel), в некоторых дистрибутивах в него включен и apxs. В ALTLinux Master, в котором может быть установлена любая из двух версий Apache 1.3 и 2.0, скрипт apxs используется при компиляции динамических библиотек для версии 1.3. При использовании второй версии сервера библиотеки необходимо применять apxs2.

# /usr/sbin/apxs2 -cia mod_security.c

/usr/lib/apache2/modules

/usr/share/apr/build/libtool --mode=install cp mod_security.la /usr/lib/apache2/modules/

cp .libs/mod_security.so /usr/lib/apache2/modules/mod_security.so

cp .libs/mod_security.lai /usr/lib/apache2/modules/mod_security.la

cp .libs/mod_security.a /usr/lib/apache2/modules/mod_security.a

ranlib /usr/lib/apache2/modules/mod_security.a

chmod 644 /usr/lib/apache2/modules/mod_security.a

PATH="$PATH:/sbin" ldconfig -n /usr/lib/apache2/modules

----------------------------------------------------------------------

Libraries have been installed in:

   /usr/lib/apache2/modules

----------------------------------------------------------------------

chmod 755 /usr/lib/apache2/modules/mod_security.so

[activating module `security" in /etc/httpd2/conf/httpd2.conf]

Последнее сообщение говорит о том, что в конфигурационный файл веб-сервера занесена строка для запуска Dynamic Shared Object (DSO): «LoadModule /usr/lib/apache2/modules/mod_security.so».

Проверьте ее наличие. При установке в качестве модуля Apache необходимо скопировать файл mod_security.c в подкаталог httpd-2.0.xx/modules/proxy и сконфигурировать со следующими опциями.

$ ./configure -enable-security --with-module=proxy:mod_security.c

$ make

# make install

Прежде чем перезапускать веб-сервер, необходимо отредактировать конфигурационный файл, в котором подключить библиотеки и настроить правила фильтрации. Архив с исходными текстами содержит пример httpd.conf.example-minimal, копируем его на место:

# cp httpd.conf.example-minimal /etc/httpd2/conf/mod_security.conf

Подключаем его в конфигурационном файле веб-сервера строкой:

Include /etc/httpd2/conf/mod_security.conf

Конфигурационный файл ModSecurity

Рассмотрим основные параметры:

<IfModule mod_security.c>

# Включение проверок ModSecurity, возможны три варианта:

# Off – проверки не производятся, On – проверяется все

# и DynamicOnly – только динамически сгенерированные запросы

# (позволяет сэкономить ресурсы процессора)

SecFilterEngine On

# При совпадении правил могут быть произведены одно

# или более действий, каждый фильтр может иметь

# индивидуальный список действий, этим параметром

# определяются действия по умолчанию.

# Среди основных действий – deny, pass и redirect.

# Среди второстепенных – exec, к действиям, изменяющим

# прохождение цепочек, относится chain и skip. Действия

# описаны в таблице 1. После действий можно указать

# параметры, например статус

SecFilterDefaultAction "deny,log,status:430"

# Включение декодирования POST-запросов, поддерживается

# два типа (application/x-www-form-urlencoded

# и multipart/form-data)

SecFilterScanPOST On

SecFilterCheckURLEncoding On

SecFilterCheckUnicodeEncoding Off

# Можно определить диапазон разрешенных символов

# (эта директива не распространяется на POST

# с multipart/form-data)

SecFilterForceByteRange 0 255

# Можно замаскировать сервер, указав здесь другие данные.

# Некоторые эксплоиты перед началом работы проверяют банер

# (ответ сервера), а нападающий будет сбит с толку, правда,

# на некоторое время, т.к. на Linux IIS не ставится.

# SecServerSignature "Microsoft-IIS/5.0"

# Параметры хранения временных файлов и скрипт для проверки

# ClamAV (найдете в каталоге util архива)

SecUploadDir /tmp

SecUploadApproveScript  /usr/bin/modsec_clamscan.pl

SecUploadKeepFiles Off

# Защита от DOS-атак, при превышении (по умолчанию)

# 120 запросов в минуту и 360 за 5 минут адрес блокируется

# при помощи iptables, требует скрипт blacklist.

# Скрипт httpd-guardian и blacklist найдете в архиве [13]

SecGuardianLog | /usr/bin/httpd-guardian

# Ведение журнала аудита и отладки

SecAuditEngine RelevantOnly

# SecAuditLogRelevantStatus ^5

SecAuditLog logs/modsec_audit.log

# Либо можно подключить экспериментальный скрипт

# modsec-auditlog-collector.pl, контролирующий журналы

# и отсылающий информацию на http-сервер.

# SecAuditLog | /path/to/modsec-auditlog-collector.pl logs/modsec_audit.log logs/index

SecFilterDebugLevel 0

SecFilterDebugLog logs/modsec_debug.log

# Просмотр выходной информации (работает только в версии

# для Apache 2) необходим для параметра OUTPUT

# (примеры см. далее по тексту)

SecFilterScanOutput On

# Кроме общих правил, можно задавать правила для отдельных

# каталогов веб-сервера

<Location /axis/modsec.jws>

….

</Location>

# Далее при помощи директив SecFilter или  SecFilterSelective

# указываются правила

</IfModule>

Таблица 1. Действия, выполняемые при совпадении запроса

Действие

Описание

Пример

pass

Действие, полезное в том случае, когда необходимо зарегистрировать событие, и далее продолжить прохождение по цепочке правил

SecFilter KEYWORD "log,pass"

allow

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

SecFilterSelective REMOTE_ADDR "^192.168.1.99$" allow

deny

Запрет запроса (по умолчанию используется статус 500)

 

status

Код HTTP-статуса при запрете запроса. Активизируется  директива Apache ErrorDocument и выводится соответствующая страница

SecFilter KEYWORD "deny,status:404"

redirect

Пользователь перенаправляется на указанный адрес (не должен содержать запятую). Переопределяет status и deny

SecFilter KEYWORD "redirect:http://www.example.com"

proxy

Запрос перенаправляется на внутренний обратный прокси (mod_proxy)

SecFilter KEYWORD "proxy:http://www.example.com"

exec

Выполнение внешней команды (без параметров), которая получит все переменные CGI среды (по окончании команда должна что-то вывести в stdin, иначе ModSecurity решит, что выполнение завершилось с ошибкой)

SecFilter KEYWORD "exec:/usr/bin/report-attack"

log

Регистрация события в журнал ошибок

 

nolog

Не регистрировать событие в журналах ошибок и аудита

 

skipnext

Пропуск одного (по умолчанию) или нескольких следующих правил

SecFilterSelective ARG_p value1 skipnext:2

chain

Подключение нескольких правил в единый тест. Действие будет разрешено только в том случае, когда будут выполнены все правила. Например, администратора только с указаного IP-адреса

SecFilterSelective ARG_username admin chain SecFilterSelective REMOTE_ADDR "^192.168.1.99$"

pause

Задержка в миллисекундах перед ответом на запрос (может быть полезна при борьбе со сканерами)

 

auditlog

Регистрация в журнал аудита

 

noauditlog

Не регистрировать событие в журнале аудита

 

id

rev

msg

severity

Эти действия предназначены для вывода параметров в журнале ModSecurity, помогает собрать больше информации и классифицировать ошибки

Id – уникальный ID правила (для собственных правил используйте диапазон 1 – 99999)

rev – версия правила

msg – текстовое сообщение

severity – цифровое значение (2-5) или название в syslog

mandatory

Наследование правил

 

setenv

setnote

Установка или сброс переменных среды и Apache

SecFilter KEYWORD setenv:name=value

Например, при помощи MODSEC_ENABLE можно на лету переопределять значение директивы SecFilterEngine

Правила ModSecurity

Отбор запросов ModSecurity осуществляет на основе правил. Ключевое слово в правиле может быть не только простым текстом, но и записываться в виде регулярного выражения. Например, используя следующее правило, можно отсеять все запросы, не содержащие слово php (действие deny используется по умолчанию, но для наглядности его лучше прописывать явно):

SecFilter !php

или так:

SecFilter !php deny

или, например:

SecFilter /etc/passwd

а лучше:

SecFilter "/(etc|bin|sbin|kernel|dev|tmp|var|opt)/"

Но такое правило хотя и пишется легко, но будет работать медленно, так как будет искать эту строку во всех параметрах. Поэтому на практике чаще всего используется директива SecFilterSelective. В общем случае правило, составленное с ее помощью, будет иметь такой вид:

SecFilterSelective LOCATION KEYWORD [ACTIONS]

Параметры KEYWORD и ACTIONS аналогичны SecFilter, LOCATION определяет местонахождение искомой строки. Здесь может быть использовано регулярное выражение, IP-адрес, имя, идентификаторы, включая CGI-переменные (полный список приведен в «ModSecurity for Apache User Guide», который найдете в подкаталоге doc-архива). Например:

# Прием только тех запросов, которыми может оперировать ModSecurity

SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain

SecFilterSelective HTTP_Content-Type "!(^application/x-www-form-urlencoded$|^multipart/form-data;)"

# Запрет GET или HEAD с ненулевым телом

SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain

SecFilterSelective HTTP_Content-Length "!^$"

# То же для каждого POST-запроса

SecFilterSelective REQUEST_METHOD "^POST$" chain

SecFilterSelective HTTP_Content-Length "^$"

# Чтобы избежать атак, направленных на переполнение буфера, используем

SecFilterSelective THE_ REQUEST "!^[\x0a\x0d\x20-\x7f]+ $"

# Запрет вывода, содержащего опасное словосочетание

SecFilterSelective OUTPUT "credit card numbers"

# Или вывода команды ls –l

SecFilterSelective OUTPUT "total [[:digit:]]+"

# Также полезно запретить вывод пользователю ошибок сценариев

SecFilterSelective OUTPUT "Fatal error:"

Команда разработчиков во главе с Иваном Ристиком основной упор делает на усовершенствование кода ModSecurity, оставляя создание правил пользователям, поэтому оригинальный конфигурационный файл имеет всего несколько правил. Недавно был официально анонсирован субпроект, цель которого создание и тестирование правил [11]. Для их использования необходимо скачать и подключить требуемый файл правил в конфигурационном файле ModSecurity директивой Include. Некоторые из правил требуют редактирования, кроме того, следует учитывать особенности rexeс и PCRE, поэтому правила, созданные для Apache 2.x, могут неправильно работать с первой версией сервера (о том, как собрать первую версию с поддержкой PCRE, рассказано в документации). Кроме того, в подкаталоге util найдете скрипт snort2modsec.pl, преобразующий правила IDS Snort в правила ModSecurity (и готовый файл snortmodsec-rules.txt, содержащий преобразованные таким образом правила, актуальные на момент выхода дистрибутива).

Получить их самому очень просто.

$ tar zxvf snortrules-snapshot-CURRENT.tar.gz

$ cat README.first > snortmodsec-rules.txt

$ ./snort2modsec.pl rules/* >> snortmodsec-rules.txt

Аналогичную роль играет скрипт nessus2modsec.pl, предназначенный для преобразования NASL правил сканера безопасности Nessus/GNessUs. Формат запуска такой же.

Теперь, когда правила составлены, перезапускаем веб-сервер и тестируем.

# /etc/init.d/httpd2 restart

Stopping httpd2 service:                                 [ DONE ]

Checking configuration sanity for httpd2:  Syntax OK     [ DONE ]

Starting httpd2 service:                                 [ DONE ]

Тестируем правила

Для тестирования работы ModSecurity можно использовать любой из сканеров безопасности, умеющий проверять уязвимости веб-сервисов [2]. Кроме того, в комплект дистрибутива входит скрипт run-test.pl, предназначенный для посылок тестовых запросов. Попробуем создать простейшее правило, запрещающее доступ к каталогу скриптов cgi-bin, и отследить в журналах реакцию системы на его нарушение. Вот это правило:

SecFilter cgi-bin

Запускаем веб-сервер сначала без поддержки ModSecurity и убеждаемся, что запрос к http://localhost/cgi-bin/printenv выполняется успешно. Затем подключаем ModSecurity, результат на (рис. 2), как видите, запрос не прошел с кодом ошибки 403. Смотрим, что написано в журналах (в ALTLinux /var/log/httpd2).

Рисунок 2. Запрос, запрещенный правилами, не прошел

Рисунок 2. Запрос, запрещенный правилами, не прошел

Журнал регистрации запросов access_log содержит следующую запись.

127.0.0.1 - - [06/Feb/2006:15:16:25 +0000] "GET /cgi-bin/printenv HTTP/1.1" 403 299

Журнал ошибок поясняет, что доступ клиенту, пришедшему с адреса 127.0.01, запрещен модулем mod_security, потому что совпал образец «cgi-bin».

[Mon Feb 06 15:16:25 2006] [error] [client 127.0.0.1] mod_security: Access denied with code 403.

Pattern match "cgi-bin" at REQUEST_URI [hostname "localhost"] [uri "/cgi-bin/printenv"] [unique_id "vwk-VsCoABQAAA7tBpoAAAAA"]

Кстати, на основании этой записи можно уже оптимизировать правило. Вот так:

SecFilterSelective REQUEST_URI  "cgi-bin"

Теперь журналы ModSecurity. Файл modsec_audit.log содержит всю информацию о запросе.

==83d74643==============================

Request: localhost 127.0.0.1 - - [06/Feb/2006:15:16:25 +0000] "GET /cgi-bin/printenv HTTP/1.1" 403 299

"-" "Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)" vwk-VsCoABQAAA7tBpoAAAAA "-"

Handler: cgi-script

----------------------------------------

GET /cgi-bin/printenv HTTP/1.1

Connection: Keep-Alive

User-Agent: Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)

Accept: text/html, image/jpeg, image/png, text/*, image/*, */*

Accept-Encoding: x-gzip, x-deflate, gzip, deflate

Accept-Charset: windows-1251, utf-8;q=0.5, *;q=0.5

Accept-Language: ru, en

Host: localhost

mod_security-action: 403

mod_security-message: Access denied with code 403. Pattern match "cgi-bin" at REQUEST_URI

 

HTTP/1.1 403 Forbidden

Content-Length: 299

Keep-Alive: timeout=15, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=iso-8859-1

--83d74643--

А в modsec_debug.log найдете информацию обо всех использованных при запросе правилах.

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Detection phase starting (request 8182958): "GET /cgi-bin/printenv HTTP/1.1"

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Parsing arguments...

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][3]

Content-Type is not available

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Checking signature "!^(GET|HEAD)$" at REQUEST_METHOD

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Checking signature "^(GET|HEAD)$" at REQUEST_METHOD

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][3]

Warning (chained rule). Pattern match "^(GET|HEAD)$" at REQUEST_METHOD

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Checking signature "!^$" at HEADER(Content-Length)

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Checking signature "^POST$" at REQUEST_METHOD

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Checking signature "!^$" at HEADER(Transfer-Encoding)

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Checking signature "cgi-bin" at THE_REQUEST

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][1]

Access denied with code 403. Pattern match "cgi-bin" at REQUEST_URI

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

Logging phase starting

[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958][/cgi-bin/printenv][2]

sec_audit_logger_serial: start

Выводы

Только система, не подключенная к сети, может быть 100% безопасной, но веб-сервис должен быть публичным, иначе он теряет смысл. Выявить все слабые места практически не возможно. По данным компании Netcraft, отслеживающей, какое программное обеспечение используется серверами в Интернете, хакеры всё чаще эксплуатируют дыры в распространенных приложениях на основе РНР. Обычный межсетевой экран здесь не помогает. Только специализированное программное обеспечение способно остановить атаку. ModSecurity чрезвычайно функциональный, простой в конфигурировании и главное совершенно бесплатный инструмент, использование которого позволит повысить безопасность предоставляемых веб-услуг, а относительная легкость написания правил поможет быстро среагировать на угрозу.

Литература, ссылки:

  1. Яремчук С. Все в одном, или Hogwash как пример Gateway-IDS. – Журнал «Системный администратор», №1, 2005 г. – 50-55 с (http://www.samag.ru/cgi-bin/go.pl?q=articles;n=01.2005;a=11).
  2. Яремчук С. Определяем уязвимости веб-сервиса с помощью Acunetix Web Vulnerability Scanner. – Журнал «Системный администратор», №9, 2005 г. – 68-69 с (http://www.samag.ru/cgi-bin/go.pl?q=articles;n=09.2005;a=12).
  3. Сайт F5 Networks, Inc. – http://www.f5.com/products.
  4. Сайт NetContinuum – http://www.netcontinuum.com.
  5. Сайт Imperva Inc. – http://www.imperva.com/products/securesphere/web_application_firewall.html.
  6. Проект Profense – http://www.armorlogic.com.
  7. Списки некоторых Web Application Firewall – http://www.bitpipe.com/rlist/term/Web-Application-Security.html.
  8. Проект Guardian@JUMPERZ.NET – http://guardian.jumperz.net.
  9. Проект mod_security – http://www.modsecurity.org.
  10. Проект WASC (Web Application Security Consortium), здесь найдете документы, показывающие проблемы защиты веб-приложений и их возможные решения – http://www.webappsec.org.
  11. Субпроект ModSecurity Rules – http://www.modsecurity.org/projects/rules/index.html.
  12. Ссылка на текущие правила для ModSecurity – http://www.modsecurity.org/download/modsecurity-rules-current.tar.gz.
  13. Архив инструментов для Apache – http://www.apachesecurity.net/download/snapshot/apache_tools-snapshot.tar.gz.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru