Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 13773|Відповідь: 0

[Урок з безпеки] Атаки SYN Flood, захист файлів cookie SYN та модифікація параметрів ядра для Linux/FreeBSD

[Копіювати посилання]
Опубліковано 27.10.2014 21:37:19 | | |

ХакерЦе бажана та перспективна кар'єра. Я ціную хороших хакерів і ненавиджу поганих. Так званий поганий хакер — це той, хто змушує когось з іншого боку працювати понаднормово.

    Атаки SYN Flood — типові атаки відмови в обслуговуванні. Так звана атака відмови в обслуговуванні полягає в тому, щоб опосередковано досягти мети атаки, унеможливлюючи хост або мережу жертви надавати якісний сервіс. Хакери люблять грати це, щоб показати, що вони рівні, здатні та сміливі, змушуючи іншу сторону працювати понаднормово, але насправді це нічого.

   1: Що таке атака SYN Flood?

    Атаки SYN Flood використовують тристоронній процес рукостискання протоколу TCP у IPv4. Цей протокол передбачає, що якщо одна сторона хоче ініціювати TCP-з'єднання з іншим, спочатку має надіслати пакет TCP SYN (синхронізація) іншій стороні, після чого інша сторона надсилає назад пакет TCP SYN + ACK, після чого ініціатор надсилає назад пакет TCP ACK (ACKnowledge Character), щоб три рукостискання завершилися.

    У наведеному вище процесі є кілька важливих понять:

    Черга не з'єднана: У тристоронньому протоколі рукопотискання сервер підтримує непідключену чергу, яка відкриває запис для кожного SYN-пакета клієнта (syn=j), що вказує, що сервер отримав SYN-пакет, і видає підтвердження клієнту, очікуючи підтвердження від клієнта. З'єднання, ідентифіковане цими записами, перебуває у стані Syn_RECV на сервері, і коли сервер отримує пакет підтвердження від клієнта, запис видаляється, і сервер переходить у стан ВСТАНОВЛЕНО. Інакше кажучи, коли TCP-сервер отримує пакет запиту TCP SYN, перед відправкою пакета TCP SYN+ACK назад клієнту TCP, TCP-сервер повинен спочатку виділити область даних для обслуговування TCP-з'єднання, утвореного цією рукою. Зазвичай це стан з'єднання, коли отриманий пакет SYN, але пакет ACK ще не отриманоНапіввідкрите з'єднання(Напіввідкрите з'єднання)。

    Параметр накопичення (backlog): Позначає максимальну кількість непідключених черг.

    Кількість повторних трансляцій SYN-ACK: Після того, як сервер надсилає пакет SYN-ACK, якщо пакет підтвердження клієнта не отримано, сервер виконує першу повторну передачу, чекає певний час і не отримує пакет підтвердження клієнта, а також виконує другу повторну передачу; якщо кількість повторних передач перевищує максимальну кількість повторних передач, визначену системою, система видаляє інформацію про підключення з черги напівз'єднання. Зверніть увагу, що час очікування кожного повторного проходу не обов'язково однаковий.

    Напівзв'язаний час виживання: Означає максимальний час, протягом якого запис у черзі напівз'єднання зберігається, тобто максимальний час від моменту, коли сервіс отримує пакет SYN, до моменту, коли пакет підтверджується як недійсний, а часове значення — це сума максимального часу очікування для всіх пакетів запитів на повторну передачу. Іноді ми також називаємо напівзв'язаний час виживання SYN_RECV часом виживання.

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

    2. Принцип файлів cookie SYN

    Один із способів ефективного запобігання атакам SYN Flood — це файли cookie SYN. SYN Cookie Причина D. Винайдено Дж. Бернстейном та Еріком Шенком.

    Файли cookie SYN — це модифікація серверного протоколу TCP тристороннього рукопотискання для запобігання атакам SYN Flood.Її принцип такий:Коли TCP-сервер отримує TCP SYN-пакет і повертає пакет TCP SYN+ACK, він не виділяє виділену область даних, а обчислює значення cookie на основі цього SYN-пакета. Коли отримано пакет ACK TCP, сервер перевіряє легітимність пакета TCP ACK на основі значення файлу cookie. Якщо це законно, виділена спеціальна область даних для обробки майбутніх TCP-з'єднань.

    Давайте поговоримо про те, як налаштувати параметри ядра для реалізації SYN-cookie в Linux та FreeBSD

    Третє: налаштування Linux

    Якщо конфігурація сервера не найкраща, кількість сокетів TCP TIME_WAIT досягає 20 000 або 30 000, і сервер легко може бути перетягнутий до смерті. Змінюючи параметри ядра Linux, можна зменшити кількість TIME_WAIT сокетів на сервері.

    TIME_WAIT можна переглянути за допомогою наступної команди:

  1. 以下是代码片段:
  2. netstat -an | grep "TIME_WAIT" | wc -l
Копія коду

На Linux, наприклад CentOS, це можна досягти, змінивши файл /etc/sysctl.conf.

    Додайте такі рядки:

  1. 以下是代码片段:
  2. net.ipv4.tcp_fin_timeout = 30
  3. net.ipv4.tcp_keepalive_time = 1200
  4. net.ipv4.tcp_syncookies = 1
  5. net.ipv4.tcp_tw_reuse = 1
  6. net.ipv4.tcp_tw_recycle = 1
  7. net.ipv4.ip_local_port_range = 1024    65000
  8. net.ipv4.tcp_max_syn_backlog = 8192
  9. net.ipv4.tcp_max_tw_buckets = 5000
  10. net.ipv4.tcp_synack_retries = 2
  11. net.ipv4.tcp_syn_retries = 2
Копія коду

Ілюстрації:

net.ipv4.tcp_syncookies = 1 означає, що SYN Cookies увімкнені, що є булевим показником. Коли SYN чекає, поки черга переповниться, увімкніть кукі для роботи з нею, що може запобігти невеликій кількості SYN-атак, і за замовчуванням це 0, тобто вона закрита.
net.ipv4.tcp_tw_reuse = 1 означає, що повторне використання увімкнене, що є булевим показником. Дозволяє повторно використовувати розетки TIME-WAIT для нових TCP-з'єднань, за замовчуванням 0, що означає закриття;
net.ipv4.tcp_tw_recycle = 1 означає забезпечити швидку рециркуляцію сокетів TIME-WAIT у TCP-з'єднаннях, що є булевим значенням, а за замовчуванням — 0, тобто він закритий.
net.ipv4.tcp_fin_timeout = 30 означає, що якщо сокет закритий локальним запитом, цей параметр визначає, як довго він залишатиметься у стані FIN-WAIT-2. Пристрій — секунда.
net.ipv4.tcp_keepalive_time = 1200 показує, як часто TCP надсилає повідомлення keepalive при використанні keepalive. За замовчуванням 2 години, змінено на 20 хвилин. Пристрій — секунда.
net.ipv4.ip_local_port_range = 1024 65000 позначає діапазон портів, що використовуються для зовнішніх з'єднань. Стандартний корпус малий: 32768 до 61000, змінений на 1024 на 65000.
net.ipv4.tcp_max_syn_backlog = 8192 вказує на довжину черги SYN, яка за замовчуванням становить 1024, а довжина збільшеної черги — 8192, щоб забезпечити більше мережевих з'єднань, які чекають на з'єднання.
net.ipv4.tcp_max_tw_buckets = 5000 вказує на максимальну кількість сокетів, які система підтримує TIME_WAIT одночасно, і якщо це число перевищується, TIME_WAIT розетки негайно очищаються, і буде надруковано попереджувальне повідомлення. За замовчуванням 180000, змінено на 5000. Для серверів, таких як Apache та Nginx, параметри попередніх ліній можуть TIME_WAIT зменшувати кількість сокетів, але для Squid ефект не найкращий. Цей параметр контролює максимальну кількість TIME_WAIT сокетів, щоб запобігти тому, щоб сервер Squid був затягнутий великою кількістю TIME_WAIT сокетів.
net.ipv4.tcp_synack_retries і net.ipv4.tcp_syn_retries визначають кількість повторень SYN.

Виконайте наступну команду, щоб конфігурація набула чинності:

  1. 以下是代码片段:
  2. /sbin/sysctl -p
Копія коду

Якщо ви не хочете змінювати /etc/sysctl.conf, ви також можете скористатися командою для цього:

  1. 以下是代码片段:
  2. /sbin/sysctl -w key=value
Копія коду

По-четверте, налаштування під FreeBSD

    Особиста точка зору Яю: захист від SYN у FreeBSD може відрізнятися від Linux, параметри налаштованих не зовсім однакові, а відповідна конфігурація та розуміння можуть бути неправильними :)

    Один є у TCP-посиланніMSL (максимальний термін служби сегмента)КонцепціяМаксимальний час генераціїЗначення MSL у загальних реалізаціях приймається 30 секунд, а деякі реалізації — 2 хвилини. «Пасивне вимкнення» в машині станів TCP: з CLOSE_WAIT по LAST_ACK діє правило: коли TCP виконує активне вимкнення і відправляє останній ACK, з'єднання має залишатися у стані TIME_WAIT удвічі довше, ніж MSL. Це дозволяє TCP знову надіслати останній ACK на випадок втрати (інший кінець тайм-аут і пересилає останній FIN).

    Існування цього правила призводить до того, що канал (адреса клієнта, адреса порту та сервера, порт) на цій адресі не може використовуватися протягом цього часу 2*MSL. Наприклад, якщо ми закриваємо посилання після його створення, а потім швидко перезапускаємо посилання, то порт стане недоступним.

    TIME_WAIT час — 2*MSL. Отже, ви можете скоротити TIME_WAIT час, налаштувавши net.inet.tcp.msl. Для веб-сервера це значення можна налаштувати до 7500 або 2000 (доступ до вебу, сторінка не може бути прошита більше 4~15 секунд, можна розглянути можливість відмовитися від -_-)

    Посилання на налаштування параметрів:

  1. 以下是引用片段:
  2. net.inet.tcp.syncookies=1
  3. 防止DOS攻击

  4. net.inet.tcp.msl=7500
  5. 防止DOS攻击,默认为30000

  6. net.inet.tcp.blackhole=2
  7. 接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

  8. net.inet.udp.blackhole=1
  9. 接收到一个已经关闭的端口发来的所有UDP包直接drop
Копія коду

У FreeBSD Яю не бачив команди на кшталт "/sbin/sysctl -p", яка могла б зробити вміст /etc/sysctl.conf ефективним, тому він просто використав команду:

  1. 以下是代码片段:
  2. sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Копія коду






Попередній:Лист від студента Вучанського технологічного інституту до ЗМІ
Наступний:Відновити правду про організацію проституції в готелях коледжів і університетів «Вучанський технологічний інститут: Чутки зупиняються на...
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com