Kit de ferramentas de teste de vulnerabilidade (D)DoS de alto desempenho. Implementa vários vetores de ataque L4/7. A abordagem assíncrona da rede ajuda a reduzir os requisitos de CPU/RAM ao mesmo tempo em que realiza interações de rede complexas.
OBSERVAÇÃO ? O kit de ferramentas não possui os recursos necessários para testes de desempenho adequados dos servidores ou redes de destino. O objetivo é compreender o nível de proteção, realizando ataques especialmente concebidos para abusar de armadilhas comuns e contornar medidas de proteção comuns.
AVISO ❗ Não teste infraestrutura (servidores, sites, dispositivos de rede, etc) sem o consentimento do proprietário. As configurações padrão do pacote são ajustadas para evitar um grande impacto não intencional ao executar testes.
Inspirado no projeto MHDDoS.
Do PyPI:
$ pip install fiberfox
Das fontes:
$ git clone https://github.com/kachayev/fiberfox.git
$ cd fiberfox
$ python setup.py install
Construir imagem Docker:
$ git clone https://github.com/kachayev/fiberfox.git
$ cd fiberfox
$ docker build -t fiberfox .
Exemplo:
$ 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
Características:
--concurrency
(ou -c
) define o número de corrotinas assíncronas a serem executadas. O Fiber não cria um novo thread de sistema operacional, então você pode executar muitos deles com uma sobrecarga insignificante. Para vetores de ataque TCP, o número de fibras corresponde aproximadamente ao número máximo de conexões TCP abertas. Para ataques UDP, a execução de muitas fibras normalmente piora o desempenho.SLOW
ou CONNECTIONS
), certifique-se de configurar mais fibras do que os alvos.Mais documentação sobre sinalizadores:
$ 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)
Um vetor de ataque é definido pela opção --strategy
ao executar o script.
Nota: o pacote está em desenvolvimento ativo, mais métodos serão adicionados em breve.
Os ataques L4 são projetados para atingir camadas de transporte e, portanto, são usados principalmente para sobrecarregar as capacidades da rede. Requer conhecimento mínimo do alvo.
Estratégia | Camada | Transporte | Projeto | Notas |
---|---|---|---|---|
UDP | L4 | UDP | Inundação simples: envia pacotes UDP gerados aleatoriamente para o alvo | Acelera automaticamente a fibra ao receber NO_BUFFER_AVAILABLE do dispositivo de rede. Para evitar que isso aconteça, não configure mais de 2 fibras por alvo ao testar o ataque de inundação UDP. |
TCP | L4 | TCP | Inundação simples: envia pacotes TCP RPC gerados aleatoriamente para uma conexão TCP aberta. | Suporta configuração do tamanho de um único pacote e do número de pacotes a serem enviados em cada conexão aberta. |
CONNECTION | L4 | TCP | Abre conexões TCP e as mantém ativas pelo maior tempo possível. | Para ser eficaz, este tipo de ataque requer um número maior de fibras do que o habitual. Observe que os servidores modernos são muito bons em lidar com conexões inativas abertas. |
Uma classe especial de ataques L4.
UDP é um protocolo sem conexão. Ele não valida o endereço IP de origem, a menos que o processamento explícito seja feito pela camada de aplicação. Isso significa que um invasor pode facilmente falsificar o datagrama para incluir um endereço IP de origem arbitrário. Muitas vezes o protocolo de aplicação é projetado de forma que o pacote gerado em resposta seja muito maior, o que cria um efeito de amplificação (daí o nome). Ao enviar esse datagrama para vários servidores (refletores) diferentes, o invasor pode gerar tráfego significativo para o dispositivo alvo (vítima).
Ataques de amplificação implementados:
Estratégia | Protocolo | Fator de Amplificação | Vulnerabilidade |
---|---|---|---|
RDP | Protocolo de área de trabalho remota (RDP) | ||
CLDAP | Protocolo leve de acesso a diretórios sem conexão (CLDAP) | 56 anos 70 | |
MEM | Memcached | 10.000 a 50.000 | |
CHAR | Protocolo Gerador de Caracteres (CHARGEN) | 358,8 | Solicitação de geração de caracteres |
ARD | Área de trabalho remota da Apple (ARD) | ||
NTP | Protocolo de tempo de rede (NTP) | 556,9 | TA14-013A |
DNS | Sistema de Nomes de Domínio (DNS) | 28 a 54 | TA13-088A |
Todos os ataques de amplificação exigem o fornecimento de uma lista de servidores de reflexão.
Os ataques L7 são projetados para abusar de pontos fracos nos protocolos da camada de aplicação ou em detalhes específicos de implementação de aplicativos (ou kernels do sistema operacional). Geralmente mais poderoso, mas pode exigir conhecimento de como funciona o sistema alvo.
Estratégia | Camada | Transporte | Projeto | Notas |
---|---|---|---|---|
GET | L7 | TCP | Envia solicitações HTTP GET geradas aleatoriamente por meio de uma conexão TCP aberta | Não requer código de resposta HTTP 200 OK (pois não consome nenhuma resposta). Embora o ataque executado contra o balanceador de carga ou WAF possa não ser eficaz (em comparação com a inundação TCP L4). |
STRESS | L7 | TCP | Envia uma sequência de solicitações HTTP com um corpo grande em uma única conexão TCP aberta. | Para maximizar o desempenho, certifique-se de que o host de destino permite pipeline (enviar uma nova solicitação em uma conexão persistente sem ler a resposta primeiro). Não requer código de resposta HTTP 200 OK (pois não consome a resposta). Embora o ataque executado contra o balanceador de carga ou WAF possa não ser eficaz (em comparação com a inundação TCP L4). |
BYPASS | L7 | TCP | Envia solicitações HTTP get por meio de uma conexão TCP aberta e lê a resposta de volta. | A leitura fragmentada é executada por bytes recv da conexão, sem análise na resposta HTTP. |
SLOW | L7 | TCP | Da mesma forma que o STRESS, emite solicitações HTTP e tenta manter a conexão utilizada, lendo um único byte e enviando carga útil adicional com atrasos entre as operações de envio. | Idealmente, o atraso de tempo deve ser configurado corretamente para evitar que a conexão seja redefinida pelo peer devido ao tempo limite de leitura (depende da configuração do peer). |
CFBUAM | L7 | TCP | Envia um único HTTP GET, após um longo atraso emite mais solicitações pela mesma conexão TCP. | |
AVB | L7 | TCP | Emite pacotes HTTP GET em uma conexão aberta com longos atrasos entre as operações de envio. Para evitar que a conexão seja redefinida pelo peer devido ao tempo limite de leitura, o atraso máximo é definido como 1 segundo. |
Ao configurar um conjunto de servidores proxy, é possível simular um ataque distribuído mesmo ao executar o kit de ferramentas em uma única máquina. Quando proxies estão disponíveis, fiberfox
se conecta a eles primeiro e estabelece conexões com o destino a partir dessas máquinas. Ao fazer isso, o sistema pode contornar as medidas mais simples de proteção contra bloqueio de IP. O kit de ferramentas suporta protocolos HTTP/SOCKS4/SOCS5 e autenticação de usuário/senha. Ele também gerencia dinamicamente um conjunto de proxies fornecidos para evitar o uso daqueles que não respondem ou não atendem aos requisitos de ataque.
Existem algumas considerações ao usar proxies que você deve ter em mente:
O sucesso do ataque realizado agora depende parcialmente da capacidade dos servidores proxy. Por exemplo, ao usar proxies públicos, a taxa de rede pode ser baixa porque o proxy está superlotado. Neste caso, considere usar infraestrutura privada ou clusters pagos de servidores proxy dedicados.
Os próprios servidores proxy podem mitigar alguns vetores de ataque. Por exemplo, ao usar a abordagem de "conexão lenta", o servidor proxy pode ser configurado para limitar ou fechar a conexão. De certa forma, “protegendo” o alvo ao fazê-lo. Esteja ciente de como a configuração do proxy intervém na mecânica do ataque (rede, protocolos, etc.).
Um dos objetivos do kit de ferramentas é fornecer informações abrangentes de monitoramento para orientar a pesquisa de vulnerabilidades.
A ferramenta informa o número de estatísticas por cada alvo: número de pacotes, tráfego e taxa. Para ataques baseados em TCP (L4 e L7), ele também relata um histograma de pacotes enviados em uma única sessão (sessão aqui significa tráfego enviado em uma única conexão aberta). Idealmente, o histograma deve ser inclinado para o lado esquerdo. Isso significa que o par fecha a conexão antes do envio dos pacotes de "solicitações por conexão". Se estiver principalmente à direita, o alvo aceita o que deveria ser considerado “tráfego de lixo”.
Tenha cuidado com a análise. Baixa taxa de rede, alta frequência de tentativas de conexão, alta taxa de erros e muito mais. Todos esses sinais podem indicar tanto o fato de que o alvo permanece forte diante do ataque quanto de que já está morto. Para obter uma compreensão completa do nível de proteção, você deve usar informações de monitoramento do lado alvo (por exemplo, capacidade de funcionar corretamente quando for desafiado).
Observe que a taxa de saída é mostrada aproximadamente. A medição do tempo para envio de cada pacote inclui atrasos de agendamento (para fibras) e seleção/pooling. Na maioria dos casos, estes são negligenciáveis. Porém, tenha cuidado com a análise ao executar fibras de 10k+.
feature-*
branch para começar a fazer suas alterações. Liberação sob a licença do MIT. Consulte LICENÇA para obter a licença completa.
████
████▒▒██
████ ▒▒██
██▒▒ ▒▒▒▒▒▒██
██▒▒██ ██
████ ██▒▒██ ██
██▒▒▒▒██████ ██▒▒██ ▒▒ ████
██▒▒▒▒██ ████ ██████▒▒▒▒▒▒██ ▒▒▒▒██████████████
██▒▒ ████▒▒▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒████
██▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████
██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒████▒▒▒▒▒▒▒▒██
████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒████▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ▒▒██████▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ██▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ████▒▒▒▒▒▒▒▒▒▒ ██ ▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒██
██ ██ ████ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██ ██▒▒██ ▒▒ ▒▒▒▒▒▒▒▒▒▒██
██████████████████████▒▒▒▒██ ▒▒▒▒▒▒██
██▒▒ ██▒▒▒▒▒▒▒▒██ ▒▒▒▒██
██▒▒▒▒ ██▒▒▒▒▒▒▒▒████ ▒▒▒▒██
██▒▒▒▒▒▒██▒▒▒▒▒▒██ ██ ██
██████▒▒▒▒▒▒██ ██ ████
██████ ██ ██████
██ ████
██████