Network Performance Monitoring (NPM) and Diagnostics | Application Performance Monitoring (APM) | Application-Aware Network Performance Monitoring (AA NPM) | Network Fault Management | Information Security | Network Security

Моделируем и определяем DoS атаку типа TCP SYN Flood при помощи Wireshark

Атака TCP SYN Flood

В рамках данного руководства мы расскажем вам о сути атаки 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.
  • Использование Kali Linux & hping3 для моделирования в тестовых целях атаки TCP SYN Flood.
  • Использование Wireshark для идентификации атаки TCP SYN Flood.

Принцип работы атаки TCP SYN Flood

Когда клиент пытается подключиться к серверу с использованием протокола TCP (например, при установлении HTTP- или HTTPS-соединения), он сразу должен пройти процедуру трехстороннего рукопожатия, прежде чем обмен данными между клиентом и сервером станет возможным. Поскольку инициатором трехстороннего рукопожатия TCP всегда является клиент, то он первым отправляет пакет с флагом SYN серверу.

Принцип работы атаки TCP SYN Flood

Рисунок 1. Трехстороннее рукопожатие TCP.

 

Получив такой SYN-пакет, сервер отвечает, подтверждая получение запроса и отправляя при этом свой собственный запрос SYN — пакет с установленными флагами SYN и ACK. Клиент, в свою очередь, получив пакет с подтверждением и запросом от сервера, отправляет серверу пакет с установленным флагом ACK, который подтверждает, что оба хоста согласны создать соединение. После такого «обмена рукопожатиями» соединение считается установленным, и данные могут передаваться между хостами. (Более детально об использовании протокола TCP при установке соединения и процедуре трехстороннего рукопожатия читайте здесь).

При проведении TCP SYN Flood атаки злоумышленники интенсивно отправляют серверу большое количество SYN-пакетов с поддельными IP-адресами. Это заставляет сервер реагировать, отправляя в ответ на каждый такой ложный запрос пакет SYN-ACK, выделяя часть ресурсов и оставляя свои порты «полуоткрытыми» в ожидании многочисленных ответов (пакетов с установленным флагом ACK) от хостов, которых на самом деле не существует, и подтверждений они, соответственно, отправлять не будут.

 

Принцип осуществления злоумышленником атаки TCP SYN Flood

Рисунок 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):

«# hping3 -c 15000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.1.159»

 

Использование Kali Linux & hping3 для моделирования атаки TCP SYN Flood

Рисунок 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»

Обнаружение атаки TCP SYN Flood с помощью Wireshark

Рисунок 4. Обнаружение атаки TCP SYN Flood с помощью Wireshark (фильтр: «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 для идентификации атаки TCP SYN Flood

Рисунок 5. Обнаружение атаки TCP SYN Flood с помощью Wireshark (фильтр: «tcp.flags.syn == 1 and tcp.flags.ack == 1»).

 

Мы также можем посмотреть графики Wireshark для визуального представления о росте трафика. График полученных/отправленных пакетов можно получить с помощью выбора меню «Statistics —> I/O Graph». Для нашего тестового примера этот график демонстрирует огромный всплеск количества пакетов от 0 до примерно 2400 пакетов в секунду (детально проиллюстрировано на рисунке 6).

 

Иллюстрация атаки TCP SYN Flood с помощью графика Wireshark

Рисунок 6. Иллюстрация атаки TCP SYN Flood с помощью графика Wireshark.

 

Удалив наш фильтр и открыв статистические данные иерархии протоколов («Protocol hierarchy statistics»), мы также можем убедиться, что нами был зафиксирован необычно большой объем TCP-пакетов (детальнее на рисунке 7).

 

Иллюстрация атаки TCP SYN Flood с помощью статистических данных иерархии протоколов Wireshark

Рисунок 7. Иллюстрация атаки TCP SYN Flood с помощью статистических данных иерархии протоколов Wireshark.

 

Все приведенные нами в рамках данного руководства наблюдения за резким изменением показателей с большой долей вероятности указывают именно на обнаружение атаки TCP SYN Flood, оставляя очень мизерные шансы для другой интерпретации. Таким образом, используя Wireshark, мы можем убедиться в осуществлении противоправных действий с использованием трехстороннего рукопожатия по протоколу TCP со стороны злоумышленников против наших сетевых ресурсов, и вовремя принять меры для исправления ситуации.

Резюме

В рамках данного руководства мы показали, как в тестовых целях смоделировать атаку TCP SYN Flood с помощью дистрибутива Kali Linux (предустановленного инструментария hping3), а также как обнаружить эту DoS-атаку, используя фильтры и графики анализатора сетевых протоколов Wireshark, и своевременно принять меру для ее нейтрализации.

 

Появились вопросы или нужна консультация? Обращайтесь!

Вечный параноик, Антон Кочуков.

Комментарии
Тут пока ничего нет, но Вы можете быть первым!
Авторизуйтесь для этого

См. также:
Заказать звонок

- Email
- Confirm
Имя *
Телефон *
Комментарий
Согласие на отправку персональных данных *

* - Обязательное для заполнения