SYN cookies
SYN cookies (англ. SYN cookies, син-куки) — это особые значения начального порядкового номера (ISN, Initial Sequence Number), генерируемые сервером при запросе на установление TCP-соединения. Эта технология применяется для защиты от атак типа SYN-флуд и, в определённой мере, от подделки IP-адреса. Однако у данного метода есть ряд недостатков, включая потерю части информации, содержавшейся в исходном SYN-пакете, а также возможность подделки данных. С целью устранения этих недостатков были предложены различные усовершенствования и расширения, в том числе для работы в условиях мультихоминга.
Принцип
SYN cookie — это определённое, специальным образом сформированное значение начального порядкового номера (ISN), которое сервер использует в момент установления TCP-соединения[1]. Этот подход позволяет серверу хранить информацию о полуоткрытых соединениях непосредственно в начальном порядковом номере, который возвращается клиенту при инициализации соединения[2][3][4][5][6]. Использование SYN cookies защищает сервер от атак SYN flood, при которых злоумышленник, используя подделанные SYN-пакеты с произвольными источниками IP, пытается исчерпать всю память сервера, чтобы тот не мог обслуживать легитимных пользователей[4]. SYN cookies активируются только при превышении порога числа полуоткрытых соединений[1]. При этом генерация и проверка SYN cookies требует значительных затрат процессорного времени, что ограничивает эффективность метода при атаках малой/средней мощности[4].
SYN cookie имеет следующую структуру:
- первые 5 битов равны , где — 5-битовый счётчик времени, увеличиваемый каждые 64 секунды;
- следующие 3 бита — код того максимального размера сегмента (MSS), который сервер выбрал в ответ на MSS клиента;
- последние 24 бита получаются с помощью криптографической хеш-функции.
Такая схема формирования номера последовательности обусловлена требованиями TCP к их плавному возрастанию[7]. В данной реализации серверный ISN растёт несколько быстрее клиентского[7].
Точный механизм кодирования состояния в SYN+ACK номере зависит от реализации[8]. Например, в Linux формула такова[9]:
где — ISN клиентского SYN-пакета, — счётчик времени в 5 бит, — закодированное значение MSS (от 0 до 7), и — секретные ключи сервера, — криптографическая хеш-функция (например, MD5 или SHA-1), , , и — соответственно исходный адрес, порт источника, адрес назначения и порт назначения[10].
Установление TCP-соединения с SYN cookie повторяет последовательность классического трёхэтапного рукопожатия (трёхэтапное согласование):
- SYN: клиент инициирует соединение, отправляя SYN-пакет с ISN [10];
- SYN+ACK: сервер рассчитывает SYN cookie (ISNs), инкрементирует ISN клиента и возвращает SYN+ACK с ISNs как sequence number и ISNc как acknowledgment number[4];
- ACK: клиент инкрементирует ISNs и отправляет ACK с этим значением в поле acknowledgment number[3].
Сервер проверяет корректность номера подтверждения ACK-пакета[10]. Если он валиден, сервер выделяет память под соединение и переходит в состояние ESTABLISHED[4]; иначе ACK отклоняется[11].
Механизм проверки SYN cookie зависит от способа его кодирования[8]. Для Linux формула такова[9]:
где и — значения acknowledgment/sequence number в ACK, — 5-битовый счётчик, , — секретные ключи сервера, — хеш-функция, , , , — адреса исхода/назначения и их порты[10].
Если в диапазоне 0–7, ACK считается допустимым. Сервер создаёт соединение с соответствующим MSS. Если пакет поддельный, скорее всего выйдет за этот диапазон[10].
Недостатки
SYN cookies зависят только от финального ACK-пакета: поскольку сервер не сохраняет состояние подключения[2][3][4][5][6], он не может узнать, был ли SYN+ACK утерян, и повторить передачу[12]. Это открывает уязвимость: атакующий инициирует у сервера включение SYN cookies посредством SYN-флуда[3][13], затем отправляет множество фальшивых ACK-пакетов с произвольными sequence number — в надежде, что некоторые из них будут восприняты как валидные SYN cookies[3][12].
Установлено, что для взлома нужно подобрать только 24 младших бита sequence number (а не все 32)[12]; вероятность успеха — 1/2^{24}[14]. Атакующий может посылать до 2^{24} ACK-пакетов в минуту (около 85 Мбит/с) ради одного удачного взлома[14]. Такое нагнетание нагрузит процессор и полосу пропускания сервера, хотя и не приведёт к переполнению оперативной памяти как при обычном SYN-флуде[12][14].
Недостатком применения SYN cookies является невозможность передачи через них дополнительных параметров из поля «options» TCP-пакета SYN[14][15]. Такие параметры, как размер окна приёма[6][14][15], селективное подтверждение, RTT, PAWS или MSS делают соединение эффективнее[6][14][15]. Однако этот недостаток играет роль только во время атаки (когда сервер включает SYN cookies); в остальное время сервер по-прежнему использует стандартную процедуру согласования параметров[1][6][14].
К минусам метода SYN cookies также относят:
Активация SYN cookies
В Windows можно включить схожий с SYN cookies механизм SynAttackProtect[18], прописав в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters этой опции рекомендуемое значение 2. Порог срабатывания можно корректировать через параметры TcpMaxHalfOpen, TcpMaxHalfOpenRetried и TcpMaxPortsExhausted[19].
В Linux проверить, активированы ли SYN cookies в ядре, можно командой sysctl -n net.ipv4.tcp_syncookies или cat /proc/sys/net/ipv4/tcp_syncookies. Если значение равно 1 — включено. В противном случае параметр net.ipv4.tcp_syncookies в /etc/sysctl.conf надо установить в 1 и перезагрузить параметры через sysctl -p либо перезагрузить сервер[20].
Усовершенствования SYN cookies
В 2006 году ХакАби (KhakAbi) предложил использовать хеш-таблицу для хранения параметров SYN-пакета (TCP-опции, размер окна, MSS). Это позволяет учитывать параметры клиента при создании соединения и применять SYN cookies даже вне атак, а также не требует отдельного детектора SYN-флуда[11].
В 2007 году были предложены улучшения для защиты от ACK-флуд-атак (временное хранение сведений о SYN) — это снижает нагрузку на процессор ценой повышенного расхода памяти. Пэн Ди и др. предложили ускорять проверку cookie в системах с выносной подсистемой защиты[5].
В 2008 году Цзян Сяочунь и др. предложили дожидаться перезапроса клиентского SYN, что сокращает накладные расходы на вычисления, но требует поддержания хеш-таблицы и увеличивает задержку нормального установления TCP-соединения[5].
В 2009 году Бо Хан и др. предложили изменить алгоритм формирования SYN cookies: только 1 бит использовался для отметки времени, а остальные 31 — для значения cookie (вместо 8 и 24 бит ранее). Новый алгоритм основывался на блочном шифре Blowfish с 32-битным ключом и был быстрее хеш-функций, снижая вычислительную сложность примерно на 30 %[5][21].
Расширения SYN cookies
Flow-cookies — механизм, при котором веб-сервер работает совместно со специальным устройством («cookie box»), подключённым к скоростному каналу. Всё общение между защищённым сервером и внешней сетью проходит через этот промежуточный фильтр, который добавляет SYN cookies в исходящие пакеты. «Cookie box» может фильтровать подозрительный трафик (например, блокировать клиентов по IP) и тем самым эффективно защищать сервер от DDoS-атак[22].
M-SYN cookies — модифицированный вариант для многоканальных сред (мультихоминг), в котором номер последовательности TCP формируется с учётом идентификатора межсетевого экрана[23]. Такой cookie позволяет передавать информацию о соединении между несколькими экранами: идентификатор межсетевого экрана вставляется вместо индекса MSS, валидация SYN+ACK проводится с использованием общей секретной хеш-функции.
Схема обмена:
- клиент посылает SYN, который попадает на межсетевой экран 1;
- экран 1 анализирует пакет по своим правилам;
- экран 1 заменяет ISNc на M-SYN cookie и сохраняет параметры соединения у себя;
- экран 1 передаёт пакет на сервер;
- сервер отвечает SYN+ACK, который попадает на экран 2;
- экран 2 извлекает из SYN+ACK ID экрана 1, и если он некорректен — сбрасывает пакет;
- экран 2 пересылает пакет экрану 1;
- экран 1 сверяет параметры и передаёт SYN+ACK + параметры экрану 2;
- экран 2 обновляет свою таблицу параметров и корректирует acknowledgment number;
- экран 2 передаёт обновлённый SYN+ACK клиенту[24].
Это позволяет обоим экранам обмениваться сведениями о соединении: будущие пакеты, включая необходимые подтверждения, могут проходить напрямую[25].
SYN cookies в Интернете вещей
Исследования применения SYN cookies для систем класса 2 — устройств интернета вещей, работающих с объёмом памяти от 50 до 250 кбайт — показали их высокую эффективность. Такие устройства особенно уязвимы к SYN-флуду из-за ограниченных ресурсов: даже небольшой трафик или всплеск атаки могут полностью парализовать работу сервера. SYN cookies оказались предпочтительнее «освобождения» старых полуоткрытых соединений для нейтрализации слабых SYN-флуд-атак[26].
Альтернативы SYN cookies
История
Phil Karn первым предложил использовать в сетевых протоколах специальные cookie для защиты от атак типа отказ в обслуживании[29]. 16 сентября 1996 года Даниэль Бернштейн предложил использовать SYN cookies для противодействия неразрешимой ранее проблеме SYN-флуд-атак. Вместе с Эриком Шенком (Eric Schenk) он разработал детали реализации, а идея сделать SYN cookies зависимыми от времени позволила противодействовать сбору валидных cookies на взломанных или открытых системах. В октябре 1996 года Джефф Вайсберг (Jeff Weisberg) опубликовал реализацию SYN cookies для SunOS, а в феврале 1997 года Шенк выложил аналог для Linux.
Примечания
Литература
- Bernstein, D. J. SYN cookies. cr.yp.to. URL: https://cr.yp.to/syncookies.html (дата обращения: 25 июня 2024).
- Kleen, Andi. syncookie.c. github.com. URL: https://github.com/torvalds/linux/blob/master/net/ipv4/syncookies.c (дата обращения: 25 июня 2024).
- Schuba, C.L.; Krsul, I.V.; Kuhn, M.G.; Spafford, E.H. Analysis of a denial of service attack on TCP. Proceedings. 1997 IEEE Symposium on Security and Privacy. IEEE, 1997. С. 208-223. DOI: 10.1109/SECPRI.1997.601338.
- Kim, Jin-Ho; Lee, Heejo; Bahk, Saewoong. A connection management protocol for stateful inspection firewalls in multi-homed networks. Journal of Communications and Networks. 2008, т. 10, № 4, с. 455–464. DOI: 10.1109/JCN.2008.6389863.
- Liu, Pi-E; Sheng, Zhong-Hua. Defending against tcp syn flooding with a new kind of syn-agent. 2008 International Conference on Machine Learning and Cybernetics. 2008, т. 2, с. 1218–1221. DOI: 10.1109/ICMLC.2008.4620589.
- Hang, Bo; Hu, Ruimin. A novel SYN Cookie method for TCP layer DDoS attack. 2009 International Conference on Future BioMedical Information Engineering. 2009, с. 445–448. DOI: 10.1109/FBIE.2009.5405818.
- Smith, C.; Matrawy, A. Comparison of operating system implementations of SYN flood defenses (Cookies). 2008 24th Biennial Symposium on Communications. 2008, с. 243–246. DOI: 10.1109/BSC.2008.4563248.
- Korn, András. Defense mechanisms against network attacks and worms. 2011. URL: https://repozitorium.omikk.bme.hu/handle/10890/1155 (дата обращения: 25 июня 2024).



