Захист веб-сервера Apache від атаки повільного читання, а також деяких інших спрямованих атак

Про схильність більшості веб-серверів у стандартній конфігурації атаці повільного читання написано вже досить багато, на відміну від практичних методів захисту. Розглянутий спосіб дозволяє убезпечити роботу веб-сервера Apache за допомогою розширень mod_evasive і mod_security, а головне - вимагає менше півгодини на реалізацію. Як приклад наведено налаштування на Ubuntu, однак користуючись загальними вказівками, можна зробити налаштування і в інших операційних системах.

веб-сервера

Установка пакетів Оскільки сервер, що захищається, встановлений на Ubuntu, установка необхідних модулів для Apache виконується однією командою:

sudo apt-get install libapache2-mod-evasive libapache-mod-security libxml2-dev

Пакет mod_evasive забезпечить захист від DDOS атак, тоді як mod_security забезпечить захист від спрямованих атак, у тому числі й атаки повільного читання. Пакет libxml2-dev необхідний роботи розширеного функціоналу mod_security.

По своїй суті, mod_security - це opensource програмний фаєрвол, що захищає вебсервер, що розробляється Trustwave SpiderLabs.

Налаштування mod_evasive Для роботи модуля знадобиться папка для збереження логів із правами для запису Apache (передбачається, що веб-сервер запущений від користувача www-data):

sudo mkdir /var/log/mod_evasive sudo chown www-data:www-data /var/log/mod_evasive/

Створимо файл із налаштуваннями:

sudo nano /etc/apache2/conf.d/modevasive DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1

Налаштування mod_security Для роботи mod_security використовує набір правил. Завантажити нові правила можна зі сторінки на SourceForge. У завантаженому архіві Ви знайдете кілька папок. Нас цікавлятьбазові правила, що знаходяться у папці base_rules. Створимо папку для правил, скопіюємо їх із завантаженого з sf та розпакованого файлу.

sudo mkdir /etc/apache2/mod_security_rules sudo mv base_rules/* /etc/apache2/mod_security_rules sudo chown -R root:root /etc/apache2/mod_security_rules

Створимо файл конфігурації для mod_security з таким вмістом:

sudo nano /etc/apache2/conf.d/modsecurity Include mod_security_rules/*.conf SecWriteStateLimit 100

Даний конфіг підключить щойно скопійовані нами правила, а також встановить ліміт на кількість потоків на кожен окремий IP, які можуть перебувати в режимі SERVER_BUSY_WRITE, що запобігає можливості виконання атак типу Slow Loris/SlowHttp.

Для 32-бітної версії Ubuntu налаштування закінчується. У x64 потрібно зробити ще одне дійство — у файлі /etc/apache2/mods-enabled/mod-security.load потрібно замінити шлях, яким розташована бібліотека, що підключається з /usr/lib/ на /usr/lib/x86_64- linux-gnu/.

Переконайтеся, що модулі підключені:

sudo a2enmod mod-evasive sudo a2enmod mod-security

і перезапустимо Apache для застосування конфігів:

service apache2 restart

Тестування Для тестування використовуємо утиліту slowhttptest. Про її налаштування та встановлення можна прочитати на сторінках проекту, тому перейдемо одразу до застосування.

slowhttptest -c 65539 -B -g -o my_server_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u DOMAIN.COM -x 10 -p 3

Якщо вірити висновку програми, то вже на п'ятій секунді сервер стає недоступним:

Sat Jun 2 16:41:37 2012:slow HTTP test status на 5th second: ініціатива: 0 pending: 564 connected: 217 error: 0 closed: 0 service available: NO

А ось, що записав у логі Apache:

tail /var/log/apache2/error.log [Sat Jun 02 16:41:38 2012] [warn] ModSecurity: Access denied with code 400. Too many threads [101] of 100 allowed in WRITE state from xxx .xxx.xxx.xxx - Possible DoS Consumption Attack [Rejected]