Высокопроизводительный набор инструментов для тестирования уязвимостей (D)DoS. Реализует различные векторы атак L4/7. Асинхронный подход к работе в сети помогает снизить требования к процессору и оперативной памяти при выполнении даже сложных сетевых взаимодействий.
ПРИМЕЧАНИЕ ? Инструментарий не имеет возможностей, необходимых для правильного тестирования производительности целевых серверов или сетей. Цель состоит в том, чтобы понять уровень защиты, выполняя атаки, специально разработанные для злоупотребления распространенными ловушками и обхода общих мер защиты.
ВНИМАНИЕ ❗ Не тестируйте инфраструктуру (серверы, веб-сайты, сетевые устройства и т. д.) без согласия владельца. Параметры пакета по умолчанию настроены так, чтобы избежать большого непреднамеренного воздействия при запуске тестов.
Вдохновлен проектом MHDDoS.
Из ПиПИ:
$ pip install fiberfox
Из источников:
$ git clone https://github.com/kachayev/fiberfox.git
$ cd fiberfox
$ python setup.py install
Создайте образ Docker:
$ git clone https://github.com/kachayev/fiberfox.git
$ cd fiberfox
$ docker build -t fiberfox .
Пример:
$ fiberfox
--targets tcp://127.0.0.1:8080 http://127.0.0.1:8081
--concurrency 512
--rpc 1024
--strategy STRESS
--duration-seconds 3600
--proxies-config ./proxies.txt
Функции:
--concurrency
(или -c
) определяет количество запускаемых асинхронных сопрограмм. Fiber не создает новый поток ОС, поэтому вы можете запускать множество из них с незначительными накладными расходами. Для векторов атак TCP количество волокон примерно соответствует максимальному количеству открытых TCP-соединений. Для UDP-атак использование слишком большого количества волокон обычно ухудшает производительность.SLOW
или CONNECTIONS
), обязательно настройте больше волокон, чем у вас есть цели.Дополнительная документация о флагах:
$ python fiberfox --help
usage: fiberfox [-h] [--targets [TARGETS ...]] [--targets-config TARGETS_CONFIG] [-c CONCURRENCY] [-s {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}] [--rpc RPC] [--packet-size PACKET_SIZE]
[-d DURATION_SECONDS] [--proxies [PROXIES ...]] [--proxies-config PROXIES_CONFIG] [--proxy-providers-config PROXY_PROVIDERS_CONFIG] [--log-level {DEBUG,INFO,ERROR,WARN}]
[--connection-timeout-seconds CONNECTION_TIMEOUT_SECONDS]
options:
-h, --help show this help message and exit
--targets [TARGETS ...]
List of targets, separated by spaces (if many)
--targets-config TARGETS_CONFIG
File with the list of targets (target per line). Both local and remote files are supported.
-c CONCURRENCY, --concurrency CONCURRENCY
Total number of fibers (for TCP attacks means max number of open connections)
-s {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}, --strategy {UDP,TCP,STRESS,BYPASS,CONNECTION,SLOW,CFBUAM,AVB,GET}
Flood strategy to utilize
--rpc RPC Number of requests to be sent to each connection
--packet-size PACKET_SIZE
Packet size (in bytes)
-d DURATION_SECONDS, --duration-seconds DURATION_SECONDS
How long to keep sending packets, in seconds
--proxies [PROXIES ...]
List of proxy servers, separated by spaces (if many)
--proxies-config PROXIES_CONFIG
File with a list of proxy servers (newline-delimited). Both local and remote files are supported.
--proxy-providers-config PROXY_PROVIDERS_CONFIG
Configuration file with proxy providers (following MHDDoS configuration file format). Both local and remote files are supported.
--reflectors-config REFLECTORS_CONFIG
File with the list of reflector servers (IP per line). Only required for amplification attacks. Both local and remote files are supported.
--log-level {DEBUG,INFO,ERROR,WARN}
Log level (defaults to INFO)
--connection-timeout-seconds CONNECTION_TIMEOUT_SECONDS
Proxy connection timeout in seconds (default: 10s)
Вектор атаки определяется опцией --strategy
при выполнении скрипта.
Примечание: пакет находится в активной разработке, в ближайшее время будут добавлены дополнительные методы.
Атаки L4 предназначены для атак на транспортные уровни и поэтому в основном используются для перегрузки пропускной способности сети. Требует минимальных знаний о цели.
Стратегия | Слой | Транспорт | Дизайн | Примечания |
---|---|---|---|---|
UDP | Л4 | UDP | Простой флуд: отправляет в цель случайно сгенерированные UDP-пакеты. | Автоматически регулирует оптоволокно при получении NO_BUFFER_AVAILABLE от сетевого устройства. Чтобы этого не произошло, не настраивайте более двух волокон на цель при тестировании атаки UDP-флуд. |
TCP | Л4 | TCP | Простой флуд: отправляет случайно сгенерированные TCP-пакеты RPC в открытое TCP-соединение. | Поддерживает настройку размера одного пакета и количества пакетов, отправляемых в каждое открытое соединение. |
CONNECTION | Л4 | TCP | Открывает TCP-соединения и поддерживает их работоспособность как можно дольше. | Чтобы быть эффективным, этот тип атаки требует большего количества волокон, чем обычно. Обратите внимание, что современные серверы довольно хорошо справляются с открытыми неактивными соединениями. |
Особый класс атак L4.
UDP — это протокол без установления соединения. Он не проверяет исходный IP-адрес, если явная обработка не выполняется на уровне приложения. Это означает, что злоумышленник может легко подделать дейтаграмму, включив в нее произвольный IP-адрес источника. Часто протокол приложения спроектирован таким образом, что генерируемый в ответ пакет намного больше, что создает эффект усиления (отсюда и название). Отправляя такую датаграмму на множество различных серверов (отражателей), злоумышленник может генерировать значительный трафик на целевое (жертвенное) устройство.
Реализованы атаки усиления:
Стратегия | Протокол | Коэффициент усиления | Уязвимость |
---|---|---|---|
RDP | Протокол удаленного рабочего стола (RDP) | ||
CLDAP | Упрощенный протокол доступа к каталогам без установления соединения (CLDAP) | 56 лет 70 | |
MEM | Мемкеш | от 10 000 до 50 000 | |
CHAR | Протокол генератора символов (CHARGEN) | 358,8 | Запрос на создание символов |
ARD | Удаленный рабочий стол Apple (ARD) | ||
NTP | Протокол сетевого времени (NTP) | 556,9 | ТА14-013А |
DNS | Система доменных имен (DNS) | от 28 до 54 | ТА13-088А |
Все атаки с усилением требуют предоставления списка серверов отражения.
Атаки L7 предназначены для злоупотребления слабыми местами в протоколах прикладного уровня или конкретными деталями реализации приложений (или ядер ОС). Как правило, более мощный, но может потребоваться знание того, как работает целевая система.
Стратегия | Слой | Транспорт | Дизайн | Примечания |
---|---|---|---|---|
GET | Л7 | TCP | Отправляет случайно сгенерированные HTTP-запросы GET через открытое TCP-соединение. | Не требует кода ответа HTTP 200 OK (поскольку он вообще не принимает ответ). Хотя атака, выполненная против балансировщика нагрузки или WAF, может быть неэффективной (по сравнению с TCP-флудом L4). |
STRESS | Л7 | TCP | Отправляет последовательность HTTP-запросов с большим телом через одно открытое TCP-соединение. | Чтобы максимизировать производительность, убедитесь, что целевой хост поддерживает конвейерную обработку (отправку нового запроса в рамках постоянного соединения без предварительного чтения ответа). Не требует кода ответа HTTP 200 OK (поскольку он вообще не обрабатывает ответ). Хотя атака, выполненная против балансировщика нагрузки или WAF, может быть неэффективной (по сравнению с TCP-флудом L4). |
BYPASS | Л7 | TCP | Отправляет HTTP-запросы на получение через открытое TCP-соединение и считывает ответ. | Чтение фрагментов выполняется путем recv байтов из соединения без анализа HTTP-ответа. |
SLOW | Л7 | TCP | Аналогично STRESS, выдает HTTP-запросы и пытается сохранить используемое соединение, считывая один байт и отправляя дополнительную полезную нагрузку с временными задержками между операциями отправки. | В идеале задержка времени должна быть настроена правильно, чтобы избежать сброса соединения партнером из-за таймаута чтения (зависит от настройки узла). |
CFBUAM | Л7 | TCP | Отправляет один HTTP GET, после длительной задержки отправляет больше запросов по тому же TCP-соединению. | |
AVB | Л7 | TCP | Выдает пакеты HTTP GET в открытое соединение с длительными задержками между операциями отправки. Чтобы избежать сброса соединения партнером из-за таймаута чтения, максимальная задержка установлена на 1 секунду. |
Настроив набор прокси-серверов, можно имитировать распределенную атаку даже при запуске инструментария с одной машины. Если прокси-серверы доступны, fiberfox
сначала подключается к ним и устанавливает соединения с целью с этих машин. Таким образом, система может обойти простейшие меры защиты от блокировки IP-адресов. Набор инструментов поддерживает протоколы HTTP/SOCKS4/SOCS5 и аутентификацию пользователя/пароля. Он также динамически управляет набором предоставленных прокси-серверов, чтобы избежать использования тех, которые не отвечают или не отвечают требованиям атаки.
При использовании прокси следует учитывать несколько соображений:
Успех проводимой сейчас атаки частично зависит от мощности прокси-серверов. Например, при использовании публичных прокси скорость сети может быть низкой, поскольку прокси переполнен. В этом случае рассмотрите возможность использования частной инфраструктуры или платных кластеров выделенных прокси-серверов.
Сами прокси-серверы могут смягчить некоторые направления атак. Например, при использовании подхода «медленного соединения» прокси-сервер можно настроить на регулирование или закрытие соединения. В каком-то смысле «защищая» цель тем самым. Помните о том, как настройка прокси-сервера влияет на механику атаки (сеть, протоколы и т. д.).
Одна из целей набора инструментов — предоставить комплексную информацию мониторинга для поиска уязвимостей.
Инструмент сообщает количество статистических данных для каждой цели: количество пакетов, трафик и скорость. Для атак на основе TCP (как L4, так и L7) он также сообщает гистограмму пакетов, отправленных в течение одного сеанса (под сеансом здесь подразумевается трафик, отправленный в рамках одного открытого соединения). В идеале гистограмма должна быть смещена влево. Это означает, что партнер закрывает соединение раньше, чем были отправлены пакеты «запросов на соединение». Если преимущественно справа, цель принимает то, что следует считать «мусорным трафиком».
Будьте осторожны с анализом. Низкая скорость сети, высокая частота попыток подключения, высокий уровень ошибок и многое другое. Все эти сигналы могут указывать как на тот факт, что цель остается сильной перед атакой, так и на то, что она уже мертва. Чтобы получить полное представление об уровне защиты, вам следует использовать информацию мониторинга на целевой стороне (например, способность правильно работать при вызове).
Обратите внимание, что исходящая скорость указана приблизительно. Измерение времени отправки каждого пакета включает в себя задержки планирования (для волокон) и выбор/объединение в пул. В большинстве случаев они незначительны. Однако будьте осторожны с анализом при работе более 10 тыс. волокон.
feature-*
чтобы начать вносить изменения. Выпуск под лицензией MIT. Полную лицензию см. в разделе ЛИЦЕНЗИЯ.
████
████▒▒██
████ ▒▒██
██▒▒ ▒▒▒▒▒▒██
██▒▒██ ██
████ ██▒▒██ ██
██▒▒▒▒██████ ██▒▒██ ▒▒ ████
██▒▒▒▒██ ████ ██████▒▒▒▒▒▒██ ▒▒▒▒██████████████
██▒▒ ████▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒████
██▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████
██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒██
████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ████▒▒▒▒▒▒▒▒▒▒ ██ ▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒██
██ ██ ████ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ██▒▒██ ▒▒ ▒▒▒▒▒▒▒▒▒▒██
██████████████████████▒▒▒▒██ ▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒██ ▒▒▒▒██
██▒▒▒▒ ██▒▒▒▒▒▒▒▒████ ▒▒▒▒██
██▒▒▒▒▒▒██▒▒▒▒▒▒██ ██ ██
██████▒▒▒▒▒▒██ ██ ████
██████ ██ ██████
██ ████
██████