Атака на відмову в обслуговуванні, розподілена атака на відмову в обслуговуванні () — напад на комп'ютерну систему з наміром зробити комп'ютерні ресурси недоступними користувачам, для яких комп'ютерна система була призначена.

Одним із найпоширеніших методів нападу є насичення атакованого комп'ютера або мережевого устаткування великою кількістю зовнішніх запитів (часто безглуздих або неправильно сформульованих) таким чином атаковане устаткування не може відповісти користувачам, або відповідає настільки повільно, що стає фактично недоступним. Взагалі відмова сервісу здійснюється: примусом атакованого устаткування до зупинки роботи програмного забезпечення/устаткування або до витрат наявних ресурсів, внаслідок чого устаткування не може продовжувати роботу; заняттям комунікаційних каналів між користувачами і атакованим устаткуванням, внаслідок чого якість сполучення перестає відповідати вимогам.

Якщо атака відбувається одночасно з великої кількості IP-адрес, то її називають розподіленою ( — DDoS).

Анатомія DoS-атак

DoS-атаки поділяються на локальні та віддалені. До локальних відносяться різні експлойти: форк-бомби і програми, що відкривають по мільйону файлів або запускають якийсь циклічний алгоритм, який «з'їдає» пам'ять та процесорні ресурси. Для локальної DoS атаки необхідно мати, або якимось чином отримати доступ до атакованої машини на рівні, що буде достатнім для захоплення ресурсів.

Розглянемо віддалені DoS-атаки. Вони поділяються на два види: Віддалена експлуатація помилок в ПЗ з метою довести його до неробочого стану. Flood (UDP-флуд, ICMP-флуд, MAC-флуд) — надсилання на адресу жертви величезної кількості безглуздих (рідше — осмислених) пакетів. Метою флуду може бути канал зв'язку або ресурси машини. У першому випадку потік пакетів займає весь пропускний канал і не дає машині, що атакується, можливості обробляти легальні запити. У другому — ресурси машини захоплюються за допомогою багаторазового і дуже частого звернення до якого-небудь сервісу, що виконує складну, ресурсоємну операцію. Це може бути, наприклад, тривале звернення до одного з активних компонентів (скрипту) web-сервера. Сервер витрачає всі ресурси машини на обробку запитів, що атакують, а користувачам доводиться чекати.

У традиційному виконанні (один нападник — одна жертва) зараз залишається ефективним лише перший вид атак. Класичний флуд — марний. Просто тому що при сьогоднішній ширині каналу серверів, рівні обчислювальних потужностей і повсюдному використанні різних анти-DoS прийомів в ПЗ (наприклад, затримки при багаторазовому виконанні тих самих дій одним клієнтом), нападник перетворюється на докучливого комара, не здатного завдати будь-якого збитку. Але якщо цих «комарів» наберуться сотні, тисячі або навіть сотні тисяч, вони легко покладуть сервер на лопатки. Розподілена атака типу «відмова в обслуговуванні» (DDoS), зазвичай здійснювана за допомогою безлічі «зазомбованих» хостів, може відрізати від зовнішнього світу навіть найстійкіший сервер, і єдиним ефективним захистом при цьому є організація розподіленої системи серверів (кластера).

Є два варіанти організації DDoS атак: Ботнет — зараження певного числа комп'ютерів програмами, які в певний момент починають здійснювати запити до атакованого сервера. Флешмоб — домовленість великого числа користувачів інтернету почати здійснювати певні типи запитів до атакованого сервера.

Методи боротьби Небезпека більшості DDoS-атак — в їх абсолютній прозорості і «нормальності». Адже якщо помилка в ПЗ завжди може бути виправлена, то повна витрата ресурсів — явище майже буденне. З ними стикаються багато адміністраторів, коли ресурсів машини (ширини каналу) стає недостатньо, або web-сайт піддається слешдот-ефекту. І, якщо різати трафік і ресурси для всіх підряд, то можна врятуватися від DDoS, у той же час, втративши велику частину клієнтів.

Виходу з цієї ситуації фактично немає, проте наслідки DDoS-атак і їх ефективність можна істотно понизити за рахунок правильного налаштування маршрутизатора, брандмауера і постійного аналізу аномалій в мережевому трафіку.

Є кілька методів боротьби, один із них полягає використання фільтрувальної мережі. Мережа приймає трафік на себе, фільтрує його і до цільового сервера доходить тільки перевірений і якісний трафік від реальних користувачів.

Боротьба з flood-атаками Отже, існує два типи DoS/DDoS-атак, і найпоширеніша з них заснована на ідеї флуда, тобто завалення жертви величезною кількістю пакетів. Флуд буває різним: ICMP-флуд, SYN-флуд, UDP-флуд і HTTP-флуд. Сучасні DoS-боти можуть використовувати всі ці види атак одночасно, тому слід заздалегідь поклопотатися про адекватний захист від кожної з них.

Icmp-флуд Дуже примітивний метод забивання смуги пропускання і створення навантажень на мережевий стек через монотонну посилку запитів ICMP ECHO (пінг). Легко виявляється за допомогою аналізу потоків трафіку в обидві сторони: під час атаки типу Icmp-флуд вони практично ідентичні.

Виконання # ping -i 0 -s 10000 -l 100 -q ya.ru -i задає інтервал надсилання пакетів. Інтервал менше 200 мс дозволений тільки суперкористувачу. -s задає розмір пакету. Стандартний 54, найбільший 65507 байт. -l задає кількість пакетів що відправляються без очікування на відповідь, і -q робить так щоб утиліта вивела лише підсумки.

Захист Майже безболісний спосіб абсолютного захисту заснований на відключенні відповідей на запити ICMP ECHO: # sysctl net.ipv4.icmp_echo_ignore_all=1

Або за допомогою брандмауера: # iptables -A INPUT -p icmp -j DROP --icmp-type 8

SYN-флуд Один з поширених способів не лише забити канал зв'язку, але і ввести мережевий стек операційної системи в такий стан, коли він вже не зможе приймати нові запити на підключення. Заснований на спробі ініціалізації великого числа одночасних TCP-з'єднань через посилку SYN-пакету з неіснуючою зворотною адресою. Після декількох спроб відіслати у відповідь ACK-пакет на недоступну адресу більшість операційних систем ставлять невстановлене з'єднання в чергу. І лише після n-ї спроби закривають з'єднання. Оскільки потік ACK-пакетів дуже великий, незабаром черга виявляється заповненою, і ядро дає відмову на спроби відкрити нове з'єднання. Найрозумніші DoS-боти ще й аналізують систему перед початком атаки, щоб слати запити лише на відкриті життєво важливі порти. Ідентифікувати таку атаку просто: досить спробувати підключитися до одного з сервісів. Оборонні заходи зазвичай включають: Збільшення черги «напіввідкритих» tcp-з'єднань: # sysctl -w net.ipv4.tcp_max_syn_backlog=1024 Зменшення часу утримання «напіввідкритих» з'єднань: # sysctl -w net.ipv4.tcp_synack_retries=1 Включення механізму TCP syncookies: # sysctl -w net.ipv4.tcp_syncookies=1 Обмеження максимального числа «напіввідкритих» з'єднань з одного IP до конкретного порту: # iptables -i INPUT -p tcp --syn --dport 80 -m iplimit --iplimit-above 10 -j DROP

UDP-флуд Типовий метод захаращення смуги пропускання. Заснований на нескінченній посилці udp-пакетів на порти різних udp-сервісів. Легко усувається за рахунок відрізання таких сервісів від зовнішнього світу і установки ліміту на кількість з'єднань в одиницю часу до dns-сервера на стороні шлюзу:

# iptables -i INPUT -p udp --dport 53 -j DROP -m iplimit --iplimit-above 1

HTTP-флуд Один з найпоширеніших на сьогоднішній день способів флуду. Заснований на нескінченному посиланні http-повідомлень GET на 80-й порт із метою завантажити web-сервер настільки, щоб він виявився не в змозі обробляти всю решту запитів. Часто, метою флуду стає не корінь web-сервера, а один із скриптів, що виконують ресурсоємні завдання або що працює з базою даних. У будь-якому разі, індикатором атаки, що почалася, служитиме аномально швидке зростання логів web-сервера.

Методи боротьби з HTTP-флудом включають тюнінг web-сервера і бази даних з метою понизити ефект від атаки, а також відсіювання DoS-ботів за допомогою різних прийомів. По-перше, слід збільшити максимальне число з'єднань до бази даних одночасно. По-друге, встановити перед web-сервером Apache легкий і продуктивний nginx — він кешуватиме запити і видаватиме статику. Це рішення із списку «Must have», яке не лише понизить ефект DoS-атак, але і дозволить серверу витримати величезні навантаження. Невеликий приклад:

# vi /etc/nginx/nginx.conf # Збільшує максимальну кількість використовуваних файлів worker_rlimit_nofile 80000; events { # Збільшує максимальну кількість з'єднань worker_connections 65536; # Використовувати ефективний метод метод epoll для обробки з'єднань use epoll; } http { gzip off; # Відключаємо таймаут на закриття keep-alive з'єднань keepalive_timeout 0; # Не віддавати версію nginx в заголовку відповіді server_tokens off; # Скидати з'єднання після таймауту reset_timedout_connection on; } # Стандартні налаштування для роботи як проксі server { listen 111.111.111.111 default deferred; server_name host.com www.host.com; log_format IP $remote_addr; location / { proxy_pass http://127.0.0.1/; } location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ { root /home/www/host.com/httpdocs;

Частіше за все HTTP DDoS атака проводиться за допомогою ботнету, розподіленої роботизованої системи, що об'єднується за допомогою комп'ютерної мережі та віддалено керується зловмисником. Учасниками такої спілки, як правило стають заражені вірусом, або троянською програмою комп'ютери звичайних користувачів, які навіть про це не підозрюють.

Винятком є використання для атаки фреймів (тег frame) або посилань (тег link, або script), що розміщуються на одному або декількох web-ресурсах з великою кількістю користувачів та посилаються на web-сервер, що атакується.

У деяких випадках, атаку проводять користувачі, що усвідомлено формують чисельну групу та об'єднані ціллю нанести шкоду обраному web-ресурсу. Як правило, група координується організатором за допомогою соціальних мереж або інших засобів зв'язку, що дають змогу передавати повідомлення великій кількості користувачів одночасно.

Розставимо види HTTP DDoS атак в залежності від ступеня складності захисту від них (від найменшого до найбільшого): атака з використанням фреймів та посилань; атака з використанням мережі ботів; атака, що організована чисельною групою користувачів.

Вразливим місцем атаки з використанням фреймів або посилань є обов'язкова наявність в HTTP запиті заголовка referer, що встановлюється браузером користувача і містить URL ресурсу, з котрого перейшов по посиланню користувач. Сформувавши на основі статистики за кількістю переходів перелік і виключивши з нього сайти, на котрих офіційно розміщені рекламні або інші посилання на ресурс (каталоги, прайс агрегатори) можна відфільтрувати та заблоковувати шкідливий трафік.

Захист від атак із використанням мережі ботів — задача, що завжди потребує нетривіальних рішень. Один із основних способів базується на недосконалості роботизованих систем, найчастіше на неможливості інтерпретації скриптів на мові Javascript. Користувач, що невідомий web-серверу отримує в відповідь на запит скрипт на мові Javascript та лише після правильного виконання коду скрипту — отримує доступ до запрошених ним даних. Проблемою даної реалізації є організація безперешкодного доступу пошукових ботів до даних web-сервера.

Захист від атак, що організовані чисельною групою користувачів, — найскладніше завдання, оскільки неможливо відрізнити їх від звичайних користувачів ресурсу. Для захисту потрібен постійний збір статистики доступу користувачів до ресурсу та при перевищені порогу частоти відвідувань з однієї IP-адреси просити користувача ввести перевірочні символи. Основна проблема даної реалізації — блокування локальних мереж, що працюють через одну IP адресу (за допомогою технології NAT).

У разі потреби можна задіювати nginx-модуль ngx_http_limit_req_module , що обмежує кількість одночасних підключень з однієї адреси.

Універсальні поради Щоб не попасти в безвихідь під час DDoS-атаки на системи, необхідно ретельно підготувати їх до такої ситуації: