В блоге Solar 4RAYS мы уже публиковали статью с описанием утилиты для осуществления DDoS-атак под названием Gorgon Stress. С тех пор авторами было опубликовано две новых версии. Последняя на момент этой публикации - 1.9.9.8.2.

Пост в Telegram с версией 1.9.9.8 сопровождается комментарием, который содержит некоторую информацию о внесенных изменениях, а подытоживает это намек на то, что, вероятно, была добавлена некая функциональность, позволяющая бороться со средствами противодействия DDoS и осуществлять более эффективные атаки.

Пост с новой версией
Пост с новой версией

В подтверждение своих слов злоумышленники сразу же опубликовали еще один пост со скриншотами, демонстрирующими успешную DDoS-атаку на сайт, который при этом находился под защитой Anti-DDoS-решения. Наше внимание привлекает изображение веб-интерфейса Gorgon, на котором можно “подглядеть” конфигурацию атаки. Видно, что злоумышленники используют HTTP Flood на эндпоинт /search, в котором в качестве аргумента keyword используется шаблон MIX. Этот эндпоинт выбран не случайно, так как при переходе на него происходит обращение к базе данных, что создает дополнительную нагрузку на ресурс. Шаблон MIX генерирует случайные строки, состоящие из чисел и символов, таким образом рандомизируя параметр keyword, позволяя генерировать непохожие друг на друга HTTP-запросы. Подобный подход потенциально мог бы усложнить работу механизмов фильтрации трафика.

Параметры атаки
Параметры атаки


В очередной раз заглянем в глаза Горгоне

Анализ содержимого .deb пакета

В новой версии была слегка изменена структура .deb пакета. В файле control закомментирована строка с зависимостями, а исполняемый файл tor поставляется теперь вместе с файлом gorgon. Вероятно, разработчики сделали это для устранения ненужных зависимостей.

Package: gorgon-stress
Version: 1.9.9.8
Section: base
Priority: optional
Architecture: all
#Depends: tor,xvfb,openjdk-11-jre
Maintainer: Your Name <your@email.com>
Description: stress application

Пропал также файл torrc с пулом портов. Для каждого инстанса генерируется свой torrc с именем в формате “torrc_instance_%d”. Файл конфигурации пополнился поддержкой новых параметров. Стек tor был расширен, теперь в утилите есть возможность более тонкой настройки инстансов.

Список параметров
Список параметров

Был добавлен файл с расширением .sig (он используется для проверки целостности исполняемого файла). Изменен файл конфигурации по умолчанию:

  
{
"listen": "0.0.0.0:777",
"login": "admin",
"password": "admin1234",
"server": true,
"worker": true,
"serverurl": "http://127.0.0.1:777",
"tickerinterval": 5,
"lunaproxyAppKey" : "",
"lunaproxyNeek" : "",
"torNumPortsPerInstance": 10,
"torNumInstances" : 10,
"identityRenewalInterval": 900000000000,
"exitNodes": [],
"excludeNodes": ["RU", "BY", "CN"]
}    

Добавлены два новых поля - exitNodes и excludeNodes. Об их назначении можно догадаться из названия: они касаются выходных узлов сети tor (эти параметры пробрасываются в генерируемые torrc_instance_%d файлы). Параметр excludeNodes исключает узлы, относящиеся к списку стран. В свою очередь, exitNodes позволяет выбирать предпочтительные и фильтровать выходные узлы по странам. Ранее этой возможности в утилите не было. Это сделано для более тонкой кастомизации. Геоблок создавал препятствие для атакующих, и теперь они могут настраивать, в каких именно странах выходные узлы будут использоваться.


Технический анализ исполняемого файла

В самом исполняемом файле была добавлена выборочная обфускация символов (символы подключаемых модулей обфусцированы не были), что может в некоторой степени замедлить анализ.


Веб-интерфейс

Структура веб-интерфейса не изменилась, однако был изменен файл index.html:

1. Метод атаки WSL7.

WebSocket
WebSocket

В списке видов атак появился новый метод - Flood WS (WSL7). Далее дается пояснение:
Flood HTTP/WS - Executes a high-volume request attack, overwhelming the web server with an excessive number of requests in a short period.

2. ProxyProtocol. Актуально только для HTTP Flood. Пока что в списке есть лишь значения none и TCP4 (TCP over IPv4).

ProxyProtocol
ProxyProtocol

3. В описание шаблонизатора добавлены значения MIX (случайные символы заданной длины), DATE (дата в заданном формате), HASH (случайный хеш заданного вида, например, MD5).


Лицензирование

Утилита все еще предоставляется на основе лицензии. Бесплатная версия имеет ограниченные возможности и позволяет атаковать только российские ресурсы, исключая возможности атак этим инструментом на ресурсы других стран.

Механизм проверки лицензии тоже был слегка изменен. В утилиту была добавлена проверка целостности исполняемого файла. Для этого используется файл .sig, который лежит в .deb пакете. Сначала Gorgon высчитывает SHA512 от своего содержимого, а потом пытается валидировать с тем, что находится в цифровой подписи. Также увеличилось и число проверок лицензии в различных местах. Создавая такой механизм, разработчики пытались предотвратить возможность несанкционированного изменения файла для обхода механизма проверки лицензии. Насколько это эффективно - большой вопрос.

Эффективное решение
Эффективное решение

Какие изменения в типах атак?

В данном разделе будут описаны лишь те типы атак, которые подверглись изменениям и  на которые стоит обратить внимание.


SSH Flood

Добавлен выбор случайной строки клиента из перечисленных:

  
SSH-2.0-OpenSSH_8.2p1
SSH-2.0-libssh2_1.8.0
SSH-2.0-WolfSSH_1.4.0
SSH-2.0-FTPShell_6.87
SSH-2.0-Maverick_SSHD
SSH-2.0-WolfSSH_1.4.2
SSH-2.0-WolfSSH_1.3.0
SSH-2.0-WolfSSH_1.5.0
SSH-2.0-FTPShell_7.12
SSH-2.0-FTPShell_7.11
SSH-2.0-TinySSH_1.0.1
SSH-2.0-TinySSH_1.0.2
SSH-2.0-TinySSH_2.0.0
SSH-2.0-Netmiko_2.2.0
SSH-2.0-Netmiko_2.3.0
SSH-2.0-Netmiko_3.0.0
SSH-2.0-Freessh_1.2.8
SSH-2.0-Termius_4.9.4
SSH-2.0-Termius_5.1.0
SSH-2.0-NCR_SSH_1.0.1
SSH-2.0-NCR_SSH_1.2.3

Пример запроса
Пример запроса

DNS:UDP

Данный тип атаки удален из исполняемого файла.


HTTP Flood

Добавлена поддержка протокола PROXY protocol (с описанием можно ознакомиться тут). IP-источник генерируется случайным образом. Потенциально это может ввести в заблуждение средства защиты или веб-сервер (они могут принять этот IP за настоящий).

Вот так эти запросы видит NGINX.

Пример запроса
Пример запроса

Иногда можно видеть тело самого запроса.

Пример запроса
Пример запроса

Запросы без PROXY protocol сервер показывает штатным образом.

Пример запроса
Пример запроса

Вот так это выглядит на стороне сервера (url в данном примере генерируется с помощью шаблона MIX):

  
ЗАПРОС1:
PROXY TCP4 248.113.176.249 [SERVER] 17413 443
GET /gVE HTTP/1.1
Host: [SERVER]
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 13_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: da-DK;q=0.6
Connection: keep-alive
DNT: 1
Upgrade-Insecure-Requests: 1
Cache-Control: no-cache
X-Forwarded-For: 248.113.176.249
Referer: https://ya.r

ЗАПРОС2:
u/search/

PROXY TCP4 78.201.45.202 [SERVER] 18128 443
GET /HGUh HTTP/1.1
Host: [SERVER]
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: tr-TR;q=0.5
Connection: keep-alive
DNT: 1
Upgrade-Insecure-Requests: 1
Cache-Control: no-cache
X-Forwarded-For: 78.201.45.202
Referer: https://ya.ru/sear


WSL7 (Websocket Flood)

Флуд upgrade запросами. Gorgon генерирует множество запросов вида:


GET / HTTP/1.1
Host: [SERVER]
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: 2b1MmC7KTg+awaqioM+4JQ==
Origin: https://: [SERVER_IP]:8010  

Это запрос на начало коммуникации по протоколу websocket. Значение Sec-WebSocket-Key это base64 от случайно сгенерированной последовательности байт. Сервер отвечает “Switching Protocols”, однако дальнейшего взаимодействия не происходит.

  
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: WWdJfwT2TE4lNbiTG860ZbYHJWQ=    



Выводы

Хактивизм на постсоветском пространстве продолжает набирать обороты, поэтому следует более тщательно следить за публикуемыми в открытом доступе утилитами, такими как Gorgon Stress.

В ходе анализа новых версий были выявлены некоторые изменения. Защитникам стоит обратить особое внимание на использование в HTTP Flood PROXY protocol, так как это потенциально может ввести в заблуждение защитные решения. Заслуживает отдельного внимания и возможность тонкой настройки HTTP-запросов (которая присутствовала и в предыдущих версиях, но была частично расширена добавлением нового шаблона), что позволяет делать каждый запрос уникальным. Что касается каких-либо других специфических методик обхода таких решений — у нас нет оснований полагать, что Gorgon Stress обладает подобной функциональностью.