- В помощь.
- Инструменты пользователя
- Инструменты сайта
- Содержание
- Защищаемся от SYN flood атак
- Введение
- Обнаружение атаки
- Настройка сервера для защиты от атаки
- tcp_syncookies
- tcp_max_syn_backlog
- tcp_synack_retries
- tcp_fin_timeout
- tcp_keepalive_probes
- tcp_keepalive_intvl
- netdev_max_backlog
- somaxconn
- Сохранение настроек после перезапуска системы
- Настройка IPTABLES
- Разбор атак на части: SYN-flood
- Дисклеймеры
- Немного механики и википедии
- Один в поле
- Одно дело делаем
- Напоследок
- Немного о типах DDoS-атак и методах защиты
- TCP SYN Flood
- Fragmented UDP Flood
- Атака с использованием ботнета
- Smurf-атаки
- DNS-атака с усилением
- TCP Reset
В помощь.
Инструменты пользователя
Инструменты сайта
Содержание
Защищаемся от SYN flood атак
Введение
SYN flood атакa — DoS атака, заключающаяся в посылке большого числа SYN пакетов на ваш сервер. При этом установка TCP связи не доводится до конца. Очередь полуоткрытых запросов соединений быстро заполняется, что мешает установке нормальных соединений. Так как соединение не должно быть обязательно завершено, такая атака не требует больших ресурсов от атакующей машины, поэтому её легко реализовать и контролировать.
Обнаружение атаки
Настройка сервера для защиты от атаки
tcp_syncookies
Проверяем параметр tcp_syncookies — он должен быть равен 1:
Так и оставляем. По умолчанию в новых дистрибутивах этот параметр всегда включен.
Если параметр tcp_syncookies установлен (доступен только когда ядро собрано с CONFIG_SYNCOOKIES), тогда ядро обрабатывает SYN пакеты TCP в обычном режиме до тех пор, пока очередь не заполнится. После заполнения очереди включается механизм SYN cookies. SYN cookies вообще не использует очередь SYN. Вместо этого ядро отвечает на каждый SYN пакет, как обычно SYN|ACK, но туда будет включено специально сгенерированное число на основе IP адресов и портов источника и получателя, а также времени посылки пакета. Атакующий никогда не получит эти пакеты, а поэтому и не ответит на них. При нормальном соединении, будет послан третий пакет, содержащий число, а сервер проверит был ли это ответ на SYN cookie и, если да, то разрешит соединение даже в том случае, если в очереди SYN нет соответствующей записи. Включение механизма SYN cookies является очень простым способом борьбы против атаки SYN флудом. При этом немного больше загружается процессор из-за необходимости создавать и сверять cookie. Так как альтернативным решением является отклонять все запросы на соединение, SYN cookies являются хорошим выбором.
tcp_max_syn_backlog
Также нужно увеличить очередь полуоткрытых соединений — tcp_max_syn_backlog
Проверяем:
tcp_synack_retries
Кроме того, можем уменьшить время ожидания соединения — tcp_synack_retries
Целочисленное значение (1 байт) tcp_synack_retries определяет число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP. Число попыток не должно превышать 255. Используемое по умолчанию значение 5 соответствует приблизительно 180 секундам на выполнение попыток организации соединения.
Уменьшаем до 1 (это примерно 9 секунд):
tcp_fin_timeout
Уменьшаем время сохранения сокета в состоянии FIN-WAIT-2 — tcp_fin_timeout
Целое число в файле tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной. Партнер может не закрыть это соединение никогда, поэтому следует закрыть его по своей инициативе по истечении тайм-аута. По умолчанию тайм-аут составляет 60 секунд. В ядрах серии 2.2 обычно использовалось значение 180 секунд и вы можете сохранить это значение, но не следует забывать, что на загруженных WEB-серверах вы рискуете израсходовать много памяти на сохранение полуразорванных мертвых соединений. Сокеты в состоянии FIN-WAIT-2 менее опасны, нежели FIN-WAIT-1, поскольку поглощают не более 1,5 Кбайт памяти, но они могут существовать дольше.
Уменьшаем на 30:
tcp_keepalive_probes
Уменьшаем число передач проб keepalive: tcp_keepalive_probes
Целочисленная переменная tcp_keepalive_probes задает число передач проб keepalive, после которого соединение считается разорванным. По умолчанию передается 9 проб.
tcp_keepalive_intvl
Изменяем интервал передачи проб: tcp_keepalive_intvl
Целочисленная переменная tcp_keepalive_intvl определяет интервал передачи проб. Произведение tcp_keepalive_probes * tcp_keepalive_intvl определяет время, по истечении которого соединение будет разорвано при отсутствии откликов. По умолчанию установлен интервал 75 секунд, т.е., время разрыва соединения при отсутствии откликов составит приблизительно 11 минут.
netdev_max_backlog
Здесь указывается максимальное количество пакетов в очередь на обработку если интерфейс получает пакеты быстрее, чем ядро может их обработать.
somaxconn
Изменяем максимальное число открытых сокетов, ждущих соединения: somaxconn Проверяем:
Сохранение настроек после перезапуска системы
Так как подобные изменения параметров ядра не сохранятся после перезагрузки — добавляем в /etc/rc.local:
Настройка IPTABLES
Кроме того, можно добавить ограничение числа SYN пакетов в единицу времени в iptables:
Число новых SYN пакетов — максимум 500 в секунду, при превышении порога в 1500 — новые пакеты блокируются:
Более наглядно этот критерий можно представить себе как некоторую емкость с выпускным отверстием, через которое проходит определенное число пакетов за единицу времени (т.е. скорость «вытекания»). Скорость «вытекания» как раз и определяет величина —limit. Величина —limit-burst задает общий «объем емкости». А теперь представим себе правило —limit 3/minute —limit-burst 5, тогда после поступления 5 пакетов (за очень короткий промежуток времени), емкость «наполнится» и каждый последующий пакет будет вызывать «переполнение» емкости, т.е. «срабатывание» критерия. Через 20 секунд «уровень» в емкости будет понижен (в соответствии с величиной —limit), таким образом она готова будет принять еще один пакет, не вызывая «переполнения» емкости, т.е. срабатывания критерия.
Источник
Разбор атак на части: SYN-flood
Spoofed SYN — атака, при которой заголовки пакетов подделывается таким образом, что место реального отправителя занимает произвольный либо несуществующий IP-адрес.
Дисклеймеры
Дисклеймер №1
Все, описанное в этом и последующих топиках – по сути не является know-how. Все методики – открытые, и в то или иное время (некоторые – от 2003 года) были опубликованы в открытых источниках. Я взял на себя труд только свести их в одно и описать «глобальную стратегию» защиты, ориентированную на системных администраторов, обслуживающих небольшие проекты, расположенные на выделенных серверах (описанную стратегию можно применить и в shared-проектах, но реализация будет настолько запредельно ужасной, что писать об этом нет никакого желания)
Дисклеймер №2
В топике не рассматриваются аппаратные решения защиты – во-первых, они отлично рассмотрены в многочисленных статьях производителей этих самых решений, во вторых, проекты, располагающие одним сервером не часто могут себе их позволить (грубо говоря, цена на работающие решения стартует от 20 тысяч евро), в третьих – автор не располагает достаточными данными и опытом по работе с таким специализированным железом, что бы делать глобальные выводы о методах и эффективности такой защиты – навряд ли кому-то интересен обзор решений от двух вендоров из дюжины, не подкрепленный серьезной рабочей статистикой их использования. Но стоит заметить, что оба аппаратных решения, которые мне приходилось использовать, как правило очень эффективны на SYN-атаках при выполнении ряда условий.
Дисклеймер №3
В топике не рассматриваются провайдеры защиты от DDoS-атак – сервис-инженеры этих организаций смогут описать их методы работы лучше и подробнее. Стоило бы, наверное, сделать обзор самих провайдеров как таковых — с точки зрения клиента (в разное время проекты, в которых я принимал участие, были клиентами Dragonara, Blacklotus, Gigenet, Vistnet (в настоящий момент), Prolexic (в настоящий момент) и ряда продавцов услуг вышеперечисленных компаний), но это выбивается из рамок топика, попробуем поговорить об этом позже. Опять же, стоит заметить что все провайдеры защиты, с которыми работают или работали проекты автора, справляются с проблемой SYN-атак, показывая хорошую эффективность.
Немного механики и википедии
Не хотелось бы превращать топик в подобие RFC и цитировать и так всем известные истины, поэтому ограничимся тем, чем интересен TCP с точки зрения SYN-атаки и пробежимся по верхам.
Во-первых, TCP — это один из наиболее используемых транспортных протоколов, поверх которого располагаются большинство протоколов прикладных. Во-вторых, он обладает рядом особых признаков (явно подтверждаемые начало и завершение соединения, управление потоком, etc. ) – которые делают его реализацию относительно сложной и ресурсоемкой.
В контексте статьи интересно рассмотреть механизм установки TCP-соединения – трехстороннее рукопожатие. В первом приближении на уровне «клиент-сервер» выглядит это вот так: клиент отправляет серверу SYN-пакет, на который отвечает SYN+ACK.Клиент отправляет в ответ ACK на SYN сервера и соединение переходит в состояние установленного.
SYN-атака – отправка в открытый порт сервера массы SYN-пакетов, не приводящих к установке реального соединения по тем или иным причинам, что влечет за собой создание «полуоткрытых соединений», которые переполняют очередь подключений, вынуждая сервер отказывать в обслуживании очередным клиентам. Плюс к этому, TCP RFC обязывает сервер отвечать на каждый входящий SYN, что дополнительно бьет как по ресурсам сервера, так и по каналу передачи данных. В прочем, если вы уже сталкивались с – по сути – любыми DDoS атаками – описанное выше вы знаете и без меня. Переходим к конкретным рекомендациям.
Один в поле
Используй то, что под рукою, и не ищи себе другое – что можно сделать, находясь один на один с атакой? Честно говоря, не многое, но бывает, что хватает и этого. Далее описано, что делать с FreeBSD, так как в наших проектах в 90% случаев используется именно эта система. Впрочем, от ОС к ОС разница будет невелика – принципы одинаковы.
Первое – необходимо получить доступ к серверу (да, в этом тоже может быть сложность, особенно если атака масштабная и/или продолжительная – сервер просто выбрал все буферы или имеет 100% загрузку CPU). Обычно для этого достаточно закрыть атакуемый сервис фаерволом или просто его – сервис – погасить (впрочем, при обнаружении атаки это нужно сделать в любом случае, хотя бы для того, что бы иметь возможность делать на сервере что-то еще).
Второе – получить первые сведения о атаке. Если у вас уже сделан мониторинг входящего трафика – отлично, если нет – открываем фаервол/поднимаем сервис и используем старые-добрые tcpdump и netstat, что бы узнать, что именно атакуют и какой размер атаки в пакетах в секунду. Попутно можно быстро просмотреть сети, из которых идут массовые запросы – входят ли они в типичную для вашего сервиса аудиторию. Все это пригодится в будущем.
Третье – на интерфейсе, где расположен атакуемый IP-адрес должен остаться только он один. Каждый алиас будет снижать производительность системы. Выражается это в разных числах для разных систем, но числа эти – серьезные, каждый алиас может стоить дополнительных 2-3 тысяч пакетов в секунду.
Четвертое – если вы используете какой-либо фаерволл для входящего трафика по атакуемому адресу – все правила, кроме блокирования, должны быть отключены – к примеру, при spoofed SYN-атаке вероятность того, что вам поможет SYN-proxy от PF стремится к нулю, а CPU это займет очень серьезно.
Пятое – настраиваем систему. Чудес тут не будет, для них нужен рояль в кустах в виде подготовленных драйверов и специально купленных сетевых карт, а единственные две общие рекомендации, которые серьезно отражаются на возможности приема SYN-атаки давно всем известны:
— Размазать обработку прерываний по процессорам сервера;
— Включить syn-cookies и отключить syn-cache.
Остальной тюнинг системы поможет выжать дополнительные 5-10 тысяч пакетов, что в условиях атаки вряд ли окажется определяющим. На случай, если он кому-нибудь пригодится – вот максимально общий конфиг (без включения опций, требующих пересборки ядра или специализированных драйверов):
Система уровня десктопного компьютера, сконфигурированная в соответсвии с данными рекомендациями:
Система уровня IBM System x3630 M3, сконфигурированная в соответсвии с данными рекомендациями:
Детальные конфигурации ОС и машин, и, собственно, как мы пришли именно к ним — я попробую рассказать в следующем топике.
Одно дело делаем
Что делать помимо тюнинга системы В принципе, есть чем заняться.
Тут стоит сделать небольшое отступление – большинство хостинг-компаний помогут в борьбе с атакой крайне неохотно, если помогут вообще, и в этом их трудно винить. Но как минимум данные о атаке они предоставят – если придется работать с провайдерами защиты, это, вкупе с информацией, собранной вами в ходе атаки, здорово облегчит жизнь.
Если хостер попался понимающий (что действительно большая редкость) – то работаем по следующему алгоритму — параллелим и блокируем, блокируем и параллелим:
Если у нас есть несколько сетевых карточек (если нет – просим поставить) – включаем их в режим LACP (для этого придется включить аналогичные опции на свитче хостера) – это даст фактически полуторный прирост производительности (отдельные тонкости процесса мы рассмотрим позже — объять необъятное в рамках топика никак не получается) Выходим вот к такой производительности:
Просим заблокировать все неиспользуемые порты и протоколы – SYN-атака может с легкостью сменится UDP-атакой.
На эти действия способен фактически любая хостниг-компания. Но если вам посчастливилось работать с серьезной компанией — попросите заблокировать трафик из региона, где не проживает большая часть аудитории вашего проекта (например, Китай) – обычно это означает анонс блекхола для вашей сети для магистральных провайдеров определенного региона. Как правило, SYN-атака совершается из Азии, ввиду дешевизны и массовости, и, следовательно, такой анонс может серьезно помочь в борьбе с атакой либо вообще исключить ее возможность.
Помимо вышеописанных мер можно посоветовать использовать GeoDNS-like сервис – при некоторых условиях (атака ведется по домену, к примеру) это сработает аналогично анонсированию блекхола для определенных сетей.
Напоследок
Надеюсь, статья поможет вам справиться с проблемой SYN-флуда, не превысив годовой бюджет какой-нибудь африканской страны. Конечно, здесь даны только самые общие рекомендации, но поверьте – в 90% случаев их вполне достаточно. И главное — don’t panic!
UPD. Продолжение находится в стадии написания, и скоро будет выложено тут. Оставайтесь с нами!
Источник
Немного о типах DDoS-атак и методах защиты
Согласно проведенным исследованиям, масштабы DDoS-атак выросли примерно в 50 раз за последние несколько лет. При этом злоумышленники «метят» как в локальные инфраструктуры, так и публичные облачные площадки, на которых сосредотачиваются решения клиентов.
«Успешно реализованные атаки имеют непосредственное влияние на бизнес клиентов и носят деструктивные последствия», – комментирует Даррен Ансти (Darren Anstee), представитель компании Arbor Networks, поставляющей решения для обеспечения безопасности в сетях.
При этом частота атак также увеличивается. В конце 2014 года их число составляло 83 тыс., а в первом квартале 2015 года цифра увеличилась до 126 тыс. Поэтому в нашем сегодняшнем материале мы бы хотели рассмотреть различные виды DDoS-атак, а также способы защиты от них.
/ Flickr / Kenny Louie / CC
DoS атака (Denial of Service – отказ в обслуживании) представляет собой бомбардировку серверов жертвы отдельными пакетами с подложным обратным адресом. Сбой в этом случае является результатом переполнения (забивания трафиком) арендуемой клиентом полосы либо повышенного расхода ресурсов на атакуемой системе.
Злоумышленники при этом маскируют обратный адрес, чтобы исключить возможность блокировки по IP. Если атака является распределённой и выполняется одновременно с большого количества компьютеров, говорят о DDoS-атаке. Давайте взглянем на несколько распространённых типов.
TCP SYN Flood
Цель атаки SYN Flood – вызвать перерасход ресурсов системы. На каждый входящий SYN-пакет система резервирует определенные ресурсы в памяти, генерирует ответ SYN+ACK, содержащий криптографическую информацию, осуществляет поиск в таблицах сессий и т. д. – то есть затрачивает процессорное время. Отказ в обслуживании наступает при потоке SYN Flood от 100 до 500 тыс. пакетов за секунду. А злоумышленник, имея хотя бы гигабитный канал, получает возможность направить поток до 1,5 млн пакетов в секунду.
Защита от типа атак SYN Flood осуществляется средствами DPI-систем, которые способны анализировать и контролировать проходящий через них трафик. Например, такой функционал предоставляет решение СКАТ от VAS Experts. Система сперва обнаруживает атаку по превышению заданного порога неподтвержденных клиентом SYN-запросов, а затем самостоятельно, вместо защищаемого сайта, на них отвечает. TCP-сессия организуется с защищаемых сайтов после подтверждения запроса клиентом.
Fragmented UDP Flood
Эта атака осуществляется фрагментированными UDP-пакетами небольшого размера, на анализ и сборку которых платформе приходится выделять ресурсы. Защиту от такого типа флуда тоже предоставляют системы глубокого анализа трафика, отбрасывая неактуальные для подзащитного сайта протоколы или ограничивая их по полосе. Например, для веб-сайтов рабочими протоколами являются HTTP, HTTPS – в этом случае неактуальные протоколы можно попросту исключить или ограничить по полосе.
Атака с использованием ботнета
Злоумышленники обычно стараются заполонить полосу жертвы большим количеством пакетов или соединений, перегружая сетевое оборудование. Такие объемные атаки проводятся с использованием множества скомпрометированных систем, являющихся частью боднет.
В этом примере (изображение выше), злоумышленник контролирует несколько «машин-зомби» для проведения атак. «Зомби» общаются с главной машиной по защищенному скрытому каналу, причем управление часто осуществляется по IRC, P2P-сетям и даже с помощью Twitter.
При проведении атаки такого типа пользователю нет нужды скрывать IP-адрес каждой машины, и благодаря большому числу участвующих в атаке компьютеров, такие действия ведут к значительной нагрузке на сайт. Причем обычно злоумышленники выбирают наиболее ресурсоемкие запросы.
Для защиты от ботнет-атак применяются различные поведенческие стратегии, задача которых – выявлять неожиданные отклонения и всплески трафика. Еще один вариант, который предлагает компания VAS Experts, – использование теста Тьюринга (странички с CAPTCHA).
В этом случае к работе с сайтом допускаются только те пользователи, которые удачно прошли проверку на «человечность». При этом страничка с капчей располагается на отдельном сервере, способном справиться с потоком запросов ботнета любого размера.
Также хотелось бы упомянуть об атаках, которые появились относительно недавно. Речь идет об атаках на IoT-устройства с целью их «захвата» и включения в ботнет для осуществления DDoS-атак.
Согласно отчету компании Symantec, 2015 год побил рекорды по числу атак на IoT, а в интернете появилось восемь новых семейств вредоносных программ. Атаки участились по ряду причин. Во-первых, многие умные устройства постоянно доступны из Сети, но при этом не обладают надежными средствами защиты – не позволяет вычислительная мощность. Более того, пользователи зачастую не обновляют программное обеспечение, только повышая риск взлома.
Злоумышленники используют простую тактику: сканируют все доступные IP-адреса и ищут открытые порты Telnet или SSH. Когда такие адреса найдены, они пытаются выполнить вход с помощью стандартного набора логинов и паролей. Если доступ к оборудованию получен, на него загружается файл скрипта (.sh), который подкачивает тело бота, запускает его и закрывает доступ к устройству, блокируя порты Telnet и внося изменения в iptables, чтобы исключить возможность перехвата системы другим червем.
Чтобы минимизировать риск или избежать взлома IoT-устройств, необходимо выполнить простых действий: отключить неиспользуемые сетевые функции устройства, отключить Telnet-доступ и обратиться к SSH, по возможности перейти на проводное соединение вместо Wi-Fi, а также регулярно проводить обновление программного обеспечения.
Smurf-атаки
Атакующий посылает поддельный пакет IСМР Echo по адресу широковещательной рассылки. При этом адрес источника пакета заменяется адресом жертвы, чтобы «подставить» целевую систему. Поскольку пакет Еcho послан по широковещательному адресу, все машины усиливающей сети возвращают жертве свои ответы. Послав один пакет IСМР в сеть из 100 систем, атакующий инициирует усиление DDoS-атаки в сто раз.
Чтобы предотвратить эффект усиления, специалисты по сетевой безопасности советуют запретить операции прямой широковещательной рассылки на всех граничных маршрутизаторах. Также дополнительно стоит установить в ОС режим «тихого» отбрасывания широковещательных эхо-пакетов IСМР.
DNS-атака с усилением
Атака с усилением – это наиболее распространенная DDoS-атака, использующая рекурсивные сервера имен. Она похожа на Smurf-атаку, только в этом случае злоумышленник посылает небольшие запросы на DNS resolver, как бы заставляя его отправлять ответы на подмененный адрес.
Что касается конкретного примера, то в феврале 2007 года был проведен ряд атак на корневые DNS-серверы, от работы которых напрямую зависит нормальное функционирование всей Сети. Популярные практики защиты от этого типа атак можно найти на сайте Cisco.
TCP Reset
TCP Reset выполняется путем манипуляций с RST-пакетами при TCP-соединении. RST-пакет – это заголовок, который сигнализирует о том, что необходимо переподключение. Обычно это используется в том случае, если была обнаружена какая-либо ошибка или требуется остановить загрузку данных. Злоумышленник может прерывать TCP-соединение, постоянно пересылая RST-пакет с валидными значениями, что делает невозможным установление соединение между источником и приемником.
Предотвратить этот тип атаки можно – необходимо мониторить каждый передаваемый пакет и следить, что последовательность цифр поступает в нужном порядке. С этим справляются системы глубокого анализа трафика.
Сейчас основной целью взлома устройств является организация DDoS-атак или причинение ущерба путем ограничения доступа пользователей к сайту в интернете. Поэтому сами операторы связи, интернет-провайдеры и другие компании, в том числе VAS Experts, также предлагают и организуют решения по защите от DDoS – мониторинг трафика в реальном времени для отслеживания аномалий и всплесков загруженности полосы, функцию Carrier Grade NAT, которая позволяет «спрятать» устройство абонента от злоумышленников, закрыв к нему доступ из интернета, а также другие интеллектуальные и даже самообучающиеся системы.
Дополнительное чтение по теме DPI (Deep packet inspection):
Источник