WikiDer > SYN файлы cookie
SYN cookie это техника, используемая для сопротивления Подмена IP-адреса атаки. Главный изобретатель техники Дэниел Дж. Бернштейн определяет файлы cookie SYN как "конкретный выбор начальных TCP порядковые номера серверами TCP ». В частности, использование файлов cookie SYN позволяет серверу избегать разрыва соединений при заполнении очереди SYN. Вместо хранения дополнительных подключений запись очереди SYN кодируется в порядковый номер, отправленный в SYN + ACK отклик. Если сервер затем получает последующий ответ ACK от клиента с увеличенным порядковым номером, сервер может восстановить запись в очереди SYN, используя информацию, закодированную в порядковом номере TCP, и продолжить подключение как обычно.
Выполнение
Чтобы инициировать TCP-соединение, клиент отправляет серверу пакет TCP SYN. В ответ сервер отправляет клиенту пакет TCP SYN + ACK. Одно из значений в этом пакете - это порядковый номер, который используется TCP для повторной сборки потока данных. Согласно спецификации TCP, этот первый порядковый номер, отправленный конечной точкой, может быть любым значением, определенным этой конечной точкой. Файлы cookie SYN - это начальные порядковые номера, которые тщательно построены в соответствии со следующими правилами:
- позволять т быть медленно увеличивающейся отметкой времени (обычно время() логически сдвинутый вправо 6 позиций, что дает разрешение 64 секунды)
- позволять м быть максимальный размер сегмента (MSS) значение, которое сервер сохранил бы в записи очереди SYN
- позволять s быть результатом криптографической хеш-функции, вычисленной по IP-адресу и номеру порта сервера, IP-адресу и номеру порта клиента, а также значению т. Возвращаемое значение s должно быть 24-битным значением.
Начальный порядковый номер TCP, т. Е. SYN cookie, вычисляется следующим образом:
- Топ 5 бит: т мод 32
- Средние 3 бита: закодированное значение, представляющее м
- Нижние 24 бита: s
(Примечание: поскольку м должен быть закодирован с использованием 3 бит, сервер может отправлять до 8 уникальных значений для м когда используются файлы cookie SYN.)
Когда клиент отправляет обратно пакет TCP ACK на сервер в ответ на пакет SYN + ACK сервера, клиент должен (согласно спецификации TCP) использовать п + 1 в пакете Номер подтверждения, куда п - начальный порядковый номер, отправленный сервером. Затем сервер вычитает 1 из номера подтверждения, чтобы показать SYN cookie, отправленный клиенту.
Затем сервер выполняет следующие операции.
- Проверяет значение т против текущего времени, чтобы узнать, истек ли срок подключения.
- Пересчитывает s чтобы определить, действительно ли это действительный файл cookie SYN.
- Расшифровывает значение м из 3-битной кодировки в файле cookie SYN, который затем можно использовать для восстановления записи очереди SYN.
С этого момента соединение продолжается в обычном режиме.
Недостатки
Использование файлов cookie SYN не нарушает никаких спецификаций протокола и, следовательно, должно быть совместимо со всеми реализациями TCP. Однако есть два предупреждения, которые вступают в силу при использовании файлов cookie SYN. Во-первых, сервер ограничен только 8 уникальными значениями MSS, так как это все, что можно закодировать в 3 бита. Во-вторых, сервер должен отклонять все Параметры TCP (например, большие окна или отметки времени), поскольку сервер отбрасывает запись очереди SYN, в которой в противном случае сохранялась бы эта информация.[1] . Наконец, файлы cookie SYN увеличивают нагрузку на ресурсы сервера. Шифрование ответов требует больших вычислительных ресурсов. Файл cookie SYN не снижает трафик, что делает его неэффективным против атак SYN-лавинной рассылки, нацеленных на полосу пропускания в качестве вектора атаки.
Хотя эти ограничения обязательно приводят к неоптимальному опыту, их эффект редко замечается клиентами, потому что они применяются только при атаке. В такой ситуации потеря опций TCP для сохранения соединения обычно считается разумным компромиссом.
Проблема возникает, когда пакет ACK завершения соединения, отправленный клиентом, теряется, а протокол уровня приложения требует, чтобы сервер говорил первым (SMTP и SSH два примера). В этом случае клиент предполагает, что соединение было успешно установлено, и ждет, пока сервер отправит баннер своего протокола или повторно отправит пакет SYN + ACK; однако сервер не знает о сеансе и не будет повторно отправлять SYN + ACK, поскольку он отбросил запись очереди невыполненных работ, которая позволила бы ему это сделать. В конце концов, клиент прервет соединение из-за тайм-аута прикладного уровня, но это может занять относительно много времени.[2]
В 2008 году ядро Linux версии 2.6.26 добавило ограниченную поддержку параметров TCP, закодировав их в метку времени.[3]
Транзакции TCP Cookie Стандарт (TCPCT) был разработан для преодоления этих недостатков файлов cookie SYN и улучшения его в нескольких аспектах. В отличие от файлов cookie SYN, TCPCT является расширением TCP и требует поддержки с обеих конечных точек. Статус «Исторический» переведен RFC 7805 в 2016 году.
Соображения безопасности
Простой брандмауэры которые настроены так, чтобы разрешить все исходящий подключений, но ограничить порты входящий соединение может достигать (например, разрешить входящие подключения к веб-серверу на порт 80, но ограничить все остальные порты), работать, блокируя только входящие запросы SYN к нежелательным портам. Если используются файлы cookie SYN, следует позаботиться о том, чтобы злоумышленник не смог обойти такой брандмауэр, создав вместо этого ACK, пробуя случайные порядковые номера, пока один из них не будет принят. Файлы cookie SYN следует включать и выключать на на порт Таким образом, включение файлов cookie SYN на общедоступном порту не приводит к их распознаванию на непубличном порту. Оригинал Ядро Linux реализация неправильно поняла эту часть описания Бернштейна и использовала единственную глобальную переменную для включения файлов cookie SYN для всех портов;[4] на это указал студент-исследователь[5] и впоследствии закреплен в CVE-2001-0851.[6]
История
Техника была создана Дэниел Дж. Бернштейн и Эрик Шенк в сентябре 1996 года. Первая реализация (для SunOS) был выпущен Джеффом Вейсбергом месяц спустя, а Эрик Шенк выпустил свой Linux реализация в феврале 1997 г. FreeBSD реализует файлы cookie с FreeBSD 4.5 (январь 2002 г.).[7]
Смотрите также
Рекомендации
- ^ Андраш Корн, Механизмы защиты от сетевых атак и червей (pdf), 2011
- ^ Клин, Энди (31 мая 1999 г.). «Реализация Syncookies для ядра Linux (версия 2.2.9)».
статический беззнаковый длинный tcp_lastsynq_overflow
- ^ Браун, Сайлас С. (15 октября 2001 г.). "Сеть Linux: ошибка безопасности в файлах cookie SYN". Архивировано из оригинал на 2017-10-14.
Решение (как было указано Д. Дж. Бернштейном в частной беседе в ответ на вышеизложенное) состоит в том, чтобы сделать переменную tcp_lastsynq_overflow локальной для каждого порта прослушивания, а не глобальной.
- ^ «Ядро Linux, использующее файлы cookie синхронизации, может позволить злоумышленнику обойти фильтрацию». 2001. Архивировано с оригинал на 2013-04-13. Получено 2013-03-17.
- ^ http://man.freebsd.org/syncookies