Syn flood атака что это
Метод определения и динамической защиты от DDoS типа SYN-flood
Об актуальности DDoS атак в наше время рассказывать не стану. Достаточно взглянуть на статистику. Сталкиваюсь с атаками по роду деятельности довольно часто, возникла идея динамической защиты от DDoS типа SYN-flood на северах Linux и FreeBSD. Также предложена реализация мониторинга SYN-flood по SNMP.
Об этом всём под катом.
Параметры TCP
Видим, что значения попыток повторной передачи и интервалы между ними очень велики. Идея в том, чтобы их уменьшить, не нова. Но стоит ли это делать статически на этапе загрузки системы? На сегодняшний день количество мобильных абонентов сети Интернет стремительно возростает, но в странах СНГ большинство из них осуществляет доступ через EDGE (а то и GPRS). Поэтому для таких посетителей сайта не стоит выставлять жесткие значения в ядре – они могут только из-за этого получить отказ в обслуживании даже при отсутствии атаки. Идеальный вариант – когда значения стоят близки к дефолтным при отсутствии атаки (они способствуют успешной установке соединения), и когда они уменьшены (кроме длины очереди) в условиях атаки.
Однажды меня посетила упомянутая идея именно с динамическим изменением параметров. Есть сомнения, действительно ли это полезно и не выставить ли значения на этапе загрузки системы статически. Данную проблему я описывал в блоге. Буду рад услышать мнения читателей по данному вопросу.
Отдельно про очередь SYN-запросов
Значение очереди 128 по умолчанию очень мало для нагруженой системы, тем более если она поддается атаке, поэтому естественно должна быть увеличена. Но существует предел, который ограничивает это увеличение.
Во-первых, каждое вхождение в очередь занимает 600 байт оперативной памяти.
Во-вторых, отдельная очередь длиной net.core.somaxconn отвеодится для каждого сервиса, слушающего порт TCP.
Исходя из этих соображений, значение net.core.somaxconn можно вычислять по формуле:
somaxconn = (MEMfree – MEMres)/600*N, где
MEMfree – текущая свободная RAM
MEMres – память, которую резервируем для работы системы и других программ
600 байт – занимает каждое вхождение в очередь
N – количество сервисов, слущающих порты TCP
Реализация в виде расширения для SNMP
Данная идея реализована в виде скрипта. К нему также прилагается конфигурационный файл, в котором можно настроить работу под свою систему вплоть до добавления/удаления изменяющихся параметров ядра по своему усмотрению. Я использую этот скрипт как расширение для SNMP. Есть версии для Linux и FreeBSD.
Вопрос: зачем дергать скрипт по SNMP, если можно по крону?
Ответ: это позволяет не только менять параметры ядра на лету, но и выполнить интеграцию с любой системой мониторинга, работающей по SNMP – настроить оповещения и тд. Лично я использую фронтенд для RRD Cacti и получаю графики загрузки очереди SYN. Шаблоны для Cacti доступны для скачивания на сайте. Данный вопрос не принципиален, функции защиты и расширения SNMP можно разнести по разным скриптам.
Тестирование защиты
Работа системы тестировалась на десктопе и лэптопе, подключенными к одному 100Mb L2 коммутатору. Тестировал с помощью hping.
Результаты на графике, построенном в режиме реального времени Cacti:
В режиме динамической защиты наблюдаются характерные пики. Они возникают вследствии того, что атака мониторится по пороговому значению – threshold. В будущем планирую мониторить по частоте заполнения и уменьшить эти пики.
Когда на графике замечены пики, вручную можно выставить форсированную защиту, когда параметры ядра устанавливаются в жесткие значения и не изменяются в зависимости от длины очереди. На графике видим, что значение очереди приблизилось почти к 0.
Замечания
40 в нормальном режиме, поэтому порог нужно подбирать.
2. Очередь SYN-запросов непременно возрастает и при HTTP-flood, поэтому детектирование атаки по пороговому значению очереди не совсем корректно. Хотя помехи собой не представляет и даже полезно.
Что такое атака SYN flood и как она работает?
SYN flood (полуоткрытая атака) — это тип атаки «отказ в обслуживании» (DDoS), целью которой является сделать сервер недоступным для законного трафика, потребляя все доступные ресурсы сервера. Повторно отправляя пакеты SYN, злоумышленник может перегрузить все доступные порты на целевом сервере, в результате чего целевое устройство будет вяло реагировать на допустимый трафик или не реагировать вовсе.
Как работает атака SYN флуд
Атаки SYN flood работают, используя процесс квитирования TCP-подключения. В нормальных условиях TCP-подключение показывает три различных процесса для установления соединения.
Чтобы создать отказ в обслуживании, злоумышленник использует тот факт, что после получения исходного пакета SYN сервер ответит одним или несколькими пакетами SYN/ACK и дождется последнего шага в квитировании. Вот как это работает:
В сети, когда сервер оставляет соединение открытым, но машина на другой стороне — связи нет, соединение является полуоткрытым. В этом типе DDoS-атаки целевой сервер постоянно оставляет открытыми соединения и ждет каждого соединения для тайм-аута, прежде чем порты становятся доступными снова. В результате такой тип атаки можно считать «полуоткрытой атакой».
Потоп SYN может проходить тремя различными способами:
На видео: Понятное объяснение syn flood атаки в шуточной форме.
Как смягчается атака SYN flood
Уязвимость SYN флуд была известна в течение длительного времени, и был использован ряд путей смягчения. Несколько подходов включают:
Как Cloudflare смягчает атаки SYN Flood
Cloudflare частично смягчает этот тип атаки, стоя между целевым сервером и потоком SYN. При выполнении первоначального запроса SYN Cloudflare обрабатывает процесс квитирования в облаке, удерживая соединение с целевым сервером до завершения квитирования TCP. Эта стратегия берет стоимость ресурса поддержания соединений с фиктивными пакетами SYN от целевого сервера и помещает его в Сеть Anycast Cloudflare.
Обзор CentOS 7. Часть 4: Смягчение DDoS атак TCP SYN Flood. Тест в облаке бесплатно
В первой части обзора CentOS 7 было рассказано о поддержке контейнеров Linux в Cent OS 7. Во второй части мы поговорили об управлении идентификацией. В третья части обзора мы коснулись сетевой файловой системы NFS и ее окружению. В этой статье поговорим о смягчении DDoS атак TCP SYN Flood. В конце поста ссылка на бесплатное тестирование CentOS 7 в облачной VPS от Infobox.
DDoS (Distributed Denial of Service) атаки становятся все более частым явлением, из-за того, что бизнес становится все более зависимым от сети Интернет. Одна из самых распространенных видов DDoS – SYN Flood. Эта основная атака конечных хостов, ставящая ваш сервер на колени. В результате ваш сервер не может правильно обрабатывать входящие запросы.
Важно заметить, что описанные механизмы защиты доступны в CentOS 7, но не включены по умолчанию.
Почему SYN-flood — боль для ядра
Основная проблема масштабируемости TCP для ядра Linux связана с тем, как много новых соединений могут быть созданы за секунду. Это относится к блокировке на сокет в состоянии «listen» (прослушивания). «Estabilished» (Установленные) соединения масштабируются очень хорошо. Блокировка состояния «listen» встречается не только с SYN–пакетами, но и другими пакетами для первоначального подключения «SYN-ACK» и «ACK» (пакеты тройного рукопожатия в TCP). В сценарии атаки флудом нам необходим механизм фильтрации фейковых попыток подключения до того, как сокет войдет в состояние «listen» и блокирует новые входящие соединения.
Основы фильтрации conntrack
Используя систему отслеживания соединений в Netfilter (conntrack), мы можем начать фильтрацию ложных SYN-ACK и ACK пакетов до того, как они вызовут блокирующее состояние «listen». Это было возможно уже долгое время, но не было включено по умолчанию.
Вам помогут следующие две команды:
Правило для iptables будет отлавливать пакеты, которые система отслеживания соединений классифицировала как «INVALID» и не являющихся частью известных состояний соединения.
Настройка sysctl сделает систему отслеживания соединений более строгой в категоризации и поможет уклониться в том числе от атак ACK–flood.
Что с производительностью?
В результате мы в 20 раз уменьшим влияние атак, основанных на SYN–ACK и ACK.
Conntrack в Netfilter имеет плохую репутацию за низкую скорость работы, но так было в первое время после появления технологии. Сейчас она предлагает превосходную масштабируемость и работает очень быстро. Conntrack работает без локов, используя RCU (обновление через копирование) для существующих соединений.
По сути это предотвратит проблемы от всех флудящих пакетов TCP, кроме SYN.
Почему это не работает с SYN-flood?
В conntrack есть проблема масштабируемости (похожая на блокировку «listen»), возникающую, когда речь идет о создании (или удалении) соединений, которую вызывает SYN флуд.
Даже после настройки contrack SYN пакеты будут отправлены сокету вызывая блокировку «listen». Методика смягчения этой атаки — отправить SYN–куки и предотвратить создание любого статуса, пока SYN–ACK не будет виден.
К сожалению SYN–куки, отправляются под той же блокировкой «listen», поэтому такое смягчение не решит проблему масштабируемости. Чуть позже мы обсудим, как обойти это ограничение.
Что нового в CentOS 7
На Netfilter Workshop 2013 была предложена идея «сетевых контрмер». Это дало рождение модулю iptables «SYNPROXY» и соответствующим изменениям в ядре Netfilter. Теперь эта функциональность доступна в CentOS 7.
Модуль SYNPROXY предназначен для решения двух проблем с масштабируемостью. Во-первых работает с SYN–куками параллельно. Во-вторых, он не создает conntrack до получения пакета SYN–ACK, что позволяет conntrack не блокировать новые соединения.
SYNPROXY может быть использован на локальном хосте или может защищать другие хосты за файрволом. Как только первоначальное соединение установлено, conntrack возьмет на себя все необходимые трансляции (повторно использовав части кода NAT).
Тестирование на соединениях к localhost показали 10-и кратный рост производительности по смягчению SYN–атак.
Настройка SYNPROXY
Настройка SYNPROXY может быть достаточно сложной без руководства. В этой статье рассмотрены необходимые шаги, однако вы можете использоват0 и скрипт для упрощения настройки.
Этот пример может быть использован для защиты веб-сервера на 80 порту.
Шаг 1
Убедитесь, что соединения, которые мы защищаем, не создают conntrack для SYN пакетов.
Шаг 2
Включим более строгий conntrack. Это необходимо чтобы иметь INVALID статус для плохих ACK пакетов.
Шаг 3
Теперь нам необходимо обрабатывать эти пакеты и передавать их напрямую в модуль SYNPROXY. Чтобы это сделать, используйте правило обработки UNTRACKED SYN и INVALID пакетов, которые содержат ACK от тройного рукопожатия (и других, но они просто будут проходить через это правило):
Шаг 4
Поймайте пакеты с состоянием INVALID, которые попали в SYNPROXY и уничтожьте их. Это предотвратит флуд SYN–ACK.
Шаг 5
Не забудьте включить временные метки TCP. SYN–куки используют это поле TCP.
Шаг 6
Если у вас нагруженный сайт, рекомендуется настроить conntrack для увеличения лимита в 64 тысячи подключений. Так же увелитьте размер хеша conntrack. Это очень важно для производительности.
Необходимо устанавливать значение лимитов, актуальное для вашего сайта и посчитать использование памяти для него. Например, 2 000 000 записей за раз по 288 байт = максимум 576 Мб потенциального использования памяти. Для хеша, каждая голова хеш-таблицы занимает только 8 байт на миллион записей = 8 Мб фиксированной выделенной памяти (помните размер вашего кеша L3 у CPU, когда выбираете значение кеша). Узнать, какой процессор используется на хосте можно командой:
Соображения по использованию SYNPROXY
Включение SYNPROXY может не пройти незаметно. Установка соединений будет проходить медленнее в связи с дополнительной настройкой соединения, необходимого конечному хосту. Когда конечный хост локальный, все происходит очень быстро и практически не добавляет задержек.
Параметры модуля SYNPROXY должны соответствовать опциям TCP и должны поддерживаться конечным хостом, для которого TCP соединение проксируется. Обнаружение и настройка производится вручную на основе правил (полезный инструмент «nfsynproxy» – часть релиза iptables 1.4.21). К сожалению это означает, что модуль не может быть просто развернуть на DHCP файрволы.
В будущем есть планы по авто-обнаружению опций TCP конечных хостов. Голосуйте за фичу в баг-трекере Red Hat.
Разбор атак на части: 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, сконфигурированная в соответсвии с данными рекомендациями:
Детальные конфигурации ОС и машин, и, собственно, как мы пришли именно к ним — я попробую рассказать в следующем топике.
Одно дело делаем
Что делать помимо тюнинга системы В принципе, есть чем заняться.
Тут стоит сделать небольшое отступление – большинство хостинг-компаний помогут в борьбе с атакой крайне неохотно, если помогут вообще, и в этом их трудно винить. Но как минимум данные о атаке они предоставят – если придется работать с провайдерами защиты, это, вкупе с информацией, собранной вами в ходе атаки, здорово облегчит жизнь.
Просим заблокировать все неиспользуемые порты и протоколы – SYN-атака может с легкостью сменится UDP-атакой.
На эти действия способен фактически любая хостниг-компания. Но если вам посчастливилось работать с серьезной компанией — попросите заблокировать трафик из региона, где не проживает большая часть аудитории вашего проекта (например, Китай) – обычно это означает анонс блекхола для вашей сети для магистральных провайдеров определенного региона. Как правило, SYN-атака совершается из Азии, ввиду дешевизны и массовости, и, следовательно, такой анонс может серьезно помочь в борьбе с атакой либо вообще исключить ее возможность.
Помимо вышеописанных мер можно посоветовать использовать GeoDNS-like сервис – при некоторых условиях (атака ведется по домену, к примеру) это сработает аналогично анонсированию блекхола для определенных сетей.
Напоследок
Надеюсь, статья поможет вам справиться с проблемой SYN-флуда, не превысив годовой бюджет какой-нибудь африканской страны. Конечно, здесь даны только самые общие рекомендации, но поверьте – в 90% случаев их вполне достаточно. И главное — don’t panic!
UPD. Продолжение находится в стадии написания, и скоро будет выложено тут. Оставайтесь с нами!
Моделируем и определяем DoS атаку типа TCP SYN Flood при помощи Wireshark
В рамках данного руководства мы расскажем вам о сути атаки TCP SYN Flood. Кроме того, вы узнаете, как смоделировать данную DoS-атаку злоумышленников для тестовых целей с помощью предустановленной программы-генератора пакетов hping3 дистрибутива Kali Linux, а также как правильно и быстро идентифицировать атаку TCP SYN Flood, используя анализатор сетевых протоколов Wireshark. Данный материал содержит простые, интуитивно понятные инструкции, иллюстрации и скриншоты, что обеспечит комфортное обучение, как для начинающих, так и для опытных ИТ-специалистов.
Атаки «отказа в обслуживании» (Denial of Service), печально известные также как DoS-атаки, достаточно просты в проведении, далеко не всегда очевидны и способны стать причиной серьезных сбоев в работе вычислительной системы, что неминуемо приведет к увеличению времени простоя ваших системных ресурсов. При атаке с помощью переполнения SYN-пакетами (TCP SYN Flood) злоумышленники используют трехстороннее рукопожатие по протоколу TCP, чтобы вызвать сбои в работе сети и сервисов. Атаки такого типа могут легко застать вас врасплох, так как зачастую системным администраторам бывает сложно их быстро идентифицировать. К счастью, такие инструменты, как Wireshark, упрощают захват и проверку любых подозрительных активностей, которые могут оказаться DoS-атакой.
Данное руководство содержит довольно много интересной информации, которая для удобства разбита на следующие части:
Принцип работы атаки TCP SYN Flood
Когда клиент пытается подключиться к серверу с использованием протокола TCP (например, при установлении HTTP- или HTTPS-соединения), он сразу должен пройти процедуру трехстороннего рукопожатия, прежде чем обмен данными между клиентом и сервером станет возможным. Поскольку инициатором трехстороннего рукопожатия TCP всегда является клиент, то он первым отправляет пакет с флагом SYN серверу.
Рисунок 1. Трехстороннее рукопожатие TCP.
Получив такой SYN-пакет, сервер отвечает, подтверждая получение запроса и отправляя при этом свой собственный запрос SYN — пакет с установленными флагами SYN и ACK. Клиент, в свою очередь, получив пакет с подтверждением и запросом от сервера, отправляет серверу пакет с установленным флагом ACK, который подтверждает, что оба хоста согласны создать соединение. После такого «обмена рукопожатиями» соединение считается установленным, и данные могут передаваться между хостами. (Более детально об использовании протокола TCP при установке соединения и процедуре трехстороннего рукопожатия читайте здесь).
При проведении TCP SYN Flood атаки злоумышленники интенсивно отправляют серверу большое количество SYN-пакетов с поддельными IP-адресами. Это заставляет сервер реагировать, отправляя в ответ на каждый такой ложный запрос пакет SYN-ACK, выделяя часть ресурсов и оставляя свои порты «полуоткрытыми» в ожидании многочисленных ответов (пакетов с установленным флагом ACK) от хостов, которых на самом деле не существует, и подтверждений они, соответственно, отправлять не будут.
Рисунок 2. Принцип осуществления злоумышленником атаки TCP SYN Flood.
При проведении более простой версии атаки TCP SYN Flood (прямой атаки без подмены IP-адреса) злоумышленники просто используют настройки брандмауэра, чтобы заблокировать получение обратных пакетов с установленными флагами SYN и ACK от сервера жертвы еще до того, как эти отправленные в ответ запросы достигнут их системы. Заваливая свою цель SYN-пакетами и не отвечая на запросы (не отправляя в ответ пакеты ACK), атакующие могут легко исчерпать ресурсы цели, при этом не слишком перегружая свои ресурсы. Ведь в это время сервер жертвы «изо всех сил» пытается справится с резко возросшим трафиком, что, как следствие, серьезно увеличивает использование ЦП и памяти. В конце концов, это может привести к исчерпанию всех его ресурсов (ЦП и ОЗУ), и сервер жертвы больше не сможет обслуживать любые клиентские запросы (в том числе и от добросовестных пользователей), то есть не предоставлять им доступ к системным ресурсам и сервисам.
Использование Kali Linux & hping3 для моделирования атаки TCP SYN Flood
Однако, для того, чтобы провести аудит безопасности и проверить, можете ли вы обнаружить этот тип DoS-атаки, прежде всего вы должны научиться ее сами проводить. Пожалуй, самый простой способ достижения этой цели базируется на использовании дистрибутива Kali Linux, а точнее — программы hping3, популярного TCP-инструмента тестирования проникновения, включенного в набор Kali Linux.
Пользователи Linux в качестве альтернативной возможности могут установить инструментарий hping3 в свой существующий дистрибутив Linux с помощью следующей команды:
«# sudo apt-get install hping3»
Так как в большинстве случаев злоумышленники будут использовать генератор пакетов hping или другой инструментарий с подобной функциональностью для подмены реальных IP-адресов случайными, мы также обратим фокус нашего внимания на этот момент. Следующая строка позволяет нам начать и направить атаку TCP SYN Flood на нашу цель (192.168.1.159):
Рисунок 3. Реализация атаки TCP SYN Flood с помощью предустановленной программы hping3 дистрибутива Kali Linux.
А теперь давайте детально разберем приведенную чуть выше команду. Мы отправляем 15000 пакетов («-c 15000») размером 120 байт («-d 120») каждый. Мы также указываем, что флаг SYN («-S») должен быть включен, а размер TCP-окна имеет значение 64 («-w 64»). Чтобы направить атаку на HTTP-веб-сервер нашей жертвы, мы указываем порт 80 («-p 80») и используем флаг («—flood») для максимально быстрой отправки пакетов. Как вы, наверное, уже поняли, флаг («—rand-source») используется для генерирования поддельных IP-адресов, чтобы замаскировать реальный источник и избежать обнаружения, а также в то же самое время не дать системе злоумышленника получать ответные пакеты с установленными флагами SYN и ACK от сервера жертвы.
Использование Wireshark для идентификации атаки TCP SYN Flood
Теперь, когда мы научились моделировать атаку злоумышленников, мы можем попытаться обнаружить ее. Наиболее часто профессионалы выбирают для этих целей Wireshark. Для новичка при первом взгляде Wireshark может показаться довольно сложным инструментом. Однако он обладает рядом уникальных преимуществ, которых нет ни у одного другого инструментария, который вы можете использовать в качестве альтернативы для решения этой проблемы. Его функциональность подходит для решения огромного количества задач, он полностью бесплатный, с открытым исходным кодом и доступен на многих платформах.
Для лучшего иллюстрирования нашего руководства мы создали тестовую среду, в которой мы использовали ноутбук с установленным дистрибутивом Kali Linux для проведения атаки через сетевой коммутатор на стационарный компьютер под управлением ОС Windows 10. Несмотря на то, что подобная структура защищена намного хуже, чем многие корпоративные сети, для нашего тестового испытания это не имеет значения, так как злоумышленники могут реализовать подобные атаки после получения несанкционированного доступа и проникновения в сеть. Также как вы могли видеть из приведенной выше команды hping3 (детальнее смотрите на рисунке 3), мы использовали случайные IP-адреса, так как именно этот метод атаки TCP SYN Flood будут использовать опытные злоумышленники.
Осуществляемую атаку TCP SYN Flood довольно легко обнаружить, если вы знаете, что ищете. Ее начало администраторы сразу же должны идентифицировать по резко возросшему потоку TCP-трафика. Как и следовало ожидать, основным признаком именно этой атаки является огромное количество пакетов с флагом SYN, получаемых атакуемым сервером (в нашей тестовой демонстрации — ПК с Windows 10). При анализе трафика для их идентификации нам потребуются определенные фильтры. Так, мы можем отфильтровать трафик по полученным пакетам с установленным флагом SYN без последующего подтверждения (получения пакетов с установленным флагом ACK), используя следующий фильтр:
«tcp.flags.syn == 1 and tcp.flags.ack == 0»
Как вы можете убедиться, взглянув на рисунок 4, мы обнаружили большое количество TCP-пакетов с установленным флагом SYN без последующего подтверждения на запрос сервера, полученных с очень малой разницей во времени. Источники каждого такого SYN-пакета отличаются (все пакеты отправлены с различных IP-адресов), но все они имеют идентичный порт назначения 80 (HTTP), идентичную длину (120) и размер TCP окна (64). Если мы зададим фильтр «tcp.flags.syn == 1 and tcp.flags.ack == 1», то увидим, что количество полученных пар пакетов от клиентов (сразу с установленным флагом SYN, а затем — с флагом ACK) относительно небольшое (детальнее на рисунке 5). Это верный признак атаки TCP SYN Flood на вашу систему.
Мы также можем посмотреть графики Wireshark для визуального представления о росте трафика. График полученных/отправленных пакетов можно получить с помощью выбора меню «Statistics —> I/O Graph». Для нашего тестового примера этот график демонстрирует огромный всплеск количества пакетов от 0 до примерно 2400 пакетов в секунду (детально проиллюстрировано на рисунке 6).
Рисунок 6. Иллюстрация атаки TCP SYN Flood с помощью графика Wireshark.
Удалив наш фильтр и открыв статистические данные иерархии протоколов («Protocol hierarchy statistics»), мы также можем убедиться, что нами был зафиксирован необычно большой объем TCP-пакетов (детальнее на рисунке 7).
Рисунок 7. Иллюстрация атаки TCP SYN Flood с помощью статистических данных иерархии протоколов Wireshark.
Все приведенные нами в рамках данного руководства наблюдения за резким изменением показателей с большой долей вероятности указывают именно на обнаружение атаки TCP SYN Flood, оставляя очень мизерные шансы для другой интерпретации. Таким образом, используя Wireshark, мы можем убедиться в осуществлении противоправных действий с использованием трехстороннего рукопожатия по протоколу TCP со стороны злоумышленников против наших сетевых ресурсов, и вовремя принять меры для исправления ситуации.
Резюме
В рамках данного руководства мы показали, как в тестовых целях смоделировать атаку TCP SYN Flood с помощью дистрибутива Kali Linux (предустановленного инструментария hping3), а также как обнаружить эту DoS-атаку, используя фильтры и графики анализатора сетевых протоколов Wireshark, и своевременно принять меру для ее нейтрализации.
Появились вопросы или нужна консультация? Обращайтесь!